summaryrefslogtreecommitdiffstats
path: root/src/c_keys.c
diff options
context:
space:
mode:
authorJozanLeClerc <bousset.rudy@gmail.com>2020-11-02 15:08:38 +0100
committerJozanLeClerc <bousset.rudy@gmail.com>2020-11-02 15:08:38 +0100
commite0a74558be8d71054ae3c8e6afe8774fc1890b84 (patch)
tree57bc32451216e00fac58bd8f79eee12543badf56 /src/c_keys.c
parentNo more fixed int (diff)
download42-minishell-e0a74558be8d71054ae3c8e6afe8774fc1890b84.tar.gz
42-minishell-e0a74558be8d71054ae3c8e6afe8774fc1890b84.tar.bz2
42-minishell-e0a74558be8d71054ae3c8e6afe8774fc1890b84.tar.xz
42-minishell-e0a74558be8d71054ae3c8e6afe8774fc1890b84.tar.zst
42-minishell-e0a74558be8d71054ae3c8e6afe8774fc1890b84.zip
Caps files
Diffstat (limited to 'src/c_keys.c')
-rw-r--r--src/c_keys.c125
1 files changed, 125 insertions, 0 deletions
diff --git a/src/c_keys.c b/src/c_keys.c
new file mode 100644
index 0000000..e0f734c
--- /dev/null
+++ b/src/c_keys.c
@@ -0,0 +1,125 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* c_keys.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: rbousset <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/02/14 17:19:27 by rbousset #+# #+# */
+/* Updated: 2020/02/14 17:19:29 by rbousset ### ########lyon.fr */
+/* */
+/* ************************************************************************** */
+
+#include <term.h>
+#include <libft.h>
+
+#include "c_init.h"
+#include "c_utils.h"
+#include "m_prompt.h"
+
+int16_t
+ c_ctrl_l(char *line, t_caps *tcaps, t_msh *msh)
+{
+ tputs(tgetstr("cl", NULL), 1, ft_putchar);
+ m_prompt_psx(1, msh);
+ c_redraw_line(line, tcaps, msh);
+ return (1);
+}
+
+int16_t
+ c_home_key(uint32_t plen, t_caps *tcaps)
+{
+ uint32_t i;
+ int16_t j;
+
+ i = tcaps->cpos;
+ j = tcaps->lpos;
+ if (tcaps->cpos > 0 && j > 0)
+ {
+ i = 0;
+ while (--j > 0)
+ tputs(tgetstr("up", NULL), 1, ft_putchar);
+ tputs(tgetstr("cr", NULL), 1, ft_putchar);
+ while (++i <= plen)
+ tputs(tgetstr("nd", NULL), 1, ft_putchar);
+ }
+ else if (i >= 1)
+ {
+ while (--i >= 0)
+ tputs(tgetstr("le", NULL), 1, ft_putchar);
+ }
+ tcaps->cpos = 0;
+ tcaps->lpos = 1;
+ return (1);
+}
+
+int16_t
+ c_end_key(uint16_t size, uint32_t plen, t_caps *tcaps)
+{
+ uint16_t i;
+ uint16_t j;
+
+ i = tcaps->cpos;
+ j = tcaps->lpos;
+ if ((tcaps->cpos < size) && (j < tcaps->nlines))
+ {
+ i = 0;
+ while (j < tcaps->nlines)
+ {
+ tputs(tgetstr("do", NULL), 1, ft_putchar);
+ i += tcaps->ws.ws_col;
+ j++;
+ }
+ tputs(tgetstr("cr", NULL), 1, ft_putchar);
+ while (i++ < (size + plen))
+ tputs(tgetstr("nd", NULL), 1, ft_putchar);
+ }
+ else
+ while (i++ < size)
+ tputs(tgetstr("nd", NULL), 1, ft_putchar);
+ tcaps->cpos = size;
+ tcaps->lpos = tcaps->nlines;
+ return (1);
+}
+
+int16_t
+ c_key_right(uint32_t len, uint32_t plen, t_caps *tcaps)
+{
+ if ((((tcaps->cpos + plen + 1) % (tcaps->ws.ws_col)) == 0) &&
+ tcaps->cpos < len)
+ {
+ tputs(tgetstr("do", NULL), 1, ft_putchar);
+ tputs(tgetstr("cr", NULL), 1, ft_putchar);
+ tcaps->cpos++;
+ tcaps->lpos++;
+ }
+ else if (tcaps->cpos < len)
+ {
+ tputs(tgetstr("nd", NULL), 1, ft_putchar);
+ tcaps->cpos++;
+ }
+ return (1);
+}
+
+int16_t
+ c_key_left(uint32_t plen, t_caps *tcaps)
+{
+ int32_t pos;
+
+ pos = -1;
+ if (((tcaps->cpos + plen) % tcaps->ws.ws_col) == 0 &&
+ tcaps->cpos >= 1)
+ {
+ tputs(tgetstr("up", NULL), 1, ft_putchar);
+ while (++pos <= tcaps->ws.ws_col)
+ tputs(tgetstr("nd", NULL), 1, ft_putchar);
+ tcaps->cpos--;
+ tcaps->lpos--;
+ }
+ else if (tcaps->cpos >= 1)
+ {
+ tputs(tgetstr("le", NULL), 1, ft_putchar);
+ tcaps->cpos--;
+ }
+ return (1);
+}