From 094f230e36a4de266921ed21c0d8f3f37e634073 Mon Sep 17 00:00:00 2001 From: Nojus Gudinavičius Date: Mon, 21 Aug 2023 15:48:06 +0300 Subject: users/29175: Don't need to forget zle edits if none --- ChangeLog | 6 ++++++ Src/Zle/zle_hist.c | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/ChangeLog b/ChangeLog index fd3c4e85d..3849db569 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2023-08-22 Peter Stephenson + + * Nojus Gudinavičius: users/29175: Src/Zle/zle_hist.c: don't + need to forget edits if none were made, avoiding loop over + entire history. + 2023-08-21 Jun-ichi Takimoto * Shohei YOSHIDA: 52059 (+52070): Completion/Unix/Command/_scons: diff --git a/Src/Zle/zle_hist.c b/Src/Zle/zle_hist.c index cfaa70dae..0fdad70d9 100644 --- a/Src/Zle/zle_hist.c +++ b/Src/Zle/zle_hist.c @@ -68,6 +68,13 @@ Keymap isearch_keymap; */ #define GETZLETEXT(ent) ((ent)->zle_text ? (ent)->zle_text : (ent)->node.nam) +/* + * Flag that edits have been made to a zle line. + * If not set, nothing to forget. + */ +/**/ +int have_edits = 0; + /**/ void remember_edits(void) @@ -81,6 +88,7 @@ remember_edits(void) if (ent->zle_text) free(ent->zle_text); ent->zle_text = zlemetaline ? ztrdup(line) : line; + have_edits = 1; } else if (!zlemetaline) free(line); } @@ -90,6 +98,10 @@ remember_edits(void) void forget_edits(void) { + if (!have_edits) { + return; + } + have_edits = 0; Histent he; for (he = hist_ring; he; he = up_histent(he)) { -- cgit 1.4.1