Browse Source

change -e behaviour and update man page.

master
Aurélien Aptel 14 years ago
parent
commit
86c5cb6de6
2 changed files with 24 additions and 17 deletions
  1. +16
    -9
      st.1
  2. +8
    -8
      st.c

+ 16
- 9
st.1 View File

@ -3,23 +3,30 @@
st \- simple terminal st \- simple terminal
.SH SYNOPSIS .SH SYNOPSIS
.B st .B st
.RB [ \-e " <cmd>"]
.RB [ \-c " <class>"]
.RB [ \-t " <title>"]
.RB [ \-c
.IR class ]
.RB [ \-t
.IR title ]
.RB [ \-v ] .RB [ \-v ]
.RB [ \-e
.IR cmd ]
.SH DESCRIPTION .SH DESCRIPTION
.B st .B st
is a simple terminal emulator. is a simple terminal emulator.
.SH OPTIONS .SH OPTIONS
.TP .TP
.B \-e <cmd>
Execute cmd instead of the shell
.TP
.B \-t <title>
.B \-t title
Overrides the default title (st) Overrides the default title (st)
.TP .TP
.B \-c <class>
.B \-c class
Overrides the default class ($TERM) Overrides the default class ($TERM)
.TP .TP
.BI \-v
.B \-v
Prints version information to standard output, then exits. Prints version information to standard output, then exits.
.TP
.B \-e cmd [arguments]
Execute cmd instead of the shell. Type your command as you would on your
shell. If this option is used, it
.BI "must be the last"
on the command-line. This is the same behaviour as xterm/rxvt.

+ 8
- 8
st.c View File

@ -247,7 +247,7 @@ static CSIEscape escseq;
static int cmdfd; static int cmdfd;
static pid_t pid; static pid_t pid;
static Selection sel; static Selection sel;
static char *opt_cmd = NULL;
static char **opt_cmd = NULL;
static char *opt_title = NULL; static char *opt_title = NULL;
static char *opt_class = NULL; static char *opt_class = NULL;
@ -547,15 +547,12 @@ void
execsh(void) { execsh(void) {
char **args; char **args;
char *envshell = getenv("SHELL"); char *envshell = getenv("SHELL");
DEFAULT(envshell, "sh");
if(opt_cmd)
args = (char*[]){"sh", "-c", opt_cmd, NULL};
else
args = (char*[]){envshell, "-i", NULL};
DEFAULT(envshell, "sh");
putenv("TERM="TNAME); putenv("TERM="TNAME);
args = opt_cmd ? opt_cmd : (char*[]){envshell, "-i", NULL};
execvp(args[0], args); execvp(args[0], args);
exit(EXIT_FAILURE);
} }
void void
@ -1855,12 +1852,15 @@ main(int argc, char *argv[]) {
if(++i < argc) opt_class = argv[i]; if(++i < argc) opt_class = argv[i];
break; break;
case 'e': case 'e':
if(++i < argc) opt_cmd = argv[i];
if(++i < argc) opt_cmd = &argv[i];
break; break;
case 'v': case 'v':
default: default:
die(USAGE); die(USAGE);
} }
/* -e eats every remaining arguments */
if(opt_cmd)
break;
} }
setlocale(LC_CTYPE, ""); setlocale(LC_CTYPE, "");
tnew(80, 24); tnew(80, 24);


Loading…
Cancel
Save