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

16
st.c
View File

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