in certain conditions, vim was freezing on swap file prompt. One of our users tracked that bug down, and a patch is attached.
look http://bugs.debian.org/292397 for more explanations ! Cheers, ---------- Message transmis ---------- Subject: Bug#292397: vim freezes on swap file prompt Date: Jeu 13 Avril 2006 13:55 From: Bas Zoetekouw <[EMAIL PROTECTED]> To: [EMAIL PROTECTED] Cc: [EMAIL PROTECTED] package vim tag 292397 + upstream tag 292397 + patch thansk Hi! I've done some more debugging on this problem, and it seems only a few of the vim variants are affected. Specifically, I can reprocude the problem using vim.gnome, vim.python and vim.perl, but vim.basic, vim.gtk, vim.tiny, vim.lesstif, vim.ruby, vi.tcl and vim.full work fine. Also, I've build a version of vim.perl with -ggdb3, and can reproduce the problem there. GDB gives the following backtrace after the freeze: | (gdb) bt | #0 0xffffe410 in __kernel_vsyscall () | #1 0xb77fed6d in ___newselect_nocancel () from | /lib/tls/i686/cmov/libc.so.6 #2 0x0815887b in RealWaitForChar | (fd=0, msec=100, check_for_gpm=0xbfcd399c) at os_unix.c:4743 #3 | 0x081585c1 in WaitForChar (msec=100) at os_unix.c:4445 | #4 0x08154b75 in mch_inchar (buf=0xbfcd3a4a "", maxlen=46, | wtime=100, tb_change_cnt=0) at os_unix.c:328 #5 0x081b950f in | ui_inchar (buf=0xbfcd3a4a "", maxlen=46, wtime=100, tb_change_cnt=0) | at ui.c:189 #6 0x081185dd in get_keystroke () at misc1.c:3025 | #7 0x08111f63 in do_dialog (type=2, title=0x81fb014 "VIM - | ATTENTION", message=0x82fa060 "Swap file \"/tmp//%tmp%test.swp\" | already exists!", buttons=0x81faf88 "&Open Read-Only\n&Edit | anyway\n&Recover\n&Quit\n&Abort", dfltbutton=1, textfield=0x0) at | message.c:3298 #8 0x0810971d in findswapname (buf=0x8234428, | dirp=0xbfcd404c, old_fname=0x0) at memline.c:4107 #9 0x081039a2 in | ml_open_file (buf=0x8234428) at memline.c:552 #10 0x08103ac4 in | check_need_swap (newfile=1) at memline.c:604 #11 0x080d27d0 in | readfile (fname=0x8235848 "/tmp/test", sfname=0x8235848 "/tmp/test", | from=0, lines_to_skip=0, lines_to_read=2147483647, eap=0x0, flags=1) | at fileio.c:642 #12 0x0806c4a2 in open_buffer (read_stdin=0, | eap=0x0) at buffer.c:130 #13 0x080f770a in create_windows | (parmp=0xbfcd43f0) at main.c:2378 #14 0x080f5589 in main (argc=2, | argv=0xbfcd4534) at main.c:794 If I set a breakpoint on line 3026 of misc1.c (just after the ui_inchar() call), I can verify that indeed a special key code is returned (i.e. the cursor I pressed). Specifically, the key code returned is 0x80 0x8a 0x95 ("\eku", which I guess means the uparrow). However, this key is not handled at all: in the FEAT_MBYTE ifdef on line 3084, the "continue" is called, and the loop progresses to the next iteration, after which the key is never returned anymore by get_keystroke(). So, the problem seems to be that the special sequences that are generated by the cursor keys are mistaken for an incomplete multibyte sequence; the check for such a special sequence is only done in do_diaglog(), after get_keystroke() has returned. The following patch solves this, and works fine here. Please include it in the debian packages and also send it upstream. --- vim/src/misc1.eerst 2006-04-13 13:45:37.000000000 +0200 +++ vim/src/misc1.c 2006-04-13 13:48:10.000000000 +0200 @@ -3082,7 +3082,9 @@ } } #ifdef FEAT_MBYTE - if (has_mbyte) + /* if n<0, this is a special key (eg cursor) which should + * not be mistaken for an incomplete multibyte sequence */ + if (has_mbyte && n>=0) { if (MB_BYTE2LEN(n) > len) continue; /* more bytes to get */ Happy Vimming! Bas. PS: this was all tested using the 6.4+7.0c05-1 versions from experimental. -- Kind regards, +--------------------------------------------------------------------+ | Bas Zoetekouw | GPG key: 0644fab7 | |----------------------------| Fingerprint: c1f5 f24c d514 3fec 8bf6 | | [EMAIL PROTECTED], [EMAIL PROTECTED] | a2b1 2bae e41f 0644 fab7 | +--------------------------------------------------------------------+ ------------------------------------------------------- -- ·O· Pierre Habouzit ··O [EMAIL PROTECTED] OOO http://www.madism.org