Mercurial > vim
comparison src/terminal.c @ 12845:15696054bc6c v8.0.1299
patch 8.0.1299: bracketed paste does not work well in terminal window
commit https://github.com/vim/vim/commit/a42ad57e481d6ed9c34c80c99bd0512d4660515b
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Nov 16 13:08:04 2017 +0100
patch 8.0.1299: bracketed paste does not work well in terminal window
Problem: Bracketed paste does not work well in terminal window.
Solution: Send translated string to job right away. (Ozaki Kiichi, closes
#2341)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Thu, 16 Nov 2017 13:15:05 +0100 |
parents | 8dfeed7e07e7 |
children | ebb4f6c93598 |
comparison
equal
deleted
inserted
replaced
12844:f12943393a2e | 12845:15696054bc6c |
---|---|
38 * in tl_scrollback are no longer used. | 38 * in tl_scrollback are no longer used. |
39 * | 39 * |
40 * TODO: | 40 * TODO: |
41 * - in GUI vertical split causes problems. Cursor is flickering. (Hirohito | 41 * - in GUI vertical split causes problems. Cursor is flickering. (Hirohito |
42 * Higashi, 2017 Sep 19) | 42 * Higashi, 2017 Sep 19) |
43 * - double click in Window toolbar starts Visual mode (but not always?). | |
44 * - Shift-Tab does not work. | 43 * - Shift-Tab does not work. |
45 * - after resizing windows overlap. (Boris Staletic, #2164) | 44 * - after resizing windows overlap. (Boris Staletic, #2164) |
46 * - Redirecting output does not work on MS-Windows, Test_terminal_redir_file() | 45 * - Redirecting output does not work on MS-Windows, Test_terminal_redir_file() |
47 * is disabled. | 46 * is disabled. |
48 * - cursor blinks in terminal on widows with a timer. (xtal8, #2142) | 47 * - cursor blinks in terminal on widows with a timer. (xtal8, #2142) |
730 term_convert_key(term_T *term, int c, char *buf) | 729 term_convert_key(term_T *term, int c, char *buf) |
731 { | 730 { |
732 VTerm *vterm = term->tl_vterm; | 731 VTerm *vterm = term->tl_vterm; |
733 VTermKey key = VTERM_KEY_NONE; | 732 VTermKey key = VTERM_KEY_NONE; |
734 VTermModifier mod = VTERM_MOD_NONE; | 733 VTermModifier mod = VTERM_MOD_NONE; |
735 int mouse = FALSE; | 734 int other = FALSE; |
736 | 735 |
737 switch (c) | 736 switch (c) |
738 { | 737 { |
739 /* don't use VTERM_KEY_ENTER, it may do an unwanted conversion */ | 738 /* don't use VTERM_KEY_ENTER, it may do an unwanted conversion */ |
740 | 739 |
807 case K_UP: key = VTERM_KEY_UP; break; | 806 case K_UP: key = VTERM_KEY_UP; break; |
808 case K_S_UP: mod = VTERM_MOD_SHIFT; | 807 case K_S_UP: mod = VTERM_MOD_SHIFT; |
809 key = VTERM_KEY_UP; break; | 808 key = VTERM_KEY_UP; break; |
810 case TAB: key = VTERM_KEY_TAB; break; | 809 case TAB: key = VTERM_KEY_TAB; break; |
811 | 810 |
812 case K_MOUSEUP: mouse = term_send_mouse(vterm, 5, 1); break; | 811 case K_MOUSEUP: other = term_send_mouse(vterm, 5, 1); break; |
813 case K_MOUSEDOWN: mouse = term_send_mouse(vterm, 4, 1); break; | 812 case K_MOUSEDOWN: other = term_send_mouse(vterm, 4, 1); break; |
814 case K_MOUSELEFT: /* TODO */ return 0; | 813 case K_MOUSELEFT: /* TODO */ return 0; |
815 case K_MOUSERIGHT: /* TODO */ return 0; | 814 case K_MOUSERIGHT: /* TODO */ return 0; |
816 | 815 |
817 case K_LEFTMOUSE: | 816 case K_LEFTMOUSE: |
818 case K_LEFTMOUSE_NM: mouse = term_send_mouse(vterm, 1, 1); break; | 817 case K_LEFTMOUSE_NM: other = term_send_mouse(vterm, 1, 1); break; |
819 case K_LEFTDRAG: mouse = term_send_mouse(vterm, 1, 1); break; | 818 case K_LEFTDRAG: other = term_send_mouse(vterm, 1, 1); break; |
820 case K_LEFTRELEASE: | 819 case K_LEFTRELEASE: |
821 case K_LEFTRELEASE_NM: mouse = term_send_mouse(vterm, 1, 0); break; | 820 case K_LEFTRELEASE_NM: other = term_send_mouse(vterm, 1, 0); break; |
822 case K_MIDDLEMOUSE: mouse = term_send_mouse(vterm, 2, 1); break; | 821 case K_MIDDLEMOUSE: other = term_send_mouse(vterm, 2, 1); break; |
823 case K_MIDDLEDRAG: mouse = term_send_mouse(vterm, 2, 1); break; | 822 case K_MIDDLEDRAG: other = term_send_mouse(vterm, 2, 1); break; |
824 case K_MIDDLERELEASE: mouse = term_send_mouse(vterm, 2, 0); break; | 823 case K_MIDDLERELEASE: other = term_send_mouse(vterm, 2, 0); break; |
825 case K_RIGHTMOUSE: mouse = term_send_mouse(vterm, 3, 1); break; | 824 case K_RIGHTMOUSE: other = term_send_mouse(vterm, 3, 1); break; |
826 case K_RIGHTDRAG: mouse = term_send_mouse(vterm, 3, 1); break; | 825 case K_RIGHTDRAG: other = term_send_mouse(vterm, 3, 1); break; |
827 case K_RIGHTRELEASE: mouse = term_send_mouse(vterm, 3, 0); break; | 826 case K_RIGHTRELEASE: other = term_send_mouse(vterm, 3, 0); break; |
828 case K_X1MOUSE: /* TODO */ return 0; | 827 case K_X1MOUSE: /* TODO */ return 0; |
829 case K_X1DRAG: /* TODO */ return 0; | 828 case K_X1DRAG: /* TODO */ return 0; |
830 case K_X1RELEASE: /* TODO */ return 0; | 829 case K_X1RELEASE: /* TODO */ return 0; |
831 case K_X2MOUSE: /* TODO */ return 0; | 830 case K_X2MOUSE: /* TODO */ return 0; |
832 case K_X2DRAG: /* TODO */ return 0; | 831 case K_X2DRAG: /* TODO */ return 0; |
856 case K_DROP: return 0; | 855 case K_DROP: return 0; |
857 #endif | 856 #endif |
858 #ifdef FEAT_AUTOCMD | 857 #ifdef FEAT_AUTOCMD |
859 case K_CURSORHOLD: return 0; | 858 case K_CURSORHOLD: return 0; |
860 #endif | 859 #endif |
861 case K_PS: vterm_keyboard_start_paste(vterm); return 0; | 860 case K_PS: vterm_keyboard_start_paste(vterm); |
862 case K_PE: vterm_keyboard_end_paste(vterm); return 0; | 861 other = TRUE; |
862 break; | |
863 case K_PE: vterm_keyboard_end_paste(vterm); | |
864 other = TRUE; | |
865 break; | |
863 } | 866 } |
864 | 867 |
865 /* | 868 /* |
866 * Convert special keys to vterm keys: | 869 * Convert special keys to vterm keys: |
867 * - Write keys to vterm: vterm_keyboard_key() | 870 * - Write keys to vterm: vterm_keyboard_key() |
869 * TODO: use mod_mask | 872 * TODO: use mod_mask |
870 */ | 873 */ |
871 if (key != VTERM_KEY_NONE) | 874 if (key != VTERM_KEY_NONE) |
872 /* Special key, let vterm convert it. */ | 875 /* Special key, let vterm convert it. */ |
873 vterm_keyboard_key(vterm, key, mod); | 876 vterm_keyboard_key(vterm, key, mod); |
874 else if (!mouse) | 877 else if (!other) |
875 /* Normal character, let vterm convert it. */ | 878 /* Normal character, let vterm convert it. */ |
876 vterm_keyboard_unichar(vterm, c, mod); | 879 vterm_keyboard_unichar(vterm, c, mod); |
877 | 880 |
878 /* Read back the converted escape sequence. */ | 881 /* Read back the converted escape sequence. */ |
879 return (int)vterm_output_read(vterm, buf, KEY_BUF_LEN); | 882 return (int)vterm_output_read(vterm, buf, KEY_BUF_LEN); |