st

fork of suckless's simple terminal
Index Commits Files Refs README LICENSE
commit 9d82bdd94708fa2daabc0b53f8b71bca2a3c6f0a
parent 97695baf4f9bc3632792a3330fb46e188ef166a2
Author: Aurélien Aptel <aurelien.aptel@gmail.com>
Date:   Thu,  2 Sep 2010 01:37:01 +0200

added -e and -t option.

Diffstat:
Mst.c | 36++++++++++++++++++++++++++++--------
1 file changed, 28 insertions(+), 8 deletions(-)
diff --git a/st.c b/st.c
@@ -28,6 +28,10 @@
  #include <libutil.h>
 #endif
 
+#define USAGE \
+    "st-" VERSION ", (c) 2010 st engineers\n" \
+    "usage: st [-t title] [-e cmd] [-v]\n"
+
 /* Arbitrary sizes */
 #define ESC_TITLE_SIZ 256
 #define ESC_BUF_SIZ   256
@@ -210,6 +214,8 @@ static CSIEscape escseq;
 static int cmdfd;
 static pid_t pid;
 static Selection sel;
+static char *opt_cmd   = NULL;
+static char *opt_title = NULL;
 
 void
 selinit(void) {
@@ -329,9 +335,12 @@ die(const char *errstr, ...) {
 
 void
 execsh(void) {
-    char *args[3] = {getenv("SHELL"), "-i", NULL};
-    DEFAULT(args[0], SHELL); /* if getenv() failed */
-    putenv("TERM=" TNAME);
+    char *args[] = {getenv("SHELL"), "-i", NULL};
+    if(opt_cmd)
+        args[0] = opt_cmd, args[1] = NULL;
+    else
+        DEFAULT(args[0], SHELL);
+    putenv("TERM="TNAME);
     execvp(args[0], args);
 }
 
@@ -1189,7 +1198,7 @@ xinit(void) {
     
     XMapWindow(xw.dis, xw.win);
     xhints();
-    XStoreName(xw.dis, xw.win, "st");
+    XStoreName(xw.dis, xw.win, opt_title ? opt_title : "st");
     XSync(xw.dis, 0);
 }
 
@@ -1429,10 +1438,21 @@ run(void) {
 
 int
 main(int argc, char *argv[]) {
-    if(argc == 2 && !strncmp("-v", argv[1], 3))
-        die("st-" VERSION ", (c) 2010 st engineers\n");
-    else if(argc != 1)
-        die("usage: st [-v]\n");
+    int i;
+    
+    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 'e':
+            if(++i < argc) opt_cmd = argv[i];
+            break;
+        case 'v':
+        default:
+            die(USAGE);
+        }
+    }
     setlocale(LC_CTYPE, "");
     tnew(80, 24);
     ttynew();