diff options
author | JozanLeClerc <bousset.rudy@gmail.com> | 2020-11-02 15:08:38 +0100 |
---|---|---|
committer | JozanLeClerc <bousset.rudy@gmail.com> | 2020-11-02 15:08:38 +0100 |
commit | e0a74558be8d71054ae3c8e6afe8774fc1890b84 (patch) | |
tree | 57bc32451216e00fac58bd8f79eee12543badf56 /src/c_keys.c | |
parent | No more fixed int (diff) | |
download | 42-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.c | 125 |
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); +} |