code: drawterm

Download patch

ref: 05702a2942dc74613683a1d338c90f29b58c9c7e
parent: 3a300145dedef2e2cad9be0bf4ba2166770bc943
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Fri Apr 17 22:26:52 EDT 2020

x11: add -g geometry arg to set window position and size (thanks joe9)

--- a/cpu.c
+++ b/cpu.c
@@ -38,6 +38,7 @@
 char *secstore;
 char *user, *pass;
 char secstorebuf[65536];
+char *geometry;
 
 extern void	guimain(void);
 
@@ -233,7 +234,9 @@
 		"[-h host] [-u user] [-a authserver] [-s secstore] "
 		"[-e 'crypt hash'] [-k keypattern] "
 		"[-p] [-t timeout] "
-		"[-r root] [-c cmd ...]\n", argv0);
+		"[-r root] "
+		"[-g geometry] "
+		"[-c cmd ...]\n", argv0);
 	exits("usage");
 }
 
@@ -301,6 +304,12 @@
 			cmd = smprint("%s %q", cmd, s);
 			free(old);
 		}
+		break;
+	case 'g':
+		/* X11 geometry string
+			[=][<width>{xX}<height>][{+-}<xoffset>{+-}<yoffset>]
+			*/
+		geometry = EARGF(usage());
 		break;
 	default:
 		usage();
--- a/drawterm.1
+++ b/drawterm.1
@@ -34,6 +34,9 @@
 .B -r
 .I root
 ] [
+.B -g
+.I geometry
+] [
 .B -c
 .I cmd \fR...]
 
--- a/gui-x11/x11.c
+++ b/gui-x11/x11.c
@@ -48,6 +48,8 @@
 static	XImage*		xscreenimage;
 static	Visual		*xvis;
 
+extern char		*geometry;	/* defined in main.c */
+
 #include "../glenda-t.xbm"
 
 Memimage*
@@ -188,7 +190,7 @@
 void
 screeninit(void)
 {
-	int i, n;
+	int i, n, x, y;
 	char *argv[2];
 	Window rootwin;
 	Rectangle r;
@@ -303,15 +305,19 @@
 		initmap(rootwin);
 	}
 
-	r.min = ZP;
-	r.max.x = WidthOfScreen(screen)*3/4;
-	r.max.y = HeightOfScreen(screen)*3/4;
+	r = ZR;
+	if(geometry != nil)
+		XParseGeometry(geometry, &x, &y, &r.max.x, &r.max.y);
+	if(r.max.x == 0)
+		r.max.x = WidthOfScreen(screen)*3/4;
+	if(r.max.y == 0)
+		r.max.y = HeightOfScreen(screen)*3/4;
 	
 	attrs.colormap = xcmap;
 	attrs.background_pixel = 0;
 	attrs.border_pixel = 0;
 	/* attrs.override_redirect = 1;*/ /* WM leave me alone! |CWOverrideRedirect */
-	xdrawable = XCreateWindow(xdisplay, rootwin, 0, 0, Dx(r), Dy(r), 0, 
+	xdrawable = XCreateWindow(xdisplay, rootwin, x, y, Dx(r), Dy(r), 0,
 		xscreendepth, InputOutput, xvis, CWBackPixel|CWBorderPixel|CWColormap, &attrs);
 
 	/* load the given bitmap data and create an X pixmap containing it. */