aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Alexander Sedov <alex0player@gmail.com>2013-06-23 21:05:29 +0400
committerGravatar Roberto E. Vargas Caballero <k0ga@shike2.com>2013-07-04 09:36:22 +0200
commitfbc589d50603e8b0de9239e4800e227ab5d0ea69 (patch)
treec5db62e806732165360467b4f5d7c07dbeec94bd
parent6fc471ccc660b305cf836dcb8d57cdbffb4ed017 (diff)
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.
-rw-r--r--TODO4
-rw-r--r--st.c21
2 files changed, 18 insertions, 7 deletions
diff --git a/TODO b/TODO
index afd6401..4fc1346 100644
--- 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
--- 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;