From 4ae5cc0182bc3db5dc96833cee9c4979f4bc0ded Mon Sep 17 00:00:00 2001 From: Ihor Radchenko Date: Mon, 15 Apr 2024 14:17:17 +0300 Subject: [PATCH] org-self-insert-command: Prevent deleting selection for speed commands * lisp/org.el (org--speed-command-p): New helper function checking whether current command is a speed command. (org-self-insert-command): Use the new helper. * lisp/org.el: In `delete-selection' property of `org-self-insert-command' symbol, signal that selection must not be deleted when current command is a speed command. Reported-by: Joe Gilder Link: https://orgmode.org/list/87il0voeok.fsf@localhost --- lisp/org.el | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/lisp/org.el b/lisp/org.el index f6befb635..f98c58296 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -16499,6 +16499,16 @@ either not currently on a tagged headline or on a tag." (< (point) (match-beginning 1))) (org-align-tags))) +(defun org--speed-command-p () + "Return non-nil when current command is a speed command. +Set `org-speed-command' to the appropriate command as a side effect." + (and org-use-speed-commands + (let ((kv (this-command-keys-vector))) + (setq org-speed-command + (run-hook-with-args-until-success + 'org-speed-command-hook + (make-string 1 (aref kv (1- (length kv))))))))) + (defun org-self-insert-command (N) "Like `self-insert-command', use overwrite-mode for whitespace in tables. If the cursor is in a table looking at whitespace, the whitespace is @@ -16506,12 +16516,7 @@ overwritten, and the table is not marked as requiring realignment." (interactive "p") (org-fold-check-before-invisible-edit 'insert) (cond - ((and org-use-speed-commands - (let ((kv (this-command-keys-vector))) - (setq org-speed-command - (run-hook-with-args-until-success - 'org-speed-command-hook - (make-string 1 (aref kv (1- (length kv)))))))) + ((org--speed-command-p) (cond ((commandp org-speed-command) (setq this-command org-speed-command) @@ -16621,8 +16626,9 @@ because, in this case the deletion might narrow the column." ;; Make `delete-selection-mode' work with Org mode and Orgtbl mode (put 'org-self-insert-command 'delete-selection (lambda () - (not (run-hook-with-args-until-success - 'self-insert-uses-region-functions)))) + (unless (org--speed-command-p) + (not (run-hook-with-args-until-success + 'self-insert-uses-region-functions))))) (put 'orgtbl-self-insert-command 'delete-selection (lambda () (not (run-hook-with-args-until-success