aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Monnier2008-04-30 03:41:39 +0000
committerStefan Monnier2008-04-30 03:41:39 +0000
commit81ff94589d497e73142b795689b558c22f56f3e5 (patch)
treec7e8443a41b9d82d8e4ef1150ee171decb4157a6
parent2f0adb0b8cb9f5c476dbce277193f5bf2b232b4b (diff)
downloademacs-81ff94589d497e73142b795689b558c22f56f3e5.tar.gz
emacs-81ff94589d497e73142b795689b558c22f56f3e5.zip
(completion--do-completion): Move point even if the completion makes no change.
(completion-pcm-try-completion): Fix computation of new point.
-rw-r--r--lisp/ChangeLog6
-rw-r--r--lisp/minibuffer.el19
2 files changed, 18 insertions, 7 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 29d8e2bf80d..516c4f65462 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,9 @@
12008-04-30 Stefan Monnier <monnier@iro.umontreal.ca>
2
3 * minibuffer.el (completion--do-completion): Move point even if the
4 completion makes no change.
5 (completion-pcm-try-completion): Fix computation of new point.
6
12008-04-30 David Hansen <david.hansen@gmx.net> 72008-04-30 David Hansen <david.hansen@gmx.net>
2 8
3 * dired.el: Require 'cl. 9 * dired.el: Require 'cl.
diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index f3c95df3f31..21988d823a2 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -360,8 +360,9 @@ E = after completion we now have an Exact match.
360 ;; Insert in minibuffer the chars we got. 360 ;; Insert in minibuffer the chars we got.
361 (goto-char end) 361 (goto-char end)
362 (insert completion) 362 (insert completion)
363 (delete-region beg end) 363 (delete-region beg end))
364 (goto-char (+ beg comp-pos))) 364 ;; Move point.
365 (goto-char (+ beg comp-pos))
365 366
366 (if (not (or unchanged completed)) 367 (if (not (or unchanged completed))
367 ;; The case of the string changed, but that's all. We're not sure 368 ;; 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'."
1283 (all (completion-pcm--all-completions pattern table pred))) 1284 (all (completion-pcm--all-completions pattern table pred)))
1284 (when all 1285 (when all
1285 (let* ((mergedpat (completion-pcm--merge-completions all pattern)) 1286 (let* ((mergedpat (completion-pcm--merge-completions all pattern))
1286 ;; `mergedpat' is in reverse order. 1287 ;; `mergedpat' is in reverse order. Place new point (by
1287 (pointpat (or (memq 'point mergedpat) (memq 'any mergedpat))) 1288 ;; order of preference) either at the old point, or at
1288 ;; New pos from the end. 1289 ;; the last place where there's something to choose, or
1290 ;; at the very end.
1291 (pointpat (or (memq 'point mergedpat) (memq 'any mergedpat)
1292 margedpat))
1293 ;; New pos from the start.
1289 (newpos (length (completion-pcm--pattern->string pointpat))) 1294 (newpos (length (completion-pcm--pattern->string pointpat)))
1290 ;; Do it afterwards because it changes `pointpat' by sideeffect. 1295 ;; Do it afterwards because it changes `pointpat' by sideeffect.
1291 (merged (completion-pcm--pattern->string (nreverse mergedpat)))) 1296 (merged (completion-pcm--pattern->string (nreverse mergedpat))))
1292 (cons merged (- (length merged) newpos)))))) 1297 (cons merged newpos)))))
1293 1298
1294 1299
1295(provide 'minibuffer) 1300(provide 'minibuffer)