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);