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

Reply via email to