summaryrefslogtreecommitdiffstats
path: root/src/m_prompt.c
diff options
context:
space:
mode:
authorJozanLeClerc <bousset.rudy@gmail.com>2020-08-18 19:56:32 +0200
committerJozanLeClerc <bousset.rudy@gmail.com>2020-08-18 19:56:32 +0200
commit7c52c2c1f277ada465bf5c526c096a7c8a954af7 (patch)
tree93ea7c49c5735582defa0b79f811985dcc76542e /src/m_prompt.c
parentprompt rice (diff)
download42-minishell-7c52c2c1f277ada465bf5c526c096a7c8a954af7.tar.gz
42-minishell-7c52c2c1f277ada465bf5c526c096a7c8a954af7.tar.bz2
42-minishell-7c52c2c1f277ada465bf5c526c096a7c8a954af7.tar.xz
42-minishell-7c52c2c1f277ada465bf5c526c096a7c8a954af7.tar.zst
42-minishell-7c52c2c1f277ada465bf5c526c096a7c8a954af7.zip
Cooliax
Diffstat (limited to 'src/m_prompt.c')
-rw-r--r--src/m_prompt.c62
1 files changed, 59 insertions, 3 deletions
diff --git a/src/m_prompt.c b/src/m_prompt.c
index 3bffffd..887fbbe 100644
--- a/src/m_prompt.c
+++ b/src/m_prompt.c
@@ -14,12 +14,67 @@
#include <stdint.h>
#include <unistd.h>
+#include "d_define.h"
#include "m_prompt.h"
#include "s_struct.h"
#include "u_vars.h"
+static char
+ *m_subst_prompt_rice(char var[],
+ t_msh *msh)
+{
+ size_t i;
+ size_t j;
+ char *tmp;
+
+ i = 0;
+ while (var[i] != '\0')
+ {
+ if (var[i] == '\\')
+ {
+ if (var[i + 1] == 'w')
+ {
+ tmp = u_get_var_value("$PWD", msh);
+ if (tmp != NULL)
+ {
+ var = ft_strsubst(var, "\\w", tmp);
+ ft_memdel((void*)&tmp);
+ }
+ else
+ var = ft_strsubst(var, "\\w", "?");
+ }
+ else if (var[i + 1] == 'W')
+ {
+ tmp = u_get_var_value("$PWD", msh);
+ if (tmp != NULL)
+ {
+ j = ft_strlen(tmp);
+ if (j > 1)
+ {
+ while (tmp[j] != '/' && j != 0)
+ j--;
+ j++;
+ ft_memmove(tmp, tmp + j, (ft_strlen(tmp) - j) + 1);
+ }
+ var = ft_strsubst(var, "\\W", tmp);
+ ft_memdel((void*)&tmp);
+ }
+ else
+ var = ft_strsubst(var, "\\w", "?");
+ }
+ else if (var[i + 1] == 'v')
+ var = ft_strsubst(var, "\\v", FT_MSH_VERSION);
+ else if (var[i + 1] == 's')
+ var = ft_strsubst(var, "\\s", FT_PROGNAME);
+ }
+ i++;
+ }
+ return (var);
+}
+
static void
- m_update_psx(uint8_t x, t_msh *msh)
+ m_update_psx(uint8_t x,
+ t_msh *msh)
{
char *var;
char psx[5];
@@ -30,14 +85,15 @@ static void
msh->ps[x - 1][0] = '\0';
return ;
}
+ var = m_subst_prompt_rice(var, msh);
ft_strlcpy(msh->ps[x - 1], var, ft_strlen(var) + 1);
ft_memdel((void*)&var);
}
void
- m_prompt_psx(uint8_t x, t_msh *msh)
+ m_prompt_psx(uint8_t x,
+ t_msh *msh)
{
-
m_update_psx(1, msh);
ft_dprintf(STDERR_FILENO, "%s", msh->ps[x - 1]);
}