Line |
Branch |
Exec |
Source |
1 |
|
|
/* |
2 |
|
|
** EPITECH PROJECT, 2024 |
3 |
|
|
** 42sh |
4 |
|
|
** File description: |
5 |
|
|
** The file containing the prompt functions |
6 |
|
|
*/ |
7 |
|
|
/** |
8 |
|
|
* @file prompt.c |
9 |
|
|
* @brief The file containing the prompt functions |
10 |
|
|
*/ |
11 |
|
|
|
12 |
|
|
#include "../../include/myshell.h" |
13 |
|
|
|
14 |
|
|
/** |
15 |
|
|
* @brief Check if we are in a specific directory and print the right logo |
16 |
|
|
* @param mysh The shell structure |
17 |
|
|
* @param tab The current working directory |
18 |
|
|
* @param i The index of the current directory |
19 |
|
|
* @return <b>void</b> |
20 |
|
|
*/ |
21 |
|
✗ |
static void check_directory(mysh_t *mysh, char **tab, int i) |
22 |
|
|
{ |
23 |
|
✗ |
char *user = get_env_var(mysh->env, "LOGNAME"); |
24 |
|
|
|
25 |
|
✗ |
if (my_strcmp(tab[i], "home") == 0 && tab[i + 1] == NULL) |
26 |
|
✗ |
my_printf("\033[36m🔒/\033[34mhome"); |
27 |
|
✗ |
if (my_strcmp(tab[i], user) == 0 && tab[i + 1] == NULL) |
28 |
|
✗ |
my_printf("\033[36m🏠\033[34m~"); |
29 |
|
✗ |
if (my_strcmp(tab[i], user) == 0 && tab[i + 1] != NULL) |
30 |
|
✗ |
my_printf("\033[36m📂~"); |
31 |
|
✗ |
} |
32 |
|
|
|
33 |
|
|
/** |
34 |
|
|
* @brief Display the current path in the right color |
35 |
|
|
* @param tab The current working directory |
36 |
|
|
* @param i The index of the current directory |
37 |
|
|
* @param current_directory The current directory |
38 |
|
|
* @return <b>void</b> |
39 |
|
|
*/ |
40 |
|
✗ |
static void is_current_directory(char **tab, int i, char *current_directory) |
41 |
|
|
{ |
42 |
|
✗ |
if (tab[i + 1] == NULL) |
43 |
|
✗ |
my_printf("\033[34m%s", current_directory); |
44 |
|
|
else |
45 |
|
✗ |
my_printf("\033[36m%s", current_directory); |
46 |
|
✗ |
} |
47 |
|
|
|
48 |
|
|
/** |
49 |
|
|
* @biref Print the second line of the prompt and the arrow of the exit status |
50 |
|
|
* @param status The exit status |
51 |
|
|
* @return <b>void</b> |
52 |
|
|
*/ |
53 |
|
✗ |
static void print_second_line(int status) |
54 |
|
|
{ |
55 |
|
✗ |
my_printf("\033[0m\n"); |
56 |
|
✗ |
my_printf("\033[34m╰─\033[0m%s>\033[0m ", |
57 |
|
|
!status ? "\033[32m" : "\033[31m"); |
58 |
|
✗ |
} |
59 |
|
|
|
60 |
|
|
/** |
61 |
|
|
* @brief Check if the user is in the root directory |
62 |
|
|
* @param tab The current working directory |
63 |
|
|
* @return <b>void</b> |
64 |
|
|
*/ |
65 |
|
✗ |
static void is_root(char **tab) |
66 |
|
|
{ |
67 |
|
✗ |
if (tab[0] == NULL) |
68 |
|
✗ |
my_printf("\033[36m🔒/"); |
69 |
|
✗ |
if (my_strcmp(tab[0], "home") != 0 && tab[0] != NULL) |
70 |
|
✗ |
my_printf("\033[36m📂/\033[0m"); |
71 |
|
✗ |
} |
72 |
|
|
|
73 |
|
|
/** |
74 |
|
|
* @brief Create the custom prompt to display |
75 |
|
|
* @param mysh The shell structure |
76 |
|
|
* @param current_pwd The current working directory |
77 |
|
|
* @return <b>void</b> |
78 |
|
|
*/ |
79 |
|
✗ |
static void custom_prompt(mysh_t *mysh, char *current_pwd) |
80 |
|
|
{ |
81 |
|
|
char **tab; |
82 |
|
|
char *current_directory; |
83 |
|
|
|
84 |
|
✗ |
tab = my_str_to_word_array_select(current_pwd, "/"); |
85 |
|
✗ |
my_printf("\033[34m╭─\033[0m 🧭"); |
86 |
|
✗ |
is_root(tab); |
87 |
|
✗ |
for (int i = 0; tab[i] != NULL; i++) { |
88 |
|
✗ |
current_directory = tab[i]; |
89 |
|
✗ |
check_directory(mysh, tab, i); |
90 |
|
✗ |
if (my_strcmp(tab[i], "home") != 0 && my_strcmp(tab[i], |
91 |
|
✗ |
get_env_var(mysh->env, "LOGNAME")) != 0) |
92 |
|
✗ |
is_current_directory(tab, i, current_directory); |
93 |
|
✗ |
if (tab[i + 1] != NULL && my_strcmp(tab[i], "home") != 0) |
94 |
|
✗ |
my_printf("\033[36m/\033[0m"); |
95 |
|
|
} |
96 |
|
✗ |
is_git_repository(); |
97 |
|
✗ |
print_second_line(mysh->exit_status); |
98 |
|
✗ |
my_free_array((void *)tab); |
99 |
|
✗ |
} |
100 |
|
|
|
101 |
|
|
/** |
102 |
|
|
* @brief Display the prompt |
103 |
|
|
* @return <b>void</b> |
104 |
|
|
*/ |
105 |
|
✗ |
void display_prompt(void) |
106 |
|
|
{ |
107 |
|
✗ |
char *current_pwd = getcwd(NULL, 0); |
108 |
|
✗ |
mysh_t *mysh = get_mysh(); |
109 |
|
|
|
110 |
|
✗ |
if (current_pwd == NULL) |
111 |
|
✗ |
my_putstr("$> "); |
112 |
|
|
else |
113 |
|
✗ |
custom_prompt(mysh, current_pwd); |
114 |
|
✗ |
free(current_pwd); |
115 |
|
✗ |
} |
116 |
|
|
|