[dev] [st] [PATCH] Remove long text being cropped/wrapped to standard 80x24 on launch.

From: Alexander Sedov <alex0player_AT_gmail.com>
Date: Sun, 23 Jun 2013 21:05:29 +0400

To be more specific, now tty creation is delayed until X window is
actually mapped; last ConfigureNotify before mapping determines
initial tty size.
Please report problems if there are any.
---
 TODO |    4 ----
 st.c |   21 ++++++++++++++++++---
 2 files changed, 18 insertions(+), 7 deletions(-)
diff --git a/TODO b/TODO
index afd6401..4fc1346 100644
--- a/TODO
+++ b/TODO
_AT_@ -26,10 +26,6 @@ bugs
 * fix rows and column definition in fixed geometry
 * fix -e handling
 * remove DEC test sequence when appropriate
-* When some application outputting long text is run in the shell init scripts,
-  then this text might be stripped to the standard 80x25 due to st running the
-  virtual terminal at first priority. Maybe the vt initialisation could be
-  moved somewhere after knowing the right window size.
 
 misc
 ----
diff --git a/st.c b/st.c
index 2811876..ef17e90 100644
--- a/st.c
+++ b/st.c
_AT_@ -3532,10 +3532,28 @@ resize(XEvent *e) {
 void
 run(void) {
 	XEvent ev;
+	int w = xw.w, h = xw.h;
 	fd_set rfd;
 	int xfd = XConnectionNumber(xw.dpy), xev, blinkset = 0, dodraw = 0;
 	struct timeval drawtimeout, *tv = NULL, now, last, lastblink;
 
+	/* Waiting for window mapping */
+	while(1) {
+		XNextEvent(xw.dpy, &ev);
+		if(ev.type == ConfigureNotify) {
+			w = ev.xconfigure.width;
+			h = ev.xconfigure.height;
+		} else if(ev.type == MapNotify) {
+			break;
+		}
+	}
+
+	if(!xw.isfixed)
+		cresize(w, h);
+	else
+		cresize(xw.fw, xw.fh);
+	ttynew();
+
 	gettimeofday(&lastblink, NULL);
 	gettimeofday(&last, NULL);
 
_AT_@ -3685,10 +3703,7 @@ run:
 	XSetLocaleModifiers("");
 	tnew(80, 24);
 	xinit();
-	ttynew();
 	selinit();
-	if(xw.isfixed)
-		cresize(xw.h, xw.w);
 	run();
 
 	return 0;
-- 
1.7.10.4
Received on Sun Jun 23 2013 - 19:05:29 CEST

This archive was generated by hypermail 2.3.0 : Sun Jun 23 2013 - 19:12:05 CEST