Hi, The patches work fine. The issue is fixed with it. Thanks for the patch.
On Wed, Jun 02, 2010 at 11:01:30PM +0100, Nicholas Marriott wrote: >Please try this which should fix it (includes the part I already sent to >you so start from a clean tree). > >I'm not sure sending a resize message after the client attaches is the >best solution, and I can't actually hit the race there, although I'm >pretty certain it exists. Can't see anywhere else to put it though, the >server is entirely dependent on the client for SIGWINCH and there will >always be a potential gap between tty_start_tty() in the server and the >client changing the SIGWINCH handler. > > >Index: client.c >=================================================================== >RCS file: /cvs/src/usr.bin/tmux/client.c,v >retrieving revision 1.39 >diff -u -p -r1.39 client.c >--- client.c 12 May 2010 15:05:39 -0000 1.39 >+++ client.c 2 Jun 2010 21:58:43 -0000 >@@ -180,6 +180,13 @@ client_main(void) > set_signals(client_signal); > > /* >+ * Send a resize message immediately in case the terminal size has >+ * changed between the identify message to the server and the MSG_READY >+ * telling us to move into the client code. >+ */ >+ client_write_server(MSG_RESIZE, NULL, 0); >+ >+ /* > * imsg_read in the first client poll loop (before the terminal has > * been initialised) may have read messages into the buffer after the > * MSG_READY switched to here. Process anything outstanding now to >Index: server-client.c >=================================================================== >RCS file: /cvs/src/usr.bin/tmux/server-client.c,v >retrieving revision 1.31 >diff -u -p -r1.31 server-client.c >--- server-client.c 23 May 2010 19:42:19 -0000 1.31 >+++ server-client.c 2 Jun 2010 21:58:44 -0000 >@@ -561,9 +561,10 @@ server_client_msg_dispatch(struct client > if (datalen != 0) > fatalx("bad MSG_RESIZE size"); > >- tty_resize(&c->tty); >- recalculate_sizes(); >- server_redraw_client(c); >+ if (tty_resize(&c->tty)) { >+ recalculate_sizes(); >+ server_redraw_client(c); >+ } > break; > case MSG_EXITING: > if (datalen != 0) >Index: tmux.h >=================================================================== >RCS file: /cvs/src/usr.bin/tmux/tmux.h,v >retrieving revision 1.223 >diff -u -p -r1.223 tmux.h >--- tmux.h 31 May 2010 19:51:29 -0000 1.223 >+++ tmux.h 2 Jun 2010 21:58:45 -0000 >@@ -1351,7 +1351,7 @@ void tty_puts(struct tty *, const char * > void tty_putc(struct tty *, u_char); > void tty_pututf8(struct tty *, const struct grid_utf8 *); > void tty_init(struct tty *, int, char *); >-void tty_resize(struct tty *); >+int tty_resize(struct tty *); > void tty_start_tty(struct tty *); > void tty_stop_tty(struct tty *); > void tty_set_title(struct tty *, const char *); >Index: tty.c >=================================================================== >RCS file: /cvs/src/usr.bin/tmux/tty.c,v >retrieving revision 1.86 >diff -u -p -r1.86 tty.c >--- tty.c 31 May 2010 19:51:29 -0000 1.86 >+++ tty.c 2 Jun 2010 21:58:45 -0000 >@@ -73,34 +73,55 @@ tty_init(struct tty *tty, int fd, char * > tty->term_flags = 0; > } > >-void >+int > tty_resize(struct tty *tty) > { > struct winsize ws; >+ u_int sx, sy; > > if (ioctl(tty->fd, TIOCGWINSZ, &ws) != -1) { >- tty->sx = ws.ws_col; >- tty->sy = ws.ws_row; >+ sx = ws.ws_col; >+ if (sx == 0) >+ sx = 80; >+ sy = ws.ws_row; >+ if (sy == 0) >+ sy = 24; >+ } else { >+ sx = 80; >+ sy = 24; > } >- if (tty->sx == 0) >- tty->sx = 80; >- if (tty->sy == 0) >- tty->sy = 24; >+ if (sx == tty->sx && sy == tty->sy) >+ return (0); >+ tty->sx = sx; >+ tty->sy = sy; > > tty->cx = UINT_MAX; > tty->cy = UINT_MAX; > > tty->rupper = UINT_MAX; > tty->rlower = UINT_MAX; >+ >+ /* >+ * If the terminal has been started, reset the actual scroll region and >+ * cursor position, as this may not have happened. >+ */ >+ if (tty->flags & TTY_STARTED) { >+ tty_cursor(tty, 0, 0); >+ tty_region(tty, 0, tty->sy - 1); >+ } >+ >+ return (1); > } > > int > tty_open(struct tty *tty, const char *overrides, char **cause) > { >+ char out[MAXPATHLEN]; > int fd; > > if (debug_level > 3) { >- fd = open("tmux.out", O_WRONLY|O_CREAT|O_TRUNC, 0644); >+ xsnprintf(out, sizeof out, "tmux-out-%ld.log", (long) getpid()); >+ fd = open(out, O_WRONLY|O_CREAT|O_TRUNC, 0644); > if (fd != -1 && fcntl(fd, F_SETFD, FD_CLOEXEC) == -1) > fatal("fcntl failed"); > tty->log_fd = fd; > > > > > >On Thu, Jun 03, 2010 at 02:29:22AM +0530, Raghavendra D Prabhu wrote: >> Hi, >> I faced a issue of tmux not recognising the window dimensions correctly in >> xterm. >> Nicholas suggested in #tmux to add >> >> client_write_server(MSG_RESIZE, NULL, 0); >> >> in client.c(CVS head) .. That seemed to have solved the dimensions >> problem. But the window still does not get redrawn. Only doing >> prefix-r or running any >> other command like ls overwrites it. >> >> I have tested this with xmonad and dwm. In both this issue persists. I am >> attaching tmux info for reference. >> >> >> ------------------- >> Raghavendra D Prabhu > >> tmux 1.3, pid 19021, started Thu Jun 3 01:56:05 2010 >> socket path /tmp//tmux-1000/default, debug level 0 >> system is Linux 2.6.34-rc6-zen1-EIL #7 ZEN SMP PREEMPT Fri May 14 20:04:42 >> IST 2010 x86_64 >> configuration file is /home/raghavendra/.tmux.conf >> protocol version is 5 >> 3 clients, 2 sessions >> >> Clients: >> 0: /dev/pts/0 (9, 10): term [141x43 xterm-color] [flags=0x1/0x38, >> references=0] >> 1: /dev/pts/2 (12, 13): uake [125x21 xterm-color] [flags=0x1/0x38, >> references=0] >> >> Sessions: [5/10] >> 0: term: 2 windows (created Thu Jun 3 02:05:00 2010) [141x42] [flags=0x0, >> references=0] >> 1: bash [141x42] [flags=0x0, references=1, last layout=-1] >> 0: /dev/pts/1 20527 11 36/42, 12020 bytes; UTF-8 0/42, 0 bytes >> 2: mutt [141x42] [flags=0x0, references=1, last layout=-1] >> 0: /dev/pts/9 21582 20 42/42, 16635 bytes; UTF-8 0/42, 0 bytes >> 1: uake: 6 windows (created Thu Jun 3 01:56:05 2010) [125x20] [flags=0x0, >> references=0] >> 1: weechat-curses [125x20] [flags=0x0, references=1, last layout=-1] >> 0: /dev/pts/3 19031 14 20/20, 10665 bytes; UTF-8 1/20, 550 bytes >> 2: bash [125x20] [flags=0x0, references=1, last layout=-1] >> 0: /dev/pts/4 19033 15 40/40, 13290 bytes; UTF-8 0/40, 0 bytes >> 3: less [125x20] [flags=0x0, references=1, last layout=-1] >> 0: /dev/pts/5 19036 16 192/199, 28850 bytes; UTF-8 0/199, 0 bytes >> 4: bash [125x20] [flags=0x0, references=1, last layout=-1] >> 0: /dev/pts/6 19041 17 1/20, 55 bytes; UTF-8 0/20, 0 bytes >> 5: bash [125x20] [flags=0x0, references=1, last layout=-1] >> 0: /dev/pts/7 19048 18 1/20, 55 bytes; UTF-8 0/20, 0 bytes >> 6: bash [125x20] [flags=0x0, references=1, last layout=-1] >> 0: /dev/pts/8 19054 19 36/54, 12230 bytes; UTF-8 0/54, 0 bytes >> >> Terminals: >> xterm-color [references=2, flags=0x0]: >> 1: acsc: (string) ``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~ >> 0: AX: [missing] >> 2: bel: (string) \007 >> 3: blink: [missing] >> 4: bold: (string) \033[1m >> 5: civis: [missing] >> 6: clear: (string) \033[H\033[2J >> 7: cnorm: [missing] >> 8: colors: (number) 8 >> 9: csr: (string) \033[%i%p1%d;%p2%dr >> 10: cub: (string) \033[%p1%dD >> 11: cub1: (string) \010 >> 12: cud: (string) \033[%p1%dB >> 13: cud1: (string) \012 >> 14: cuf: (string) \033[%p1%dC >> 15: cuf1: (string) \033[C >> 16: cup: (string) \033[%i%p1%d;%p2%dH >> 17: cuu: (string) \033[%p1%dA >> 18: cuu1: (string) \033[A >> 19: dch: (string) \033[%p1%dP >> 20: dch1: (string) \033[P >> 21: dim: [missing] >> 22: dl: (string) \033[%p1%dM >> 23: dl1: (string) \033[M >> 24: el: (string) \033[K >> 25: el1: [missing] >> 26: enacs: (string) \033)0 >> 27: home: (string) \033[H >> 28: hpa: [missing] >> 29: ich: [missing] >> 30: ich1: [missing] >> 31: il: (string) \033[%p1%dL >> 32: il1: (string) \033[L >> 33: invis: [missing] >> 34: is1: [missing] >> 35: is2: (string) \033[m\033[?7h\033[4l\033>\0337\033[r\033[?1;3;4;6l\0338 >> 36: is3: [missing] >> 37: kcbt: [missing] >> 38: kcub1: (string) \033OD >> 39: kcud1: (string) \033OB >> 40: kcuf1: (string) \033OC >> 41: kcuu1: (string) \033OA >> 42: kDC: [missing] >> 43: kDC3: [missing] >> 44: kDC4: [missing] >> 45: kDC5: [missing] >> 46: kDC6: [missing] >> 47: kDC7: [missing] >> 48: kdch1: (string) \033[3~ >> 49: kDN: [missing] >> 50: kDN3: [missing] >> 51: kDN4: [missing] >> 52: kDN5: [missing] >> 53: kDN6: [missing] >> 54: kDN7: [missing] >> 55: kend: [missing] >> 56: kEND: [missing] >> 57: kEND3: [missing] >> 58: kEND4: [missing] >> 59: kEND5: [missing] >> 60: kEND6: [missing] >> 61: kEND7: [missing] >> 62: kf1: (string) \033[11~ >> 63: kf10: (string) \033[21~ >> 64: kf11: (string) \033[23~ >> 65: kf12: (string) \033[24~ >> 66: kf13: (string) \033[25~ >> 67: kf14: (string) \033[26~ >> 68: kf15: (string) \033[28~ >> 69: kf16: (string) \033[29~ >> 70: kf17: (string) \033[31~ >> 71: kf18: (string) \033[32~ >> 72: kf19: (string) \033[33~ >> 73: kf2: (string) \033[12~ >> 74: kf20: (string) \033[34~ >> 75: kf3: (string) \033[13~ >> 76: kf4: (string) \033[14~ >> 77: kf5: (string) \033[15~ >> 78: kf6: (string) \033[17~ >> 79: kf7: (string) \033[18~ >> 80: kf8: (string) \033[19~ >> 81: kf9: (string) \033[20~ >> 82: kHOM: [missing] >> 83: kHOM3: [missing] >> 84: kHOM4: [missing] >> 85: kHOM5: [missing] >> 86: kHOM6: [missing] >> 87: kHOM7: [missing] >> 88: khome: [missing] >> 89: kIC: [missing] >> 90: kIC3: [missing] >> 91: kIC4: [missing] >> 92: kIC5: [missing] >> 93: kIC6: [missing] >> 94: kIC7: [missing] >> 95: kich1: (string) \033[2~ >> 96: kLFT: [missing] >> 97: kLFT3: [missing] >> 98: kLFT4: [missing] >> 99: kLFT5: [missing] >> 100: kLFT6: [missing] >> 101: kLFT7: [missing] >> 102: kmous: (string) \033[M >> 103: knp: (string) \033[6~ >> 104: kNXT: [missing] >> 105: kNXT3: [missing] >> 106: kNXT4: [missing] >> 107: kNXT5: [missing] >> 108: kNXT6: [missing] >> 109: kNXT7: [missing] >> 110: kpp: (string) \033[5~ >> 111: kPRV: [missing] >> 112: kPRV3: [missing] >> 113: kPRV4: [missing] >> 114: kPRV5: [missing] >> 115: kPRV6: [missing] >> 116: kPRV7: [missing] >> 117: kRIT: [missing] >> 118: kRIT3: [missing] >> 119: kRIT4: [missing] >> 120: kRIT5: [missing] >> 121: kRIT6: [missing] >> 122: kRIT7: [missing] >> 123: kUP: [missing] >> 124: kUP3: [missing] >> 125: kUP4: [missing] >> 126: kUP5: [missing] >> 127: kUP6: [missing] >> 128: kUP7: [missing] >> 129: op: (string) \033[m >> 130: rev: (string) \033[7m >> 131: ri: (string) \033M >> 132: rmacs: (string) \017 >> 133: rmcup: (string) \033[2J\033[?47l\0338 >> 134: rmir: (string) \033[4l >> 135: rmkx: (string) \033[?1l\033> >> 136: setab: (string) \033[4%p1%dm >> 137: setaf: (string) \033[3%p1%dm >> 138: sgr0: (string) \033[m >> 139: smacs: (string) \016 >> 140: smcup: (string) \0337\033[?47h >> 141: smir: (string) \033[4h >> 142: smkx: (string) \033[?1h\033= >> 143: smso: (string) \033[7m >> 144: smul: (string) \033[4m >> 145: vpa: [missing] >> 146: xenl: (flag) true >> >> Jobs: > > > ------------------- Raghavendra D Prabhu ------------------------------------------------------------------------------ ThinkGeek and WIRED's GeekDad team up for the Ultimate GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the lucky parental unit. See the prize list and enter to win: http://p.sf.net/sfu/thinkgeek-promo _______________________________________________ tmux-users mailing list tmux-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tmux-users