Add support for scroll(1)

Scroll is a program that stores all the lines of its child and be used in st as
a way of implementing scrollback.

This solution is much better than implementing the scrollback in st itself
because having a different program allows to use it in any other program
without doing modifications to those programs.
This commit is contained in:
Roberto E. Vargas Caballero 2020-04-10 22:06:32 +02:00 committed by Hiltjo Posthuma
parent 5703aa0390
commit 21e0d6e8b8
4 changed files with 15 additions and 8 deletions

View file

@ -11,13 +11,14 @@ static int borderpx = 2;
/* /*
* What program is execed by st depends of these precedence rules: * What program is execed by st depends of these precedence rules:
* 1: program passed with -e * 1: program passed with -e
* 2: utmp option * 2: scroll and/or utmp
* 3: SHELL environment variable * 3: SHELL environment variable
* 4: value of shell in /etc/passwd * 4: value of shell in /etc/passwd
* 5: value of shell in config.h * 5: value of shell in config.h
*/ */
static char *shell = "/bin/sh"; static char *shell = "/bin/sh";
char *utmp = NULL; char *utmp = NULL;
char *scroll = NULL;
char *stty_args = "stty raw pass8 nl -echo -iexten -cstopb 38400"; char *stty_args = "stty raw pass8 nl -echo -iexten -cstopb 38400";
/* identification sequence returned in DA and DECID */ /* identification sequence returned in DA and DECID */

3
st.1
View file

@ -170,7 +170,8 @@ See the LICENSE file for the terms of redistribution.
.SH SEE ALSO .SH SEE ALSO
.BR tabbed (1), .BR tabbed (1),
.BR utmp (1), .BR utmp (1),
.BR stty (1) .BR stty (1),
.BR scroll (1)
.SH BUGS .SH BUGS
See the TODO file in the distribution. See the TODO file in the distribution.

16
st.c
View file

@ -664,7 +664,7 @@ die(const char *errstr, ...)
void void
execsh(char *cmd, char **args) execsh(char *cmd, char **args)
{ {
char *sh, *prog; char *sh, *prog, *arg;
const struct passwd *pw; const struct passwd *pw;
errno = 0; errno = 0;
@ -678,13 +678,17 @@ execsh(char *cmd, char **args)
if ((sh = getenv("SHELL")) == NULL) if ((sh = getenv("SHELL")) == NULL)
sh = (pw->pw_shell[0]) ? pw->pw_shell : cmd; sh = (pw->pw_shell[0]) ? pw->pw_shell : cmd;
if (args) if (args) {
prog = args[0]; prog = args[0];
else if (utmp) arg = NULL;
prog = utmp; } else if (scroll || utmp) {
else prog = scroll ? scroll : utmp;
arg = scroll ? utmp : NULL;
} else {
prog = sh; prog = sh;
DEFAULT(args, ((char *[]) {prog, NULL})); arg = NULL;
}
DEFAULT(args, ((char *[]) {prog, arg, NULL}));
unsetenv("COLUMNS"); unsetenv("COLUMNS");
unsetenv("LINES"); unsetenv("LINES");

1
st.h
View file

@ -113,6 +113,7 @@ char *xstrdup(char *);
/* config.h globals */ /* config.h globals */
extern char *utmp; extern char *utmp;
extern char *scroll;
extern char *stty_args; extern char *stty_args;
extern char *vtiden; extern char *vtiden;
extern wchar_t *worddelimiters; extern wchar_t *worddelimiters;