minishell/src/prompt/prompt.c
2025-02-07 16:22:30 +01:00

84 lines
2.1 KiB
C

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* prompt.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/02/04 16:13:08 by whaffman #+# #+# */
/* Updated: 2025/02/06 16:12:02 by qmennen ### ########.fr */
/* */
/* ************************************************************************** */
#include "minishell.h"
char *get_user(t_list *environment)
{
char *str1;
char *str2;
str1 = ft_strdup(get_environment(environment, "USER"));
if (str1 == NULL)
str1 = ft_strdup("guest");
if (str1 == NULL)
return (NULL);
str2 = ft_strjoin(GREEN, str1);
free(str1);
str1 = ft_strjoin(str2, RESET "🐚" GREEN "minishell" RESET ": ");
free(str2);
return (str1);
}
char *get_path(t_list *environment)
{
char *home;
char *temp;
char *cwd;
cwd = getcwd(NULL, 0);
home = get_environment(environment, "HOME");
if (cwd == NULL)
{
perror("getcwd");
return (NULL);
}
if (home && ft_strncmp(cwd, home, ft_strlen(home)) == 0)
{
temp = ft_strjoin("~", cwd + ft_strlen(home));
free(cwd);
cwd = temp;
}
temp = ft_strjoin(BLUE, cwd);
free(cwd);
cwd = ft_strjoin(temp, RESET);
free(temp);
return (cwd);
}
char *ft_prompt(t_minishell *minishell)
{
char *line;
char *cwd;
char *prompt;
char *user;
char *temp;
cwd = get_path(minishell->environment);
if (cwd == NULL)
return (NULL);
user = get_user(minishell->environment);
temp = ft_strjoin(user, cwd);
free(user);
free(cwd);
prompt = ft_strjoin(temp, "> ");
free(temp);
line = readline(prompt);
free(prompt);
if (line != NULL)
{
add_history(line);
ft_write_history(line);
}
return (line);
}