annotate lisp/complete.el @ 51242:661e2fe7e775

(autoconf-mode setups): Recognise AH_ and AU_ entries in "(autoconf)Autoconf Macro Index". Add "(autoconf)M4 Macro Index" and "(autoconf)Autotest Macro Index". Remove duplicate copy of "(automake)Macro and Variable Index". Keep automake after all autoconf possibilities, so as to prefer those.
author Juanma Barranquero <lekktu@gmail.com>
date Sun, 25 May 2003 21:03:57 +0000
parents 79a38ce36eb1
children 695cf19ef79e d7ddb3e565de
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
29674
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
3 ;; Copyright (C) 1990, 1991, 1992, 1993, 1999, 2000
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
4 ;; 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
6736
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 3725
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
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
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 3725
diff changeset
14 ;; the Free Software Foundation; either version 2, or (at your option)
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 3725
diff changeset
15 ;; 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
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13337
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13337
diff changeset
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13337
diff changeset
25 ;; Boston, MA 02111-1307, USA.
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26
7942
bc5dccc5375f Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 7844
diff changeset
27 ;;; Commentary:
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
28
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29 ;; Extended completion for the Emacs minibuffer.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
30 ;;
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
31 ;; The basic idea is that the command name or other completable text is
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
32 ;; divided into words and each word is completed separately, so that
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
33 ;; "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
34 ;; each word is completed as much as possible and then the cursor is
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35 ;; left at the first position where typing another letter will resolve
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
36 ;; the ambiguity.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37 ;;
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38 ;; Word separators for this purpose are hyphen, space, and period.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39 ;; These would most likely occur in command names, Info menu items,
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
40 ;; and file names, respectively. But all word separators are treated
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
41 ;; alike at all times.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42 ;;
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43 ;; This completion package replaces the old-style completer's key
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
44 ;; bindings for TAB, SPC, RET, and `?'. The old completer is still
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
45 ;; available on the Meta versions of those keys. If you set
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46 ;; PC-meta-flag to nil, the old completion keys will be left alone
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47 ;; and the partial completer will use the Meta versions of the keys.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
48
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
49
22142
a63710b545db Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 21266
diff changeset
50 ;; Usage: M-x partial-completion-mode. During completable minibuffer entry,
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
51 ;;
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52 ;; TAB means to do a partial completion;
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53 ;; SPC means to do a partial complete-word;
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
54 ;; RET means to do a partial complete-and-exit;
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
55 ;; ? means to do a partial completion-help.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
56 ;;
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
57 ;; 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
58 ;; original Emacs completions, and M-TAB etc. do partial completion.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
59 ;; To do this, put the command,
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
60 ;;
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
61 ;; (setq PC-meta-flag nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62 ;;
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63 ;; in your .emacs file. To load partial completion automatically, put
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
64 ;;
22142
a63710b545db Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 21266
diff changeset
65 ;; (partial-completion-mode t)
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66 ;;
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67 ;; in your .emacs file, too. Things will be faster if you byte-compile
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
68 ;; this file when you install it.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69 ;;
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
70 ;; As an extra feature, in cases where RET would not normally
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
71 ;; 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
72 ;; 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
73 ;; 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
74 ;; buffer whose name matches that pattern (perhaps "filing.c").
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75 ;; (PC-meta-flag does not affect this behavior; M-RET used to be
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
76 ;; undefined in this situation.)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77 ;;
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
78 ;; The regular M-TAB (lisp-complete-symbol) command also supports
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79 ;; partial completion in this package.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
80
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
81 ;; In addition, this package includes a feature for accessing include
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
82 ;; 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
83 ;; /usr/include/sys/time.h. The variable PC-include-file-path is a
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
84 ;; list of directories in which to search for include files. Completion
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
85 ;; is supported in include file names.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
86
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
87
7942
bc5dccc5375f Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 7844
diff changeset
88 ;;; Code:
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
89
18981
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
90 (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
91 "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
92 :prefix "pc-"
22250
a77d473867b8 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22142
diff changeset
93 :group 'minibuffer
a77d473867b8 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22142
diff changeset
94 :group 'convenience)
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
95
18981
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
96 (defcustom PC-first-char 'find-file
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
97 "*Control how the first character of a string is to be interpreted.
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
98 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
99 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 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
101 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
102 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
103 completion."
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
104 :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
105 (const :tag "literal" t)
22570
6cfe82c80677 (PC-first-char): Use `other' widget type.
Andreas Schwab <schwab@suse.de>
parents: 22250
diff changeset
106 (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
107 :group 'partial-completion)
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
108
18981
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
109 (defcustom PC-meta-flag t
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
110 "*If non-nil, TAB means PC completion and M-TAB means normal completion.
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
111 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
112 :type 'boolean
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
113 :group 'partial-completion)
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
114
18981
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
115 (defcustom PC-word-delimiters "-_. "
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
116 "*A string of characters treated as word delimiters for completion.
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
117 Some arcane rules:
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.
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
119 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
120 If `-' is in this string, it must come first or right after `]'.
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
121 In other words, if S is this string, then `[S]' must be a legal Emacs regular
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
122 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
123 :type 'string
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
124 :group 'partial-completion)
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125
18981
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
126 (defcustom PC-include-file-path '("/usr/include" "/usr/local/include")
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
127 "*A list of directories in which to look for include files.
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
128 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
129 :type '(repeat directory)
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
130 :group 'partial-completion)
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131
18981
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
132 (defcustom PC-disable-includes nil
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
133 "*If non-nil, include-file support in \\[find-file] is disabled."
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
134 :type 'boolean
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
135 :group 'partial-completion)
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
136
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137 (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
138 "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
139
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
140 (defvar PC-env-vars-alist nil
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
141 "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
142
18981
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
143
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
144 (defvar PC-old-read-file-name-internal nil)
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
145
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
146 (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
147 (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
148 (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
149 (cond ((not bind)
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
150 ;; 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
151 ;; restore the previous bindings.
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 "\t" 'minibuffer-complete)
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
153 (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
154 (define-key completion-map "?" 'minibuffer-completion-help)
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
155
18981
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
156 (define-key must-match-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
157 (define-key must-match-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
158 (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
159 (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
160 (define-key must-match-map "?" 'minibuffer-completion-help)
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
161
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
162 (define-key global-map "\e\t" 'complete-symbol))
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
163 (PC-default-bindings
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
164 (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
165 (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
166 (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
167
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\t" 'PC-complete)
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-complete-word)
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
170 (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
171 (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
172 (define-key completion-map "\e?" 'PC-completion-help)
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173
18981
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 "\t" 'PC-complete)
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 " " 'PC-complete-word)
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
176 (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
177 (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
178 (define-key must-match-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
179
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
180 (define-key must-match-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
181 (define-key must-match-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
182 (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
183 (define-key must-match-map "\e\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
184 (define-key must-match-map "\e?" 'PC-completion-help)
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
185
18981
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
186 (define-key global-map "\e\t" 'PC-lisp-complete-symbol)))))
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
187
31971
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
188 ;;;###autoload
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
189 (define-minor-mode partial-completion-mode
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
190 "Toggle Partial Completion mode.
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
191 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
192
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
193 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
194 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
195 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
196 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
197
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
198 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
199 command begins with that sequence of characters, and
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
200 \\[find-file] f_b.c TAB might complete to foo_bar.c if that file existed and no
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
201 other file in that directory begin with that sequence of characters.
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
202
36033
0a150990aa8c (partial-completion-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 33183
diff changeset
203 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
204 specially in \\[find-file]. For example,
36033
0a150990aa8c (partial-completion-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 33183
diff changeset
205 \\[find-file] <sys/time.h> RET finds the file `/usr/include/sys/time.h'.
31971
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
206 See also the variable `PC-include-file-path'."
33183
1988cb3ecd2f (partial-completion-mode): Drop unneeded positional args.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31971
diff changeset
207 :global t :group 'partial-completion
31971
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
208 ;; Deal with key bindings...
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
209 (PC-bindings partial-completion-mode)
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
210 ;; Deal with include file feature...
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
211 (cond ((not partial-completion-mode)
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
212 (remove-hook 'find-file-not-found-hooks 'PC-look-for-include-file))
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
213 ((not PC-disable-includes)
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
214 (add-hook 'find-file-not-found-hooks 'PC-look-for-include-file)))
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
215 ;; ... with some underhand redefining.
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
216 (cond ((and (not partial-completion-mode)
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
217 (functionp PC-old-read-file-name-internal))
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
218 (fset 'read-file-name-internal PC-old-read-file-name-internal))
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
219 ((and (not PC-disable-includes) (not PC-old-read-file-name-internal))
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
220 (setq PC-old-read-file-name-internal
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
221 (symbol-function 'read-file-name-internal))
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
222 (fset 'read-file-name-internal
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
223 'PC-read-include-file-name-internal)))
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
224 (when (and partial-completion-mode (null PC-env-vars-alist))
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
225 (setq PC-env-vars-alist
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
226 (mapcar (lambda (string)
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
227 (let ((d (string-match "=" string)))
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
228 (cons (concat "$" (substring string 0 d))
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
229 (and d (substring string (1+ d))))))
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
230 process-environment))))
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
231
18981
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
232
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
233 (defun PC-complete ()
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
234 "Like minibuffer-complete, but allows \"b--di\"-style abbreviations.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
235 For example, \"M-x b--di\" would match `byte-recompile-directory', or any
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
236 name which consists of three or more words, the first beginning with \"b\"
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
237 and the third beginning with \"di\".
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
238
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239 The pattern \"b--d\" is ambiguous for `byte-recompile-directory' and
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
240 `beginning-of-defun', so this would produce a list of completions
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
241 just like when normal Emacs completions are ambiguous.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
242
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
243 Word-delimiters for the purposes of Partial Completion are \"-\", \"_\",
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244 \".\", and SPC."
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245 (interactive)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
246 (if (PC-was-meta-key)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
247 (minibuffer-complete)
15802
1595df9ed1e8 (PC-complete): When command is repeated,
Richard M. Stallman <rms@gnu.org>
parents: 15261
diff changeset
248 ;; 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
249 ;; never scroll, always retry completion.
1595df9ed1e8 (PC-complete): When command is repeated,
Richard M. Stallman <rms@gnu.org>
parents: 15261
diff changeset
250 (or (eq last-command this-command)
1595df9ed1e8 (PC-complete): When command is repeated,
Richard M. Stallman <rms@gnu.org>
parents: 15261
diff changeset
251 (setq minibuffer-scroll-window nil))
1595df9ed1e8 (PC-complete): When command is repeated,
Richard M. Stallman <rms@gnu.org>
parents: 15261
diff changeset
252 (let ((window minibuffer-scroll-window))
1595df9ed1e8 (PC-complete): When command is repeated,
Richard M. Stallman <rms@gnu.org>
parents: 15261
diff changeset
253 ;; 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
254 ;; 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
255 (if (and window (window-buffer window)
1595df9ed1e8 (PC-complete): When command is repeated,
Richard M. Stallman <rms@gnu.org>
parents: 15261
diff changeset
256 (buffer-name (window-buffer window)))
1595df9ed1e8 (PC-complete): When command is repeated,
Richard M. Stallman <rms@gnu.org>
parents: 15261
diff changeset
257 (save-excursion
1595df9ed1e8 (PC-complete): When command is repeated,
Richard M. Stallman <rms@gnu.org>
parents: 15261
diff changeset
258 (set-buffer (window-buffer window))
1595df9ed1e8 (PC-complete): When command is repeated,
Richard M. Stallman <rms@gnu.org>
parents: 15261
diff changeset
259 (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
260 (set-window-start window (point-min) nil)
1595df9ed1e8 (PC-complete): When command is repeated,
Richard M. Stallman <rms@gnu.org>
parents: 15261
diff changeset
261 (scroll-other-window)))
1595df9ed1e8 (PC-complete): When command is repeated,
Richard M. Stallman <rms@gnu.org>
parents: 15261
diff changeset
262 (PC-do-completion nil)))))
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
263
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
264
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
265 (defun PC-complete-word ()
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
266 "Like `minibuffer-complete-word', but allows \"b--di\"-style abbreviations.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
267 See `PC-complete' for details.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
268 This can be bound to other keys, like `-' and `.', if you wish."
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
269 (interactive)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
270 (if (eq (PC-was-meta-key) PC-meta-flag)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
271 (if (eq last-command-char ? )
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
272 (minibuffer-complete-word)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
273 (self-insert-command 1))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
274 (self-insert-command 1)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
275 (if (eobp)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
276 (PC-do-completion 'word))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
277
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
278
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
279 (defun PC-complete-space ()
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
280 "Like `minibuffer-complete-word', but allows \"b--di\"-style abbreviations.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
281 See `PC-complete' for details.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
282 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
283 (interactive)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
284 (if (eq (PC-was-meta-key) PC-meta-flag)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
285 (minibuffer-complete-word)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
286 (insert " ")
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287 (if (eobp)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
288 (PC-do-completion 'word))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
289
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
291 (defun PC-complete-and-exit ()
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
292 "Like `minibuffer-complete-and-exit', but allows \"b--di\"-style abbreviations.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
293 See `PC-complete' for details."
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
294 (interactive)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
295 (if (eq (PC-was-meta-key) PC-meta-flag)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
296 (minibuffer-complete-and-exit)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
297 (PC-do-complete-and-exit)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
299 (defun PC-force-complete-and-exit ()
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
300 "Like `minibuffer-complete-and-exit', but allows \"b--di\"-style abbreviations.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
301 See `PC-complete' for details."
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
302 (interactive)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
303 (let ((minibuffer-completion-confirm nil))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
304 (PC-do-complete-and-exit)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
305
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
306 (defun PC-do-complete-and-exit ()
26508
8548cb8ad6e2 (PC-do-complete-and-exit): use minibuffer-prompt-end to
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26341
diff changeset
307 (if (= (point-max) (minibuffer-prompt-end)) ; Duplicate the "bug" that Info-menu relies on...
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
308 (exit-minibuffer)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
309 (let ((flag (PC-do-completion 'exit)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
310 (and flag
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
311 (if (or (eq flag 'complete)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
312 (not minibuffer-completion-confirm))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
313 (exit-minibuffer)
10164
d16e46a4e34c (PC-do-completion): If complete but not unique,
Richard M. Stallman <rms@gnu.org>
parents: 8478
diff changeset
314 (PC-temp-minibuffer-message " [Confirm]"))))))
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
315
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
316
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
317 (defun PC-completion-help ()
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
318 "Like `minibuffer-completion-help', but allows \"b--di\"-style abbreviations.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
319 See `PC-complete' for details."
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
320 (interactive)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
321 (if (eq (PC-was-meta-key) PC-meta-flag)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
322 (minibuffer-completion-help)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
323 (PC-do-completion 'help)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
324
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
325 (defun PC-was-meta-key ()
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
326 (or (/= (length (this-command-keys)) 1)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
327 (let ((key (aref (this-command-keys) 0)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
328 (if (integerp key)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
329 (>= key 128)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
330 (not (null (memq 'meta (event-modifiers key))))))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
331
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
332
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
333 (defvar PC-ignored-extensions 'empty-cache)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
334 (defvar PC-delims 'empty-cache)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
335 (defvar PC-ignored-regexp nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
336 (defvar PC-word-failed-flag nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
337 (defvar PC-delim-regex nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
338 (defvar PC-ndelims-regex nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
339 (defvar PC-delims-list nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
340
14765
844686eabff0 (PC-completion-as-file-name-predicate):
Richard M. Stallman <rms@gnu.org>
parents: 14759
diff changeset
341 (defvar PC-completion-as-file-name-predicate
844686eabff0 (PC-completion-as-file-name-predicate):
Richard M. Stallman <rms@gnu.org>
parents: 14759
diff changeset
342 (function
844686eabff0 (PC-completion-as-file-name-predicate):
Richard M. Stallman <rms@gnu.org>
parents: 14759
diff changeset
343 (lambda ()
844686eabff0 (PC-completion-as-file-name-predicate):
Richard M. Stallman <rms@gnu.org>
parents: 14759
diff changeset
344 (memq minibuffer-completion-table
844686eabff0 (PC-completion-as-file-name-predicate):
Richard M. Stallman <rms@gnu.org>
parents: 14759
diff changeset
345 '(read-file-name-internal read-directory-name-internal))))
844686eabff0 (PC-completion-as-file-name-predicate):
Richard M. Stallman <rms@gnu.org>
parents: 14759
diff changeset
346 "A function testing whether a minibuffer completion now will work filename-style.
844686eabff0 (PC-completion-as-file-name-predicate):
Richard M. Stallman <rms@gnu.org>
parents: 14759
diff changeset
347 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
348 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
349
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
350 (defun PC-do-completion (&optional mode beg end)
26341
6063383b77d5 (PC-do-completion): Use minibuffer-prompt-end to
Gerd Moellmann <gerd@gnu.org>
parents: 25207
diff changeset
351 (or beg (setq beg (minibuffer-prompt-end)))
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
352 (or end (setq end (point-max)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
353 (let* ((table minibuffer-completion-table)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
354 (pred minibuffer-completion-predicate)
14765
844686eabff0 (PC-completion-as-file-name-predicate):
Richard M. Stallman <rms@gnu.org>
parents: 14759
diff changeset
355 (filename (funcall PC-completion-as-file-name-predicate))
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
356 (dirname nil)
29674
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
357 (dirlength 0)
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
358 (str (buffer-substring beg end))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
359 (incname (and filename (string-match "<\\([^\"<>]*\\)>?$" str)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
360 (ambig nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
361 basestr
29674
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
362 env-on
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
363 regex
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
364 p offset
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
365 (poss nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
366 helpposs
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
367 (case-fold-search completion-ignore-case))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
368
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
369 ;; Check if buffer contents can already be considered complete
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
370 (if (and (eq mode 'exit)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
371 (PC-is-complete-p str table pred))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
372 'complete
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
373
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
374 ;; Do substitutions in directory names
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
375 (and filename
29674
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
376 (setq basestr (or (file-name-directory str) ""))
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
377 (setq dirlength (length basestr))
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
378 ;; Do substitutions in directory names
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
379 (setq p (substitute-in-file-name basestr))
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
380 (not (string-equal basestr p))
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
381 (setq str (concat p (file-name-nondirectory str)))
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
382 (progn
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
383 (delete-region beg end)
29674
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
384 (insert str)
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
385 (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
386
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
387 ;; Prepare various delimiter strings
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
388 (or (equal PC-word-delimiters PC-delims)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
389 (setq PC-delims PC-word-delimiters
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
390 PC-delim-regex (concat "[" PC-delims "]")
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
391 PC-ndelims-regex (concat "[^" PC-delims "]*")
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
392 PC-delims-list (append PC-delims nil)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
393
48225
75ced2cd606e (PC-do-completion): Make partial-completion work
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38436
diff changeset
394 ;; 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
395 (and filename
79a38ce36eb1 (PC-do-completion): Do not add wildcards to pattern unless filename is
Noah Friedman <friedman@splode.com>
parents: 48225
diff changeset
396 (let ((dir (file-name-directory str))
79a38ce36eb1 (PC-do-completion): Do not add wildcards to pattern unless filename is
Noah Friedman <friedman@splode.com>
parents: 48225
diff changeset
397 (file (file-name-nondirectory str)))
79a38ce36eb1 (PC-do-completion): Do not add wildcards to pattern unless filename is
Noah Friedman <friedman@splode.com>
parents: 48225
diff changeset
398 (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
399 (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
400 (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
401 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
402 (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
403 "*/" file))
79a38ce36eb1 (PC-do-completion): Do not add wildcards to pattern unless filename is
Noah Friedman <friedman@splode.com>
parents: 48225
diff changeset
404 (setq dir (file-name-directory dir)))
79a38ce36eb1 (PC-do-completion): Do not add wildcards to pattern unless filename is
Noah Friedman <friedman@splode.com>
parents: 48225
diff changeset
405 (setq str (concat dir file))))
79a38ce36eb1 (PC-do-completion): Do not add wildcards to pattern unless filename is
Noah Friedman <friedman@splode.com>
parents: 48225
diff changeset
406
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
407 ;; Look for wildcard expansions in directory name
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
408 (and filename
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
409 (string-match "\\*.*/" str)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
410 (let ((pat str)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
411 files)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
412 (setq p (1+ (string-match "/[^/]*\\'" pat)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
413 (while (setq p (string-match PC-delim-regex pat p))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
414 (setq pat (concat (substring pat 0 p)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
415 "*"
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
416 (substring pat p))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
417 p (+ p 2)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
418 (setq files (PC-expand-many-files (concat pat "*")))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
419 (if files
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
420 (let ((dir (file-name-directory (car files)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
421 (p files))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
422 (while (and (setq p (cdr p))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
423 (equal dir (file-name-directory (car p)))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
424 (if p
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
425 (setq filename nil table nil pred nil
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
426 ambig t)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
427 (delete-region beg end)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
428 (setq str (concat dir (file-name-nondirectory str)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
429 (insert str)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
430 (setq end (+ beg (length str)))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
431 (setq filename nil table nil pred nil))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
432
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
433 ;; Strip directory name if appropriate
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
434 (if filename
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
435 (if incname
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
436 (setq basestr (substring str incname)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
437 dirname (substring str 0 incname))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
438 (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
439 dirname (file-name-directory str))
e62d2121822f (PC-do-completion): If completing on file name,
Eli Zaretskii <eliz@gnu.org>
parents: 24624
diff changeset
440 ;; 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
441 ;; 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
442 ;; 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
443 (setq str (concat dirname basestr)))
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
444 (setq basestr str))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
445
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
446 ;; Convert search pattern to a standard regular expression
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
447 (setq regex (regexp-quote basestr)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
448 offset (if (and (> (length regex) 0)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
449 (not (eq (aref basestr 0) ?\*))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
450 (or (eq PC-first-char t)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
451 (and PC-first-char filename))) 1 0)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
452 p offset)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
453 (while (setq p (string-match PC-delim-regex regex p))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
454 (if (eq (aref regex p) ? )
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
455 (setq regex (concat (substring regex 0 p)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
456 PC-ndelims-regex
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
457 PC-delim-regex
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
458 (substring regex (1+ p)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
459 p (+ p (length PC-ndelims-regex) (length PC-delim-regex)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
460 (let ((bump (if (memq (aref regex p)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
461 '(?$ ?^ ?\. ?* ?+ ?? ?[ ?] ?\\))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
462 -1 0)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
463 (setq regex (concat (substring regex 0 (+ p bump))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
464 PC-ndelims-regex
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
465 (substring regex (+ p bump)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
466 p (+ p (length PC-ndelims-regex) 1)))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
467 (setq p 0)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
468 (if filename
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
469 (while (setq p (string-match "\\\\\\*" regex p))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
470 (setq regex (concat (substring regex 0 p)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
471 "[^/]*"
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
472 (substring regex (+ p 2))))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
473 ;;(setq the-regex regex)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
474 (setq regex (concat "\\`" regex))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
475
29674
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
476 (and (> (length basestr) 0)
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
477 (= (aref basestr 0) ?$)
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
478 (setq env-on t
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
479 table PC-env-vars-alist
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
480 pred nil))
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
481
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
482 ;; Find an initial list of possible completions
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
483 (if (not (setq p (string-match (concat PC-delim-regex
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
484 (if filename "\\|\\*" ""))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
485 str
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
486 (+ (length dirname) offset))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
487
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
488 ;; Minibuffer contains no hyphens -- simple case!
29674
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
489 (setq poss (all-completions (if env-on
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
490 basestr str)
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
491 table
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
492 pred))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
493
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
494 ;; Use all-completions to do an initial cull. This is a big win,
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
495 ;; since all-completions is written in C!
29674
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
496 (let ((compl (all-completions (if env-on
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
497 (file-name-nondirectory (substring str 0 p))
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
498 (substring str 0 p))
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
499 table
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
500 pred)))
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
501 (setq p compl)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
502 (while p
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
503 (and (string-match regex (car p))
16608
e2858bcbed43 (PC-do-completion): Remove text properties from
Karl Heuer <kwzh@gnu.org>
parents: 15802
diff changeset
504 (progn
e2858bcbed43 (PC-do-completion): Remove text properties from
Karl Heuer <kwzh@gnu.org>
parents: 15802
diff changeset
505 (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
506 (setq poss (cons (car p) poss))))
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
507 (setq p (cdr 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 ;; Now we have a list of possible completions
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
510 (cond
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
511
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
512 ;; No valid completions found
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
513 ((null poss)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
514 (if (and (eq mode 'word)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
515 (not PC-word-failed-flag))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
516 (let ((PC-word-failed-flag t))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
517 (delete-backward-char 1)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
518 (PC-do-completion 'word))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
519 (beep)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
520 (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
521 " [Ambiguous dir name]"
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
522 (if (eq mode 'help)
10164
d16e46a4e34c (PC-do-completion): If complete but not unique,
Richard M. Stallman <rms@gnu.org>
parents: 8478
diff changeset
523 " [No completions]"
d16e46a4e34c (PC-do-completion): If complete but not unique,
Richard M. Stallman <rms@gnu.org>
parents: 8478
diff changeset
524 " [No match]")))
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
525 nil))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
526
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
527 ;; More than one valid completion found
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
528 ((or (cdr (setq helpposs poss))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
529 (memq mode '(help word)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
530
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
531 ;; Handle completion-ignored-extensions
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
532 (and filename
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
533 (not (eq mode 'help))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
534 (let ((p2 poss))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
535
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
536 ;; Build a regular expression representing the extensions list
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
537 (or (equal completion-ignored-extensions PC-ignored-extensions)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
538 (setq PC-ignored-regexp
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
539 (concat "\\("
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
540 (mapconcat
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
541 'regexp-quote
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
542 (setq PC-ignored-extensions
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
543 completion-ignored-extensions)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
544 "\\|")
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
545 "\\)\\'")))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
546
23009
9ffaa505edc7 (PC-do-completion): Exclude ./ and ../ from completion.
Richard M. Stallman <rms@gnu.org>
parents: 22570
diff changeset
547 ;; Check if there are any without an ignored extension.
9ffaa505edc7 (PC-do-completion): Exclude ./ and ../ from completion.
Richard M. Stallman <rms@gnu.org>
parents: 22570
diff changeset
548 ;; Also ignore `.' and `..'.
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
549 (setq p nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
550 (while p2
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
551 (or (string-match PC-ignored-regexp (car p2))
23009
9ffaa505edc7 (PC-do-completion): Exclude ./ and ../ from completion.
Richard M. Stallman <rms@gnu.org>
parents: 22570
diff changeset
552 (string-match "\\(\\`\\|/\\)[.][.]?/?\\'" (car p2))
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
553 (setq p (cons (car p2) p)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
554 (setq p2 (cdr p2)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
555
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
556 ;; If there are "good" names, use them
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
557 (and p (setq poss p))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
558
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
559 ;; Is the actual string one of the possible completions?
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
560 (setq p (and (not (eq mode 'help)) poss))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
561 (while (and p
16608
e2858bcbed43 (PC-do-completion): Remove text properties from
Karl Heuer <kwzh@gnu.org>
parents: 15802
diff changeset
562 (not (string-equal (car p) basestr)))
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
563 (setq p (cdr p)))
10164
d16e46a4e34c (PC-do-completion): If complete but not unique,
Richard M. Stallman <rms@gnu.org>
parents: 8478
diff changeset
564 (and p (null mode)
d16e46a4e34c (PC-do-completion): If complete but not unique,
Richard M. Stallman <rms@gnu.org>
parents: 8478
diff changeset
565 (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
566 (if (and p
d16e46a4e34c (PC-do-completion): If complete but not unique,
Richard M. Stallman <rms@gnu.org>
parents: 8478
diff changeset
567 (not (and (null mode)
d16e46a4e34c (PC-do-completion): If complete but not unique,
Richard M. Stallman <rms@gnu.org>
parents: 8478
diff changeset
568 (eq this-command last-command))))
d16e46a4e34c (PC-do-completion): If complete but not unique,
Richard M. Stallman <rms@gnu.org>
parents: 8478
diff changeset
569 t
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
570
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
571 ;; If ambiguous, try for a partial completion
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
572 (let ((improved nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
573 prefix
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
574 (pt nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
575 (skip "\\`"))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
576
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
577 ;; Check if next few letters are the same in all cases
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
578 (if (and (not (eq mode 'help))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
579 (setq prefix (try-completion "" (mapcar 'list poss))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
580 (let ((first t) i)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
581 (if (eq mode 'word)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
582 (setq prefix (PC-chop-word prefix basestr)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
583 (goto-char (+ beg (length dirname)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
584 (while (and (progn
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
585 (setq i 0)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
586 (while (< i (length prefix))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
587 (if (and (< (point) end)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
588 (eq (aref prefix i)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
589 (following-char)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
590 (forward-char 1)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
591 (if (and (< (point) end)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
592 (or (and (looking-at " ")
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
593 (memq (aref prefix i)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
594 PC-delims-list))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
595 (eq (downcase (aref prefix i))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
596 (downcase
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
597 (following-char)))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
598 (progn
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
599 (delete-char 1)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
600 (setq end (1- end)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
601 (and filename (looking-at "\\*")
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
602 (progn
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
603 (delete-char 1)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
604 (setq end (1- end))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
605 (setq improved t))
16608
e2858bcbed43 (PC-do-completion): Remove text properties from
Karl Heuer <kwzh@gnu.org>
parents: 15802
diff changeset
606 (insert (substring prefix i (1+ i)))
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
607 (setq end (1+ end)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
608 (setq i (1+ i)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
609 (or pt (equal (point) beg)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
610 (setq pt (point)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
611 (looking-at PC-delim-regex))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
612 (setq skip (concat skip
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
613 (regexp-quote prefix)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
614 PC-ndelims-regex)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
615 prefix (try-completion
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
616 ""
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
617 (mapcar
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
618 (function
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
619 (lambda (x)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
620 (list
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
621 (and (string-match skip x)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
622 (substring
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
623 x
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
624 (match-end 0))))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
625 poss)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
626 (or (> i 0) (> (length prefix) 0))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
627 (or (not (eq mode 'word))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
628 (and first (> (length prefix) 0)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
629 (setq first nil
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
630 prefix (substring prefix 0 1))))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
631 (goto-char (if (eq mode 'word) end
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
632 (or pt beg)))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
633
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
634 (if (and (eq mode 'word)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
635 (not PC-word-failed-flag))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
636
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
637 (if improved
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
638
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
639 ;; We changed it... would it be complete without the space?
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
640 (if (PC-is-complete-p (buffer-substring 1 (1- end))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
641 table pred)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
642 (delete-region (1- end) end)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
643
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
644 (if improved
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
645
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
646 ;; We changed it... enough to be complete?
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
647 (and (eq mode 'exit)
26341
6063383b77d5 (PC-do-completion): Use minibuffer-prompt-end to
Gerd Moellmann <gerd@gnu.org>
parents: 25207
diff changeset
648 (PC-is-complete-p (field-string) table pred))
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
649
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
650 ;; 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
651 (if (or (eq completion-auto-help t)
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
652 (and completion-auto-help
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
653 (eq last-command this-command))
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
654 (eq mode 'help))
7844
86402e8c677b (PC-do-completion): Likewise.
Richard M. Stallman <rms@gnu.org>
parents: 7792
diff changeset
655 (with-output-to-temp-buffer "*Completions*"
8478
9d3d84a3c3fa (PC-do-completion): Set completion-base-size.
Richard M. Stallman <rms@gnu.org>
parents: 7942
diff changeset
656 (display-completion-list (sort helpposs 'string-lessp))
9d3d84a3c3fa (PC-do-completion): Set completion-base-size.
Richard M. Stallman <rms@gnu.org>
parents: 7942
diff changeset
657 (save-excursion
9d3d84a3c3fa (PC-do-completion): Set completion-base-size.
Richard M. Stallman <rms@gnu.org>
parents: 7942
diff changeset
658 (set-buffer standard-output)
9d3d84a3c3fa (PC-do-completion): Set completion-base-size.
Richard M. Stallman <rms@gnu.org>
parents: 7942
diff changeset
659 ;; Record which part of the buffer we are completing
9d3d84a3c3fa (PC-do-completion): Set completion-base-size.
Richard M. Stallman <rms@gnu.org>
parents: 7942
diff changeset
660 ;; so that choosing a completion from the list
9d3d84a3c3fa (PC-do-completion): Set completion-base-size.
Richard M. Stallman <rms@gnu.org>
parents: 7942
diff changeset
661 ;; knows how much old text to replace.
9d3d84a3c3fa (PC-do-completion): Set completion-base-size.
Richard M. Stallman <rms@gnu.org>
parents: 7942
diff changeset
662 (setq completion-base-size dirlength)))
10164
d16e46a4e34c (PC-do-completion): If complete but not unique,
Richard M. Stallman <rms@gnu.org>
parents: 8478
diff changeset
663 (PC-temp-minibuffer-message " [Next char not unique]"))
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
664 nil)))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
665
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
666 ;; Only one possible completion
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
667 (t
29674
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
668 (if (and (equal basestr (car poss))
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
669 (not (and env-on filename)))
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
670 (if (null mode)
10164
d16e46a4e34c (PC-do-completion): If complete but not unique,
Richard M. Stallman <rms@gnu.org>
parents: 8478
diff changeset
671 (PC-temp-minibuffer-message " [Sole completion]"))
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
672 (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
673 (insert (format "%s"
1335cec8a016 (PC-do-completion): Clear text props from inserted text.
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
674 (if filename
1335cec8a016 (PC-do-completion): Clear text props from inserted text.
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
675 (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
676 (car poss)))))
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
677 t)))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
678
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
679
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
680 (defun PC-is-complete-p (str table pred)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
681 (let ((res (if (listp table)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
682 (assoc str table)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
683 (if (vectorp table)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
684 (or (equal str "nil") ; heh, heh, heh
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
685 (intern-soft str table))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
686 (funcall table str pred 'lambda)))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
687 (and res
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
688 (or (not pred)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
689 (and (not (listp table)) (not (vectorp table)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
690 (funcall pred res))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
691 res)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
692
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
693 (defun PC-chop-word (new old)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
694 (let ((i -1)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
695 (j -1))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
696 (while (and (setq i (string-match PC-delim-regex old (1+ i)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
697 (setq j (string-match PC-delim-regex new (1+ j)))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
698 (if (and j
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
699 (or (not PC-word-failed-flag)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
700 (setq j (string-match PC-delim-regex new (1+ j)))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
701 (substring new 0 (1+ j))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
702 new)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
703
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
704 (defvar PC-not-minibuffer nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
705
18981
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
706 (defun PC-temp-minibuffer-message (message)
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
707 "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
708 (cond (PC-not-minibuffer
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
709 (message message)
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
710 (sit-for 2)
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
711 (message ""))
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
712 ((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
713 (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
714 (t
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
715 (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
716 (save-excursion
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
717 (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
718 (insert message))
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
719 (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
720 (sit-for 2)
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
721 (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
722 (when quit-flag
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
723 (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
724 unread-command-events '(7))))))))
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
726
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
727 (defun PC-lisp-complete-symbol ()
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
728 "Perform completion on Lisp symbol preceding point.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
729 That symbol is compared against the symbols that exist
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
730 and any additional characters determined by what is there
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
731 are inserted.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
732 If the symbol starts just after an open-parenthesis,
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
733 only symbols with function definitions are considered.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
734 Otherwise, all symbols with function definitions, values
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
735 or properties are considered."
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
736 (interactive)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
737 (let* ((end (point))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
738 (buffer-syntax (syntax-table))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
739 (beg (unwind-protect
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
740 (save-excursion
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
741 (if lisp-mode-syntax-table
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
742 (set-syntax-table lisp-mode-syntax-table))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
743 (backward-sexp 1)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
744 (while (= (char-syntax (following-char)) ?\')
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
745 (forward-char 1))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
746 (point))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
747 (set-syntax-table buffer-syntax)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
748 (minibuffer-completion-table obarray)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
749 (minibuffer-completion-predicate
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
750 (if (eq (char-after (1- beg)) ?\()
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
751 'fboundp
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
752 (function (lambda (sym)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
753 (or (boundp sym) (fboundp sym)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
754 (symbol-plist sym))))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
755 (PC-not-minibuffer t))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
756 (PC-do-completion nil beg end)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
757
29674
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
758 (defun PC-complete-as-file-name ()
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
759 "Perform completion on file names preceding point.
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
760 Environment vars are converted to their values."
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
761 (interactive)
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
762 (let* ((end (point))
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
763 (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
764 (point-min) t)
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
765 (+ (point) 2)
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
766 (point-min)))
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
767 (minibuffer-completion-table 'read-file-name-internal)
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
768 (minibuffer-completion-predicate "")
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
769 (PC-not-minibuffer t))
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
770 (goto-char end)
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
771 (PC-do-completion nil beg end)))
611062a8c71e (PC-env-vars-alist): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 29088
diff changeset
772
24624
07ae57ea2a18 Delete the wildcard expansion feature
Karl Heuer <kwzh@gnu.org>
parents: 24534
diff changeset
773 ;;; Use the shell to do globbing.
07ae57ea2a18 Delete the wildcard expansion feature
Karl Heuer <kwzh@gnu.org>
parents: 24534
diff changeset
774 ;;; This could now use file-expand-wildcards instead.
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
775
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
776 (defun PC-expand-many-files (name)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
777 (save-excursion
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
778 (set-buffer (generate-new-buffer " *Glob Output*"))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
779 (erase-buffer)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
780 (shell-command (concat "echo " name) t)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
781 (goto-char (point-min))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
782 (if (looking-at ".*No match")
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
783 nil
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
784 (insert "(\"")
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
785 (while (search-forward " " nil t)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
786 (delete-backward-char 1)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
787 (insert "\" \""))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
788 (goto-char (point-max))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
789 (delete-backward-char 1)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
790 (insert "\")")
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
791 (goto-char (point-min))
21266
af9641af8877 (PC-expand-many-files): Apply completion-ignored-extensions.
Karl Heuer <kwzh@gnu.org>
parents: 20709
diff changeset
792 (let ((files (read (current-buffer))) (p nil))
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
793 (kill-buffer (current-buffer))
21266
af9641af8877 (PC-expand-many-files): Apply completion-ignored-extensions.
Karl Heuer <kwzh@gnu.org>
parents: 20709
diff changeset
794 (or (equal completion-ignored-extensions PC-ignored-extensions)
af9641af8877 (PC-expand-many-files): Apply completion-ignored-extensions.
Karl Heuer <kwzh@gnu.org>
parents: 20709
diff changeset
795 (setq PC-ignored-regexp
af9641af8877 (PC-expand-many-files): Apply completion-ignored-extensions.
Karl Heuer <kwzh@gnu.org>
parents: 20709
diff changeset
796 (concat "\\("
af9641af8877 (PC-expand-many-files): Apply completion-ignored-extensions.
Karl Heuer <kwzh@gnu.org>
parents: 20709
diff changeset
797 (mapconcat
af9641af8877 (PC-expand-many-files): Apply completion-ignored-extensions.
Karl Heuer <kwzh@gnu.org>
parents: 20709
diff changeset
798 'regexp-quote
af9641af8877 (PC-expand-many-files): Apply completion-ignored-extensions.
Karl Heuer <kwzh@gnu.org>
parents: 20709
diff changeset
799 (setq PC-ignored-extensions
af9641af8877 (PC-expand-many-files): Apply completion-ignored-extensions.
Karl Heuer <kwzh@gnu.org>
parents: 20709
diff changeset
800 completion-ignored-extensions)
af9641af8877 (PC-expand-many-files): Apply completion-ignored-extensions.
Karl Heuer <kwzh@gnu.org>
parents: 20709
diff changeset
801 "\\|")
af9641af8877 (PC-expand-many-files): Apply completion-ignored-extensions.
Karl Heuer <kwzh@gnu.org>
parents: 20709
diff changeset
802 "\\)\\'")))
af9641af8877 (PC-expand-many-files): Apply completion-ignored-extensions.
Karl Heuer <kwzh@gnu.org>
parents: 20709
diff changeset
803 (setq p nil)
af9641af8877 (PC-expand-many-files): Apply completion-ignored-extensions.
Karl Heuer <kwzh@gnu.org>
parents: 20709
diff changeset
804 (while files
af9641af8877 (PC-expand-many-files): Apply completion-ignored-extensions.
Karl Heuer <kwzh@gnu.org>
parents: 20709
diff changeset
805 (or (string-match PC-ignored-regexp (car files))
af9641af8877 (PC-expand-many-files): Apply completion-ignored-extensions.
Karl Heuer <kwzh@gnu.org>
parents: 20709
diff changeset
806 (setq p (cons (car files) p)))
af9641af8877 (PC-expand-many-files): Apply completion-ignored-extensions.
Karl Heuer <kwzh@gnu.org>
parents: 20709
diff changeset
807 (setq files (cdr files)))
af9641af8877 (PC-expand-many-files): Apply completion-ignored-extensions.
Karl Heuer <kwzh@gnu.org>
parents: 20709
diff changeset
808 p))))
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
809
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
810 ;;; Facilities for loading C header files. This is independent from the
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
811 ;;; main completion code. See also the variable `PC-include-file-path'
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
812 ;;; at top of this file.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
813
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
814 (defun PC-look-for-include-file ()
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
815 (if (string-match "[\"<]\\([^\"<>]*\\)[\">]?$" (buffer-file-name))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
816 (let ((name (substring (buffer-file-name)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
817 (match-beginning 1) (match-end 1)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
818 (punc (aref (buffer-file-name) (match-beginning 0)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
819 (path nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
820 new-buf)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
821 (kill-buffer (current-buffer))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
822 (if (equal name "")
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
823 (save-excursion
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
824 (set-buffer (car (buffer-list)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
825 (save-excursion
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
826 (beginning-of-line)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
827 (if (looking-at
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
828 "[ \t]*#[ \t]*include[ \t]+[<\"]\\(.+\\)[>\"][ \t]*[\n/]")
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
829 (setq name (buffer-substring (match-beginning 1)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
830 (match-end 1))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
831 punc (char-after (1- (match-beginning 1))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
832 ;; Suggested by Frank Siebenlist:
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
833 (if (or (looking-at
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
834 "[ \t]*([ \t]*load[ \t]+\"\\([^\"]+\\)\"")
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
835 (looking-at
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
836 "[ \t]*([ \t]*load-library[ \t]+\"\\([^\"]+\\)\"")
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
837 (looking-at
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
838 "[ \t]*([ \t]*require[ \t]+'\\([^\t )]+\\)[\t )]"))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
839 (progn
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
840 (setq name (buffer-substring (match-beginning 1)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
841 (match-end 1))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
842 punc ?\<
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
843 path load-path)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
844 (if (string-match "\\.elc$" name)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
845 (setq name (substring name 0 -1))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
846 (or (string-match "\\.el$" name)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
847 (setq name (concat name ".el")))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
848 (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
849 (or (string-match "\\.[[:alnum:]]+$" name)
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
850 (setq name (concat name ".h")))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
851 (if (eq punc ?\<)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
852 (let ((path (or path (PC-include-file-path))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
853 (while (and path
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
854 (not (file-exists-p
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
855 (concat (file-name-as-directory (car path))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
856 name))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
857 (setq path (cdr path)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
858 (if path
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
859 (setq name (concat (file-name-as-directory (car path)) name))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
860 (error "No such include file: <%s>" name)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
861 (let ((dir (save-excursion
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
862 (set-buffer (car (buffer-list)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
863 default-directory)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
864 (if (file-exists-p (concat dir name))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
865 (setq name (concat dir name))
24624
07ae57ea2a18 Delete the wildcard expansion feature
Karl Heuer <kwzh@gnu.org>
parents: 24534
diff changeset
866 (error "No such include file: `%s'" name))))
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
867 (setq new-buf (get-file-buffer name))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
868 (if new-buf
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
869 ;; no need to verify last-modified time for this!
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
870 (set-buffer new-buf)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
871 (setq new-buf (create-file-buffer name))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
872 (set-buffer new-buf)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
873 (erase-buffer)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
874 (insert-file-contents name t))
24624
07ae57ea2a18 Delete the wildcard expansion feature
Karl Heuer <kwzh@gnu.org>
parents: 24534
diff changeset
875 ;; Returning non-nil with the new buffer current
07ae57ea2a18 Delete the wildcard expansion feature
Karl Heuer <kwzh@gnu.org>
parents: 24534
diff changeset
876 ;; is sufficient to tell find-file to use it.
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
877 t)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
878 nil))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
879
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
880 (defun PC-include-file-path ()
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
881 (or PC-include-file-path
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
882 (let ((env (getenv "INCPATH"))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
883 (path nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
884 pos)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
885 (or env (error "No include file path specified"))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
886 (while (setq pos (string-match ":[^:]+$" env))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
887 (setq path (cons (substring env (1+ pos)) path)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
888 env (substring env 0 pos)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
889 path)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
890
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
891 ;;; This is adapted from lib-complete.el, by Mike Williams.
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
892 (defun PC-include-file-all-completions (file search-path &optional full)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
893 "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
894 If optional third argument FULL is non-nil, returned pathnames should be
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
895 absolute rather than relative to some directory on the SEARCH-PATH."
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
896 (setq search-path
31971
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
897 (mapcar (lambda (dir)
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
898 (if dir (file-name-as-directory dir) default-directory))
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
899 search-path))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
900 (if (file-name-absolute-p file)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
901 ;; It's an absolute file name, so don't need search-path
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
902 (progn
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
903 (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
904 (file-name-all-completions
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
905 (file-name-nondirectory file) (file-name-directory file)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
906 (let ((subdir (file-name-directory file))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
907 (ndfile (file-name-nondirectory file))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
908 file-lists)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
909 ;; Append subdirectory part to each element of search-path
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
910 (if subdir
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
911 (setq search-path
31971
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
912 (mapcar (lambda (dir) (concat dir subdir))
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
913 search-path)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
914 file ))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
915 ;; Make list of completions in each directory on search-path
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
916 (while search-path
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
917 (let* ((dir (car search-path))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
918 (subdir (if full dir subdir)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
919 (if (file-directory-p dir)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
920 (progn
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
921 (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
922 (cons
31971
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
923 (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
924 (file-name-all-completions ndfile
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
925 (car search-path)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
926 file-lists))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
927 (setq search-path (cdr search-path))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
928 ;; Compress out duplicates while building complete list (slloooow!)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
929 (let ((sorted (sort (apply 'nconc file-lists)
31971
fa083a5fbf0c (partial-completion-mode) <defcustom>: Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29674
diff changeset
930 (lambda (x y) (not (string-lessp x y)))))
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
931 compressed)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
932 (while sorted
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
933 (if (equal (car sorted) (car compressed)) nil
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
934 (setq compressed (cons (car sorted) compressed)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
935 (setq sorted (cdr sorted)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
936 compressed))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
937
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
938 (defun PC-read-include-file-name-internal (string dir action)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
939 (if (string-match "<\\([^\"<>]*\\)>?$" string)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
940 (let* ((name (substring string (match-beginning 1) (match-end 1)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
941 (str2 (substring string (match-beginning 0)))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
942 (completion-table
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
943 (mapcar (function (lambda (x) (list (format "<%s>" x))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
944 (PC-include-file-all-completions
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
945 name (PC-include-file-path)))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
946 (cond
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
947 ((not completion-table) nil)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
948 ((eq action nil) (try-completion str2 completion-table nil))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
949 ((eq action t) (all-completions str2 completion-table nil))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
950 ((eq action 'lambda)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
951 (eq (try-completion str2 completion-table nil) t))))
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
952 (funcall PC-old-read-file-name-internal string dir action)))
18981
6681f7141d2b customise & make installation/deinstallation happen on mode command not file load.
Simon Marshall <simon@gnu.org>
parents: 17352
diff changeset
953
3725
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
954
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
955 (provide 'complete)
bd468d77adce Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
956
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 36033
diff changeset
957 ;;; complete.el ends here