Last night I wrote:
> 3) With strace, I see that it happens after ~/.viminfo is read the
...
>    That's vim writing the size of the file out (" 1L, 10C"), opening
>    and reading viminfo, checking the working directory for about the
>    15th time, setting some tty ioctl()s, then it writes an escape
>    sequence ("\33[>c"), detects (with select()) there is a response and
>    reads that response in ("\33[>41;297;0c"), checks a few more times
>    for input and then writes the file on the screen for the first time.
>
>    The escape sequence "\33[>c" apparently prompts xterm to reply with
>    a version escape sequence, which is read but not processed as a
>    terminal response, and is instead treated as user input.
>
> I have not yet pinned down what function is sending that escape
> sequence. 

The escape sequence is sent by may_req_termresponse() called from
main.c:895. The issue is not that the sequence is sent in error, it
is that check_termcode() in term.c is misparsing it.

":set termcap" shows me:

        --- Terminal codes ---
        ... t_RV=^[[>c ...

That's the Request Version (or similar) code.

        --- Terminal keys ---
        ... <DecMouse>  ^[[  ...
        ... <NetMouse>  ^[}  ...
        ... <Mouse>     ^[MG ...

With no "ttym=", there is no entry for <DecMouse> under "Terminal keys",
there is only the single entry for <Mouse>. And the DecMouse escape
sequence starts the same as a version response string from xterm, so
key_name[0] gets set in check_termcode(). Then when it reaches:

4066 #ifdef FEAT_TERMRESPONSE 
4067         if (key_name[0] == NUL)
4068         {
4069             /* Check for xterm version string: "<Esc>[>{x};{vers};{y}c".  
Also

the if key_name[0] == NUL is false and the response is not parsed.

And why is <DecMouse> in there? It's over in check_mouse_termcode()
in os_unix.c:

3478 # ifdef FEAT_MOUSE_DEC
3479     /* conflicts with xterm mouse: "\033[" and "\033[M" */
3480     if (!use_xterm_mouse()
3481 #  ifdef FEAT_GUI
3482             && !gui.in_use
3483 #  endif
3484             )
3485         set_mouse_termcode(KS_DEC_MOUSE, (char_u *)(term_is_8bit(T_NAME)
3486                      ? IF_EB("\233", CSI_STR) : IF_EB("\033[", ESC_STR 
"[")));
3487     else
3488         del_mouse_termcode(KS_DEC_MOUSE);
3489 # endif

By setting ttym to the empty string, use_xterm_mouse() is false, the GUI
not in use, so it adds this bogus mouse escape sequnce that confuses
check_termcode().

What's the best fix then? I'm guessing a check for ttym_flags being non-zero
to each of the set_mouse_termcode() if statements in check_mouse_termcode().

Elijah

-- 
-- 
You received this message from the "vim_use" 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

--- 
You received this message because you are subscribed to the Google Groups 
"vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_use+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to