# st

Unnamed repository; edit this file 'description' to name the repository.

| Log | 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();