]> git.eshelyaron.com Git - emacs.git/commitdiff
Add zsh extended_history handling for comint.el input ring
authorMatthew Bauer <mjbauer95@gmail.com>
Mon, 10 Aug 2020 11:09:57 +0000 (13:09 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Mon, 10 Aug 2020 11:10:09 +0000 (13:10 +0200)
* lisp/comint.el (comint-input-ring-file-prefix): New variable
(bug#36034).
(comint-read-input-ring): Use it.

* lisp/shell.el (shell-mode): Set it.

lisp/comint.el
lisp/shell.el

index 4b3b583856027c0e3c083fc8dc00d8d2f3797506..df947b93afadb4701fdef6985aea9f4c6103a160 100644 (file)
@@ -249,6 +249,10 @@ to set this in a mode hook, rather than customize the default value."
                 file)
   :group 'comint)
 
+(defvar comint-input-ring-file-prefix nil
+  "The prefix to skip when parsing the input ring file.
+This is useful in Zsh when the extended_history option is on.")
+
 (defcustom comint-scroll-to-bottom-on-input nil
   "Controls whether input to interpreter causes window to scroll.
 If nil, then do not scroll.  If t or `all', scroll all windows showing buffer.
@@ -987,8 +991,20 @@ See also `comint-input-ignoredups' and `comint-write-input-ring'."
                            (setq end (match-beginning 0)))
                  (setq start
                        (if (re-search-backward ring-separator nil t)
-                           (match-end 0)
-                         (point-min)))
+                           (progn
+                             (when (and comint-input-ring-file-prefix
+                                        (looking-at
+                                         comint-input-ring-file-prefix))
+                               ;; Skip zsh extended_history stamps
+                               (goto-char (match-end 0)))
+                             (match-end 0))
+                         (progn
+                           (goto-char (point-min))
+                           (when (and comint-input-ring-file-prefix
+                                      (looking-at
+                                       comint-input-ring-file-prefix))
+                             (goto-char (match-end 0)))
+                           (point))))
                  (setq history (buffer-substring start end))
                  (goto-char start)
                  (when (and (not (string-match history-ignore history))
index dc528412a62ad8d9f1c234132d92fcc9ce667464..f5e18bbc72880c89d4f6baa23dde930c7f9e6cef 100644 (file)
@@ -619,7 +619,12 @@ buffer."
       ;; Bypass a bug in certain versions of bash.
       (when (string-equal shell "bash")
         (add-hook 'comint-preoutput-filter-functions
-                  #'shell-filter-ctrl-a-ctrl-b nil t)))
+                  #'shell-filter-ctrl-a-ctrl-b nil t))
+
+      ;; Skip extended history for zsh.
+      (when (string-equal shell "zsh")
+        (setq-local comint-input-ring-file-prefix
+                    ": [[:digit:]]+:[[:digit:]]+;")))
     (comint-read-input-ring t)))
 
 (defun shell-apply-ansi-color (beg end face)