Yukihiro Nakadaira wrote: > 2011/10/2 Yue Wu <[email protected]>: > > Hello list, > > > > I'm running vim in a tmux session in xterm, I find that, when I quit > > Xorg and start it again, then restore tmux session in a xterm, the > > running vim will get mess, the keybindings and functions of the plugins > > will get lost, I have to restart vim to make it back into normal > > condition. > > > > What's wrong? > > When X connection lost, Vim uses longjmp() (Jump from > os_unix.c:x_IOerror_handler() to main.c:999). > While processing vgetorpeek(), it may occur. > And when it occur, vgetc_busy global variable is not reset (Normally it > is reset at end of vgetorpeek()). > Then after longjmp(), mappings are never applied because vgetc_busy > 0 > is always true. > I think there is other situation that longjmp() breaks something. > > > main.c: > 994 #if defined(FEAT_X11) && defined(FEAT_XCLIPBOARD) > 995 /* Setup to catch a terminating error from the X server. Just ignore > 996 * it, restore the state and continue. This might not always work > 997 * properly, but at least we don't exit unexpectedly when the X server > 998 * exists while Vim is running in a console. */ > 999 if (!cmdwin && !noexmode && SETJMP(x_jump_env)) > 1000 { > 1001 State = NORMAL; > 1002 # ifdef FEAT_VISUAL > 1003 VIsual_active = FALSE; > 1004 # endif > 1005 got_int = TRUE; > 1006 need_wait_return = FALSE; > 1007 global_busy = FALSE; > > > ad-hoc fix.
Thanks. I'll put it on the todo list. -- Change is inevitable, except from a vending machine. /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org /// -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php
