[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Backward completions (was: Vertical completions)
From: |
Juri Linkov |
Subject: |
Backward completions (was: Vertical completions) |
Date: |
Wed, 18 Nov 2009 11:47:12 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (x86_64-pc-linux-gnu) |
>>> It's easier to skim through a list when completions are sorted
>>> vertically in columns down the screen.
>>
>> If it's not too problematic to implement, I'm all for the change (or
>> rather an option to have it).
>
> Not problematic at all. Below is a small patch that implements
> a new option for vertical completions with the default to
> traditional horizontal completions, of course.
Scrolling the *Completions* buffer a full screen with the <TAB> key
is convenient to find a desirable item in a long list.
However, typing the <backtab> key doesn't reverse the scrolling
direction like this key does in other places in Emacs. So to return to
the previous screen requires scrolling to the end of the *Completions*
buffer, wrapping to the beginning and scrolling forward from the
beginning, looking carefully to not miss the previous screen again.
The following patch binds <backtab> to `minibuffer-complete-backward'
that is an alias of `minibuffer-complete'. But maybe code in
`minibuffer-complete' is so small, so it could be copied to a new
function `minibuffer-complete-backward' (with small modifications)
instead of creating an alias?
Index: lisp/minibuffer.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/minibuffer.el,v
retrieving revision 1.96
diff -c -w -b -r1.96 minibuffer.el
*** lisp/minibuffer.el 12 Nov 2009 23:10:06 -0000 1.96
--- lisp/minibuffer.el 18 Nov 2009 09:45:59 -0000
***************
*** 516,524 ****
If you repeat this command after it displayed such a list,
scroll the window of possible completions."
(interactive)
! ;; If the previous command was not this,
;; mark the completion buffer obsolete.
! (unless (eq this-command last-command)
(setq minibuffer-scroll-window nil))
(let ((window minibuffer-scroll-window))
--- 516,528 ----
If you repeat this command after it displayed such a list,
scroll the window of possible completions."
(interactive)
! ;; If the previous command (or its alias) was not this,
;; mark the completion buffer obsolete.
! (unless (or (eq this-command last-command)
! (and (memq this-command '(minibuffer-complete
! minibuffer-complete-backward))
! (memq last-command '(minibuffer-complete
! minibuffer-complete-backward))))
(setq minibuffer-scroll-window nil))
(let ((window minibuffer-scroll-window))
***************
*** 526,536 ****
;; and this command is repeated, scroll that window.
(if (window-live-p 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.
! (scroll-other-window))
nil)
(case (completion--do-completion)
--- 530,550 ----
;; and this command is repeated, scroll that window.
(if (window-live-p window)
(with-current-buffer (window-buffer window)
+ (if (eq this-command 'minibuffer-complete-backward)
+ ;; Scroll completions backward.
+ (if (pos-visible-in-window-p (point-min) window)
+ ;; If beginning is in view, scroll down to the end.
+ (with-selected-window window
+ (goto-char (point-max))
+ (recenter -1))
+ ;; Else scroll up one screen.
+ (scroll-other-window-down nil))
+ ;; Scroll completions forward.
(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.
! (scroll-other-window)))
nil)
(case (completion--do-completion)
***************
*** 541,546 ****
--- 555,568 ----
t)
(t t)))))
+ (defalias 'minibuffer-complete-backward 'minibuffer-complete
+ "Like `minibuffer-complete', but scroll completions backward.
+ If you repeat this command after `minibuffer-complete' or
+ `minibuffer-complete-backward' displayed a list of possible
+ completions, it scrolls the window of possible completions a full
+ screen in the direction opposite to the scrolling direction of
+ `minibuffer-complete'.")
+
(defvar completion-all-sorted-completions nil)
(make-variable-buffer-local 'completion-all-sorted-completions)
--
Juri Linkov
http://www.jurta.org/emacs/
- completions - remove window after use?, David Reitter, 2009/11/11
- Re: completions - remove window after use?, Stefan Monnier, 2009/11/11
- Re: completions - remove window after use?, Štěpán Němec, 2009/11/11
- Re: completions - remove window after use?, Stefan Monnier, 2009/11/11
- Vertical completions (was: completions - remove window after use?), Juri Linkov, 2009/11/12
- Re: Vertical completions (was: completions - remove window after use?), Deniz Dogan, 2009/11/12
- Re: Vertical completions, Juri Linkov, 2009/11/17
- Re: Vertical completions, martin rudalics, 2009/11/18
- Re: Vertical completions, Juri Linkov, 2009/11/18
- Backward completions (was: Vertical completions),
Juri Linkov <=
- RE: Backward completions (was: Vertical completions), Drew Adams, 2009/11/18
- Re: Backward completions (was: Vertical completions), Lennart Borgman, 2009/11/18
- Re: Backward completions, Juri Linkov, 2009/11/18
- Re: Backward completions, Lennart Borgman, 2009/11/18
- Re: Backward completions, Juri Linkov, 2009/11/19
- Re: Backward completions, Lennart Borgman, 2009/11/19
- RE: Backward completions, Drew Adams, 2009/11/19
- Re: Backward completions, Juri Linkov, 2009/11/20
- Re: Backward completions, Juri Linkov, 2009/11/20
- Re: Backward completions, Lennart Borgman, 2009/11/20