aboutsummaryrefslogtreecommitdiff
path: root/st.c
diff options
context:
space:
mode:
Diffstat (limited to 'st.c')
-rw-r--r--st.c118
1 files changed, 57 insertions, 61 deletions
diff --git a/st.c b/st.c
index 18935d4..c938ff4 100644
--- a/st.c
+++ b/st.c
@@ -27,6 +27,10 @@
27#include <X11/Xft/Xft.h> 27#include <X11/Xft/Xft.h>
28#include <fontconfig/fontconfig.h> 28#include <fontconfig/fontconfig.h>
29 29
30#include "arg.h"
31
32char *argv0;
33
30#define Glyph Glyph_ 34#define Glyph Glyph_
31#define Font Font_ 35#define Font Font_
32#define Draw XftDraw * 36#define Draw XftDraw *
@@ -41,10 +45,6 @@
41 #include <libutil.h> 45 #include <libutil.h>
42#endif 46#endif
43 47
44#define USAGE \
45 "st " VERSION " (c) 2010-2013 st engineers\n" \
46 "usage: st [-a] [-v] [-c class] [-f font] [-g geometry] [-o file]" \
47 " [-t title] [-w windowid] [-e command ...]\n"
48 48
49/* XEMBED messages */ 49/* XEMBED messages */
50#define XEMBED_FOCUS_IN 4 50#define XEMBED_FOCUS_IN 4
@@ -3308,70 +3308,66 @@ run(void) {
3308 } 3308 }
3309} 3309}
3310 3310
3311void
3312usage(void) {
3313 die("%s " VERSION " (c) 2010-2013 st engineers\n" \
3314 "usage: st [-a] [-v] [-c class] [-f font] [-g geometry] [-o file]" \
3315 " [-t title] [-w windowid] [-e command ...]\n", argv0);
3316}
3317
3311int 3318int
3312main(int argc, char *argv[]) { 3319main(int argc, char *argv[]) {
3313 int i, bitm, xr, yr; 3320 int bitm, xr, yr;
3314 uint wr, hr; 3321 uint wr, hr;
3315 3322
3316 xw.fw = xw.fh = xw.fx = xw.fy = 0; 3323 xw.fw = xw.fh = xw.fx = xw.fy = 0;
3317 xw.isfixed = False; 3324 xw.isfixed = False;
3318 3325
3319 for(i = 1; i < argc; i++) { 3326 ARGBEGIN {
3320 switch(argv[i][0] != '-' || argv[i][2] ? -1 : argv[i][1]) { 3327 case 'a':
3321 case 'a': 3328 allowaltscreen = false;
3322 allowaltscreen = false; 3329 break;
3323 break; 3330 case 'c':
3324 case 'c': 3331 opt_class = EARGF(usage());
3325 if(++i < argc) 3332 break;
3326 opt_class = argv[i]; 3333 case 'e':
3327 break; 3334 /* eat all remaining arguments */
3328 case 'e': 3335 opt_cmd = &argv[1];
3329 /* eat all remaining arguments */ 3336 goto run;
3330 if(++i < argc) 3337 case 'f':
3331 opt_cmd = &argv[i]; 3338 opt_font = EARGF(usage());
3332 goto run; 3339 break;
3333 case 'f': 3340 case 'g':
3334 if(++i < argc) 3341 bitm = XParseGeometry(EARGF(usage()), &xr, &yr, &wr, &hr);
3335 opt_font = argv[i]; 3342 if(bitm & XValue)
3336 break; 3343 xw.fx = xr;
3337 case 'g': 3344 if(bitm & YValue)
3338 if(++i >= argc) 3345 xw.fy = yr;
3339 break; 3346 if(bitm & WidthValue)
3340 3347 xw.fw = (int)wr;
3341 bitm = XParseGeometry(argv[i], &xr, &yr, &wr, &hr); 3348 if(bitm & HeightValue)
3342 if(bitm & XValue) 3349 xw.fh = (int)hr;
3343 xw.fx = xr; 3350 if(bitm & XNegative && xw.fx == 0)
3344 if(bitm & YValue) 3351 xw.fx = -1;
3345 xw.fy = yr; 3352 if(bitm & XNegative && xw.fy == 0)
3346 if(bitm & WidthValue) 3353 xw.fy = -1;
3347 xw.fw = (int)wr; 3354
3348 if(bitm & HeightValue) 3355 if(xw.fh != 0 && xw.fw != 0)
3349 xw.fh = (int)hr; 3356 xw.isfixed = True;
3350 if(bitm & XNegative && xw.fx == 0) 3357 break;
3351 xw.fx = -1; 3358 case 'o':
3352 if(bitm & XNegative && xw.fy == 0) 3359 opt_io = EARGF(usage());
3353 xw.fy = -1; 3360 break;
3354 3361 case 't':
3355 if(xw.fh != 0 && xw.fw != 0) 3362 opt_title = EARGF(usage());
3356 xw.isfixed = True; 3363 break;
3357 break; 3364 case 'w':
3358 case 'o': 3365 opt_embed = EARGF(usage());
3359 if(++i < argc) 3366 break;
3360 opt_io = argv[i]; 3367 case 'v':
3361 break; 3368 default:
3362 case 't': 3369 usage();
3363 if(++i < argc) 3370 } ARGEND;
3364 opt_title = argv[i];
3365 break;
3366 case 'v':
3367 default:
3368 die(USAGE);
3369 case 'w':
3370 if(++i < argc)
3371 opt_embed = argv[i];
3372 break;
3373 }
3374 }
3375 3371
3376run: 3372run:
3377 setlocale(LC_CTYPE, ""); 3373 setlocale(LC_CTYPE, "");