Mercurial > emacs
annotate lisp/complete.el @ 99501:e3acb52d33e1
2008-11-12 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-yank): Make any prefix force normal yanking.
Suppress folding if text would be swallowed into a folded
subtree.
(org-yank-folded-subtrees, org-yank): Docstring updates.
* org-agenda.el (org-agenda-compare-effort): Treat no effort
defined as 0.
* org-exp.el (org-export-language-setup): Add Catalan and
Esperanto language entries.
2008-11-12 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-refile): Allow refiling of entire regions.
* org-clock.el (org-clock-time%): New function.
* org.el (org-entry-get, org-entry-delete): Use safer regexps to
retrieve property values.
2008-11-12 Carsten Dominik <carsten.dominik@gmail.com>
* org-agenda.el (org-agenda-list): Handle the value `only' of
org-agenda-show-log'.
(org-agenda-log-mode): Interpret a double prefix arg.
2008-11-12 Carsten Dominik <carsten.dominik@gmail.com>
* org-exp.el (org-export-html-footnotes-section): New variable.
(org-export-as-html): Use `org-export-html-footnotes-section' to
insert the footnotes.
(org-export-language-setup): Add "Footnotes" to language words.
2008-11-12 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-yank): Fix bug when not inserting a subtree.
2008-11-12 Carsten Dominik <carsten.dominik@gmail.com>
* org-vm.el (org-vm-follow-link): Call `vm-preview-current-message'
instead of `vm-beginning-of-message'.
* org.el (org-make-link-regexps): Make sure that links to gnus can
contain brackets.
2008-11-12 Carsten Dominik <carsten.dominik@gmail.com>
* org-attach.el (org-attach-dir): Remove duplicate ID creation
code.
* org-id.el (org-id-new): Use `org-trim' to extract the uuid from
shell output.
* org.el (org-link-abbrev-alist): Improve customization type.
* org-attach.el (org-attach-expand-link, org-attach-expand): New
functions.
* org-agenda.el (org-agenda-get-progress): Renamed from
`org-get-closed'. Implement searching for state changes as well.
(org-agenda-log-mode-items): New option.
(org-agenda-log-mode): New option prefix argument, interpreted as
request to show all possible progress info.
(org-agenda-get-day-entries): Call `org-get-progress' instead of
`org-get-closed'.
(org-agenda-set-mode-name): Handle the more complex log mode
settings.
(org-get-closed): New alias, pointing to `org-get-progress'.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-file-apps-defaults-gnu)
(org-file-apps-defaults-macosx)
(org-file-apps-defaults-windowsnt): Add an entry defining the
system command.
(org-file-apps): Allow `system' as key and value.
(org-open-at-point): Explain the effect of a double prefix arg.
(org-open-file): If the argument `in-emacs' is (16),
i.e. corresponding to a double prefix argument, try to open the
file externally.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-insert-link): Abbreviate absolute files names in
links. Also, fix a bug in which the double C-u prefix would not
be honored.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-insert-heading): If buffer does not end with a
newline, add one if necessary to insert headline correctly.
* org-exp.el (org-export-as-html): Make sure that <hr/> is between
paragraphs, not inside.
* org.el (org-todo): Quote
`org-agenda-headline-snapshot-before-repeat'.
* org-exp.el (org-export-as-html): Fully process link descriptions.
(org-export-html-format-desc): New function.
(org-export-as-html): Collect footnotes into the correct basket.
(org-html-protect): No longer protect quotations marks here, this
goes wrong.
* org-agenda.el (org-agenda-remove-marked-text): Bind variable
BEG.
* org-compat.el (org-fit-window-to-buffer): New function (not
really, a preliminary and incomplete version was present earlier,
but not used).
* org.el (org-fast-todo-selection, org-fast-tag-selection): Use
`org-fit-window-to-buffer'.
* org-exp.el (org-export): Use `org-fit-window-to-buffer'.
* org-agenda.el (org-agenda-get-restriction-and-command)
(org-fit-agenda-window, org-agenda-convert-date): Use
`org-fit-window-to-buffer'.
* org-exp.el (org-export-as-html): Process href links through
`org-export-html-format-href'.
(org-export-html-format-href): New function.
* org-agenda.el (org-agenda-todo): Update only the current
headline if this is a repeated TODO, marked done for today.
(org-agenda-change-all-lines): New argument JUST-THIS, to change
only the current line.
* org.el (org-todo): Take a snapshot of the headline if the
repeater might change it.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org-publish.el (org-publish-find-title): Remove buffers visited
only for extracting the title.
* org-exp.el (org-export-html-style)
(org-export-html-style-default): Mark style definitions as
unparsed CDATA.
* org-publish.el (org-publish-validate-link): Function
re-introduced.
2008-11-12 Charles Sebold <csebold@gmail.com>
* org-plot.el (org-plot/add-options-to-plist): Supports timefmt
property.
(org-plot-quote-timestamp-field): New function.
(org-plot-quote-tsv-field): Call timestamp field function when
necessary rather than just quoting as a string.
(org-plot/gnuplot-to-data): Pass in timefmt property.
(org-plot/gnuplot-script): Supports timefmt property.
(org-plot/gnuplot): Checks for timestamp column before checking
for text index column.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-insert-heading): Improve behavior with hidden subtrees.
* org-publish.el (org-publish-org-index): Create a section in the
index file.
(org-publish-org-index): Stop linking to directories.
* org.el (org-emphasis-alist): Use span instead of <u> to
underline text.
* org-exp.el (org-export-as-html): Make sure <p> is closed before
<pre> sections.
2008-11-12 Sebastian Rose <sebastian_rose@gmx.de>
* org-jsinfo.el (org-infojs-template): Remove language attribute
from script tag.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org-agenda.el (org-agenda-remove-marked-text): New function.
(org-agenda-mark-filtered-text)
(org-agenda-unmark-filtered-text): New functions.
(org-write-agenda): Remove fltered text.
* org.el (org-make-tags-matcher): Give access to TODO "property"
without speed penalty.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-link-frame-setup): Add `org-gnus-no-new-news' as an
option.
(org-store-link-props): Make sure adding to the plist works
correctly.
* org-gnus.el (org-gnus-no-new-news): New function.
(org-gnus-follow-link): Allow the article ID to be a message-id,
in addition to allowing article numbers. Message IDs make much
more roubust links.
(org-gnus-store-link): Use message-id to create link.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-emphasize): Reverse the selection array.
(org-emphasis-alist): Set <code> tags for the verbatim
environment.
* org-remember.el (org-remember-handler): Fix bug with
prefix-related changing of the note storage target.
* org-exp.el (org-print-icalendar-entries): Make the exported
priorities compatible with RFC 2445.
* org-clock.el (org-clock-save): Insert time stamp without
dependence on time-stamp.el.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org.el ("saveplace"): If saveplace puts point into an invisible
location, make it visible.
(org-make-tags-matcher): Allow inactive time stamps in time
comparisons.
(org-yank-adjusted-subtrees): New option.
(org-yank): Incorporate adjusting trees.
(org-paste-subtree): New argument FOR-YANK which will cause
insertion at point without backing up over white lines, and leave
point at the end of the inserted text. Also if the cursor is
at the beginning of a headline, use the same level or the inserted
tree.
* org-publish.el (org-publish-get-base-files-1): Deal correctly
with broken symlinks
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org-exp.el (org-export-select-tags, org-get-current-options):
Fix typo.
author | Carsten Dominik <dominik@science.uva.nl> |
---|---|
date | Wed, 12 Nov 2008 08:01:06 +0000 |
parents | cf3a44c40410 |
children | 92d948bc8621 |
rev | line source |
---|---|
15261 | 1 ;;; complete.el --- partial completion mechanism plus other goodies |
3725 | 2 |
74439 | 3 ;; Copyright (C) 1990, 1991, 1992, 1993, 1999, 2000, 2001, 2002, 2003, |
79721 | 4 ;; 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. |
3725 | 5 |
6 ;; Author: Dave Gillespie <daveg@synaptics.com> | |
22250
a77d473867b8
*** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents:
22142
diff
changeset
|
7 ;; Keywords: abbrev convenience |
3725 | 8 ;; Special thanks to Hallvard Furuseth for his many ideas and contributions. |
9 | |
10 ;; This file is part of GNU Emacs. | |
11 | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94302
diff
changeset
|
12 ;; GNU Emacs is free software: you can redistribute it and/or modify |
6736
3e1323443b1a
Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents:
3725
diff
changeset
|
13 ;; it under the terms of the GNU General Public License as published by |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94302
diff
changeset
|
14 ;; the Free Software Foundation, either version 3 of the License, or |
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94302
diff
changeset
|
15 ;; (at your option) any later version. |
3725 | 16 |
6736
3e1323443b1a
Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents:
3725
diff
changeset
|
17 ;; GNU Emacs is distributed in the hope that it will be useful, |
3e1323443b1a
Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents:
3725
diff
changeset
|
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
3e1323443b1a
Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents:
3725
diff
changeset
|
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3e1323443b1a
Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents:
3725
diff
changeset
|
20 ;; GNU General Public License for more details. |
3725 | 21 |
6736
3e1323443b1a
Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents:
3725
diff
changeset
|
22 ;; 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:
94302
diff
changeset
|
23 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
3725 | 24 |
7942 | 25 ;;; Commentary: |
3725 | 26 |
27 ;; Extended completion for the Emacs minibuffer. | |
28 ;; | |
29 ;; The basic idea is that the command name or other completable text is | |
30 ;; divided into words and each word is completed separately, so that | |
31 ;; "M-x p-b" expands to "M-x print-buffer". If the entry is ambiguous | |
32 ;; each word is completed as much as possible and then the cursor is | |
33 ;; left at the first position where typing another letter will resolve | |
34 ;; the ambiguity. | |
35 ;; | |
36 ;; Word separators for this purpose are hyphen, space, and period. | |
37 ;; These would most likely occur in command names, Info menu items, | |
38 ;; and file names, respectively. But all word separators are treated | |
39 ;; alike at all times. | |
40 ;; | |
41 ;; This completion package replaces the old-style completer's key | |
42 ;; bindings for TAB, SPC, RET, and `?'. The old completer is still | |
43 ;; available on the Meta versions of those keys. If you set | |
44 ;; PC-meta-flag to nil, the old completion keys will be left alone | |
45 ;; and the partial completer will use the Meta versions of the keys. | |
46 | |
47 | |
22142 | 48 ;; Usage: M-x partial-completion-mode. During completable minibuffer entry, |
3725 | 49 ;; |
50 ;; TAB means to do a partial completion; | |
51 ;; SPC means to do a partial complete-word; | |
52 ;; RET means to do a partial complete-and-exit; | |
53 ;; ? means to do a partial completion-help. | |
54 ;; | |
55 ;; If you set PC-meta-flag to nil, then TAB, SPC, RET, and ? perform | |
56 ;; original Emacs completions, and M-TAB etc. do partial completion. | |
57 ;; To do this, put the command, | |
58 ;; | |
59 ;; (setq PC-meta-flag nil) | |
60 ;; | |
61 ;; in your .emacs file. To load partial completion automatically, put | |
62 ;; | |
22142 | 63 ;; (partial-completion-mode t) |
3725 | 64 ;; |
65 ;; in your .emacs file, too. Things will be faster if you byte-compile | |
66 ;; this file when you install it. | |
67 ;; | |
68 ;; As an extra feature, in cases where RET would not normally | |
69 ;; complete (such as `C-x b'), the M-RET key will always do a partial | |
70 ;; complete-and-exit. Thus `C-x b f.c RET' will select or create a | |
71 ;; buffer called "f.c", but `C-x b f.c M-RET' will select the existing | |
72 ;; buffer whose name matches that pattern (perhaps "filing.c"). | |
73 ;; (PC-meta-flag does not affect this behavior; M-RET used to be | |
74 ;; undefined in this situation.) | |
75 ;; | |
76 ;; The regular M-TAB (lisp-complete-symbol) command also supports | |
77 ;; partial completion in this package. | |
78 | |
79 ;; In addition, this package includes a feature for accessing include | |
80 ;; files. For example, `C-x C-f <sys/time.h> RET' reads the file | |
81 ;; /usr/include/sys/time.h. The variable PC-include-file-path is a | |
82 ;; list of directories in which to search for include files. Completion | |
83 ;; is supported in include file names. | |
84 | |
85 | |
7942 | 86 ;;; Code: |
3725 | 87 |
18981
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
88 (defgroup partial-completion nil |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
89 "Partial Completion of items." |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
90 :prefix "pc-" |
22250
a77d473867b8
*** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents:
22142
diff
changeset
|
91 :group 'minibuffer |
a77d473867b8
*** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents:
22142
diff
changeset
|
92 :group 'convenience) |
3725 | 93 |
18981
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
94 (defcustom PC-first-char 'find-file |
69309
f0678aafb24e
(PC-expand-many-files): Try be more careful when parsing the shell's output.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
95 "Control how the first character of a string is to be interpreted. |
18981
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
96 If nil, the first character of a string is not taken literally if it is a word |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
97 delimiter, so that \".e\" matches \"*.e*\". |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
98 If t, the first character of a string is always taken literally even if it is a |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
99 word delimiter, so that \".e\" matches \".e*\". |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
100 If non-nil and non-t, the first character is taken literally only for file name |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
101 completion." |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
102 :type '(choice (const :tag "delimiter" nil) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
103 (const :tag "literal" t) |
22570
6cfe82c80677
(PC-first-char): Use `other' widget type.
Andreas Schwab <schwab@suse.de>
parents:
22250
diff
changeset
|
104 (other :tag "find-file" find-file)) |
18981
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
105 :group 'partial-completion) |
3725 | 106 |
18981
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
107 (defcustom PC-meta-flag t |
69309
f0678aafb24e
(PC-expand-many-files): Try be more careful when parsing the shell's output.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
108 "If non-nil, TAB means PC completion and M-TAB means normal completion. |
18981
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
109 Otherwise, TAB means normal completion and M-TAB means Partial Completion." |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
110 :type 'boolean |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
111 :group 'partial-completion) |
3725 | 112 |
18981
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
113 (defcustom PC-word-delimiters "-_. " |
69309
f0678aafb24e
(PC-expand-many-files): Try be more careful when parsing the shell's output.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
114 "A string of characters treated as word delimiters for completion. |
18981
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
115 Some arcane rules: |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
116 If `]' is in this string, it must come first. |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
117 If `^' is in this string, it must not come first. |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
118 If `-' is in this string, it must come first or right after `]'. |
60920
242e5edee3ce
* complete.el, thumbs.el: Replace `legal' with `valid'.
Werner LEMBERG <wl@gnu.org>
parents:
53258
diff
changeset
|
119 In other words, if S is this string, then `[S]' must be a valid Emacs regular |
18981
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
120 expression (not containing character ranges like `a-z')." |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
121 :type 'string |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
122 :group 'partial-completion) |
3725 | 123 |
18981
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
124 (defcustom PC-include-file-path '("/usr/include" "/usr/local/include") |
69309
f0678aafb24e
(PC-expand-many-files): Try be more careful when parsing the shell's output.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
125 "A list of directories in which to look for include files. |
18981
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
126 If nil, means use the colon-separated path in the variable $INCPATH instead." |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
127 :type '(repeat directory) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
128 :group 'partial-completion) |
3725 | 129 |
18981
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
130 (defcustom PC-disable-includes nil |
69309
f0678aafb24e
(PC-expand-many-files): Try be more careful when parsing the shell's output.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
131 "If non-nil, include-file support in \\[find-file] is disabled." |
18981
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
132 :type 'boolean |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
133 :group 'partial-completion) |
3725 | 134 |
135 (defvar PC-default-bindings t | |
18981
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
136 "If non-nil, default partial completion key bindings are suppressed.") |
29674
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
137 |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
138 (defvar PC-env-vars-alist nil |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
139 "A list of the environment variable names and values.") |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
140 |
18981
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
141 |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
142 (defun PC-bindings (bind) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
143 (let ((completion-map minibuffer-local-completion-map) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
144 (must-match-map minibuffer-local-must-match-map)) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
145 (cond ((not bind) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
146 ;; These bindings are the default bindings. It would be better to |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
147 ;; restore the previous bindings. |
76389
dea4a6c39682
(PC-bindings): Rebind M-TAB in read-expression-map.
Chong Yidong <cyd@stupidchicken.com>
parents:
76378
diff
changeset
|
148 (define-key read-expression-map "\e\t" 'lisp-complete-symbol) |
dea4a6c39682
(PC-bindings): Rebind M-TAB in read-expression-map.
Chong Yidong <cyd@stupidchicken.com>
parents:
76378
diff
changeset
|
149 |
18981
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
150 (define-key completion-map "\t" 'minibuffer-complete) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
151 (define-key completion-map " " 'minibuffer-complete-word) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
152 (define-key completion-map "?" 'minibuffer-completion-help) |
3725 | 153 |
18981
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
154 (define-key must-match-map "\r" 'minibuffer-complete-and-exit) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
155 (define-key must-match-map "\n" 'minibuffer-complete-and-exit) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
156 |
76378
7722d7feb5cc
(PC-bindings): Remap lisp-complete-symbol to
Kim F. Storm <storm@cua.dk>
parents:
76375
diff
changeset
|
157 (define-key global-map [remap lisp-complete-symbol] nil)) |
18981
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
158 (PC-default-bindings |
76389
dea4a6c39682
(PC-bindings): Rebind M-TAB in read-expression-map.
Chong Yidong <cyd@stupidchicken.com>
parents:
76378
diff
changeset
|
159 (define-key read-expression-map "\e\t" 'PC-lisp-complete-symbol) |
dea4a6c39682
(PC-bindings): Rebind M-TAB in read-expression-map.
Chong Yidong <cyd@stupidchicken.com>
parents:
76378
diff
changeset
|
160 |
18981
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
161 (define-key completion-map "\t" 'PC-complete) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
162 (define-key completion-map " " 'PC-complete-word) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
163 (define-key completion-map "?" 'PC-completion-help) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
164 |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
165 (define-key completion-map "\e\t" 'PC-complete) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
166 (define-key completion-map "\e " 'PC-complete-word) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
167 (define-key completion-map "\e\r" 'PC-force-complete-and-exit) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
168 (define-key completion-map "\e\n" 'PC-force-complete-and-exit) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
169 (define-key completion-map "\e?" 'PC-completion-help) |
3725 | 170 |
18981
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
171 (define-key must-match-map "\r" 'PC-complete-and-exit) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
172 (define-key must-match-map "\n" 'PC-complete-and-exit) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
173 |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
174 (define-key must-match-map "\e\r" 'PC-complete-and-exit) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
175 (define-key must-match-map "\e\n" 'PC-complete-and-exit) |
3725 | 176 |
76378
7722d7feb5cc
(PC-bindings): Remap lisp-complete-symbol to
Kim F. Storm <storm@cua.dk>
parents:
76375
diff
changeset
|
177 (define-key global-map [remap lisp-complete-symbol] 'PC-lisp-complete-symbol))))) |
3725 | 178 |
76774
a98404fc2d91
(PC-do-completion-end): New variable.
Glenn Morris <rgm@gnu.org>
parents:
76756
diff
changeset
|
179 (defvar PC-do-completion-end nil |
a98404fc2d91
(PC-do-completion-end): New variable.
Glenn Morris <rgm@gnu.org>
parents:
76756
diff
changeset
|
180 "Internal variable used by `PC-do-completion'.") |
a98404fc2d91
(PC-do-completion-end): New variable.
Glenn Morris <rgm@gnu.org>
parents:
76756
diff
changeset
|
181 |
77211
43c40e825164
(PC-goto-end, PC-do-completion-end): Make buffer-local.
Glenn Morris <rgm@gnu.org>
parents:
77208
diff
changeset
|
182 (make-variable-buffer-local 'PC-do-completion-end) |
43c40e825164
(PC-goto-end, PC-do-completion-end): Make buffer-local.
Glenn Morris <rgm@gnu.org>
parents:
77208
diff
changeset
|
183 |
77208 | 184 (defvar PC-goto-end nil |
185 "Internal variable set in `PC-do-completion', used in | |
186 `choose-completion-string-functions'.") | |
187 | |
77211
43c40e825164
(PC-goto-end, PC-do-completion-end): Make buffer-local.
Glenn Morris <rgm@gnu.org>
parents:
77208
diff
changeset
|
188 (make-variable-buffer-local 'PC-goto-end) |
43c40e825164
(PC-goto-end, PC-do-completion-end): Make buffer-local.
Glenn Morris <rgm@gnu.org>
parents:
77208
diff
changeset
|
189 |
31971
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
190 ;;;###autoload |
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
191 (define-minor-mode partial-completion-mode |
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
192 "Toggle Partial Completion mode. |
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
193 With prefix ARG, turn Partial Completion mode on if ARG is positive. |
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
194 |
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
195 When Partial Completion mode is enabled, TAB (or M-TAB if `PC-meta-flag' is |
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
196 nil) is enhanced so that if some string is divided into words and each word is |
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
197 delimited by a character in `PC-word-delimiters', partial words are completed |
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
198 as much as possible and `*' characters are treated likewise in file names. |
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
199 |
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
200 For example, M-x p-c-m expands to M-x partial-completion-mode since no other |
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
201 command begins with that sequence of characters, and |
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
202 \\[find-file] f_b.c TAB might complete to foo_bar.c if that file existed and no |
71436
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
203 other file in that directory begins with that sequence of characters. |
31971
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
204 |
36033
0a150990aa8c
(partial-completion-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
33183
diff
changeset
|
205 Unless `PC-disable-includes' is non-nil, the `<...>' sequence is interpreted |
31971
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
206 specially in \\[find-file]. For example, |
36033
0a150990aa8c
(partial-completion-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
33183
diff
changeset
|
207 \\[find-file] <sys/time.h> RET finds the file `/usr/include/sys/time.h'. |
67008
13e3867c55fb
(partial-completion-mode): Mention completion-auto-help in the doc string.
Eli Zaretskii <eliz@gnu.org>
parents:
64762
diff
changeset
|
208 See also the variable `PC-include-file-path'. |
13e3867c55fb
(partial-completion-mode): Mention completion-auto-help in the doc string.
Eli Zaretskii <eliz@gnu.org>
parents:
64762
diff
changeset
|
209 |
13e3867c55fb
(partial-completion-mode): Mention completion-auto-help in the doc string.
Eli Zaretskii <eliz@gnu.org>
parents:
64762
diff
changeset
|
210 Partial Completion mode extends the meaning of `completion-auto-help' (which |
67596
b5e49d33eeef
(partial-completion-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
67161
diff
changeset
|
211 see), so that if it is neither nil nor t, Emacs shows the `*Completions*' |
b5e49d33eeef
(partial-completion-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
67161
diff
changeset
|
212 buffer only on the second attempt to complete. That is, if TAB finds nothing |
b5e49d33eeef
(partial-completion-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
67161
diff
changeset
|
213 to complete, the first TAB just says \"Next char not unique\" and the |
67622
bd00b5fc4e4d
(PC-do-completion): Remove `(equal (point) beg)' to
Juri Linkov <juri@jurta.org>
parents:
67596
diff
changeset
|
214 second TAB brings up the `*Completions*' buffer." |
33183
1988cb3ecd2f
(partial-completion-mode): Drop unneeded positional args.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
31971
diff
changeset
|
215 :global t :group 'partial-completion |
31971
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
216 ;; Deal with key bindings... |
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
217 (PC-bindings partial-completion-mode) |
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
218 ;; Deal with include file feature... |
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
219 (cond ((not partial-completion-mode) |
67161
759b69f39057
(PC-completion-as-file-name-predicate): Use minibuffer-completing-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67008
diff
changeset
|
220 (remove-hook 'find-file-not-found-functions 'PC-look-for-include-file)) |
31971
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
221 ((not PC-disable-includes) |
67161
759b69f39057
(PC-completion-as-file-name-predicate): Use minibuffer-completing-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67008
diff
changeset
|
222 (add-hook 'find-file-not-found-functions 'PC-look-for-include-file))) |
70076
10e0b8ee9993
(partial-completion-mode): Use 'choose-completion-string-functions to make
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69309
diff
changeset
|
223 ;; Adjust the completion selection in *Completion* buffers to the way |
10e0b8ee9993
(partial-completion-mode): Use 'choose-completion-string-functions to make
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69309
diff
changeset
|
224 ;; we work. The default minibuffer completion code only completes the |
10e0b8ee9993
(partial-completion-mode): Use 'choose-completion-string-functions to make
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69309
diff
changeset
|
225 ;; text before point and leaves the text after point alone (new in |
10e0b8ee9993
(partial-completion-mode): Use 'choose-completion-string-functions to make
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69309
diff
changeset
|
226 ;; Emacs-22). In contrast we use the whole text and we even sometimes |
10e0b8ee9993
(partial-completion-mode): Use 'choose-completion-string-functions to make
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69309
diff
changeset
|
227 ;; move point to a place before EOB, to indicate the first position where |
10e0b8ee9993
(partial-completion-mode): Use 'choose-completion-string-functions to make
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69309
diff
changeset
|
228 ;; there's a difference, so when the user uses choose-completion, we have |
10e0b8ee9993
(partial-completion-mode): Use 'choose-completion-string-functions to make
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69309
diff
changeset
|
229 ;; to trick choose-completion into replacing the whole minibuffer text |
10e0b8ee9993
(partial-completion-mode): Use 'choose-completion-string-functions to make
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69309
diff
changeset
|
230 ;; rather than only the text before point. --Stef |
10e0b8ee9993
(partial-completion-mode): Use 'choose-completion-string-functions to make
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69309
diff
changeset
|
231 (funcall |
10e0b8ee9993
(partial-completion-mode): Use 'choose-completion-string-functions to make
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69309
diff
changeset
|
232 (if partial-completion-mode 'add-hook 'remove-hook) |
10e0b8ee9993
(partial-completion-mode): Use 'choose-completion-string-functions to make
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69309
diff
changeset
|
233 'choose-completion-string-functions |
71517
983727db2901
(partial-completion-mode): In lambda for
Juri Linkov <juri@jurta.org>
parents:
71436
diff
changeset
|
234 (lambda (choice buffer mini-p base-size) |
77208 | 235 ;; When completing M-: (lisp- ) with point before the ), it is |
236 ;; not appropriate to go to point-max (unlike the filename case). | |
237 (if (and (not PC-goto-end) | |
238 mini-p) | |
239 (goto-char (point-max)) | |
76774
a98404fc2d91
(PC-do-completion-end): New variable.
Glenn Morris <rgm@gnu.org>
parents:
76756
diff
changeset
|
240 ;; Need a similar hack for the non-minibuffer-case -- gm. |
76787
960eefe0c8c4
(partial-completion-mode): Set PC-do-completion-end to nil after use.
Glenn Morris <rgm@gnu.org>
parents:
76774
diff
changeset
|
241 (when PC-do-completion-end |
960eefe0c8c4
(partial-completion-mode): Set PC-do-completion-end to nil after use.
Glenn Morris <rgm@gnu.org>
parents:
76774
diff
changeset
|
242 (goto-char PC-do-completion-end) |
960eefe0c8c4
(partial-completion-mode): Set PC-do-completion-end to nil after use.
Glenn Morris <rgm@gnu.org>
parents:
76774
diff
changeset
|
243 (setq PC-do-completion-end nil))) |
77208 | 244 (setq PC-goto-end nil) |
71517
983727db2901
(partial-completion-mode): In lambda for
Juri Linkov <juri@jurta.org>
parents:
71436
diff
changeset
|
245 nil)) |
70076
10e0b8ee9993
(partial-completion-mode): Use 'choose-completion-string-functions to make
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69309
diff
changeset
|
246 ;; Build the env-completion and mapping table. |
10e0b8ee9993
(partial-completion-mode): Use 'choose-completion-string-functions to make
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69309
diff
changeset
|
247 (when (and partial-completion-mode (null PC-env-vars-alist)) |
10e0b8ee9993
(partial-completion-mode): Use 'choose-completion-string-functions to make
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69309
diff
changeset
|
248 (setq PC-env-vars-alist |
10e0b8ee9993
(partial-completion-mode): Use 'choose-completion-string-functions to make
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69309
diff
changeset
|
249 (mapcar (lambda (string) |
10e0b8ee9993
(partial-completion-mode): Use 'choose-completion-string-functions to make
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69309
diff
changeset
|
250 (let ((d (string-match "=" string))) |
10e0b8ee9993
(partial-completion-mode): Use 'choose-completion-string-functions to make
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69309
diff
changeset
|
251 (cons (concat "$" (substring string 0 d)) |
10e0b8ee9993
(partial-completion-mode): Use 'choose-completion-string-functions to make
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69309
diff
changeset
|
252 (and d (substring string (1+ d)))))) |
10e0b8ee9993
(partial-completion-mode): Use 'choose-completion-string-functions to make
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69309
diff
changeset
|
253 process-environment)))) |
31971
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
254 |
18981
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
255 |
3725 | 256 (defun PC-complete () |
257 "Like minibuffer-complete, but allows \"b--di\"-style abbreviations. | |
258 For example, \"M-x b--di\" would match `byte-recompile-directory', or any | |
259 name which consists of three or more words, the first beginning with \"b\" | |
260 and the third beginning with \"di\". | |
261 | |
262 The pattern \"b--d\" is ambiguous for `byte-recompile-directory' and | |
263 `beginning-of-defun', so this would produce a list of completions | |
264 just like when normal Emacs completions are ambiguous. | |
265 | |
266 Word-delimiters for the purposes of Partial Completion are \"-\", \"_\", | |
267 \".\", and SPC." | |
268 (interactive) | |
269 (if (PC-was-meta-key) | |
270 (minibuffer-complete) | |
15802
1595df9ed1e8
(PC-complete): When command is repeated,
Richard M. Stallman <rms@gnu.org>
parents:
15261
diff
changeset
|
271 ;; If the previous command was not this one, |
1595df9ed1e8
(PC-complete): When command is repeated,
Richard M. Stallman <rms@gnu.org>
parents:
15261
diff
changeset
|
272 ;; never scroll, always retry completion. |
1595df9ed1e8
(PC-complete): When command is repeated,
Richard M. Stallman <rms@gnu.org>
parents:
15261
diff
changeset
|
273 (or (eq last-command this-command) |
1595df9ed1e8
(PC-complete): When command is repeated,
Richard M. Stallman <rms@gnu.org>
parents:
15261
diff
changeset
|
274 (setq minibuffer-scroll-window nil)) |
1595df9ed1e8
(PC-complete): When command is repeated,
Richard M. Stallman <rms@gnu.org>
parents:
15261
diff
changeset
|
275 (let ((window minibuffer-scroll-window)) |
1595df9ed1e8
(PC-complete): When command is repeated,
Richard M. Stallman <rms@gnu.org>
parents:
15261
diff
changeset
|
276 ;; If there's a fresh completion window with a live buffer, |
1595df9ed1e8
(PC-complete): When command is repeated,
Richard M. Stallman <rms@gnu.org>
parents:
15261
diff
changeset
|
277 ;; and this command is repeated, scroll that window. |
1595df9ed1e8
(PC-complete): When command is repeated,
Richard M. Stallman <rms@gnu.org>
parents:
15261
diff
changeset
|
278 (if (and window (window-buffer window) |
1595df9ed1e8
(PC-complete): When command is repeated,
Richard M. Stallman <rms@gnu.org>
parents:
15261
diff
changeset
|
279 (buffer-name (window-buffer window))) |
67161
759b69f39057
(PC-completion-as-file-name-predicate): Use minibuffer-completing-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67008
diff
changeset
|
280 (with-current-buffer (window-buffer window) |
15802
1595df9ed1e8
(PC-complete): When command is repeated,
Richard M. Stallman <rms@gnu.org>
parents:
15261
diff
changeset
|
281 (if (pos-visible-in-window-p (point-max) window) |
1595df9ed1e8
(PC-complete): When command is repeated,
Richard M. Stallman <rms@gnu.org>
parents:
15261
diff
changeset
|
282 (set-window-start window (point-min) nil) |
1595df9ed1e8
(PC-complete): When command is repeated,
Richard M. Stallman <rms@gnu.org>
parents:
15261
diff
changeset
|
283 (scroll-other-window))) |
1595df9ed1e8
(PC-complete): When command is repeated,
Richard M. Stallman <rms@gnu.org>
parents:
15261
diff
changeset
|
284 (PC-do-completion nil))))) |
3725 | 285 |
286 | |
287 (defun PC-complete-word () | |
288 "Like `minibuffer-complete-word', but allows \"b--di\"-style abbreviations. | |
289 See `PC-complete' for details. | |
290 This can be bound to other keys, like `-' and `.', if you wish." | |
291 (interactive) | |
292 (if (eq (PC-was-meta-key) PC-meta-flag) | |
293 (if (eq last-command-char ? ) | |
294 (minibuffer-complete-word) | |
295 (self-insert-command 1)) | |
296 (self-insert-command 1) | |
297 (if (eobp) | |
298 (PC-do-completion 'word)))) | |
299 | |
300 | |
301 (defun PC-complete-space () | |
302 "Like `minibuffer-complete-word', but allows \"b--di\"-style abbreviations. | |
303 See `PC-complete' for details. | |
304 This is suitable for binding to other keys which should act just like SPC." | |
305 (interactive) | |
306 (if (eq (PC-was-meta-key) PC-meta-flag) | |
307 (minibuffer-complete-word) | |
308 (insert " ") | |
309 (if (eobp) | |
310 (PC-do-completion 'word)))) | |
311 | |
312 | |
313 (defun PC-complete-and-exit () | |
314 "Like `minibuffer-complete-and-exit', but allows \"b--di\"-style abbreviations. | |
315 See `PC-complete' for details." | |
316 (interactive) | |
317 (if (eq (PC-was-meta-key) PC-meta-flag) | |
318 (minibuffer-complete-and-exit) | |
319 (PC-do-complete-and-exit))) | |
320 | |
321 (defun PC-force-complete-and-exit () | |
322 "Like `minibuffer-complete-and-exit', but allows \"b--di\"-style abbreviations. | |
323 See `PC-complete' for details." | |
324 (interactive) | |
325 (let ((minibuffer-completion-confirm nil)) | |
326 (PC-do-complete-and-exit))) | |
327 | |
328 (defun PC-do-complete-and-exit () | |
81708
d71be1e37321
(PC-do-complete-and-exit): Add support for the new
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81678
diff
changeset
|
329 (cond |
d71be1e37321
(PC-do-complete-and-exit): Add support for the new
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81678
diff
changeset
|
330 ((= (point-max) (minibuffer-prompt-end)) |
d71be1e37321
(PC-do-complete-and-exit): Add support for the new
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81678
diff
changeset
|
331 ;; Duplicate the "bug" that Info-menu relies on... |
d71be1e37321
(PC-do-complete-and-exit): Add support for the new
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81678
diff
changeset
|
332 (exit-minibuffer)) |
d71be1e37321
(PC-do-complete-and-exit): Add support for the new
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81678
diff
changeset
|
333 ((eq minibuffer-completion-confirm 'confirm-only) |
d71be1e37321
(PC-do-complete-and-exit): Add support for the new
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81678
diff
changeset
|
334 (if (or (eq last-command this-command) |
d71be1e37321
(PC-do-complete-and-exit): Add support for the new
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81678
diff
changeset
|
335 (test-completion (field-string) |
d71be1e37321
(PC-do-complete-and-exit): Add support for the new
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81678
diff
changeset
|
336 minibuffer-completion-table |
d71be1e37321
(PC-do-complete-and-exit): Add support for the new
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81678
diff
changeset
|
337 minibuffer-completion-predicate)) |
d71be1e37321
(PC-do-complete-and-exit): Add support for the new
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81678
diff
changeset
|
338 (exit-minibuffer) |
d71be1e37321
(PC-do-complete-and-exit): Add support for the new
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81678
diff
changeset
|
339 (PC-temp-minibuffer-message " [Confirm]"))) |
d71be1e37321
(PC-do-complete-and-exit): Add support for the new
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81678
diff
changeset
|
340 (t |
3725 | 341 (let ((flag (PC-do-completion 'exit))) |
342 (and flag | |
343 (if (or (eq flag 'complete) | |
344 (not minibuffer-completion-confirm)) | |
345 (exit-minibuffer) | |
81708
d71be1e37321
(PC-do-complete-and-exit): Add support for the new
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
81678
diff
changeset
|
346 (PC-temp-minibuffer-message " [Confirm]"))))))) |
3725 | 347 |
348 | |
349 (defun PC-completion-help () | |
350 "Like `minibuffer-completion-help', but allows \"b--di\"-style abbreviations. | |
351 See `PC-complete' for details." | |
352 (interactive) | |
353 (if (eq (PC-was-meta-key) PC-meta-flag) | |
354 (minibuffer-completion-help) | |
355 (PC-do-completion 'help))) | |
356 | |
357 (defun PC-was-meta-key () | |
358 (or (/= (length (this-command-keys)) 1) | |
359 (let ((key (aref (this-command-keys) 0))) | |
360 (if (integerp key) | |
361 (>= key 128) | |
362 (not (null (memq 'meta (event-modifiers key)))))))) | |
363 | |
364 | |
365 (defvar PC-ignored-extensions 'empty-cache) | |
366 (defvar PC-delims 'empty-cache) | |
367 (defvar PC-ignored-regexp nil) | |
368 (defvar PC-word-failed-flag nil) | |
369 (defvar PC-delim-regex nil) | |
370 (defvar PC-ndelims-regex nil) | |
371 (defvar PC-delims-list nil) | |
372 | |
14765
844686eabff0
(PC-completion-as-file-name-predicate):
Richard M. Stallman <rms@gnu.org>
parents:
14759
diff
changeset
|
373 (defvar PC-completion-as-file-name-predicate |
67161
759b69f39057
(PC-completion-as-file-name-predicate): Use minibuffer-completing-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67008
diff
changeset
|
374 (lambda () minibuffer-completing-file-name) |
759b69f39057
(PC-completion-as-file-name-predicate): Use minibuffer-completing-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67008
diff
changeset
|
375 "A function testing whether a minibuffer completion now will work filename-style. |
14765
844686eabff0
(PC-completion-as-file-name-predicate):
Richard M. Stallman <rms@gnu.org>
parents:
14759
diff
changeset
|
376 The function takes no arguments, and typically looks at the value |
844686eabff0
(PC-completion-as-file-name-predicate):
Richard M. Stallman <rms@gnu.org>
parents:
14759
diff
changeset
|
377 of `minibuffer-completion-table' and the minibuffer contents.") |
14759
f93ed65c0584
(PC-do-completion-filename-completers): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
378 |
71436
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
379 ;; Returns the sequence of non-delimiter characters that follow regexp in string. |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
380 (defun PC-chunk-after (string regexp) |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
381 (if (not (string-match regexp string)) |
87096
a99a2e8bc21e
Fix possibly buggy calls to `message'.
Deepak Goel <deego@gnufans.org>
parents:
85543
diff
changeset
|
382 (let ((message "String %s didn't match regexp %s")) |
a99a2e8bc21e
Fix possibly buggy calls to `message'.
Deepak Goel <deego@gnufans.org>
parents:
85543
diff
changeset
|
383 (message message string regexp) |
a99a2e8bc21e
Fix possibly buggy calls to `message'.
Deepak Goel <deego@gnufans.org>
parents:
85543
diff
changeset
|
384 (error message string regexp))) |
71436
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
385 (let ((result (substring string (match-end 0)))) |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
386 ;; result may contain multiple chunks |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
387 (if (string-match PC-delim-regex result) |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
388 (setq result (substring result 0 (match-beginning 0)))) |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
389 result)) |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
390 |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
391 (defun test-completion-ignore-case (str table pred) |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
392 "Like `test-completion', but ignores case when possible." |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
393 ;; Binding completion-ignore-case to nil ensures, for compatibility with |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
394 ;; standard completion, that the return value is exactly one of the |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
395 ;; possibilities. Do this binding only if pred is nil, out of paranoia; |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
396 ;; perhaps it is safe even if pred is non-nil. |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
397 (if pred |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
398 (test-completion str table pred) |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
399 (let ((completion-ignore-case nil)) |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
400 (test-completion str table pred)))) |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
401 |
76404
51826bf423f3
(PC-try-completion): New function.
Martin Rudalics <rudalics@gmx.at>
parents:
76389
diff
changeset
|
402 ;; The following function is an attempt to work around two problems: |
51826bf423f3
(PC-try-completion): New function.
Martin Rudalics <rudalics@gmx.at>
parents:
76389
diff
changeset
|
403 |
51826bf423f3
(PC-try-completion): New function.
Martin Rudalics <rudalics@gmx.at>
parents:
76389
diff
changeset
|
404 ;; (1) When complete.el was written, (try-completion "" '(("") (""))) used to |
51826bf423f3
(PC-try-completion): New function.
Martin Rudalics <rudalics@gmx.at>
parents:
76389
diff
changeset
|
405 ;; return the value "". With a change from 2002-07-07 it returns t which caused |
51826bf423f3
(PC-try-completion): New function.
Martin Rudalics <rudalics@gmx.at>
parents:
76389
diff
changeset
|
406 ;; `PC-lisp-complete-symbol' to fail with a "Wrong type argument: sequencep, t" |
51826bf423f3
(PC-try-completion): New function.
Martin Rudalics <rudalics@gmx.at>
parents:
76389
diff
changeset
|
407 ;; error. `PC-try-completion' returns STRING in this case. |
51826bf423f3
(PC-try-completion): New function.
Martin Rudalics <rudalics@gmx.at>
parents:
76389
diff
changeset
|
408 |
51826bf423f3
(PC-try-completion): New function.
Martin Rudalics <rudalics@gmx.at>
parents:
76389
diff
changeset
|
409 ;; (2) (try-completion "" '((""))) returned t before the above-mentioned change. |
51826bf423f3
(PC-try-completion): New function.
Martin Rudalics <rudalics@gmx.at>
parents:
76389
diff
changeset
|
410 ;; Since `PC-chop-word' operates on the return value of `try-completion' this |
51826bf423f3
(PC-try-completion): New function.
Martin Rudalics <rudalics@gmx.at>
parents:
76389
diff
changeset
|
411 ;; case might have provoked a similar error as in (1). `PC-try-completion' |
51826bf423f3
(PC-try-completion): New function.
Martin Rudalics <rudalics@gmx.at>
parents:
76389
diff
changeset
|
412 ;; returns "" instead. I don't know whether this is a real problem though. |
51826bf423f3
(PC-try-completion): New function.
Martin Rudalics <rudalics@gmx.at>
parents:
76389
diff
changeset
|
413 |
51826bf423f3
(PC-try-completion): New function.
Martin Rudalics <rudalics@gmx.at>
parents:
76389
diff
changeset
|
414 ;; Since `PC-try-completion' is not a guaranteed to fix these bugs reliably, you |
51826bf423f3
(PC-try-completion): New function.
Martin Rudalics <rudalics@gmx.at>
parents:
76389
diff
changeset
|
415 ;; should try to look at the following discussions when you encounter problems: |
51826bf423f3
(PC-try-completion): New function.
Martin Rudalics <rudalics@gmx.at>
parents:
76389
diff
changeset
|
416 ;; - emacs-pretest-bug ("Partial Completion" starting 2007-02-23), |
51826bf423f3
(PC-try-completion): New function.
Martin Rudalics <rudalics@gmx.at>
parents:
76389
diff
changeset
|
417 ;; - emacs-devel ("[address-of-OP: Partial completion]" starting 2007-02-24), |
51826bf423f3
(PC-try-completion): New function.
Martin Rudalics <rudalics@gmx.at>
parents:
76389
diff
changeset
|
418 ;; - emacs-devel ("[address-of-OP: EVAL and mouse selection in *Completions*]" |
51826bf423f3
(PC-try-completion): New function.
Martin Rudalics <rudalics@gmx.at>
parents:
76389
diff
changeset
|
419 ;; starting 2007-03-05). |
51826bf423f3
(PC-try-completion): New function.
Martin Rudalics <rudalics@gmx.at>
parents:
76389
diff
changeset
|
420 (defun PC-try-completion (string alist &optional predicate) |
51826bf423f3
(PC-try-completion): New function.
Martin Rudalics <rudalics@gmx.at>
parents:
76389
diff
changeset
|
421 "Like `try-completion' but return STRING instead of t." |
51826bf423f3
(PC-try-completion): New function.
Martin Rudalics <rudalics@gmx.at>
parents:
76389
diff
changeset
|
422 (let ((result (try-completion string alist predicate))) |
51826bf423f3
(PC-try-completion): New function.
Martin Rudalics <rudalics@gmx.at>
parents:
76389
diff
changeset
|
423 (if (eq result t) string result))) |
51826bf423f3
(PC-try-completion): New function.
Martin Rudalics <rudalics@gmx.at>
parents:
76389
diff
changeset
|
424 |
77208 | 425 ;; TODO document MODE magic... |
426 (defun PC-do-completion (&optional mode beg end goto-end) | |
427 "Internal function to do the work of partial completion. | |
428 Text to be completed lies between BEG and END. Normally when | |
429 replacing text in the minibuffer, this function replaces up to | |
430 point-max (as is appropriate for completing a file name). If | |
431 GOTO-END is non-nil, however, it instead replaces up to END." | |
26341
6063383b77d5
(PC-do-completion): Use minibuffer-prompt-end to
Gerd Moellmann <gerd@gnu.org>
parents:
25207
diff
changeset
|
432 (or beg (setq beg (minibuffer-prompt-end))) |
3725 | 433 (or end (setq end (point-max))) |
81678
97a40a986c47
(partial-completion-mode): Remove advice of read-file-name-internal.
Richard M. Stallman <rms@gnu.org>
parents:
81312
diff
changeset
|
434 (let* ((table (if (eq minibuffer-completion-table 'read-file-name-internal) |
97a40a986c47
(partial-completion-mode): Remove advice of read-file-name-internal.
Richard M. Stallman <rms@gnu.org>
parents:
81312
diff
changeset
|
435 'PC-read-file-name-internal |
97a40a986c47
(partial-completion-mode): Remove advice of read-file-name-internal.
Richard M. Stallman <rms@gnu.org>
parents:
81312
diff
changeset
|
436 minibuffer-completion-table)) |
3725 | 437 (pred minibuffer-completion-predicate) |
14765
844686eabff0
(PC-completion-as-file-name-predicate):
Richard M. Stallman <rms@gnu.org>
parents:
14759
diff
changeset
|
438 (filename (funcall PC-completion-as-file-name-predicate)) |
76756
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
439 (dirname nil) ; non-nil only if a filename is being completed |
76439
2a096eef08d4
(PC-do-completion): Bind dirlength to nil to avoid
Martin Rudalics <rudalics@gmx.at>
parents:
76406
diff
changeset
|
440 ;; The following used to be "(dirlength 0)" which caused the erasure of |
2a096eef08d4
(PC-do-completion): Bind dirlength to nil to avoid
Martin Rudalics <rudalics@gmx.at>
parents:
76406
diff
changeset
|
441 ;; the entire buffer text before `point' when inserting a completion |
2a096eef08d4
(PC-do-completion): Bind dirlength to nil to avoid
Martin Rudalics <rudalics@gmx.at>
parents:
76406
diff
changeset
|
442 ;; into a buffer. |
2a096eef08d4
(PC-do-completion): Bind dirlength to nil to avoid
Martin Rudalics <rudalics@gmx.at>
parents:
76406
diff
changeset
|
443 dirlength |
3725 | 444 (str (buffer-substring beg end)) |
445 (incname (and filename (string-match "<\\([^\"<>]*\\)>?$" str))) | |
446 (ambig nil) | |
70840
b599bb78c1fc
(PC-do-completion): Undo the addition of implicit
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70076
diff
changeset
|
447 basestr origstr |
29674
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
448 env-on |
3725 | 449 regex |
450 p offset | |
82302
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
451 abbreviated |
3725 | 452 (poss nil) |
453 helpposs | |
454 (case-fold-search completion-ignore-case)) | |
455 | |
456 ;; Check if buffer contents can already be considered complete | |
457 (if (and (eq mode 'exit) | |
76336
d24bffa1374c
(PC-do-completion): If completion-ignore-case is non-nil, replace
Chong Yidong <cyd@stupidchicken.com>
parents:
75347
diff
changeset
|
458 (test-completion str table pred)) |
98091
cf3a44c40410
* complete.el (PC-do-completion): Don't replace buffer contents
Chong Yidong <cyd@stupidchicken.com>
parents:
96376
diff
changeset
|
459 'complete |
3725 | 460 |
461 ;; Do substitutions in directory names | |
462 (and filename | |
29674
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
463 (setq basestr (or (file-name-directory str) "")) |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
464 (setq dirlength (length basestr)) |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
465 ;; Do substitutions in directory names |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
466 (setq p (substitute-in-file-name basestr)) |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
467 (not (string-equal basestr p)) |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
468 (setq str (concat p (file-name-nondirectory str))) |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
469 (progn |
3725 | 470 (delete-region beg end) |
29674
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
471 (insert str) |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
472 (setq end (+ beg (length str))))) |
48611
79a38ce36eb1
(PC-do-completion): Do not add wildcards to pattern unless filename is
Noah Friedman <friedman@splode.com>
parents:
48225
diff
changeset
|
473 |
3725 | 474 ;; Prepare various delimiter strings |
475 (or (equal PC-word-delimiters PC-delims) | |
476 (setq PC-delims PC-word-delimiters | |
477 PC-delim-regex (concat "[" PC-delims "]") | |
478 PC-ndelims-regex (concat "[^" PC-delims "]*") | |
479 PC-delims-list (append PC-delims nil))) | |
480 | |
48225
75ced2cd606e
(PC-do-completion): Make partial-completion work
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
481 ;; Add wildcards if necessary |
48611
79a38ce36eb1
(PC-do-completion): Do not add wildcards to pattern unless filename is
Noah Friedman <friedman@splode.com>
parents:
48225
diff
changeset
|
482 (and filename |
79a38ce36eb1
(PC-do-completion): Do not add wildcards to pattern unless filename is
Noah Friedman <friedman@splode.com>
parents:
48225
diff
changeset
|
483 (let ((dir (file-name-directory str)) |
52883
cc2b636ab1db
(PC-do-completion): Do not forget to use `pred' as the default-directory
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
484 (file (file-name-nondirectory str)) |
94302
5a4d9f3d23f9
(PC-do-completion): Be more robust in the presence of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94219
diff
changeset
|
485 ;; The base dir for file-completion was passed in `predicate'. |
5a4d9f3d23f9
(PC-do-completion): Be more robust in the presence of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94219
diff
changeset
|
486 (default-directory (if (stringp pred) (expand-file-name pred) |
5a4d9f3d23f9
(PC-do-completion): Be more robust in the presence of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94219
diff
changeset
|
487 default-directory))) |
48611
79a38ce36eb1
(PC-do-completion): Do not add wildcards to pattern unless filename is
Noah Friedman <friedman@splode.com>
parents:
48225
diff
changeset
|
488 (while (and (stringp dir) (not (file-directory-p dir))) |
79a38ce36eb1
(PC-do-completion): Do not add wildcards to pattern unless filename is
Noah Friedman <friedman@splode.com>
parents:
48225
diff
changeset
|
489 (setq dir (directory-file-name dir)) |
79a38ce36eb1
(PC-do-completion): Do not add wildcards to pattern unless filename is
Noah Friedman <friedman@splode.com>
parents:
48225
diff
changeset
|
490 (setq file (concat (replace-regexp-in-string |
79a38ce36eb1
(PC-do-completion): Do not add wildcards to pattern unless filename is
Noah Friedman <friedman@splode.com>
parents:
48225
diff
changeset
|
491 PC-delim-regex "*\\&" |
79a38ce36eb1
(PC-do-completion): Do not add wildcards to pattern unless filename is
Noah Friedman <friedman@splode.com>
parents:
48225
diff
changeset
|
492 (file-name-nondirectory dir)) |
79a38ce36eb1
(PC-do-completion): Do not add wildcards to pattern unless filename is
Noah Friedman <friedman@splode.com>
parents:
48225
diff
changeset
|
493 "*/" file)) |
79a38ce36eb1
(PC-do-completion): Do not add wildcards to pattern unless filename is
Noah Friedman <friedman@splode.com>
parents:
48225
diff
changeset
|
494 (setq dir (file-name-directory dir))) |
70840
b599bb78c1fc
(PC-do-completion): Undo the addition of implicit
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70076
diff
changeset
|
495 (setq origstr str str (concat dir file)))) |
48611
79a38ce36eb1
(PC-do-completion): Do not add wildcards to pattern unless filename is
Noah Friedman <friedman@splode.com>
parents:
48225
diff
changeset
|
496 |
3725 | 497 ;; Look for wildcard expansions in directory name |
498 (and filename | |
499 (string-match "\\*.*/" str) | |
500 (let ((pat str) | |
94302
5a4d9f3d23f9
(PC-do-completion): Be more robust in the presence of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94219
diff
changeset
|
501 ;; The base dir for file-completion was passed in `predicate'. |
5a4d9f3d23f9
(PC-do-completion): Be more robust in the presence of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94219
diff
changeset
|
502 (default-directory (if (stringp pred) (expand-file-name pred) |
5a4d9f3d23f9
(PC-do-completion): Be more robust in the presence of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94219
diff
changeset
|
503 default-directory)) |
3725 | 504 files) |
505 (setq p (1+ (string-match "/[^/]*\\'" pat))) | |
506 (while (setq p (string-match PC-delim-regex pat p)) | |
507 (setq pat (concat (substring pat 0 p) | |
508 "*" | |
509 (substring pat p)) | |
510 p (+ p 2))) | |
85543
3688c29b5541
(PC-expand-many-files): Remove.
Juanma Barranquero <lekktu@gmail.com>
parents:
84347
diff
changeset
|
511 (setq files (file-expand-wildcards (concat pat "*"))) |
3725 | 512 (if files |
513 (let ((dir (file-name-directory (car files))) | |
514 (p files)) | |
515 (while (and (setq p (cdr p)) | |
516 (equal dir (file-name-directory (car p))))) | |
517 (if p | |
94302
5a4d9f3d23f9
(PC-do-completion): Be more robust in the presence of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94219
diff
changeset
|
518 (setq filename nil table nil |
5a4d9f3d23f9
(PC-do-completion): Be more robust in the presence of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94219
diff
changeset
|
519 pred (if (stringp pred) nil pred) |
3725 | 520 ambig t) |
521 (delete-region beg end) | |
522 (setq str (concat dir (file-name-nondirectory str))) | |
523 (insert str) | |
524 (setq end (+ beg (length str))))) | |
70840
b599bb78c1fc
(PC-do-completion): Undo the addition of implicit
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70076
diff
changeset
|
525 (if origstr |
81678
97a40a986c47
(partial-completion-mode): Remove advice of read-file-name-internal.
Richard M. Stallman <rms@gnu.org>
parents:
81312
diff
changeset
|
526 ;; If the wildcards were introduced by us, it's |
97a40a986c47
(partial-completion-mode): Remove advice of read-file-name-internal.
Richard M. Stallman <rms@gnu.org>
parents:
81312
diff
changeset
|
527 ;; possible that PC-read-file-name-internal can |
97a40a986c47
(partial-completion-mode): Remove advice of read-file-name-internal.
Richard M. Stallman <rms@gnu.org>
parents:
81312
diff
changeset
|
528 ;; still find matches for the original string |
97a40a986c47
(partial-completion-mode): Remove advice of read-file-name-internal.
Richard M. Stallman <rms@gnu.org>
parents:
81312
diff
changeset
|
529 ;; even if we couldn't, so remove the added |
97a40a986c47
(partial-completion-mode): Remove advice of read-file-name-internal.
Richard M. Stallman <rms@gnu.org>
parents:
81312
diff
changeset
|
530 ;; wildcards. |
70840
b599bb78c1fc
(PC-do-completion): Undo the addition of implicit
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70076
diff
changeset
|
531 (setq str origstr) |
94302
5a4d9f3d23f9
(PC-do-completion): Be more robust in the presence of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94219
diff
changeset
|
532 (setq filename nil table nil |
5a4d9f3d23f9
(PC-do-completion): Be more robust in the presence of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94219
diff
changeset
|
533 pred (if (stringp pred) nil pred)))))) |
3725 | 534 |
535 ;; Strip directory name if appropriate | |
536 (if filename | |
537 (if incname | |
538 (setq basestr (substring str incname) | |
539 dirname (substring str 0 incname)) | |
540 (setq basestr (file-name-nondirectory str) | |
25207
e62d2121822f
(PC-do-completion): If completing on file name,
Eli Zaretskii <eliz@gnu.org>
parents:
24624
diff
changeset
|
541 dirname (file-name-directory str)) |
e62d2121822f
(PC-do-completion): If completing on file name,
Eli Zaretskii <eliz@gnu.org>
parents:
24624
diff
changeset
|
542 ;; Make sure str is consistent with its directory and basename |
e62d2121822f
(PC-do-completion): If completing on file name,
Eli Zaretskii <eliz@gnu.org>
parents:
24624
diff
changeset
|
543 ;; parts. This is important on DOZe'NT systems when str only |
e62d2121822f
(PC-do-completion): If completing on file name,
Eli Zaretskii <eliz@gnu.org>
parents:
24624
diff
changeset
|
544 ;; includes a drive letter, like in "d:". |
e62d2121822f
(PC-do-completion): If completing on file name,
Eli Zaretskii <eliz@gnu.org>
parents:
24624
diff
changeset
|
545 (setq str (concat dirname basestr))) |
3725 | 546 (setq basestr str)) |
547 | |
548 ;; Convert search pattern to a standard regular expression | |
549 (setq regex (regexp-quote basestr) | |
550 offset (if (and (> (length regex) 0) | |
551 (not (eq (aref basestr 0) ?\*)) | |
552 (or (eq PC-first-char t) | |
553 (and PC-first-char filename))) 1 0) | |
554 p offset) | |
555 (while (setq p (string-match PC-delim-regex regex p)) | |
556 (if (eq (aref regex p) ? ) | |
557 (setq regex (concat (substring regex 0 p) | |
558 PC-ndelims-regex | |
559 PC-delim-regex | |
560 (substring regex (1+ p))) | |
561 p (+ p (length PC-ndelims-regex) (length PC-delim-regex))) | |
562 (let ((bump (if (memq (aref regex p) | |
563 '(?$ ?^ ?\. ?* ?+ ?? ?[ ?] ?\\)) | |
564 -1 0))) | |
565 (setq regex (concat (substring regex 0 (+ p bump)) | |
566 PC-ndelims-regex | |
567 (substring regex (+ p bump))) | |
568 p (+ p (length PC-ndelims-regex) 1))))) | |
569 (setq p 0) | |
570 (if filename | |
571 (while (setq p (string-match "\\\\\\*" regex p)) | |
572 (setq regex (concat (substring regex 0 p) | |
573 "[^/]*" | |
574 (substring regex (+ p 2)))))) | |
575 ;;(setq the-regex regex) | |
576 (setq regex (concat "\\`" regex)) | |
577 | |
29674
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
578 (and (> (length basestr) 0) |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
579 (= (aref basestr 0) ?$) |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
580 (setq env-on t |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
581 table PC-env-vars-alist |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
582 pred nil)) |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
583 |
3725 | 584 ;; Find an initial list of possible completions |
82302
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
585 (unless (setq p (string-match (concat PC-delim-regex |
3725 | 586 (if filename "\\|\\*" "")) |
587 str | |
82302
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
588 (+ (length dirname) offset))) |
3725 | 589 |
590 ;; Minibuffer contains no hyphens -- simple case! | |
82302
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
591 (setq poss (all-completions (if env-on basestr str) |
3725 | 592 table |
593 pred)) | |
84347
36f09a4f9133
2007-09-06 Sean O'Rourke <sorourke@cs.ucsd.edu>
Romain Francoise <romain@orebokech.com>
parents:
82855
diff
changeset
|
594 (unless (or poss (string-equal str "")) |
82302
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
595 ;; Try completion as an abbreviation, e.g. "mvb" -> |
84347
36f09a4f9133
2007-09-06 Sean O'Rourke <sorourke@cs.ucsd.edu>
Romain Francoise <romain@orebokech.com>
parents:
82855
diff
changeset
|
596 ;; "m-v-b" -> "multiple-value-bind", but only for |
36f09a4f9133
2007-09-06 Sean O'Rourke <sorourke@cs.ucsd.edu>
Romain Francoise <romain@orebokech.com>
parents:
82855
diff
changeset
|
597 ;; non-empty strings. |
82302
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
598 (setq origstr str |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
599 abbreviated t) |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
600 (if filename |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
601 (cond |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
602 ;; "alpha" or "/alpha" -> expand whole path. |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
603 ((string-match "^/?\\([A-Za-z0-9]+\\)$" str) |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
604 (setq |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
605 basestr "" |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
606 p nil |
85543
3688c29b5541
(PC-expand-many-files): Remove.
Juanma Barranquero <lekktu@gmail.com>
parents:
84347
diff
changeset
|
607 poss (file-expand-wildcards |
82302
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
608 (concat "/" |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
609 (mapconcat #'list (match-string 1 str) "*/") |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
610 "*")) |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
611 beg (1- beg))) |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
612 ;; Alphanumeric trailer -> expand trailing file |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
613 ((string-match "^\\(.+/\\)\\([A-Za-z0-9]+\\)$" str) |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
614 (setq regex (concat "\\`" |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
615 (mapconcat #'list |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
616 (match-string 2 str) |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
617 "[A-Za-z0-9]*[^A-Za-z0-9]")) |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
618 p (1+ (length (match-string 1 str)))))) |
93243
9ecf89702ffc
(PC-do-completion): Use regexp-quote.
Johan Bockgård <bojohan@gnu.org>
parents:
87649
diff
changeset
|
619 (setq regex (concat "\\`" (mapconcat (lambda (c) |
9ecf89702ffc
(PC-do-completion): Use regexp-quote.
Johan Bockgård <bojohan@gnu.org>
parents:
87649
diff
changeset
|
620 (regexp-quote (string c))) |
9ecf89702ffc
(PC-do-completion): Use regexp-quote.
Johan Bockgård <bojohan@gnu.org>
parents:
87649
diff
changeset
|
621 str "[^-]*-")) |
9ecf89702ffc
(PC-do-completion): Use regexp-quote.
Johan Bockgård <bojohan@gnu.org>
parents:
87649
diff
changeset
|
622 p 1)))) |
82302
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
623 (when p |
3725 | 624 ;; Use all-completions to do an initial cull. This is a big win, |
625 ;; since all-completions is written in C! | |
29674
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
626 (let ((compl (all-completions (if env-on |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
627 (file-name-nondirectory (substring str 0 p)) |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
628 (substring str 0 p)) |
72310
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
629 table |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
630 pred))) |
3725 | 631 (setq p compl) |
82302
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
632 (when (and compl abbreviated) |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
633 (if filename |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
634 (progn |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
635 (setq p nil) |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
636 (dolist (x compl) |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
637 (when (string-match regex x) |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
638 (push x p))) |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
639 (setq basestr (try-completion "" p))) |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
640 (setq basestr (mapconcat 'list str "-")) |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
641 (delete-region beg end) |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
642 (setq end (+ beg (length basestr))) |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
643 (insert basestr)))) |
3725 | 644 (while p |
645 (and (string-match regex (car p)) | |
16608
e2858bcbed43
(PC-do-completion): Remove text properties from
Karl Heuer <kwzh@gnu.org>
parents:
15802
diff
changeset
|
646 (progn |
e2858bcbed43
(PC-do-completion): Remove text properties from
Karl Heuer <kwzh@gnu.org>
parents:
15802
diff
changeset
|
647 (set-text-properties 0 (length (car p)) '() (car p)) |
e2858bcbed43
(PC-do-completion): Remove text properties from
Karl Heuer <kwzh@gnu.org>
parents:
15802
diff
changeset
|
648 (setq poss (cons (car p) poss)))) |
82302
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
649 (setq p (cdr p)))) |
3725 | 650 |
76375
3183de2acda4
(PC-do-completion): Delete duplicates in the list of possible completions.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents:
76336
diff
changeset
|
651 ;; If table had duplicates, they can be here. |
3183de2acda4
(PC-do-completion): Delete duplicates in the list of possible completions.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents:
76336
diff
changeset
|
652 (delete-dups poss) |
3183de2acda4
(PC-do-completion): Delete duplicates in the list of possible completions.
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents:
76336
diff
changeset
|
653 |
72310
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
654 ;; Handle completion-ignored-extensions |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
655 (and filename |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
656 (not (eq mode 'help)) |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
657 (let ((p2 poss)) |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
658 |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
659 ;; Build a regular expression representing the extensions list |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
660 (or (equal completion-ignored-extensions PC-ignored-extensions) |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
661 (setq PC-ignored-regexp |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
662 (concat "\\(" |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
663 (mapconcat |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
664 'regexp-quote |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
665 (setq PC-ignored-extensions |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
666 completion-ignored-extensions) |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
667 "\\|") |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
668 "\\)\\'"))) |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
669 |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
670 ;; Check if there are any without an ignored extension. |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
671 ;; Also ignore `.' and `..'. |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
672 (setq p nil) |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
673 (while p2 |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
674 (or (string-match PC-ignored-regexp (car p2)) |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
675 (string-match "\\(\\`\\|/\\)[.][.]?/?\\'" (car p2)) |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
676 (setq p (cons (car p2) p))) |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
677 (setq p2 (cdr p2))) |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
678 |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
679 ;; If there are "good" names, use them |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
680 (and p (setq poss p)))) |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
681 |
3725 | 682 ;; Now we have a list of possible completions |
82302
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
683 |
3725 | 684 (cond |
685 | |
686 ;; No valid completions found | |
687 ((null poss) | |
688 (if (and (eq mode 'word) | |
689 (not PC-word-failed-flag)) | |
690 (let ((PC-word-failed-flag t)) | |
691 (delete-backward-char 1) | |
692 (PC-do-completion 'word)) | |
82302
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
693 (when abbreviated |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
694 (delete-region beg end) |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
695 (insert origstr)) |
3725 | 696 (beep) |
697 (PC-temp-minibuffer-message (if ambig | |
10164
d16e46a4e34c
(PC-do-completion): If complete but not unique,
Richard M. Stallman <rms@gnu.org>
parents:
8478
diff
changeset
|
698 " [Ambiguous dir name]" |
3725 | 699 (if (eq mode 'help) |
10164
d16e46a4e34c
(PC-do-completion): If complete but not unique,
Richard M. Stallman <rms@gnu.org>
parents:
8478
diff
changeset
|
700 " [No completions]" |
d16e46a4e34c
(PC-do-completion): If complete but not unique,
Richard M. Stallman <rms@gnu.org>
parents:
8478
diff
changeset
|
701 " [No match]"))) |
3725 | 702 nil)) |
703 | |
704 ;; More than one valid completion found | |
705 ((or (cdr (setq helpposs poss)) | |
706 (memq mode '(help word))) | |
707 | |
708 ;; Is the actual string one of the possible completions? | |
709 (setq p (and (not (eq mode 'help)) poss)) | |
710 (while (and p | |
16608
e2858bcbed43
(PC-do-completion): Remove text properties from
Karl Heuer <kwzh@gnu.org>
parents:
15802
diff
changeset
|
711 (not (string-equal (car p) basestr))) |
3725 | 712 (setq p (cdr p))) |
10164
d16e46a4e34c
(PC-do-completion): If complete but not unique,
Richard M. Stallman <rms@gnu.org>
parents:
8478
diff
changeset
|
713 (and p (null mode) |
d16e46a4e34c
(PC-do-completion): If complete but not unique,
Richard M. Stallman <rms@gnu.org>
parents:
8478
diff
changeset
|
714 (PC-temp-minibuffer-message " [Complete, but not unique]")) |
d16e46a4e34c
(PC-do-completion): If complete but not unique,
Richard M. Stallman <rms@gnu.org>
parents:
8478
diff
changeset
|
715 (if (and p |
d16e46a4e34c
(PC-do-completion): If complete but not unique,
Richard M. Stallman <rms@gnu.org>
parents:
8478
diff
changeset
|
716 (not (and (null mode) |
d16e46a4e34c
(PC-do-completion): If complete but not unique,
Richard M. Stallman <rms@gnu.org>
parents:
8478
diff
changeset
|
717 (eq this-command last-command)))) |
d16e46a4e34c
(PC-do-completion): If complete but not unique,
Richard M. Stallman <rms@gnu.org>
parents:
8478
diff
changeset
|
718 t |
3725 | 719 |
720 ;; If ambiguous, try for a partial completion | |
721 (let ((improved nil) | |
722 prefix | |
723 (pt nil) | |
724 (skip "\\`")) | |
725 | |
726 ;; Check if next few letters are the same in all cases | |
727 (if (and (not (eq mode 'help)) | |
76404
51826bf423f3
(PC-try-completion): New function.
Martin Rudalics <rudalics@gmx.at>
parents:
76389
diff
changeset
|
728 (setq prefix (PC-try-completion |
51826bf423f3
(PC-try-completion): New function.
Martin Rudalics <rudalics@gmx.at>
parents:
76389
diff
changeset
|
729 (PC-chunk-after basestr skip) poss))) |
3725 | 730 (let ((first t) i) |
71436
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
731 ;; Retain capitalization of user input even if |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
732 ;; completion-ignore-case is set. |
3725 | 733 (if (eq mode 'word) |
734 (setq prefix (PC-chop-word prefix basestr))) | |
735 (goto-char (+ beg (length dirname))) | |
736 (while (and (progn | |
71436
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
737 (setq i 0) ; index into prefix string |
3725 | 738 (while (< i (length prefix)) |
739 (if (and (< (point) end) | |
71436
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
740 (eq (downcase (aref prefix i)) |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
741 (downcase (following-char)))) |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
742 ;; same char (modulo case); no action |
3725 | 743 (forward-char 1) |
744 (if (and (< (point) end) | |
71436
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
745 (and (looking-at " ") |
76756
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
746 (memq (aref prefix i) |
71436
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
747 PC-delims-list))) |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
748 ;; replace " " by the actual delimiter |
3725 | 749 (progn |
750 (delete-char 1) | |
71436
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
751 (insert (substring prefix i (1+ i)))) |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
752 ;; insert a new character |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
753 (progn |
76756
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
754 (and filename (looking-at "\\*") |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
755 (progn |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
756 (delete-char 1) |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
757 (setq end (1- end)))) |
71436
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
758 (setq improved t) |
76756
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
759 (insert (substring prefix i (1+ i))) |
71436
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
760 (setq end (1+ end))))) |
3725 | 761 (setq i (1+ i))) |
67622
bd00b5fc4e4d
(PC-do-completion): Remove `(equal (point) beg)' to
Juri Linkov <juri@jurta.org>
parents:
67596
diff
changeset
|
762 (or pt (setq pt (point))) |
3725 | 763 (looking-at PC-delim-regex)) |
764 (setq skip (concat skip | |
765 (regexp-quote prefix) | |
766 PC-ndelims-regex) | |
76404
51826bf423f3
(PC-try-completion): New function.
Martin Rudalics <rudalics@gmx.at>
parents:
76389
diff
changeset
|
767 prefix (PC-try-completion |
71436
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
768 (PC-chunk-after |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
769 ;; not basestr, because that does |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
770 ;; not reflect insertions |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
771 (buffer-substring |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
772 (+ beg (length dirname)) end) |
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
773 skip) |
3725 | 774 (mapcar |
72310
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
775 (lambda (x) |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
776 (when (string-match skip x) |
e45c648eb3ad
(PC-do-completion): Strip out completion-ignored-extensions
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72243
diff
changeset
|
777 (substring x (match-end 0)))) |
3725 | 778 poss))) |
779 (or (> i 0) (> (length prefix) 0)) | |
780 (or (not (eq mode 'word)) | |
781 (and first (> (length prefix) 0) | |
782 (setq first nil | |
783 prefix (substring prefix 0 1)))))) | |
784 (goto-char (if (eq mode 'word) end | |
785 (or pt beg))))) | |
786 | |
787 (if (and (eq mode 'word) | |
788 (not PC-word-failed-flag)) | |
789 | |
790 (if improved | |
791 | |
792 ;; We changed it... would it be complete without the space? | |
53258
f94a302ee4c0
(PC-is-complete-p): delete.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52883
diff
changeset
|
793 (if (test-completion (buffer-substring 1 (1- end)) |
76756
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
794 table pred) |
3725 | 795 (delete-region (1- end) end))) |
796 | |
797 (if improved | |
798 | |
799 ;; We changed it... enough to be complete? | |
800 (and (eq mode 'exit) | |
71436
d51a5dc58935
(PC-do-completion): Retain capitalization of user input, when possible, even
Eli Zaretskii <eliz@gnu.org>
parents:
70840
diff
changeset
|
801 (test-completion-ignore-case (field-string) table pred)) |
3725 | 802 |
803 ;; If totally ambiguous, display a list of completions | |
31971
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
804 (if (or (eq completion-auto-help t) |
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
805 (and completion-auto-help |
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
806 (eq last-command this-command)) |
3725 | 807 (eq mode 'help)) |
76756
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
808 (let ((prompt-end (minibuffer-prompt-end))) |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
809 (with-output-to-temp-buffer "*Completions*" |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
810 (display-completion-list (sort helpposs 'string-lessp)) |
77211
43c40e825164
(PC-goto-end, PC-do-completion-end): Make buffer-local.
Glenn Morris <rgm@gnu.org>
parents:
77208
diff
changeset
|
811 (setq PC-do-completion-end end |
43c40e825164
(PC-goto-end, PC-do-completion-end): Make buffer-local.
Glenn Morris <rgm@gnu.org>
parents:
77208
diff
changeset
|
812 PC-goto-end goto-end) |
76756
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
813 (with-current-buffer standard-output |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
814 ;; Record which part of the buffer we are completing |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
815 ;; so that choosing a completion from the list |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
816 ;; knows how much old text to replace. |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
817 ;; This was briefly nil in the non-dirname case. |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
818 ;; However, if one calls PC-lisp-complete-symbol |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
819 ;; on "(ne-f" with point on the hyphen, PC offers |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
820 ;; all completions starting with "(ne", some of |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
821 ;; which do not match the "-f" part (maybe it |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
822 ;; should not, but it does). In such cases, |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
823 ;; completion gets confused trying to figure out |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
824 ;; how much to replace, so we tell it explicitly |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
825 ;; (ie, the number of chars in the buffer before beg). |
76774
a98404fc2d91
(PC-do-completion-end): New variable.
Glenn Morris <rgm@gnu.org>
parents:
76756
diff
changeset
|
826 ;; |
a98404fc2d91
(PC-do-completion-end): New variable.
Glenn Morris <rgm@gnu.org>
parents:
76756
diff
changeset
|
827 ;; Note that choose-completion-string-functions |
a98404fc2d91
(PC-do-completion-end): New variable.
Glenn Morris <rgm@gnu.org>
parents:
76756
diff
changeset
|
828 ;; plays around with point. |
76756
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
829 (setq completion-base-size (if dirname |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
830 dirlength |
77211
43c40e825164
(PC-goto-end, PC-do-completion-end): Make buffer-local.
Glenn Morris <rgm@gnu.org>
parents:
77208
diff
changeset
|
831 (- beg prompt-end)))))) |
82855
f839eef40802
(PC-do-completion): Make RET accept a non-unique but complete
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents:
82302
diff
changeset
|
832 (PC-temp-minibuffer-message " [Next char not unique]")) |
f839eef40802
(PC-do-completion): Make RET accept a non-unique but complete
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents:
82302
diff
changeset
|
833 ;; Expansion of filenames is not reversible, |
f839eef40802
(PC-do-completion): Make RET accept a non-unique but complete
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents:
82302
diff
changeset
|
834 ;; so just keep the prefix. |
82302
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
835 (when (and abbreviated filename) |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
836 (delete-region (point) end)) |
82855
f839eef40802
(PC-do-completion): Make RET accept a non-unique but complete
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents:
82302
diff
changeset
|
837 nil))))) |
3725 | 838 |
839 ;; Only one possible completion | |
840 (t | |
29674
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
841 (if (and (equal basestr (car poss)) |
82302
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
842 (not (and env-on filename)) |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
843 (not abbreviated)) |
3725 | 844 (if (null mode) |
10164
d16e46a4e34c
(PC-do-completion): If complete but not unique,
Richard M. Stallman <rms@gnu.org>
parents:
8478
diff
changeset
|
845 (PC-temp-minibuffer-message " [Sole completion]")) |
3725 | 846 (delete-region beg end) |
7792
1335cec8a016
(PC-do-completion): Clear text props from inserted text.
Richard M. Stallman <rms@gnu.org>
parents:
7639
diff
changeset
|
847 (insert (format "%s" |
1335cec8a016
(PC-do-completion): Clear text props from inserted text.
Richard M. Stallman <rms@gnu.org>
parents:
7639
diff
changeset
|
848 (if filename |
1335cec8a016
(PC-do-completion): Clear text props from inserted text.
Richard M. Stallman <rms@gnu.org>
parents:
7639
diff
changeset
|
849 (substitute-in-file-name (concat dirname (car poss))) |
1335cec8a016
(PC-do-completion): Clear text props from inserted text.
Richard M. Stallman <rms@gnu.org>
parents:
7639
diff
changeset
|
850 (car poss))))) |
3725 | 851 t))))) |
852 | |
853 (defun PC-chop-word (new old) | |
854 (let ((i -1) | |
855 (j -1)) | |
856 (while (and (setq i (string-match PC-delim-regex old (1+ i))) | |
857 (setq j (string-match PC-delim-regex new (1+ j))))) | |
858 (if (and j | |
859 (or (not PC-word-failed-flag) | |
860 (setq j (string-match PC-delim-regex new (1+ j))))) | |
861 (substring new 0 (1+ j)) | |
862 new))) | |
863 | |
864 (defvar PC-not-minibuffer nil) | |
865 | |
18981
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
866 (defun PC-temp-minibuffer-message (message) |
3725 | 867 "A Lisp version of `temp_minibuffer_message' from minibuf.c." |
18981
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
868 (cond (PC-not-minibuffer |
87096
a99a2e8bc21e
Fix possibly buggy calls to `message'.
Deepak Goel <deego@gnufans.org>
parents:
85543
diff
changeset
|
869 (message "%s" message) |
18981
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
870 (sit-for 2) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
871 (message "")) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
872 ((fboundp 'temp-minibuffer-message) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
873 (temp-minibuffer-message message)) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
874 (t |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
875 (let ((point-max (point-max))) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
876 (save-excursion |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
877 (goto-char point-max) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
878 (insert message)) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
879 (let ((inhibit-quit t)) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
880 (sit-for 2) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
881 (delete-region point-max (point-max)) |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
882 (when quit-flag |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
883 (setq quit-flag nil |
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
884 unread-command-events '(7)))))))) |
3725 | 885 |
76787
960eefe0c8c4
(partial-completion-mode): Set PC-do-completion-end to nil after use.
Glenn Morris <rgm@gnu.org>
parents:
76774
diff
changeset
|
886 ;; Does not need to be buffer-local (?) because only used when one |
960eefe0c8c4
(partial-completion-mode): Set PC-do-completion-end to nil after use.
Glenn Morris <rgm@gnu.org>
parents:
76774
diff
changeset
|
887 ;; PC-l-c-s immediately follows another. |
76756
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
888 (defvar PC-lisp-complete-end nil |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
889 "Internal variable used by `PC-lisp-complete-symbol'.") |
3725 | 890 |
891 (defun PC-lisp-complete-symbol () | |
892 "Perform completion on Lisp symbol preceding point. | |
893 That symbol is compared against the symbols that exist | |
894 and any additional characters determined by what is there | |
895 are inserted. | |
896 If the symbol starts just after an open-parenthesis, | |
897 only symbols with function definitions are considered. | |
898 Otherwise, all symbols with function definitions, values | |
899 or properties are considered." | |
900 (interactive) | |
82302
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
901 (let* ((end |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
902 (save-excursion |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
903 (with-syntax-table lisp-mode-syntax-table |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
904 (skip-syntax-forward "_w") |
c0e2cbf10e3a
(PC-lisp-complete-symbol): Complete symbol around point.
Richard M. Stallman <rms@gnu.org>
parents:
82140
diff
changeset
|
905 (point)))) |
67161
759b69f39057
(PC-completion-as-file-name-predicate): Use minibuffer-completing-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67008
diff
changeset
|
906 (beg (save-excursion |
759b69f39057
(PC-completion-as-file-name-predicate): Use minibuffer-completing-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67008
diff
changeset
|
907 (with-syntax-table lisp-mode-syntax-table |
759b69f39057
(PC-completion-as-file-name-predicate): Use minibuffer-completing-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67008
diff
changeset
|
908 (backward-sexp 1) |
759b69f39057
(PC-completion-as-file-name-predicate): Use minibuffer-completing-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67008
diff
changeset
|
909 (while (= (char-syntax (following-char)) ?\') |
759b69f39057
(PC-completion-as-file-name-predicate): Use minibuffer-completing-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67008
diff
changeset
|
910 (forward-char 1)) |
759b69f39057
(PC-completion-as-file-name-predicate): Use minibuffer-completing-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67008
diff
changeset
|
911 (point)))) |
3725 | 912 (minibuffer-completion-table obarray) |
913 (minibuffer-completion-predicate | |
914 (if (eq (char-after (1- beg)) ?\() | |
915 'fboundp | |
916 (function (lambda (sym) | |
917 (or (boundp sym) (fboundp sym) | |
918 (symbol-plist sym)))))) | |
919 (PC-not-minibuffer t)) | |
76756
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
920 ;; http://lists.gnu.org/archive/html/emacs-devel/2007-03/msg01211.html |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
921 ;; |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
922 ;; This deals with cases like running PC-l-c-s on "M-: (n-f". |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
923 ;; The first call to PC-l-c-s expands this to "(ne-f", and moves |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
924 ;; point to the hyphen [1]. If one calls PC-l-c-s immediately after, |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
925 ;; then without the last-command check, one is offered all |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
926 ;; completions of "(ne", which is presumably not what one wants. |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
927 ;; |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
928 ;; This is arguably (at least, it seems to be the existing intended |
96376
c3309dba6542
American English spelling fix.
Glenn Morris <rgm@gnu.org>
parents:
94678
diff
changeset
|
929 ;; behavior) what one _does_ want if point has been explicitly |
76756
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
930 ;; positioned on the hyphen. Note that if PC-do-completion (qv) binds |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
931 ;; completion-base-size to nil, then completion does not replace the |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
932 ;; correct amount of text in such cases. |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
933 ;; |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
934 ;; Neither of these problems occur when using PC for filenames in the |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
935 ;; minibuffer, because in that case PC-do-completion is called without |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
936 ;; an explicit value for END, and so uses (point-max). This is fine for |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
937 ;; a filename, because the end of the filename must be at the end of |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
938 ;; the minibuffer. The same is not true for lisp symbols. |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
939 ;; |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
940 ;; [1] An alternate fix would be to not move point to the hyphen |
96376
c3309dba6542
American English spelling fix.
Glenn Morris <rgm@gnu.org>
parents:
94678
diff
changeset
|
941 ;; in such cases, but that would make the behavior different from |
76756
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
942 ;; that for filenames. It seems PC moves point to the site of the |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
943 ;; first difference between the possible completions. |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
944 ;; |
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
945 ;; Alternatively alternatively, maybe end should be computed in |
96376
c3309dba6542
American English spelling fix.
Glenn Morris <rgm@gnu.org>
parents:
94678
diff
changeset
|
946 ;; the same way as beg. That would change the behavior though. |
76756
63293afecf15
(PC-do-completion): Compute completion-base-size in
Glenn Morris <rgm@gnu.org>
parents:
76655
diff
changeset
|
947 (if (equal last-command 'PC-lisp-complete-symbol) |
77208 | 948 (PC-do-completion nil beg PC-lisp-complete-end t) |
76787
960eefe0c8c4
(partial-completion-mode): Set PC-do-completion-end to nil after use.
Glenn Morris <rgm@gnu.org>
parents:
76774
diff
changeset
|
949 (if PC-lisp-complete-end |
960eefe0c8c4
(partial-completion-mode): Set PC-do-completion-end to nil after use.
Glenn Morris <rgm@gnu.org>
parents:
76774
diff
changeset
|
950 (move-marker PC-lisp-complete-end end) |
960eefe0c8c4
(partial-completion-mode): Set PC-do-completion-end to nil after use.
Glenn Morris <rgm@gnu.org>
parents:
76774
diff
changeset
|
951 (setq PC-lisp-complete-end (copy-marker end t))) |
77208 | 952 (PC-do-completion nil beg end t)))) |
3725 | 953 |
29674
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
954 (defun PC-complete-as-file-name () |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
955 "Perform completion on file names preceding point. |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
956 Environment vars are converted to their values." |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
957 (interactive) |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
958 (let* ((end (point)) |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
959 (beg (if (re-search-backward "[^\\][ \t\n\"\`\'][^ \t\n\"\`\']" |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
960 (point-min) t) |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
961 (+ (point) 2) |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
962 (point-min))) |
81678
97a40a986c47
(partial-completion-mode): Remove advice of read-file-name-internal.
Richard M. Stallman <rms@gnu.org>
parents:
81312
diff
changeset
|
963 (minibuffer-completion-table 'PC-read-file-name-internal) |
94219
185747659a29
(PC-complete-as-file-name, PC-read-file-name-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94086
diff
changeset
|
964 (minibuffer-completion-predicate nil) |
29674
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
965 (PC-not-minibuffer t)) |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
966 (goto-char end) |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
967 (PC-do-completion nil beg end))) |
611062a8c71e
(PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
29088
diff
changeset
|
968 |
67161
759b69f39057
(PC-completion-as-file-name-predicate): Use minibuffer-completing-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67008
diff
changeset
|
969 ;; Facilities for loading C header files. This is independent from the |
759b69f39057
(PC-completion-as-file-name-predicate): Use minibuffer-completing-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67008
diff
changeset
|
970 ;; main completion code. See also the variable `PC-include-file-path' |
759b69f39057
(PC-completion-as-file-name-predicate): Use minibuffer-completing-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67008
diff
changeset
|
971 ;; at top of this file. |
3725 | 972 |
973 (defun PC-look-for-include-file () | |
974 (if (string-match "[\"<]\\([^\"<>]*\\)[\">]?$" (buffer-file-name)) | |
975 (let ((name (substring (buffer-file-name) | |
976 (match-beginning 1) (match-end 1))) | |
977 (punc (aref (buffer-file-name) (match-beginning 0))) | |
978 (path nil) | |
979 new-buf) | |
980 (kill-buffer (current-buffer)) | |
981 (if (equal name "") | |
67161
759b69f39057
(PC-completion-as-file-name-predicate): Use minibuffer-completing-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67008
diff
changeset
|
982 (with-current-buffer (car (buffer-list)) |
3725 | 983 (save-excursion |
984 (beginning-of-line) | |
985 (if (looking-at | |
986 "[ \t]*#[ \t]*include[ \t]+[<\"]\\(.+\\)[>\"][ \t]*[\n/]") | |
987 (setq name (buffer-substring (match-beginning 1) | |
988 (match-end 1)) | |
989 punc (char-after (1- (match-beginning 1)))) | |
990 ;; Suggested by Frank Siebenlist: | |
991 (if (or (looking-at | |
992 "[ \t]*([ \t]*load[ \t]+\"\\([^\"]+\\)\"") | |
993 (looking-at | |
994 "[ \t]*([ \t]*load-library[ \t]+\"\\([^\"]+\\)\"") | |
995 (looking-at | |
996 "[ \t]*([ \t]*require[ \t]+'\\([^\t )]+\\)[\t )]")) | |
997 (progn | |
998 (setq name (buffer-substring (match-beginning 1) | |
999 (match-end 1)) | |
1000 punc ?\< | |
1001 path load-path) | |
1002 (if (string-match "\\.elc$" name) | |
1003 (setq name (substring name 0 -1)) | |
1004 (or (string-match "\\.el$" name) | |
1005 (setq name (concat name ".el"))))) | |
1006 (error "Not on an #include line")))))) | |
29088
6dce569d0615
(PC-look-for-include-file): Use :alnum: character class.
Dave Love <fx@gnu.org>
parents:
26508
diff
changeset
|
1007 (or (string-match "\\.[[:alnum:]]+$" name) |
3725 | 1008 (setq name (concat name ".h"))) |
1009 (if (eq punc ?\<) | |
1010 (let ((path (or path (PC-include-file-path)))) | |
1011 (while (and path | |
1012 (not (file-exists-p | |
1013 (concat (file-name-as-directory (car path)) | |
1014 name)))) | |
1015 (setq path (cdr path))) | |
1016 (if path | |
1017 (setq name (concat (file-name-as-directory (car path)) name)) | |
1018 (error "No such include file: <%s>" name))) | |
67161
759b69f39057
(PC-completion-as-file-name-predicate): Use minibuffer-completing-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67008
diff
changeset
|
1019 (let ((dir (with-current-buffer (car (buffer-list)) |
3725 | 1020 default-directory))) |
1021 (if (file-exists-p (concat dir name)) | |
1022 (setq name (concat dir name)) | |
24624
07ae57ea2a18
Delete the wildcard expansion feature
Karl Heuer <kwzh@gnu.org>
parents:
24534
diff
changeset
|
1023 (error "No such include file: `%s'" name)))) |
3725 | 1024 (setq new-buf (get-file-buffer name)) |
1025 (if new-buf | |
1026 ;; no need to verify last-modified time for this! | |
1027 (set-buffer new-buf) | |
67161
759b69f39057
(PC-completion-as-file-name-predicate): Use minibuffer-completing-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67008
diff
changeset
|
1028 (set-buffer (create-file-buffer name)) |
3725 | 1029 (erase-buffer) |
1030 (insert-file-contents name t)) | |
24624
07ae57ea2a18
Delete the wildcard expansion feature
Karl Heuer <kwzh@gnu.org>
parents:
24534
diff
changeset
|
1031 ;; Returning non-nil with the new buffer current |
07ae57ea2a18
Delete the wildcard expansion feature
Karl Heuer <kwzh@gnu.org>
parents:
24534
diff
changeset
|
1032 ;; is sufficient to tell find-file to use it. |
3725 | 1033 t) |
1034 nil)) | |
1035 | |
1036 (defun PC-include-file-path () | |
1037 (or PC-include-file-path | |
1038 (let ((env (getenv "INCPATH")) | |
1039 (path nil) | |
1040 pos) | |
1041 (or env (error "No include file path specified")) | |
1042 (while (setq pos (string-match ":[^:]+$" env)) | |
1043 (setq path (cons (substring env (1+ pos)) path) | |
1044 env (substring env 0 pos))) | |
1045 path))) | |
1046 | |
67161
759b69f39057
(PC-completion-as-file-name-predicate): Use minibuffer-completing-file-name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67008
diff
changeset
|
1047 ;; This is adapted from lib-complete.el, by Mike Williams. |
3725 | 1048 (defun PC-include-file-all-completions (file search-path &optional full) |
1049 "Return all completions for FILE in any directory on SEARCH-PATH. | |
48611
79a38ce36eb1
(PC-do-completion): Do not add wildcards to pattern unless filename is
Noah Friedman <friedman@splode.com>
parents:
48225
diff
changeset
|
1050 If optional third argument FULL is non-nil, returned pathnames should be |
3725 | 1051 absolute rather than relative to some directory on the SEARCH-PATH." |
1052 (setq search-path | |
31971
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
1053 (mapcar (lambda (dir) |
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
1054 (if dir (file-name-as-directory dir) default-directory)) |
3725 | 1055 search-path)) |
1056 (if (file-name-absolute-p file) | |
1057 ;; It's an absolute file name, so don't need search-path | |
1058 (progn | |
1059 (setq file (expand-file-name file)) | |
48611
79a38ce36eb1
(PC-do-completion): Do not add wildcards to pattern unless filename is
Noah Friedman <friedman@splode.com>
parents:
48225
diff
changeset
|
1060 (file-name-all-completions |
3725 | 1061 (file-name-nondirectory file) (file-name-directory file))) |
1062 (let ((subdir (file-name-directory file)) | |
1063 (ndfile (file-name-nondirectory file)) | |
1064 file-lists) | |
1065 ;; Append subdirectory part to each element of search-path | |
1066 (if subdir | |
1067 (setq search-path | |
31971
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
1068 (mapcar (lambda (dir) (concat dir subdir)) |
3725 | 1069 search-path) |
1070 file )) | |
1071 ;; Make list of completions in each directory on search-path | |
1072 (while search-path | |
1073 (let* ((dir (car search-path)) | |
1074 (subdir (if full dir subdir))) | |
1075 (if (file-directory-p dir) | |
1076 (progn | |
1077 (setq file-lists | |
48611
79a38ce36eb1
(PC-do-completion): Do not add wildcards to pattern unless filename is
Noah Friedman <friedman@splode.com>
parents:
48225
diff
changeset
|
1078 (cons |
31971
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
1079 (mapcar (lambda (file) (concat subdir file)) |
48611
79a38ce36eb1
(PC-do-completion): Do not add wildcards to pattern unless filename is
Noah Friedman <friedman@splode.com>
parents:
48225
diff
changeset
|
1080 (file-name-all-completions ndfile |
3725 | 1081 (car search-path))) |
1082 file-lists)))) | |
1083 (setq search-path (cdr search-path)))) | |
1084 ;; Compress out duplicates while building complete list (slloooow!) | |
1085 (let ((sorted (sort (apply 'nconc file-lists) | |
31971
fa083a5fbf0c
(partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29674
diff
changeset
|
1086 (lambda (x y) (not (string-lessp x y))))) |
3725 | 1087 compressed) |
1088 (while sorted | |
1089 (if (equal (car sorted) (car compressed)) nil | |
1090 (setq compressed (cons (car sorted) compressed))) | |
1091 (setq sorted (cdr sorted))) | |
1092 compressed)))) | |
1093 | |
94219
185747659a29
(PC-complete-as-file-name, PC-read-file-name-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94086
diff
changeset
|
1094 (defun PC-read-file-name-internal (string pred action) |
81678
97a40a986c47
(partial-completion-mode): Remove advice of read-file-name-internal.
Richard M. Stallman <rms@gnu.org>
parents:
81312
diff
changeset
|
1095 "Extend `read-file-name-internal' to handle include files. |
97a40a986c47
(partial-completion-mode): Remove advice of read-file-name-internal.
Richard M. Stallman <rms@gnu.org>
parents:
81312
diff
changeset
|
1096 This is only used by " |
97a40a986c47
(partial-completion-mode): Remove advice of read-file-name-internal.
Richard M. Stallman <rms@gnu.org>
parents:
81312
diff
changeset
|
1097 (if (string-match "<\\([^\"<>]*\\)>?\\'" string) |
97a40a986c47
(partial-completion-mode): Remove advice of read-file-name-internal.
Richard M. Stallman <rms@gnu.org>
parents:
81312
diff
changeset
|
1098 (let* ((name (match-string 1 string)) |
3725 | 1099 (str2 (substring string (match-beginning 0))) |
1100 (completion-table | |
76655
adb0ab836e5d
(read-file-name-internal): Don't add the final > if the completion is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
76439
diff
changeset
|
1101 (mapcar (lambda (x) |
adb0ab836e5d
(read-file-name-internal): Don't add the final > if the completion is not
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
76439
diff
changeset
|
1102 (format (if (string-match "/\\'" x) "<%s" "<%s>") x)) |
3725 | 1103 (PC-include-file-all-completions |
1104 name (PC-include-file-path))))) | |
94086
4dfdf555a78e
Minor re-indent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93243
diff
changeset
|
1105 (cond |
4dfdf555a78e
Minor re-indent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93243
diff
changeset
|
1106 ((not completion-table) nil) |
4dfdf555a78e
Minor re-indent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93243
diff
changeset
|
1107 ((eq action 'lambda) (test-completion str2 completion-table nil)) |
4dfdf555a78e
Minor re-indent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93243
diff
changeset
|
1108 ((eq action nil) (PC-try-completion str2 completion-table nil)) |
4dfdf555a78e
Minor re-indent.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93243
diff
changeset
|
1109 ((eq action t) (all-completions str2 completion-table nil)))) |
94219
185747659a29
(PC-complete-as-file-name, PC-read-file-name-internal):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94086
diff
changeset
|
1110 (read-file-name-internal string pred action))) |
18981
6681f7141d2b
customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents:
17352
diff
changeset
|
1111 |
3725 | 1112 |
1113 (provide 'complete) | |
1114 | |
61042
31060527396c
(PC-read-include-file-name-internal): Use test-completion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60920
diff
changeset
|
1115 ;; arch-tag: fc7e2768-ff44-4e22-b579-4d825b968458 |
38436
b174db545cfd
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
36033
diff
changeset
|
1116 ;;; complete.el ends here |