From 8e8083185c417eedbaadf0b33c7089da72fe2250 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 19 Oct 2012 14:59:36 -0400 Subject: [PATCH] * lisp/minibuffer.el (minibuffer-force-complete): Make the next completion use the same completion-field (bug@12221). --- lisp/ChangeLog | 5 +++++ lisp/minibuffer.el | 19 +++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f9d9ad4b03d..096e9a52916 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-10-19 Stefan Monnier + + * minibuffer.el (minibuffer-force-complete): Make the next completion use + the same completion-field (bug@12221). + 2012-10-19 Martin Rudalics * emacs-lisp/debug.el (debug): Record height of debugger window diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index f464b42182d..f865a0269d4 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -1134,7 +1134,23 @@ Repeated uses step through the possible completions." ;; through the previous possible completions. (let ((last (last all))) (setcdr last (cons (car all) (cdr last))) - (completion--cache-all-sorted-completions (cdr all))))))) + (completion--cache-all-sorted-completions (cdr all))) + ;; Make sure repeated uses cycle, even though completion--done might + ;; have added a space or something that moved us outside of the field. + ;; (bug#12221). + (let* ((table minibuffer-completion-table) + (pred minibuffer-completion-predicate) + (extra-prop completion-extra-properties) + (cmd + (lambda () "Cycle through the possible completions." + (interactive) + (let ((completion-extra-properties extra-prop)) + (completion-in-region start (point) table pred))))) + (set-temporary-overlay-map + (let ((map (make-sparse-keymap))) + (define-key map [remap completion-at-point] cmd) + (define-key map (vector last-command-event) cmd) + map))))))) (defvar minibuffer-confirm-exit-commands '(completion-at-point minibuffer-complete @@ -1557,7 +1573,6 @@ variables.") (let* ((exit-fun (plist-get completion-extra-properties :exit-function)) (pre-msg (and exit-fun (current-message)))) (cl-assert (memq finished '(exact sole finished unknown))) - ;; FIXME: exit-fun should receive `finished' as a parameter. (when exit-fun (when (eq finished 'unknown) (setq finished