]> granicus.if.org Git - vim/commitdiff
patch 9.0.0988: using feedkeys() does not show up in a channel log v9.0.0988
authorBram Moolenaar <Bram@vim.org>
Fri, 2 Dec 2022 13:37:36 +0000 (13:37 +0000)
committerBram Moolenaar <Bram@vim.org>
Fri, 2 Dec 2022 13:37:36 +0000 (13:37 +0000)
Problem:    Using feedkeys() does not show up in a channel log.
Solution:   Add ch_log() calls and clean up the code.

src/evalfunc.c
src/version.c

index e72f8610fec11cf729af47dc7f95de5ece621db8..fa63ab2e2104cfd372624fcc8774ca6b40e93ce6 100644 (file)
@@ -4343,7 +4343,6 @@ f_feedkeys(typval_T *argvars, typval_T *rettv UNUSED)
     int                context = FALSE;
     int                dangerous = FALSE;
     int                lowlevel = FALSE;
-    char_u     *keys_esc;
 
     // This is not allowed in the sandbox.  If the commands would still be
     // executed in the sandbox it would be OK, but it probably happens later,
@@ -4379,73 +4378,79 @@ f_feedkeys(typval_T *argvars, typval_T *rettv UNUSED)
 
     if (*keys != NUL || execute)
     {
-       // Need to escape K_SPECIAL and CSI before putting the string in the
-       // typeahead buffer.
-       keys_esc = vim_strsave_escape_csi(keys);
-       if (keys_esc != NULL)
+       if (lowlevel)
        {
-           if (lowlevel)
-           {
 #ifdef USE_INPUT_BUF
-               int len = (int)STRLEN(keys);
+           ch_log(NULL, "feedkeys() lowlevel: %s", keys);
 
-               for (int idx = 0; idx < len; ++idx)
-               {
-                   // if a CTRL-C was typed, set got_int, similar to what
-                   // happens in fill_input_buf()
-                   if (keys[idx] == 3 && ctrl_c_interrupts && typed)
-                       got_int = TRUE;
-                   add_to_input_buf(keys + idx, 1);
-               }
+           int len = (int)STRLEN(keys);
+           for (int idx = 0; idx < len; ++idx)
+           {
+               // if a CTRL-C was typed, set got_int, similar to what
+               // happens in fill_input_buf()
+               if (keys[idx] == 3 && ctrl_c_interrupts && typed)
+                   got_int = TRUE;
+               add_to_input_buf(keys + idx, 1);
+           }
 #else
-               emsg(_(e_lowlevel_input_not_supported));
+           emsg(_(e_lowlevel_input_not_supported));
 #endif
-           }
-           else
-           {
-               ins_typebuf(keys_esc, (remap ? REMAP_YES : REMAP_NONE),
-                                 insert ? 0 : typebuf.tb_len, !typed, FALSE);
-               if (vgetc_busy
+       }
+       else
+       {
+           // Need to escape K_SPECIAL and CSI before putting the string in
+           // the typeahead buffer.
+           char_u *keys_esc = vim_strsave_escape_csi(keys);
+           if (keys_esc == NULL)
+               return;
+
+           ch_log(NULL, "feedkeys(%s): %s", typed ? "typed" : "", keys);
+
+           ins_typebuf(keys_esc, (remap ? REMAP_YES : REMAP_NONE),
+                                  insert ? 0 : typebuf.tb_len, !typed, FALSE);
+           if (vgetc_busy
 #ifdef FEAT_TIMERS
-                       || timer_busy
+                   || timer_busy
 #endif
-                       || input_busy)
-                   typebuf_was_filled = TRUE;
-           }
-           vim_free(keys_esc);
+                   || input_busy)
+               typebuf_was_filled = TRUE;
 
-           if (execute)
-           {
-               int     save_msg_scroll = msg_scroll;
-               sctx_T  save_sctx;
+           vim_free(keys_esc);
+       }
 
-               // Avoid a 1 second delay when the keys start Insert mode.
-               msg_scroll = FALSE;
+       if (execute)
+       {
+           int         save_msg_scroll = msg_scroll;
+           sctx_T      save_sctx;
 
-               if (context)
-               {
-                   save_sctx = current_sctx;
-                   current_sctx.sc_sid = 0;
-                   current_sctx.sc_version = 0;
-               }
+           // Avoid a 1 second delay when the keys start Insert mode.
+           msg_scroll = FALSE;
 
-               if (!dangerous)
-               {
-                   ++ex_normal_busy;
-                   ++in_feedkeys;
-               }
-               exec_normal(TRUE, lowlevel, TRUE);
-               if (!dangerous)
-               {
-                   --ex_normal_busy;
-                   --in_feedkeys;
-               }
+           ch_log(NULL, "feedkeys() executing");
 
-               msg_scroll |= save_msg_scroll;
+           if (context)
+           {
+               save_sctx = current_sctx;
+               current_sctx.sc_sid = 0;
+               current_sctx.sc_version = 0;
+           }
 
-               if (context)
-                   current_sctx = save_sctx;
+           if (!dangerous)
+           {
+               ++ex_normal_busy;
+               ++in_feedkeys;
            }
+           exec_normal(TRUE, lowlevel, TRUE);
+           if (!dangerous)
+           {
+               --ex_normal_busy;
+               --in_feedkeys;
+           }
+
+           msg_scroll |= save_msg_scroll;
+
+           if (context)
+               current_sctx = save_sctx;
        }
     }
 }
index 93e35f622ffb2e0e9248b350611fef2556376731..4cb746e18946848f65906540344b279bf0c1d7f4 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    988,
 /**/
     987,
 /**/