Quellcode durchsuchen

Remove long text being cropped/wrapped to standard 80x24 on launch.

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.
Alexander Sedov vor 11 Jahren
Ursprung
Commit
fbc589d506
2 geänderte Dateien mit 18 neuen und 7 gelöschten Zeilen
  1. 0 4
      TODO
  2. 18 3
      st.c

+ 0 - 4
TODO

@@ -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
 ----

+ 18 - 3
st.c

@@ -3520,10 +3520,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);
 
@@ -3673,10 +3691,7 @@ run:
 	XSetLocaleModifiers("");
 	tnew(80, 24);
 	xinit();
-	ttynew();
 	selinit();
-	if(xw.isfixed)
-		cresize(xw.h, xw.w);
 	run();
 
 	return 0;