heredoc - historique avec point d'exclamation - sortie plus propre avec control D - historique ne prend plus en compte deux commandes consecutives egales
This commit is contained in:
parent
12d069d26b
commit
86fc221cb4
9 changed files with 41 additions and 24 deletions
|
|
@ -6,7 +6,7 @@
|
|||
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/01/23 10:35:44 by gwojda #+# #+# */
|
||||
/* Updated: 2017/02/03 16:27:48 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/02/03 16:36:20 by gwojda ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -66,12 +66,12 @@
|
|||
# define SIZE_PROMPT_BRACKET 7
|
||||
# define SIZE_PROMPT_BSLASH 2
|
||||
|
||||
# define IS_QUOTES 1 << 0
|
||||
# define IS_BQUOTES 1 << 1
|
||||
# define IS_DQUOTES 1 << 2
|
||||
# define IS_ACCOLADE 1 << 3
|
||||
# define IS_BRACKET 1 << 4
|
||||
# define IS_BSLASH 1 << 5
|
||||
# define IS_QUOTES (1 << 0)
|
||||
# define IS_BQUOTES (1 << 1)
|
||||
# define IS_DQUOTES (1 << 2)
|
||||
# define IS_ACCOLADE (1 << 3)
|
||||
# define IS_BRACKET (1 << 4)
|
||||
# define IS_BSLASH (1 << 5)
|
||||
|
||||
# define HIST 1
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/02/02 15:17:28 by gwojda #+# #+# */
|
||||
/* Updated: 2017/02/02 16:43:15 by gwojda ### ########.fr */
|
||||
/* Updated: 2017/02/03 18:27:23 by gwojda ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -28,7 +28,10 @@ void ft_control_d(void)
|
|||
str = &data_singleton()->line.input;
|
||||
pos = &data_singleton()->line.pos;
|
||||
if (!(*str) || (*str)[0] == '\0')
|
||||
{
|
||||
ft_putstr("exit\n");
|
||||
builtin_exit(NULL, (char*[]){"exit", NULL}, NULL);
|
||||
}
|
||||
else if (*pos < ft_strlen(*str))
|
||||
ft_del();
|
||||
else
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2016/12/19 16:28:49 by gwojda #+# #+# */
|
||||
/* Updated: 2017/02/03 15:24:37 by gwojda ### ########.fr */
|
||||
/* Updated: 2017/02/03 18:00:09 by gwojda ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/01/24 15:52:34 by gwojda #+# #+# */
|
||||
/* Updated: 2017/02/02 16:09:42 by gwojda ### ########.fr */
|
||||
/* Updated: 2017/02/03 18:15:07 by gwojda ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -41,6 +41,8 @@ static void ft_check_heredoc_2(char **str, char *end)
|
|||
*str = ft_strjoin(*str, "\n");
|
||||
free(tmp);
|
||||
tmp = *str;
|
||||
data_singleton()->line.input = NULL;
|
||||
data_singleton()->line.pos = 0;
|
||||
tmp2 = ft_read_stdin();
|
||||
if (!ft_strcmp(end, tmp2))
|
||||
boolean = 1;
|
||||
|
|
@ -74,4 +76,5 @@ void ft_check_heredoc(char **str)
|
|||
if (!end)
|
||||
return ;
|
||||
ft_check_heredoc_2(str, end);
|
||||
free(end);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/01/25 11:39:47 by gwojda #+# #+# */
|
||||
/* Updated: 2017/02/03 11:57:07 by gwojda ### ########.fr */
|
||||
/* Updated: 2017/02/03 17:57:21 by gwojda ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -14,6 +14,7 @@
|
|||
|
||||
static int ft_history_parsing_4(char *str, int *i)
|
||||
{
|
||||
int tmp;
|
||||
if (!ft_strncmp("!!", str + *i, 2))
|
||||
{
|
||||
ft_realloc_str_history(&(data_singleton()->line.input), *i, 0, 2);
|
||||
|
|
@ -22,9 +23,10 @@ static int ft_history_parsing_4(char *str, int *i)
|
|||
}
|
||||
else if (ft_isdigit(str[(*i) + 1]))
|
||||
{
|
||||
tmp = ft_nbr_len(ft_atoi(str + *i + 1));
|
||||
ft_realloc_str_history(&(data_singleton()->line.input), *i,
|
||||
ft_atoi(str + (*i) + 1), ft_nbr_len(ft_atoi(str + *i + 1)) + 1);
|
||||
(*i) += ft_nbr_len(ft_atoi(str + *i + 1));
|
||||
(*i) += tmp;
|
||||
return (1);
|
||||
}
|
||||
return (0);
|
||||
|
|
@ -32,14 +34,16 @@ static int ft_history_parsing_4(char *str, int *i)
|
|||
|
||||
static int ft_history_parsing_3(char *str, int *i)
|
||||
{
|
||||
int tmp;
|
||||
if (ft_history_parsing_4(str, i))
|
||||
return (1);
|
||||
else if (str[*i + 1] == '-')
|
||||
else if (str[*i + 1] == '-' && ft_isdigit(str[*i + 2]))
|
||||
{
|
||||
tmp = ft_nbr_len(ft_atoi(str + *i + 2));
|
||||
ft_realloc_str_history(&(data_singleton()->line.input), *i,
|
||||
data_singleton()->line.list_size - ft_atoi(str + *i + 2),
|
||||
ft_nbr_len(ft_atoi(str + *i + 2)) + 2);
|
||||
(*i) += ft_nbr_len(ft_atoi(str + *i + 2) + 1);
|
||||
i += tmp;
|
||||
}
|
||||
else if (str[*i + 1] == '?')
|
||||
ft_realloc_str_history_3(&(data_singleton()->line.input), *i,
|
||||
|
|
@ -54,6 +58,7 @@ static int ft_history_parsing_3(char *str, int *i)
|
|||
|
||||
static void ft_history_parsing_2(void)
|
||||
{
|
||||
data_singleton()->line.pos = 0;
|
||||
data_singleton()->line.opt = data_singleton()->line.opt | HIST;
|
||||
ft_prompt();
|
||||
data_singleton()->line.input = ft_read_stdin();
|
||||
|
|
@ -74,7 +79,7 @@ void ft_history_parsing(void)
|
|||
str = data_singleton()->line.input;
|
||||
if (!str)
|
||||
return ;
|
||||
while (str[i])
|
||||
while (str && str[i])
|
||||
{
|
||||
if (str[i] == '!')
|
||||
{
|
||||
|
|
@ -82,6 +87,7 @@ void ft_history_parsing(void)
|
|||
if (!ft_history_parsing_3(str, &i))
|
||||
boolean = 0;
|
||||
}
|
||||
str = data_singleton()->line.input;
|
||||
++i;
|
||||
}
|
||||
if (boolean)
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/01/25 14:09:39 by gwojda #+# #+# */
|
||||
/* Updated: 2017/01/25 14:41:29 by gwojda ### ########.fr */
|
||||
/* Updated: 2017/02/03 17:03:23 by gwojda ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -40,7 +40,6 @@ void ft_realloc_str_history(char **str, size_t pos, int nb_his, int len)
|
|||
if (!*str)
|
||||
return ;
|
||||
new_str = ft_strndup(*str, pos);
|
||||
ft_printf("\n\npos = %d\n\n", len);
|
||||
new_str3 = ft_nget_histo(nb_his);
|
||||
if (new_str3)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2016/12/19 16:52:57 by gwojda #+# #+# */
|
||||
/* Updated: 2017/02/03 11:40:10 by gwojda ### ########.fr */
|
||||
/* Updated: 2017/02/03 18:24:47 by gwojda ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -52,8 +52,10 @@ void ft_read_it(int input, size_t *pos, char **str)
|
|||
{
|
||||
int j;
|
||||
char t[5];
|
||||
size_t pos_tmp;
|
||||
|
||||
j = 0;
|
||||
pos_tmp = *pos;
|
||||
if (input == TOUCHE_DELETE || input < 0 || input == 892427035 ||
|
||||
input == 126 || input == 993090331 || input == 925981467 ||
|
||||
input == 21298 || input == 892427035 || input == 8270395 ||
|
||||
|
|
@ -61,7 +63,9 @@ void ft_read_it(int input, size_t *pos, char **str)
|
|||
return ;
|
||||
ft_read_it_2(input, t);
|
||||
ft_read_it_3(str, t, pos, &j);
|
||||
// ft_current_str((*str) + (*pos) - j, *pos);
|
||||
// ft_get_next_str((*str) + (*pos) - j, pos);
|
||||
ft_putnc('\b', ft_strlen((*str)) - ((*pos)));
|
||||
*pos = pos_tmp;
|
||||
ft_current_str((*str), *pos);
|
||||
ft_get_next_str((*str), pos);
|
||||
ft_putnc('\b', *pos - (pos_tmp + j) + 1);
|
||||
*pos = (pos_tmp + j);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2016/12/15 14:19:48 by gwojda #+# #+# */
|
||||
/* Updated: 2017/02/03 16:23:38 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/02/03 18:36:18 by gwojda ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -86,7 +86,8 @@ int ft_readline(void)
|
|||
ft_putchar('\n');
|
||||
ft_check_heredoc(&data_singleton()->line.input);
|
||||
ft_history_parsing();
|
||||
if (data_singleton()->line.input)
|
||||
if (data_singleton()->line.input && (!data_singleton()->line.list_beg ||
|
||||
ft_strcmp(data_singleton()->line.list_beg->prev->str, data_singleton()->line.input)))
|
||||
{
|
||||
ft_push_back_history(&data_singleton()->line.list_beg,
|
||||
ft_create_history_list(data_singleton()->line.input));
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/01/20 18:20:23 by gwojda #+# #+# */
|
||||
/* Updated: 2017/02/01 15:27:31 by gwojda ### ########.fr */
|
||||
/* Updated: 2017/02/03 17:50:48 by gwojda ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -37,6 +37,7 @@ void ft_putall_current_str(char *str, size_t *pos)
|
|||
while (str[(*pos) + len] && str[(*pos) + len] != '\n')
|
||||
++len;
|
||||
write(1, str + *pos, len);
|
||||
ft_check_end_of_line(str, *pos + len);
|
||||
}
|
||||
|
||||
void ft_current_str(char *str, size_t pos)
|
||||
|
|
|
|||
Loading…
Reference in a new issue