Remove long text being cropped/wrapped to standard 80x24 on launch.
authorAlexander Sedov <alex0player@gmail.com>
Sun, 23 Jun 2013 17:05:29 +0000 (21:05 +0400)
committerRoberto E. Vargas Caballero <k0ga@shike2.com>
Thu, 4 Jul 2013 07:36:22 +0000 (09:36 +0200)
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
st.c

diff --git a/TODO b/TODO
index afd6401..4fc1346 100644 (file)
--- a/TODO
+++ b/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
 ----
diff --git a/st.c b/st.c
index ac1954e..0fc724b 100644 (file)
--- a/st.c
+++ b/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;