tAdd support for utmp in st - st - [fork] customized build of st, the simple te… | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 5afb3862ba368de8888c0c570098baababc7bc19 | |
parent 0392d165d07143eec29c730364006bc0613e1198 | |
Author: Roberto E. Vargas Caballero <[email protected]> | |
Date: Thu, 28 Aug 2014 12:48:29 +0200 | |
Add support for utmp in st | |
St runs an interactive shell and not a login shell, and it means | |
tthat profile is not loaded. The default terminal configuration | |
in some system is not the correct for st, but since profile is | |
not loaded there is no way of getting a script configures the | |
correct values. | |
St doesn't update the utmp files, this is the job of another | |
suckless tool, utmp. Utmp also opens a login shell (it is the | |
logical behaviour when you create a new user record) it is a | |
good option execute utmp and then get a correct input in | |
utmp, wtmp and lastlog file, and execute the content of the | |
profile. | |
Diffstat: | |
M config.def.h | 1 + | |
M st.c | 17 +++++++++++------ | |
2 files changed, 12 insertions(+), 6 deletions(-) | |
--- | |
diff --git a/config.def.h b/config.def.h | |
t@@ -8,6 +8,7 @@ | |
static char font[] = "Liberation Mono:pixelsize=12:antialias=false:autohint=fa… | |
static int borderpx = 2; | |
static char shell[] = "/bin/sh"; | |
+static char *utmp = NULL; | |
/* identification sequence returned in DA and DECID */ | |
static char vtiden[] = "\033[?6c"; | |
diff --git a/st.c b/st.c | |
t@@ -1153,16 +1153,22 @@ execsh(void) { | |
else | |
die("who are you?\n"); | |
} | |
- unsetenv("COLUMNS"); | |
- unsetenv("LINES"); | |
- unsetenv("TERMCAP"); | |
- sh = (pw->pw_shell[0]) ? pw->pw_shell : shell; | |
+ if (utmp) | |
+ sh = utmp; | |
+ else if (pw->pw_shell[0]) | |
+ sh = pw->pw_shell; | |
+ else | |
+ sh = shell; | |
+ args = (opt_cmd) ? opt_cmd : (char *[]){sh, NULL}; | |
snprintf(buf, sizeof(buf), "%lu", xw.win); | |
+ unsetenv("COLUMNS"); | |
+ unsetenv("LINES"); | |
+ unsetenv("TERMCAP"); | |
setenv("LOGNAME", pw->pw_name, 1); | |
setenv("USER", pw->pw_name, 1); | |
- setenv("SHELL", sh, 1); | |
+ setenv("SHELL", args[0], 1); | |
setenv("HOME", pw->pw_dir, 1); | |
setenv("TERM", termname, 1); | |
setenv("WINDOWID", buf, 1); | |
t@@ -1174,7 +1180,6 @@ execsh(void) { | |
signal(SIGTERM, SIG_DFL); | |
signal(SIGALRM, SIG_DFL); | |
- args = opt_cmd ? opt_cmd : (char *[]){sh, "-i", NULL}; | |
execvp(args[0], args); | |
exit(EXIT_FAILURE); | |
} |