From c111b8cbc7bc458b5000039793e11cb50d5f880c Mon Sep 17 00:00:00 2001 From: whaffman Date: Tue, 4 Feb 2025 18:59:51 +0100 Subject: [PATCH] broken prompt --- Makefile | 4 ++-- inc/minishell.h | 9 ++++++++- inc/prompt.h | 4 +++- src/main.c | 10 +++++++++- src/prompt/prompt.c | 34 +++++++++++++++++++++++++++------- 5 files changed, 49 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index aa15911..4050d6f 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: whaffman +#+ # # +#+ # # Created: 2024/10/15 11:48:46 by whaffman #+# #+# # -# Updated: 2025/02/04 16:40:44 by whaffman ######## odam.nl # +# Updated: 2025/02/04 16:47:57 by whaffman ######## odam.nl # # # # **************************************************************************** # @@ -34,7 +34,7 @@ RM = rm -rf INCLUDES = -I./$(INC_PATH) -I./$(LIBFT_INC_PATH) CFLAGS = -Wall -Wextra -Werror -MMD -fsanitize=address,undefined -g -LDLIBS := -L$(LIBFT_PATH) -lft +LDLIBS := -L$(LIBFT_PATH) -lft -lreadline all: $(NAME) diff --git a/inc/minishell.h b/inc/minishell.h index a1d7132..983de75 100644 --- a/inc/minishell.h +++ b/inc/minishell.h @@ -6,7 +6,7 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/02/04 16:13:13 by whaffman #+# #+# */ -/* Updated: 2025/02/04 16:28:30 by whaffman ######## odam.nl */ +/* Updated: 2025/02/04 18:58:01 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -19,5 +19,12 @@ # include "allowed.h" # include "libft.h" # include "enviroment.h" +# include "prompt.h" + +typedef struct s_minishell +{ + t_enviroment *enviroment; + char *pwd; +} t_minishell; #endif // MINISHELL_H diff --git a/inc/prompt.h b/inc/prompt.h index 3c88433..655e832 100644 --- a/inc/prompt.h +++ b/inc/prompt.h @@ -6,13 +6,15 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/02/04 16:35:35 by whaffman #+# #+# */ -/* Updated: 2025/02/04 16:36:04 by whaffman ######## odam.nl */ +/* Updated: 2025/02/04 18:58:19 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ #ifndef PROMPT_H # define PROMPT_H +# include "minishell.h" +char *prompt(t_minishell *minishell); #endif // PROMPT_H diff --git a/src/main.c b/src/main.c index aad1069..dcf12cb 100644 --- a/src/main.c +++ b/src/main.c @@ -6,7 +6,7 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/02/04 16:19:22 by whaffman #+# #+# */ -/* Updated: 2025/02/04 16:39:58 by whaffman ######## odam.nl */ +/* Updated: 2025/02/04 18:04:25 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -20,6 +20,14 @@ int main(int argc, char **argv, char **envp) (void)argc; (void)argv; parse_enviroment(envp, &enviroment); + while (1) + { + line = prompt(); + if (line != NULL) + add_history(line); + printf("%s\n", line); + free(line); + } //print_enviroment(enviroment); free_enviroment(enviroment); return (EXIT_SUCCESS); diff --git a/src/prompt/prompt.c b/src/prompt/prompt.c index 21c0131..af64f81 100644 --- a/src/prompt/prompt.c +++ b/src/prompt/prompt.c @@ -6,24 +6,44 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/02/04 16:13:08 by whaffman #+# #+# */ -/* Updated: 2025/02/04 16:39:39 by whaffman ######## odam.nl */ +/* Updated: 2025/02/04 18:56:08 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ #include "minishell.h" -char *prompt(void) +char *get_path(t_minishell *minishell) { - char *line; + char *path; + char *home; + char *cwd; - char *cwd = getcwd(NULL, 0); + cwd = getcwd(NULL, 0); if (cwd == NULL) { perror("getcwd"); - return; + return (NULL); } - line = readline(cwd); - free(cwd); + while (ft_strncmp(cwd, minishell->pwd, ft_strlen(minishell->pwd)) == 0) + { + home = ft_strjoin("~", cwd + ft_strlen(minishell->pwd)); + free(cwd); + cwd = home; + } + return (path); +} + +char *prompt(t_minishell *minishell) +{ + char *line; + char *pwd; + char *prompt; + + pwd = get_path(minishell); + prompt = ft_strjoin(pwd, " > "); + + line = readline(prompt); + free(prompt); return (line); }