From 53d5d8fd235b99d20a9fade158483f4603fefc2b Mon Sep 17 00:00:00 2001 From: JSDurand Date: Mon, 9 Jan 2023 15:44:19 +0800 Subject: completion: add functions to jump between minibuffer and completions * common.el (durand-completion-goto-minibuffer): Go to the *Completions* buffer or the minibuffer, depending on whether we are *in the minibuffer or the *Completions* buffer and the target buffer *exists. * completion-conf.el (minibuffer-local-completion-map) (completion-list-mode-map): Bind the function in the right map. --- common.el | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'common.el') diff --git a/common.el b/common.el index 7da6129..aa90a88 100644 --- a/common.el +++ b/common.el @@ -156,6 +156,40 @@ ARG means do this command ARG times." ((< arg 0) (goto-char (point-max)))))))) +(defun durand-completion-goto-minibuffer () + "Go to the minibuffer." + (interactive) + (let ((active-minibuffer-window (active-minibuffer-window)) + (completion-windows + (delq nil + (mapcar + (lambda (w) + (and (consp + (delq nil + (mapcar + (lambda (name) + (string-match-p + name + (buffer-name (window-buffer w)))) + durand-completion-buffer-names))) + w)) + (window-list nil 'nomini)))) + (in-completion-p (consp + (delq nil + (mapcar + (lambda (name) + (string-equal name (buffer-name))) + durand-completion-buffer-names)))) + (in-minibuffer-p + (minibuffer-window-active-p (selected-window)))) + (cond + ((and active-minibuffer-window + (not in-minibuffer-p)) + (select-window active-minibuffer-window)) + ((and (consp completion-windows) + (not in-completion-p)) + (select-window (car completion-windows)))))) + ;; This can be optimized by not duplicating an element on the stack. ;;;###autoload -- cgit v1.2.3-18-g5258