summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorZhengyi Fu <i@fuzy.me>2026-05-21 22:08:39 +0800
committerSean Whitton <spwhitton@spwhitton.name>2026-05-24 11:18:29 +0100
commit7cee526a8cc44dd7166108ec2718a4ca0d1ad1f1 (patch)
tree0c81d07e7e0ff619d357d72a240b171cbf0b984f /lisp
parent4d87d203cfb9c407930332d53b8198328236fe9b (diff)
Save and restore original local keymap in grep-edit-mode
* lisp/progmodes/grep.el (grep-edit-original-mode-map): New variable. (grep-change-to-grep-edit-mode): Save the current local map before switching to grep-edit-mode-map. (grep-edit-save-changes): Restore the saved local map instead of assuming grep-mode-map (bug#81090). Copyright-paperwork-exempt: yes
Diffstat (limited to 'lisp')
-rw-r--r--lisp/progmodes/grep.el5
1 files changed, 4 insertions, 1 deletions
diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el
index 72a05a082bb..a5ba32d26e8 100644
--- a/lisp/progmodes/grep.el
+++ b/lisp/progmodes/grep.el
@@ -1120,6 +1120,8 @@ list is empty)."
(defvar grep-edit-mode-hook nil
"Hooks run when changing to Grep-Edit mode.")
+(defvar grep-edit-original-mode-map nil)
+
(defun grep-edit-mode ()
"Major mode for editing *grep* buffers.
In this mode, changes to the *grep* buffer are applied to the
@@ -1140,6 +1142,7 @@ The only editable texts in a Grep-Edit buffer are the match results."
(error "Not a Grep buffer"))
(when (get-buffer-process (current-buffer))
(error "Cannot switch when grep is running"))
+ (setq-local grep-edit-original-mode-map (current-local-map))
(use-local-map grep-edit-mode-map)
(grep-edit--prepare-buffer)
(setq buffer-read-only nil)
@@ -1159,7 +1162,7 @@ The only editable texts in a Grep-Edit buffer are the match results."
(unless (derived-mode-p 'grep-edit-mode)
(error "Not a Grep-Edit buffer"))
(remove-hook 'after-change-functions #'occur-after-change-function t)
- (use-local-map grep-mode-map)
+ (use-local-map grep-edit-original-mode-map)
(setq buffer-read-only t)
(setq major-mode 'grep-mode)
(setq mode-name "Grep")