84 lines
2.1 KiB
C
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);
|
|
}
|