From e8534584659585441056b3b9758f78d75e9e8f57 Mon Sep 17 00:00:00 2001 From: Gautier WOJDA Date: Sat, 21 Jan 2017 18:42:42 +0100 Subject: [PATCH] modif des termcaps : nouvelle version avec ajout/suppr/del/mouv par ligne (option fleche haut/fleche bas)/ home/end qui fonctionne. --- 42sh/includes/ft_readline.h | 18 +-- 42sh/src/line-editing/get_touch.c | 22 +--- 42sh/src/line-editing/get_touch_toolz.c | 17 +-- 42sh/src/line-editing/get_touch_toolz_2.c | 110 +++++++++-------- 42sh/src/line-editing/move_to_line.c | 114 +++++++++-------- 42sh/src/line-editing/print_and_del.c | 142 +++++----------------- 42sh/src/line-editing/tool_line.c | 60 +++++++++ 42sh/src/line-editing/tool_line_2.c | 26 ++++ 42sh/src/line-editing/toolz.c | 16 +-- 42sh/src/line-editing/toolz_parseur.c | 88 ++++++++++---- 42sh/src/line-editing/toolz_termcaps.c | 2 +- 11 files changed, 321 insertions(+), 294 deletions(-) create mode 100644 42sh/src/line-editing/tool_line.c create mode 100644 42sh/src/line-editing/tool_line_2.c diff --git a/42sh/includes/ft_readline.h b/42sh/includes/ft_readline.h index 550c1959..6f3cb1b2 100644 --- a/42sh/includes/ft_readline.h +++ b/42sh/includes/ft_readline.h @@ -6,7 +6,7 @@ /* By: sbenning +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/08 18:02:25 by sbenning #+# #+# */ -/* Updated: 2017/01/20 17:35:02 by gwojda ### ########.fr */ +/* Updated: 2017/01/20 19:08:51 by gwojda ### ########.fr */ /* */ /* ************************************************************************** */ @@ -58,7 +58,16 @@ typedef struct s_list_history struct s_list_history *next; } t_list_history; -int ft_is_next_char(char *str, char c); +void ft_get_beggin_with_curs(char *str, size_t *pos); +void ft_history(char **str, int ret, t_list_history **head, size_t *pos); +void ft_suppr(char **str, size_t *i); +void ft_del(char **str, size_t *i); +void ft_current_str(char *str, size_t pos); +int ft_strlen_next(char *str, size_t pos); +void ft_putall_current_str(char *str, size_t *pos); +void ft_get_next_str(char *str, size_t *pos); +void ft_get_beggin(char *str, size_t *pos); + long long ft_pow(int nbr, int power); char *ft_strndup(char const *s, int n); char *ft_strdupi(char const *s); @@ -83,10 +92,6 @@ void ft_init_line(void); void ft_read_it(int input, size_t *pos, char **str); void ft_check_quotes(char **s, t_list_history *head); int ft_check_quotes_num(char *s); -void ft_del_2(char **str, size_t *i); -void ft_del_1(char **str, size_t *i); -void ft_suppr_2(char **str, size_t *i); -void ft_suppr_1(char **str, size_t *i); void ft_print(char **str, int ret, size_t *i); void ft_move_to_line(int ret, size_t *pos, char *str); void ft_get_head(t_list_history **head); @@ -96,7 +101,6 @@ void ft_curse_move(char *str); void ft_move_suppr(char *str, size_t pos); void ft_move_dell(char *str, size_t pos); void ft_move_to_word(int ret, size_t *pos, char *str); -void ft_history(char **str, int ret, t_list_history **head); void ft_move_term(int ret, size_t *pos, char *str); void ft_move_left(size_t pos, char *str); void ft_home_end(char *str, int ret, size_t *pos); diff --git a/42sh/src/line-editing/get_touch.c b/42sh/src/line-editing/get_touch.c index d1d46075..958eba94 100644 --- a/42sh/src/line-editing/get_touch.c +++ b/42sh/src/line-editing/get_touch.c @@ -6,7 +6,7 @@ /* By: gwojda +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/19 16:28:49 by gwojda #+# #+# */ -/* Updated: 2017/01/19 16:42:49 by gwojda ### ########.fr */ +/* Updated: 2017/01/21 11:12:55 by gwojda ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,19 +15,9 @@ static int ft_lecture_3(int ret, char **str, size_t *i) { if (ret == 127 && (*i) > 0) - { - if ((*str)[*i - 1] != '\n') - ft_suppr_1(str, i); - else - ft_suppr_2(str, i); - } + ft_suppr(str, i); else if (ret == TOUCHE_DELETE && (*str) && (*i) < ft_strlen((*str))) - { - if ((*str)[*i] != '\n') - ft_del_1(str, i); - else - ft_del_2(str, i); - } + ft_del(str, i); else return (0); return (1); @@ -69,11 +59,9 @@ char *ft_lecture(t_list_history *head) continue ; else if (ret == FLECHE_BAS || ret == FLECHE_HAUT) { + ft_history(&str, ret, &head, &i); if (str) - ft_putstr(str + i); - ft_history(&str, ret, &head); - if (str) - i = ft_strlen(str); + i = ft_strlen_next(str, i); else i = 0; } diff --git a/42sh/src/line-editing/get_touch_toolz.c b/42sh/src/line-editing/get_touch_toolz.c index 8a715fcc..cd304a95 100644 --- a/42sh/src/line-editing/get_touch_toolz.c +++ b/42sh/src/line-editing/get_touch_toolz.c @@ -6,17 +6,20 @@ /* By: gwojda +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/19 16:42:54 by gwojda #+# #+# */ -/* Updated: 2017/01/19 16:42:45 by gwojda ### ########.fr */ +/* Updated: 2017/01/21 11:40:51 by gwojda ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" -static void ft_history_2(char **str, int ret, t_list_history **head) +void ft_history_2(char **str, int ret, t_list_history **head, size_t *pos) { if (*str) { - ft_curse_move(*str); + --(*pos); + ft_get_beggin_with_curs(*str, pos); + ft_puttermcaps("cd"); + *pos = 0; ft_strdel(str); } if (ret == FLECHE_BAS) @@ -28,15 +31,15 @@ static void ft_history_2(char **str, int ret, t_list_history **head) else *str = ft_strdup((*head)->str); if (*str) - ft_putstr(*str); + ft_current_str(*str, *pos); } } -void ft_history(char **str, int ret, t_list_history **head) +void ft_history(char **str, int ret, t_list_history **head, size_t *pos) { if (!*head) return ; - ft_history_2(str, ret, head); + ft_history_2(str, ret, head, pos); if (ret == FLECHE_HAUT) { if ((*head)->prev) @@ -46,7 +49,7 @@ void ft_history(char **str, int ret, t_list_history **head) else *str = ft_strdup((*head)->str); if (*str) - ft_putstr(*str); + ft_current_str(*str, *pos); } } diff --git a/42sh/src/line-editing/get_touch_toolz_2.c b/42sh/src/line-editing/get_touch_toolz_2.c index 778ac3d4..265add6f 100644 --- a/42sh/src/line-editing/get_touch_toolz_2.c +++ b/42sh/src/line-editing/get_touch_toolz_2.c @@ -6,7 +6,7 @@ /* By: gwojda +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/19 16:43:58 by gwojda #+# #+# */ -/* Updated: 2017/01/19 16:42:41 by gwojda ### ########.fr */ +/* Updated: 2017/01/21 17:13:55 by gwojda ### ########.fr */ /* */ /* ************************************************************************** */ @@ -22,64 +22,60 @@ void ft_home_end(char *str, int ret, size_t *pos) { if (ret == TOUCHE_END && str) { - ft_putstr(str + *pos); - (*pos) = ft_strlen(str); + if (*pos) + { + --(*pos); + ft_get_beggin_with_curs(str, pos); + } + ft_puttermcaps("cd"); + while (str[*pos]) + ++(*pos); + ft_get_beggin(str, pos); + ft_current_str(str, *pos); + ft_get_next_str(str, pos); } else if (ret == TOUCHE_HOME) - ft_move_to_beggin(str, pos); -} - - -void ft_move_left(size_t pos, char *str) -{ - int i; - int nb; - int prompt_size; - - prompt_size = data_singleton()->line.prompt_size; - i = 1; - nb = ft_nb_last_line(str, pos - 1) + 3; - while (i < nb) { - ft_puttermcaps("nd"); - ++i; - } - if (!(pos - i) || i == 1) - { - while (--prompt_size + 3) - ft_puttermcaps("nd"); + if (*pos) + { + --(*pos); + ft_get_beggin_with_curs(str, pos); + if (str[*pos + 1] == '\n') + ft_puttermcaps("nd"); + } + ft_puttermcaps("cd"); + *pos = 0; + ft_current_str(str, *pos); + ft_get_next_str(str, pos); + if (!str[*pos]) + --(*pos); + ft_get_beggin_with_curs(str, pos); } } void ft_move_term(int ret, size_t *pos, char *str) { - int len; - int str_len; + size_t tmp; - len = 0; - str_len = 0; - if (ret == FLECHE_DROITE && str && ft_strlen(str) > *pos - && str[(*pos)] == '\n') + if (ret == FLECHE_DROITE && str && ft_strlen(str) > *pos) { - ft_puttermcaps("do"); - ++(*pos); - } - else if (ret == FLECHE_GAUCHE && *pos > 0 - && str[(*pos) - 1] == '\n') - { - ft_puttermcaps("up"); - --(*pos); - str_len = ft_nb_line(str, *pos - 1); - len = ft_get_size_prev(str, *pos - 1) - (ft_size_term() * str_len); - if (ft_get_ind_prev(str, *pos - 1) == 0) - len += data_singleton()->line.prompt_size + 2; - while (--len + 1) - ft_puttermcaps("nd"); - } - else if (ret == FLECHE_DROITE && str && ft_strlen(str) > *pos) - { - ft_putchar(str[*pos]); - ++(*pos); + if (str[*pos] == '\n') + { + tmp = *pos - 1; + ft_get_beggin_with_curs(str, &tmp); + ft_puttermcaps("cd"); + ++(*pos); + ft_current_str(str, *pos); + ft_get_next_str(str, pos); + if (!str[*pos]) + --(*pos); + ft_get_beggin_with_curs(str, pos); + } + else + { + ft_putchar(str[*pos]); + ++(*pos); + } if (ft_nb_last_line(str, *pos) == ft_size_term() - 1) { ft_putchar(' '); @@ -88,7 +84,19 @@ void ft_move_term(int ret, size_t *pos, char *str) } else if (ret == FLECHE_GAUCHE && *pos > 0) { - ft_puttermcaps("le"); - --(*pos); + if (str[*pos - 1] == '\n') + { + ft_puttermcaps("cd"); + (*pos) -= 2; + ft_get_beggin(str, pos); + ft_current_str(str, *pos); + ft_get_next_str(str, pos); + ++(*pos); + } + else + { + ft_puttermcaps("le"); + --(*pos); + } } } diff --git a/42sh/src/line-editing/move_to_line.c b/42sh/src/line-editing/move_to_line.c index ec451eae..17f154ca 100644 --- a/42sh/src/line-editing/move_to_line.c +++ b/42sh/src/line-editing/move_to_line.c @@ -6,7 +6,7 @@ /* By: gwojda +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/09 13:21:40 by gwojda #+# #+# */ -/* Updated: 2017/01/19 16:43:01 by gwojda ### ########.fr */ +/* Updated: 2017/01/21 17:29:08 by gwojda ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,77 +14,73 @@ static void ft_up(size_t *pos, char *str) { - int i; - int j; - int len; - int tmp; - int size_window; + int i; + int len; - size_window = ft_size_term(); i = 0; - len = 0; - j = 0; - if (!*pos) - return ; - while (len < size_window && *pos - i) + if (str[*pos - 1] == '\n') { - if (i && str[*pos - i] == '\n') - { - ft_puttermcaps("up"); - tmp = ft_nb_last_line(str, *pos - 1 - i) + 3; - if (ft_get_ind_prev(str, *pos - 1 - i)) - tmp -= 2; - while (j < tmp - 1) - { - ft_puttermcaps("nd"); - ++j; - } - if (!ft_get_ind_prev(str, *pos - 1 - i)) - ft_putchar('\b'); - len += ft_size_term() - tmp; - } - else - { - ft_putchar('\b'); - len++; - } - i++; - } - if (!(*pos - i)) - { - (*pos) = 0; - return ; - } - if (j) - { - ft_puttermcaps("nd"); + ft_puttermcaps("cd"); + (*pos) -= 2; + ft_get_beggin(str, pos); + ft_current_str(str, *pos); + ft_get_next_str(str, pos); ++(*pos); } - *pos -= i; + else + { + len = ft_size_term(); + if (str[*pos - i] == '\n') + { + --len; + ft_puttermcaps("le"); + ++i; + } + while (*pos - i && str[*pos - i] != '\n' && --len + 1) + { + ft_puttermcaps("le"); + ++i; + } + if (str[*pos - i] == '\n') + { + ft_puttermcaps("nd"); + ++(*pos); + } + (*pos) -= i; + } } static void ft_down(size_t *pos, char *str) { - int len; - int size_window; - char boolean; + int i; + int len; - len = 0; - boolean = 0; - size_window = ft_size_term(); - while (str[*pos] && len < size_window) + i = 0; + if (str[*pos] == '\n') { - if (str[*pos] == '\n' && !boolean) + if (*pos) { - len += size_window - ft_nb_last_line(str, *pos - 1) - 2; - boolean = 1; + --(*pos); + ft_get_beggin_with_curs(str, pos); } - else if (str[*pos] == '\n' && boolean) - return ; - else - ++len; - ft_putchar(str[*pos]); - ++(*pos); + ft_puttermcaps("cd"); + ft_get_next_str(str, pos); + (*pos) += 2; + ft_current_str(str, *pos); + ft_get_next_str(str, pos); + if (!(str[*pos])) + --(*pos); + ft_get_beggin_with_curs(str, pos); + } + else + { + len = ft_size_term(); + while (str[i + *pos] && str[i + *pos] != '\n' && --len + 1) + { + ft_putchar(str[i + *pos]); + ++i; + } + *pos += i; } } diff --git a/42sh/src/line-editing/print_and_del.c b/42sh/src/line-editing/print_and_del.c index 513852b8..9d2e437c 100644 --- a/42sh/src/line-editing/print_and_del.c +++ b/42sh/src/line-editing/print_and_del.c @@ -6,12 +6,12 @@ /* By: gwojda +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/05 16:02:43 by gwojda #+# #+# */ -/* Updated: 2017/01/20 17:49:25 by gwojda ### ########.fr */ +/* Updated: 2017/01/21 16:57:38 by gwojda ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" -/* + void ft_print(char **str, int ret, size_t *i) { int j; @@ -25,128 +25,48 @@ void ft_print(char **str, int ret, size_t *i) } ft_putnc('\b', j - 1); ++(*i); -}*/ - -void ft_print(char **str, int ret, size_t *i) -{ - size_t len; - size_t tmp_len; - char boolean; - char boolean2; - - len = 0; - boolean = 0; - boolean2 = 0; - *str = ft_realloc_imput(*str, ret, *i); - tmp_len = ft_strlen(*str); - sleep(1); - ft_puttermcaps("cd"); - sleep(1); - if (ft_is_next_char(*str, '\n') && - ft_nb_last_line(*str, *i + 1) + (len % ft_size_term()) == ft_size_term() - 2) - { - sleep(1); - write(1, *str + *i, 1); - sleep(1); - ft_putnc(' ', ft_size_term()); - sleep(1); - write(1, *str + *i + 1, ft_strlen(*str + *i + 1)); - sleep(1); - ft_puttermcaps("up"); - boolean2 = 1; - } - else - write(1, *str + *i, ft_strlen(*str + *i)); - sleep(1); - ++(*i); - while ((*str)[*i + len] && (*str)[*i + len] != '\n') - ++len; - sleep(1); - if (len) - --len; -// if (ft_nb_last_line(*str, *i) + (len % ft_size_term()) == ft_size_term() - 1) -// { -// --(tmp_len); -// ft_move_to_beggin(*str, &tmp_len); -// boolean = 1; -// } -// else - ft_move_to_beggin(*str, &tmp_len); -// ft_printf("\n\n\n%d\n\n\n\n", ft_nb_last_line(*str, *i) + (len % ft_size_term()) ); - sleep(1); - - if (boolean2) - ft_puttermcaps("up"); - write(1, *str, *i); - if (boolean2) - ft_puttermcaps("do"); - sleep(1); - if (boolean) - ft_putstr(" \b"); } -void ft_suppr_1(char **str, size_t *i) +void ft_suppr(char **str, size_t *i) { - int j; + size_t tmp; - j = 0; - write(1, "\b", 1); - while (*((*str) + *i + j) && *((*str) + *i + j) != '\n') - { - ft_putchar(*((*str) + *i + j)); - ++j; - } --(*i); - write(1, " ", 1); - if (ft_nb_last_line(*str, *i) + j == ft_size_term() - 2) + tmp = *i; + *str = ft_remove_imput((*str), tmp); + ft_get_beggin_with_curs(*str, i); + ft_puttermcaps("cd"); + ft_current_str(*str, *i); + ft_get_next_str(*str, i); +/* if (ft_nb_last_line(*str, *i) == ft_size_term() - 2) { ft_puttermcaps("nd"); - ft_putnc('\b', j); + ft_putnc('\b', *i - tmp); } else - ft_putnc('\b', j + 1); - *str = ft_remove_imput((*str), (*i)); + ft_putnc('\b', *i - tmp + 1);*/ + ft_putnc('\b', *i - tmp); + (*i) = tmp; } -void ft_suppr_2(char **str, size_t *i) +void ft_del(char **str, size_t *i) { - int j; + size_t tmp; - j = 0; - ft_puttermcaps("up"); - ft_move_left(*i - 1, *str); - ft_puttermcaps("cd"); - ft_putstr(*str + *i); - ft_move_suppr(*str, *i); + tmp = *i; + *str = ft_remove_imput((*str), tmp); --(*i); - *str = ft_remove_imput((*str), (*i)); -} - -void ft_del_1(char **str, size_t *i) -{ - int j; - - j = 0; - while (*((*str) + *i + j + 1) && *((*str) + *i + j + 1) != '\n') - { - ft_putchar(*((*str) + *i + j + 1)); - ++j; - } - write(1, " ", 1); - if (ft_nb_last_line(*str, *i) + j == ft_size_term() - 2) - ft_putnc('\b', j); - else - ft_putnc('\b', j + 1); - (*str) = ft_remove_imput((*str), (*i)); -} - -void ft_del_2(char **str, size_t *i) -{ - int j; - - j = 1; + ft_get_beggin_with_curs(*str, i); ft_puttermcaps("cd"); - ft_putstr(*str + *i + 1); - ft_move_dell(*str, *i); - *str = ft_remove_imput((*str), (*i)); + ft_current_str(*str, *i); + ft_get_next_str(*str, i); +/* if (ft_nb_last_line(*str, *i) == ft_size_term() - 2) + { + ft_puttermcaps("nd"); + ft_putnc('\b', *i - tmp); + } + else + ft_putnc('\b', *i - tmp + 1);*/ + ft_putnc('\b', *i - tmp); + (*i) = tmp; } diff --git a/42sh/src/line-editing/tool_line.c b/42sh/src/line-editing/tool_line.c new file mode 100644 index 00000000..ac47c2f7 --- /dev/null +++ b/42sh/src/line-editing/tool_line.c @@ -0,0 +1,60 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* tool_line.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gwojda +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/01/20 18:20:23 by gwojda #+# #+# */ +/* Updated: 2017/01/21 17:04:13 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +void ft_get_beggin(char *str, size_t *pos) +{ + while ((*pos) && str[(*pos)] != '\n') + --(*pos); + if (str[(*pos)] == '\n') + ++(*pos); +} + +void ft_get_next_str(char *str, size_t *pos) +{ + while (str[(*pos)] && str[(*pos)] != '\n') + ++(*pos); + if (str[(*pos)] == '\n') + --(*pos); +} + +void ft_putall_current_str(char *str, size_t *pos) +{ + int len; + + len = 0; + ft_get_beggin(str, pos); + while (str[(*pos) + len] && str[(*pos) + len] != '\n') + ++len; + write(1, str + *pos, len); +} + +void ft_current_str(char *str, size_t pos) +{ + int len; + + len = 0; + while (str[pos + len] && str[pos + len] != '\n') + ++len; + write(1, str + pos, len); +} + +int ft_strlen_next(char *str, size_t pos) +{ + int len; + + len = 0; + while (str[pos + len] && str[pos + len] != '\n') + ++len; + return (len); +} diff --git a/42sh/src/line-editing/tool_line_2.c b/42sh/src/line-editing/tool_line_2.c new file mode 100644 index 00000000..f691a218 --- /dev/null +++ b/42sh/src/line-editing/tool_line_2.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* tool_line_2.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gwojda +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/01/20 19:07:52 by gwojda #+# #+# */ +/* Updated: 2017/01/21 16:52:48 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +void ft_get_beggin_with_curs(char *str, size_t *pos) +{ + while ((*pos) && str[(*pos)] != '\n') + { + --(*pos); + ft_puttermcaps("le"); + } + if (!*pos) + ft_puttermcaps("le"); + if (str[(*pos)] == '\n') + ++(*pos); +} diff --git a/42sh/src/line-editing/toolz.c b/42sh/src/line-editing/toolz.c index 2dbe2a05..c71ea256 100644 --- a/42sh/src/line-editing/toolz.c +++ b/42sh/src/line-editing/toolz.c @@ -6,26 +6,12 @@ /* By: gwojda +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/16 17:06:30 by gwojda #+# #+# */ -/* Updated: 2017/01/20 17:34:57 by gwojda ### ########.fr */ +/* Updated: 2017/01/20 18:54:46 by gwojda ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" -int ft_is_next_char(char *str, char c) -{ - int i; - - i = 0; - while (str[i]) - { - if (str[i] == c) - return (1); - ++i; - } - return (0); -} - void ft_putnc(char c, int n) { int i; diff --git a/42sh/src/line-editing/toolz_parseur.c b/42sh/src/line-editing/toolz_parseur.c index 55c1881c..963ad457 100644 --- a/42sh/src/line-editing/toolz_parseur.c +++ b/42sh/src/line-editing/toolz_parseur.c @@ -6,7 +6,7 @@ /* By: gwojda +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/16 16:14:46 by gwojda #+# #+# */ -/* Updated: 2017/01/19 16:43:19 by gwojda ### ########.fr */ +/* Updated: 2017/01/21 18:16:56 by gwojda ### ########.fr */ /* */ /* ************************************************************************** */ @@ -52,40 +52,76 @@ char *ft_remove_imput(char *str, size_t pos) return (new_str2); } -static int ft_found_prev_word_pos(char *str, size_t *pos) -{ - size_t tmp; - - tmp = *pos; - while ((tmp) && (str[tmp] == ' ' || str[tmp] == '\n')) - --tmp; - while ((tmp) && str[tmp] != ' ' && str[tmp] != '\n') - --tmp; - return (tmp); -} - void ft_found_prev_word(char *str, size_t *pos) { - size_t tmp; + int i; - tmp = *pos; - ft_move_to_beggin(str, pos); - *pos = tmp; - tmp = ft_found_prev_word_pos(str, pos); - write(1, str, tmp); - *pos = tmp; + i = 0; + if (!*pos) + return ; + if (str[*pos - 1] == '\n') + { + ft_puttermcaps("cd"); + ft_get_beggin(str, pos); + --(*pos); + ft_current_str(str, *pos); + ft_get_next_str(str, pos); + ++(*pos); + } + else + { + if (!(str[*pos - i] == '\n' || str[*pos - i] == ' ')) + { + ft_puttermcaps("le"); + --(*pos); + } + while (str[*pos - i] == '\n' || str[*pos - i] == ' ') + { + ft_puttermcaps("le"); + ++i; + } + while (*pos - i && str[*pos - i] != '\n' && str[*pos - i] != ' ') + { + ft_puttermcaps("le"); + ++i; + } + if (str[*pos - i] == '\n' || str[*pos - i] == ' ') + { + ft_puttermcaps("nd"); + ++(*pos); + } + (*pos) -= i; + } } void ft_found_next_word(char *str, size_t *pos) { - while (str[(*pos)] == ' ' || str[(*pos)] == '\n') + int i; + + i = 0; + if (str[*pos] == '\n') { - ft_putchar(str[(*pos)]); - ++(*pos); + sleep(1); + if (*pos) + { + --(*pos); + ft_get_beggin_with_curs(str, pos); + } + ft_puttermcaps("cd"); + ft_get_next_str(str, pos); + ft_current_str(str, *pos); + ft_get_next_str(str, pos); + (*pos) -= 2; + ft_get_beggin_with_curs(str, pos); + (*pos) += 2; } - while (str[(*pos)] && str[(*pos)] != ' ' && str[(*pos)] != '\n') + else { - ft_putchar(str[(*pos)]); - ++(*pos); + while (str[i + *pos] && str[i + *pos] != '\n' && str[i + *pos] != ' ') + { + ft_putchar(str[i + *pos]); + ++i; + } + *pos += i; } } diff --git a/42sh/src/line-editing/toolz_termcaps.c b/42sh/src/line-editing/toolz_termcaps.c index 28d558a0..d33c3d35 100644 --- a/42sh/src/line-editing/toolz_termcaps.c +++ b/42sh/src/line-editing/toolz_termcaps.c @@ -6,7 +6,7 @@ /* By: gwojda +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/08 12:35:11 by gwojda #+# #+# */ -/* Updated: 2017/01/20 18:03:59 by gwojda ### ########.fr */ +/* Updated: 2017/01/21 14:31:47 by gwojda ### ########.fr */ /* */ /* ************************************************************************** */