xinit() is the function which performs all the X Windows initilization, so
it can be desired doing the geometry parsing into that function, and let the
argv loop of main as simple like other parameter cases.
---
st.c | 53 +++--
1 file changed, 27 insertions(+), 26 deletions(-)
diff --git a/st.c b/st.c
index 868300c..e87a0cd 100644
--- a/st.c
+++ b/st.c
@@ -358,6 +358,7 @@ static Selection sel;
static int iofd = -1;
static char **opt_cmd = NULL;
static char *opt_io= NULL;
+static char *opt_geo = NULL;
static char *opt_title = NULL;
static char *opt_embed = NULL;
static char *opt_class = NULL;
@@ -1965,6 +1966,11 @@ xinit(void) {
Cursor cursor;
Window parent;
int sw, sh;
+ int bitm, xr, yr;
+ unsigned int wr, hr;
+
+ xw.fw = xw.fh = xw.fx = xw.fy = 0;
+ xw.isfixed = False;
if(!(xw.dpy = XOpenDisplay(NULL)))
die(Can't open display\n);
@@ -1981,6 +1987,23 @@ xinit(void) {
xw.cmap = XDefaultColormap(xw.dpy, xw.scr);
xloadcols();
+ if(opt_geo) {
+ bitm = XParseGeometry(opt_geo, xr, yr, wr, hr);
+ if(bitm XValue)
+ xw.fx = xr;
+ if(bitm YValue)
+ xw.fy = yr;
+ if(bitm WidthValue)
+ xw.fw = (int)wr;
+ if(bitm HeightValue)
+ xw.fh = (int)hr;
+ if(bitm XNegative xw.fx == 0)
+ xw.fx = -1;
+ if(bitm XNegative xw.fy == 0)
+ xw.fy = -1;
+ if(xw.fh != 0 xw.fw != 0)
+ xw.isfixed = True;
+ }
/* adjust fixed window geometry */
if(xw.isfixed) {
sw = DisplayWidth(xw.dpy, xw.scr);
@@ -2378,11 +2401,7 @@ run(void) {
int
main(int argc, char *argv[]) {
- int i, bitm, xr, yr;
- unsigned int wr, hr;
-
- xw.fw = xw.fh = xw.fx = xw.fy = 0;
- xw.isfixed = False;
+ int i;
for(i = 1; i argc; i++) {
switch(argv[i][0] != '-' || argv[i][2] ? -1 : argv[i][1]) {
@@ -2398,31 +2417,13 @@ main(int argc, char *argv[]) {
case 'f':
if(++i argc) opt_io = argv[i];
break;
+ case 'g':
+ if(++i argc) opt_geo = argv[i];
+ break;
case 'e':
/* eat every remaining arguments */
if(++i argc) opt_cmd = argv[i];
goto run;
- case 'g':
- if(++i = argc)
- break;
-
- bitm = XParseGeometry(argv[i], xr, yr, wr, hr);
- if(bitm XValue)
- xw.fx = xr;
- if(bitm YValue)
- xw.fy = yr;
- if(bitm WidthValue)
- xw.fw = (int)wr;
- if(bitm HeightValue)
- xw.fh = (int)hr;
- if(bitm XNegative xw.fx == 0)
- xw.fx = -1;
- if(bitm XNegative xw.fy == 0)
- xw.fy = -1;
-
- if(xw.fh != 0 xw.fw != 0)
- xw.isfixed = True;
- break;
case 'v':
default:
die(USAGE);
--
1.7.10.4