changeset 96294:f12e581d977f

(completion-basic-try-completion): Use the text after point to consrain the completion candidates. (completion-basic-all-completions): Adjust accordingly.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Thu, 26 Jun 2008 02:48:56 +0000
parents 7ba9787e637e
children f007f1675fd7
files lisp/ChangeLog lisp/minibuffer.el
diffstat 2 files changed, 41 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Wed Jun 25 22:35:53 2008 +0000
+++ b/lisp/ChangeLog	Thu Jun 26 02:48:56 2008 +0000
@@ -1,3 +1,9 @@
+2008-06-26  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* minibuffer.el (completion-basic-try-completion): Use the text after
+	point to consrain the completion candidates.
+	(completion-basic-all-completions): Adjust accordingly.
+
 2008-06-25  Chong Yidong  <cyd@stupidchicken.com>
 
 	* textmodes/tex-mode.el (tex-verbatim): Use monospace instead of
--- a/lisp/minibuffer.el	Wed Jun 25 22:35:53 2008 +0000
+++ b/lisp/minibuffer.el	Thu Jun 26 02:48:56 2008 +0000
@@ -1287,23 +1287,45 @@
 (defun completion-basic-try-completion (string table pred point)
   (let* ((beforepoint (substring string 0 point))
          (afterpoint (substring string point))
-         (completion (try-completion beforepoint table pred)))
-    (if (not (stringp completion))
-        completion
-      (cons
-       (concat completion
-               (completion--merge-suffix completion point afterpoint))
-       (length completion)))))
+         (bounds (completion-boundaries beforepoint table pred afterpoint)))
+    (if (zerop (cdr bounds))
+        ;; `try-completion' may return a subtly different result
+        ;; than `all+merge', so try to use it whenever possible.
+        (let ((completion (try-completion beforepoint table pred)))
+          (if (not (stringp completion))
+              completion
+            (cons
+             (concat completion
+                     (completion--merge-suffix completion point afterpoint))
+             (length completion))))
+      (let* ((suffix (substring afterpoint (cdr bounds)))
+             (prefix (substring beforepoint 0 (car bounds)))
+             (pattern (delete
+                       "" (list (substring beforepoint (car bounds))
+                                'point
+                                (substring afterpoint 0 (cdr bounds)))))
+             (all (completion-pcm--all-completions prefix pattern table pred)))
+        (if minibuffer-completing-file-name
+            (setq all (completion-pcm--filename-try-filter all)))
+        (completion-pcm--merge-try pattern all prefix suffix)))))
 
-(defalias 'completion-basic-all-completions 'completion-emacs22-all-completions)
+(defun completion-basic-all-completions (string table pred point)
+  (let* ((beforepoint (substring string 0 point))
+         (afterpoint (substring string point))
+         (bounds (completion-boundaries beforepoint table pred afterpoint))
+         (suffix (substring afterpoint (cdr bounds)))
+         (prefix (substring beforepoint 0 (car bounds)))
+         (pattern (delete
+                   "" (list (substring beforepoint (car bounds))
+                            'point
+                            (substring afterpoint 0 (cdr bounds)))))
+         (all (completion-pcm--all-completions prefix pattern table pred)))
+    (completion-hilit-commonality
+     (if (consp all) (nconc all (car bounds)) all)
+     point)))
 
 ;;; Partial-completion-mode style completion.
 
-;; BUGS:
-
-;; - "minibuffer-s- TAB" with minibuffer-selected-window ends up with
-;;   "minibuffer--s-" which matches other options.
-
 (defvar completion-pcm--delim-wild-regex nil)
 
 (defun completion-pcm--prepare-delim-re (delims)