Problem: FocusGained does not work when 'ttymouse' is empty.
Solution: Don't use the short mouse code if there is a longer matching code.
(closes #7755) Add a test.
else
#endif // FEAT_GUI
{
+ int mouse_index_found = -1;
+
for (idx = 0; idx < tc_len; ++idx)
{
/*
}
}
- key_name[0] = termcodes[idx].name[0];
- key_name[1] = termcodes[idx].name[1];
- break;
+ // The mouse termcode "ESC [" is also the prefix of
+ // "ESC [ I" (focus gained). Only use it when there is
+ // no other match. Do use it when a digit is following to
+ // avoid waiting for more bytes.
+ if (slen == 2 && len > 2
+ && termcodes[idx].code[0] == ESC
+ && termcodes[idx].code[1] == '['
+ && !isdigit(tp[2]))
+ {
+ if (mouse_index_found < 0)
+ mouse_index_found = idx;
+ }
+ else
+ {
+ key_name[0] = termcodes[idx].name[0];
+ key_name[1] = termcodes[idx].name[1];
+ break;
+ }
}
/*
* When there is a modifier the * matches a number.
* When there is no modifier the ;* or * is omitted.
*/
- if (termcodes[idx].modlen > 0)
+ if (termcodes[idx].modlen > 0 && mouse_index_found < 0)
{
int at_code;
}
}
}
+ if (idx == tc_len && mouse_index_found >= 0)
+ {
+ key_name[0] = termcodes[mouse_index_found].name[0];
+ key_name[1] = termcodes[mouse_index_found].name[1];
+ }
}
#ifdef FEAT_TERMRESPONSE
call test_override('term_props', 0)
endfunc
+func Test_focus_events()
+ let save_term = &term
+ let save_ttymouse = &ttymouse
+ set term=xterm ttymouse=xterm2
+
+ au FocusGained * let g:focus_gained += 1
+ au FocusLost * let g:focus_lost += 1
+ let g:focus_gained = 0
+ let g:focus_lost = 0
+
+ call feedkeys("\<Esc>[O", "Lx!")
+ call assert_equal(1, g:focus_lost)
+ call feedkeys("\<Esc>[I", "Lx!")
+ call assert_equal(1, g:focus_gained)
+
+ " still works when 'ttymouse' is empty
+ set ttymouse=
+ call feedkeys("\<Esc>[O", "Lx!")
+ call assert_equal(2, g:focus_lost)
+ call feedkeys("\<Esc>[I", "Lx!")
+ call assert_equal(2, g:focus_gained)
+
+ au! FocusGained
+ au! FocusLost
+ let &term = save_term
+ let &ttymouse = save_ttymouse
+endfunc
+
func Test_get_termcode()
try
let k1 = &t_k1
endfunc
" Test for translation of special key codes (<xF1>, <xF2>, etc.)
-func Test_Keycode_Tranlsation()
+func Test_Keycode_Translation()
let keycodes = [
\ ["<xUp>", "<Up>"],
\ ["<xDown>", "<Down>"],
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 2428,
/**/
2427,
/**/