mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	patch 9.0.0988: using feedkeys() does not show up in a channel log
Problem: Using feedkeys() does not show up in a channel log. Solution: Add ch_log() calls and clean up the code.
This commit is contained in:
		
							
								
								
									
										119
									
								
								src/evalfunc.c
									
									
									
									
									
								
							
							
						
						
									
										119
									
								
								src/evalfunc.c
									
									
									
									
									
								
							| @@ -4343,7 +4343,6 @@ f_feedkeys(typval_T *argvars, typval_T *rettv UNUSED) | |||||||
|     int		context = FALSE; |     int		context = FALSE; | ||||||
|     int		dangerous = FALSE; |     int		dangerous = FALSE; | ||||||
|     int		lowlevel = FALSE; |     int		lowlevel = FALSE; | ||||||
|     char_u	*keys_esc; |  | ||||||
|  |  | ||||||
|     // This is not allowed in the sandbox.  If the commands would still be |     // 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, |     // 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) |     if (*keys != NUL || execute) | ||||||
|     { |     { | ||||||
| 	// Need to escape K_SPECIAL and CSI before putting the string in the | 	if (lowlevel) | ||||||
| 	// typeahead buffer. |  | ||||||
| 	keys_esc = vim_strsave_escape_csi(keys); |  | ||||||
| 	if (keys_esc != NULL) |  | ||||||
| 	{ | 	{ | ||||||
| 	    if (lowlevel) |  | ||||||
| 	    { |  | ||||||
| #ifdef USE_INPUT_BUF | #ifdef USE_INPUT_BUF | ||||||
| 		int len = (int)STRLEN(keys); | 	    ch_log(NULL, "feedkeys() lowlevel: %s", keys); | ||||||
|  |  | ||||||
| 		for (int idx = 0; idx < len; ++idx) | 	    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 a CTRL-C was typed, set got_int, similar to what | ||||||
| 		    if (keys[idx] == 3 && ctrl_c_interrupts && typed) | 		// happens in fill_input_buf() | ||||||
| 			got_int = TRUE; | 		if (keys[idx] == 3 && ctrl_c_interrupts && typed) | ||||||
| 		    add_to_input_buf(keys + idx, 1); | 		    got_int = TRUE; | ||||||
| 		} | 		add_to_input_buf(keys + idx, 1); | ||||||
|  | 	    } | ||||||
| #else | #else | ||||||
| 		emsg(_(e_lowlevel_input_not_supported)); | 	    emsg(_(e_lowlevel_input_not_supported)); | ||||||
| #endif | #endif | ||||||
| 	    } | 	} | ||||||
| 	    else | 	else | ||||||
| 	    { | 	{ | ||||||
| 		ins_typebuf(keys_esc, (remap ? REMAP_YES : REMAP_NONE), | 	    // Need to escape K_SPECIAL and CSI before putting the string in | ||||||
| 				  insert ? 0 : typebuf.tb_len, !typed, FALSE); | 	    // the typeahead buffer. | ||||||
| 		if (vgetc_busy | 	    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 | #ifdef FEAT_TIMERS | ||||||
| 			|| timer_busy | 		    || timer_busy | ||||||
| #endif | #endif | ||||||
| 			|| input_busy) | 		    || input_busy) | ||||||
| 		    typebuf_was_filled = TRUE; | 		typebuf_was_filled = TRUE; | ||||||
| 	    } |  | ||||||
| 	    vim_free(keys_esc); | 	    vim_free(keys_esc); | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	    if (execute) | 	if (execute) | ||||||
|  | 	{ | ||||||
|  | 	    int		save_msg_scroll = msg_scroll; | ||||||
|  | 	    sctx_T	save_sctx; | ||||||
|  |  | ||||||
|  | 	    // Avoid a 1 second delay when the keys start Insert mode. | ||||||
|  | 	    msg_scroll = FALSE; | ||||||
|  |  | ||||||
|  | 	    ch_log(NULL, "feedkeys() executing"); | ||||||
|  |  | ||||||
|  | 	    if (context) | ||||||
| 	    { | 	    { | ||||||
| 		int	save_msg_scroll = msg_scroll; | 		save_sctx = current_sctx; | ||||||
| 		sctx_T	save_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 (context) |  | ||||||
| 		{ |  | ||||||
| 		    save_sctx = current_sctx; |  | ||||||
| 		    current_sctx.sc_sid = 0; |  | ||||||
| 		    current_sctx.sc_version = 0; |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		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; |  | ||||||
| 	    } | 	    } | ||||||
|  |  | ||||||
|  | 	    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; | ||||||
| 	} | 	} | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -695,6 +695,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 */ | ||||||
|  | /**/ | ||||||
|  |     988, | ||||||
| /**/ | /**/ | ||||||
|     987, |     987, | ||||||
| /**/ | /**/ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user