/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* c_keys.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: rbousset +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/14 17:19:27 by rbousset #+# #+# */ /* Updated: 2020/02/14 17:19:29 by rbousset ### ########lyon.fr */ /* */ /* ************************************************************************** */ #include #include #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(t_caps *tcaps) { int16_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 ((uint32_t)++i <= 13) tputs(tgetstr("nd", NULL), 1, ft_putchar); } else { while (--i >= 0) tputs(tgetstr("le", NULL), 1, ft_putchar); } tcaps->cpos = 0; return (1); } int16_t c_end_key(uint16_t size, 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 + 13)) tputs(tgetstr("nd", NULL), 1, ft_putchar); } else while (i++ < size) tputs(tgetstr("nd", NULL), 1, ft_putchar); tcaps->cpos = size; 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++; } else if (tcaps->cpos < len) { tputs(tgetstr("nd", NULL), 1, ft_putchar); tcaps->cpos++; } return (1); } int16_t c_key_left(uint32_t len, uint32_t plen, t_caps *tcaps) { int32_t pos; (void)len; 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--; } else if (tcaps->cpos >= 1) { tputs(tgetstr("le", NULL), 1, ft_putchar); tcaps->cpos--; } return (1); }