aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--st.c50
-rw-r--r--st.h11
-rw-r--r--x.c12
3 files changed, 33 insertions, 40 deletions
diff --git a/st.c b/st.c
index 1a8fa1f..58f7941 100644
--- a/st.c
+++ b/st.c
@@ -48,7 +48,6 @@
/* macros */
#define NUMMAXLEN(x) ((int)(sizeof(x) * 2.56 + 0.5) + 1)
-#define DEFAULT(a, b) (a) = (a) ? (a) : (b)
#define ISCONTROLC0(c) (BETWEEN(c, 0, 0x1f) || (c) == '\177')
#define ISCONTROLC1(c) (BETWEEN(c, 0x80, 0x9f))
#define ISCONTROL(c) (ISCONTROLC0(c) || ISCONTROLC1(c))
@@ -124,8 +123,8 @@ static void sendbreak(const Arg *);
/* config.h for applying patches and the configuration. */
#include "config.h"
-static void execsh(void);
-static void stty(void);
+static void execsh(char **);
+static void stty(char **);
static void sigchld(int);
static void csidump(void);
@@ -189,14 +188,6 @@ Term term;
Selection sel;
int cmdfd;
pid_t pid;
-char **opt_cmd = NULL;
-char *opt_class = NULL;
-char *opt_embed = NULL;
-char *opt_font = NULL;
-char *opt_io = NULL;
-char *opt_line = NULL;
-char *opt_name = NULL;
-char *opt_title = NULL;
int oldbutton = 3; /* button event on startup: 3 = release */
static CSIEscape csiescseq;
@@ -634,9 +625,9 @@ die(const char *errstr, ...)
}
void
-execsh(void)
+execsh(char **args)
{
- char **args, *sh, *prog;
+ char *sh, *prog;
const struct passwd *pw;
errno = 0;
@@ -650,13 +641,13 @@ execsh(void)
if ((sh = getenv("SHELL")) == NULL)
sh = (pw->pw_shell[0]) ? pw->pw_shell : shell;
- if (opt_cmd)
- prog = opt_cmd[0];
+ if (args)
+ prog = args[0];
else if (utmp)
prog = utmp;
else
prog = sh;
- args = (opt_cmd) ? opt_cmd : (char *[]) {prog, NULL};
+ DEFAULT(args, ((char *[]) {prog, NULL}));
unsetenv("COLUMNS");
unsetenv("LINES");
@@ -697,7 +688,7 @@ sigchld(int a)
void
-stty(void)
+stty(char **args)
{
char cmd[_POSIX_ARG_MAX], **p, *q, *s;
size_t n, siz;
@@ -707,7 +698,7 @@ stty(void)
memcpy(cmd, stty_args, n);
q = cmd + n;
siz = sizeof(cmd) - n;
- for (p = opt_cmd; p && (s = *p); ++p) {
+ for (p = args; p && (s = *p); ++p) {
if ((n = strlen(s)) > siz-1)
die("stty parameter length too long\n");
*q++ = ' ';
@@ -721,26 +712,26 @@ stty(void)
}
void
-ttynew(void)
+ttynew(char *line, char *out, char **args)
{
int m, s;
struct winsize w = {term.row, term.col, 0, 0};
- if (opt_io) {
+ if (out) {
term.mode |= MODE_PRINT;
- iofd = (!strcmp(opt_io, "-")) ?
- 1 : open(opt_io, O_WRONLY | O_CREAT, 0666);
+ iofd = (!strcmp(out, "-")) ?
+ 1 : open(out, O_WRONLY | O_CREAT, 0666);
if (iofd < 0) {
fprintf(stderr, "Error opening %s:%s\n",
- opt_io, strerror(errno));
+ out, strerror(errno));
}
}
- if (opt_line) {
- if ((cmdfd = open(opt_line, O_RDWR)) < 0)
+ if (line) {
+ if ((cmdfd = open(line, O_RDWR)) < 0)
die("open line failed: %s\n", strerror(errno));
dup2(cmdfd, 0);
- stty();
+ stty(args);
return;
}
@@ -762,7 +753,7 @@ ttynew(void)
die("ioctl TIOCSCTTY failed: %s\n", strerror(errno));
close(s);
close(m);
- execsh();
+ execsh(args);
break;
default:
close(s);
@@ -1942,8 +1933,7 @@ void
tprinter(char *s, size_t len)
{
if (iofd != -1 && xwrite(iofd, s, len) < 0) {
- fprintf(stderr, "Error writing in %s:%s\n",
- opt_io, strerror(errno));
+ perror("Error writing to output file");
close(iofd);
iofd = -1;
}
@@ -2532,7 +2522,7 @@ tresize(int col, int row)
void
resettitle(void)
{
- xsettitle(opt_title ? opt_title : "st");
+ xsettitle(NULL);
}
void
diff --git a/st.h b/st.h
index c255b7c..09473c2 100644
--- a/st.h
+++ b/st.h
@@ -9,6 +9,7 @@
#define LEN(a) (sizeof(a) / sizeof(a)[0])
#define BETWEEN(x, a, b) ((a) <= (x) && (x) <= (b))
#define DIVCEIL(n, d) (((n) + ((d) - 1)) / (d))
+#define DEFAULT(a, b) (a) = (a) ? (a) : (b)
#define LIMIT(x, a, b) (x) = (x) < (a) ? (a) : (x) > (b) ? (b) : (x)
#define ATTRCMP(a, b) ((a).mode != (b).mode || (a).fg != (b).fg || \
(a).bg != (b).bg)
@@ -194,7 +195,7 @@ void tnew(int, int);
void tresize(int, int);
void tsetdirt(int, int);
void tsetdirtattr(int);
-void ttynew(void);
+void ttynew(char *, char *, char **);
size_t ttyread(void);
void ttyresize(int, int);
void ttysend(char *, size_t);
@@ -221,14 +222,6 @@ extern Term term;
extern Selection sel;
extern int cmdfd;
extern pid_t pid;
-extern char **opt_cmd;
-extern char *opt_class;
-extern char *opt_embed;
-extern char *opt_font;
-extern char *opt_io;
-extern char *opt_line;
-extern char *opt_name;
-extern char *opt_title;
extern int oldbutton;
/* config.h globals */
diff --git a/x.c b/x.c
index 371a467..e267961 100644
--- a/x.c
+++ b/x.c
@@ -179,6 +179,15 @@ static char *usedfont = NULL;
static double usedfontsize = 0;
static double defaultfontsize = 0;
+static char *opt_class = NULL;
+static char **opt_cmd = NULL;
+static char *opt_embed = NULL;
+static char *opt_font = NULL;
+static char *opt_io = NULL;
+static char *opt_line = NULL;
+static char *opt_name = NULL;
+static char *opt_title = NULL;
+
void
zoom(const Arg *arg)
{
@@ -1473,6 +1482,7 @@ void
xsettitle(char *p)
{
XTextProperty prop;
+ DEFAULT(p, "st");
Xutf8TextListToTextProperty(xw.dpy, &p, 1, XUTF8StringStyle,
&prop);
@@ -1757,7 +1767,7 @@ run(void)
} while (ev.type != MapNotify);
cresize(w, h);
- ttynew();
+ ttynew(opt_line, opt_io, opt_cmd);
ttyresize(win.tw, win.th);
clock_gettime(CLOCK_MONOTONIC, &last);
remember that computers suck.