0
0
mirror of https://github.com/vim/vim.git synced 2025-09-28 04:24:06 -04:00

patch 9.0.0655: passing modifier codes to a shell running in the GUI

Problem:    passing modifier codes to a shell running in the GUI. (Gary
            Johnson)
Solution:   Include modifier codes into the key and drop the modifiers.
This commit is contained in:
Bram Moolenaar
2022-10-04 13:17:31 +01:00
parent ec32c781a2
commit 2f7e1b8b40
5 changed files with 23 additions and 6 deletions

View File

@@ -5106,7 +5106,8 @@ mch_call_shell_fork(
} }
} }
len = term_replace_bs_del_keycode(ta_buf, ta_len, len); // Remove Vim-specific codes from the input.
len = term_replace_keycodes(ta_buf, ta_len, len);
/* /*
* For pipes: echo the typed characters. * For pipes: echo the typed characters.

View File

@@ -4531,7 +4531,7 @@ mch_system_piped(char *cmd, int options)
} }
} }
len = term_replace_bs_del_keycode(ta_buf, ta_len, len); len = term_replace_keycodes(ta_buf, ta_len, len);
/* /*
* For pipes: echo the typed characters. For a pty this * For pipes: echo the typed characters. For a pty this

View File

@@ -86,5 +86,5 @@ void update_tcap(int attr);
void swap_tcap(void); void swap_tcap(void);
void ansi_color2rgb(int nr, char_u *r, char_u *g, char_u *b, char_u *ansi_idx); void ansi_color2rgb(int nr, char_u *r, char_u *g, char_u *b, char_u *ansi_idx);
void cterm_color2rgb(int nr, char_u *r, char_u *g, char_u *b, char_u *ansi_idx); void cterm_color2rgb(int nr, char_u *r, char_u *g, char_u *b, char_u *ansi_idx);
int term_replace_bs_del_keycode(char_u *ta_buf, int ta_len, int len_arg); int term_replace_keycodes(char_u *ta_buf, int ta_len, int len_arg);
/* vim: set ft=c : */ /* vim: set ft=c : */

View File

@@ -6734,10 +6734,11 @@ cterm_color2rgb(int nr, char_u *r, char_u *g, char_u *b, char_u *ansi_idx)
/* /*
* Replace K_BS by <BS> and K_DEL by <DEL>. * Replace K_BS by <BS> and K_DEL by <DEL>.
* Include any modifiers into the key and drop them.
* Returns "len" adjusted for replaced codes. * Returns "len" adjusted for replaced codes.
*/ */
int int
term_replace_bs_del_keycode(char_u *ta_buf, int ta_len, int len_arg) term_replace_keycodes(char_u *ta_buf, int ta_len, int len_arg)
{ {
int len = len_arg; int len = len_arg;
int i; int i;
@@ -6745,7 +6746,20 @@ term_replace_bs_del_keycode(char_u *ta_buf, int ta_len, int len_arg)
for (i = ta_len; i < ta_len + len; ++i) for (i = ta_len; i < ta_len + len; ++i)
{ {
if (ta_buf[i] == CSI && len - i > 2) if (ta_buf[i] == CSI && len - i > 3 && ta_buf[i + 1] == KS_MODIFIER)
{
int modifiers = ta_buf[i + 2];
int key = ta_buf[i + 3];
// Try to use the modifier to modify the key. In any case drop the
// modifier.
mch_memmove(ta_buf + i + 1, ta_buf + i + 4, (size_t)(len - i - 3));
len -= 3;
if (key < 0x80)
key = merge_modifyOtherKeys(key, &modifiers);
ta_buf[i] = key;
}
else if (ta_buf[i] == CSI && len - i > 2)
{ {
c = TERMCAP2KEY(ta_buf[i + 1], ta_buf[i + 2]); c = TERMCAP2KEY(ta_buf[i + 1], ta_buf[i + 2]);
if (c == K_DEL || c == K_KDEL || c == K_BS) if (c == K_DEL || c == K_KDEL || c == K_BS)

View File

@@ -699,6 +699,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
655,
/**/ /**/
654, 654,
/**/ /**/