annotate lisp/pcomplete.el @ 110410:f2e111723c3a

Merge changes made in Gnus trunk. Reimplement nnimap, and do tweaks to the rest of the code to support that. * gnus-int.el (gnus-finish-retrieve-group-infos) (gnus-retrieve-group-data-early): New functions. * gnus-range.el (gnus-range-nconcat): New function. * gnus-start.el (gnus-get-unread-articles): Support early retrieval of data. (gnus-read-active-for-groups): Support finishing the early retrieval of data. * gnus-sum.el (gnus-summary-move-article): Pass the move-to group name if the move is internal, so that nnimap can do fast internal moves. * gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for nnimap usage. * nnimap.el: Rewritten. * nnmail.el (nnmail-inhibit-default-split-group): New internal variable to allow the mail splitting to not return a default group. This is useful for nnimap, which will leave unmatched mail in the inbox. * utf7.el (utf7-encode): Autoload. Implement shell connection. * nnimap.el (nnimap-open-shell-stream): New function. (nnimap-open-connection): Use it. Get the number of lines by using BODYSTRUCTURE. (nnimap-transform-headers): Get the number of lines in each message. (nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the number of lines. Not all servers return UIDNEXT. Work past this problem. Remove junk from end of file. Fix typo in "bogus" section. Make capabilties be case-insensitive. Require cl when compiling. Don't bug out if the LIST command doesn't have any parameters. 2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change) * nnimap.el (nnimap-get-groups): Don't bug out if the LIST command doesn't have any parameters. (mm-text-html-renderer): Document gnus-article-html. 2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix) * mm-decode.el (mm-text-html-renderer): Document gnus-article-html. * dgnushack.el: Define netrc-credentials. If the user doesn't have a /etc/services, supply some sensible port defaults. Have `unseen-or-unread' select an unread unseen article first. (nntp-open-server): Return whether the open was successful or not. Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ). Save result so that it doesn't say "failed" all the time. Add ~/.authinfo to the default, since that's probably most useful for users. Don't use the "finish" method when we're reading from the agent. Add some more nnimap-relevant agent stuff to nnagent.el. * nnimap.el (nnimap-with-process-buffer): Removed. Revert one line that was changed by mistake in the last checkin. (nnimap-open-connection): Don't error out when we can't make a connection nnimap-related changes to avoid bugging out if we can't contact a server. * gnus-start.el (gnus-get-unread-articles): Don't try to scan groups from methods that are denied. * nnimap.el (nnimap-possibly-change-group): Return nil if we can't log in. (nnimap-finish-retrieve-group-infos): Make sure we're not waiting for nothing. * gnus-sum.el (gnus-select-newsgroup): Indent.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sat, 18 Sep 2010 10:02:19 +0000
parents d835100c3e8b
children 417b1e4d63cd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 35588
diff changeset
1 ;;; pcomplete.el --- programmable completion
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2
64762
41bb365f41c4 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64091
diff changeset
3 ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 106359
diff changeset
4 ;; 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
5
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
6 ;; Author: John Wiegley <johnw@gnu.org>
32502
de05ca05f4ff (pcomplete) <defgroup>: Add :version.
Dave Love <fx@gnu.org>
parents: 32451
diff changeset
7 ;; Keywords: processes abbrev
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
8
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
10
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
11 ;; GNU Emacs is free software: you can redistribute it and/or modify
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
13 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
14 ;; (at your option) any later version.
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
15
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
20
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
22 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
23
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
24 ;;; Commentary:
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
25
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
26 ;; This module provides a programmable completion facility using
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
27 ;; "completion functions". Each completion function is responsible
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
28 ;; for producing a list of possible completions relevant to the current
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
29 ;; argument position.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
30 ;;
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
31 ;; To use pcomplete with shell-mode, for example, you will need the
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
32 ;; following in your .emacs file:
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
33 ;;
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
34 ;; (add-hook 'shell-mode-hook 'pcomplete-shell-setup)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
35 ;;
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
36 ;; Most of the code below simply provides support mechanisms for
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
37 ;; writing completion functions. Completion functions themselves are
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
38 ;; very easy to write. They have few requirements beyond those of
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
39 ;; regular Lisp functions.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
40 ;;
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
41 ;; Consider the following example, which will complete against
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
42 ;; filenames for the first two arguments, and directories for all
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
43 ;; remaining arguments:
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
44 ;;
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
45 ;; (defun pcomplete/my-command ()
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
46 ;; (pcomplete-here (pcomplete-entries))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
47 ;; (pcomplete-here (pcomplete-entries))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
48 ;; (while (pcomplete-here (pcomplete-dirs))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
49 ;;
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
50 ;; Here are the requirements for completion functions:
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
51 ;;
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
52 ;; @ They must be called "pcomplete/MAJOR-MODE/NAME", or
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
53 ;; "pcomplete/NAME". This is how they are looked up, using the NAME
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
54 ;; specified in the command argument (the argument in first
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
55 ;; position).
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
56 ;;
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
57 ;; @ They must be callable with no arguments.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
58 ;;
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
59 ;; @ Their return value is ignored. If they actually return normally,
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
60 ;; it means no completions were available.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
61 ;;
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
62 ;; @ In order to provide completions, they must throw the tag
105709
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
63 ;; `pcomplete-completions'. The value must be a completion table
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
64 ;; (i.e. a table that can be passed to try-completion and friends)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
65 ;; for the final argument.
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
66 ;;
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
67 ;; @ To simplify completion function logic, the tag `pcompleted' may
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
68 ;; be thrown with a value of nil in order to abort the function. It
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
69 ;; means that there were no completions available.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
70 ;;
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
71 ;; When a completion function is called, the variable `pcomplete-args'
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
72 ;; is in scope, and contains all of the arguments specified on the
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
73 ;; command line. The variable `pcomplete-last' is the index of the
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
74 ;; last argument in that list.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
75 ;;
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
76 ;; The variable `pcomplete-index' is used by the completion code to
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
77 ;; know which argument the completion function is currently examining.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
78 ;; It always begins at 1, meaning the first argument after the command
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
79 ;; name.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
80 ;;
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
81 ;; To facilitate writing completion logic, a special macro,
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
82 ;; `pcomplete-here', has been provided which does several things:
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
83 ;;
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
84 ;; 1. It will throw `pcompleted' (with a value of nil) whenever
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
85 ;; `pcomplete-index' exceeds `pcomplete-last'.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
86 ;;
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
87 ;; 2. It will increment `pcomplete-index' if the final argument has
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
88 ;; not been reached yet.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
89 ;;
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
90 ;; 3. It will evaluate the form passed to it, and throw the result
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
91 ;; using the `pcomplete-completions' tag, if it is called when
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
92 ;; `pcomplete-index' is pointing to the final argument.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
93 ;;
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
94 ;; Sometimes a completion function will want to vary the possible
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
95 ;; completions for an argument based on the previous one. To
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
96 ;; facilitate tests like this, the function `pcomplete-test' and
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
97 ;; `pcomplete-match' are provided. Called with one argument, they
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
98 ;; test the value of the previous command argument. Otherwise, a
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
99 ;; relative index may be given as an optional second argument, where 0
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
100 ;; refers to the current argument, 1 the previous, 2 the one before
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
101 ;; that, etc. The symbols `first' and `last' specify absolute
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
102 ;; offsets.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
103 ;;
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
104 ;; Here is an example which will only complete against directories for
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
105 ;; the second argument if the first argument is also a directory:
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
106 ;;
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
107 ;; (defun pcomplete/example ()
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
108 ;; (pcomplete-here (pcomplete-entries))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
109 ;; (if (pcomplete-test 'file-directory-p)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
110 ;; (pcomplete-here (pcomplete-dirs))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
111 ;; (pcomplete-here (pcomplete-entries))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
112 ;;
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
113 ;; For generating completion lists based on directory contents, see
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
114 ;; the functions `pcomplete-entries', `pcomplete-dirs',
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
115 ;; `pcomplete-executables' and `pcomplete-all-entries'.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
116 ;;
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
117 ;; Consult the documentation for `pcomplete-here' for information
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
118 ;; about its other arguments.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
119
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
120 ;;; Code:
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
121
105709
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
122 (eval-when-compile (require 'cl))
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
123
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
124 (defgroup pcomplete nil
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
125 "Programmable completion."
32502
de05ca05f4ff (pcomplete) <defgroup>: Add :version.
Dave Love <fx@gnu.org>
parents: 32451
diff changeset
126 :version "21.1"
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
127 :group 'processes)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
128
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
129 ;;; User Variables:
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
130
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
131 (defcustom pcomplete-file-ignore nil
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
132 "A regexp of filenames to be disregarded during file completion."
35588
31904bdf4350 See ChangeLog
John Wiegley <johnw@newartisans.com>
parents: 32502
diff changeset
133 :type '(choice regexp (const :tag "None" nil))
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
134 :group 'pcomplete)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
135
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
136 (defcustom pcomplete-dir-ignore nil
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
137 "A regexp of names to be disregarded during directory completion."
35588
31904bdf4350 See ChangeLog
John Wiegley <johnw@newartisans.com>
parents: 32502
diff changeset
138 :type '(choice regexp (const :tag "None" nil))
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
139 :group 'pcomplete)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
140
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 49131
diff changeset
141 (defcustom pcomplete-ignore-case (memq system-type '(ms-dos windows-nt cygwin))
105727
65c5d19965b2 (pcomplete-common-suffix, pcomplete-table-subvert): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105709
diff changeset
142 ;; FIXME: the doc mentions file-name completion, but the code
65c5d19965b2 (pcomplete-common-suffix, pcomplete-table-subvert): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105709
diff changeset
143 ;; seems to apply it to all completions.
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
144 "If non-nil, ignore case when doing filename completion."
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
145 :type 'boolean
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
146 :group 'pcomplete)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
147
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
148 (defcustom pcomplete-autolist nil
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
149 "If non-nil, automatically list possibilities on partial completion.
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
150 This mirrors the optional behavior of tcsh."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
151 :type 'boolean
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
152 :group 'pcomplete)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
153
57745
d1fa1cbd6c4d (pcomplete-entries): Don't use directory-sep-char.
Richard M. Stallman <rms@gnu.org>
parents: 57701
diff changeset
154 (defcustom pcomplete-suffix-list (list ?/ ?:)
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
155 "A list of characters which constitute a proper suffix."
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
156 :type '(repeat character)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
157 :group 'pcomplete)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
158
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
159 (defcustom pcomplete-recexact nil
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
160 "If non-nil, use shortest completion if characters cannot be added.
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
161 This mirrors the optional behavior of tcsh.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
162
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
163 A non-nil value is useful if `pcomplete-autolist' is non-nil too."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
164 :type 'boolean
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
165 :group 'pcomplete)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
166
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
167 (defcustom pcomplete-arg-quote-list nil
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
168 "List of characters to quote when completing an argument."
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
169 :type '(choice (repeat character)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
170 (const :tag "Don't quote" nil))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
171 :group 'pcomplete)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
172
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
173 (defcustom pcomplete-quote-arg-hook nil
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
174 "A hook which is run to quote a character within a filename.
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
175 Each function is passed both the filename to be quoted, and the index
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
176 to be considered. If the function wishes to provide an alternate
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
177 quoted form, it need only return the replacement string. If no
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
178 function provides a replacement, quoting shall proceed as normal,
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
179 using a backslash to quote any character which is a member of
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
180 `pcomplete-arg-quote-list'."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
181 :type 'hook
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
182 :group 'pcomplete)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
183
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
184 (defcustom pcomplete-man-function 'man
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
185 "A function to that will be called to display a manual page.
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
186 It will be passed the name of the command to document."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
187 :type 'function
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
188 :group 'pcomplete)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
189
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
190 (defcustom pcomplete-compare-entry-function 'string-lessp
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
191 "This function is used to order file entries for completion.
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
192 The behavior of most all shells is to sort alphabetically."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
193 :type '(radio (function-item string-lessp)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
194 (function-item file-newer-than-file-p)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
195 (function :tag "Other"))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
196 :group 'pcomplete)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
197
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
198 (defcustom pcomplete-help nil
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
199 "A string or function (or nil) used for context-sensitive help.
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
200 If a string, it should name an Info node that will be jumped to.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
201 If non-nil, it must a sexp that will be evaluated, and whose
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
202 result will be shown in the minibuffer.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
203 If nil, the function `pcomplete-man-function' will be called with the
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
204 current command argument."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
205 :type '(choice string sexp (const :tag "Use man page" nil))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
206 :group 'pcomplete)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
207
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
208 (defcustom pcomplete-expand-before-complete nil
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
209 "If non-nil, expand the current argument before completing it.
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
210 This means that typing something such as '$HOME/bi' followed by
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
211 \\[pcomplete-argument] will cause the variable reference to be
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
212 resolved first, and the resultant value that will be completed against
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
213 to be inserted in the buffer. Note that exactly what gets expanded
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
214 and how is entirely up to the behavior of the
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
215 `pcomplete-parse-arguments-function'."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
216 :type 'boolean
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
217 :group 'pcomplete)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
218
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
219 (defcustom pcomplete-parse-arguments-function
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
220 'pcomplete-parse-buffer-arguments
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
221 "A function to call to parse the current line's arguments.
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
222 It should be called with no parameters, and with point at the position
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
223 of the argument that is to be completed.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
224
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
225 It must either return nil, or a cons cell of the form:
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
226
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
227 ((ARG...) (BEG-POS...))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
228
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
229 The two lists must be identical in length. The first gives the final
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
230 value of each command line argument (which need not match the textual
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
231 representation of that argument), and BEG-POS gives the beginning
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
232 position of each argument, as it is seen by the user. The establishes
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
233 a relationship between the fully resolved value of the argument, and
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
234 the textual representation of the argument."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
235 :type 'function
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
236 :group 'pcomplete)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
237
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
238 (defcustom pcomplete-cycle-completions t
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
239 "If non-nil, hitting the TAB key cycles through the completion list.
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
240 Typical Emacs behavior is to complete as much as possible, then pause
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
241 waiting for further input. Then if TAB is hit again, show a list of
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
242 possible completions. When `pcomplete-cycle-completions' is non-nil,
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
243 it acts more like zsh or 4nt, showing the first maximal match first,
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
244 followed by any further matches on each subsequent pressing of the TAB
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
245 key. \\[pcomplete-list] is the key to press if the user wants to see
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
246 the list of possible completions."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
247 :type 'boolean
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
248 :group 'pcomplete)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
249
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
250 (defcustom pcomplete-cycle-cutoff-length 5
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
251 "If the number of completions is greater than this, don't cycle.
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
252 This variable is a compromise between the traditional Emacs style of
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
253 completion, and the \"cycling\" style. Basically, if there are more
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
254 than this number of completions possible, don't automatically pick the
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
255 first one and then expect the user to press TAB to cycle through them.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
256 Typically, when there are a large number of completion possibilities,
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
257 the user wants to see them in a list buffer so that they can know what
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
258 options are available. But if the list is small, it means the user
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
259 has already entered enough input to disambiguate most of the
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
260 possibilities, and therefore they are probably most interested in
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
261 cycling through the candidates. Set this value to nil if you want
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
262 cycling to always be enabled."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
263 :type '(choice integer (const :tag "Always cycle" nil))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
264 :group 'pcomplete)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
265
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
266 (defcustom pcomplete-restore-window-delay 1
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
267 "The number of seconds to wait before restoring completion windows.
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
268 Once the completion window has been displayed, if the user then goes
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
269 on to type something else, that completion window will be removed from
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
270 the display (actually, the original window configuration before it was
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
271 displayed will be restored), after this many seconds of idle time. If
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
272 set to nil, completion windows will be left on second until the user
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
273 removes them manually. If set to 0, they will disappear immediately
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
274 after the user enters a key other than TAB."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
275 :type '(choice integer (const :tag "Never restore" nil))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
276 :group 'pcomplete)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
277
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
278 (defcustom pcomplete-try-first-hook nil
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
279 "A list of functions which are called before completing an argument.
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
280 This can be used, for example, for completing things which might apply
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
281 to all arguments, such as variable names after a $."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
282 :type 'hook
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
283 :group 'pcomplete)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
284
86234
860a7a8e779e * progmodes/octave-mod.el (inferior-octave-send-list-and-digest):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 86202
diff changeset
285 (defsubst pcomplete-executables (&optional regexp)
860a7a8e779e * progmodes/octave-mod.el (inferior-octave-send-list-and-digest):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 86202
diff changeset
286 "Complete amongst a list of directories and executables."
860a7a8e779e * progmodes/octave-mod.el (inferior-octave-send-list-and-digest):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 86202
diff changeset
287 (pcomplete-entries regexp 'file-executable-p))
860a7a8e779e * progmodes/octave-mod.el (inferior-octave-send-list-and-digest):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 86202
diff changeset
288
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
289 (defcustom pcomplete-command-completion-function
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
290 (function
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
291 (lambda ()
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
292 (pcomplete-here (pcomplete-executables))))
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
293 "Function called for completing the initial command argument."
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
294 :type 'function
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
295 :group 'pcomplete)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
296
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
297 (defcustom pcomplete-command-name-function 'pcomplete-command-name
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
298 "Function called for determining the current command name."
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
299 :type 'function
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
300 :group 'pcomplete)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
301
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
302 (defcustom pcomplete-default-completion-function
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
303 (function
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
304 (lambda ()
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
305 (while (pcomplete-here (pcomplete-entries)))))
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
306 "Function called when no completion rule can be found.
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
307 This function is used to generate completions for every argument."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
308 :type 'function
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
309 :group 'pcomplete)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
310
31241
3099993cba0f See ChangeLog
John Wiegley <johnw@newartisans.com>
parents: 29876
diff changeset
311 (defcustom pcomplete-use-paring t
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
312 "If t, pare alternatives that have already been used.
31241
3099993cba0f See ChangeLog
John Wiegley <johnw@newartisans.com>
parents: 29876
diff changeset
313 If nil, you will always see the completion set of possible options, no
3099993cba0f See ChangeLog
John Wiegley <johnw@newartisans.com>
parents: 29876
diff changeset
314 matter which of those options have already been used in previous
3099993cba0f See ChangeLog
John Wiegley <johnw@newartisans.com>
parents: 29876
diff changeset
315 command arguments."
3099993cba0f See ChangeLog
John Wiegley <johnw@newartisans.com>
parents: 29876
diff changeset
316 :type 'boolean
3099993cba0f See ChangeLog
John Wiegley <johnw@newartisans.com>
parents: 29876
diff changeset
317 :group 'pcomplete)
3099993cba0f See ChangeLog
John Wiegley <johnw@newartisans.com>
parents: 29876
diff changeset
318
49131
c814bafa1987 (pcomplete-termination-string): Added a variable for modifying the
John Wiegley <johnw@newartisans.com>
parents: 46818
diff changeset
319 (defcustom pcomplete-termination-string " "
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
320 "A string that is inserted after any completion or expansion.
49131
c814bafa1987 (pcomplete-termination-string): Added a variable for modifying the
John Wiegley <johnw@newartisans.com>
parents: 46818
diff changeset
321 This is usually a space character, useful when completing lists of
c814bafa1987 (pcomplete-termination-string): Added a variable for modifying the
John Wiegley <johnw@newartisans.com>
parents: 46818
diff changeset
322 words separated by spaces. However, if your list uses a different
c814bafa1987 (pcomplete-termination-string): Added a variable for modifying the
John Wiegley <johnw@newartisans.com>
parents: 46818
diff changeset
323 separator character, or if the completion occurs in a word that is
c814bafa1987 (pcomplete-termination-string): Added a variable for modifying the
John Wiegley <johnw@newartisans.com>
parents: 46818
diff changeset
324 already terminated by a character, this variable should be locally
c814bafa1987 (pcomplete-termination-string): Added a variable for modifying the
John Wiegley <johnw@newartisans.com>
parents: 46818
diff changeset
325 modified to be an empty string, or the desired separation string."
c814bafa1987 (pcomplete-termination-string): Added a variable for modifying the
John Wiegley <johnw@newartisans.com>
parents: 46818
diff changeset
326 :type 'string
c814bafa1987 (pcomplete-termination-string): Added a variable for modifying the
John Wiegley <johnw@newartisans.com>
parents: 46818
diff changeset
327 :group 'pcomplete)
c814bafa1987 (pcomplete-termination-string): Added a variable for modifying the
John Wiegley <johnw@newartisans.com>
parents: 46818
diff changeset
328
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
329 ;;; Internal Variables:
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
330
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
331 ;; for cycling completion support
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
332 (defvar pcomplete-current-completions nil)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
333 (defvar pcomplete-last-completion-length)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
334 (defvar pcomplete-last-completion-stub)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
335 (defvar pcomplete-last-completion-raw)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
336 (defvar pcomplete-last-window-config nil)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
337 (defvar pcomplete-window-restore-timer nil)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
338
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
339 (make-variable-buffer-local 'pcomplete-current-completions)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
340 (make-variable-buffer-local 'pcomplete-last-completion-length)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
341 (make-variable-buffer-local 'pcomplete-last-completion-stub)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
342 (make-variable-buffer-local 'pcomplete-last-completion-raw)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
343 (make-variable-buffer-local 'pcomplete-last-window-config)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
344 (make-variable-buffer-local 'pcomplete-window-restore-timer)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
345
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
346 ;; used for altering pcomplete's behavior. These global variables
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
347 ;; should always be nil.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
348 (defvar pcomplete-show-help nil)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
349 (defvar pcomplete-show-list nil)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
350 (defvar pcomplete-expand-only-p nil)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
351
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
352 ;;; User Functions:
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
353
105762
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
354 ;;; Alternative front-end using the standard completion facilities.
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
355
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
356 ;; The way pcomplete-parse-arguments, pcomplete-stub, and
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
357 ;; pcomplete-quote-argument work only works because of some deep
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
358 ;; hypothesis about the way the completion work. Basically, it makes
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
359 ;; it pretty much impossible to have completion other than
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
360 ;; prefix-completion.
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
361 ;;
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
362 ;; pcomplete--common-quoted-suffix and pcomplete--table-subvert try to
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
363 ;; work around this difficulty with heuristics, but it's
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
364 ;; really a hack.
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
365
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
366 (defvar pcomplete-unquote-argument-function nil)
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
367
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
368 (defun pcomplete-unquote-argument (s)
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
369 (cond
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
370 (pcomplete-unquote-argument-function
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
371 (funcall pcomplete-unquote-argument-function s))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
372 ((null pcomplete-arg-quote-list) s)
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
373 (t
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
374 (replace-regexp-in-string "\\\\\\(.\\)" "\\1" s t))))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
375
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
376 (defun pcomplete--common-suffix (s1 s2)
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
377 (assert (not (or (string-match "\n" s1) (string-match "\n" s2))))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
378 ;; Since S2 is expected to be the "unquoted/expanded" version of S1,
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
379 ;; there shouldn't be any case difference, even if the completion is
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
380 ;; case-insensitive.
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
381 (let ((case-fold-search nil)) ;; pcomplete-ignore-case
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
382 (string-match ".*?\\(.*\\)\n.*\\1\\'" (concat s1 "\n" s2))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
383 (- (match-end 1) (match-beginning 1))))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
384
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
385 (defun pcomplete--common-quoted-suffix (s1 s2)
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
386 "Find the common suffix between S1 and S2 where S1 is the expanded S2.
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
387 S1 is expected to be the unquoted and expanded version of S1.
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
388 Returns (PS1 . PS2), i.e. the shortest prefixes of S1 and S2, such that
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
389 S1 = (concat PS1 SS1) and S2 = (concat PS2 SS2) and
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
390 SS1 = (unquote SS2)."
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
391 (let* ((cs (pcomplete--common-suffix s1 s2))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
392 (ss1 (substring s1 (- (length s1) cs)))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
393 (qss1 (pcomplete-quote-argument ss1))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
394 qc)
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
395 (if (and (not (equal ss1 qss1))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
396 (setq qc (pcomplete-quote-argument (substring ss1 0 1)))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
397 (eq t (compare-strings s2 (- (length s2) cs (length qc) -1)
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
398 (- (length s2) cs -1)
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
399 qc nil nil)))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
400 ;; The difference found is just that one char is quoted in S2
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
401 ;; but not in S1, keep looking before this difference.
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
402 (pcomplete--common-quoted-suffix
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
403 (substring s1 0 (- (length s1) cs))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
404 (substring s2 0 (- (length s2) cs (length qc) -1)))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
405 (cons (substring s1 0 (- (length s1) cs))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
406 (substring s2 0 (- (length s2) cs))))))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
407
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
408 (defun pcomplete--table-subvert (table s1 s2 string pred action)
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
409 "Completion table that replaces the prefix S1 with S2 in STRING.
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
410 When TABLE, S1 and S2 are provided by `apply-partially', the result
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
411 is a completion table which completes strings of the form (concat S1 S)
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
412 in the same way as TABLE completes strings of the form (concat S2 S)."
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
413 (let* ((str (if (eq t (compare-strings string 0 (length s1) s1 nil nil
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
414 completion-ignore-case))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
415 (concat s2 (pcomplete-unquote-argument
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
416 (substring string (length s1))))))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
417 (res (if str (complete-with-action action table str pred))))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
418 (when res
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
419 (cond
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
420 ((and (eq (car-safe action) 'boundaries))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
421 (let ((beg (or (and (eq (car-safe res) 'boundaries) (cadr res)) 0)))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
422 (list* 'boundaries
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
423 (max (length s1)
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
424 ;; FIXME: Adjust because of quoting/unquoting.
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
425 (+ beg (- (length s1) (length s2))))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
426 (and (eq (car-safe res) 'boundaries) (cddr res)))))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
427 ((stringp res)
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
428 (if (eq t (compare-strings res 0 (length s2) s2 nil nil
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
429 completion-ignore-case))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
430 (concat s1 (pcomplete-quote-argument
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
431 (substring res (length s2))))))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
432 ((eq action t)
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
433 (let ((bounds (completion-boundaries str table pred "")))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
434 (if (>= (car bounds) (length s2))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
435 res
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
436 (let ((re (concat "\\`"
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
437 (regexp-quote (substring s2 (car bounds))))))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
438 (delq nil
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
439 (mapcar (lambda (c)
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
440 (if (string-match re c)
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
441 (substring c (match-end 0))))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
442 res))))))))))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
443
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
444 ;; I don't think such commands are usable before first setting up buffer-local
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
445 ;; variables to parse args, so there's no point autoloading it.
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
446 ;; ;;;###autoload
108587
17dd83b6f6d9 * pcomplete.el (pcomplete-completions-at-point): New function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107844
diff changeset
447 (defun pcomplete-completions-at-point ()
105762
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
448 "Provide standard completion using pcomplete's completion tables.
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
449 Same as `pcomplete' but using the standard completion UI."
105764
a5db863758a8 (pcomplete-std-complete): Obey pcomplete-use-paring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105762
diff changeset
450 ;; FIXME: it only completes the text before point, whereas the
a5db863758a8 (pcomplete-std-complete): Obey pcomplete-use-paring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105762
diff changeset
451 ;; standard UI may also consider text after point.
108587
17dd83b6f6d9 * pcomplete.el (pcomplete-completions-at-point): New function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107844
diff changeset
452 ;; FIXME: the `pcomplete' UI may be used internally during
17dd83b6f6d9 * pcomplete.el (pcomplete-completions-at-point): New function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107844
diff changeset
453 ;; pcomplete-completions and then throw to `pcompleted', thus
17dd83b6f6d9 * pcomplete.el (pcomplete-completions-at-point): New function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107844
diff changeset
454 ;; imposing the pcomplete UI over the standard UI.
105762
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
455 (catch 'pcompleted
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
456 (let* ((pcomplete-stub)
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
457 pcomplete-seen pcomplete-norm-func
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
458 pcomplete-args pcomplete-last pcomplete-index
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
459 (pcomplete-autolist pcomplete-autolist)
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
460 (pcomplete-suffix-list pcomplete-suffix-list)
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
461 ;; Apparently the vars above are global vars modified by
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
462 ;; side-effects, whereas pcomplete-completions is the core
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
463 ;; function that finds the chunk of text to complete
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
464 ;; (returned indirectly in pcomplete-stub) and the set of
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
465 ;; possible completions.
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
466 (completions (pcomplete-completions))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
467 ;; Usually there's some close connection between pcomplete-stub
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
468 ;; and the text before point. But depending on what
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
469 ;; pcomplete-parse-arguments-function does, that connection
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
470 ;; might not be that close. E.g. in eshell,
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
471 ;; pcomplete-parse-arguments-function expands envvars.
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
472 ;;
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
473 ;; Since we use minibuffer-complete, which doesn't know
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
474 ;; pcomplete-stub and works from the buffer's text instead,
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
475 ;; we need to trick minibuffer-complete, into using
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
476 ;; pcomplete-stub without its knowledge. To that end, we
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
477 ;; use pcomplete--table-subvert to construct a completion
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
478 ;; table which expects strings using a prefix from the
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
479 ;; buffer's text but internally uses the corresponding
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
480 ;; prefix from pcomplete-stub.
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
481 (beg (max (- (point) (length pcomplete-stub))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
482 (pcomplete-begin)))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
483 (buftext (buffer-substring beg (point)))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
484 (table
106359
fceba9857bee (pcomplete-std-complete): Don't try to complete past the last element.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106298
diff changeset
485 (cond
fceba9857bee (pcomplete-std-complete): Don't try to complete past the last element.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106298
diff changeset
486 ((null completions) nil)
fceba9857bee (pcomplete-std-complete): Don't try to complete past the last element.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106298
diff changeset
487 ((not (equal pcomplete-stub buftext))
fceba9857bee (pcomplete-std-complete): Don't try to complete past the last element.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106298
diff changeset
488 ;; This isn't always strictly right (e.g. if
fceba9857bee (pcomplete-std-complete): Don't try to complete past the last element.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106298
diff changeset
489 ;; FOO="toto/$FOO", then completion of /$FOO/bar may
fceba9857bee (pcomplete-std-complete): Don't try to complete past the last element.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106298
diff changeset
490 ;; result in something incorrect), but given the lack of
fceba9857bee (pcomplete-std-complete): Don't try to complete past the last element.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106298
diff changeset
491 ;; any other info, it's about as good as it gets, and in
fceba9857bee (pcomplete-std-complete): Don't try to complete past the last element.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106298
diff changeset
492 ;; practice it should work just fine (fingers crossed).
fceba9857bee (pcomplete-std-complete): Don't try to complete past the last element.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106298
diff changeset
493 (let ((prefixes (pcomplete--common-quoted-suffix
fceba9857bee (pcomplete-std-complete): Don't try to complete past the last element.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106298
diff changeset
494 pcomplete-stub buftext)))
fceba9857bee (pcomplete-std-complete): Don't try to complete past the last element.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106298
diff changeset
495 (apply-partially
fceba9857bee (pcomplete-std-complete): Don't try to complete past the last element.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106298
diff changeset
496 'pcomplete--table-subvert
fceba9857bee (pcomplete-std-complete): Don't try to complete past the last element.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106298
diff changeset
497 completions
fceba9857bee (pcomplete-std-complete): Don't try to complete past the last element.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106298
diff changeset
498 (cdr prefixes) (car prefixes))))
fceba9857bee (pcomplete-std-complete): Don't try to complete past the last element.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106298
diff changeset
499 (t
105762
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
500 (lexical-let ((completions completions))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
501 (lambda (string pred action)
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
502 (let ((res (complete-with-action
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
503 action completions string pred)))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
504 (if (stringp res)
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
505 (pcomplete-quote-argument res)
106359
fceba9857bee (pcomplete-std-complete): Don't try to complete past the last element.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106298
diff changeset
506 res)))))))
105764
a5db863758a8 (pcomplete-std-complete): Obey pcomplete-use-paring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105762
diff changeset
507 (pred
a5db863758a8 (pcomplete-std-complete): Obey pcomplete-use-paring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105762
diff changeset
508 ;; pare it down, if applicable
106359
fceba9857bee (pcomplete-std-complete): Don't try to complete past the last element.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106298
diff changeset
509 (when (and table pcomplete-use-paring pcomplete-seen)
105764
a5db863758a8 (pcomplete-std-complete): Obey pcomplete-use-paring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105762
diff changeset
510 (setq pcomplete-seen
a5db863758a8 (pcomplete-std-complete): Obey pcomplete-use-paring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105762
diff changeset
511 (mapcar (lambda (f)
a5db863758a8 (pcomplete-std-complete): Obey pcomplete-use-paring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105762
diff changeset
512 (funcall pcomplete-norm-func
a5db863758a8 (pcomplete-std-complete): Obey pcomplete-use-paring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105762
diff changeset
513 (directory-file-name f)))
a5db863758a8 (pcomplete-std-complete): Obey pcomplete-use-paring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105762
diff changeset
514 pcomplete-seen))
a5db863758a8 (pcomplete-std-complete): Obey pcomplete-use-paring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105762
diff changeset
515 (lambda (f)
a5db863758a8 (pcomplete-std-complete): Obey pcomplete-use-paring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105762
diff changeset
516 (not (member
a5db863758a8 (pcomplete-std-complete): Obey pcomplete-use-paring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105762
diff changeset
517 (funcall pcomplete-norm-func
a5db863758a8 (pcomplete-std-complete): Obey pcomplete-use-paring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105762
diff changeset
518 (directory-file-name f))
a5db863758a8 (pcomplete-std-complete): Obey pcomplete-use-paring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105762
diff changeset
519 pcomplete-seen))))))
105762
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
520
108587
17dd83b6f6d9 * pcomplete.el (pcomplete-completions-at-point): New function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107844
diff changeset
521 (list
106109
42ca82b4620b * abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105788
diff changeset
522 beg (point)
42ca82b4620b * abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105788
diff changeset
523 ;; Add a space at the end of completion. Use a terminator-regexp
42ca82b4620b * abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105788
diff changeset
524 ;; that never matches since the terminator cannot appear
42ca82b4620b * abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105788
diff changeset
525 ;; within the completion field anyway.
42ca82b4620b * abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105788
diff changeset
526 (if (zerop (length pcomplete-termination-string))
42ca82b4620b * abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105788
diff changeset
527 table
42ca82b4620b * abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105788
diff changeset
528 (apply-partially 'completion-table-with-terminator
42ca82b4620b * abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105788
diff changeset
529 (cons pcomplete-termination-string
42ca82b4620b * abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105788
diff changeset
530 "\\`a\\`")
42ca82b4620b * abbrev.el (abbrev-with-wrapper-hook): (re)move...
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105788
diff changeset
531 table))
108587
17dd83b6f6d9 * pcomplete.el (pcomplete-completions-at-point): New function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107844
diff changeset
532 :predicate pred))))
17dd83b6f6d9 * pcomplete.el (pcomplete-completions-at-point): New function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107844
diff changeset
533
17dd83b6f6d9 * pcomplete.el (pcomplete-completions-at-point): New function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107844
diff changeset
534 ;; I don't think such commands are usable before first setting up buffer-local
17dd83b6f6d9 * pcomplete.el (pcomplete-completions-at-point): New function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107844
diff changeset
535 ;; variables to parse args, so there's no point autoloading it.
17dd83b6f6d9 * pcomplete.el (pcomplete-completions-at-point): New function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107844
diff changeset
536 ;; ;;;###autoload
17dd83b6f6d9 * pcomplete.el (pcomplete-completions-at-point): New function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107844
diff changeset
537 (defun pcomplete-std-complete ()
17dd83b6f6d9 * pcomplete.el (pcomplete-completions-at-point): New function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107844
diff changeset
538 (let ((completion-at-point-functions '(pcomplete-completions-at-point)))
17dd83b6f6d9 * pcomplete.el (pcomplete-completions-at-point): New function,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107844
diff changeset
539 (completion-at-point)))
105762
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
540
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
541 ;;; Pcomplete's native UI.
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
542
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
543 ;;;###autoload
57701
28c08e3b5530 (pcomplete): Instead of interactive-p,
Richard M. Stallman <rms@gnu.org>
parents: 55205
diff changeset
544 (defun pcomplete (&optional interactively)
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
545 "Support extensible programmable completion.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
546 To use this function, just bind the TAB key to it, or add it to your
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
547 completion functions list (it should occur fairly early in the list)."
57701
28c08e3b5530 (pcomplete): Instead of interactive-p,
Richard M. Stallman <rms@gnu.org>
parents: 55205
diff changeset
548 (interactive "p")
28c08e3b5530 (pcomplete): Instead of interactive-p,
Richard M. Stallman <rms@gnu.org>
parents: 55205
diff changeset
549 (if (and interactively
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
550 pcomplete-cycle-completions
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
551 pcomplete-current-completions
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
552 (memq last-command '(pcomplete
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
553 pcomplete-expand-and-complete
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
554 pcomplete-reverse)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
555 (progn
108765
d835100c3e8b Replace Lisp calls to delete-backward-char by delete-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108587
diff changeset
556 (delete-char (- pcomplete-last-completion-length))
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
557 (if (eq this-command 'pcomplete-reverse)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
558 (progn
105764
a5db863758a8 (pcomplete-std-complete): Obey pcomplete-use-paring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105762
diff changeset
559 (push (car (last pcomplete-current-completions))
a5db863758a8 (pcomplete-std-complete): Obey pcomplete-use-paring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105762
diff changeset
560 pcomplete-current-completions)
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
561 (setcdr (last pcomplete-current-completions 2) nil))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
562 (nconc pcomplete-current-completions
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
563 (list (car pcomplete-current-completions)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
564 (setq pcomplete-current-completions
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
565 (cdr pcomplete-current-completions)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
566 (pcomplete-insert-entry pcomplete-last-completion-stub
105709
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
567 (car pcomplete-current-completions)
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
568 nil pcomplete-last-completion-raw))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
569 (setq pcomplete-current-completions nil
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
570 pcomplete-last-completion-raw nil)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
571 (catch 'pcompleted
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
572 (let* ((pcomplete-stub)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
573 pcomplete-seen pcomplete-norm-func
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
574 pcomplete-args pcomplete-last pcomplete-index
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
575 (pcomplete-autolist pcomplete-autolist)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
576 (pcomplete-suffix-list pcomplete-suffix-list)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
577 (completions (pcomplete-completions))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
578 (result (pcomplete-do-complete pcomplete-stub completions)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
579 (and result
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
580 (not (eq (car result) 'listed))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
581 (cdr result)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
582 (pcomplete-insert-entry pcomplete-stub (cdr result)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
583 (memq (car result)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
584 '(sole shortest))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
585 pcomplete-last-completion-raw))))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
586
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
587 ;;;###autoload
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
588 (defun pcomplete-reverse ()
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
589 "If cycling completion is in use, cycle backwards."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
590 (interactive)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
591 (call-interactively 'pcomplete))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
592
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
593 ;;;###autoload
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
594 (defun pcomplete-expand-and-complete ()
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
595 "Expand the textual value of the current argument.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
596 This will modify the current buffer."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
597 (interactive)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
598 (let ((pcomplete-expand-before-complete t))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
599 (pcomplete)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
600
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
601 ;;;###autoload
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
602 (defun pcomplete-continue ()
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
603 "Complete without reference to any cycling completions."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
604 (interactive)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
605 (setq pcomplete-current-completions nil
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
606 pcomplete-last-completion-raw nil)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
607 (call-interactively 'pcomplete))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
608
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
609 ;;;###autoload
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
610 (defun pcomplete-expand ()
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
611 "Expand the textual value of the current argument.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
612 This will modify the current buffer."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
613 (interactive)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
614 (let ((pcomplete-expand-before-complete t)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
615 (pcomplete-expand-only-p t))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
616 (pcomplete)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
617 (when (and pcomplete-current-completions
105709
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
618 (> (length pcomplete-current-completions) 0)) ;??
108765
d835100c3e8b Replace Lisp calls to delete-backward-char by delete-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108587
diff changeset
619 (delete-char (- pcomplete-last-completion-length))
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
620 (while pcomplete-current-completions
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
621 (unless (pcomplete-insert-entry
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
622 "" (car pcomplete-current-completions) t
105709
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
623 pcomplete-last-completion-raw)
49131
c814bafa1987 (pcomplete-termination-string): Added a variable for modifying the
John Wiegley <johnw@newartisans.com>
parents: 46818
diff changeset
624 (insert-and-inherit pcomplete-termination-string))
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
625 (setq pcomplete-current-completions
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
626 (cdr pcomplete-current-completions))))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
627
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
628 ;;;###autoload
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
629 (defun pcomplete-help ()
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
630 "Display any help information relative to the current argument."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
631 (interactive)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
632 (let ((pcomplete-show-help t))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
633 (pcomplete)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
634
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
635 ;;;###autoload
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
636 (defun pcomplete-list ()
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
637 "Show the list of possible completions for the current argument."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
638 (interactive)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
639 (when (and pcomplete-cycle-completions
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
640 pcomplete-current-completions
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
641 (eq last-command 'pcomplete-argument))
108765
d835100c3e8b Replace Lisp calls to delete-backward-char by delete-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108587
diff changeset
642 (delete-char (- pcomplete-last-completion-length))
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
643 (setq pcomplete-current-completions nil
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
644 pcomplete-last-completion-raw nil))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
645 (let ((pcomplete-show-list t))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
646 (pcomplete)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
647
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
648 ;;; Internal Functions:
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
649
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
650 ;; argument handling
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
651
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
652 ;; for the sake of the bye-compiler, when compiling other files that
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
653 ;; contain completion functions
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
654 (defvar pcomplete-args nil)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
655 (defvar pcomplete-begins nil)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
656 (defvar pcomplete-last nil)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
657 (defvar pcomplete-index nil)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
658 (defvar pcomplete-stub nil)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
659 (defvar pcomplete-seen nil)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
660 (defvar pcomplete-norm-func nil)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
661
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
662 (defun pcomplete-arg (&optional index offset)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
663 "Return the textual content of the INDEXth argument.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
664 INDEX is based from the current processing position. If INDEX is
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
665 positive, values returned are closer to the command argument; if
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
666 negative, they are closer to the last argument. If the INDEX is
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
667 outside of the argument list, nil is returned. The default value for
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
668 INDEX is 0, meaning the current argument being examined.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
669
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
670 The special indices `first' and `last' may be used to access those
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
671 parts of the list.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
672
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
673 The OFFSET argument is added to/taken away from the index that will be
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
674 used. This is really only useful with `first' and `last', for
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
675 accessing absolute argument positions."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
676 (setq index
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
677 (if (eq index 'first)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
678 0
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
679 (if (eq index 'last)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
680 pcomplete-last
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
681 (- pcomplete-index (or index 0)))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
682 (if offset
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
683 (setq index (+ index offset)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
684 (nth index pcomplete-args))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
685
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
686 (defun pcomplete-begin (&optional index offset)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
687 "Return the beginning position of the INDEXth argument.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
688 See the documentation for `pcomplete-arg'."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
689 (setq index
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
690 (if (eq index 'first)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
691 0
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
692 (if (eq index 'last)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
693 pcomplete-last
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
694 (- pcomplete-index (or index 0)))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
695 (if offset
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
696 (setq index (+ index offset)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
697 (nth index pcomplete-begins))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
698
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
699 (defsubst pcomplete-actual-arg (&optional index offset)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
700 "Return the actual text representation of the last argument.
55105
7438df87d96a (pcomplete-opt, pcomplete-actual-arg, pcomplete-match-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
701 This is different from `pcomplete-arg', which returns the textual value
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
702 that the last argument evaluated to. This function returns what the
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
703 user actually typed in."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
704 (buffer-substring (pcomplete-begin index offset) (point)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
705
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
706 (defsubst pcomplete-next-arg ()
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
707 "Move the various pointers to the next argument."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
708 (setq pcomplete-index (1+ pcomplete-index)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
709 pcomplete-stub (pcomplete-arg))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
710 (if (> pcomplete-index pcomplete-last)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
711 (progn
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
712 (message "No completions")
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
713 (throw 'pcompleted nil))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
714
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
715 (defun pcomplete-command-name ()
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
716 "Return the command name of the first argument."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
717 (file-name-nondirectory (pcomplete-arg 'first)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
718
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
719 (defun pcomplete-match (regexp &optional index offset start)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
720 "Like `string-match', but on the current completion argument."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
721 (let ((arg (pcomplete-arg (or index 1) offset)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
722 (if arg
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
723 (string-match regexp arg start)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
724 (throw 'pcompleted nil))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
725
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
726 (defun pcomplete-match-string (which &optional index offset)
55105
7438df87d96a (pcomplete-opt, pcomplete-actual-arg, pcomplete-match-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
727 "Like `match-string', but on the current completion argument."
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
728 (let ((arg (pcomplete-arg (or index 1) offset)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
729 (if arg
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
730 (match-string which arg)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
731 (throw 'pcompleted nil))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
732
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
733 (defalias 'pcomplete-match-beginning 'match-beginning)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
734 (defalias 'pcomplete-match-end 'match-end)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
735
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
736 (defsubst pcomplete--test (pred arg)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
737 "Perform a programmable completion predicate match."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
738 (and pred
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
739 (cond ((eq pred t) t)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
740 ((functionp pred)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
741 (funcall pred arg))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
742 ((stringp pred)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
743 (string-match (concat "^" pred "$") arg)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
744 pred))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
745
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
746 (defun pcomplete-test (predicates &optional index offset)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
747 "Predicates to test the current programmable argument with."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
748 (let ((arg (pcomplete-arg (or index 1) offset)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
749 (unless (null predicates)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
750 (if (not (listp predicates))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
751 (pcomplete--test predicates arg)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
752 (let ((pred predicates)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
753 found)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
754 (while (and pred (not found))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
755 (setq found (pcomplete--test (car pred) arg)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
756 pred (cdr pred)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
757 found)))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
758
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
759 (defun pcomplete-parse-buffer-arguments ()
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
760 "Parse whitespace separated arguments in the current region."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
761 (let ((begin (point-min))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
762 (end (point-max))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
763 begins args)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
764 (save-excursion
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
765 (goto-char begin)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
766 (while (< (point) end)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
767 (skip-chars-forward " \t\n")
105764
a5db863758a8 (pcomplete-std-complete): Obey pcomplete-use-paring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105762
diff changeset
768 (push (point) begins)
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
769 (skip-chars-forward "^ \t\n")
105764
a5db863758a8 (pcomplete-std-complete): Obey pcomplete-use-paring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105762
diff changeset
770 (push (buffer-substring-no-properties
a5db863758a8 (pcomplete-std-complete): Obey pcomplete-use-paring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105762
diff changeset
771 (car begins) (point))
a5db863758a8 (pcomplete-std-complete): Obey pcomplete-use-paring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105762
diff changeset
772 args))
a5db863758a8 (pcomplete-std-complete): Obey pcomplete-use-paring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105762
diff changeset
773 (cons (nreverse args) (nreverse begins)))))
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
774
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
775 ;;;###autoload
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
776 (defun pcomplete-comint-setup (completef-sym)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
777 "Setup a comint buffer to use pcomplete.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
778 COMPLETEF-SYM should be the symbol where the
55105
7438df87d96a (pcomplete-opt, pcomplete-actual-arg, pcomplete-match-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
779 dynamic-complete-functions are kept. For comint mode itself,
7438df87d96a (pcomplete-opt, pcomplete-actual-arg, pcomplete-match-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
780 this is `comint-dynamic-complete-functions'."
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
781 (set (make-local-variable 'pcomplete-parse-arguments-function)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
782 'pcomplete-parse-comint-arguments)
105727
65c5d19965b2 (pcomplete-common-suffix, pcomplete-table-subvert): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105709
diff changeset
783 (set (make-local-variable completef-sym)
65c5d19965b2 (pcomplete-common-suffix, pcomplete-table-subvert): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105709
diff changeset
784 (copy-sequence (symbol-value completef-sym)))
103870
a75fa842931b * pcomplete.el (pcomplete-comint-setup): Check for
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
785 (let* ((funs (symbol-value completef-sym))
105788
fedd4c047ce7 (pcomplete-comint-setup): If there's a choice, replace
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105764
diff changeset
786 (elem (or (memq 'shell-dynamic-complete-filename funs)
fedd4c047ce7 (pcomplete-comint-setup): If there's a choice, replace
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105764
diff changeset
787 (memq 'comint-dynamic-complete-filename funs))))
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
788 (if elem
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
789 (setcar elem 'pcomplete)
46769
8bb6a2e5d6bd (pcomplete-comint-setup): Use `add-to-list', to prevent adding the
John Wiegley <johnw@newartisans.com>
parents: 46762
diff changeset
790 (add-to-list completef-sym 'pcomplete))))
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
791
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
792 ;;;###autoload
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
793 (defun pcomplete-shell-setup ()
105709
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
794 "Setup `shell-mode' to use pcomplete."
105762
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
795 ;; FIXME: insufficient
105727
65c5d19965b2 (pcomplete-common-suffix, pcomplete-table-subvert): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105709
diff changeset
796 (pcomplete-comint-setup 'comint-dynamic-complete-functions))
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
797
86234
860a7a8e779e * progmodes/octave-mod.el (inferior-octave-send-list-and-digest):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 86202
diff changeset
798 (declare-function comint-bol "comint" (&optional arg))
860a7a8e779e * progmodes/octave-mod.el (inferior-octave-send-list-and-digest):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 86202
diff changeset
799
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
800 (defun pcomplete-parse-comint-arguments ()
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
801 "Parse whitespace separated arguments in the current region."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
802 (let ((begin (save-excursion (comint-bol nil) (point)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
803 (end (point))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
804 begins args)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
805 (save-excursion
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
806 (goto-char begin)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
807 (while (< (point) end)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
808 (skip-chars-forward " \t\n")
105727
65c5d19965b2 (pcomplete-common-suffix, pcomplete-table-subvert): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105709
diff changeset
809 (push (point) begins)
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
810 (let ((skip t))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
811 (while skip
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
812 (skip-chars-forward "^ \t\n")
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
813 (if (eq (char-before) ?\\)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
814 (skip-chars-forward " \t\n")
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
815 (setq skip nil))))
105727
65c5d19965b2 (pcomplete-common-suffix, pcomplete-table-subvert): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105709
diff changeset
816 (push (buffer-substring-no-properties (car begins) (point))
65c5d19965b2 (pcomplete-common-suffix, pcomplete-table-subvert): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105709
diff changeset
817 args))
65c5d19965b2 (pcomplete-common-suffix, pcomplete-table-subvert): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105709
diff changeset
818 (cons (nreverse args) (nreverse begins)))))
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
819
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
820 (defun pcomplete-parse-arguments (&optional expand-p)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
821 "Parse the command line arguments. Most completions need this info."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
822 (let ((results (funcall pcomplete-parse-arguments-function)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
823 (when results
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
824 (setq pcomplete-args (or (car results) (list ""))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
825 pcomplete-begins (or (cdr results) (list (point)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
826 pcomplete-last (1- (length pcomplete-args))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
827 pcomplete-index 0
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
828 pcomplete-stub (pcomplete-arg 'last))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
829 (let ((begin (pcomplete-begin 'last)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
830 (if (and pcomplete-cycle-completions
105727
65c5d19965b2 (pcomplete-common-suffix, pcomplete-table-subvert): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105709
diff changeset
831 (listp pcomplete-stub) ;??
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
832 (not pcomplete-expand-only-p))
105727
65c5d19965b2 (pcomplete-common-suffix, pcomplete-table-subvert): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105709
diff changeset
833 (let* ((completions pcomplete-stub) ;??
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
834 (common-stub (car completions))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
835 (c completions)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
836 (len (length common-stub)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
837 (while (and c (> len 0))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
838 (while (and (> len 0)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
839 (not (string=
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
840 (substring common-stub 0 len)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
841 (substring (car c) 0
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
842 (min (length (car c))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
843 len)))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
844 (setq len (1- len)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
845 (setq c (cdr c)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
846 (setq pcomplete-stub (substring common-stub 0 len)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
847 pcomplete-autolist t)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
848 (when (and begin (not pcomplete-show-list))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
849 (delete-region begin (point))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
850 (pcomplete-insert-entry "" pcomplete-stub))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
851 (throw 'pcomplete-completions completions))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
852 (when expand-p
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
853 (if (stringp pcomplete-stub)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
854 (when begin
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
855 (delete-region begin (point))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
856 (insert-and-inherit pcomplete-stub))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
857 (if (and (listp pcomplete-stub)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
858 pcomplete-expand-only-p)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
859 ;; this is for the benefit of `pcomplete-expand'
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
860 (setq pcomplete-last-completion-length (- (point) begin)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
861 pcomplete-current-completions pcomplete-stub)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
862 (error "Cannot expand argument"))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
863 (if pcomplete-expand-only-p
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
864 (throw 'pcompleted t)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
865 pcomplete-args))))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
866
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
867 (defun pcomplete-quote-argument (filename)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
868 "Return FILENAME with magic characters quoted.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
869 Magic characters are those in `pcomplete-arg-quote-list'."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
870 (if (null pcomplete-arg-quote-list)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
871 filename
105762
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
872 (let ((index 0))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
873 (mapconcat (lambda (c)
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
874 (prog1
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
875 (or (run-hook-with-args-until-success
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
876 'pcomplete-quote-arg-hook filename index)
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
877 (when (memq c pcomplete-arg-quote-list)
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
878 (string "\\" c))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
879 (char-to-string c))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
880 (setq index (1+ index))))
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
881 filename
5f2c736569a0 (pcomplete-unquote-argument-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105727
diff changeset
882 ""))))
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
883
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
884 ;; file-system completion lists
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
885
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
886 (defsubst pcomplete-dirs-or-entries (&optional regexp predicate)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
887 "Return either directories, or qualified entries."
105709
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
888 ;; FIXME: pcomplete-entries doesn't return a list any more.
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
889 (pcomplete-entries
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
890 nil
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
891 (lexical-let ((re regexp)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
892 (pred predicate))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
893 (lambda (f)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
894 (or (file-directory-p f)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
895 (and (if (not re) t (string-match re f))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
896 (if (not pred) t (funcall pred f))))))))
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
897
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
898 (defun pcomplete-entries (&optional regexp predicate)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
899 "Complete against a list of directory candidates.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
900 If REGEXP is non-nil, it is a regular expression used to refine the
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
901 match (files not matching the REGEXP will be excluded).
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
902 If PREDICATE is non-nil, it will also be used to refine the match
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
903 \(files for which the PREDICATE returns nil will be excluded).
46762
85cd02534241 (pcomplete-entries): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 43827
diff changeset
904 If no directory information can be extracted from the completed
55105
7438df87d96a (pcomplete-opt, pcomplete-actual-arg, pcomplete-match-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
905 component, `default-directory' is used as the basis for completion."
106298
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
906 (let* ((name (substitute-env-vars pcomplete-stub))
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
907 (completion-ignore-case pcomplete-ignore-case)
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
908 (default-directory (expand-file-name
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
909 (or (file-name-directory name)
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
910 default-directory)))
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
911 above-cutoff)
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
912 (setq name (file-name-nondirectory name)
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
913 pcomplete-stub name)
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
914 (let ((completions
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
915 (file-name-all-completions name default-directory)))
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
916 (if regexp
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
917 (setq completions
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
918 (pcomplete-pare-list
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
919 completions nil
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
920 (function
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
921 (lambda (file)
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
922 (not (string-match regexp file)))))))
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
923 (if predicate
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
924 (setq completions
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
925 (pcomplete-pare-list
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
926 completions nil
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
927 (function
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
928 (lambda (file)
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
929 (not (funcall predicate file)))))))
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
930 (if (or pcomplete-file-ignore pcomplete-dir-ignore)
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
931 (setq completions
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
932 (pcomplete-pare-list
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
933 completions nil
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
934 (function
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
935 (lambda (file)
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
936 (if (eq (aref file (1- (length file)))
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
937 ?/)
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
938 (and pcomplete-dir-ignore
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
939 (string-match pcomplete-dir-ignore file))
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
940 (and pcomplete-file-ignore
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
941 (string-match pcomplete-file-ignore file))))))))
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
942 (setq above-cutoff (and pcomplete-cycle-cutoff-length
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
943 (> (length completions)
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
944 pcomplete-cycle-cutoff-length)))
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
945 (sort completions
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
946 (function
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
947 (lambda (l r)
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
948 ;; for the purposes of comparison, remove the
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
949 ;; trailing slash from directory names.
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
950 ;; Otherwise, "foo.old/" will come before "foo/",
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
951 ;; since . is earlier in the ASCII alphabet than
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
952 ;; /
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
953 (let ((left (if (eq (aref l (1- (length l)))
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
954 ?/)
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
955 (substring l 0 (1- (length l)))
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
956 l))
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
957 (right (if (eq (aref r (1- (length r)))
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
958 ?/)
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
959 (substring r 0 (1- (length r)))
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
960 r)))
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
961 (if above-cutoff
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
962 (string-lessp left right)
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
963 (funcall pcomplete-compare-entry-function
3a4157b5e536 * eshell/em-prompt.el (eshell-prompt-function): Abbreviate pwd, since
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106109
diff changeset
964 left right)))))))))
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
965
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
966 (defsubst pcomplete-all-entries (&optional regexp predicate)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
967 "Like `pcomplete-entries', but doesn't ignore any entries."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
968 (let (pcomplete-file-ignore
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
969 pcomplete-dir-ignore)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
970 (pcomplete-entries regexp predicate)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
971
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
972 (defsubst pcomplete-dirs (&optional regexp)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
973 "Complete amongst a list of directories."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
974 (pcomplete-entries regexp 'file-directory-p))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
975
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
976 ;; generation of completion lists
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
977
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
978 (defun pcomplete-find-completion-function (command)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
979 "Find the completion function to call for the given COMMAND."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
980 (let ((sym (intern-soft
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
981 (concat "pcomplete/" (symbol-name major-mode) "/" command))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
982 (unless sym
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
983 (setq sym (intern-soft (concat "pcomplete/" command))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
984 (and sym (fboundp sym) sym)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
985
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
986 (defun pcomplete-completions ()
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
987 "Return a list of completions for the current argument position."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
988 (catch 'pcomplete-completions
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
989 (when (pcomplete-parse-arguments pcomplete-expand-before-complete)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
990 (if (= pcomplete-index pcomplete-last)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
991 (funcall pcomplete-command-completion-function)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
992 (let ((sym (or (pcomplete-find-completion-function
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
993 (funcall pcomplete-command-name-function))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
994 pcomplete-default-completion-function)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
995 (ignore
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
996 (pcomplete-next-arg)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
997 (funcall sym)))))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
998
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
999 (defun pcomplete-opt (options &optional prefix no-ganging args-follow)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1000 "Complete a set of OPTIONS, each beginning with PREFIX (?- by default).
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1001 PREFIX may be t, in which case no PREFIX character is necessary.
55105
7438df87d96a (pcomplete-opt, pcomplete-actual-arg, pcomplete-match-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
1002 If NO-GANGING is non-nil, each option is separate (-xy is not allowed).
7438df87d96a (pcomplete-opt, pcomplete-actual-arg, pcomplete-match-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
1003 If ARGS-FOLLOW is non-nil, then options which take arguments may have
7438df87d96a (pcomplete-opt, pcomplete-actual-arg, pcomplete-match-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
1004 the argument appear after a ganged set of options. This is how tar
7438df87d96a (pcomplete-opt, pcomplete-actual-arg, pcomplete-match-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
1005 behaves, for example."
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1006 (if (and (= pcomplete-index pcomplete-last)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1007 (string= (pcomplete-arg) "-"))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1008 (let ((len (length options))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1009 (index 0)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1010 char choices)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1011 (while (< index len)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1012 (setq char (aref options index))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1013 (if (eq char ?\()
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1014 (let ((result (read-from-string options index)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1015 (setq index (cdr result)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1016 (unless (memq char '(?/ ?* ?? ?.))
105764
a5db863758a8 (pcomplete-std-complete): Obey pcomplete-use-paring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105762
diff changeset
1017 (push (char-to-string char) choices))
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1018 (setq index (1+ index))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1019 (throw 'pcomplete-completions
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1020 (mapcar
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1021 (function
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1022 (lambda (opt)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1023 (concat "-" opt)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1024 (pcomplete-uniqify-list choices))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1025 (let ((arg (pcomplete-arg)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1026 (when (and (> (length arg) 1)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1027 (stringp arg)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1028 (eq (aref arg 0) (or prefix ?-)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1029 (pcomplete-next-arg)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1030 (let ((char (aref arg 1))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1031 (len (length options))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1032 (index 0)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1033 opt-char arg-char result)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1034 (while (< (1+ index) len)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1035 (setq opt-char (aref options index)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1036 arg-char (aref options (1+ index)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1037 (if (eq arg-char ?\()
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1038 (setq result
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1039 (read-from-string options (1+ index))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1040 index (cdr result)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1041 result (car result))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1042 (setq result nil))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1043 (when (and (eq char opt-char)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1044 (memq arg-char '(?\( ?/ ?* ?? ?.)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1045 (if (< pcomplete-index pcomplete-last)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1046 (pcomplete-next-arg)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1047 (throw 'pcomplete-completions
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1048 (cond ((eq arg-char ?/) (pcomplete-dirs))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1049 ((eq arg-char ?*) (pcomplete-executables))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1050 ((eq arg-char ??) nil)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1051 ((eq arg-char ?.) (pcomplete-entries))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1052 ((eq arg-char ?\() (eval result))))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1053 (setq index (1+ index))))))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1054
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1055 (defun pcomplete--here (&optional form stub paring form-only)
55105
7438df87d96a (pcomplete-opt, pcomplete-actual-arg, pcomplete-match-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
1056 "Complete against the current argument, if at the end.
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1057 See the documentation for `pcomplete-here'."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1058 (if (< pcomplete-index pcomplete-last)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1059 (progn
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1060 (if (eq paring 0)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1061 (setq pcomplete-seen nil)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1062 (unless (eq paring t)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1063 (let ((arg (pcomplete-arg)))
105709
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1064 (when (stringp arg)
105764
a5db863758a8 (pcomplete-std-complete): Obey pcomplete-use-paring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105762
diff changeset
1065 (push (if paring
a5db863758a8 (pcomplete-std-complete): Obey pcomplete-use-paring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105762
diff changeset
1066 (funcall paring arg)
a5db863758a8 (pcomplete-std-complete): Obey pcomplete-use-paring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105762
diff changeset
1067 (file-truename arg))
a5db863758a8 (pcomplete-std-complete): Obey pcomplete-use-paring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105762
diff changeset
1068 pcomplete-seen)))))
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1069 (pcomplete-next-arg)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1070 t)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1071 (when pcomplete-show-help
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1072 (pcomplete--help)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1073 (throw 'pcompleted t))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1074 (if stub
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1075 (setq pcomplete-stub stub))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1076 (if (or (eq paring t) (eq paring 0))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1077 (setq pcomplete-seen nil)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1078 (setq pcomplete-norm-func (or paring 'file-truename)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1079 (unless form-only
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1080 (run-hooks 'pcomplete-try-first-hook))
105709
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1081 (throw 'pcomplete-completions
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1082 (if (functionp form)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1083 (funcall form)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1084 ;; Old calling convention, might still be used by files
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1085 ;; byte-compiled with the older code.
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1086 (eval form)))))
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1087
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1088 (defmacro pcomplete-here (&optional form stub paring form-only)
55105
7438df87d96a (pcomplete-opt, pcomplete-actual-arg, pcomplete-match-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
1089 "Complete against the current argument, if at the end.
105709
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1090 If completion is to be done here, evaluate FORM to generate the completion
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1091 table which will be used for completion purposes. If STUB is a
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1092 string, use it as the completion stub instead of the default (which is
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1093 the entire text of the current argument).
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1094
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1095 For an example of when you might want to use STUB: if the current
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1096 argument text is 'long-path-name/', you don't want the completions
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1097 list display to be cluttered by 'long-path-name/' appearing at the
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1098 beginning of every alternative. Not only does this make things less
105709
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1099 intelligible, but it is also inefficient. Yet, if the completion list
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1100 does not begin with this string for every entry, the current argument
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1101 won't complete correctly.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1102
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1103 The solution is to specify a relative stub. It allows you to
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1104 substitute a different argument from the current argument, almost
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1105 always for the sake of efficiency.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1106
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1107 If PARING is nil, this argument will be pared against previous
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1108 arguments using the function `file-truename' to normalize them.
55105
7438df87d96a (pcomplete-opt, pcomplete-actual-arg, pcomplete-match-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
1109 PARING may be a function, in which case that function is used for
7438df87d96a (pcomplete-opt, pcomplete-actual-arg, pcomplete-match-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
1110 normalization. If PARING is t, the argument dealt with by this
7438df87d96a (pcomplete-opt, pcomplete-actual-arg, pcomplete-match-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
1111 call will not participate in argument paring. If it is the
7438df87d96a (pcomplete-opt, pcomplete-actual-arg, pcomplete-match-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
1112 integer 0, all previous arguments that have been seen will be
7438df87d96a (pcomplete-opt, pcomplete-actual-arg, pcomplete-match-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
1113 cleared.
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1114
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1115 If FORM-ONLY is non-nil, only the result of FORM will be used to
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1116 generate the completions list. This means that the hook
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1117 `pcomplete-try-first-hook' will not be run."
105709
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1118 (declare (debug t))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1119 `(pcomplete--here (lambda () ,form) ,stub ,paring ,form-only))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1120
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1121
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1122 (defmacro pcomplete-here* (&optional form stub form-only)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1123 "An alternate form which does not participate in argument paring."
105709
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1124 (declare (debug t))
107844
17333bba44b4 * pcomplete.el (pcomplete-here*): Fix mistaken change (bug#5935).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
1125 `(pcomplete-here ,form ,stub t ,form-only))
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1126
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1127 ;; display support
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1128
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1129 (defun pcomplete-restore-windows ()
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1130 "If the only window change was due to Completions, restore things."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1131 (if pcomplete-last-window-config
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1132 (let* ((cbuf (get-buffer "*Completions*"))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1133 (cwin (and cbuf (get-buffer-window cbuf))))
81389
4e4dec192190 (pcomplete-restore-windows): Remove redundant check.
Juanma Barranquero <lekktu@gmail.com>
parents: 77053
diff changeset
1134 (when (window-live-p cwin)
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1135 (bury-buffer cbuf)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1136 (set-window-configuration pcomplete-last-window-config))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1137 (setq pcomplete-last-window-config nil
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1138 pcomplete-window-restore-timer nil))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1139
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1140 ;; Abstractions so that the code below will work for both Emacs 20 and
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1141 ;; XEmacs 21
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1142
86202
794e428cd497 * eshell/esh-util.el (eshell-under-xemacs-p): Remove.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 82140
diff changeset
1143 (defalias 'pcomplete-event-matches-key-specifier-p
794e428cd497 * eshell/esh-util.el (eshell-under-xemacs-p): Remove.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 82140
diff changeset
1144 (if (featurep 'xemacs)
794e428cd497 * eshell/esh-util.el (eshell-under-xemacs-p): Remove.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 82140
diff changeset
1145 'event-matches-key-specifier-p
794e428cd497 * eshell/esh-util.el (eshell-under-xemacs-p): Remove.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 82140
diff changeset
1146 'eq))
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1147
77053
6231e179c4db (pcomplete-read-event): One single definition, and not a defsubst.
Richard M. Stallman <rms@gnu.org>
parents: 77015
diff changeset
1148 (defun pcomplete-read-event (&optional prompt)
6231e179c4db (pcomplete-read-event): One single definition, and not a defsubst.
Richard M. Stallman <rms@gnu.org>
parents: 77015
diff changeset
1149 (if (fboundp 'read-event)
6231e179c4db (pcomplete-read-event): One single definition, and not a defsubst.
Richard M. Stallman <rms@gnu.org>
parents: 77015
diff changeset
1150 (read-event prompt)
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1151 (aref (read-key-sequence prompt) 0)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1152
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1153 (defun pcomplete-show-completions (completions)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1154 "List in help buffer sorted COMPLETIONS.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1155 Typing SPC flushes the help buffer."
105709
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1156 (when pcomplete-window-restore-timer
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1157 (cancel-timer pcomplete-window-restore-timer)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1158 (setq pcomplete-window-restore-timer nil))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1159 (unless pcomplete-last-window-config
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1160 (setq pcomplete-last-window-config (current-window-configuration)))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1161 (with-output-to-temp-buffer "*Completions*"
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1162 (display-completion-list completions))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1163 (message "Hit space to flush")
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1164 (let (event)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1165 (prog1
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1166 (catch 'done
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1167 (while (with-current-buffer (get-buffer "*Completions*")
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1168 (setq event (pcomplete-read-event)))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1169 (cond
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1170 ((pcomplete-event-matches-key-specifier-p event ?\s)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1171 (set-window-configuration pcomplete-last-window-config)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1172 (setq pcomplete-last-window-config nil)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1173 (throw 'done nil))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1174 ((or (pcomplete-event-matches-key-specifier-p event 'tab)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1175 ;; Needed on a terminal
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1176 (pcomplete-event-matches-key-specifier-p event 9))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1177 (let ((win (or (get-buffer-window "*Completions*" 0)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1178 (display-buffer "*Completions*"
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1179 'not-this-window))))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1180 (with-selected-window win
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1181 (if (pos-visible-in-window-p (point-max))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1182 (goto-char (point-min))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1183 (scroll-up))))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1184 (message ""))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1185 (t
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1186 (setq unread-command-events (list event))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1187 (throw 'done nil)))))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1188 (if (and pcomplete-last-window-config
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1189 pcomplete-restore-window-delay)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1190 (setq pcomplete-window-restore-timer
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1191 (run-with-timer pcomplete-restore-window-delay nil
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1192 'pcomplete-restore-windows))))))
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1193
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1194 ;; insert completion at point
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1195
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1196 (defun pcomplete-insert-entry (stub entry &optional addsuffix raw-p)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1197 "Insert a completion entry at point.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1198 Returns non-nil if a space was appended at the end."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1199 (let ((here (point)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1200 (if (not pcomplete-ignore-case)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1201 (insert-and-inherit (if raw-p
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1202 (substring entry (length stub))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1203 (pcomplete-quote-argument
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1204 (substring entry (length stub)))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1205 ;; the stub is not quoted at this time, so to determine the
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1206 ;; length of what should be in the buffer, we must quote it
105727
65c5d19965b2 (pcomplete-common-suffix, pcomplete-table-subvert): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105709
diff changeset
1207 ;; FIXME: Here we presume that quoting `stub' gives us the exact
65c5d19965b2 (pcomplete-common-suffix, pcomplete-table-subvert): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105709
diff changeset
1208 ;; text in the buffer before point, which is not guaranteed;
65c5d19965b2 (pcomplete-common-suffix, pcomplete-table-subvert): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105709
diff changeset
1209 ;; e.g. it is not the case in eshell when completing ${FOO}tm[TAB].
108765
d835100c3e8b Replace Lisp calls to delete-backward-char by delete-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108587
diff changeset
1210 (delete-char (- (length (pcomplete-quote-argument stub))))
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1211 ;; if there is already a backslash present to handle the first
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1212 ;; character, don't bother quoting it
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1213 (when (eq (char-before) ?\\)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1214 (insert-and-inherit (substring entry 0 1))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1215 (setq entry (substring entry 1)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1216 (insert-and-inherit (if raw-p
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1217 entry
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1218 (pcomplete-quote-argument entry))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1219 (let (space-added)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1220 (when (and (not (memq (char-before) pcomplete-suffix-list))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1221 addsuffix)
49131
c814bafa1987 (pcomplete-termination-string): Added a variable for modifying the
John Wiegley <johnw@newartisans.com>
parents: 46818
diff changeset
1222 (insert-and-inherit pcomplete-termination-string)
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1223 (setq space-added t))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1224 (setq pcomplete-last-completion-length (- (point) here)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1225 pcomplete-last-completion-stub stub)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1226 space-added)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1227
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1228 ;; selection of completions
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1229
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1230 (defun pcomplete-do-complete (stub completions)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1231 "Dynamically complete at point using STUB and COMPLETIONS.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1232 This is basically just a wrapper for `pcomplete-stub' which does some
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1233 extra checking, and munging of the COMPLETIONS list."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1234 (unless (stringp stub)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1235 (message "Cannot complete argument")
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1236 (throw 'pcompleted nil))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1237 (if (null completions)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1238 (ignore
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1239 (if (and stub (> (length stub) 0))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1240 (message "No completions of %s" stub)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1241 (message "No completions")))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1242 ;; pare it down, if applicable
105709
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1243 (when (and pcomplete-use-paring pcomplete-seen)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1244 (setq pcomplete-seen
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1245 (mapcar 'directory-file-name pcomplete-seen))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1246 (dolist (p pcomplete-seen)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1247 (add-to-list 'pcomplete-seen
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1248 (funcall pcomplete-norm-func p)))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1249 (setq completions
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1250 (apply-partially 'completion-table-with-predicate
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1251 completions
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1252 (lambda (f)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1253 (not (member
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1254 (funcall pcomplete-norm-func
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1255 (directory-file-name f))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1256 pcomplete-seen)))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1257 'strict)))
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1258 ;; OK, we've got a list of completions.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1259 (if pcomplete-show-list
105709
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1260 ;; FIXME: pay attention to boundaries.
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1261 (pcomplete-show-completions (all-completions stub completions))
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1262 (pcomplete-stub stub completions))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1263
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1264 (defun pcomplete-stub (stub candidates &optional cycle-p)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1265 "Dynamically complete STUB from CANDIDATES list.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1266 This function inserts completion characters at point by completing
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1267 STUB from the strings in CANDIDATES. A completions listing may be
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1268 shown in a help buffer if completion is ambiguous.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1269
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1270 Returns nil if no completion was inserted.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1271 Returns `sole' if completed with the only completion match.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1272 Returns `shortest' if completed with the shortest of the matches.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1273 Returns `partial' if completed as far as possible with the matches.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1274 Returns `listed' if a completion listing was shown.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1275
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1276 See also `pcomplete-filename'."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1277 (let* ((completion-ignore-case pcomplete-ignore-case)
105709
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1278 (completions (all-completions stub candidates))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1279 (entry (try-completion stub candidates))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1280 result)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1281 (cond
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1282 ((null entry)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1283 (if (and stub (> (length stub) 0))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1284 (message "No completions of %s" stub)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1285 (message "No completions")))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1286 ((eq entry t)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1287 (setq entry stub)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1288 (message "Sole completion")
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1289 (setq result 'sole))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1290 ((= 1 (length completions))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1291 (setq result 'sole))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1292 ((and pcomplete-cycle-completions
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1293 (or cycle-p
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1294 (not pcomplete-cycle-cutoff-length)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1295 (<= (length completions)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1296 pcomplete-cycle-cutoff-length)))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1297 (let ((bound (car (completion-boundaries stub candidates nil ""))))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1298 (unless (zerop bound)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1299 (setq completions (mapcar (lambda (c) (concat (substring stub 0 bound) c))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1300 completions)))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1301 (setq entry (car completions)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1302 pcomplete-current-completions completions)))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1303 ((and pcomplete-recexact
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1304 (string-equal stub entry)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1305 (member entry completions))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1306 ;; It's not unique, but user wants shortest match.
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1307 (message "Completed shortest")
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1308 (setq result 'shortest))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1309 ((or pcomplete-autolist
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1310 (string-equal stub entry))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1311 ;; It's not unique, list possible completions.
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1312 ;; FIXME: pay attention to boundaries.
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1313 (pcomplete-show-completions completions)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1314 (setq result 'listed))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1315 (t
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1316 (message "Partially completed")
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1317 (setq result 'partial)))
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1318 (cons result entry)))
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1319
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1320 ;; context sensitive help
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1321
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1322 (defun pcomplete--help ()
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1323 "Produce context-sensitive help for the current argument.
55105
7438df87d96a (pcomplete-opt, pcomplete-actual-arg, pcomplete-match-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
1324 If specific documentation can't be given, be generic."
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1325 (if (and pcomplete-help
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1326 (or (and (stringp pcomplete-help)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1327 (fboundp 'Info-goto-node))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1328 (listp pcomplete-help)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1329 (if (listp pcomplete-help)
65582
4d1085b02d64 Message format spec fixes (1)
Deepak Goel <deego@gnufans.org>
parents: 64762
diff changeset
1330 (message "%s" (eval pcomplete-help))
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1331 (save-window-excursion (info))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1332 (switch-to-buffer-other-window "*info*")
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1333 (funcall (symbol-function 'Info-goto-node) pcomplete-help))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1334 (if pcomplete-man-function
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1335 (let ((cmd (funcall pcomplete-command-name-function)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1336 (if (and cmd (> (length cmd) 0))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1337 (funcall pcomplete-man-function cmd)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1338 (message "No context-sensitive help available"))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1339
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1340 ;; general utilities
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1341
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1342 (defun pcomplete-pare-list (l r &optional pred)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1343 "Destructively remove from list L all elements matching any in list R.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1344 Test is done using `equal'.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1345 If PRED is non-nil, it is a function used for further removal.
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1346 Returns the resultant list."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1347 (while (and l (or (and r (member (car l) r))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1348 (and pred
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1349 (funcall pred (car l)))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1350 (setq l (cdr l)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1351 (let ((m l))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1352 (while m
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1353 (while (and (cdr m)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1354 (or (and r (member (cadr m) r))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1355 (and pred
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1356 (funcall pred (cadr m)))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1357 (setcdr m (cddr m)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1358 (setq m (cdr m))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1359 l)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1360
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1361 (defun pcomplete-uniqify-list (l)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1362 "Sort and remove multiples in L."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1363 (setq l (sort l 'string-lessp))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1364 (let ((m l))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1365 (while m
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1366 (while (and (cdr m)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1367 (string= (car m)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1368 (cadr m)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1369 (setcdr m (cddr m)))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1370 (setq m (cdr m))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1371 l)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1372
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1373 (defun pcomplete-process-result (cmd &rest args)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1374 "Call CMD using `call-process' and return the simplest result."
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1375 (with-temp-buffer
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1376 (apply 'call-process cmd nil t nil args)
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1377 (skip-chars-backward "\n")
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1378 (buffer-substring (point-min) (point))))
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1379
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1380 ;; create a set of aliases which allow completion functions to be not
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1381 ;; quite so verbose
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1382
105709
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1383 ;;; jww (1999-10-20): are these a good idea?
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1384 ;; (defalias 'pc-here 'pcomplete-here)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1385 ;; (defalias 'pc-test 'pcomplete-test)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1386 ;; (defalias 'pc-opt 'pcomplete-opt)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1387 ;; (defalias 'pc-match 'pcomplete-match)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1388 ;; (defalias 'pc-match-string 'pcomplete-match-string)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1389 ;; (defalias 'pc-match-beginning 'pcomplete-match-beginning)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1390 ;; (defalias 'pc-match-end 'pcomplete-match-end)
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1391
e044a3c6a7e6 Allow the use of completion-tables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103870
diff changeset
1392 (provide 'pcomplete)
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1393
93975
1e3a407766b9 Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87649
diff changeset
1394 ;; arch-tag: ae32ef2d-dbed-4244-8b0f-cf5a2a3b07a4
29876
edfec1c0d511 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1395 ;;; pcomplete.el ends here