aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--st.133
-rw-r--r--st.c42
2 files changed, 47 insertions, 28 deletions
diff --git a/st.1 b/st.1
index 8ec0008..1c100c0 100644
--- a/st.1
+++ b/st.1
@@ -5,15 +5,17 @@ st \- simple terminal
.B st
.RB [ \-c
.IR class ]
+.RB [ \-f
+.IR font ]
.RB [ \-g
.IR geometry ]
+.RB [ \-o
+.IR file ]
.RB [ \-t
.IR title ]
.RB [ \-w
.IR windowid ]
.RB [ \-v ]
-.RB [ \-f
-.IR file ]
.RB [ \-e
.IR command ...]
.SH DESCRIPTION
@@ -21,26 +23,33 @@ st \- simple terminal
is a simple terminal emulator.
.SH OPTIONS
.TP
-.BI \-t " title"
-defines the window title (default 'st').
-.TP
.BI \-c " class"
defines the window class (default $TERM).
.TP
+.BI \-f " font"
+defines the
+.I font
+to use when st is run.
+.TP
+.BI \-g " geometry"
+defines the X11 geometry string, which will fixate the height and width of st.
+.TP
+.BI \-o " file"
+writes all the I/O to
+.I file.
+This feature is useful when recording st sessions. A value of "-" means
+standard output.
+.TP
+.BI \-t " title"
+defines the window title (default 'st').
+.TP
.BI \-w " windowid"
embeds st within the window identified by
.I windowid
.TP
-.B \-g " geometry"
-defines the X11 geometry string, which will fixate the height and width of st.
.B \-v
prints version information to stderr, then exits.
.TP
-.BI \-f " file"
-writes all the I/O to
-.I file.
-This feature is useful when recording st sessions.
-.TP
.BI \-e " program " [ " arguments " "... ]"
st executes
.I program
diff --git a/st.c b/st.c
index 710cf34..59fb06c 100644
--- a/st.c
+++ b/st.c
@@ -39,8 +39,8 @@
#define USAGE \
"st " VERSION " (c) 2010-2012 st engineers\n" \
- "usage: st [-t title] [-c class] [-g geometry]" \
- " [-w windowid] [-v] [-f file] [-e command...]\n"
+ "usage: st [-v] [-c class] [-f font] [-g geometry] [-o file]" \
+ " [-t title] [-w windowid] [-e command ...]\n"
/* XEMBED messages */
#define XEMBED_FOCUS_IN 4
@@ -365,11 +365,12 @@ static int cmdfd;
static pid_t pid;
static Selection sel;
static int iofd = -1;
-static char **opt_cmd = NULL;
-static char *opt_io = NULL;
+static char **opt_cmd = NULL;
+static char *opt_io = NULL;
static char *opt_title = NULL;
static char *opt_embed = NULL;
static char *opt_class = NULL;
+static char *opt_font = NULL;
void *
xmalloc(size_t len) {
@@ -2087,7 +2088,7 @@ xinit(void) {
xw.vis = XDefaultVisual(xw.dpy, xw.scr);
/* font */
- initfonts(FONT);
+ initfonts((opt_font != NULL)? opt_font : FONT);
/* XXX: Assuming same size for bold font */
xw.cw = dc.font.rbearing - dc.font.lbearing;
@@ -2503,22 +2504,19 @@ main(int argc, char *argv[]) {
for(i = 1; i < argc; i++) {
switch(argv[i][0] != '-' || argv[i][2] ? -1 : argv[i][1]) {
- case 't':
- if(++i < argc) opt_title = argv[i];
- break;
case 'c':
- if(++i < argc) opt_class = argv[i];
- break;
- case 'w':
- if(++i < argc) opt_embed = argv[i];
- break;
- case 'f':
- if(++i < argc) opt_io = argv[i];
+ if(++i < argc)
+ opt_class = argv[i];
break;
case 'e':
/* eat every remaining arguments */
- if(++i < argc) opt_cmd = &argv[i];
+ if(++i < argc)
+ opt_cmd = &argv[i];
goto run;
+ case 'f':
+ if(++i < argc)
+ opt_font = argv[i];
+ break;
case 'g':
if(++i >= argc)
break;
@@ -2540,9 +2538,21 @@ main(int argc, char *argv[]) {
if(xw.fh != 0 && xw.fw != 0)
xw.isfixed = True;
break;
+ case 'o':
+ if(++i < argc)
+ opt_io = argv[i];
+ break;
+ case 't':
+ if(++i < argc)
+ opt_title = argv[i];
+ break;
case 'v':
default:
die(USAGE);
+ case 'w':
+ if(++i < argc)
+ opt_embed = argv[i];
+ break;
}
}