Mercurial > emacs
annotate lisp/minibuffer.el @ 110410:f2e111723c3a
Merge changes made in Gnus trunk.
Reimplement nnimap, and do tweaks to the rest of the code to support that.
* gnus-int.el (gnus-finish-retrieve-group-infos)
(gnus-retrieve-group-data-early): New functions.
* gnus-range.el (gnus-range-nconcat): New function.
* gnus-start.el (gnus-get-unread-articles): Support early retrieval of
data.
(gnus-read-active-for-groups): Support finishing the early retrieval of
data.
* gnus-sum.el (gnus-summary-move-article): Pass the move-to group name
if the move is internal, so that nnimap can do fast internal moves.
* gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for
nnimap usage.
* nnimap.el: Rewritten.
* nnmail.el (nnmail-inhibit-default-split-group): New internal variable
to allow the mail splitting to not return a default group. This is
useful for nnimap, which will leave unmatched mail in the inbox.
* utf7.el (utf7-encode): Autoload.
Implement shell connection.
* nnimap.el (nnimap-open-shell-stream): New function.
(nnimap-open-connection): Use it.
Get the number of lines by using BODYSTRUCTURE.
(nnimap-transform-headers): Get the number of lines in each message.
(nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the
number of lines.
Not all servers return UIDNEXT. Work past this problem.
Remove junk from end of file.
Fix typo in "bogus" section.
Make capabilties be case-insensitive.
Require cl when compiling.
Don't bug out if the LIST command doesn't have any parameters.
2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change)
* nnimap.el (nnimap-get-groups): Don't bug out if the LIST command
doesn't have any parameters.
(mm-text-html-renderer): Document gnus-article-html.
2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix)
* mm-decode.el (mm-text-html-renderer): Document gnus-article-html.
* dgnushack.el: Define netrc-credentials.
If the user doesn't have a /etc/services, supply some sensible port defaults.
Have `unseen-or-unread' select an unread unseen article first.
(nntp-open-server): Return whether the open was successful or not.
Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ).
Save result so that it doesn't say "failed" all the time.
Add ~/.authinfo to the default, since that's probably most useful for users.
Don't use the "finish" method when we're reading from the agent.
Add some more nnimap-relevant agent stuff to nnagent.el.
* nnimap.el (nnimap-with-process-buffer): Removed.
Revert one line that was changed by mistake in the last checkin.
(nnimap-open-connection): Don't error out when we can't make a connection
nnimap-related changes to avoid bugging out if we can't contact a server.
* gnus-start.el (gnus-get-unread-articles): Don't try to scan groups
from methods that are denied.
* nnimap.el (nnimap-possibly-change-group): Return nil if we can't log
in.
(nnimap-finish-retrieve-group-infos): Make sure we're not waiting for
nothing.
* gnus-sum.el (gnus-select-newsgroup): Indent.
author | Katsumi Yamaoka <yamaoka@jpl.org> |
---|---|
date | Sat, 18 Sep 2010 10:02:19 +0000 |
parents | 280c8ae2476d |
children | bec49af30c2f |
rev | line source |
---|---|
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1 ;;; minibuffer.el --- Minibuffer completion functions |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
2 |
106815 | 3 ;; Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc. |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
4 |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
5 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca> |
110015
280c8ae2476d
Add "Package:" file headers to denote built-in packages.
Chong Yidong <cyd@stupidchicken.com>
parents:
109044
diff
changeset
|
6 ;; Package: emacs |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
7 |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
8 ;; This file is part of GNU Emacs. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
9 |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94607
diff
changeset
|
10 ;; GNU Emacs is free software: you can redistribute it and/or modify |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
11 ;; it under the terms of the GNU General Public License as published by |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
12 ;; the Free Software Foundation, either version 3 of the License, or |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
13 ;; (at your option) any later version. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
14 |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94607
diff
changeset
|
15 ;; GNU Emacs is distributed in the hope that it will be useful, |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
18 ;; GNU General Public License for more details. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
19 |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
20 ;; You should have received a copy of the GNU General Public License |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94607
diff
changeset
|
21 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
22 |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
23 ;;; Commentary: |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
24 |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
25 ;; Names with "--" are for functions and variables that are meant to be for |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
26 ;; internal use only. |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
27 |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
28 ;; Functional completion tables have an extended calling conventions: |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
29 ;; - The `action' can be (additionally to nil, t, and lambda) of the form |
95228
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
30 ;; (boundaries . SUFFIX) in which case it should return |
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
31 ;; (boundaries START . END). See `completion-boundaries'. |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
32 ;; Any other return value should be ignored (so we ignore values returned |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
33 ;; from completion tables that don't know about this new `action' form). |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
34 |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
35 ;;; Bugs: |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
36 |
95799
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
37 ;; - completion-all-sorted-completions list all the completions, whereas |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
38 ;; it should only lists the ones that `try-completion' would consider. |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
39 ;; E.g. it should honor completion-ignored-extensions. |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
40 ;; - choose-completion can't automatically figure out the boundaries |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
41 ;; corresponding to the displayed completions because we only |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
42 ;; provide the start info but not the end info in |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
43 ;; completion-base-position. |
105763
5041ae86859e
(all-completions): Declare the 4th arg obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105733
diff
changeset
|
44 ;; - quoting is problematic. E.g. the double-dollar quoting used in |
5041ae86859e
(all-completions): Declare the 4th arg obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105733
diff
changeset
|
45 ;; substitie-in-file-name (and hence read-file-name-internal) bumps |
5041ae86859e
(all-completions): Declare the 4th arg obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105733
diff
changeset
|
46 ;; into various bugs: |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
47 ;; - choose-completion doesn't know how to quote the text it inserts. |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
48 ;; E.g. it fails to double the dollars in file-name completion, or |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
49 ;; to backslash-escape spaces and other chars in comint completion. |
105763
5041ae86859e
(all-completions): Declare the 4th arg obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105733
diff
changeset
|
50 ;; - when completing ~/tmp/fo$$o, the highligting in *Completions* |
5041ae86859e
(all-completions): Declare the 4th arg obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105733
diff
changeset
|
51 ;; is off by one position. |
5041ae86859e
(all-completions): Declare the 4th arg obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105733
diff
changeset
|
52 ;; - all code like PCM which relies on all-completions to match |
5041ae86859e
(all-completions): Declare the 4th arg obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105733
diff
changeset
|
53 ;; its argument gets confused because all-completions returns unquoted |
5041ae86859e
(all-completions): Declare the 4th arg obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105733
diff
changeset
|
54 ;; texts (as desired for *Completions* output). |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
55 ;; - C-x C-f ~/*/sr ? should not list "~/./src". |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
56 ;; - minibuffer-force-complete completes ~/src/emacs/t<!>/lisp/minibuffer.el |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
57 ;; to ~/src/emacs/trunk/ and throws away lisp/minibuffer.el. |
93937
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
58 |
94211
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
59 ;;; Todo: |
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
60 |
106453
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
61 ;; - extend `boundaries' to provide various other meta-data about the |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
62 ;; output of `all-completions': |
107250
13dafa175b9c
Fix in-buffer completion when after-change-functions modify the buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107089
diff
changeset
|
63 ;; - preferred sorting order when displayed in *Completions*. |
13dafa175b9c
Fix in-buffer completion when after-change-functions modify the buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107089
diff
changeset
|
64 ;; - annotations/text-properties to add when displayed in *Completions*. |
106453
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
65 ;; - quoting/unquoting (so we can complete files names with envvars |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
66 ;; and backslashes, and all-completion can list names without |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
67 ;; quoting backslashes and dollars). |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
68 ;; - indicate how to turn all-completion's output into |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
69 ;; try-completion's output: e.g. completion-ignored-extensions. |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
70 ;; maybe that could be merged with the "quote" operation above. |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
71 ;; - completion hook to run when the completion is |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
72 ;; selected/inserted (maybe this should be provided some other |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
73 ;; way, e.g. as text-property, so `try-completion can also return it?) |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
74 ;; both for when it's inserted via TAB or via choose-completion. |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
75 ;; - indicate that `all-completions' doesn't do prefix-completion |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
76 ;; but just returns some list that relates in some other way to |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
77 ;; the provided string (as is the case in filecache.el), in which |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
78 ;; case partial-completion (for example) doesn't make any sense |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
79 ;; and neither does the completions-first-difference highlight. |
108500
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
80 ;; - indicate how to display the completions in *Completions* (turn |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
81 ;; \n into something else, add special boundaries between |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
82 ;; completions). E.g. when completing from the kill-ring. |
106453
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
83 |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
84 ;; - make partial-completion-mode obsolete: |
104719
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
85 ;; - (?) <foo.h> style completion for file names. |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
86 ;; This can't be done identically just by tweaking completion, |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
87 ;; because partial-completion-mode's behavior is to expand <string.h> |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
88 ;; to /usr/include/string.h only when exiting the minibuffer, at which |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
89 ;; point the completion code is actually not involved normally. |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
90 ;; Partial-completion-mode does it via a find-file-not-found-function. |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
91 ;; - special code for C-x C-f <> to visit the file ref'd at point |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
92 ;; via (require 'foo) or #include "foo". ffap seems like a better |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
93 ;; place for this feature (supplemented with major-mode-provided |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
94 ;; functions to find the file ref'd at point). |
104719
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
95 |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
96 ;; - case-sensitivity currently confuses two issues: |
104719
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
97 ;; - whether or not a particular completion table should be case-sensitive |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
98 ;; (i.e. whether strings that differ only by case are semantically |
104719
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
99 ;; equivalent) |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
100 ;; - whether the user wants completion to pay attention to case. |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
101 ;; e.g. we may want to make it possible for the user to say "first try |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
102 ;; completion case-sensitively, and if that fails, try to ignore case". |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
103 |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
104 ;; - add support for ** to pcm. |
94211
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
105 ;; - Add vc-file-name-completion-table to read-file-name-internal. |
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
106 ;; - A feature like completing-help.el. |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
107 |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
108 ;;; Code: |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
109 |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
110 (eval-when-compile (require 'cl)) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
111 |
94013
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
112 ;;; Completion table manipulation |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
113 |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
114 ;; New completion-table operation. |
95228
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
115 (defun completion-boundaries (string table pred suffix) |
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
116 "Return the boundaries of the completions returned by TABLE for STRING. |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
117 STRING is the string on which completion will be performed. |
95228
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
118 SUFFIX is the string after point. |
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
119 The result is of the form (START . END) where START is the position |
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
120 in STRING of the beginning of the completion field and END is the position |
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
121 in SUFFIX of the end of the completion field. |
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
122 E.g. for simple completion tables, the result is always (0 . (length SUFFIX)) |
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
123 and for file names the result is the positions delimited by |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
124 the closest directory separators." |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
125 (let ((boundaries (if (functionp table) |
95228
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
126 (funcall table string pred (cons 'boundaries suffix))))) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
127 (if (not (eq (car-safe boundaries) 'boundaries)) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
128 (setq boundaries nil)) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
129 (cons (or (cadr boundaries) 0) |
95228
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
130 (or (cddr boundaries) (length suffix))))) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
131 |
94062
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
132 (defun completion--some (fun xs) |
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
133 "Apply FUN to each element of XS in turn. |
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
134 Return the first non-nil returned value. |
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
135 Like CL's `some'." |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
136 (let ((firsterror nil) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
137 res) |
94062
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
138 (while (and (not res) xs) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
139 (condition-case err |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
140 (setq res (funcall fun (pop xs))) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
141 (error (unless firsterror (setq firsterror err)) nil))) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
142 (or res |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
143 (if firsterror (signal (car firsterror) (cdr firsterror)))))) |
94062
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
144 |
94013
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
145 (defun complete-with-action (action table string pred) |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
146 "Perform completion ACTION. |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
147 STRING is the string to complete. |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
148 TABLE is the completion table, which should not be a function. |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
149 PRED is a completion predicate. |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
150 ACTION can be one of nil, t or `lambda'." |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
151 (cond |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
152 ((functionp table) (funcall table string pred action)) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
153 ((eq (car-safe action) 'boundaries) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
154 (cons 'boundaries (completion-boundaries string table pred (cdr action)))) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
155 (t |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
156 (funcall |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
157 (cond |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
158 ((null action) 'try-completion) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
159 ((eq action t) 'all-completions) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
160 (t 'test-completion)) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
161 string table pred)))) |
94013
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
162 |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
163 (defun completion-table-dynamic (fun) |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
164 "Use function FUN as a dynamic completion table. |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
165 FUN is called with one argument, the string for which completion is required, |
94202
987535788e11
(completion-table-dynamic): Fix typo, and reflow docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
94182
diff
changeset
|
166 and it should return an alist containing all the intended possible completions. |
987535788e11
(completion-table-dynamic): Fix typo, and reflow docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
94182
diff
changeset
|
167 This alist may be a full list of possible completions so that FUN can ignore |
987535788e11
(completion-table-dynamic): Fix typo, and reflow docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
94182
diff
changeset
|
168 the value of its argument. If completion is performed in the minibuffer, |
987535788e11
(completion-table-dynamic): Fix typo, and reflow docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
94182
diff
changeset
|
169 FUN will be called in the buffer from which the minibuffer was entered. |
94013
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
170 |
97550
dc32b170fe16
(completion-table-dynamic): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
97544
diff
changeset
|
171 The result of the `completion-table-dynamic' form is a function |
95426
92edde3e7af6
(completion-table-dynamic): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
95394
diff
changeset
|
172 that can be used as the COLLECTION argument to `try-completion' and |
94202
987535788e11
(completion-table-dynamic): Fix typo, and reflow docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
94182
diff
changeset
|
173 `all-completions'. See Info node `(elisp)Programmed Completion'." |
94013
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
174 (lexical-let ((fun fun)) |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
175 (lambda (string pred action) |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
176 (with-current-buffer (let ((win (minibuffer-selected-window))) |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
177 (if (window-live-p win) (window-buffer win) |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
178 (current-buffer))) |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
179 (complete-with-action action (funcall fun string) string pred))))) |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
180 |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
181 (defmacro lazy-completion-table (var fun) |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
182 "Initialize variable VAR as a lazy completion table. |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
183 If the completion table VAR is used for the first time (e.g., by passing VAR |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
184 as an argument to `try-completion'), the function FUN is called with no |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
185 arguments. FUN must return the completion table that will be stored in VAR. |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
186 If completion is requested in the minibuffer, FUN will be called in the buffer |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
187 from which the minibuffer was entered. The return value of |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
188 `lazy-completion-table' must be used to initialize the value of VAR. |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
189 |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
190 You should give VAR a non-nil `risky-local-variable' property." |
94017
f2ded84f543c
(lazy-completion-table): Fix debug spec.
Johan Bockgård <bojohan@gnu.org>
parents:
94013
diff
changeset
|
191 (declare (debug (symbolp lambda-expr))) |
94013
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
192 (let ((str (make-symbol "string"))) |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
193 `(completion-table-dynamic |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
194 (lambda (,str) |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
195 (when (functionp ,var) |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
196 (setq ,var (,fun))) |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
197 ,var)))) |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
198 |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
199 (defun completion-table-with-context (prefix table string pred action) |
94180
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
200 ;; TODO: add `suffix' maybe? |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
201 ;; Notice that `pred' may not be a function in some abusive cases. |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
202 (when (functionp pred) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
203 (setq pred |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
204 (lexical-let ((pred pred)) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
205 ;; Predicates are called differently depending on the nature of |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
206 ;; the completion table :-( |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
207 (cond |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
208 ((vectorp table) ;Obarray. |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
209 (lambda (sym) (funcall pred (concat prefix (symbol-name sym))))) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
210 ((hash-table-p table) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
211 (lambda (s v) (funcall pred (concat prefix s)))) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
212 ((functionp table) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
213 (lambda (s) (funcall pred (concat prefix s)))) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
214 (t ;Lists and alists. |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
215 (lambda (s) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
216 (funcall pred (concat prefix (if (consp s) (car s) s))))))))) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
217 (if (eq (car-safe action) 'boundaries) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
218 (let* ((len (length prefix)) |
95228
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
219 (bound (completion-boundaries string table pred (cdr action)))) |
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
220 (list* 'boundaries (+ (car bound) len) (cdr bound))) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
221 (let ((comp (complete-with-action action table string pred))) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
222 (cond |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
223 ;; In case of try-completion, add the prefix. |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
224 ((stringp comp) (concat prefix comp)) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
225 (t comp))))) |
94013
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
226 |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
227 (defun completion-table-with-terminator (terminator table string pred action) |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
228 "Construct a completion table like TABLE but with an extra TERMINATOR. |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
229 This is meant to be called in a curried way by first passing TERMINATOR |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
230 and TABLE only (via `apply-partially'). |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
231 TABLE is a completion table, and TERMINATOR is a string appended to TABLE's |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
232 completion if it is complete. TERMINATOR is also used to determine the |
105711
834e4fdbe74a
(completion-table-with-terminator): Allow to specify the terminator-regexp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105697
diff
changeset
|
233 completion suffix's boundary. |
834e4fdbe74a
(completion-table-with-terminator): Allow to specify the terminator-regexp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105697
diff
changeset
|
234 TERMINATOR can also be a cons cell (TERMINATOR . TERMINATOR-REGEXP) |
834e4fdbe74a
(completion-table-with-terminator): Allow to specify the terminator-regexp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105697
diff
changeset
|
235 in which case TERMINATOR-REGEXP is a regular expression whose submatch |
834e4fdbe74a
(completion-table-with-terminator): Allow to specify the terminator-regexp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105697
diff
changeset
|
236 number 1 should match TERMINATOR. This is used when there is a need to |
834e4fdbe74a
(completion-table-with-terminator): Allow to specify the terminator-regexp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105697
diff
changeset
|
237 distinguish occurrences of the TERMINATOR strings which are really terminators |
834e4fdbe74a
(completion-table-with-terminator): Allow to specify the terminator-regexp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105697
diff
changeset
|
238 from others (e.g. escaped)." |
94180
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
239 (cond |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
240 ((eq (car-safe action) 'boundaries) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
241 (let* ((suffix (cdr action)) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
242 (bounds (completion-boundaries string table pred suffix)) |
105711
834e4fdbe74a
(completion-table-with-terminator): Allow to specify the terminator-regexp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105697
diff
changeset
|
243 (terminator-regexp (if (consp terminator) |
834e4fdbe74a
(completion-table-with-terminator): Allow to specify the terminator-regexp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105697
diff
changeset
|
244 (cdr terminator) (regexp-quote terminator))) |
834e4fdbe74a
(completion-table-with-terminator): Allow to specify the terminator-regexp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105697
diff
changeset
|
245 (max (string-match terminator-regexp suffix))) |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
246 (list* 'boundaries (car bounds) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
247 (min (cdr bounds) (or max (length suffix)))))) |
94180
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
248 ((eq action nil) |
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
249 (let ((comp (try-completion string table pred))) |
105711
834e4fdbe74a
(completion-table-with-terminator): Allow to specify the terminator-regexp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105697
diff
changeset
|
250 (if (consp terminator) (setq terminator (car terminator))) |
94077
28e2f73174d6
(completion-table-with-terminator): Those completions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94069
diff
changeset
|
251 (if (eq comp t) |
28e2f73174d6
(completion-table-with-terminator): Those completions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94069
diff
changeset
|
252 (concat string terminator) |
28e2f73174d6
(completion-table-with-terminator): Those completions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94069
diff
changeset
|
253 (if (and (stringp comp) |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
254 ;; FIXME: Try to avoid this second call, especially since |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
255 ;; it may be very inefficient (because `comp' made us |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
256 ;; jump to a new boundary, so we complete in that |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
257 ;; boundary with an empty start string). |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
258 ;; completion-boundaries might help. |
94180
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
259 (eq (try-completion comp table pred) t)) |
94077
28e2f73174d6
(completion-table-with-terminator): Those completions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94069
diff
changeset
|
260 (concat comp terminator) |
94180
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
261 comp)))) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
262 ((eq action t) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
263 ;; FIXME: We generally want the `try' and `all' behaviors to be |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
264 ;; consistent so pcm can merge the `all' output to get the `try' output, |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
265 ;; but that sometimes clashes with the need for `all' output to look |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
266 ;; good in *Completions*. |
100623
5a144164af93
(completion-all-completions-with-base-size): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100052
diff
changeset
|
267 ;; (mapcar (lambda (s) (concat s terminator)) |
5a144164af93
(completion-all-completions-with-base-size): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100052
diff
changeset
|
268 ;; (all-completions string table pred)))) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
269 (all-completions string table pred)) |
94180
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
270 ;; completion-table-with-terminator is always used for |
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
271 ;; "sub-completions" so it's only called if the terminator is missing, |
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
272 ;; in which case `test-completion' should return nil. |
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
273 ((eq action 'lambda) nil))) |
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
274 |
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
275 (defun completion-table-with-predicate (table pred1 strict string pred2 action) |
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
276 "Make a completion table equivalent to TABLE but filtered through PRED1. |
94736
3a7862f514d0
(completion-table-with-predicate): Don't use `iff' in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
94678
diff
changeset
|
277 PRED1 is a function of one argument which returns non-nil if and only if the |
94180
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
278 argument is an element of TABLE which should be considered for completion. |
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
279 STRING, PRED2, and ACTION are the usual arguments to completion tables, |
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
280 as described in `try-completion', `all-completions', and `test-completion'. |
94211
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
281 If STRICT is t, the predicate always applies; if nil it only applies if |
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
282 it does not reduce the set of possible completions to nothing. |
94180
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
283 Note: TABLE needs to be a proper completion table which obeys predicates." |
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
284 (cond |
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
285 ((and (not strict) (eq action 'lambda)) |
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
286 ;; Ignore pred1 since it doesn't really have to apply anyway. |
94182
0be1624297ac
(completion-table-with-predicate): Typo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94180
diff
changeset
|
287 (test-completion string table pred2)) |
94180
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
288 (t |
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
289 (or (complete-with-action action table string |
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
290 (if (null pred2) pred1 |
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
291 (lexical-let ((pred1 pred2) (pred2 pred2)) |
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
292 (lambda (x) |
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
293 ;; Call `pred1' first, so that `pred2' |
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
294 ;; really can't tell that `x' is in table. |
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
295 (if (funcall pred1 x) (funcall pred2 x)))))) |
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
296 ;; If completion failed and we're not applying pred1 strictly, try |
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
297 ;; again without pred1. |
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
298 (and (not strict) |
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
299 (complete-with-action action table string pred2)))))) |
94013
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
300 |
94062
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
301 (defun completion-table-in-turn (&rest tables) |
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
302 "Create a completion table that tries each table in TABLES in turn." |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
303 ;; FIXME: the boundaries may come from TABLE1 even when the completion list |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
304 ;; is returned by TABLE2 (because TABLE1 returned an empty list). |
94062
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
305 (lexical-let ((tables tables)) |
94013
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
306 (lambda (string pred action) |
94062
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
307 (completion--some (lambda (table) |
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
308 (complete-with-action action table string pred)) |
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
309 tables)))) |
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
310 |
94180
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
311 ;; (defmacro complete-in-turn (a b) `(completion-table-in-turn ,a ,b)) |
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
312 ;; (defmacro dynamic-completion-table (fun) `(completion-table-dynamic ,fun)) |
94062
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
313 (define-obsolete-function-alias |
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
314 'complete-in-turn 'completion-table-in-turn "23.1") |
94180
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
315 (define-obsolete-function-alias |
114d8f4904d0
* minibuffer.el (completion-table-with-context): Add support for `pred'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94172
diff
changeset
|
316 'dynamic-completion-table 'completion-table-dynamic "23.1") |
94013
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
317 |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
318 ;;; Minibuffer completion |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
319 |
93937
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
320 (defgroup minibuffer nil |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
321 "Controlling the behavior of the minibuffer." |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
322 :link '(custom-manual "(emacs)Minibuffer") |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
323 :group 'environment) |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
324 |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
325 (defun minibuffer-message (message &rest args) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
326 "Temporarily display MESSAGE at the end of the minibuffer. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
327 The text is displayed for `minibuffer-message-timeout' seconds, |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
328 or until the next input event arrives, whichever comes first. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
329 Enclose MESSAGE in [...] if this is not yet the case. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
330 If ARGS are provided, then pass MESSAGE through `format'." |
104719
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
331 (if (not (minibufferp (current-buffer))) |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
332 (progn |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
333 (if args |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
334 (apply 'message message args) |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
335 (message "%s" message)) |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
336 (prog1 (sit-for (or minibuffer-message-timeout 1000000)) |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
337 (message nil))) |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
338 ;; Clear out any old echo-area message to make way for our new thing. |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
339 (message nil) |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
340 (setq message (if (and (null args) (string-match-p "\\` *\\[.+\\]\\'" message)) |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
341 ;; Make sure we can put-text-property. |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
342 (copy-sequence message) |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
343 (concat " [" message "]"))) |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
344 (when args (setq message (apply 'format message args))) |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
345 (let ((ol (make-overlay (point-max) (point-max) nil t t)) |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
346 ;; A quit during sit-for normally only interrupts the sit-for, |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
347 ;; but since minibuffer-message is used at the end of a command, |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
348 ;; at a time when the command has virtually finished already, a C-g |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
349 ;; should really cause an abort-recursive-edit instead (i.e. as if |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
350 ;; the C-g had been typed at top-level). Binding inhibit-quit here |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
351 ;; is an attempt to get that behavior. |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
352 (inhibit-quit t)) |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
353 (unwind-protect |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
354 (progn |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
355 (unless (zerop (length message)) |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
356 ;; The current C cursor code doesn't know to use the overlay's |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
357 ;; marker's stickiness to figure out whether to place the cursor |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
358 ;; before or after the string, so let's spoon-feed it the pos. |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
359 (put-text-property 0 1 'cursor t message)) |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
360 (overlay-put ol 'after-string message) |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
361 (sit-for (or minibuffer-message-timeout 1000000))) |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
362 (delete-overlay ol))))) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
363 |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
364 (defun minibuffer-completion-contents () |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
365 "Return the user input in a minibuffer before point as a string. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
366 That is what completion commands operate on." |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
367 (buffer-substring (field-beginning) (point))) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
368 |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
369 (defun delete-minibuffer-contents () |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
370 "Delete all user input in a minibuffer. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
371 If the current buffer is not a minibuffer, erase its entire contents." |
99232
63548ee8ae9f
(delete-minibuffer-contents): Delete all minibuffer contents instead
Chong Yidong <cyd@stupidchicken.com>
parents:
98907
diff
changeset
|
372 ;; We used to do `delete-field' here, but when file name shadowing |
63548ee8ae9f
(delete-minibuffer-contents): Delete all minibuffer contents instead
Chong Yidong <cyd@stupidchicken.com>
parents:
98907
diff
changeset
|
373 ;; is on, the field doesn't cover the entire minibuffer contents. |
63548ee8ae9f
(delete-minibuffer-contents): Delete all minibuffer contents instead
Chong Yidong <cyd@stupidchicken.com>
parents:
98907
diff
changeset
|
374 (delete-region (minibuffer-prompt-end) (point-max))) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
375 |
93937
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
376 (defcustom completion-auto-help t |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
377 "Non-nil means automatically provide help for invalid completion input. |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
378 If the value is t the *Completion* buffer is displayed whenever completion |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
379 is requested but cannot be done. |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
380 If the value is `lazy', the *Completions* buffer is only displayed after |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
381 the second failed attempt to complete." |
93942
187008494f10
(completion-auto-help): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents:
93937
diff
changeset
|
382 :type '(choice (const nil) (const t) (const lazy)) |
93937
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
383 :group 'minibuffer) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
384 |
105950
e411fa8e0abf
* progmodes/grep.el (grep-regexp-alist):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105930
diff
changeset
|
385 (defconst completion-styles-alist |
104785
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
386 '((emacs21 |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
387 completion-emacs21-try-completion completion-emacs21-all-completions |
107977
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
388 "Simple prefix-based completion. |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
389 I.e. when completing \"foo_bar\" (where _ is the position of point), |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
390 it will consider all completions candidates matching the glob |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
391 pattern \"foobar*\".") |
104785
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
392 (emacs22 |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
393 completion-emacs22-try-completion completion-emacs22-all-completions |
107977
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
394 "Prefix completion that only operates on the text before point. |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
395 I.e. when completing \"foo_bar\" (where _ is the position of point), |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
396 it will consider all completions candidates matching the glob |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
397 pattern \"foo*\" and will add back \"bar\" to the end of it.") |
104785
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
398 (basic |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
399 completion-basic-try-completion completion-basic-all-completions |
107977
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
400 "Completion of the prefix before point and the suffix after point. |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
401 I.e. when completing \"foo_bar\" (where _ is the position of point), |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
402 it will consider all completions candidates matching the glob |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
403 pattern \"foo*bar*\".") |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
404 (partial-completion |
104785
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
405 completion-pcm-try-completion completion-pcm-all-completions |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
406 "Completion of multiple words, each one taken as a prefix. |
107977
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
407 I.e. when completing \"l-co_h\" (where _ is the position of point), |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
408 it will consider all completions candidates matching the glob |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
409 pattern \"l*-co*h*\". |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
410 Furthermore, for completions that are done step by step in subfields, |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
411 the method is applied to all the preceding fields that do not yet match. |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
412 E.g. C-x C-f /u/mo/s TAB could complete to /usr/monnier/src. |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
413 Additionally the user can use the char \"*\" as a glob pattern.") |
107983
781bff25a517
(completion-styles-alist): Fix up last merge and document `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107978
diff
changeset
|
414 (substring |
781bff25a517
(completion-styles-alist): Fix up last merge and document `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107978
diff
changeset
|
415 completion-substring-try-completion completion-substring-all-completions |
781bff25a517
(completion-styles-alist): Fix up last merge and document `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107978
diff
changeset
|
416 "Completion of the string taken as a substring. |
781bff25a517
(completion-styles-alist): Fix up last merge and document `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107978
diff
changeset
|
417 I.e. when completing \"foo_bar\" (where _ is the position of point), |
781bff25a517
(completion-styles-alist): Fix up last merge and document `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107978
diff
changeset
|
418 it will consider all completions candidates matching the glob |
781bff25a517
(completion-styles-alist): Fix up last merge and document `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107978
diff
changeset
|
419 pattern \"*foo*bar*\".") |
104785
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
420 (initials |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
421 completion-initials-try-completion completion-initials-all-completions |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
422 "Completion of acronyms and initialisms. |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
423 E.g. can complete M-x lch to list-command-history |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
424 and C-x C-f ~/sew to ~/src/emacs/work.")) |
94062
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
425 "List of available completion styles. |
104785
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
426 Each element has the form (NAME TRY-COMPLETION ALL-COMPLETIONS DOC): |
94375
f8b940834bbb
(completion-pcm-word-delimiters): Add :group.
Juanma Barranquero <lekktu@gmail.com>
parents:
94352
diff
changeset
|
427 where NAME is the name that should be used in `completion-styles', |
104785
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
428 TRY-COMPLETION is the function that does the completion (it should |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
429 follow the same calling convention as `completion-try-completion'), |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
430 ALL-COMPLETIONS is the function that lists the completions (it should |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
431 follow the calling convention of `completion-all-completions'), |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
432 and DOC describes the way this style of completion works.") |
94062
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
433 |
107977
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
434 (defcustom completion-styles |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
435 ;; First, use `basic' because prefix completion has been the standard |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
436 ;; for "ever" and works well in most cases, so using it first |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
437 ;; ensures that we obey previous behavior in most cases. |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
438 '(basic |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
439 ;; Then use `partial-completion' because it has proven to |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
440 ;; be a very convenient extension. |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
441 partial-completion |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
442 ;; Finally use `emacs22' so as to maintain (in many/most cases) |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
443 ;; the previous behavior that when completing "foobar" with point |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
444 ;; between "foo" and "bar" the completion try to complete "foo" |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
445 ;; and simply add "bar" to the end of the result. |
17966fd41dcf
(completion-styles): Improve docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107517
diff
changeset
|
446 emacs22) |
104342
867af630a71e
(completion--do-completion): Move point for the #b001 case as well (bug#4176).
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104122
diff
changeset
|
447 "List of completion styles to use. |
867af630a71e
(completion--do-completion): Move point for the #b001 case as well (bug#4176).
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104122
diff
changeset
|
448 The available styles are listed in `completion-styles-alist'." |
94062
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
449 :type `(repeat (choice ,@(mapcar (lambda (x) (list 'const (car x))) |
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
450 completion-styles-alist))) |
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
451 :group 'minibuffer |
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
452 :version "23.1") |
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
453 |
94304
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
454 (defun completion-try-completion (string table pred point) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
455 "Try to complete STRING using completion table TABLE. |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
456 Only the elements of table that satisfy predicate PRED are considered. |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
457 POINT is the position of point within STRING. |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
458 The return value can be either nil to indicate that there is no completion, |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
459 t to indicate that STRING is the only possible completion, |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
460 or a pair (STRING . NEWPOINT) of the completed result string together with |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
461 a new position for point." |
104785
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
462 (completion--some (lambda (style) |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
463 (funcall (nth 1 (assq style completion-styles-alist)) |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
464 string table pred point)) |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
465 completion-styles)) |
94062
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
466 |
94304
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
467 (defun completion-all-completions (string table pred point) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
468 "List the possible completions of STRING in completion table TABLE. |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
469 Only the elements of table that satisfy predicate PRED are considered. |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
470 POINT is the position of point within STRING. |
94375
f8b940834bbb
(completion-pcm-word-delimiters): Add :group.
Juanma Barranquero <lekktu@gmail.com>
parents:
94352
diff
changeset
|
471 The return value is a list of completions and may contain the base-size |
94304
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
472 in the last `cdr'." |
106453
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
473 ;; FIXME: We need to additionally return the info needed for the |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
474 ;; second part of completion-base-position. |
104785
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
475 (completion--some (lambda (style) |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
476 (funcall (nth 2 (assq style completion-styles-alist)) |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
477 string table pred point)) |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
478 completion-styles)) |
94062
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
479 |
93937
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
480 (defun minibuffer--bitset (modified completions exact) |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
481 (logior (if modified 4 0) |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
482 (if completions 2 0) |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
483 (if exact 1 0))) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
484 |
107250
13dafa175b9c
Fix in-buffer completion when after-change-functions modify the buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107089
diff
changeset
|
485 (defun completion--replace (beg end newtext) |
13dafa175b9c
Fix in-buffer completion when after-change-functions modify the buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107089
diff
changeset
|
486 "Replace the buffer text between BEG and END with NEWTEXT. |
13dafa175b9c
Fix in-buffer completion when after-change-functions modify the buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107089
diff
changeset
|
487 Moves point to the end of the new text." |
13dafa175b9c
Fix in-buffer completion when after-change-functions modify the buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107089
diff
changeset
|
488 ;; This should be in subr.el. |
13dafa175b9c
Fix in-buffer completion when after-change-functions modify the buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107089
diff
changeset
|
489 ;; You'd think this is trivial to do, but details matter if you want |
13dafa175b9c
Fix in-buffer completion when after-change-functions modify the buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107089
diff
changeset
|
490 ;; to keep markers "at the right place" and be robust in the face of |
13dafa175b9c
Fix in-buffer completion when after-change-functions modify the buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107089
diff
changeset
|
491 ;; after-change-functions that may themselves modify the buffer. |
13dafa175b9c
Fix in-buffer completion when after-change-functions modify the buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107089
diff
changeset
|
492 (goto-char beg) |
13dafa175b9c
Fix in-buffer completion when after-change-functions modify the buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107089
diff
changeset
|
493 (insert newtext) |
13dafa175b9c
Fix in-buffer completion when after-change-functions modify the buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107089
diff
changeset
|
494 (delete-region (point) (+ (point) (- end beg)))) |
13dafa175b9c
Fix in-buffer completion when after-change-functions modify the buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107089
diff
changeset
|
495 |
108500
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
496 (defcustom completion-cycle-threshold nil |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
497 "Number of completion candidates below which cycling is used. |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
498 Depending on this setting `minibuffer-complete' may use cycling, |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
499 like `minibuffer-force-complete'. |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
500 If nil, cycling is never used. |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
501 If t, cycling is always used. |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
502 If an integer, cycling is used as soon as there are fewer completion |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
503 candidates than this number." |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
504 :type '(choice (const :tag "No cycling" nil) |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
505 (const :tag "Always cycle" t) |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
506 (integer :tag "Threshold"))) |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
507 |
94211
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
508 (defun completion--do-completion (&optional try-completion-function) |
93937
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
509 "Do the completion and return a summary of what happened. |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
510 M = completion was performed, the text was Modified. |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
511 C = there were available Completions. |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
512 E = after completion we now have an Exact match. |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
513 |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
514 MCE |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
515 000 0 no possible completion |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
516 001 1 was already an exact and unique completion |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
517 010 2 no completion happened |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
518 011 3 was already an exact completion |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
519 100 4 ??? impossible |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
520 101 5 ??? impossible |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
521 110 6 some completion happened |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
522 111 7 completed to an exact completion" |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
523 (let* ((beg (field-beginning)) |
94304
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
524 (end (field-end)) |
94211
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
525 (string (buffer-substring beg end)) |
94304
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
526 (comp (funcall (or try-completion-function |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
527 'completion-try-completion) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
528 string |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
529 minibuffer-completion-table |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
530 minibuffer-completion-predicate |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
531 (- (point) beg)))) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
532 (cond |
94304
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
533 ((null comp) |
104344
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
534 (minibuffer-hide-completions) |
93937
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
535 (ding) (minibuffer-message "No match") (minibuffer--bitset nil nil nil)) |
104342
867af630a71e
(completion--do-completion): Move point for the #b001 case as well (bug#4176).
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104122
diff
changeset
|
536 ((eq t comp) |
104344
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
537 (minibuffer-hide-completions) |
104342
867af630a71e
(completion--do-completion): Move point for the #b001 case as well (bug#4176).
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104122
diff
changeset
|
538 (goto-char (field-end)) |
867af630a71e
(completion--do-completion): Move point for the #b001 case as well (bug#4176).
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104122
diff
changeset
|
539 (minibuffer--bitset nil nil t)) ;Exact and unique match. |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
540 (t |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
541 ;; `completed' should be t if some completion was done, which doesn't |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
542 ;; include simply changing the case of the entered string. However, |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
543 ;; for appearance, the string is rewritten if the case changes. |
94304
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
544 (let* ((comp-pos (cdr comp)) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
545 (completion (car comp)) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
546 (completed (not (eq t (compare-strings completion nil nil |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
547 string nil nil t)))) |
94211
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
548 (unchanged (eq t (compare-strings completion nil nil |
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
549 string nil nil nil)))) |
107250
13dafa175b9c
Fix in-buffer completion when after-change-functions modify the buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107089
diff
changeset
|
550 (if unchanged |
94211
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
551 (goto-char end) |
107250
13dafa175b9c
Fix in-buffer completion when after-change-functions modify the buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107089
diff
changeset
|
552 ;; Insert in minibuffer the chars we got. |
13dafa175b9c
Fix in-buffer completion when after-change-functions modify the buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107089
diff
changeset
|
553 (completion--replace beg end completion)) |
13dafa175b9c
Fix in-buffer completion when after-change-functions modify the buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107089
diff
changeset
|
554 ;; Move point to its completion-mandated destination. |
13dafa175b9c
Fix in-buffer completion when after-change-functions modify the buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107089
diff
changeset
|
555 (forward-char (- comp-pos (length completion))) |
93937
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
556 |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
557 (if (not (or unchanged completed)) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
558 ;; The case of the string changed, but that's all. We're not sure |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
559 ;; whether this is a unique completion or not, so try again using |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
560 ;; the real case (this shouldn't recurse again, because the next |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
561 ;; time try-completion will return either t or the exact string). |
94211
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
562 (completion--do-completion try-completion-function) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
563 |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
564 ;; It did find a match. Do we match some possibility exactly now? |
94304
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
565 (let ((exact (test-completion completion |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
566 minibuffer-completion-table |
108500
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
567 minibuffer-completion-predicate)) |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
568 (comps |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
569 ;; Check to see if we want to do cycling. We do it |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
570 ;; here, after having performed the normal completion, |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
571 ;; so as to take advantage of the difference between |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
572 ;; try-completion and all-completions, for things |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
573 ;; like completion-ignored-extensions. |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
574 (when (and completion-cycle-threshold |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
575 ;; Check that the completion didn't make |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
576 ;; us jump to a different boundary. |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
577 (or (not completed) |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
578 (< (car (completion-boundaries |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
579 (substring completion 0 comp-pos) |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
580 minibuffer-completion-table |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
581 minibuffer-completion-predicate |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
582 "")) |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
583 comp-pos))) |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
584 (completion-all-sorted-completions)))) |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
585 (setq completion-all-sorted-completions nil) |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
586 (cond |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
587 ((and (not (ignore-errors |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
588 ;; This signal an (intended) error if comps is too |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
589 ;; short or if completion-cycle-threshold is t. |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
590 (consp (nthcdr completion-cycle-threshold comps)))) |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
591 ;; More than 1, so there's something to cycle. |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
592 (consp (cdr comps))) |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
593 ;; Fewer than completion-cycle-threshold remaining |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
594 ;; completions: let's cycle. |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
595 (setq completed t exact t) |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
596 (setq completion-all-sorted-completions comps) |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
597 (minibuffer-force-complete)) |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
598 (completed |
104344
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
599 ;; We could also decide to refresh the completions, |
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
600 ;; if they're displayed (and assuming there are |
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
601 ;; completions left). |
108500
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
602 (minibuffer-hide-completions)) |
93937
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
603 ;; Show the completion table, if requested. |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
604 ((not exact) |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
605 (if (case completion-auto-help |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
606 (lazy (eq this-command last-command)) |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
607 (t completion-auto-help)) |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
608 (minibuffer-completion-help) |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
609 (minibuffer-message "Next char not unique"))) |
104344
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
610 ;; If the last exact completion and this one were the same, it |
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
611 ;; means we've already given a "Next char not unique" message |
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
612 ;; and the user's hit TAB again, so now we give him help. |
93937
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
613 ((eq this-command last-command) |
108500
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
614 (if completion-auto-help (minibuffer-completion-help)))) |
93937
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
615 |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
616 (minibuffer--bitset completed t exact)))))))) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
617 |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
618 (defun minibuffer-complete () |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
619 "Complete the minibuffer contents as far as possible. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
620 Return nil if there is no valid completion, else t. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
621 If no characters can be completed, display a list of possible completions. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
622 If you repeat this command after it displayed such a list, |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
623 scroll the window of possible completions." |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
624 (interactive) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
625 ;; If the previous command was not this, |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
626 ;; mark the completion buffer obsolete. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
627 (unless (eq this-command last-command) |
108500
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
628 (setq completion-all-sorted-completions nil) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
629 (setq minibuffer-scroll-window nil)) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
630 |
108500
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
631 (cond |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
632 ;; If there's a fresh completion window with a live buffer, |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
633 ;; and this command is repeated, scroll that window. |
108500
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
634 ((window-live-p minibuffer-scroll-window) |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
635 (let ((window minibuffer-scroll-window)) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
636 (with-current-buffer (window-buffer window) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
637 (if (pos-visible-in-window-p (point-max) window) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
638 ;; If end is in view, scroll up to the beginning. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
639 (set-window-start window (point-min) nil) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
640 ;; Else scroll down one screen. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
641 (scroll-other-window)) |
108500
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
642 nil))) |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
643 ;; If we're cycling, keep on cycling. |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
644 (completion-all-sorted-completions |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
645 (minibuffer-force-complete) |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
646 t) |
9f927f4deab4
Allow the default completion to cycle.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108486
diff
changeset
|
647 (t (case (completion--do-completion) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
648 (#b000 nil) |
104342
867af630a71e
(completion--do-completion): Move point for the #b001 case as well (bug#4176).
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104122
diff
changeset
|
649 (#b001 (minibuffer-message "Sole completion") |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
650 t) |
104342
867af630a71e
(completion--do-completion): Move point for the #b001 case as well (bug#4176).
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104122
diff
changeset
|
651 (#b011 (minibuffer-message "Complete, but not unique") |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
652 t) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
653 (t t))))) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
654 |
95172
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
655 (defvar completion-all-sorted-completions nil) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
656 (make-variable-buffer-local 'completion-all-sorted-completions) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
657 |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
658 (defun completion--flush-all-sorted-completions (&rest ignore) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
659 (setq completion-all-sorted-completions nil)) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
660 |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
661 (defun completion-all-sorted-completions () |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
662 (or completion-all-sorted-completions |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
663 (let* ((start (field-beginning)) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
664 (end (field-end)) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
665 (all (completion-all-completions (buffer-substring start end) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
666 minibuffer-completion-table |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
667 minibuffer-completion-predicate |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
668 (- (point) start))) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
669 (last (last all)) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
670 (base-size (or (cdr last) 0))) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
671 (when last |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
672 (setcdr last nil) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
673 ;; Prefer shorter completions. |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
674 (setq all (sort all (lambda (c1 c2) (< (length c1) (length c2))))) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
675 ;; Prefer recently used completions. |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
676 (let ((hist (symbol-value minibuffer-history-variable))) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
677 (setq all (sort all (lambda (c1 c2) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
678 (> (length (member c1 hist)) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
679 (length (member c2 hist))))))) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
680 ;; Cache the result. This is not just for speed, but also so that |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
681 ;; repeated calls to minibuffer-force-complete can cycle through |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
682 ;; all possibilities. |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
683 (add-hook 'after-change-functions |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
684 'completion--flush-all-sorted-completions nil t) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
685 (setq completion-all-sorted-completions |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
686 (nconc all base-size)))))) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
687 |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
688 (defun minibuffer-force-complete () |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
689 "Complete the minibuffer to an exact match. |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
690 Repeated uses step through the possible completions." |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
691 (interactive) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
692 ;; FIXME: Need to deal with the extra-size issue here as well. |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
693 ;; FIXME: ~/src/emacs/t<M-TAB>/lisp/minibuffer.el completes to |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
694 ;; ~/src/emacs/trunk/ and throws away lisp/minibuffer.el. |
95172
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
695 (let* ((start (field-beginning)) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
696 (end (field-end)) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
697 (all (completion-all-sorted-completions))) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
698 (if (not (consp all)) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
699 (minibuffer-message (if all "No more completions" "No completions")) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
700 (goto-char end) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
701 (insert (car all)) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
702 (delete-region (+ start (cdr (last all))) end) |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
703 ;; If completing file names, (car all) may be a directory, so we'd now |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
704 ;; have a new set of possible completions and might want to reset |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
705 ;; completion-all-sorted-completions to nil, but we prefer not to, |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
706 ;; so that repeated calls minibuffer-force-complete still cycle |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
707 ;; through the previous possible completions. |
105174
13f171fbff05
(minibuffer-force-complete): Cycle the list, rather
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104792
diff
changeset
|
708 (let ((last (last all))) |
13f171fbff05
(minibuffer-force-complete): Cycle the list, rather
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104792
diff
changeset
|
709 (setcdr last (cons (car all) (cdr last))) |
13f171fbff05
(minibuffer-force-complete): Cycle the list, rather
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104792
diff
changeset
|
710 (setq completion-all-sorted-completions (cdr all)))))) |
95172
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
711 |
100044
f42890851326
Add and use minibuffer-confirm-exit-commands variable
Miles Bader <miles@gnu.org>
parents:
100022
diff
changeset
|
712 (defvar minibuffer-confirm-exit-commands |
100052
766018471339
(minibuffer-confirm-exit-commands): Add PC-complete and
Chong Yidong <cyd@stupidchicken.com>
parents:
100044
diff
changeset
|
713 '(minibuffer-complete minibuffer-complete-word PC-complete PC-complete-word) |
100044
f42890851326
Add and use minibuffer-confirm-exit-commands variable
Miles Bader <miles@gnu.org>
parents:
100022
diff
changeset
|
714 "A list of commands which cause an immediately following |
f42890851326
Add and use minibuffer-confirm-exit-commands variable
Miles Bader <miles@gnu.org>
parents:
100022
diff
changeset
|
715 `minibuffer-complete-and-exit' to ask for extra confirmation.") |
f42890851326
Add and use minibuffer-confirm-exit-commands variable
Miles Bader <miles@gnu.org>
parents:
100022
diff
changeset
|
716 |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
717 (defun minibuffer-complete-and-exit () |
99883
494c4c7bcf01
(minibuffer-complete-and-exit): Change `confirm-only' value of
Chong Yidong <cyd@stupidchicken.com>
parents:
99232
diff
changeset
|
718 "Exit if the minibuffer contains a valid completion. |
494c4c7bcf01
(minibuffer-complete-and-exit): Change `confirm-only' value of
Chong Yidong <cyd@stupidchicken.com>
parents:
99232
diff
changeset
|
719 Otherwise, try to complete the minibuffer contents. If |
494c4c7bcf01
(minibuffer-complete-and-exit): Change `confirm-only' value of
Chong Yidong <cyd@stupidchicken.com>
parents:
99232
diff
changeset
|
720 completion leads to a valid completion, a repetition of this |
494c4c7bcf01
(minibuffer-complete-and-exit): Change `confirm-only' value of
Chong Yidong <cyd@stupidchicken.com>
parents:
99232
diff
changeset
|
721 command will exit. |
494c4c7bcf01
(minibuffer-complete-and-exit): Change `confirm-only' value of
Chong Yidong <cyd@stupidchicken.com>
parents:
99232
diff
changeset
|
722 |
494c4c7bcf01
(minibuffer-complete-and-exit): Change `confirm-only' value of
Chong Yidong <cyd@stupidchicken.com>
parents:
99232
diff
changeset
|
723 If `minibuffer-completion-confirm' is `confirm', do not try to |
494c4c7bcf01
(minibuffer-complete-and-exit): Change `confirm-only' value of
Chong Yidong <cyd@stupidchicken.com>
parents:
99232
diff
changeset
|
724 complete; instead, ask for confirmation and accept any input if |
494c4c7bcf01
(minibuffer-complete-and-exit): Change `confirm-only' value of
Chong Yidong <cyd@stupidchicken.com>
parents:
99232
diff
changeset
|
725 confirmed. |
494c4c7bcf01
(minibuffer-complete-and-exit): Change `confirm-only' value of
Chong Yidong <cyd@stupidchicken.com>
parents:
99232
diff
changeset
|
726 If `minibuffer-completion-confirm' is `confirm-after-completion', |
494c4c7bcf01
(minibuffer-complete-and-exit): Change `confirm-only' value of
Chong Yidong <cyd@stupidchicken.com>
parents:
99232
diff
changeset
|
727 do not try to complete; instead, ask for confirmation if the |
102614
ac174f1dba45
(minibuffer-complete-and-exit): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
102601
diff
changeset
|
728 preceding minibuffer command was a member of |
ac174f1dba45
(minibuffer-complete-and-exit): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
102601
diff
changeset
|
729 `minibuffer-confirm-exit-commands', and accept the input |
ac174f1dba45
(minibuffer-complete-and-exit): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
102601
diff
changeset
|
730 otherwise." |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
731 (interactive) |
94211
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
732 (let ((beg (field-beginning)) |
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
733 (end (field-end))) |
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
734 (cond |
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
735 ;; Allow user to specify null string |
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
736 ((= beg end) (exit-minibuffer)) |
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
737 ((test-completion (buffer-substring beg end) |
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
738 minibuffer-completion-table |
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
739 minibuffer-completion-predicate) |
106453
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
740 ;; FIXME: completion-ignore-case has various slightly |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
741 ;; incompatible meanings. E.g. it can reflect whether the user |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
742 ;; wants completion to pay attention to case, or whether the |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
743 ;; string will be used in a context where case is significant. |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
744 ;; E.g. usually try-completion should obey the first, whereas |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
745 ;; test-completion should obey the second. |
94211
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
746 (when completion-ignore-case |
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
747 ;; Fixup case of the field, if necessary. |
94242
3530bf3c1687
(minibuffer-complete-and-exit): Fix last change.
Juanma Barranquero <lekktu@gmail.com>
parents:
94218
diff
changeset
|
748 (let* ((string (buffer-substring beg end)) |
94211
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
749 (compl (try-completion |
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
750 string |
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
751 minibuffer-completion-table |
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
752 minibuffer-completion-predicate))) |
106453
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
753 (when (and (stringp compl) (not (equal string compl)) |
94211
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
754 ;; If it weren't for this piece of paranoia, I'd replace |
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
755 ;; the whole thing with a call to do-completion. |
95799
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
756 ;; This is important, e.g. when the current minibuffer's |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
757 ;; content is a directory which only contains a single |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
758 ;; file, so `try-completion' actually completes to |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
759 ;; that file. |
94211
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
760 (= (length string) (length compl))) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
761 (goto-char end) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
762 (insert compl) |
94211
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
763 (delete-region beg end)))) |
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
764 (exit-minibuffer)) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
765 |
106453
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
766 ((memq minibuffer-completion-confirm '(confirm confirm-after-completion)) |
94211
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
767 ;; The user is permitted to exit with an input that's rejected |
99883
494c4c7bcf01
(minibuffer-complete-and-exit): Change `confirm-only' value of
Chong Yidong <cyd@stupidchicken.com>
parents:
99232
diff
changeset
|
768 ;; by test-completion, after confirming her choice. |
106453
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
769 (if (or (eq last-command this-command) |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
770 ;; For `confirm-after-completion' we only ask for confirmation |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
771 ;; if trying to exit immediately after typing TAB (this |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
772 ;; catches most minibuffer typos). |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
773 (and (eq minibuffer-completion-confirm 'confirm-after-completion) |
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
774 (not (memq last-command minibuffer-confirm-exit-commands)))) |
94211
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
775 (exit-minibuffer) |
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
776 (minibuffer-message "Confirm") |
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
777 nil)) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
778 |
94211
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
779 (t |
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
780 ;; Call do-completion, but ignore errors. |
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
781 (case (condition-case nil |
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
782 (completion--do-completion) |
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
783 (error 1)) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
784 ((#b001 #b011) (exit-minibuffer)) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
785 (#b111 (if (not minibuffer-completion-confirm) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
786 (exit-minibuffer) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
787 (minibuffer-message "Confirm") |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
788 nil)) |
94211
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
789 (t nil)))))) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
790 |
94304
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
791 (defun completion--try-word-completion (string table predicate point) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
792 (let ((comp (completion-try-completion string table predicate point))) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
793 (if (not (consp comp)) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
794 comp |
93937
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
795 |
94211
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
796 ;; If completion finds next char not unique, |
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
797 ;; consider adding a space or a hyphen. |
94304
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
798 (when (= (length string) (length (car comp))) |
102958
ca1d2b3eaecc
(completion--try-word-completion): Don't disable
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
102614
diff
changeset
|
799 ;; Mark the added char with the `completion-word' property, so it |
ca1d2b3eaecc
(completion--try-word-completion): Don't disable
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
102614
diff
changeset
|
800 ;; can be handled specially by completion styles such as |
ca1d2b3eaecc
(completion--try-word-completion): Don't disable
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
102614
diff
changeset
|
801 ;; partial-completion. |
ca1d2b3eaecc
(completion--try-word-completion): Don't disable
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
102614
diff
changeset
|
802 ;; We used to remove `partial-completion' from completion-styles |
ca1d2b3eaecc
(completion--try-word-completion): Don't disable
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
102614
diff
changeset
|
803 ;; instead, but it was too blunt, leading to situations where SPC |
ca1d2b3eaecc
(completion--try-word-completion): Don't disable
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
102614
diff
changeset
|
804 ;; was the only insertable char at point but minibuffer-complete-word |
ca1d2b3eaecc
(completion--try-word-completion): Don't disable
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
102614
diff
changeset
|
805 ;; refused inserting it. |
ca1d2b3eaecc
(completion--try-word-completion): Don't disable
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
102614
diff
changeset
|
806 (let ((exts (mapcar (lambda (str) (propertize str 'completion-try-word t)) |
ca1d2b3eaecc
(completion--try-word-completion): Don't disable
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
102614
diff
changeset
|
807 '(" " "-"))) |
94304
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
808 (before (substring string 0 point)) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
809 (after (substring string point)) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
810 tem) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
811 (while (and exts (not (consp tem))) |
94211
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
812 (setq tem (completion-try-completion |
94304
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
813 (concat before (pop exts) after) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
814 table predicate (1+ point)))) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
815 (if (consp tem) (setq comp tem)))) |
94211
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
816 |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
817 ;; Completing a single word is actually more difficult than completing |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
818 ;; as much as possible, because we first have to find the "current |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
819 ;; position" in `completion' in order to find the end of the word |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
820 ;; we're completing. Normally, `string' is a prefix of `completion', |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
821 ;; which makes it trivial to find the position, but with fancier |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
822 ;; completion (plus env-var expansion, ...) `completion' might not |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
823 ;; look anything like `string' at all. |
94304
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
824 (let* ((comppoint (cdr comp)) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
825 (completion (car comp)) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
826 (before (substring string 0 point)) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
827 (combined (concat before "\n" completion))) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
828 ;; Find in completion the longest text that was right before point. |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
829 (when (string-match "\\(.+\\)\n.*?\\1" combined) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
830 (let* ((prefix (match-string 1 before)) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
831 ;; We used non-greedy match to make `rem' as long as possible. |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
832 (rem (substring combined (match-end 0))) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
833 ;; Find in the remainder of completion the longest text |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
834 ;; that was right after point. |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
835 (after (substring string point)) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
836 (suffix (if (string-match "\\`\\(.+\\).*\n.*\\1" |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
837 (concat after "\n" rem)) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
838 (match-string 1 after)))) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
839 ;; The general idea is to try and guess what text was inserted |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
840 ;; at point by the completion. Problem is: if we guess wrong, |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
841 ;; we may end up treating as "added by completion" text that was |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
842 ;; actually painfully typed by the user. So if we then cut |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
843 ;; after the first word, we may throw away things the |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
844 ;; user wrote. So let's try to be as conservative as possible: |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
845 ;; only cut after the first word, if we're reasonably sure that |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
846 ;; our guess is correct. |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
847 ;; Note: a quick survey on emacs-devel seemed to indicate that |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
848 ;; nobody actually cares about the "word-at-a-time" feature of |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
849 ;; minibuffer-complete-word, whose real raison-d'être is that it |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
850 ;; tries to add "-" or " ". One more reason to only cut after |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
851 ;; the first word, if we're really sure we're right. |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
852 (when (and (or suffix (zerop (length after))) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
853 (string-match (concat |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
854 ;; Make submatch 1 as small as possible |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
855 ;; to reduce the risk of cutting |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
856 ;; valuable text. |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
857 ".*" (regexp-quote prefix) "\\(.*?\\)" |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
858 (if suffix (regexp-quote suffix) "\\'")) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
859 completion) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
860 ;; The new point in `completion' should also be just |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
861 ;; before the suffix, otherwise something more complex |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
862 ;; is going on, and we're not sure where we are. |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
863 (eq (match-end 1) comppoint) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
864 ;; (match-beginning 1)..comppoint is now the stretch |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
865 ;; of text in `completion' that was completed at point. |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
866 (string-match "\\W" completion (match-beginning 1)) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
867 ;; Is there really something to cut? |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
868 (> comppoint (match-end 0))) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
869 ;; Cut after the first word. |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
870 (let ((cutpos (match-end 0))) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
871 (setq completion (concat (substring completion 0 cutpos) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
872 (substring completion comppoint))) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
873 (setq comppoint cutpos))))) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
874 |
94304
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
875 (cons completion comppoint))))) |
93937
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
876 |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
877 |
93937
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
878 (defun minibuffer-complete-word () |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
879 "Complete the minibuffer contents at most a single word. |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
880 After one word is completed as much as possible, a space or hyphen |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
881 is added, provided that matches some possible completion. |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
882 Return nil if there is no valid completion, else t." |
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
883 (interactive) |
94211
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
884 (case (completion--do-completion 'completion--try-word-completion) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
885 (#b000 nil) |
104342
867af630a71e
(completion--do-completion): Move point for the #b001 case as well (bug#4176).
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104122
diff
changeset
|
886 (#b001 (minibuffer-message "Sole completion") |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
887 t) |
104342
867af630a71e
(completion--do-completion): Move point for the #b001 case as well (bug#4176).
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104122
diff
changeset
|
888 (#b011 (minibuffer-message "Complete, but not unique") |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
889 t) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
890 (t t))) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
891 |
104344
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
892 (defface completions-annotations '((t :inherit italic)) |
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
893 "Face to use for annotations in the *Completions* buffer.") |
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
894 |
109044
f0d32dbd0fcf
* lisp/minibuffer.el (completions-format): Change default from nil to
Juri Linkov <juri@jurta.org>
parents:
108831
diff
changeset
|
895 (defcustom completions-format 'horizontal |
106122
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
896 "Define the appearance and sorting of completions. |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
897 If the value is `vertical', display completions sorted vertically |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
898 in columns in the *Completions* buffer. |
109044
f0d32dbd0fcf
* lisp/minibuffer.el (completions-format): Change default from nil to
Juri Linkov <juri@jurta.org>
parents:
108831
diff
changeset
|
899 If the value is `horizontal', display completions sorted |
106122
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
900 horizontally in alphabetical order, rather than down the screen." |
109044
f0d32dbd0fcf
* lisp/minibuffer.el (completions-format): Change default from nil to
Juri Linkov <juri@jurta.org>
parents:
108831
diff
changeset
|
901 :type '(choice (const horizontal) (const vertical)) |
106122
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
902 :group 'minibuffer |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
903 :version "23.2") |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
904 |
94211
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
905 (defun completion--insert-strings (strings) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
906 "Insert a list of STRINGS into the current buffer. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
907 Uses columns to keep the listing readable but compact. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
908 It also eliminates runs of equal strings." |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
909 (when (consp strings) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
910 (let* ((length (apply 'max |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
911 (mapcar (lambda (s) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
912 (if (consp s) |
94561
bbc1b1a5633e
(completion--insert-strings): Use string-width rather than length.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94558
diff
changeset
|
913 (+ (string-width (car s)) |
bbc1b1a5633e
(completion--insert-strings): Use string-width rather than length.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94558
diff
changeset
|
914 (string-width (cadr s))) |
bbc1b1a5633e
(completion--insert-strings): Use string-width rather than length.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94558
diff
changeset
|
915 (string-width s))) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
916 strings))) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
917 (window (get-buffer-window (current-buffer) 0)) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
918 (wwidth (if window (1- (window-width window)) 79)) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
919 (columns (min |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
920 ;; At least 2 columns; at least 2 spaces between columns. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
921 (max 2 (/ wwidth (+ 2 length))) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
922 ;; Don't allocate more columns than we can fill. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
923 ;; Windows can't show less than 3 lines anyway. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
924 (max 1 (/ (length strings) 2)))) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
925 (colwidth (/ wwidth columns)) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
926 (column 0) |
106122
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
927 (rows (/ (length strings) columns)) |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
928 (row 0) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
929 (laststring nil)) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
930 ;; The insertion should be "sensible" no matter what choices were made |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
931 ;; for the parameters above. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
932 (dolist (str strings) |
101327
b0eef2ac5a59
(completion--insert-strings): Fix up computation of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
101162
diff
changeset
|
933 (unless (equal laststring str) ; Remove (consecutive) duplicates. |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
934 (setq laststring str) |
101327
b0eef2ac5a59
(completion--insert-strings): Fix up computation of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
101162
diff
changeset
|
935 (let ((length (if (consp str) |
b0eef2ac5a59
(completion--insert-strings): Fix up computation of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
101162
diff
changeset
|
936 (+ (string-width (car str)) |
b0eef2ac5a59
(completion--insert-strings): Fix up computation of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
101162
diff
changeset
|
937 (string-width (cadr str))) |
b0eef2ac5a59
(completion--insert-strings): Fix up computation of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
101162
diff
changeset
|
938 (string-width str)))) |
106122
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
939 (cond |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
940 ((eq completions-format 'vertical) |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
941 ;; Vertical format |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
942 (when (> row rows) |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
943 (forward-line (- -1 rows)) |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
944 (setq row 0 column (+ column colwidth))) |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
945 (when (> column 0) |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
946 (end-of-line) |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
947 (while (> (current-column) column) |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
948 (if (eobp) |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
949 (insert "\n") |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
950 (forward-line 1) |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
951 (end-of-line))) |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
952 (insert " \t") |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
953 (set-text-properties (- (point) 1) (point) |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
954 `(display (space :align-to ,column))))) |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
955 (t |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
956 ;; Horizontal format |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
957 (unless (bolp) |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
958 (if (< wwidth (+ (max colwidth length) column)) |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
959 ;; No space for `str' at point, move to next line. |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
960 (progn (insert "\n") (setq column 0)) |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
961 (insert " \t") |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
962 ;; Leave the space unpropertized so that in the case we're |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
963 ;; already past the goal column, there is still |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
964 ;; a space displayed. |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
965 (set-text-properties (- (point) 1) (point) |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
966 ;; We can't just set tab-width, because |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
967 ;; completion-setup-function will kill all |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
968 ;; local variables :-( |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
969 `(display (space :align-to ,column))) |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
970 nil)))) |
101327
b0eef2ac5a59
(completion--insert-strings): Fix up computation of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
101162
diff
changeset
|
971 (if (not (consp str)) |
b0eef2ac5a59
(completion--insert-strings): Fix up computation of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
101162
diff
changeset
|
972 (put-text-property (point) (progn (insert str) (point)) |
b0eef2ac5a59
(completion--insert-strings): Fix up computation of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
101162
diff
changeset
|
973 'mouse-face 'highlight) |
b0eef2ac5a59
(completion--insert-strings): Fix up computation of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
101162
diff
changeset
|
974 (put-text-property (point) (progn (insert (car str)) (point)) |
b0eef2ac5a59
(completion--insert-strings): Fix up computation of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
101162
diff
changeset
|
975 'mouse-face 'highlight) |
104344
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
976 (add-text-properties (point) (progn (insert (cadr str)) (point)) |
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
977 '(mouse-face nil |
106122
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
978 face completions-annotations))) |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
979 (cond |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
980 ((eq completions-format 'vertical) |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
981 ;; Vertical format |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
982 (if (> column 0) |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
983 (forward-line) |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
984 (insert "\n")) |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
985 (setq row (1+ row))) |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
986 (t |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
987 ;; Horizontal format |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
988 ;; Next column to align to. |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
989 (setq column (+ column |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
990 ;; Round up to a whole number of columns. |
4ff55285a1c0
(completions-format): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
106109
diff
changeset
|
991 (* colwidth (ceiling length colwidth)))))))))))) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
992 |
94464
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
993 (defvar completion-common-substring nil) |
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
994 (make-obsolete-variable 'completion-common-substring nil "23.1") |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
995 |
94013
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
996 (defvar completion-setup-hook nil |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
997 "Normal hook run at the end of setting up a completion list buffer. |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
998 When this hook is run, the current buffer is the one in which the |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
999 command to display the completion list buffer was run. |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
1000 The completion list buffer is available as the value of `standard-output'. |
94464
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
1001 See also `display-completion-list'.") |
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
1002 |
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
1003 (defface completions-first-difference |
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
1004 '((t (:inherit bold))) |
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
1005 "Face put on the first uncommon character in completions in *Completions* buffer." |
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
1006 :group 'completion) |
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
1007 |
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
1008 (defface completions-common-part |
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
1009 '((t (:inherit default))) |
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
1010 "Face put on the common prefix substring in completions in *Completions* buffer. |
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
1011 The idea of `completions-common-part' is that you can use it to |
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
1012 make the common parts less visible than normal, so that the rest |
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
1013 of the differing parts is, by contrast, slightly highlighted." |
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
1014 :group 'completion) |
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
1015 |
100623
5a144164af93
(completion-all-completions-with-base-size): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100052
diff
changeset
|
1016 (defun completion-hilit-commonality (completions prefix-len base-size) |
94464
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
1017 (when completions |
100623
5a144164af93
(completion-all-completions-with-base-size): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100052
diff
changeset
|
1018 (let ((com-str-len (- prefix-len (or base-size 0)))) |
94464
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
1019 (nconc |
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
1020 (mapcar |
94558
9802c49152d9
(completion-hilit-commonality): Revert last change:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94487
diff
changeset
|
1021 (lambda (elem) |
9802c49152d9
(completion-hilit-commonality): Revert last change:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94487
diff
changeset
|
1022 (let ((str |
9802c49152d9
(completion-hilit-commonality): Revert last change:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94487
diff
changeset
|
1023 ;; Don't modify the string itself, but a copy, since the |
9802c49152d9
(completion-hilit-commonality): Revert last change:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94487
diff
changeset
|
1024 ;; the string may be read-only or used for other purposes. |
9802c49152d9
(completion-hilit-commonality): Revert last change:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94487
diff
changeset
|
1025 ;; Furthermore, since `completions' may come from |
9802c49152d9
(completion-hilit-commonality): Revert last change:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94487
diff
changeset
|
1026 ;; display-completion-list, `elem' may be a list. |
9802c49152d9
(completion-hilit-commonality): Revert last change:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94487
diff
changeset
|
1027 (if (consp elem) |
9802c49152d9
(completion-hilit-commonality): Revert last change:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94487
diff
changeset
|
1028 (car (setq elem (cons (copy-sequence (car elem)) |
9802c49152d9
(completion-hilit-commonality): Revert last change:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94487
diff
changeset
|
1029 (cdr elem)))) |
9802c49152d9
(completion-hilit-commonality): Revert last change:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94487
diff
changeset
|
1030 (setq elem (copy-sequence elem))))) |
100929
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1031 (put-text-property 0 |
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1032 ;; If completion-boundaries returns incorrect |
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1033 ;; values, all-completions may return strings |
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1034 ;; that don't contain the prefix. |
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1035 (min com-str-len (length str)) |
94558
9802c49152d9
(completion-hilit-commonality): Revert last change:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94487
diff
changeset
|
1036 'font-lock-face 'completions-common-part |
9802c49152d9
(completion-hilit-commonality): Revert last change:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94487
diff
changeset
|
1037 str) |
9802c49152d9
(completion-hilit-commonality): Revert last change:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94487
diff
changeset
|
1038 (if (> (length str) com-str-len) |
9802c49152d9
(completion-hilit-commonality): Revert last change:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94487
diff
changeset
|
1039 (put-text-property com-str-len (1+ com-str-len) |
9802c49152d9
(completion-hilit-commonality): Revert last change:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94487
diff
changeset
|
1040 'font-lock-face 'completions-first-difference |
9802c49152d9
(completion-hilit-commonality): Revert last change:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94487
diff
changeset
|
1041 str))) |
9802c49152d9
(completion-hilit-commonality): Revert last change:
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94487
diff
changeset
|
1042 elem) |
94464
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
1043 completions) |
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
1044 base-size)))) |
94013
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
1045 |
97478
6c4680239c3f
(display-completion-list): Revert last change. Only default base-size
Chong Yidong <cyd@stupidchicken.com>
parents:
97476
diff
changeset
|
1046 (defun display-completion-list (completions &optional common-substring) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1047 "Display the list of completions, COMPLETIONS, using `standard-output'. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1048 Each element may be just a symbol or string |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1049 or may be a list of two strings to be printed as if concatenated. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1050 If it is a list of two strings, the first is the actual completion |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1051 alternative, the second serves as annotation. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1052 `standard-output' must be a buffer. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1053 The actual completion alternatives, as inserted, are given `mouse-face' |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1054 properties of `highlight'. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1055 At the end, this runs the normal hook `completion-setup-hook'. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1056 It can find the completion buffer in `standard-output'. |
97476
354026fc6299
(completion-boundaries): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
97179
diff
changeset
|
1057 |
97544
abca40c62d44
(display-completion-list): Re-state the obsolescence of `common-substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
97478
diff
changeset
|
1058 The obsolete optional arg COMMON-SUBSTRING, if non-nil, should be a string |
97476
354026fc6299
(completion-boundaries): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
97179
diff
changeset
|
1059 specifying a common substring for adding the faces |
354026fc6299
(completion-boundaries): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
97179
diff
changeset
|
1060 `completions-first-difference' and `completions-common-part' to |
97478
6c4680239c3f
(display-completion-list): Revert last change. Only default base-size
Chong Yidong <cyd@stupidchicken.com>
parents:
97476
diff
changeset
|
1061 the completions buffer." |
94464
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
1062 (if common-substring |
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
1063 (setq completions (completion-hilit-commonality |
100623
5a144164af93
(completion-all-completions-with-base-size): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100052
diff
changeset
|
1064 completions (length common-substring) |
5a144164af93
(completion-all-completions-with-base-size): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100052
diff
changeset
|
1065 ;; We don't know the base-size. |
5a144164af93
(completion-all-completions-with-base-size): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100052
diff
changeset
|
1066 nil))) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1067 (if (not (bufferp standard-output)) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1068 ;; This *never* (ever) happens, so there's no point trying to be clever. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1069 (with-temp-buffer |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1070 (let ((standard-output (current-buffer)) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1071 (completion-setup-hook nil)) |
97478
6c4680239c3f
(display-completion-list): Revert last change. Only default base-size
Chong Yidong <cyd@stupidchicken.com>
parents:
97476
diff
changeset
|
1072 (display-completion-list completions common-substring)) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1073 (princ (buffer-string))) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1074 |
105601
68686d39c93a
Replace completion-base-size by completion-base-position to fix bugs
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105597
diff
changeset
|
1075 (with-current-buffer standard-output |
68686d39c93a
Replace completion-base-size by completion-base-position to fix bugs
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105597
diff
changeset
|
1076 (goto-char (point-max)) |
68686d39c93a
Replace completion-base-size by completion-base-position to fix bugs
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105597
diff
changeset
|
1077 (if (null completions) |
68686d39c93a
Replace completion-base-size by completion-base-position to fix bugs
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105597
diff
changeset
|
1078 (insert "There are no possible completions of what you have typed.") |
68686d39c93a
Replace completion-base-size by completion-base-position to fix bugs
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105597
diff
changeset
|
1079 (insert "Possible completions are:\n") |
68686d39c93a
Replace completion-base-size by completion-base-position to fix bugs
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105597
diff
changeset
|
1080 (completion--insert-strings completions)))) |
94062
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
1081 |
94464
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
1082 ;; The hilit used to be applied via completion-setup-hook, so there |
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
1083 ;; may still be some code that uses completion-common-substring. |
97476
354026fc6299
(completion-boundaries): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
97179
diff
changeset
|
1084 (with-no-warnings |
354026fc6299
(completion-boundaries): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
97179
diff
changeset
|
1085 (let ((completion-common-substring common-substring)) |
354026fc6299
(completion-boundaries): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
97179
diff
changeset
|
1086 (run-hooks 'completion-setup-hook))) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1087 nil) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1088 |
104719
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1089 (defvar completion-annotate-function |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1090 nil |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1091 ;; Note: there's a lot of scope as for when to add annotations and |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1092 ;; what annotations to add. E.g. completing-help.el allowed adding |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1093 ;; the first line of docstrings to M-x completion. But there's |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1094 ;; a tension, since such annotations, while useful at times, can |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1095 ;; actually drown the useful information. |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1096 ;; So completion-annotate-function should be used parsimoniously, or |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1097 ;; else only used upon a user's request (e.g. we could add a command |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1098 ;; to completion-list-mode to add annotations to the current |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1099 ;; completions). |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1100 "Function to add annotations in the *Completions* buffer. |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1101 The function takes a completion and should either return nil, or a string that |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1102 will be displayed next to the completion. The function can access the |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1103 completion table and predicates via `minibuffer-completion-table' and related |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1104 variables.") |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1105 |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1106 (defun minibuffer-completion-help () |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1107 "Display a list of possible completions of the current minibuffer contents." |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1108 (interactive) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1109 (message "Making completion list...") |
107858 | 1110 (let* ((non-essential t) |
1111 (start (field-beginning)) | |
105601
68686d39c93a
Replace completion-base-size by completion-base-position to fix bugs
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105597
diff
changeset
|
1112 (string (field-string)) |
94211
81b6ecd7be01
(completion-try-completion): Change magic symbol
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94202
diff
changeset
|
1113 (completions (completion-all-completions |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1114 string |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1115 minibuffer-completion-table |
94304
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
1116 minibuffer-completion-predicate |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
1117 (- (point) (field-beginning))))) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1118 (message nil) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1119 (if (and completions |
94062
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
1120 (or (consp (cdr completions)) |
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
1121 (not (equal (car completions) string)))) |
106132
57f23ca20a76
* window.el (display-buffer-mark-dedicated): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106122
diff
changeset
|
1122 (let* ((last (last completions)) |
57f23ca20a76
* window.el (display-buffer-mark-dedicated): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106122
diff
changeset
|
1123 (base-size (cdr last)) |
57f23ca20a76
* window.el (display-buffer-mark-dedicated): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106122
diff
changeset
|
1124 ;; If the *Completions* buffer is shown in a new |
57f23ca20a76
* window.el (display-buffer-mark-dedicated): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106122
diff
changeset
|
1125 ;; window, mark it as softly-dedicated, so bury-buffer in |
57f23ca20a76
* window.el (display-buffer-mark-dedicated): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106122
diff
changeset
|
1126 ;; minibuffer-hide-completions will know whether to |
57f23ca20a76
* window.el (display-buffer-mark-dedicated): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106122
diff
changeset
|
1127 ;; delete the window or not. |
57f23ca20a76
* window.el (display-buffer-mark-dedicated): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106122
diff
changeset
|
1128 (display-buffer-mark-dedicated 'soft)) |
57f23ca20a76
* window.el (display-buffer-mark-dedicated): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106122
diff
changeset
|
1129 (with-output-to-temp-buffer "*Completions*" |
94062
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
1130 ;; Remove the base-size tail because `sort' requires a properly |
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
1131 ;; nil-terminated list. |
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
1132 (when last (setcdr last nil)) |
104719
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1133 (setq completions (sort completions 'string-lessp)) |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1134 (when completion-annotate-function |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1135 (setq completions |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1136 (mapcar (lambda (s) |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1137 (let ((ann |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1138 (funcall completion-annotate-function s))) |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1139 (if ann (list s ann) s))) |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1140 completions))) |
105601
68686d39c93a
Replace completion-base-size by completion-base-position to fix bugs
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105597
diff
changeset
|
1141 (with-current-buffer standard-output |
106132
57f23ca20a76
* window.el (display-buffer-mark-dedicated): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106122
diff
changeset
|
1142 (set (make-local-variable 'completion-base-position) |
57f23ca20a76
* window.el (display-buffer-mark-dedicated): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106122
diff
changeset
|
1143 ;; FIXME: We should provide the END part as well, but |
57f23ca20a76
* window.el (display-buffer-mark-dedicated): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106122
diff
changeset
|
1144 ;; currently completion-all-completions does not give |
57f23ca20a76
* window.el (display-buffer-mark-dedicated): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106122
diff
changeset
|
1145 ;; us the necessary information. |
57f23ca20a76
* window.el (display-buffer-mark-dedicated): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106122
diff
changeset
|
1146 (list (+ start base-size) nil))) |
105601
68686d39c93a
Replace completion-base-size by completion-base-position to fix bugs
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105597
diff
changeset
|
1147 (display-completion-list completions))) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1148 |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1149 ;; If there are no completions, or if the current input is already the |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1150 ;; only possible completion, then hide (previous&stale) completions. |
105969
6a8befbb8e39
(minibuffer-completion-help): Use minibuffer-hide-completions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105950
diff
changeset
|
1151 (minibuffer-hide-completions) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1152 (ding) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1153 (minibuffer-message |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1154 (if completions "Sole completion" "No completions"))) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1155 nil)) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1156 |
104344
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
1157 (defun minibuffer-hide-completions () |
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
1158 "Get rid of an out-of-date *Completions* buffer." |
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
1159 ;; FIXME: We could/should use minibuffer-scroll-window here, but it |
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
1160 ;; can also point to the minibuffer-parent-window, so it's a bit tricky. |
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
1161 (let ((win (get-buffer-window "*Completions*" 0))) |
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
1162 (if win (with-selected-window win (bury-buffer))))) |
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
1163 |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1164 (defun exit-minibuffer () |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1165 "Terminate this minibuffer argument." |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1166 (interactive) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1167 ;; If the command that uses this has made modifications in the minibuffer, |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1168 ;; we don't want them to cause deactivation of the mark in the original |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1169 ;; buffer. |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1170 ;; A better solution would be to make deactivate-mark buffer-local |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1171 ;; (or to turn it into a list of buffers, ...), but in the mean time, |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1172 ;; this should do the trick in most cases. |
93937
dfe13eac745b
* minibuffer.el (minibuffer): Move group from cus-edit.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93885
diff
changeset
|
1173 (setq deactivate-mark nil) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1174 (throw 'exit nil)) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1175 |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1176 (defun self-insert-and-exit () |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1177 "Terminate minibuffer input." |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1178 (interactive) |
101010
4efc7ca085ce
Replace last-command-char with last-command-event.
Glenn Morris <rgm@gnu.org>
parents:
100929
diff
changeset
|
1179 (if (characterp last-command-event) |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1180 (call-interactively 'self-insert-command) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1181 (ding)) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1182 (exit-minibuffer)) |
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
1183 |
106109
42ca82b4620b
* abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105969
diff
changeset
|
1184 (defvar completion-in-region-functions nil |
107514
408aeb71a781
* lisp/minibuffer.el (completion-in-region-functions): Fix docstring typos.
Juanma Barranquero <lekktu@gmail.com>
parents:
107250
diff
changeset
|
1185 "Wrapper hook around `completion-in-region'. |
106109
42ca82b4620b
* abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105969
diff
changeset
|
1186 The functions on this special hook are called with 5 arguments: |
42ca82b4620b
* abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105969
diff
changeset
|
1187 NEXT-FUN START END COLLECTION PREDICATE. |
42ca82b4620b
* abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105969
diff
changeset
|
1188 NEXT-FUN is a function of four arguments (START END COLLECTION PREDICATE) |
107517
ed16fdd2685a
Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
107514
diff
changeset
|
1189 that performs the default operation. The other four arguments are like |
107514
408aeb71a781
* lisp/minibuffer.el (completion-in-region-functions): Fix docstring typos.
Juanma Barranquero <lekktu@gmail.com>
parents:
107250
diff
changeset
|
1190 the ones passed to `completion-in-region'. The functions on this hook |
106109
42ca82b4620b
* abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105969
diff
changeset
|
1191 are expected to perform completion on START..END using COLLECTION |
42ca82b4620b
* abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105969
diff
changeset
|
1192 and PREDICATE, either by calling NEXT-FUN or by doing it themselves.") |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1193 |
106109
42ca82b4620b
* abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105969
diff
changeset
|
1194 (defun completion-in-region (start end collection &optional predicate) |
42ca82b4620b
* abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105969
diff
changeset
|
1195 "Complete the text between START and END using COLLECTION. |
106452
4543cbad36da
(completion-in-region): Improve docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106413
diff
changeset
|
1196 Return nil if there is no valid completion, else t. |
106109
42ca82b4620b
* abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105969
diff
changeset
|
1197 Point needs to be somewhere between START and END." |
42ca82b4620b
* abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105969
diff
changeset
|
1198 (assert (<= start (point)) (<= (point) end)) |
42ca82b4620b
* abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105969
diff
changeset
|
1199 ;; FIXME: undisplay the *Completions* buffer once the completion is done. |
42ca82b4620b
* abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105969
diff
changeset
|
1200 (with-wrapper-hook |
42ca82b4620b
* abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105969
diff
changeset
|
1201 completion-in-region-functions (start end collection predicate) |
42ca82b4620b
* abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105969
diff
changeset
|
1202 (let ((minibuffer-completion-table collection) |
42ca82b4620b
* abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105969
diff
changeset
|
1203 (minibuffer-completion-predicate predicate) |
42ca82b4620b
* abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105969
diff
changeset
|
1204 (ol (make-overlay start end nil nil t))) |
42ca82b4620b
* abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105969
diff
changeset
|
1205 (overlay-put ol 'field 'completion) |
42ca82b4620b
* abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105969
diff
changeset
|
1206 (unwind-protect |
42ca82b4620b
* abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105969
diff
changeset
|
1207 (call-interactively 'minibuffer-complete) |
42ca82b4620b
* abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105969
diff
changeset
|
1208 (delete-overlay ol))))) |
95575
d34a432d5863
* keymap.c (Vminibuffer_local_filename_must_match_map):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95426
diff
changeset
|
1209 |
108166
15deb8699a13
* minibuffer.el (tags-completion-at-point-function): New function.
Chong Yidong <cyd@stupidchicken.com>
parents:
108159
diff
changeset
|
1210 (defvar completion-at-point-functions '(tags-completion-at-point-function) |
106482
806e9f7990d8
* minibuffer.el (completion-at-point-functions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106453
diff
changeset
|
1211 "Special hook to find the completion table for the thing at point. |
806e9f7990d8
* minibuffer.el (completion-at-point-functions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106453
diff
changeset
|
1212 It is called without any argument and should return either nil, |
806e9f7990d8
* minibuffer.el (completion-at-point-functions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106453
diff
changeset
|
1213 or a function of no argument to perform completion (discouraged), |
806e9f7990d8
* minibuffer.el (completion-at-point-functions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106453
diff
changeset
|
1214 or a list of the form (START END COLLECTION &rest PROPS) where |
806e9f7990d8
* minibuffer.el (completion-at-point-functions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106453
diff
changeset
|
1215 START and END delimit the entity to complete and should include point, |
806e9f7990d8
* minibuffer.el (completion-at-point-functions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106453
diff
changeset
|
1216 COLLECTION is the completion table to use to complete it, and |
806e9f7990d8
* minibuffer.el (completion-at-point-functions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106453
diff
changeset
|
1217 PROPS is a property list for additional information. |
806e9f7990d8
* minibuffer.el (completion-at-point-functions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106453
diff
changeset
|
1218 Currently supported properties are: |
806e9f7990d8
* minibuffer.el (completion-at-point-functions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106453
diff
changeset
|
1219 `:predicate' a predicate that completion candidates need to satisfy. |
806e9f7990d8
* minibuffer.el (completion-at-point-functions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106453
diff
changeset
|
1220 `:annotation-function' the value to use for `completion-annotate-function'.") |
806e9f7990d8
* minibuffer.el (completion-at-point-functions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106453
diff
changeset
|
1221 |
108375 | 1222 (defun completion-at-point (&optional arg) |
108159
56d11bda8235
Unify complete-symbol with completion-at-point.
Chong Yidong <cyd@stupidchicken.com>
parents:
107983
diff
changeset
|
1223 "Perform completion on the text around point. |
56d11bda8235
Unify complete-symbol with completion-at-point.
Chong Yidong <cyd@stupidchicken.com>
parents:
107983
diff
changeset
|
1224 The completion method is determined by `completion-at-point-functions'. |
56d11bda8235
Unify complete-symbol with completion-at-point.
Chong Yidong <cyd@stupidchicken.com>
parents:
107983
diff
changeset
|
1225 |
56d11bda8235
Unify complete-symbol with completion-at-point.
Chong Yidong <cyd@stupidchicken.com>
parents:
107983
diff
changeset
|
1226 With a prefix argument, this command does completion within |
56d11bda8235
Unify complete-symbol with completion-at-point.
Chong Yidong <cyd@stupidchicken.com>
parents:
107983
diff
changeset
|
1227 the collection of symbols listed in the index of the manual for the |
56d11bda8235
Unify complete-symbol with completion-at-point.
Chong Yidong <cyd@stupidchicken.com>
parents:
107983
diff
changeset
|
1228 language you are using." |
56d11bda8235
Unify complete-symbol with completion-at-point.
Chong Yidong <cyd@stupidchicken.com>
parents:
107983
diff
changeset
|
1229 (interactive "P") |
56d11bda8235
Unify complete-symbol with completion-at-point.
Chong Yidong <cyd@stupidchicken.com>
parents:
107983
diff
changeset
|
1230 (if arg |
56d11bda8235
Unify complete-symbol with completion-at-point.
Chong Yidong <cyd@stupidchicken.com>
parents:
107983
diff
changeset
|
1231 (info-complete-symbol) |
56d11bda8235
Unify complete-symbol with completion-at-point.
Chong Yidong <cyd@stupidchicken.com>
parents:
107983
diff
changeset
|
1232 (let ((res (run-hook-with-args-until-success |
56d11bda8235
Unify complete-symbol with completion-at-point.
Chong Yidong <cyd@stupidchicken.com>
parents:
107983
diff
changeset
|
1233 'completion-at-point-functions))) |
56d11bda8235
Unify complete-symbol with completion-at-point.
Chong Yidong <cyd@stupidchicken.com>
parents:
107983
diff
changeset
|
1234 (cond |
56d11bda8235
Unify complete-symbol with completion-at-point.
Chong Yidong <cyd@stupidchicken.com>
parents:
107983
diff
changeset
|
1235 ((functionp res) (funcall res)) |
56d11bda8235
Unify complete-symbol with completion-at-point.
Chong Yidong <cyd@stupidchicken.com>
parents:
107983
diff
changeset
|
1236 (res |
56d11bda8235
Unify complete-symbol with completion-at-point.
Chong Yidong <cyd@stupidchicken.com>
parents:
107983
diff
changeset
|
1237 (let* ((plist (nthcdr 3 res)) |
56d11bda8235
Unify complete-symbol with completion-at-point.
Chong Yidong <cyd@stupidchicken.com>
parents:
107983
diff
changeset
|
1238 (start (nth 0 res)) |
56d11bda8235
Unify complete-symbol with completion-at-point.
Chong Yidong <cyd@stupidchicken.com>
parents:
107983
diff
changeset
|
1239 (end (nth 1 res)) |
56d11bda8235
Unify complete-symbol with completion-at-point.
Chong Yidong <cyd@stupidchicken.com>
parents:
107983
diff
changeset
|
1240 (completion-annotate-function |
56d11bda8235
Unify complete-symbol with completion-at-point.
Chong Yidong <cyd@stupidchicken.com>
parents:
107983
diff
changeset
|
1241 (or (plist-get plist :annotation-function) |
56d11bda8235
Unify complete-symbol with completion-at-point.
Chong Yidong <cyd@stupidchicken.com>
parents:
107983
diff
changeset
|
1242 completion-annotate-function))) |
56d11bda8235
Unify complete-symbol with completion-at-point.
Chong Yidong <cyd@stupidchicken.com>
parents:
107983
diff
changeset
|
1243 (completion-in-region start end (nth 2 res) |
56d11bda8235
Unify complete-symbol with completion-at-point.
Chong Yidong <cyd@stupidchicken.com>
parents:
107983
diff
changeset
|
1244 (plist-get plist :predicate)))))))) |
56d11bda8235
Unify complete-symbol with completion-at-point.
Chong Yidong <cyd@stupidchicken.com>
parents:
107983
diff
changeset
|
1245 |
108375 | 1246 (define-obsolete-function-alias 'complete-symbol 'completion-at-point "24.1") |
106482
806e9f7990d8
* minibuffer.el (completion-at-point-functions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106453
diff
changeset
|
1247 |
106545
82c7a7ac0c67
(minibuffer-local-must-match-filename-map): Re-instate the varalias that was
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106482
diff
changeset
|
1248 ;;; Key bindings. |
82c7a7ac0c67
(minibuffer-local-must-match-filename-map): Re-instate the varalias that was
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106482
diff
changeset
|
1249 |
82c7a7ac0c67
(minibuffer-local-must-match-filename-map): Re-instate the varalias that was
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106482
diff
changeset
|
1250 (define-obsolete-variable-alias 'minibuffer-local-must-match-filename-map |
82c7a7ac0c67
(minibuffer-local-must-match-filename-map): Re-instate the varalias that was
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106482
diff
changeset
|
1251 'minibuffer-local-filename-must-match-map "23.1") |
106482
806e9f7990d8
* minibuffer.el (completion-at-point-functions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106453
diff
changeset
|
1252 |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1253 (let ((map minibuffer-local-map)) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1254 (define-key map "\C-g" 'abort-recursive-edit) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1255 (define-key map "\r" 'exit-minibuffer) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1256 (define-key map "\n" 'exit-minibuffer)) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1257 |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1258 (let ((map minibuffer-local-completion-map)) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1259 (define-key map "\t" 'minibuffer-complete) |
95172
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
1260 ;; M-TAB is already abused for many other purposes, so we should find |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
1261 ;; another binding for it. |
894bae45bf1b
(completion-all-sorted-completions): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95145
diff
changeset
|
1262 ;; (define-key map "\e\t" 'minibuffer-force-complete) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1263 (define-key map " " 'minibuffer-complete-word) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1264 (define-key map "?" 'minibuffer-completion-help)) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1265 |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1266 (let ((map minibuffer-local-must-match-map)) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1267 (define-key map "\r" 'minibuffer-complete-and-exit) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1268 (define-key map "\n" 'minibuffer-complete-and-exit)) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1269 |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1270 (let ((map minibuffer-local-filename-completion-map)) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1271 (define-key map " " nil)) |
95575
d34a432d5863
* keymap.c (Vminibuffer_local_filename_must_match_map):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95426
diff
changeset
|
1272 (let ((map minibuffer-local-filename-must-match-map)) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1273 (define-key map " " nil)) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1274 |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1275 (let ((map minibuffer-local-ns-map)) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1276 (define-key map " " 'exit-minibuffer) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1277 (define-key map "\t" 'exit-minibuffer) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1278 (define-key map "?" 'self-insert-and-exit)) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1279 |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1280 ;;; Completion tables. |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1281 |
93945
76ebfa5df8a2
* minibuffer.el (minibuffer--double-dollars, read-file-name-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93944
diff
changeset
|
1282 (defun minibuffer--double-dollars (str) |
76ebfa5df8a2
* minibuffer.el (minibuffer--double-dollars, read-file-name-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93944
diff
changeset
|
1283 (replace-regexp-in-string "\\$" "$$" str)) |
76ebfa5df8a2
* minibuffer.el (minibuffer--double-dollars, read-file-name-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93944
diff
changeset
|
1284 |
94013
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
1285 (defun completion--make-envvar-table () |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
1286 (mapcar (lambda (enventry) |
101162
64a6da0f9aa2
* minibuffer.el (minibuffer-message): Fix regexp so it doesn't exclude
Juanma Barranquero <lekktu@gmail.com>
parents:
101010
diff
changeset
|
1287 (substring enventry 0 (string-match-p "=" enventry))) |
94013
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
1288 process-environment)) |
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
1289 |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1290 (defconst completion--embedded-envvar-re |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1291 (concat "\\(?:^\\|[^$]\\(?:\\$\\$\\)*\\)" |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1292 "$\\([[:alnum:]_]*\\|{\\([^}]*\\)\\)\\'")) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1293 |
94013
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
1294 (defun completion--embedded-envvar-table (string pred action) |
105733
1528571f6bfd
(completion--embedded-envvar-table): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105711
diff
changeset
|
1295 "Completion table for envvars embedded in a string. |
1528571f6bfd
(completion--embedded-envvar-table): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105711
diff
changeset
|
1296 The envvar syntax (and escaping) rules followed by this table are the |
1528571f6bfd
(completion--embedded-envvar-table): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105711
diff
changeset
|
1297 same as `substitute-in-file-name'." |
1528571f6bfd
(completion--embedded-envvar-table): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105711
diff
changeset
|
1298 ;; We ignore `pred', because the predicates passed to us via |
1528571f6bfd
(completion--embedded-envvar-table): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105711
diff
changeset
|
1299 ;; read-file-name-internal are not 100% correct and fail here: |
1528571f6bfd
(completion--embedded-envvar-table): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105711
diff
changeset
|
1300 ;; e.g. we get predicates like file-directory-p there, whereas the filename |
1528571f6bfd
(completion--embedded-envvar-table): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105711
diff
changeset
|
1301 ;; completed needs to be passed through substitute-in-file-name before it |
1528571f6bfd
(completion--embedded-envvar-table): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105711
diff
changeset
|
1302 ;; can be passed to file-directory-p. |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1303 (when (string-match completion--embedded-envvar-re string) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1304 (let* ((beg (or (match-beginning 2) (match-beginning 1))) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1305 (table (completion--make-envvar-table)) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1306 (prefix (substring string 0 beg))) |
105733
1528571f6bfd
(completion--embedded-envvar-table): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105711
diff
changeset
|
1307 (cond |
1528571f6bfd
(completion--embedded-envvar-table): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105711
diff
changeset
|
1308 ((eq action 'lambda) |
1528571f6bfd
(completion--embedded-envvar-table): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105711
diff
changeset
|
1309 ;; This table is expected to be used in conjunction with some |
1528571f6bfd
(completion--embedded-envvar-table): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105711
diff
changeset
|
1310 ;; other table that provides the "main" completion. Let the |
1528571f6bfd
(completion--embedded-envvar-table): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105711
diff
changeset
|
1311 ;; other table handle the test-completion case. |
1528571f6bfd
(completion--embedded-envvar-table): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105711
diff
changeset
|
1312 nil) |
1528571f6bfd
(completion--embedded-envvar-table): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105711
diff
changeset
|
1313 ((eq (car-safe action) 'boundaries) |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1314 ;; Only return boundaries if there's something to complete, |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1315 ;; since otherwise when we're used in |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1316 ;; completion-table-in-turn, we could return boundaries and |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1317 ;; let some subsequent table return a list of completions. |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1318 ;; FIXME: Maybe it should rather be fixed in |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1319 ;; completion-table-in-turn instead, but it's difficult to |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1320 ;; do it efficiently there. |
105733
1528571f6bfd
(completion--embedded-envvar-table): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105711
diff
changeset
|
1321 (when (try-completion (substring string beg) table nil) |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1322 ;; Compute the boundaries of the subfield to which this |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1323 ;; completion applies. |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1324 (let ((suffix (cdr action))) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1325 (list* 'boundaries |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1326 (or (match-beginning 2) (match-beginning 1)) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1327 (when (string-match "[^[:alnum:]_]" suffix) |
105733
1528571f6bfd
(completion--embedded-envvar-table): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105711
diff
changeset
|
1328 (match-beginning 0)))))) |
1528571f6bfd
(completion--embedded-envvar-table): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105711
diff
changeset
|
1329 (t |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1330 (if (eq (aref string (1- beg)) ?{) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1331 (setq table (apply-partially 'completion-table-with-terminator |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1332 "}" table))) |
104719
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1333 ;; Even if file-name completion is case-insensitive, we want |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1334 ;; envvar completion to be case-sensitive. |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1335 (let ((completion-ignore-case nil)) |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1336 (completion-table-with-context |
105733
1528571f6bfd
(completion--embedded-envvar-table): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105711
diff
changeset
|
1337 prefix table (substring string beg) nil action))))))) |
94055
ec343c7600a2
(completion--embedded-envvar-table, read-file-name-internal):
Juanma Barranquero <lekktu@gmail.com>
parents:
94017
diff
changeset
|
1338 |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1339 (defun completion-file-name-table (string pred action) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1340 "Completion table for file names." |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1341 (ignore-errors |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1342 (cond |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1343 ((eq (car-safe action) 'boundaries) |
95228
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
1344 (let ((start (length (file-name-directory string))) |
101162
64a6da0f9aa2
* minibuffer.el (minibuffer-message): Fix regexp so it doesn't exclude
Juanma Barranquero <lekktu@gmail.com>
parents:
101010
diff
changeset
|
1345 (end (string-match-p "/" (cdr action)))) |
108831
c8b4b7099b45
* lisp/minibuffer.el (completion-file-name-table): Don't return a boundary
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108500
diff
changeset
|
1346 (list* 'boundaries |
c8b4b7099b45
* lisp/minibuffer.el (completion-file-name-table): Don't return a boundary
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108500
diff
changeset
|
1347 ;; if `string' is "C:" in w32, (file-name-directory string) |
c8b4b7099b45
* lisp/minibuffer.el (completion-file-name-table): Don't return a boundary
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108500
diff
changeset
|
1348 ;; returns "C:/", so `start' is 3 rather than 2. |
c8b4b7099b45
* lisp/minibuffer.el (completion-file-name-table): Don't return a boundary
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108500
diff
changeset
|
1349 ;; Not quite sure what is The Right Fix, but clipping it |
c8b4b7099b45
* lisp/minibuffer.el (completion-file-name-table): Don't return a boundary
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108500
diff
changeset
|
1350 ;; back to 2 will work for this particular case. We'll |
c8b4b7099b45
* lisp/minibuffer.el (completion-file-name-table): Don't return a boundary
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108500
diff
changeset
|
1351 ;; see if we can come up with a better fix when we bump |
c8b4b7099b45
* lisp/minibuffer.el (completion-file-name-table): Don't return a boundary
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108500
diff
changeset
|
1352 ;; into more such problematic cases. |
c8b4b7099b45
* lisp/minibuffer.el (completion-file-name-table): Don't return a boundary
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108500
diff
changeset
|
1353 (min start (length string)) end))) |
95426
92edde3e7af6
(completion-table-dynamic): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
95394
diff
changeset
|
1354 |
108831
c8b4b7099b45
* lisp/minibuffer.el (completion-file-name-table): Don't return a boundary
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108500
diff
changeset
|
1355 ((eq action 'lambda) |
c8b4b7099b45
* lisp/minibuffer.el (completion-file-name-table): Don't return a boundary
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108500
diff
changeset
|
1356 (if (zerop (length string)) |
c8b4b7099b45
* lisp/minibuffer.el (completion-file-name-table): Don't return a boundary
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108500
diff
changeset
|
1357 nil ;Not sure why it's here, but it probably doesn't harm. |
c8b4b7099b45
* lisp/minibuffer.el (completion-file-name-table): Don't return a boundary
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108500
diff
changeset
|
1358 (funcall (or pred 'file-exists-p) string))) |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1359 |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1360 (t |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1361 (let* ((name (file-name-nondirectory string)) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1362 (specdir (file-name-directory string)) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1363 (realdir (or specdir default-directory))) |
94055
ec343c7600a2
(completion--embedded-envvar-table, read-file-name-internal):
Juanma Barranquero <lekktu@gmail.com>
parents:
94017
diff
changeset
|
1364 |
93945
76ebfa5df8a2
* minibuffer.el (minibuffer--double-dollars, read-file-name-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93944
diff
changeset
|
1365 (cond |
76ebfa5df8a2
* minibuffer.el (minibuffer--double-dollars, read-file-name-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93944
diff
changeset
|
1366 ((null action) |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1367 (let ((comp (file-name-completion name realdir pred))) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1368 (if (stringp comp) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1369 (concat specdir comp) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1370 comp))) |
94055
ec343c7600a2
(completion--embedded-envvar-table, read-file-name-internal):
Juanma Barranquero <lekktu@gmail.com>
parents:
94017
diff
changeset
|
1371 |
93945
76ebfa5df8a2
* minibuffer.el (minibuffer--double-dollars, read-file-name-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93944
diff
changeset
|
1372 ((eq action t) |
100623
5a144164af93
(completion-all-completions-with-base-size): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100052
diff
changeset
|
1373 (let ((all (file-name-all-completions name realdir))) |
94062
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
1374 |
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
1375 ;; Check the predicate, if necessary. |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1376 (unless (memq pred '(nil file-exists-p)) |
93945
76ebfa5df8a2
* minibuffer.el (minibuffer--double-dollars, read-file-name-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93944
diff
changeset
|
1377 (let ((comp ()) |
76ebfa5df8a2
* minibuffer.el (minibuffer--double-dollars, read-file-name-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93944
diff
changeset
|
1378 (pred |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1379 (if (eq pred 'file-directory-p) |
93945
76ebfa5df8a2
* minibuffer.el (minibuffer--double-dollars, read-file-name-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93944
diff
changeset
|
1380 ;; Brute-force speed up for directory checking: |
76ebfa5df8a2
* minibuffer.el (minibuffer--double-dollars, read-file-name-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93944
diff
changeset
|
1381 ;; Discard strings which don't end in a slash. |
76ebfa5df8a2
* minibuffer.el (minibuffer--double-dollars, read-file-name-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93944
diff
changeset
|
1382 (lambda (s) |
76ebfa5df8a2
* minibuffer.el (minibuffer--double-dollars, read-file-name-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93944
diff
changeset
|
1383 (let ((len (length s))) |
76ebfa5df8a2
* minibuffer.el (minibuffer--double-dollars, read-file-name-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93944
diff
changeset
|
1384 (and (> len 0) (eq (aref s (1- len)) ?/)))) |
76ebfa5df8a2
* minibuffer.el (minibuffer--double-dollars, read-file-name-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93944
diff
changeset
|
1385 ;; Must do it the hard (and slow) way. |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1386 pred))) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1387 (let ((default-directory (expand-file-name realdir))) |
93945
76ebfa5df8a2
* minibuffer.el (minibuffer--double-dollars, read-file-name-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93944
diff
changeset
|
1388 (dolist (tem all) |
76ebfa5df8a2
* minibuffer.el (minibuffer--double-dollars, read-file-name-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93944
diff
changeset
|
1389 (if (funcall pred tem) (push tem comp)))) |
94062
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
1390 (setq all (nreverse comp)))) |
9fefa536be58
* minibuffer.el (completion-all-completion-with-base-size): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94055
diff
changeset
|
1391 |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1392 all)))))))) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1393 |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1394 (defvar read-file-name-predicate nil |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1395 "Current predicate used by `read-file-name-internal'.") |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1396 (make-obsolete-variable 'read-file-name-predicate |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1397 "use the regular PRED argument" "23.2") |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1398 |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1399 (defun completion--file-name-table (string pred action) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1400 "Internal subroutine for `read-file-name'. Do not call this. |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1401 This is a completion table for file names, like `completion-file-name-table' |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1402 except that it passes the file name through `substitute-in-file-name'." |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1403 (cond |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1404 ((eq (car-safe action) 'boundaries) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1405 ;; For the boundaries, we can't really delegate to |
108831
c8b4b7099b45
* lisp/minibuffer.el (completion-file-name-table): Don't return a boundary
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108500
diff
changeset
|
1406 ;; substitute-in-file-name+completion-file-name-table and then fix |
c8b4b7099b45
* lisp/minibuffer.el (completion-file-name-table): Don't return a boundary
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108500
diff
changeset
|
1407 ;; them up (as we do for the other actions), because it would |
c8b4b7099b45
* lisp/minibuffer.el (completion-file-name-table): Don't return a boundary
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108500
diff
changeset
|
1408 ;; require us to track the relationship between `str' and |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1409 ;; `string', which is difficult. And in any case, if |
108831
c8b4b7099b45
* lisp/minibuffer.el (completion-file-name-table): Don't return a boundary
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108500
diff
changeset
|
1410 ;; substitute-in-file-name turns "fo-$TO-ba" into "fo-o/b-ba", |
c8b4b7099b45
* lisp/minibuffer.el (completion-file-name-table): Don't return a boundary
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108500
diff
changeset
|
1411 ;; there's no way for us to return proper boundaries info, because |
c8b4b7099b45
* lisp/minibuffer.el (completion-file-name-table): Don't return a boundary
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108500
diff
changeset
|
1412 ;; the boundary is not (yet) in `string'. |
c8b4b7099b45
* lisp/minibuffer.el (completion-file-name-table): Don't return a boundary
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108500
diff
changeset
|
1413 ;; |
c8b4b7099b45
* lisp/minibuffer.el (completion-file-name-table): Don't return a boundary
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108500
diff
changeset
|
1414 ;; FIXME: Actually there is a way to return correct boundaries |
c8b4b7099b45
* lisp/minibuffer.el (completion-file-name-table): Don't return a boundary
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108500
diff
changeset
|
1415 ;; info, at the condition of modifying the all-completions |
c8b4b7099b45
* lisp/minibuffer.el (completion-file-name-table): Don't return a boundary
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108500
diff
changeset
|
1416 ;; return accordingly. But for now, let's not bother. |
c8b4b7099b45
* lisp/minibuffer.el (completion-file-name-table): Don't return a boundary
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108500
diff
changeset
|
1417 (completion-file-name-table string pred action)) |
93945
76ebfa5df8a2
* minibuffer.el (minibuffer--double-dollars, read-file-name-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93944
diff
changeset
|
1418 |
108831
c8b4b7099b45
* lisp/minibuffer.el (completion-file-name-table): Don't return a boundary
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108500
diff
changeset
|
1419 (t |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1420 (let* ((default-directory |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1421 (if (stringp pred) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1422 ;; It used to be that `pred' was abused to pass `dir' |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1423 ;; as an argument. |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1424 (prog1 (file-name-as-directory (expand-file-name pred)) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1425 (setq pred nil)) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1426 default-directory)) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1427 (str (condition-case nil |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1428 (substitute-in-file-name string) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1429 (error string))) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1430 (comp (completion-file-name-table |
108159
56d11bda8235
Unify complete-symbol with completion-at-point.
Chong Yidong <cyd@stupidchicken.com>
parents:
107983
diff
changeset
|
1431 str |
56d11bda8235
Unify complete-symbol with completion-at-point.
Chong Yidong <cyd@stupidchicken.com>
parents:
107983
diff
changeset
|
1432 (with-no-warnings (or pred read-file-name-predicate)) |
56d11bda8235
Unify complete-symbol with completion-at-point.
Chong Yidong <cyd@stupidchicken.com>
parents:
107983
diff
changeset
|
1433 action))) |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1434 |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1435 (cond |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1436 ((stringp comp) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1437 ;; Requote the $s before returning the completion. |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1438 (minibuffer--double-dollars comp)) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1439 ((and (null action) comp |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1440 ;; Requote the $s before checking for changes. |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1441 (setq str (minibuffer--double-dollars str)) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1442 (not (string-equal string str))) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1443 ;; If there's no real completion, but substitute-in-file-name |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1444 ;; changed the string, then return the new string. |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1445 str) |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1446 (t comp)))))) |
93945
76ebfa5df8a2
* minibuffer.el (minibuffer--double-dollars, read-file-name-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93944
diff
changeset
|
1447 |
94013
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
1448 (defalias 'read-file-name-internal |
94055
ec343c7600a2
(completion--embedded-envvar-table, read-file-name-internal):
Juanma Barranquero <lekktu@gmail.com>
parents:
94017
diff
changeset
|
1449 (completion-table-in-turn 'completion--embedded-envvar-table |
94077
28e2f73174d6
(completion-table-with-terminator): Those completions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94069
diff
changeset
|
1450 'completion--file-name-table) |
94013
bd1b8b62427b
* minibuffer.el (complete-with-action, lazy-completion-table):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93945
diff
changeset
|
1451 "Internal subroutine for `read-file-name'. Do not call this.") |
93945
76ebfa5df8a2
* minibuffer.el (minibuffer--double-dollars, read-file-name-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93944
diff
changeset
|
1452 |
94300
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1453 (defvar read-file-name-function nil |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1454 "If this is non-nil, `read-file-name' does its work by calling this function.") |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1455 |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1456 (defcustom read-file-name-completion-ignore-case |
97179
e99e1b5c726e
(read-file-name-completion-ignore-case): Add cygwin to the list.
Chong Yidong <cyd@stupidchicken.com>
parents:
97142
diff
changeset
|
1457 (if (memq system-type '(ms-dos windows-nt darwin cygwin)) |
94300
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1458 t nil) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1459 "Non-nil means when reading a file name completion ignores case." |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1460 :group 'minibuffer |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1461 :type 'boolean |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1462 :version "22.1") |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1463 |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1464 (defcustom insert-default-directory t |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1465 "Non-nil means when reading a filename start with default dir in minibuffer. |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1466 |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1467 When the initial minibuffer contents show a name of a file or a directory, |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1468 typing RETURN without editing the initial contents is equivalent to typing |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1469 the default file name. |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1470 |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1471 If this variable is non-nil, the minibuffer contents are always |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1472 initially non-empty, and typing RETURN without editing will fetch the |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1473 default name, if one is provided. Note however that this default name |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1474 is not necessarily the same as initial contents inserted in the minibuffer, |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1475 if the initial contents is just the default directory. |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1476 |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1477 If this variable is nil, the minibuffer often starts out empty. In |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1478 that case you may have to explicitly fetch the next history element to |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1479 request the default name; typing RETURN without editing will leave |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1480 the minibuffer empty. |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1481 |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1482 For some commands, exiting with an empty minibuffer has a special meaning, |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1483 such as making the current buffer visit no file in the case of |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1484 `set-visited-file-name'." |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1485 :group 'minibuffer |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1486 :type 'boolean) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1487 |
94315
755dd4bba830
(x-file-dialog): Declare as function.
Glenn Morris <rgm@gnu.org>
parents:
94304
diff
changeset
|
1488 ;; Not always defined, but only called if next-read-file-uses-dialog-p says so. |
755dd4bba830
(x-file-dialog): Declare as function.
Glenn Morris <rgm@gnu.org>
parents:
94304
diff
changeset
|
1489 (declare-function x-file-dialog "xfns.c" |
755dd4bba830
(x-file-dialog): Declare as function.
Glenn Morris <rgm@gnu.org>
parents:
94304
diff
changeset
|
1490 (prompt dir &optional default-filename mustmatch only-dir-p)) |
755dd4bba830
(x-file-dialog): Declare as function.
Glenn Morris <rgm@gnu.org>
parents:
94304
diff
changeset
|
1491 |
106239
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1492 (defun read-file-name-defaults (&optional dir initial) |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1493 (let ((default |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1494 (cond |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1495 ;; With non-nil `initial', use `dir' as the first default. |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1496 ;; Essentially, this mean reversing the normal order of the |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1497 ;; current directory name and the current file name, i.e. |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1498 ;; 1. with normal file reading: |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1499 ;; 1.1. initial input is the current directory |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1500 ;; 1.2. the first default is the current file name |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1501 ;; 2. with non-nil `initial' (e.g. for `find-alternate-file'): |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1502 ;; 2.2. initial input is the current file name |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1503 ;; 2.1. the first default is the current directory |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1504 (initial (abbreviate-file-name dir)) |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1505 ;; In file buffers, try to get the current file name |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1506 (buffer-file-name |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1507 (abbreviate-file-name buffer-file-name)))) |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1508 (file-name-at-point |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1509 (run-hook-with-args-until-success 'file-name-at-point-functions))) |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1510 (when file-name-at-point |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1511 (setq default (delete-dups |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1512 (delete "" (delq nil (list file-name-at-point default)))))) |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1513 ;; Append new defaults to the end of existing `minibuffer-default'. |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1514 (append |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1515 (if (listp minibuffer-default) minibuffer-default (list minibuffer-default)) |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1516 (if (listp default) default (list default))))) |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1517 |
94300
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1518 (defun read-file-name (prompt &optional dir default-filename mustmatch initial predicate) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1519 "Read file name, prompting with PROMPT and completing in directory DIR. |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1520 Value is not expanded---you must call `expand-file-name' yourself. |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1521 Default name to DEFAULT-FILENAME if user exits the minibuffer with |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1522 the same non-empty string that was inserted by this function. |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1523 (If DEFAULT-FILENAME is omitted, the visited file name is used, |
105930
45b3f4e55e6e
(read-file-name): Support a list of default values
Juri Linkov <juri@jurta.org>
parents:
105824
diff
changeset
|
1524 except that if INITIAL is specified, that combined with DIR is used. |
45b3f4e55e6e
(read-file-name): Support a list of default values
Juri Linkov <juri@jurta.org>
parents:
105824
diff
changeset
|
1525 If DEFAULT-FILENAME is a list of file names, the first file name is used.) |
94300
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1526 If the user exits with an empty minibuffer, this function returns |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1527 an empty string. (This can only happen if the user erased the |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1528 pre-inserted contents or if `insert-default-directory' is nil.) |
102601
68c67342e3bf
(read-file-name): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
102579
diff
changeset
|
1529 |
68c67342e3bf
(read-file-name): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
102579
diff
changeset
|
1530 Fourth arg MUSTMATCH can take the following values: |
68c67342e3bf
(read-file-name): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
102579
diff
changeset
|
1531 - nil means that the user can exit with any input. |
68c67342e3bf
(read-file-name): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
102579
diff
changeset
|
1532 - t means that the user is not allowed to exit unless |
68c67342e3bf
(read-file-name): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
102579
diff
changeset
|
1533 the input is (or completes to) an existing file. |
68c67342e3bf
(read-file-name): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
102579
diff
changeset
|
1534 - `confirm' means that the user can exit with any input, but she needs |
68c67342e3bf
(read-file-name): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
102579
diff
changeset
|
1535 to confirm her choice if the input is not an existing file. |
68c67342e3bf
(read-file-name): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
102579
diff
changeset
|
1536 - `confirm-after-completion' means that the user can exit with any |
68c67342e3bf
(read-file-name): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
102579
diff
changeset
|
1537 input, but she needs to confirm her choice if she called |
68c67342e3bf
(read-file-name): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
102579
diff
changeset
|
1538 `minibuffer-complete' right before `minibuffer-complete-and-exit' |
68c67342e3bf
(read-file-name): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
102579
diff
changeset
|
1539 and the input is not an existing file. |
68c67342e3bf
(read-file-name): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
102579
diff
changeset
|
1540 - anything else behaves like t except that typing RET does not exit if it |
68c67342e3bf
(read-file-name): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
102579
diff
changeset
|
1541 does non-null completion. |
68c67342e3bf
(read-file-name): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
102579
diff
changeset
|
1542 |
94300
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1543 Fifth arg INITIAL specifies text to start with. |
102601
68c67342e3bf
(read-file-name): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
102579
diff
changeset
|
1544 |
94300
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1545 If optional sixth arg PREDICATE is non-nil, possible completions and |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1546 the resulting file name must satisfy (funcall PREDICATE NAME). |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1547 DIR should be an absolute directory name. It defaults to the value of |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1548 `default-directory'. |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1549 |
102601
68c67342e3bf
(read-file-name): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
102579
diff
changeset
|
1550 If this command was invoked with the mouse, use a graphical file |
68c67342e3bf
(read-file-name): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents:
102579
diff
changeset
|
1551 dialog if `use-dialog-box' is non-nil, and the window system or X |
105824
06f1348e3279
* minibuffer.el (read-file-name): Don't use file dialogs for
Chong Yidong <cyd@stupidchicken.com>
parents:
105763
diff
changeset
|
1552 toolkit in use provides a file dialog box, and DIR is not a |
06f1348e3279
* minibuffer.el (read-file-name): Don't use file dialogs for
Chong Yidong <cyd@stupidchicken.com>
parents:
105763
diff
changeset
|
1553 remote file. For graphical file dialogs, any the special values |
06f1348e3279
* minibuffer.el (read-file-name): Don't use file dialogs for
Chong Yidong <cyd@stupidchicken.com>
parents:
105763
diff
changeset
|
1554 of MUSTMATCH; `confirm' and `confirm-after-completion' are |
06f1348e3279
* minibuffer.el (read-file-name): Don't use file dialogs for
Chong Yidong <cyd@stupidchicken.com>
parents:
105763
diff
changeset
|
1555 treated as equivalent to nil. |
94300
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1556 |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1557 See also `read-file-name-completion-ignore-case' |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1558 and `read-file-name-function'." |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1559 (unless dir (setq dir default-directory)) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1560 (unless (file-name-absolute-p dir) (setq dir (expand-file-name dir))) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1561 (unless default-filename |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1562 (setq default-filename (if initial (expand-file-name initial dir) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1563 buffer-file-name))) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1564 ;; If dir starts with user's homedir, change that to ~. |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1565 (setq dir (abbreviate-file-name dir)) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1566 ;; Likewise for default-filename. |
94301
9060af7294b9
(read-file-name): Don't let-bind default-directory.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94300
diff
changeset
|
1567 (if default-filename |
105930
45b3f4e55e6e
(read-file-name): Support a list of default values
Juri Linkov <juri@jurta.org>
parents:
105824
diff
changeset
|
1568 (setq default-filename |
45b3f4e55e6e
(read-file-name): Support a list of default values
Juri Linkov <juri@jurta.org>
parents:
105824
diff
changeset
|
1569 (if (consp default-filename) |
45b3f4e55e6e
(read-file-name): Support a list of default values
Juri Linkov <juri@jurta.org>
parents:
105824
diff
changeset
|
1570 (mapcar 'abbreviate-file-name default-filename) |
45b3f4e55e6e
(read-file-name): Support a list of default values
Juri Linkov <juri@jurta.org>
parents:
105824
diff
changeset
|
1571 (abbreviate-file-name default-filename)))) |
94300
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1572 (let ((insdef (cond |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1573 ((and insert-default-directory (stringp dir)) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1574 (if initial |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1575 (cons (minibuffer--double-dollars (concat dir initial)) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1576 (length (minibuffer--double-dollars dir))) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1577 (minibuffer--double-dollars dir))) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1578 (initial (cons (minibuffer--double-dollars initial) 0))))) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1579 |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1580 (if read-file-name-function |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1581 (funcall read-file-name-function |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1582 prompt dir default-filename mustmatch initial predicate) |
94301
9060af7294b9
(read-file-name): Don't let-bind default-directory.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94300
diff
changeset
|
1583 (let ((completion-ignore-case read-file-name-completion-ignore-case) |
94300
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1584 (minibuffer-completing-file-name t) |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1585 (pred (or predicate 'file-exists-p)) |
94300
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1586 (add-to-history nil)) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1587 |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1588 (let* ((val |
105824
06f1348e3279
* minibuffer.el (read-file-name): Don't use file dialogs for
Chong Yidong <cyd@stupidchicken.com>
parents:
105763
diff
changeset
|
1589 (if (or (not (next-read-file-uses-dialog-p)) |
06f1348e3279
* minibuffer.el (read-file-name): Don't use file dialogs for
Chong Yidong <cyd@stupidchicken.com>
parents:
105763
diff
changeset
|
1590 ;; Graphical file dialogs can't handle remote |
06f1348e3279
* minibuffer.el (read-file-name): Don't use file dialogs for
Chong Yidong <cyd@stupidchicken.com>
parents:
105763
diff
changeset
|
1591 ;; files (Bug#99). |
06f1348e3279
* minibuffer.el (read-file-name): Don't use file dialogs for
Chong Yidong <cyd@stupidchicken.com>
parents:
105763
diff
changeset
|
1592 (file-remote-p dir)) |
94301
9060af7294b9
(read-file-name): Don't let-bind default-directory.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94300
diff
changeset
|
1593 ;; We used to pass `dir' to `read-file-name-internal' by |
9060af7294b9
(read-file-name): Don't let-bind default-directory.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94300
diff
changeset
|
1594 ;; abusing the `predicate' argument. It's better to |
9060af7294b9
(read-file-name): Don't let-bind default-directory.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94300
diff
changeset
|
1595 ;; just use `default-directory', but in order to avoid |
9060af7294b9
(read-file-name): Don't let-bind default-directory.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94300
diff
changeset
|
1596 ;; changing `default-directory' in the current buffer, |
9060af7294b9
(read-file-name): Don't let-bind default-directory.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94300
diff
changeset
|
1597 ;; we don't let-bind it. |
9060af7294b9
(read-file-name): Don't let-bind default-directory.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94300
diff
changeset
|
1598 (lexical-let ((dir (file-name-as-directory |
9060af7294b9
(read-file-name): Don't let-bind default-directory.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94300
diff
changeset
|
1599 (expand-file-name dir)))) |
9060af7294b9
(read-file-name): Don't let-bind default-directory.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94300
diff
changeset
|
1600 (minibuffer-with-setup-hook |
106239
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1601 (lambda () |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1602 (setq default-directory dir) |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1603 ;; When the first default in `minibuffer-default' |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1604 ;; duplicates initial input `insdef', |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1605 ;; reset `minibuffer-default' to nil. |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1606 (when (equal (or (car-safe insdef) insdef) |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1607 (or (car-safe minibuffer-default) |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1608 minibuffer-default)) |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1609 (setq minibuffer-default |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1610 (cdr-safe minibuffer-default))) |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1611 ;; On the first request on `M-n' fill |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1612 ;; `minibuffer-default' with a list of defaults |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1613 ;; relevant for file-name reading. |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1614 (set (make-local-variable 'minibuffer-default-add-function) |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1615 (lambda () |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1616 (with-current-buffer |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1617 (window-buffer (minibuffer-selected-window)) |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
1618 (read-file-name-defaults dir initial))))) |
94301
9060af7294b9
(read-file-name): Don't let-bind default-directory.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94300
diff
changeset
|
1619 (completing-read prompt 'read-file-name-internal |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1620 pred mustmatch insdef |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1621 'file-name-history default-filename))) |
102455
03ed2dba14f6
(read-file-name): Only split dir name when
Jason Rumney <jasonr@gnu.org>
parents:
101999
diff
changeset
|
1622 ;; If DEFAULT-FILENAME not supplied and DIR contains |
03ed2dba14f6
(read-file-name): Only split dir name when
Jason Rumney <jasonr@gnu.org>
parents:
101999
diff
changeset
|
1623 ;; a file name, split it. |
104122
9fb3df55079f
(read-file-name): Treat confirm options to
Jason Rumney <jasonr@gnu.org>
parents:
102958
diff
changeset
|
1624 (let ((file (file-name-nondirectory dir)) |
9fb3df55079f
(read-file-name): Treat confirm options to
Jason Rumney <jasonr@gnu.org>
parents:
102958
diff
changeset
|
1625 ;; When using a dialog, revert to nil and non-nil |
9fb3df55079f
(read-file-name): Treat confirm options to
Jason Rumney <jasonr@gnu.org>
parents:
102958
diff
changeset
|
1626 ;; interpretation of mustmatch. confirm options |
9fb3df55079f
(read-file-name): Treat confirm options to
Jason Rumney <jasonr@gnu.org>
parents:
102958
diff
changeset
|
1627 ;; need to be interpreted as nil, otherwise |
9fb3df55079f
(read-file-name): Treat confirm options to
Jason Rumney <jasonr@gnu.org>
parents:
102958
diff
changeset
|
1628 ;; it is impossible to create new files using |
9fb3df55079f
(read-file-name): Treat confirm options to
Jason Rumney <jasonr@gnu.org>
parents:
102958
diff
changeset
|
1629 ;; dialogs with the default settings. |
9fb3df55079f
(read-file-name): Treat confirm options to
Jason Rumney <jasonr@gnu.org>
parents:
102958
diff
changeset
|
1630 (dialog-mustmatch |
105697
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1631 (not (memq mustmatch |
136cf2d23c90
* minibuffer.el (completion-table-with-terminator): Properly implement
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105664
diff
changeset
|
1632 '(nil confirm confirm-after-completion))))) |
102455
03ed2dba14f6
(read-file-name): Only split dir name when
Jason Rumney <jasonr@gnu.org>
parents:
101999
diff
changeset
|
1633 (when (and (not default-filename) |
03ed2dba14f6
(read-file-name): Only split dir name when
Jason Rumney <jasonr@gnu.org>
parents:
101999
diff
changeset
|
1634 (not (zerop (length file)))) |
94300
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1635 (setq default-filename file) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1636 (setq dir (file-name-directory dir))) |
105930
45b3f4e55e6e
(read-file-name): Support a list of default values
Juri Linkov <juri@jurta.org>
parents:
105824
diff
changeset
|
1637 (when default-filename |
45b3f4e55e6e
(read-file-name): Support a list of default values
Juri Linkov <juri@jurta.org>
parents:
105824
diff
changeset
|
1638 (setq default-filename |
45b3f4e55e6e
(read-file-name): Support a list of default values
Juri Linkov <juri@jurta.org>
parents:
105824
diff
changeset
|
1639 (expand-file-name (if (consp default-filename) |
45b3f4e55e6e
(read-file-name): Support a list of default values
Juri Linkov <juri@jurta.org>
parents:
105824
diff
changeset
|
1640 (car default-filename) |
45b3f4e55e6e
(read-file-name): Support a list of default values
Juri Linkov <juri@jurta.org>
parents:
105824
diff
changeset
|
1641 default-filename) |
45b3f4e55e6e
(read-file-name): Support a list of default values
Juri Linkov <juri@jurta.org>
parents:
105824
diff
changeset
|
1642 dir))) |
94300
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1643 (setq add-to-history t) |
104122
9fb3df55079f
(read-file-name): Treat confirm options to
Jason Rumney <jasonr@gnu.org>
parents:
102958
diff
changeset
|
1644 (x-file-dialog prompt dir default-filename |
9fb3df55079f
(read-file-name): Treat confirm options to
Jason Rumney <jasonr@gnu.org>
parents:
102958
diff
changeset
|
1645 dialog-mustmatch |
94300
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1646 (eq predicate 'file-directory-p))))) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1647 |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1648 (replace-in-history (eq (car-safe file-name-history) val))) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1649 ;; If completing-read returned the inserted default string itself |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1650 ;; (rather than a new string with the same contents), |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1651 ;; it has to mean that the user typed RET with the minibuffer empty. |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1652 ;; In that case, we really want to return "" |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1653 ;; so that commands such as set-visited-file-name can distinguish. |
105930
45b3f4e55e6e
(read-file-name): Support a list of default values
Juri Linkov <juri@jurta.org>
parents:
105824
diff
changeset
|
1654 (when (consp default-filename) |
45b3f4e55e6e
(read-file-name): Support a list of default values
Juri Linkov <juri@jurta.org>
parents:
105824
diff
changeset
|
1655 (setq default-filename (car default-filename))) |
94300
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1656 (when (eq val default-filename) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1657 ;; In this case, completing-read has not added an element |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1658 ;; to the history. Maybe we should. |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1659 (if (not replace-in-history) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1660 (setq add-to-history t)) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1661 (setq val "")) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1662 (unless val (error "No file name specified")) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1663 |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1664 (if (and default-filename |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1665 (string-equal val (if (consp insdef) (car insdef) insdef))) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1666 (setq val default-filename)) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1667 (setq val (substitute-in-file-name val)) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1668 |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1669 (if replace-in-history |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1670 ;; Replace what Fcompleting_read added to the history |
105664
6a6fcf3e8e4d
* minibuffer.el (read-file-name): Check for repeat before putting
Chong Yidong <cyd@stupidchicken.com>
parents:
105601
diff
changeset
|
1671 ;; with what we will actually return. As an exception, |
6a6fcf3e8e4d
* minibuffer.el (read-file-name): Check for repeat before putting
Chong Yidong <cyd@stupidchicken.com>
parents:
105601
diff
changeset
|
1672 ;; if that's the same as the second item in |
6a6fcf3e8e4d
* minibuffer.el (read-file-name): Check for repeat before putting
Chong Yidong <cyd@stupidchicken.com>
parents:
105601
diff
changeset
|
1673 ;; file-name-history, it's really a repeat (Bug#4657). |
94300
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1674 (let ((val1 (minibuffer--double-dollars val))) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1675 (if history-delete-duplicates |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1676 (setcdr file-name-history |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1677 (delete val1 (cdr file-name-history)))) |
105664
6a6fcf3e8e4d
* minibuffer.el (read-file-name): Check for repeat before putting
Chong Yidong <cyd@stupidchicken.com>
parents:
105601
diff
changeset
|
1678 (if (string= val1 (cadr file-name-history)) |
6a6fcf3e8e4d
* minibuffer.el (read-file-name): Check for repeat before putting
Chong Yidong <cyd@stupidchicken.com>
parents:
105601
diff
changeset
|
1679 (pop file-name-history) |
6a6fcf3e8e4d
* minibuffer.el (read-file-name): Check for repeat before putting
Chong Yidong <cyd@stupidchicken.com>
parents:
105601
diff
changeset
|
1680 (setcar file-name-history val1))) |
94300
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1681 (if add-to-history |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1682 ;; Add the value to the history--but not if it matches |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1683 ;; the last value already there. |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1684 (let ((val1 (minibuffer--double-dollars val))) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1685 (unless (and (consp file-name-history) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1686 (equal (car file-name-history) val1)) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1687 (setq file-name-history |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1688 (cons val1 |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1689 (if history-delete-duplicates |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1690 (delete val1 file-name-history) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1691 file-name-history))))))) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1692 val))))) |
b47239d57d36
* lisp/minibuffer.el (read-file-name-function, read-file-name-predicate)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94247
diff
changeset
|
1693 |
94247
57c8f6a6456a
(internal-complete-buffer-except): New function.
Juri Linkov <juri@jurta.org>
parents:
94242
diff
changeset
|
1694 (defun internal-complete-buffer-except (&optional buffer) |
57c8f6a6456a
(internal-complete-buffer-except): New function.
Juri Linkov <juri@jurta.org>
parents:
94242
diff
changeset
|
1695 "Perform completion on all buffers excluding BUFFER. |
101999
efada72951fb
* minibuffer.el (internal-complete-buffer-except): Doc fix. (Bug#2315)
Juanma Barranquero <lekktu@gmail.com>
parents:
101327
diff
changeset
|
1696 BUFFER nil or omitted means use the current buffer. |
94247
57c8f6a6456a
(internal-complete-buffer-except): New function.
Juri Linkov <juri@jurta.org>
parents:
94242
diff
changeset
|
1697 Like `internal-complete-buffer', but removes BUFFER from the completion list." |
57c8f6a6456a
(internal-complete-buffer-except): New function.
Juri Linkov <juri@jurta.org>
parents:
94242
diff
changeset
|
1698 (lexical-let ((except (if (stringp buffer) buffer (buffer-name buffer)))) |
57c8f6a6456a
(internal-complete-buffer-except): New function.
Juri Linkov <juri@jurta.org>
parents:
94242
diff
changeset
|
1699 (apply-partially 'completion-table-with-predicate |
57c8f6a6456a
(internal-complete-buffer-except): New function.
Juri Linkov <juri@jurta.org>
parents:
94242
diff
changeset
|
1700 'internal-complete-buffer |
57c8f6a6456a
(internal-complete-buffer-except): New function.
Juri Linkov <juri@jurta.org>
parents:
94242
diff
changeset
|
1701 (lambda (name) |
57c8f6a6456a
(internal-complete-buffer-except): New function.
Juri Linkov <juri@jurta.org>
parents:
94242
diff
changeset
|
1702 (not (equal (if (consp name) (car name) name) except))) |
57c8f6a6456a
(internal-complete-buffer-except): New function.
Juri Linkov <juri@jurta.org>
parents:
94242
diff
changeset
|
1703 nil))) |
57c8f6a6456a
(internal-complete-buffer-except): New function.
Juri Linkov <juri@jurta.org>
parents:
94242
diff
changeset
|
1704 |
95799
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1705 ;;; Old-style completion, used in Emacs-21 and Emacs-22. |
94304
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
1706 |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
1707 (defun completion-emacs21-try-completion (string table pred point) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
1708 (let ((completion (try-completion string table pred))) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
1709 (if (stringp completion) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
1710 (cons completion (length completion)) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
1711 completion))) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
1712 |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
1713 (defun completion-emacs21-all-completions (string table pred point) |
94464
66b02cd7b956
* minibuffer.el (completion-common-substring): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94427
diff
changeset
|
1714 (completion-hilit-commonality |
95799
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1715 (all-completions string table pred) |
100623
5a144164af93
(completion-all-completions-with-base-size): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100052
diff
changeset
|
1716 (length string) |
5a144164af93
(completion-all-completions-with-base-size): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100052
diff
changeset
|
1717 (car (completion-boundaries string table pred "")))) |
94304
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
1718 |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
1719 (defun completion-emacs22-try-completion (string table pred point) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
1720 (let ((suffix (substring string point)) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
1721 (completion (try-completion (substring string 0 point) table pred))) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
1722 (if (not (stringp completion)) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
1723 completion |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
1724 ;; Merge a trailing / in completion with a / after point. |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
1725 ;; We used to only do it for word completion, but it seems to make |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
1726 ;; sense for all completions. |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1727 ;; Actually, claiming this feature was part of Emacs-22 completion |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1728 ;; is pushing it a bit: it was only done in minibuffer-completion-word, |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1729 ;; which was (by default) not bound during file completion, where such |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1730 ;; slashes are most likely to occur. |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1731 (if (and (not (zerop (length completion))) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1732 (eq ?/ (aref completion (1- (length completion)))) |
94304
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
1733 (not (zerop (length suffix))) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
1734 (eq ?/ (aref suffix 0))) |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1735 ;; This leaves point after the / . |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1736 (setq suffix (substring suffix 1))) |
94304
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
1737 (cons (concat completion suffix) (length completion))))) |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
1738 |
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
1739 (defun completion-emacs22-all-completions (string table pred point) |
100623
5a144164af93
(completion-all-completions-with-base-size): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100052
diff
changeset
|
1740 (let ((beforepoint (substring string 0 point))) |
5a144164af93
(completion-all-completions-with-base-size): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100052
diff
changeset
|
1741 (completion-hilit-commonality |
5a144164af93
(completion-all-completions-with-base-size): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100052
diff
changeset
|
1742 (all-completions beforepoint table pred) |
5a144164af93
(completion-all-completions-with-base-size): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100052
diff
changeset
|
1743 point |
5a144164af93
(completion-all-completions-with-base-size): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100052
diff
changeset
|
1744 (car (completion-boundaries beforepoint table pred ""))))) |
94304
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
1745 |
95799
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1746 ;;; Basic completion. |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1747 |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1748 (defun completion--merge-suffix (completion point suffix) |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1749 "Merge end of COMPLETION with beginning of SUFFIX. |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1750 Simple generalization of the \"merge trailing /\" done in Emacs-22. |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1751 Return the new suffix." |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1752 (if (and (not (zerop (length suffix))) |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1753 (string-match "\\(.+\\)\n\\1" (concat completion "\n" suffix) |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1754 ;; Make sure we don't compress things to less |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1755 ;; than we started with. |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1756 point) |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1757 ;; Just make sure we didn't match some other \n. |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1758 (eq (match-end 1) (length completion))) |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1759 (substring suffix (- (match-end 1) (match-beginning 1))) |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1760 ;; Nothing to merge. |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1761 suffix)) |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1762 |
107461
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
1763 (defun completion-basic--pattern (beforepoint afterpoint bounds) |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
1764 (delete |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
1765 "" (list (substring beforepoint (car bounds)) |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
1766 'point |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
1767 (substring afterpoint 0 (cdr bounds))))) |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
1768 |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1769 (defun completion-basic-try-completion (string table pred point) |
95799
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1770 (let* ((beforepoint (substring string 0 point)) |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1771 (afterpoint (substring string point)) |
96294
f12e581d977f
(completion-basic-try-completion): Use the text after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95799
diff
changeset
|
1772 (bounds (completion-boundaries beforepoint table pred afterpoint))) |
f12e581d977f
(completion-basic-try-completion): Use the text after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95799
diff
changeset
|
1773 (if (zerop (cdr bounds)) |
f12e581d977f
(completion-basic-try-completion): Use the text after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95799
diff
changeset
|
1774 ;; `try-completion' may return a subtly different result |
f12e581d977f
(completion-basic-try-completion): Use the text after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95799
diff
changeset
|
1775 ;; than `all+merge', so try to use it whenever possible. |
f12e581d977f
(completion-basic-try-completion): Use the text after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95799
diff
changeset
|
1776 (let ((completion (try-completion beforepoint table pred))) |
f12e581d977f
(completion-basic-try-completion): Use the text after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95799
diff
changeset
|
1777 (if (not (stringp completion)) |
f12e581d977f
(completion-basic-try-completion): Use the text after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95799
diff
changeset
|
1778 completion |
f12e581d977f
(completion-basic-try-completion): Use the text after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95799
diff
changeset
|
1779 (cons |
f12e581d977f
(completion-basic-try-completion): Use the text after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95799
diff
changeset
|
1780 (concat completion |
f12e581d977f
(completion-basic-try-completion): Use the text after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95799
diff
changeset
|
1781 (completion--merge-suffix completion point afterpoint)) |
f12e581d977f
(completion-basic-try-completion): Use the text after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95799
diff
changeset
|
1782 (length completion)))) |
f12e581d977f
(completion-basic-try-completion): Use the text after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95799
diff
changeset
|
1783 (let* ((suffix (substring afterpoint (cdr bounds))) |
f12e581d977f
(completion-basic-try-completion): Use the text after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95799
diff
changeset
|
1784 (prefix (substring beforepoint 0 (car bounds))) |
107461
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
1785 (pattern (completion-basic--pattern |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
1786 beforepoint afterpoint bounds)) |
96294
f12e581d977f
(completion-basic-try-completion): Use the text after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95799
diff
changeset
|
1787 (all (completion-pcm--all-completions prefix pattern table pred))) |
f12e581d977f
(completion-basic-try-completion): Use the text after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95799
diff
changeset
|
1788 (if minibuffer-completing-file-name |
f12e581d977f
(completion-basic-try-completion): Use the text after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95799
diff
changeset
|
1789 (setq all (completion-pcm--filename-try-filter all))) |
f12e581d977f
(completion-basic-try-completion): Use the text after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95799
diff
changeset
|
1790 (completion-pcm--merge-try pattern all prefix suffix))))) |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1791 |
96294
f12e581d977f
(completion-basic-try-completion): Use the text after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95799
diff
changeset
|
1792 (defun completion-basic-all-completions (string table pred point) |
f12e581d977f
(completion-basic-try-completion): Use the text after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95799
diff
changeset
|
1793 (let* ((beforepoint (substring string 0 point)) |
f12e581d977f
(completion-basic-try-completion): Use the text after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95799
diff
changeset
|
1794 (afterpoint (substring string point)) |
f12e581d977f
(completion-basic-try-completion): Use the text after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95799
diff
changeset
|
1795 (bounds (completion-boundaries beforepoint table pred afterpoint)) |
f12e581d977f
(completion-basic-try-completion): Use the text after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95799
diff
changeset
|
1796 (prefix (substring beforepoint 0 (car bounds))) |
107461
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
1797 (pattern (completion-basic--pattern beforepoint afterpoint bounds)) |
96294
f12e581d977f
(completion-basic-try-completion): Use the text after
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95799
diff
changeset
|
1798 (all (completion-pcm--all-completions prefix pattern table pred))) |
100623
5a144164af93
(completion-all-completions-with-base-size): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100052
diff
changeset
|
1799 (completion-hilit-commonality all point (car bounds)))) |
94304
bc48ced5cf89
(completion-try-completion): Add `point' argument. Change return value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94301
diff
changeset
|
1800 |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1801 ;;; Partial-completion-mode style completion. |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1802 |
104344
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
1803 (defvar completion-pcm--delim-wild-regex nil |
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
1804 "Regular expression matching delimiters controlling the partial-completion. |
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
1805 Typically, this regular expression simply matches a delimiter, meaning |
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
1806 that completion can add something at (match-beginning 0), but if it has |
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
1807 a submatch 1, then completion can add something at (match-end 1). |
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
1808 This is used when the delimiter needs to be of size zero (e.g. the transition |
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
1809 from lowercase to uppercase characters).") |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1810 |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1811 (defun completion-pcm--prepare-delim-re (delims) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1812 (setq completion-pcm--delim-wild-regex (concat "[" delims "*]"))) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1813 |
106453
eaa5eba6d613
(minibuffer-complete-and-exit): Don't replace the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106452
diff
changeset
|
1814 (defcustom completion-pcm-word-delimiters "-_./: " |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1815 "A string of characters treated as word delimiters for completion. |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1816 Some arcane rules: |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1817 If `]' is in this string, it must come first. |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1818 If `^' is in this string, it must not come first. |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1819 If `-' is in this string, it must come first or right after `]'. |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1820 In other words, if S is this string, then `[S]' must be a valid Emacs regular |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1821 expression (not containing character ranges like `a-z')." |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1822 :set (lambda (symbol value) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1823 (set-default symbol value) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1824 ;; Refresh other vars. |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1825 (completion-pcm--prepare-delim-re value)) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1826 :initialize 'custom-initialize-reset |
94375
f8b940834bbb
(completion-pcm-word-delimiters): Add :group.
Juanma Barranquero <lekktu@gmail.com>
parents:
94352
diff
changeset
|
1827 :group 'minibuffer |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1828 :type 'string) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1829 |
108378
addaf0e91db3
* minibuffer.el (completion-pcm-complete-word-inserts-delimiters):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108375
diff
changeset
|
1830 (defcustom completion-pcm-complete-word-inserts-delimiters nil |
addaf0e91db3
* minibuffer.el (completion-pcm-complete-word-inserts-delimiters):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108375
diff
changeset
|
1831 "Treat the SPC or - inserted by `minibuffer-complete-word' as delimiters. |
addaf0e91db3
* minibuffer.el (completion-pcm-complete-word-inserts-delimiters):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108375
diff
changeset
|
1832 Those chars are treated as delimiters iff this variable is non-nil. |
addaf0e91db3
* minibuffer.el (completion-pcm-complete-word-inserts-delimiters):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108375
diff
changeset
|
1833 I.e. if non-nil, M-x SPC will just insert a \"-\" in the minibuffer, whereas |
addaf0e91db3
* minibuffer.el (completion-pcm-complete-word-inserts-delimiters):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108375
diff
changeset
|
1834 if nil, it will list all possible commands in *Completions* because none of |
addaf0e91db3
* minibuffer.el (completion-pcm-complete-word-inserts-delimiters):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108375
diff
changeset
|
1835 the commands start with a \"-\" or a SPC." |
addaf0e91db3
* minibuffer.el (completion-pcm-complete-word-inserts-delimiters):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108375
diff
changeset
|
1836 :type 'boolean) |
addaf0e91db3
* minibuffer.el (completion-pcm-complete-word-inserts-delimiters):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108375
diff
changeset
|
1837 |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1838 (defun completion-pcm--pattern-trivial-p (pattern) |
100929
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1839 (and (stringp (car pattern)) |
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1840 ;; It can be followed by `point' and "" and still be trivial. |
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1841 (let ((trivial t)) |
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1842 (dolist (elem (cdr pattern)) |
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1843 (unless (member elem '(point "")) |
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1844 (setq trivial nil))) |
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1845 trivial))) |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1846 |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1847 (defun completion-pcm--string->pattern (string &optional point) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1848 "Split STRING into a pattern. |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1849 A pattern is a list where each element is either a string |
108378
addaf0e91db3
* minibuffer.el (completion-pcm-complete-word-inserts-delimiters):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108375
diff
changeset
|
1850 or a symbol chosen among `any', `star', `point', `prefix'." |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1851 (if (and point (< point (length string))) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1852 (let ((prefix (substring string 0 point)) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1853 (suffix (substring string point))) |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1854 (append (completion-pcm--string->pattern prefix) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1855 '(point) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1856 (completion-pcm--string->pattern suffix))) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1857 (let ((pattern nil) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1858 (p 0) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1859 (p0 0)) |
94375
f8b940834bbb
(completion-pcm-word-delimiters): Add :group.
Juanma Barranquero <lekktu@gmail.com>
parents:
94352
diff
changeset
|
1860 |
104344
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
1861 (while (and (setq p (string-match completion-pcm--delim-wild-regex |
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
1862 string p)) |
108378
addaf0e91db3
* minibuffer.el (completion-pcm-complete-word-inserts-delimiters):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108375
diff
changeset
|
1863 (or completion-pcm-complete-word-inserts-delimiters |
addaf0e91db3
* minibuffer.el (completion-pcm-complete-word-inserts-delimiters):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108375
diff
changeset
|
1864 ;; If the char was added by minibuffer-complete-word, |
addaf0e91db3
* minibuffer.el (completion-pcm-complete-word-inserts-delimiters):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108375
diff
changeset
|
1865 ;; then don't treat it as a delimiter, otherwise |
addaf0e91db3
* minibuffer.el (completion-pcm-complete-word-inserts-delimiters):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108375
diff
changeset
|
1866 ;; "M-x SPC" ends up inserting a "-" rather than listing |
addaf0e91db3
* minibuffer.el (completion-pcm-complete-word-inserts-delimiters):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108375
diff
changeset
|
1867 ;; all completions. |
addaf0e91db3
* minibuffer.el (completion-pcm-complete-word-inserts-delimiters):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108375
diff
changeset
|
1868 (not (get-text-property p 'completion-try-word string)))) |
104344
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
1869 ;; Usually, completion-pcm--delim-wild-regex matches a delimiter, |
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
1870 ;; meaning that something can be added *before* it, but it can also |
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
1871 ;; match a prefix and postfix, in which case something can be added |
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
1872 ;; in-between (e.g. match [[:lower:]][[:upper:]]). |
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
1873 ;; This is determined by the presence of a submatch-1 which delimits |
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
1874 ;; the prefix. |
ffa2f09da5b2
(minibuffer-hide-completions): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104342
diff
changeset
|
1875 (if (match-end 1) (setq p (match-end 1))) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1876 (push (substring string p0 p) pattern) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1877 (if (eq (aref string p) ?*) |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1878 (progn |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1879 (push 'star pattern) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1880 (setq p0 (1+ p))) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1881 (push 'any pattern) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1882 (setq p0 p)) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1883 (incf p)) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1884 |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1885 ;; An empty string might be erroneously added at the beginning. |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1886 ;; It should be avoided properly, but it's so easy to remove it here. |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1887 (delete "" (nreverse (cons (substring string p0) pattern)))))) |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1888 |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1889 (defun completion-pcm--pattern->regex (pattern &optional group) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1890 (let ((re |
104719
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1891 (concat "\\`" |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1892 (mapconcat |
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1893 (lambda (x) |
108378
addaf0e91db3
* minibuffer.el (completion-pcm-complete-word-inserts-delimiters):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108375
diff
changeset
|
1894 (cond |
addaf0e91db3
* minibuffer.el (completion-pcm-complete-word-inserts-delimiters):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108375
diff
changeset
|
1895 ((stringp x) (regexp-quote x)) |
108486
7b8ec1ad0223
* minibuffer.el (completion-pcm--pattern->regex): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108378
diff
changeset
|
1896 ((if (consp group) (memq x group) group) "\\(.*?\\)") |
7b8ec1ad0223
* minibuffer.el (completion-pcm--pattern->regex): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108378
diff
changeset
|
1897 (t ".*?"))) |
104719
8f0f04f98654
(minibuffer-message): If the current buffer is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104344
diff
changeset
|
1898 pattern |
97966
52f84cb577bb
(completion-pcm--pattern->regex): Undo last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
97934
diff
changeset
|
1899 "")))) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1900 ;; Avoid pathological backtracking. |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1901 (while (string-match "\\.\\*\\?\\(?:\\\\[()]\\)*\\(\\.\\*\\?\\)" re) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1902 (setq re (replace-match "" t t re 1))) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1903 re)) |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1904 |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1905 (defun completion-pcm--all-completions (prefix pattern table pred) |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1906 "Find all completions for PATTERN in TABLE obeying PRED. |
94375
f8b940834bbb
(completion-pcm-word-delimiters): Add :group.
Juanma Barranquero <lekktu@gmail.com>
parents:
94352
diff
changeset
|
1907 PATTERN is as returned by `completion-pcm--string->pattern'." |
100623
5a144164af93
(completion-all-completions-with-base-size): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100052
diff
changeset
|
1908 ;; (assert (= (car (completion-boundaries prefix table pred "")) |
5a144164af93
(completion-all-completions-with-base-size): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100052
diff
changeset
|
1909 ;; (length prefix))) |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1910 ;; Find an initial list of possible completions. |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1911 (if (completion-pcm--pattern-trivial-p pattern) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1912 |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1913 ;; Minibuffer contains no delimiters -- simple case! |
100623
5a144164af93
(completion-all-completions-with-base-size): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100052
diff
changeset
|
1914 (all-completions (concat prefix (car pattern)) table pred) |
94375
f8b940834bbb
(completion-pcm-word-delimiters): Add :group.
Juanma Barranquero <lekktu@gmail.com>
parents:
94352
diff
changeset
|
1915 |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1916 ;; Use all-completions to do an initial cull. This is a big win, |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1917 ;; since all-completions is written in C! |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1918 (let* (;; Convert search pattern to a standard regular expression. |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1919 (regex (completion-pcm--pattern->regex pattern)) |
97966
52f84cb577bb
(completion-pcm--pattern->regex): Undo last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
97934
diff
changeset
|
1920 (case-fold-search completion-ignore-case) |
52f84cb577bb
(completion-pcm--pattern->regex): Undo last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
97934
diff
changeset
|
1921 (completion-regexp-list (cons regex completion-regexp-list)) |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1922 (compl (all-completions |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1923 (concat prefix (if (stringp (car pattern)) (car pattern) "")) |
100623
5a144164af93
(completion-all-completions-with-base-size): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100052
diff
changeset
|
1924 table pred))) |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1925 (if (not (functionp table)) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1926 ;; The internal functions already obeyed completion-regexp-list. |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1927 compl |
97966
52f84cb577bb
(completion-pcm--pattern->regex): Undo last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
97934
diff
changeset
|
1928 (let ((poss ())) |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1929 (dolist (c compl) |
101162
64a6da0f9aa2
* minibuffer.el (minibuffer-message): Fix regexp so it doesn't exclude
Juanma Barranquero <lekktu@gmail.com>
parents:
101010
diff
changeset
|
1930 (when (string-match-p regex c) (push c poss))) |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1931 poss))))) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
1932 |
94465
e2562e0fe05e
(completion-hilit-commonality): Remove leftover code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94464
diff
changeset
|
1933 (defun completion-pcm--hilit-commonality (pattern completions) |
e2562e0fe05e
(completion-hilit-commonality): Remove leftover code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94464
diff
changeset
|
1934 (when completions |
e2562e0fe05e
(completion-hilit-commonality): Remove leftover code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94464
diff
changeset
|
1935 (let* ((re (completion-pcm--pattern->regex pattern '(point))) |
100929
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1936 (case-fold-search completion-ignore-case)) |
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1937 (mapcar |
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1938 (lambda (str) |
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1939 ;; Don't modify the string itself. |
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1940 (setq str (copy-sequence str)) |
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1941 (unless (string-match re str) |
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1942 (error "Internal error: %s does not match %s" re str)) |
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1943 (let ((pos (or (match-beginning 1) (match-end 0)))) |
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1944 (put-text-property 0 pos |
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1945 'font-lock-face 'completions-common-part |
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1946 str) |
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1947 (if (> (length str) pos) |
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1948 (put-text-property pos (1+ pos) |
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1949 'font-lock-face 'completions-first-difference |
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1950 str))) |
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1951 str) |
2677429036c3
(completion-hilit-commonality): Don't presume
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
1952 completions)))) |
94465
e2562e0fe05e
(completion-hilit-commonality): Remove leftover code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94464
diff
changeset
|
1953 |
95799
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1954 (defun completion-pcm--find-all-completions (string table pred point |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1955 &optional filter) |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1956 "Find all completions for STRING at POINT in TABLE, satisfying PRED. |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1957 POINT is a position inside STRING. |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1958 FILTER is a function applied to the return value, that can be used, e.g. to |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1959 filter out additional entries (because TABLE migth not obey PRED)." |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1960 (unless filter (setq filter 'identity)) |
95228
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
1961 (let* ((beforepoint (substring string 0 point)) |
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
1962 (afterpoint (substring string point)) |
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
1963 (bounds (completion-boundaries beforepoint table pred afterpoint)) |
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
1964 (prefix (substring beforepoint 0 (car bounds))) |
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
1965 (suffix (substring afterpoint (cdr bounds))) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1966 firsterror) |
95228
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
1967 (setq string (substring string (car bounds) (+ point (cdr bounds)))) |
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
1968 (let* ((relpoint (- point (car bounds))) |
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
1969 (pattern (completion-pcm--string->pattern string relpoint)) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1970 (all (condition-case err |
95799
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1971 (funcall filter |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1972 (completion-pcm--all-completions |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1973 prefix pattern table pred)) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1974 (error (unless firsterror (setq firsterror err)) nil)))) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1975 (when (and (null all) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1976 (> (car bounds) 0) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1977 (null (ignore-errors (try-completion prefix table pred)))) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1978 ;; The prefix has no completions at all, so we should try and fix |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1979 ;; that first. |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1980 (let ((substring (substring prefix 0 -1))) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1981 (destructuring-bind (subpat suball subprefix subsuffix) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1982 (completion-pcm--find-all-completions |
95799
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
1983 substring table pred (length substring) filter) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1984 (let ((sep (aref prefix (1- (length prefix)))) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1985 ;; Text that goes between the new submatches and the |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1986 ;; completion substring. |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1987 (between nil)) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1988 ;; Eliminate submatches that don't end with the separator. |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1989 (dolist (submatch (prog1 suball (setq suball ()))) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1990 (when (eq sep (aref submatch (1- (length submatch)))) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1991 (push submatch suball))) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1992 (when suball |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1993 ;; Update the boundaries and corresponding pattern. |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1994 ;; We assume that all submatches result in the same boundaries |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
1995 ;; since we wouldn't know how to merge them otherwise anyway. |
95228
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
1996 ;; FIXME: COMPLETE REWRITE!!! |
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
1997 (let* ((newbeforepoint |
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
1998 (concat subprefix (car suball) |
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
1999 (substring string 0 relpoint))) |
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
2000 (leftbound (+ (length subprefix) (length (car suball)))) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
2001 (newbounds (completion-boundaries |
95228
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
2002 newbeforepoint table pred afterpoint))) |
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
2003 (unless (or (and (eq (cdr bounds) (cdr newbounds)) |
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
2004 (eq (car newbounds) leftbound)) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
2005 ;; Refuse new boundaries if they step over |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
2006 ;; the submatch. |
95228
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
2007 (< (car newbounds) leftbound)) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
2008 ;; The new completed prefix does change the boundaries |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
2009 ;; of the completed substring. |
95228
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
2010 (setq suffix (substring afterpoint (cdr newbounds))) |
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
2011 (setq string |
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
2012 (concat (substring newbeforepoint (car newbounds)) |
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
2013 (substring afterpoint 0 (cdr newbounds)))) |
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
2014 (setq between (substring newbeforepoint leftbound |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
2015 (car newbounds))) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
2016 (setq pattern (completion-pcm--string->pattern |
95228
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
2017 string |
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
2018 (- (length newbeforepoint) |
451f4028c096
* minibuffer.el (completion-boundaries): Change calling convention, so
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95192
diff
changeset
|
2019 (car newbounds))))) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
2020 (dolist (submatch suball) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
2021 (setq all (nconc (mapcar |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
2022 (lambda (s) (concat submatch between s)) |
95799
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2023 (funcall filter |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2024 (completion-pcm--all-completions |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2025 (concat subprefix submatch between) |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2026 pattern table pred))) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
2027 all))) |
95192
042486c3318c
(completion-pcm--find-all-completions): Don't add pseudo-completions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95172
diff
changeset
|
2028 ;; FIXME: This can come in handy for try-completion, |
042486c3318c
(completion-pcm--find-all-completions): Don't add pseudo-completions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95172
diff
changeset
|
2029 ;; but isn't right for all-completions, since it lists |
042486c3318c
(completion-pcm--find-all-completions): Don't add pseudo-completions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95172
diff
changeset
|
2030 ;; invalid completions. |
042486c3318c
(completion-pcm--find-all-completions): Don't add pseudo-completions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95172
diff
changeset
|
2031 ;; (unless all |
042486c3318c
(completion-pcm--find-all-completions): Don't add pseudo-completions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95172
diff
changeset
|
2032 ;; ;; Even though we found expansions in the prefix, none |
042486c3318c
(completion-pcm--find-all-completions): Don't add pseudo-completions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95172
diff
changeset
|
2033 ;; ;; leads to a valid completion. |
042486c3318c
(completion-pcm--find-all-completions): Don't add pseudo-completions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95172
diff
changeset
|
2034 ;; ;; Let's keep the expansions, tho. |
042486c3318c
(completion-pcm--find-all-completions): Don't add pseudo-completions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95172
diff
changeset
|
2035 ;; (dolist (submatch suball) |
042486c3318c
(completion-pcm--find-all-completions): Don't add pseudo-completions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95172
diff
changeset
|
2036 ;; (push (concat submatch between newsubstring) all))) |
042486c3318c
(completion-pcm--find-all-completions): Don't add pseudo-completions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95172
diff
changeset
|
2037 )) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
2038 (setq pattern (append subpat (list 'any (string sep)) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
2039 (if between (list between)) pattern)) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
2040 (setq prefix subprefix))))) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
2041 (if (and (null all) firsterror) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
2042 (signal (car firsterror) (cdr firsterror)) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
2043 (list pattern all prefix suffix))))) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
2044 |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2045 (defun completion-pcm-all-completions (string table pred point) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
2046 (destructuring-bind (pattern all &optional prefix suffix) |
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
2047 (completion-pcm--find-all-completions string table pred point) |
95394
119c6508d4f8
(completion-pcm-all-completions): Add the base-size.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95228
diff
changeset
|
2048 (when all |
119c6508d4f8
(completion-pcm-all-completions): Add the base-size.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95228
diff
changeset
|
2049 (nconc (completion-pcm--hilit-commonality pattern all) |
119c6508d4f8
(completion-pcm-all-completions): Add the base-size.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95228
diff
changeset
|
2050 (length prefix))))) |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2051 |
108251
275d802c8570
Extract common suffix for * in partial-completion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108179
diff
changeset
|
2052 (defun completion--sreverse (str) |
275d802c8570
Extract common suffix for * in partial-completion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108179
diff
changeset
|
2053 "Like `reverse' but for a string STR rather than a list." |
275d802c8570
Extract common suffix for * in partial-completion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108179
diff
changeset
|
2054 (apply 'string (nreverse (mapcar 'identity str)))) |
275d802c8570
Extract common suffix for * in partial-completion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108179
diff
changeset
|
2055 |
275d802c8570
Extract common suffix for * in partial-completion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108179
diff
changeset
|
2056 (defun completion--common-suffix (strs) |
275d802c8570
Extract common suffix for * in partial-completion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108179
diff
changeset
|
2057 "Return the common suffix of the strings STRS." |
275d802c8570
Extract common suffix for * in partial-completion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108179
diff
changeset
|
2058 (completion--sreverse |
275d802c8570
Extract common suffix for * in partial-completion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108179
diff
changeset
|
2059 (try-completion |
275d802c8570
Extract common suffix for * in partial-completion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108179
diff
changeset
|
2060 "" |
108296
d46fdf06e110
* files.el (auto-save-mode): Move to simple.el to fix bootstrap.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108281
diff
changeset
|
2061 (mapcar 'completion--sreverse strs)))) |
108251
275d802c8570
Extract common suffix for * in partial-completion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108179
diff
changeset
|
2062 |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2063 (defun completion-pcm--merge-completions (strs pattern) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2064 "Extract the commonality in STRS, with the help of PATTERN." |
105597
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2065 ;; When completing while ignoring case, we want to try and avoid |
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2066 ;; completing "fo" to "foO" when completing against "FOO" (bug#4219). |
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2067 ;; So we try and make sure that the string we return is all made up |
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2068 ;; of text from the completions rather than part from the |
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2069 ;; completions and part from the input. |
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2070 ;; FIXME: This reduces the problems of inconsistent capitalization |
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2071 ;; but it doesn't fully fix it: we may still end up completing |
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2072 ;; "fo-ba" to "foo-BAR" or "FOO-bar" when completing against |
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2073 ;; '("foo-barr" "FOO-BARD"). |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2074 (cond |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2075 ((null (cdr strs)) (list (car strs))) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2076 (t |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2077 (let ((re (completion-pcm--pattern->regex pattern 'group)) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2078 (ccs ())) ;Chopped completions. |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2079 |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2080 ;; First chop each string into the parts corresponding to each |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2081 ;; non-constant element of `pattern', using regexp-matching. |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2082 (let ((case-fold-search completion-ignore-case)) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2083 (dolist (str strs) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2084 (unless (string-match re str) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2085 (error "Internal error: %s doesn't match %s" str re)) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2086 (let ((chopped ()) |
105597
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2087 (last 0) |
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2088 (i 1) |
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2089 next) |
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2090 (while (setq next (match-end i)) |
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2091 (push (substring str last next) chopped) |
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2092 (setq last next) |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2093 (setq i (1+ i))) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2094 ;; Add the text corresponding to the implicit trailing `any'. |
105597
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2095 (push (substring str last) chopped) |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2096 (push (nreverse chopped) ccs)))) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2097 |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2098 ;; Then for each of those non-constant elements, extract the |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2099 ;; commonality between them. |
105597
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2100 (let ((res ()) |
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2101 (fixed "")) |
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2102 ;; Make the implicit trailing `any' explicit. |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2103 (dolist (elem (append pattern '(any))) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2104 (if (stringp elem) |
105597
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2105 (setq fixed (concat fixed elem)) |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2106 (let ((comps ())) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2107 (dolist (cc (prog1 ccs (setq ccs nil))) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2108 (push (car cc) comps) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2109 (push (cdr cc) ccs)) |
105597
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2110 ;; Might improve the likelihood to avoid choosing |
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2111 ;; different capitalizations in different parts. |
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2112 ;; In practice, it doesn't seem to make any difference. |
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2113 (setq ccs (nreverse ccs)) |
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2114 (let* ((prefix (try-completion fixed comps)) |
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2115 (unique (or (and (eq prefix t) (setq prefix fixed)) |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2116 (eq t (try-completion prefix comps))))) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2117 (unless (equal prefix "") (push prefix res)) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2118 ;; If there's only one completion, `elem' is not useful |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2119 ;; any more: it can only match the empty string. |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2120 ;; FIXME: in some cases, it may be necessary to turn an |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2121 ;; `any' into a `star' because the surrounding context has |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2122 ;; changed such that string->pattern wouldn't add an `any' |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2123 ;; here any more. |
108251
275d802c8570
Extract common suffix for * in partial-completion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108179
diff
changeset
|
2124 (unless unique |
275d802c8570
Extract common suffix for * in partial-completion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108179
diff
changeset
|
2125 (push elem res) |
108378
addaf0e91db3
* minibuffer.el (completion-pcm-complete-word-inserts-delimiters):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108375
diff
changeset
|
2126 (when (memq elem '(star point prefix)) |
108251
275d802c8570
Extract common suffix for * in partial-completion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108179
diff
changeset
|
2127 ;; Extract common suffix additionally to common prefix. |
108378
addaf0e91db3
* minibuffer.el (completion-pcm-complete-word-inserts-delimiters):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108375
diff
changeset
|
2128 ;; Only do it for `point', `star', and `prefix' since for |
108251
275d802c8570
Extract common suffix for * in partial-completion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108179
diff
changeset
|
2129 ;; `any' it could lead to a merged completion that |
275d802c8570
Extract common suffix for * in partial-completion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108179
diff
changeset
|
2130 ;; doesn't itself match the candidates. |
275d802c8570
Extract common suffix for * in partial-completion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108179
diff
changeset
|
2131 (let ((suffix (completion--common-suffix comps))) |
275d802c8570
Extract common suffix for * in partial-completion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108179
diff
changeset
|
2132 (assert (stringp suffix)) |
275d802c8570
Extract common suffix for * in partial-completion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108179
diff
changeset
|
2133 (unless (equal suffix "") |
275d802c8570
Extract common suffix for * in partial-completion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108179
diff
changeset
|
2134 (push suffix res))))) |
105597
117859152fa5
(completion-pcm--merge-completions): Make sure the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105589
diff
changeset
|
2135 (setq fixed ""))))) |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2136 ;; We return it in reverse order. |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2137 res))))) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2138 |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2139 (defun completion-pcm--pattern->string (pattern) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2140 (mapconcat (lambda (x) (cond |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2141 ((stringp x) x) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2142 ((eq x 'star) "*") |
108378
addaf0e91db3
* minibuffer.el (completion-pcm-complete-word-inserts-delimiters):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108375
diff
changeset
|
2143 (t ""))) ;any, point, prefix. |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2144 pattern |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2145 "")) |
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2146 |
95799
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2147 ;; We want to provide the functionality of `try', but we use `all' |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2148 ;; and then merge it. In most cases, this works perfectly, but |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2149 ;; if the completion table doesn't consider the same completions in |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2150 ;; `try' as in `all', then we have a problem. The most common such |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2151 ;; case is for filename completion where completion-ignored-extensions |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2152 ;; is only obeyed by the `try' code. We paper over the difference |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2153 ;; here. Note that it is not quite right either: if the completion |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2154 ;; table uses completion-table-in-turn, this filtering may take place |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2155 ;; too late to correctly fallback from the first to the |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2156 ;; second alternative. |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2157 (defun completion-pcm--filename-try-filter (all) |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2158 "Filter to adjust `all' file completion to the behavior of `try'." |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2159 (when all |
95799
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2160 (let ((try ()) |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2161 (re (concat "\\(?:\\`\\.\\.?/\\|" |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2162 (regexp-opt completion-ignored-extensions) |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2163 "\\)\\'"))) |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2164 (dolist (f all) |
101162
64a6da0f9aa2
* minibuffer.el (minibuffer-message): Fix regexp so it doesn't exclude
Juanma Barranquero <lekktu@gmail.com>
parents:
101010
diff
changeset
|
2165 (unless (string-match-p re f) (push f try))) |
95799
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2166 (or try all)))) |
101162
64a6da0f9aa2
* minibuffer.el (minibuffer-message): Fix regexp so it doesn't exclude
Juanma Barranquero <lekktu@gmail.com>
parents:
101010
diff
changeset
|
2167 |
95799
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2168 |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2169 (defun completion-pcm--merge-try (pattern all prefix suffix) |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2170 (cond |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2171 ((not (consp all)) all) |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2172 ((and (not (consp (cdr all))) ;Only one completion. |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2173 ;; Ignore completion-ignore-case here. |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2174 (equal (completion-pcm--pattern->string pattern) (car all))) |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2175 t) |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2176 (t |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2177 (let* ((mergedpat (completion-pcm--merge-completions all pattern)) |
94486
ca90422b8114
(completion--do-completion): Move point even if the completion makes no change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94465
diff
changeset
|
2178 ;; `mergedpat' is in reverse order. Place new point (by |
ca90422b8114
(completion--do-completion): Move point even if the completion makes no change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94465
diff
changeset
|
2179 ;; order of preference) either at the old point, or at |
ca90422b8114
(completion--do-completion): Move point even if the completion makes no change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94465
diff
changeset
|
2180 ;; the last place where there's something to choose, or |
ca90422b8114
(completion--do-completion): Move point even if the completion makes no change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94465
diff
changeset
|
2181 ;; at the very end. |
106413
ab53cadac0b6
(completion-pcm--merge-try): Also consider placing point after a star, if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106239
diff
changeset
|
2182 (pointpat (or (memq 'point mergedpat) |
ab53cadac0b6
(completion-pcm--merge-try): Also consider placing point after a star, if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106239
diff
changeset
|
2183 (memq 'any mergedpat) |
ab53cadac0b6
(completion-pcm--merge-try): Also consider placing point after a star, if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106239
diff
changeset
|
2184 (memq 'star mergedpat) |
108378
addaf0e91db3
* minibuffer.el (completion-pcm-complete-word-inserts-delimiters):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108375
diff
changeset
|
2185 ;; Not `prefix'. |
94487
432e68e359fa
(completion-pcm-try-completion): Typo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94486
diff
changeset
|
2186 mergedpat)) |
94486
ca90422b8114
(completion--do-completion): Move point even if the completion makes no change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94465
diff
changeset
|
2187 ;; New pos from the start. |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2188 (newpos (length (completion-pcm--pattern->string pointpat))) |
94486
ca90422b8114
(completion--do-completion): Move point even if the completion makes no change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94465
diff
changeset
|
2189 ;; Do it afterwards because it changes `pointpat' by sideeffect. |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2190 (merged (completion-pcm--pattern->string (nreverse mergedpat)))) |
95799
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2191 |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2192 (setq suffix (completion--merge-suffix merged newpos suffix)) |
95145
096cfec41046
(completion-boundaries): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94736
diff
changeset
|
2193 (cons (concat prefix merged suffix) (+ newpos (length prefix))))))) |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2194 |
95799
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2195 (defun completion-pcm-try-completion (string table pred point) |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2196 (destructuring-bind (pattern all prefix suffix) |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2197 (completion-pcm--find-all-completions |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2198 string table pred point |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2199 (if minibuffer-completing-file-name |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2200 'completion-pcm--filename-try-filter)) |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2201 (completion-pcm--merge-try pattern all prefix suffix))) |
b0653ad2932d
(completion--merge-suffix): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
95671
diff
changeset
|
2202 |
107461
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2203 ;;; Substring completion |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2204 ;; Mostly derived from the code of `basic' completion. |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2205 |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2206 (defun completion-substring--all-completions (string table pred point) |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2207 (let* ((beforepoint (substring string 0 point)) |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2208 (afterpoint (substring string point)) |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2209 (bounds (completion-boundaries beforepoint table pred afterpoint)) |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2210 (suffix (substring afterpoint (cdr bounds))) |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2211 (prefix (substring beforepoint 0 (car bounds))) |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2212 (basic-pattern (completion-basic--pattern |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2213 beforepoint afterpoint bounds)) |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2214 (pattern (if (not (stringp (car basic-pattern))) |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2215 basic-pattern |
108378
addaf0e91db3
* minibuffer.el (completion-pcm-complete-word-inserts-delimiters):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
108375
diff
changeset
|
2216 (cons 'prefix basic-pattern))) |
107461
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2217 (all (completion-pcm--all-completions prefix pattern table pred))) |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2218 (list all pattern prefix suffix (car bounds)))) |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2219 |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2220 (defun completion-substring-try-completion (string table pred point) |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2221 (destructuring-bind (all pattern prefix suffix carbounds) |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2222 (completion-substring--all-completions string table pred point) |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2223 (if minibuffer-completing-file-name |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2224 (setq all (completion-pcm--filename-try-filter all))) |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2225 (completion-pcm--merge-try pattern all prefix suffix))) |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2226 |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2227 (defun completion-substring-all-completions (string table pred point) |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2228 (destructuring-bind (all pattern prefix suffix carbounds) |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2229 (completion-substring--all-completions string table pred point) |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2230 (when all |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2231 (nconc (completion-pcm--hilit-commonality pattern all) |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2232 (length prefix))))) |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2233 |
7cf379c501e1
Add a new completion style `substring'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107250
diff
changeset
|
2234 ;; Initials completion |
104785
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2235 ;; Complete /ums to /usr/monnier/src or lch to list-command-history. |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2236 |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2237 (defun completion-initials-expand (str table pred) |
107089
d9f5c24a36cb
Make `initials' completion work for /hh -> /home/horn again (bug#5524).
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2238 (let ((bounds (completion-boundaries str table pred ""))) |
d9f5c24a36cb
Make `initials' completion work for /hh -> /home/horn again (bug#5524).
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2239 (unless (or (zerop (length str)) |
d9f5c24a36cb
Make `initials' completion work for /hh -> /home/horn again (bug#5524).
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2240 ;; Only check within the boundaries, since the |
d9f5c24a36cb
Make `initials' completion work for /hh -> /home/horn again (bug#5524).
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2241 ;; boundary char (e.g. /) might be in delim-regexp. |
d9f5c24a36cb
Make `initials' completion work for /hh -> /home/horn again (bug#5524).
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2242 (string-match completion-pcm--delim-wild-regex str |
d9f5c24a36cb
Make `initials' completion work for /hh -> /home/horn again (bug#5524).
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106815
diff
changeset
|
2243 (car bounds))) |
104785
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2244 (if (zerop (car bounds)) |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2245 (mapconcat 'string str "-") |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2246 ;; If there's a boundary, it's trickier. The main use-case |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2247 ;; we consider here is file-name completion. We'd like |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2248 ;; to expand ~/eee to ~/e/e/e and /eee to /e/e/e. |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2249 ;; But at the same time, we don't want /usr/share/ae to expand |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2250 ;; to /usr/share/a/e just because we mistyped "ae" for "ar", |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2251 ;; so we probably don't want initials to touch anything that |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2252 ;; looks like /usr/share/foo. As a heuristic, we just check that |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2253 ;; the text before the boundary char is at most 1 char. |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2254 ;; This allows both ~/eee and /eee and not much more. |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2255 ;; FIXME: It sadly also disallows the use of ~/eee when that's |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2256 ;; embedded within something else (e.g. "(~/eee" in Info node |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2257 ;; completion or "ancestor:/eee" in bzr-revision completion). |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2258 (when (< (car bounds) 3) |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2259 (let ((sep (substring str (1- (car bounds)) (car bounds)))) |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2260 ;; FIXME: the above string-match checks the whole string, whereas |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2261 ;; we end up only caring about the after-boundary part. |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2262 (concat (substring str 0 (car bounds)) |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2263 (mapconcat 'string (substring str (car bounds)) sep)))))))) |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2264 |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2265 (defun completion-initials-all-completions (string table pred point) |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2266 (let ((newstr (completion-initials-expand string table pred))) |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2267 (when newstr |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2268 (completion-pcm-all-completions newstr table pred (length newstr))))) |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2269 |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2270 (defun completion-initials-try-completion (string table pred point) |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2271 (let ((newstr (completion-initials-expand string table pred))) |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2272 (when newstr |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2273 (completion-pcm-try-completion newstr table pred (length newstr))))) |
7c703efbce29
(completion-try-completion, completion-all-completions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104719
diff
changeset
|
2274 |
106239
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
2275 |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
2276 ;; Miscellaneous |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
2277 |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
2278 (defun minibuffer-insert-file-name-at-point () |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
2279 "Get a file name at point in original buffer and insert it to minibuffer." |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
2280 (interactive) |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
2281 (let ((file-name-at-point |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
2282 (with-current-buffer (window-buffer (minibuffer-selected-window)) |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
2283 (run-hook-with-args-until-success 'file-name-at-point-functions)))) |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
2284 (when file-name-at-point |
0ac473df1bd1
Provide additional default values (file name at point or at the
Juri Linkov <juri@jurta.org>
parents:
106132
diff
changeset
|
2285 (insert file-name-at-point)))) |
94352
add0e6cf4336
(completion-table-with-context): Fix `pred' for the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94315
diff
changeset
|
2286 |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
2287 (provide 'minibuffer) |
94144 | 2288 |
2289 ;; arch-tag: ef8a0a15-1080-4790-a754-04017c02f08f | |
93885
6c6216b3b878
* lisp/minibuffer.el: New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff
changeset
|
2290 ;;; minibuffer.el ends here |