/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* main.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: lperrey +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2021/10/04 05:59:26 by lperrey #+# #+# */ /* Updated: 2021/10/07 07:20:04 by lperrey ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" // Macro RL_PROMPT_START_IGNORE == '\001' // Macro RL_PROMPT_END_IGNORE == '\002' #define TERM_RESET "\001\e[0m\002" #define TERM_BLACK "\001\e[0;30m\002" #define TERM_GRAY "\001\e[1;30m\002" #define TERM_RED "\001\e[0;31m\002" #define TERM_LIGHT_RED "\001\e[1;31m\002" #define TERM_GREEN "\001\e[0;32m\002" #define TERM_LIGHT_GREEN "\001\e[1;32m\002" #define TERM_BROWN "\001\e[0;33m\002" #define TERM_YELLOW "\001\e[1;33m\002" #define TERM_BLUE "\001\e[0;34m\002" #define TERM_LIGHT_BLUE "\001\e[1;34m\002" #define TERM_PURPLE "\001\e[0;35m\002" #define TERM_LIGHT_PURPLE "\001\e[1;35m\002" #define TERM_CYAN "\001\e[0;36m\002" #define TERM_LIGHT_CYAN "\001\e[1;36m\002" #define TERM_LIGHT_GRAY "\001\e[0;37m\002" #define TERM_WHITE "\001\e[1;37m\002" char *ft_strjoinfree_s1(char *s1, const char *s2) { char *str; str = ft_strjoin(s1, s2); free(s1); return (str); } char *ft_strjoinfree_s2(const char *s1, char *s2) { char *str; str = ft_strjoin(s1, s2); free(s2); return (str); } int main(int argc, char *argv[], char *envp[]) { char *prompt_base; char *prompt; char *line_input; char term_desc[2048]; char *term_type; int term_width; int term_height; int ret; //ft_putendl_arr_fd(envp, 1); //char *path = getenv("PATH"); (void)argc; (void)argv; (void)envp; term_type = getenv("TERM"); if (term_type == 0) ft_putstr_fd("Specify a terminal type with `setenv TERM '.\n", 2); ret = tgetent(term_desc, term_type); if (ret < 0) ft_putstr_fd("Could not access the termcap data base.\n", 2); if (ret == 0) ft_putstr_fd("Terminal type `%s' is not defined.\n", 2); term_height = tgetnum ("li"); term_width = tgetnum ("co"); /* Extract information that termcap functions use. */ /* temp = tgetstr ("pc", BUFFADDR); PC = temp ? *temp : 0; BC = tgetstr ("le", BUFFADDR); UP = tgetstr ("up", BUFFADDR); */ prompt_base = ft_strjoin(TERM_LIGHT_GREEN, getenv("USER")); prompt_base = ft_strjoinfree_s1(prompt_base, "@"); prompt_base = ft_strjoinfree_s1(prompt_base, getenv("NAME")); prompt_base = ft_strjoinfree_s1(prompt_base, TERM_RESET":"TERM_LIGHT_BLUE); prompt = malloc(1); line_input = NULL; while (1) { if (line_input) free(line_input); free(prompt); prompt = ft_strjoinfree_s2(prompt_base, getcwd(NULL, 0)); prompt = ft_strjoinfree_s1(prompt, TERM_RESET"& "); line_input = readline(prompt); if (line_input && *line_input) { if (!ft_strncmp(line_input, "exit", 5)) exit(EXIT_SUCCESS); else printf("echo: %s\n", line_input); } //rl_redisplay(); //rl_on_new_line(); } return (0); }