]> code.delx.au - gnu-emacs/commitdiff
(completion--do-completion): Move point even if the completion makes no change.
authorStefan Monnier <monnier@iro.umontreal.ca>
Wed, 30 Apr 2008 03:41:39 +0000 (03:41 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Wed, 30 Apr 2008 03:41:39 +0000 (03:41 +0000)
(completion-pcm-try-completion): Fix computation of new point.

lisp/ChangeLog
lisp/minibuffer.el

index 29d8e2bf80d4a242008eec1c42106a3b4cb5070b..516c4f654624973db9a00fe17dbd676da0d01aa9 100644 (file)
@@ -1,3 +1,9 @@
+2008-04-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * minibuffer.el (completion--do-completion): Move point even if the
+       completion makes no change.
+       (completion-pcm-try-completion): Fix computation of new point.
+
 2008-04-30  David Hansen  <david.hansen@gmx.net>
 
        * dired.el: Require 'cl.
index f3c95df3f311c9f0d736e6860805c34962b754ba..21988d823a2ccd956fe966495770b12b9b93f0e0 100644 (file)
@@ -360,8 +360,9 @@ E = after completion we now have an Exact match.
           ;; Insert in minibuffer the chars we got.
           (goto-char end)
           (insert completion)
-          (delete-region beg end)
-          (goto-char (+ beg comp-pos)))
+          (delete-region beg end))
+       ;; Move point.
+       (goto-char (+ beg comp-pos))
 
         (if (not (or unchanged completed))
           ;; The case of the string changed, but that's all.  We're not sure
@@ -1283,13 +1284,17 @@ PATTERN is as returned by `completion-pcm--string->pattern'."
          (all (completion-pcm--all-completions pattern table pred)))
     (when all
       (let* ((mergedpat (completion-pcm--merge-completions all pattern))
-             ;; `mergedpat' is in reverse order.
-             (pointpat (or (memq 'point mergedpat) (memq 'any mergedpat)))
-             ;; New pos from the end.
+             ;; `mergedpat' is in reverse order.  Place new point (by
+            ;; order of preference) either at the old point, or at
+            ;; the last place where there's something to choose, or
+            ;; at the very end.
+             (pointpat (or (memq 'point mergedpat) (memq 'any mergedpat)
+                          margedpat))
+             ;; New pos from the start.
              (newpos (length (completion-pcm--pattern->string pointpat)))
-             ;; Do it afterwards because it changes `pointpat' by sideeffect.
+            ;; Do it afterwards because it changes `pointpat' by sideeffect.
              (merged (completion-pcm--pattern->string (nreverse mergedpat))))
-        (cons merged (- (length merged) newpos))))))
+        (cons merged newpos)))))
 
 
 (provide 'minibuffer)