]> granicus.if.org Git - vim/commitdiff
patch 8.0.0764: 'termkey' does not work yet v8.0.0764
authorBram Moolenaar <Bram@vim.org>
Sun, 23 Jul 2017 20:50:51 +0000 (22:50 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 23 Jul 2017 20:50:51 +0000 (22:50 +0200)
Problem:    'termkey' does not work yet.
Solution:   Implement 'termkey'.

src/option.c
src/proto/option.pro
src/terminal.c
src/version.c

index fa7eac4e1ad8dde9250da137b18aa849de1aa417..6dbc3d1170aca0b733bcadeda02f12ed7ead6dce 100644 (file)
@@ -3269,7 +3269,6 @@ static void set_options_default(int opt_flags);
 static char_u *term_bg_default(void);
 static void did_set_option(int opt_idx, int opt_flags, int new_value);
 static char_u *illegal_char(char_u *, int);
-static int string_to_key(char_u *arg);
 #ifdef FEAT_CMDWIN
 static char_u *check_cedit(void);
 #endif
@@ -4763,7 +4762,7 @@ do_set(
                                        && (!arg[1] || VIM_ISWHITE(arg[1]))
                                        && !VIM_ISDIGIT(*arg))))
                        {
-                           value = string_to_key(arg);
+                           value = string_to_key(arg, FALSE);
                            if (value == 0 && (long *)varp != &p_wcm)
                            {
                                errmsg = e_invarg;
@@ -5320,14 +5319,17 @@ illegal_char(char_u *errbuf, int c)
 /*
  * Convert a key name or string into a key value.
  * Used for 'wildchar' and 'cedit' options.
+ * When "multi_byte" is TRUE allow for multi-byte characters.
  */
-    static int
-string_to_key(char_u *arg)
+    int
+string_to_key(char_u *arg, int multi_byte)
 {
     if (*arg == '<')
        return find_key_option(arg + 1);
     if (*arg == '^')
        return Ctrl_chr(arg[1]);
+    if (multi_byte)
+       return PTR2CHAR(arg);
     return *arg;
 }
 
@@ -5345,7 +5347,7 @@ check_cedit(void)
        cedit_key = -1;
     else
     {
-       n = string_to_key(p_cedit);
+       n = string_to_key(p_cedit, FALSE);
        if (vim_isprintc(n))
            return e_invarg;
        cedit_key = n;
@@ -7462,6 +7464,12 @@ did_set_string_option(
 #endif
 
 #ifdef FEAT_TERMINAL
+    /* 'termkey' */
+    else if (varp == &curwin->w_p_tms)
+    {
+       if (*curwin->w_p_tk != NUL && string_to_key(curwin->w_p_tk, TRUE) == 0)
+           errmsg = e_invarg;
+    }
     /* 'termsize' */
     else if (varp == &curwin->w_p_tms)
     {
index 8c9bde583a7b92f92e3d97c7cc5a8d047c02a55c..59dcd42724deb17565b8ce8ed85f3315851c62db 100644 (file)
@@ -9,6 +9,7 @@ void set_helplang_default(char_u *lang);
 void init_gui_options(void);
 void set_title_defaults(void);
 int do_set(char_u *arg, int opt_flags);
+int string_to_key(char_u *arg, int multi_byte);
 void set_options_bin(int oldval, int newval, int opt_flags);
 int get_viminfo_parameter(int type);
 char_u *find_viminfo_parameter(int type);
index f5a9fd1a6884bb1f65e9282ae33f6dd8453fdb00..f2fae578951932414e0a6508f2e94dc7fa928b34 100644 (file)
@@ -60,9 +60,9 @@
  * - implement term_scrape(buf, row)           inspect terminal screen
  * - implement term_open(command, options)     open terminal window
  * - implement term_getjob(buf)
- * - implement 'termkey'
  * - when 'encoding' is not utf-8, or the job is using another encoding, setup
  *   conversions.
+ * - In the GUI use a terminal emulator for :!cmd.
  */
 
 #include "vim.h"
@@ -445,6 +445,10 @@ terminal_loop(void)
     size_t     len;
     static int mouse_was_outside = FALSE;
     int                dragging_outside = FALSE;
+    int                termkey = 0;
+
+    if (*curwin->w_p_tk != NUL)
+       termkey = string_to_key(curwin->w_p_tk, TRUE);
 
     for (;;)
     {
@@ -459,10 +463,15 @@ terminal_loop(void)
        --no_mapping;
        --allow_keys;
 
+       if (c == (termkey == 0 ? Ctrl_W : termkey))
+       {
+           stuffcharReadbuff(Ctrl_W);
+           return;
+       }
+
        /* Catch keys that need to be handled as in Normal mode. */
        switch (c)
        {
-           case Ctrl_W:
            case NUL:
            case K_ZERO:
                stuffcharReadbuff(c);
index e2ab84c3c88ac62e5eb253710762ceeaa3c336ce..ed580491e94cc99b5fd030fb2f06c502d5bf77aa 100644 (file)
@@ -769,6 +769,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    764,
 /**/
     763,
 /**/