diff --git a/config.org b/config.org index fa61c57..4e8e23a 100644 --- a/config.org +++ b/config.org @@ -1161,3 +1161,37 @@ This should normally be done by the init.el to load this configuration. | M-x untabify/tabify | Convert to spaces/tabs | | M-x describe-bindings | List all mapped keys/commands | | M-q | Fill paragraph | + +** Minibuffer + +*** Close minibuffer when pressing C-g + +'Inspired' by https://protesilaos.com/codelog/2024-11-28-basic-emacs-configuration/#h:1e4fde73-a2a2-4dc5-82ad-02cf3884ece6 . +#+BEGIN_SRC emacs-lisp +(defun myrmi/keyboard-quit-dwim () + "Do-What-I-Mean behaviour for a general `keyboard-quit'. + +The generic `keyboard-quit' does not do the expected thing when +the minibuffer is open. Whereas we want it to close the +minibuffer, even without explicitly focusing it. + +The DWIM behaviour of this command is as follows: + +- When the region is active, disable it. +- When a minibuffer is open, but not focused, close the minibuffer. +- When the Completions buffer is selected, close it. +- In every other case use the regular `keyboard-quit'." + (interactive) + (cond + ((region-active-p) + (keyboard-quit)) + ((derived-mode-p 'completion-list-mode) + (delete-completion-window)) + ((> (minibuffer-depth) 0) + (abort-recursive-edit)) + (t + (keyboard-quit)))) + +(define-key global-map (kbd "C-g") #'myrmi/keyboard-quit-dwim) + +#+END_SRC