about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNojus Gudinavičius <nojus.gudinavicius@gmail.com>2023-08-21 15:48:06 +0300
committerPeter Stephenson <p.stephenson@samsung.com>2023-08-22 14:29:44 +0100
commit094f230e36a4de266921ed21c0d8f3f37e634073 (patch)
tree0503c1420eb531bbad5dcd56246d73f545f91528
parentd36b9ae0dc4fdf3324f8d2ff66a174785a485932 (diff)
downloadzsh-094f230e36a4de266921ed21c0d8f3f37e634073.tar.gz
zsh-094f230e36a4de266921ed21c0d8f3f37e634073.tar.xz
zsh-094f230e36a4de266921ed21c0d8f3f37e634073.zip
users/29175: Don't need to forget zle edits if none
-rw-r--r--ChangeLog6
-rw-r--r--Src/Zle/zle_hist.c12
2 files changed, 18 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index fd3c4e85d..3849db569 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2023-08-22  Peter Stephenson  <p.stephenson@samsung.com>
+
+	* 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  <takimoto-j@kba.biglobe.ne.jp>
 
 	* 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)) {