Merge #5253 'perf: Disable clipboard in do_cmdline()'

This commit is contained in:
Justin M. Keyes 2016-08-25 20:47:00 -04:00
commit 4af6ec746c
4 changed files with 20 additions and 28 deletions

View File

@ -4053,9 +4053,7 @@ void ex_global(exarg_T *eap)
smsg(_("Pattern not found: %s"), pat); smsg(_("Pattern not found: %s"), pat);
} }
} else { } else {
start_global_changes();
global_exe(cmd); global_exe(cmd);
end_global_changes();
} }
ml_clearmarked(); /* clear rest of the marks */ ml_clearmarked(); /* clear rest of the marks */
vim_regfree(regmatch.regprog); vim_regfree(regmatch.regprog);

View File

@ -1983,8 +1983,6 @@ void ex_listdo(exarg_T *eap)
save_ei = au_event_disable(",Syntax"); save_ei = au_event_disable(",Syntax");
} }
start_global_changes();
if (eap->cmdidx == CMD_windo if (eap->cmdidx == CMD_windo
|| eap->cmdidx == CMD_tabdo || eap->cmdidx == CMD_tabdo
|| P_HID(curbuf) || P_HID(curbuf)
@ -2181,7 +2179,6 @@ void ex_listdo(exarg_T *eap)
apply_autocmds(EVENT_SYNTAX, curbuf->b_p_syn, apply_autocmds(EVENT_SYNTAX, curbuf->b_p_syn,
curbuf->b_fname, true, curbuf); curbuf->b_fname, true, curbuf);
} }
end_global_changes();
} }
/// Add files[count] to the arglist of the current window after arg "after". /// Add files[count] to the arglist of the current window after arg "after".

View File

@ -345,7 +345,8 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
msg_list = saved_msg_list; msg_list = saved_msg_list;
return FAIL; return FAIL;
} }
++call_depth; call_depth++;
start_batch_changes();
cstack.cs_idx = -1; cstack.cs_idx = -1;
cstack.cs_looplevel = 0; cstack.cs_looplevel = 0;
@ -952,7 +953,8 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
did_endif = FALSE; /* in case do_cmdline used recursively */ did_endif = FALSE; /* in case do_cmdline used recursively */
--call_depth; call_depth--;
end_batch_changes();
return retval; return retval;
} }
@ -9511,20 +9513,15 @@ static void ex_foldopen(exarg_T *eap)
static void ex_folddo(exarg_T *eap) static void ex_folddo(exarg_T *eap)
{ {
linenr_T lnum; // First set the marks for all lines closed/open.
for (linenr_T lnum = eap->line1; lnum <= eap->line2; ++lnum) {
start_global_changes(); if (hasFolding(lnum, NULL, NULL) == (eap->cmdidx == CMD_folddoclosed)) {
/* First set the marks for all lines closed/open. */
for (lnum = eap->line1; lnum <= eap->line2; ++lnum)
if (hasFolding(lnum, NULL, NULL) == (eap->cmdidx == CMD_folddoclosed))
ml_setmarked(lnum); ml_setmarked(lnum);
}
}
/* Execute the command on the marked lines. */ global_exe(eap->arg); // Execute the command on the marked lines.
global_exe(eap->arg); ml_clearmarked(); // clear rest of the marks
ml_clearmarked(); /* clear rest of the marks */
end_global_changes();
} }
static void ex_terminal(exarg_T *eap) static void ex_terminal(exarg_T *eap)

View File

@ -51,10 +51,10 @@ static yankreg_T *y_previous = NULL; /* ptr to last written yankreg */
static bool clipboard_didwarn_unnamed = false; static bool clipboard_didwarn_unnamed = false;
// for behavior between start_global_changes() and end_global_changes()) // for behavior between start_batch_changes() and end_batch_changes())
static bool clipboard_delay_update = false; // delay clipboard update static bool clipboard_delay_update = false; // delay clipboard update
static int global_change_count = 0; // if set, inside global changes static int batch_change_count = 0; // inside a script
static bool clipboard_needs_update = false; // the clipboard was updated static bool clipboard_needs_update = false; // clipboard was updated
/* /*
* structure used by block_prep, op_delete and op_yank for blockwise operators * structure used by block_prep, op_delete and op_yank for blockwise operators
@ -5630,20 +5630,20 @@ static void set_clipboard(int name, yankreg_T *reg)
(void)eval_call_provider("clipboard", "set", args); (void)eval_call_provider("clipboard", "set", args);
} }
/// Avoid clipboard (slow) during batch operations (:global). /// Avoid clipboard (slow) during batch operations (i.e., a script).
void start_global_changes(void) void start_batch_changes(void)
{ {
if (++global_change_count > 1) { if (++batch_change_count > 1) {
return; return;
} }
clipboard_delay_update = true; clipboard_delay_update = true;
clipboard_needs_update = false; clipboard_needs_update = false;
} }
/// Update the clipboard after :global changes finished. /// Update the clipboard after batch changes finished.
void end_global_changes(void) void end_batch_changes(void)
{ {
if (--global_change_count > 0) { if (--batch_change_count > 0) {
// recursive // recursive
return; return;
} }