From: Jimmy Aguilar Mena Date: Wed, 26 Aug 2020 04:59:26 +0000 (+0200) Subject: Insert some modifications to implement completions highlighting. X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=b1a027de35f63810fee4005b169ca9f88517eed5;p=emacs.git Insert some modifications to implement completions highlighting. This are changes needed in the minibuffer API to do highlighting from a different package. * lisp/minibuffer.el (minibuffer-tab-through-completions-function) : New variable containing the action to do when pressing tab in minibuffer and *Completions* are shown. (minibuffer-tab-through-completions-default) : Default function value for minibuffer-tab-through-completions-function. (completion--in-region-1) : Modification to funcall minibuffer-tab-through-completions-function. (minibuffer-hide-completions-hook) : New hook to call after closing *Completions* buffer. (minibuffer-hide-completions) : Modify to run hook minibuffer-hide-completions-hook. --- diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index 9d57a817b25..41a5d402b01 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -1283,6 +1283,27 @@ scroll the window of possible completions." minibuffer-completion-table minibuffer-completion-predicate))) + +(defun minibuffer-tab-through-completions-default () + "Default action in `minibuffer-scroll-window' WINDOW. +This is called when *Completions* window is already visible." + (let ((window minibuffer-scroll-window)) + (with-current-buffer (window-buffer window) + (if (pos-visible-in-window-p (point-max) window) + ;; If end is in view, scroll up to the beginning. + (set-window-start window (point-min) nil) + ;; Else scroll down one screen. + (with-selected-window window + (scroll-up))) + nil))) + +(defvar minibuffer-tab-through-completions-function + #'minibuffer-tab-through-completions-default + "Function to execute when requested completion. +This is used when *Completions* frame is already visible and the +completions command is called again. This function receives the +window to execute commands as a paramenter.") + (defun completion--in-region-1 (beg end) ;; If the previous command was not this, ;; mark the completion buffer obsolete. @@ -1290,21 +1311,14 @@ scroll the window of possible completions." (unless (eq 'completion-at-point last-command) (completion--flush-all-sorted-completions) (setq minibuffer-scroll-window nil)) - (cond ;; If there's a fresh completion window with a live buffer, ;; and this command is repeated, scroll that window. ((and (window-live-p minibuffer-scroll-window) (eq t (frame-visible-p (window-frame minibuffer-scroll-window)))) - (let ((window minibuffer-scroll-window)) - (with-current-buffer (window-buffer window) - (if (pos-visible-in-window-p (point-max) window) - ;; If end is in view, scroll up to the beginning. - (set-window-start window (point-min) nil) - ;; Else scroll down one screen. - (with-selected-window window - (scroll-up))) - nil))) + ;; Action to perform when pressing tab and completions are shown. + (funcall minibuffer-tab-through-completions-function) + nil) ;; If we're cycling, keep on cycling. ((and completion-cycling completion-all-sorted-completions) (minibuffer-force-complete beg end)