Introduction
Introduction Statistics Contact Development Disclaimer Help
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);
}
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.