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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15261
bd56cdc4d07b Fixed up initial line
Erik Naggum <erik@naggum.no>
parents: 14765
diff changeset
1 ;;; complete.el --- partial completion mechanism plus other goodies
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2
74439
ddcbd2c1b70d Update copyright years.
Glenn Morris <rgm@gnu.org>
parents: 72310
diff changeset
3 ;; Copyright (C) 1990, 1991, 1992, 1993, 1999, 2000, 2001, 2002, 2003,
79721
73661ddc7ac7 Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 78236
diff changeset
4 ;; 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8 ;; Special thanks to Hallvard Furuseth for his many ideas and contributions.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24
7942
bc5dccc5375f Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 7844
diff changeset
25 ;;; Commentary:
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
27 ;; Extended completion for the Emacs minibuffer.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
28 ;;
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29 ;; The basic idea is that the command name or other completable text is
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
30 ;; divided into words and each word is completed separately, so that
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
31 ;; "M-x p-b" expands to "M-x print-buffer". If the entry is ambiguous
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
32 ;; each word is completed as much as possible and then the cursor is
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
33 ;; left at the first position where typing another letter will resolve
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34 ;; the ambiguity.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35 ;;
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
36 ;; Word separators for this purpose are hyphen, space, and period.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37 ;; These would most likely occur in command names, Info menu items,
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38 ;; and file names, respectively. But all word separators are treated
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39 ;; alike at all times.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
40 ;;
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
41 ;; This completion package replaces the old-style completer's key
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42 ;; bindings for TAB, SPC, RET, and `?'. The old completer is still
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43 ;; available on the Meta versions of those keys. If you set
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
44 ;; PC-meta-flag to nil, the old completion keys will be left alone
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
45 ;; and the partial completer will use the Meta versions of the keys.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47
22142
a63710b545db Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 21266
diff changeset
48 ;; Usage: M-x partial-completion-mode. During completable minibuffer entry,
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
49 ;;
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50 ;; TAB means to do a partial completion;
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
51 ;; SPC means to do a partial complete-word;
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52 ;; RET means to do a partial complete-and-exit;
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53 ;; ? means to do a partial completion-help.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
54 ;;
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
55 ;; If you set PC-meta-flag to nil, then TAB, SPC, RET, and ? perform
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
56 ;; original Emacs completions, and M-TAB etc. do partial completion.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
57 ;; To do this, put the command,
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
58 ;;
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
59 ;; (setq PC-meta-flag nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
60 ;;
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
61 ;; in your .emacs file. To load partial completion automatically, put
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62 ;;
22142
a63710b545db Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 21266
diff changeset
63 ;; (partial-completion-mode t)
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
64 ;;
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
65 ;; in your .emacs file, too. Things will be faster if you byte-compile
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66 ;; this file when you install it.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67 ;;
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
68 ;; As an extra feature, in cases where RET would not normally
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69 ;; complete (such as `C-x b'), the M-RET key will always do a partial
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
70 ;; complete-and-exit. Thus `C-x b f.c RET' will select or create a
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
71 ;; buffer called "f.c", but `C-x b f.c M-RET' will select the existing
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
72 ;; buffer whose name matches that pattern (perhaps "filing.c").
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
73 ;; (PC-meta-flag does not affect this behavior; M-RET used to be
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
74 ;; undefined in this situation.)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75 ;;
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
76 ;; The regular M-TAB (lisp-complete-symbol) command also supports
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77 ;; partial completion in this package.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
78
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79 ;; In addition, this package includes a feature for accessing include
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
80 ;; files. For example, `C-x C-f <sys/time.h> RET' reads the file
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
81 ;; /usr/include/sys/time.h. The variable PC-include-file-path is a
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
82 ;; list of directories in which to search for include files. Completion
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
83 ;; is supported in include file names.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
84
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
85
7942
bc5dccc5375f Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 7844
diff changeset
86 ;;; Code:
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
134
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
2b2091de06c3 (PC-goto-end): New variable.
Glenn Morris <rgm@gnu.org>
parents: 76787
diff changeset
184 (defvar PC-goto-end nil
2b2091de06c3 (PC-goto-end): New variable.
Glenn Morris <rgm@gnu.org>
parents: 76787
diff changeset
185 "Internal variable set in `PC-do-completion', used in
2b2091de06c3 (PC-goto-end): New variable.
Glenn Morris <rgm@gnu.org>
parents: 76787
diff changeset
186 `choose-completion-string-functions'.")
2b2091de06c3 (PC-goto-end): New variable.
Glenn Morris <rgm@gnu.org>
parents: 76787
diff changeset
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
2b2091de06c3 (PC-goto-end): New variable.
Glenn Morris <rgm@gnu.org>
parents: 76787
diff changeset
235 ;; When completing M-: (lisp- ) with point before the ), it is
2b2091de06c3 (PC-goto-end): New variable.
Glenn Morris <rgm@gnu.org>
parents: 76787
diff changeset
236 ;; not appropriate to go to point-max (unlike the filename case).
2b2091de06c3 (PC-goto-end): New variable.
Glenn Morris <rgm@gnu.org>
parents: 76787
diff changeset
237 (if (and (not PC-goto-end)
2b2091de06c3 (PC-goto-end): New variable.
Glenn Morris <rgm@gnu.org>
parents: 76787
diff changeset
238 mini-p)
2b2091de06c3 (PC-goto-end): New variable.
Glenn Morris <rgm@gnu.org>
parents: 76787
diff changeset
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
2b2091de06c3 (PC-goto-end): New variable.
Glenn Morris <rgm@gnu.org>
parents: 76787
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
256 (defun PC-complete ()
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
257 "Like minibuffer-complete, but allows \"b--di\"-style abbreviations.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
258 For example, \"M-x b--di\" would match `byte-recompile-directory', or any
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
259 name which consists of three or more words, the first beginning with \"b\"
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
260 and the third beginning with \"di\".
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
261
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
262 The pattern \"b--d\" is ambiguous for `byte-recompile-directory' and
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
263 `beginning-of-defun', so this would produce a list of completions
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
264 just like when normal Emacs completions are ambiguous.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
265
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
266 Word-delimiters for the purposes of Partial Completion are \"-\", \"_\",
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
267 \".\", and SPC."
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
268 (interactive)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
269 (if (PC-was-meta-key)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
285
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
286
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287 (defun PC-complete-word ()
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
288 "Like `minibuffer-complete-word', but allows \"b--di\"-style abbreviations.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
289 See `PC-complete' for details.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290 This can be bound to other keys, like `-' and `.', if you wish."
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
291 (interactive)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
292 (if (eq (PC-was-meta-key) PC-meta-flag)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
293 (if (eq last-command-char ? )
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
294 (minibuffer-complete-word)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
295 (self-insert-command 1))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
296 (self-insert-command 1)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
297 (if (eobp)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298 (PC-do-completion 'word))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
299
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
300
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
301 (defun PC-complete-space ()
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
302 "Like `minibuffer-complete-word', but allows \"b--di\"-style abbreviations.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
303 See `PC-complete' for details.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
304 This is suitable for binding to other keys which should act just like SPC."
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
305 (interactive)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
306 (if (eq (PC-was-meta-key) PC-meta-flag)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
307 (minibuffer-complete-word)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
308 (insert " ")
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
309 (if (eobp)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
310 (PC-do-completion 'word))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
311
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
312
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
313 (defun PC-complete-and-exit ()
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
314 "Like `minibuffer-complete-and-exit', but allows \"b--di\"-style abbreviations.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
315 See `PC-complete' for details."
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
316 (interactive)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
317 (if (eq (PC-was-meta-key) PC-meta-flag)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
318 (minibuffer-complete-and-exit)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
319 (PC-do-complete-and-exit)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
320
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
321 (defun PC-force-complete-and-exit ()
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
322 "Like `minibuffer-complete-and-exit', but allows \"b--di\"-style abbreviations.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
323 See `PC-complete' for details."
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
324 (interactive)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
325 (let ((minibuffer-completion-confirm nil))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
326 (PC-do-complete-and-exit)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
327
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
341 (let ((flag (PC-do-completion 'exit)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
342 (and flag
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
343 (if (or (eq flag 'complete)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
344 (not minibuffer-completion-confirm))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
347
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
348
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
349 (defun PC-completion-help ()
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
350 "Like `minibuffer-completion-help', but allows \"b--di\"-style abbreviations.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
351 See `PC-complete' for details."
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
352 (interactive)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
353 (if (eq (PC-was-meta-key) PC-meta-flag)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
354 (minibuffer-completion-help)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
355 (PC-do-completion 'help)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
356
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
357 (defun PC-was-meta-key ()
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
358 (or (/= (length (this-command-keys)) 1)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
359 (let ((key (aref (this-command-keys) 0)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
360 (if (integerp key)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
361 (>= key 128)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
362 (not (null (memq 'meta (event-modifiers key))))))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
363
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
364
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
365 (defvar PC-ignored-extensions 'empty-cache)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
366 (defvar PC-delims 'empty-cache)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
367 (defvar PC-ignored-regexp nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
368 (defvar PC-word-failed-flag nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
369 (defvar PC-delim-regex nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
370 (defvar PC-ndelims-regex nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
371 (defvar PC-delims-list nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
2b2091de06c3 (PC-goto-end): New variable.
Glenn Morris <rgm@gnu.org>
parents: 76787
diff changeset
425 ;; TODO document MODE magic...
2b2091de06c3 (PC-goto-end): New variable.
Glenn Morris <rgm@gnu.org>
parents: 76787
diff changeset
426 (defun PC-do-completion (&optional mode beg end goto-end)
2b2091de06c3 (PC-goto-end): New variable.
Glenn Morris <rgm@gnu.org>
parents: 76787
diff changeset
427 "Internal function to do the work of partial completion.
2b2091de06c3 (PC-goto-end): New variable.
Glenn Morris <rgm@gnu.org>
parents: 76787
diff changeset
428 Text to be completed lies between BEG and END. Normally when
2b2091de06c3 (PC-goto-end): New variable.
Glenn Morris <rgm@gnu.org>
parents: 76787
diff changeset
429 replacing text in the minibuffer, this function replaces up to
2b2091de06c3 (PC-goto-end): New variable.
Glenn Morris <rgm@gnu.org>
parents: 76787
diff changeset
430 point-max (as is appropriate for completing a file name). If
2b2091de06c3 (PC-goto-end): New variable.
Glenn Morris <rgm@gnu.org>
parents: 76787
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
444 (str (buffer-substring beg end))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
445 (incname (and filename (string-match "<\\([^\"<>]*\\)>?$" str)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
449 regex
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
452 (poss nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
453 helpposs
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
454 (case-fold-search completion-ignore-case))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
455
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
456 ;; Check if buffer contents can already be considered complete
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
460
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
461 ;; Do substitutions in directory names
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
474 ;; Prepare various delimiter strings
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
475 (or (equal PC-word-delimiters PC-delims)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
476 (setq PC-delims PC-word-delimiters
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
477 PC-delim-regex (concat "[" PC-delims "]")
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
478 PC-ndelims-regex (concat "[^" PC-delims "]*")
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
479 PC-delims-list (append PC-delims nil)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
497 ;; Look for wildcard expansions in directory name
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
498 (and filename
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
499 (string-match "\\*.*/" str)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
504 files)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
505 (setq p (1+ (string-match "/[^/]*\\'" pat)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
506 (while (setq p (string-match PC-delim-regex pat p))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
507 (setq pat (concat (substring pat 0 p)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
508 "*"
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
509 (substring pat p))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
512 (if files
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
513 (let ((dir (file-name-directory (car files)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
514 (p files))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
515 (while (and (setq p (cdr p))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
516 (equal dir (file-name-directory (car p)))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
520 ambig t)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
521 (delete-region beg end)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
522 (setq str (concat dir (file-name-nondirectory str)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
523 (insert str)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
534
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
535 ;; Strip directory name if appropriate
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
536 (if filename
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
537 (if incname
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
538 (setq basestr (substring str incname)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
539 dirname (substring str 0 incname))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
546 (setq basestr str))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
547
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
548 ;; Convert search pattern to a standard regular expression
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
549 (setq regex (regexp-quote basestr)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
550 offset (if (and (> (length regex) 0)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
551 (not (eq (aref basestr 0) ?\*))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
552 (or (eq PC-first-char t)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
553 (and PC-first-char filename))) 1 0)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
554 p offset)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
555 (while (setq p (string-match PC-delim-regex regex p))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
556 (if (eq (aref regex p) ? )
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
557 (setq regex (concat (substring regex 0 p)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
558 PC-ndelims-regex
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
559 PC-delim-regex
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
560 (substring regex (1+ p)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
561 p (+ p (length PC-ndelims-regex) (length PC-delim-regex)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
562 (let ((bump (if (memq (aref regex p)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
563 '(?$ ?^ ?\. ?* ?+ ?? ?[ ?] ?\\))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
564 -1 0)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
565 (setq regex (concat (substring regex 0 (+ p bump))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
566 PC-ndelims-regex
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
567 (substring regex (+ p bump)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
568 p (+ p (length PC-ndelims-regex) 1)))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
569 (setq p 0)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
570 (if filename
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
571 (while (setq p (string-match "\\\\\\*" regex p))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
572 (setq regex (concat (substring regex 0 p)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
573 "[^/]*"
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
574 (substring regex (+ p 2))))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
575 ;;(setq the-regex regex)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
576 (setq regex (concat "\\`" regex))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
586 (if filename "\\|\\*" ""))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
589
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
592 table
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
624 ;; Use all-completions to do an initial cull. This is a big win,
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
644 (while p
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
684 (cond
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
685
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
686 ;; No valid completions found
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
687 ((null poss)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
688 (if (and (eq mode 'word)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
689 (not PC-word-failed-flag))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
690 (let ((PC-word-failed-flag t))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
691 (delete-backward-char 1)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
696 (beep)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
702 nil))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
703
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
704 ;; More than one valid completion found
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
705 ((or (cdr (setq helpposs poss))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
706 (memq mode '(help word)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
707
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
708 ;; Is the actual string one of the possible completions?
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
709 (setq p (and (not (eq mode 'help)) poss))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
719
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
720 ;; If ambiguous, try for a partial completion
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
721 (let ((improved nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
722 prefix
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
723 (pt nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
724 (skip "\\`"))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
726 ;; Check if next few letters are the same in all cases
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
733 (if (eq mode 'word)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
734 (setq prefix (PC-chop-word prefix basestr)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
735 (goto-char (+ beg (length dirname)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
738 (while (< i (length prefix))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
743 (forward-char 1)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
749 (progn
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
763 (looking-at PC-delim-regex))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
764 (setq skip (concat skip
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
765 (regexp-quote prefix)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
778 poss)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
779 (or (> i 0) (> (length prefix) 0))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
780 (or (not (eq mode 'word))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
781 (and first (> (length prefix) 0)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
782 (setq first nil
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
783 prefix (substring prefix 0 1))))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
784 (goto-char (if (eq mode 'word) end
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
785 (or pt beg)))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
786
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
787 (if (and (eq mode 'word)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
788 (not PC-word-failed-flag))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
789
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
790 (if improved
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
791
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
795 (delete-region (1- end) end)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
796
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
797 (if improved
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
798
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
799 ;; We changed it... enough to be complete?
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
802
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
838
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
839 ;; Only one possible completion
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
851 t)))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
852
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
853 (defun PC-chop-word (new old)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
854 (let ((i -1)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
855 (j -1))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
856 (while (and (setq i (string-match PC-delim-regex old (1+ i)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
857 (setq j (string-match PC-delim-regex new (1+ j)))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
858 (if (and j
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
859 (or (not PC-word-failed-flag)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
860 (setq j (string-match PC-delim-regex new (1+ j)))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
861 (substring new 0 (1+ j))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
862 new)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
863
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
864 (defvar PC-not-minibuffer nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
890
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
891 (defun PC-lisp-complete-symbol ()
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
892 "Perform completion on Lisp symbol preceding point.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
893 That symbol is compared against the symbols that exist
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
894 and any additional characters determined by what is there
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
895 are inserted.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
896 If the symbol starts just after an open-parenthesis,
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
897 only symbols with function definitions are considered.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
898 Otherwise, all symbols with function definitions, values
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
899 or properties are considered."
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
912 (minibuffer-completion-table obarray)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
913 (minibuffer-completion-predicate
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
914 (if (eq (char-after (1- beg)) ?\()
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
915 'fboundp
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
916 (function (lambda (sym)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
917 (or (boundp sym) (fboundp sym)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
918 (symbol-plist sym))))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
2b2091de06c3 (PC-goto-end): New variable.
Glenn Morris <rgm@gnu.org>
parents: 76787
diff changeset
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
2b2091de06c3 (PC-goto-end): New variable.
Glenn Morris <rgm@gnu.org>
parents: 76787
diff changeset
952 (PC-do-completion nil beg end t))))
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
972
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
973 (defun PC-look-for-include-file ()
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
974 (if (string-match "[\"<]\\([^\"<>]*\\)[\">]?$" (buffer-file-name))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
975 (let ((name (substring (buffer-file-name)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
976 (match-beginning 1) (match-end 1)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
977 (punc (aref (buffer-file-name) (match-beginning 0)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
978 (path nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
979 new-buf)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
980 (kill-buffer (current-buffer))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
983 (save-excursion
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
984 (beginning-of-line)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
985 (if (looking-at
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
986 "[ \t]*#[ \t]*include[ \t]+[<\"]\\(.+\\)[>\"][ \t]*[\n/]")
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
987 (setq name (buffer-substring (match-beginning 1)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
988 (match-end 1))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
989 punc (char-after (1- (match-beginning 1))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
990 ;; Suggested by Frank Siebenlist:
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
991 (if (or (looking-at
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
992 "[ \t]*([ \t]*load[ \t]+\"\\([^\"]+\\)\"")
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
993 (looking-at
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
994 "[ \t]*([ \t]*load-library[ \t]+\"\\([^\"]+\\)\"")
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
995 (looking-at
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
996 "[ \t]*([ \t]*require[ \t]+'\\([^\t )]+\\)[\t )]"))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
997 (progn
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
998 (setq name (buffer-substring (match-beginning 1)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
999 (match-end 1))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1000 punc ?\<
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1001 path load-path)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1002 (if (string-match "\\.elc$" name)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1003 (setq name (substring name 0 -1))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1004 (or (string-match "\\.el$" name)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1005 (setq name (concat name ".el")))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1008 (setq name (concat name ".h")))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1009 (if (eq punc ?\<)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1010 (let ((path (or path (PC-include-file-path))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1011 (while (and path
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1012 (not (file-exists-p
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1013 (concat (file-name-as-directory (car path))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1014 name))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1015 (setq path (cdr path)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1016 (if path
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1017 (setq name (concat (file-name-as-directory (car path)) name))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1020 default-directory)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1021 (if (file-exists-p (concat dir name))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1024 (setq new-buf (get-file-buffer name))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1025 (if new-buf
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1026 ;; no need to verify last-modified time for this!
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1029 (erase-buffer)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1033 t)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1034 nil))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1035
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1036 (defun PC-include-file-path ()
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1037 (or PC-include-file-path
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1038 (let ((env (getenv "INCPATH"))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1039 (path nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1040 pos)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1041 (or env (error "No include file path specified"))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1042 (while (setq pos (string-match ":[^:]+$" env))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1043 (setq path (cons (substring env (1+ pos)) path)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1044 env (substring env 0 pos)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1045 path)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1048 (defun PC-include-file-all-completions (file search-path &optional full)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1051 absolute rather than relative to some directory on the SEARCH-PATH."
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1055 search-path))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1056 (if (file-name-absolute-p file)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1057 ;; It's an absolute file name, so don't need search-path
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1058 (progn
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1061 (file-name-nondirectory file) (file-name-directory file)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1062 (let ((subdir (file-name-directory file))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1063 (ndfile (file-name-nondirectory file))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1064 file-lists)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1065 ;; Append subdirectory part to each element of search-path
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1066 (if subdir
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1069 search-path)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1070 file ))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1071 ;; Make list of completions in each directory on search-path
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1072 (while search-path
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1073 (let* ((dir (car search-path))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1074 (subdir (if full dir subdir)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1075 (if (file-directory-p dir)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1076 (progn
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1081 (car search-path)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1082 file-lists))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1083 (setq search-path (cdr search-path))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1084 ;; Compress out duplicates while building complete list (slloooow!)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1087 compressed)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1088 (while sorted
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1089 (if (equal (car sorted) (car compressed)) nil
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1090 (setq compressed (cons (car sorted) compressed)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1091 (setq sorted (cdr sorted)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1092 compressed))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1099 (str2 (substring string (match-beginning 0)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1103 (PC-include-file-all-completions
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1112
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1113 (provide 'complete)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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