Mercurial > emacs
annotate lisp/icomplete.el @ 22416:a517da228cb9
(uce-message-text): Change the text of message that is sent.
(uce-reply-to-uce): Do not assume all Received lines
are on top of message without headers like `From' or `To'.
(uce-reply-to-uce): Parse Received lines better.
(uce-mail-reader): New user option.
(uce-reply-to uce): Add support for Gnus. User is supposed to set
uce-mail-reader to `gnus' if using Gnus to read mail. The default is
to assume Rmail. There's no magic to determine what mail reader is
currently active, so it is not possible to mix using uce.el with Rmail
and Gnus.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Tue, 09 Jun 1998 23:40:56 +0000 |
parents | 8b04da31eb63 |
children | f1206b87ffc8 |
rev | line source |
---|---|
21803 | 1 ;;; icomplete.el --- minibuffer completion incremental feedback |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
2 |
18060 | 3 ;; Copyright (C) 1992, 1993, 1994, 1997 Free Software Foundation, Inc. |
5147 | 4 |
18029
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
5 ;; Author: Ken Manheimer <klm@python.org> |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
6 ;; Maintainer: Ken Manheimer <klm@python.org> |
13337 | 7 ;; Created: Mar 1993 klm@nist.gov - first release to usenet |
8 ;; Keywords: help, abbrev | |
5147 | 9 |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
10 ;; This file is part of GNU Emacs. |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
11 |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
12 ;; GNU Emacs is free software; you can redistribute it and/or modify |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
13 ;; it under the terms of the GNU General Public License as published by |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
14 ;; the Free Software Foundation; either version 2, or (at your option) |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
15 ;; any later version. |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
16 |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
17 ;; GNU Emacs is distributed in the hope that it will be useful, |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
20 ;; GNU General Public License for more details. |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
21 |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
22 ;; You should have received a copy of the GNU General Public License |
14169 | 23 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
25 ;; Boston, MA 02111-1307, USA. | |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
26 |
5147 | 27 ;;; Commentary: |
28 | |
14169 | 29 ;; Loading this package implements a more fine-grained minibuffer |
30 ;; completion feedback scheme. Prospective completions are concisely | |
31 ;; indicated within the minibuffer itself, with each successive | |
32 ;; keystroke. | |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
33 |
20764 | 34 ;; See `icomplete-completions' docstring for a description of the |
14169 | 35 ;; icomplete display format. |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
36 |
14169 | 37 ;; See the `icomplete-minibuffer-setup-hook' docstring for a means to |
38 ;; customize icomplete setup for interoperation with other | |
39 ;; minibuffer-oriented packages. | |
5147 | 40 |
20764 | 41 ;; To activate icomplete mode, simply add the following to .emacs: |
42 ;; (icomplete-mode) | |
43 ;; You can subsequently deactivate it by invoking the function | |
44 ;; icomplete-mode with a negative prefix-arg (C-U -1 ESC-x | |
45 ;; icomplete-mode). Also, you can prevent activation of the mode | |
46 ;; during package load by first setting the variable `icomplete-mode' | |
47 ;; to nil. Icompletion can be enabled any time after the package is | |
48 ;; loaded by invoking icomplete-mode without a prefix arg. | |
5375
0e30cf7aa525
(icomplete-pre-command-hook): Reconciled with keyboard macro operation.
Richard M. Stallman <rms@gnu.org>
parents:
5147
diff
changeset
|
49 |
18029
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
50 ;; This version of icomplete runs on Emacs 19.18 and later. (It |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
51 ;; depends on the incorporation of minibuffer-setup-hook.) The elisp |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
52 ;; archives, ftp://archive.cis.ohio-state.edu/pub/gnu/emacs/elisp-archive, |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
53 ;; probably still has a version that works in GNU Emacs v18. |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
54 |
14169 | 55 ;; Thanks to everyone for their suggestions for refinements of this |
56 ;; package. I particularly have to credit Michael Cook, who | |
57 ;; implemented an incremental completion style in his 'iswitch' | |
58 ;; functions that served as a model for icomplete. Some other | |
20764 | 59 ;; contributors: Noah Friedman (restructuring as minor mode), Colin |
18251
e0327e90d706
Don't call icomplete-mode; let the user do that.
Richard M. Stallman <rms@gnu.org>
parents:
18060
diff
changeset
|
60 ;; Rafferty (lemacs reconciliation), Lars Lindberg, RMS, and others. |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
61 |
14169 | 62 ;; klm. |
5147 | 63 |
64 ;;; Code: | |
65 | |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
66 ;;;_* Provide |
5147 | 67 (provide 'icomplete) |
68 | |
20764 | 69 |
70 (defgroup icomplete nil | |
71 "Show completions dynamically in minibuffer." | |
72 :prefix "icomplete-" | |
73 :group 'minibuffer) | |
74 | |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
75 ;;;_* User Customization variables |
20764 | 76 (defcustom icomplete-mode nil |
77 "*Non-nil enables incremental minibuffer completion. | |
78 As text is typed into the minibuffer, prospective completions are indicated | |
79 in the minibuffer. | |
80 You must modify via \\[customize] for this variable to have an effect." | |
81 :set (lambda (symbol value) | |
82 (icomplete-mode (if value 1 -1))) | |
83 :initialize 'custom-initialize-default | |
84 :type 'boolean | |
85 :group 'icomplete | |
86 :require 'icomplete) | |
87 | |
88 (defcustom icomplete-compute-delay .3 | |
18029
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
89 "*Completions-computation stall, used only with large-number |
20764 | 90 completions - see `icomplete-delay-completions-threshold'." |
91 :type 'number | |
92 :group 'icomplete) | |
93 | |
94 (defcustom icomplete-delay-completions-threshold 400 | |
95 "*Pending-completions number over which to apply icomplete-compute-delay." | |
96 :type 'integer | |
97 :group 'icomplete) | |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
98 |
20764 | 99 (defcustom icomplete-max-delay-chars 3 |
100 "*Maximum number of initial chars to apply icomplete compute delay." | |
101 :type 'integer | |
102 :group 'icomplete) | |
103 | |
104 (defcustom icomplete-show-key-bindings t | |
105 "*If non-nil, show key bindings as well as completion for sole matches." | |
106 :type 'boolean | |
107 :group 'icomplete) | |
108 | |
109 (defcustom icomplete-minibuffer-setup-hook nil | |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
110 "*Icomplete-specific customization of minibuffer setup. |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
111 |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
112 This hook is run during minibuffer setup iff icomplete will be active. |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
113 It is intended for use in customizing icomplete for interoperation |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
114 with other packages. For instance: |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
115 |
18029
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
116 \(add-hook 'icomplete-minibuffer-setup-hook |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
117 \(function |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
118 \(lambda () |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
119 \(make-local-variable 'resize-minibuffer-window-max-height) |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
120 \(setq resize-minibuffer-window-max-height 3)))) |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
121 |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
122 will constrain rsz-mini to a maximum minibuffer height of 3 lines when |
20764 | 123 icompletion is occurring." |
124 :type 'hook | |
125 :group 'icomplete) | |
126 | |
127 | |
128 ;;;_* Initialization | |
5147 | 129 |
5375
0e30cf7aa525
(icomplete-pre-command-hook): Reconciled with keyboard macro operation.
Richard M. Stallman <rms@gnu.org>
parents:
5147
diff
changeset
|
130 ;;;_ + Internal Variables |
0e30cf7aa525
(icomplete-pre-command-hook): Reconciled with keyboard macro operation.
Richard M. Stallman <rms@gnu.org>
parents:
5147
diff
changeset
|
131 ;;;_ = icomplete-eoinput 1 |
5147 | 132 (defvar icomplete-eoinput 1 |
133 "Point where minibuffer input ends and completion info begins.") | |
134 (make-variable-buffer-local 'icomplete-eoinput) | |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
135 ;;;_ = icomplete-pre-command-hook |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
136 (defvar icomplete-pre-command-hook nil |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
137 "Incremental-minibuffer-completion pre-command-hook. |
5375
0e30cf7aa525
(icomplete-pre-command-hook): Reconciled with keyboard macro operation.
Richard M. Stallman <rms@gnu.org>
parents:
5147
diff
changeset
|
138 |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
139 Is run in minibuffer before user input when `icomplete-mode' is non-nil. |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
140 Use `icomplete-mode' function to set it up properly for incremental |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
141 minibuffer completion.") |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
142 (add-hook 'icomplete-pre-command-hook 'icomplete-tidy) |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
143 ;;;_ = icomplete-post-command-hook |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
144 (defvar icomplete-post-command-hook nil |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
145 "Incremental-minibuffer-completion post-command-hook. |
5147 | 146 |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
147 Is run in minibuffer after user input when `icomplete-mode' is non-nil. |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
148 Use `icomplete-mode' function to set it up properly for incremental |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
149 minibuffer completion.") |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
150 (add-hook 'icomplete-post-command-hook 'icomplete-exhibit) |
5375
0e30cf7aa525
(icomplete-pre-command-hook): Reconciled with keyboard macro operation.
Richard M. Stallman <rms@gnu.org>
parents:
5147
diff
changeset
|
151 |
18029
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
152 (defun icomplete-get-keys (func-name) |
18251
e0327e90d706
Don't call icomplete-mode; let the user do that.
Richard M. Stallman <rms@gnu.org>
parents:
18060
diff
changeset
|
153 "Return strings naming keys bound to `func-name', or nil if none. |
e0327e90d706
Don't call icomplete-mode; let the user do that.
Richard M. Stallman <rms@gnu.org>
parents:
18060
diff
changeset
|
154 Examines the prior, not current, buffer, presuming that current buffer |
e0327e90d706
Don't call icomplete-mode; let the user do that.
Richard M. Stallman <rms@gnu.org>
parents:
18060
diff
changeset
|
155 is minibuffer." |
e0327e90d706
Don't call icomplete-mode; let the user do that.
Richard M. Stallman <rms@gnu.org>
parents:
18060
diff
changeset
|
156 (if (commandp func-name) |
18029
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
157 (save-excursion |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
158 (let* ((sym (intern func-name)) |
18251
e0327e90d706
Don't call icomplete-mode; let the user do that.
Richard M. Stallman <rms@gnu.org>
parents:
18060
diff
changeset
|
159 (buf (other-buffer)) |
e0327e90d706
Don't call icomplete-mode; let the user do that.
Richard M. Stallman <rms@gnu.org>
parents:
18060
diff
changeset
|
160 (map (save-excursion (set-buffer buf) (current-local-map))) |
e0327e90d706
Don't call icomplete-mode; let the user do that.
Richard M. Stallman <rms@gnu.org>
parents:
18060
diff
changeset
|
161 (keys (where-is-internal sym map))) |
18029
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
162 (if keys |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
163 (concat "<" |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
164 (mapconcat 'key-description |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
165 (sort keys |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
166 #'(lambda (x y) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
167 (< (length x) (length y)))) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
168 ", ") |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
169 ">")))))) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
170 |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
171 ;;;_ > icomplete-mode (&optional prefix) |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
172 ;;;###autoload |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
173 (defun icomplete-mode (&optional prefix) |
18251
e0327e90d706
Don't call icomplete-mode; let the user do that.
Richard M. Stallman <rms@gnu.org>
parents:
18060
diff
changeset
|
174 "Activate incremental minibuffer completion for this Emacs session. |
e0327e90d706
Don't call icomplete-mode; let the user do that.
Richard M. Stallman <rms@gnu.org>
parents:
18060
diff
changeset
|
175 Deactivates with negative universal argument." |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
176 (interactive "p") |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
177 (or prefix (setq prefix 0)) |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
178 (cond ((>= prefix 0) |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
179 (setq icomplete-mode t) |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
180 ;; The following is not really necessary after first time - |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
181 ;; no great loss. |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
182 (add-hook 'minibuffer-setup-hook 'icomplete-minibuffer-setup)) |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
183 (t (setq icomplete-mode nil)))) |
5147 | 184 |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
185 ;;;_ > icomplete-simple-completing-p () |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
186 (defun icomplete-simple-completing-p () |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
187 "Non-nil if current window is minibuffer that's doing simple completion. |
8434
36da3d480ccd
(icomplete-prime-minibuffer): Copy the hook lists after making them local.
Richard M. Stallman <rms@gnu.org>
parents:
5375
diff
changeset
|
188 |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
189 Conditions are: |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
190 the selected window is a minibuffer, |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
191 and not in the middle of macro execution, |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
192 and minibuffer-completion-table is not a symbol (which would |
13989
d60fffb9acd1
(icomplete-simple-completing-p, icomplete-completions):
Karl Heuer <kwzh@gnu.org>
parents:
13337
diff
changeset
|
193 indicate some non-standard, non-simple completion mechanism, |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
194 like file-name and other custom-func completions)." |
5375
0e30cf7aa525
(icomplete-pre-command-hook): Reconciled with keyboard macro operation.
Richard M. Stallman <rms@gnu.org>
parents:
5147
diff
changeset
|
195 |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
196 (and (window-minibuffer-p (selected-window)) |
15302
c23c9712ef5c
Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents:
14169
diff
changeset
|
197 (not executing-kbd-macro) |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
198 (not (symbolp minibuffer-completion-table)))) |
12933
61f11030ecc9
(icomplete-minibuffer-setup): Use make-local-hook
Richard M. Stallman <rms@gnu.org>
parents:
11035
diff
changeset
|
199 |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
200 ;;;_ > icomplete-minibuffer-setup () |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
201 ;;;###autoload |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
202 (defun icomplete-minibuffer-setup () |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
203 "Run in minibuffer on activation to establish incremental completion. |
12933
61f11030ecc9
(icomplete-minibuffer-setup): Use make-local-hook
Richard M. Stallman <rms@gnu.org>
parents:
11035
diff
changeset
|
204 Usually run by inclusion in `minibuffer-setup-hook'." |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
205 (cond ((and icomplete-mode (icomplete-simple-completing-p)) |
12933
61f11030ecc9
(icomplete-minibuffer-setup): Use make-local-hook
Richard M. Stallman <rms@gnu.org>
parents:
11035
diff
changeset
|
206 (make-local-hook 'pre-command-hook) |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
207 (add-hook 'pre-command-hook |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
208 (function (lambda () |
12933
61f11030ecc9
(icomplete-minibuffer-setup): Use make-local-hook
Richard M. Stallman <rms@gnu.org>
parents:
11035
diff
changeset
|
209 (run-hooks 'icomplete-pre-command-hook))) |
61f11030ecc9
(icomplete-minibuffer-setup): Use make-local-hook
Richard M. Stallman <rms@gnu.org>
parents:
11035
diff
changeset
|
210 nil t) |
61f11030ecc9
(icomplete-minibuffer-setup): Use make-local-hook
Richard M. Stallman <rms@gnu.org>
parents:
11035
diff
changeset
|
211 (make-local-hook 'post-command-hook) |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
212 (add-hook 'post-command-hook |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
213 (function (lambda () |
12933
61f11030ecc9
(icomplete-minibuffer-setup): Use make-local-hook
Richard M. Stallman <rms@gnu.org>
parents:
11035
diff
changeset
|
214 (run-hooks 'icomplete-post-command-hook))) |
61f11030ecc9
(icomplete-minibuffer-setup): Use make-local-hook
Richard M. Stallman <rms@gnu.org>
parents:
11035
diff
changeset
|
215 nil t) |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
216 (run-hooks 'icomplete-minibuffer-setup-hook)))) |
12933
61f11030ecc9
(icomplete-minibuffer-setup): Use make-local-hook
Richard M. Stallman <rms@gnu.org>
parents:
11035
diff
changeset
|
217 |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
218 ;;;_* Completion |
5375
0e30cf7aa525
(icomplete-pre-command-hook): Reconciled with keyboard macro operation.
Richard M. Stallman <rms@gnu.org>
parents:
5147
diff
changeset
|
219 |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
220 ;;;_ > icomplete-tidy () |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
221 (defun icomplete-tidy () |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
222 "Remove completions display \(if any) prior to new user input. |
12933
61f11030ecc9
(icomplete-minibuffer-setup): Use make-local-hook
Richard M. Stallman <rms@gnu.org>
parents:
11035
diff
changeset
|
223 Should be run in on the minibuffer `pre-command-hook'. See `icomplete-mode' |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
224 and `minibuffer-setup-hook'." |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
225 (if (icomplete-simple-completing-p) |
5147 | 226 (if (and (boundp 'icomplete-eoinput) |
227 icomplete-eoinput) | |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
228 |
5147 | 229 (if (> icomplete-eoinput (point-max)) |
230 ;; Oops, got rug pulled out from under us - reinit: | |
231 (setq icomplete-eoinput (point-max)) | |
5375
0e30cf7aa525
(icomplete-pre-command-hook): Reconciled with keyboard macro operation.
Richard M. Stallman <rms@gnu.org>
parents:
5147
diff
changeset
|
232 (let ((buffer-undo-list buffer-undo-list )) ; prevent entry |
5147 | 233 (delete-region icomplete-eoinput (point-max)))) |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
234 |
5375
0e30cf7aa525
(icomplete-pre-command-hook): Reconciled with keyboard macro operation.
Richard M. Stallman <rms@gnu.org>
parents:
5147
diff
changeset
|
235 ;; Reestablish the local variable 'cause minibuffer-setup is weird: |
5147 | 236 (make-local-variable 'icomplete-eoinput) |
237 (setq icomplete-eoinput 1)))) | |
12933
61f11030ecc9
(icomplete-minibuffer-setup): Use make-local-hook
Richard M. Stallman <rms@gnu.org>
parents:
11035
diff
changeset
|
238 |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
239 ;;;_ > icomplete-exhibit () |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
240 (defun icomplete-exhibit () |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
241 "Insert icomplete completions display. |
12933
61f11030ecc9
(icomplete-minibuffer-setup): Use make-local-hook
Richard M. Stallman <rms@gnu.org>
parents:
11035
diff
changeset
|
242 Should be run via minibuffer `post-command-hook'. See `icomplete-mode' |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
243 and `minibuffer-setup-hook'." |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
244 (if (icomplete-simple-completing-p) |
5147 | 245 (let ((contents (buffer-substring (point-min)(point-max))) |
246 (buffer-undo-list t)) | |
247 (save-excursion | |
248 (goto-char (point-max)) | |
249 ; Register the end of input, so we | |
250 ; know where the extra stuff | |
251 ; (match-status info) begins: | |
252 (if (not (boundp 'icomplete-eoinput)) | |
253 ;; In case it got wiped out by major mode business: | |
254 (make-local-variable 'icomplete-eoinput)) | |
255 (setq icomplete-eoinput (point)) | |
256 ; Insert the match-status information: | |
18029
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
257 (if (and (> (point-max) 1) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
258 (or |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
259 ;; Don't bother with delay after certain number of chars: |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
260 (> (point-max) icomplete-max-delay-chars) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
261 ;; Don't delay if alternatives number is small enough: |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
262 (if minibuffer-completion-table |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
263 (cond ((numberp minibuffer-completion-table) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
264 (< minibuffer-completion-table |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
265 icomplete-delay-completions-threshold)) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
266 ((sequencep minibuffer-completion-table) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
267 (< (length minibuffer-completion-table) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
268 icomplete-delay-completions-threshold)) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
269 )) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
270 ;; Delay - give some grace time for next keystroke, before |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
271 ;; embarking on computing completions: |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
272 (sit-for icomplete-compute-delay))) |
5147 | 273 (insert-string |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
274 (icomplete-completions contents |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
275 minibuffer-completion-table |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
276 minibuffer-completion-predicate |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
277 (not |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
278 minibuffer-completion-confirm)))))))) |
12933
61f11030ecc9
(icomplete-minibuffer-setup): Use make-local-hook
Richard M. Stallman <rms@gnu.org>
parents:
11035
diff
changeset
|
279 |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
280 ;;;_ > icomplete-completions (name candidates predicate require-match) |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
281 (defun icomplete-completions (name candidates predicate require-match) |
5147 | 282 "Identify prospective candidates for minibuffer completion. |
283 | |
5375
0e30cf7aa525
(icomplete-pre-command-hook): Reconciled with keyboard macro operation.
Richard M. Stallman <rms@gnu.org>
parents:
5147
diff
changeset
|
284 The display is updated with each minibuffer keystroke during |
5147 | 285 minibuffer completion. |
286 | |
287 Prospective completion suffixes (if any) are displayed, bracketed by | |
288 one of \(), \[], or \{} pairs. The choice of brackets is as follows: | |
289 | |
290 \(...) - a single prospect is identified and matching is enforced, | |
291 \[...] - a single prospect is identified but matching is optional, or | |
292 \{...} - multiple prospects, separated by commas, are indicated, and | |
13989
d60fffb9acd1
(icomplete-simple-completing-p, icomplete-completions):
Karl Heuer <kwzh@gnu.org>
parents:
13337
diff
changeset
|
293 further input is required to distinguish a single one. |
5147 | 294 |
13989
d60fffb9acd1
(icomplete-simple-completing-p, icomplete-completions):
Karl Heuer <kwzh@gnu.org>
parents:
13337
diff
changeset
|
295 The displays for unambiguous matches have ` [Matched]' appended |
12933
61f11030ecc9
(icomplete-minibuffer-setup): Use make-local-hook
Richard M. Stallman <rms@gnu.org>
parents:
11035
diff
changeset
|
296 \(whether complete or not), or ` \[No matches]', if no eligible |
18251
e0327e90d706
Don't call icomplete-mode; let the user do that.
Richard M. Stallman <rms@gnu.org>
parents:
18060
diff
changeset
|
297 matches exist. \(Keybindings for uniquely matched commands |
18029
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
298 are exhibited within the square braces.)" |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
299 |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
300 ;; 'all-completions' doesn't like empty |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
301 ;; minibuffer-completion-table's (ie: (nil)) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
302 (if (and (listp candidates) (null (car candidates))) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
303 (setq candidates nil)) |
5147 | 304 |
305 (let ((comps (all-completions name candidates predicate)) | |
306 ; "-determined" - only one candidate | |
307 (open-bracket-determined (if require-match "(" "[")) | |
308 (close-bracket-determined (if require-match ")" "]")) | |
309 ;"-prospects" - more than one candidate | |
310 (open-bracket-prospects "{") | |
311 (close-bracket-prospects "}") | |
312 ) | |
18029
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
313 (catch 'input |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
314 (cond ((null comps) (format " %sNo matches%s" |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
315 open-bracket-determined |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
316 close-bracket-determined)) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
317 ((null (cdr comps)) ;one match |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
318 (concat (if (and (> (length (car comps)) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
319 (length name))) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
320 (concat open-bracket-determined |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
321 (substring (car comps) (length name)) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
322 close-bracket-determined) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
323 "") |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
324 " [Matched" |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
325 (let ((keys (and icomplete-show-key-bindings |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
326 (commandp (intern-soft (car comps))) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
327 (icomplete-get-keys (car comps))))) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
328 (if keys |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
329 (concat "; " keys) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
330 "")) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
331 "]")) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
332 (t ;multiple matches |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
333 (let* ((most |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
334 (try-completion name candidates |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
335 (and predicate |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
336 ;; Wrap predicate in impatience - ie, |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
337 ;; `throw' up when pending input is |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
338 ;; noticed. Adds some overhead to |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
339 ;; predicate, but should be worth it. |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
340 (function |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
341 (lambda (item) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
342 (if (input-pending-p) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
343 (throw 'input "") |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
344 (apply predicate |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
345 item nil))))))) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
346 (most-len (length most)) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
347 most-is-exact |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
348 (alternatives |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
349 (substring |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
350 (apply (function concat) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
351 (mapcar (function |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
352 (lambda (com) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
353 (if (input-pending-p) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
354 (throw 'input "")) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
355 (if (= (length com) most-len) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
356 ;; Most is one exact match, |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
357 ;; note that and leave out |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
358 ;; for later indication: |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
359 (progn |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
360 (setq most-is-exact t) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
361 ()) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
362 (concat "," |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
363 (substring com |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
364 most-len))))) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
365 comps)) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
366 1))) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
367 (concat (and (> most-len (length name)) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
368 (concat open-bracket-determined |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
369 (substring most (length name)) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
370 close-bracket-determined)) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
371 open-bracket-prospects |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
372 (if most-is-exact |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
373 ;; Add a ',' at the front to indicate "complete but |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
374 ;; not unique": |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
375 (concat "," alternatives) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
376 alternatives) |
82a56bdb2381
Integrated Emacs 19.34 and XEmacs 19.15
Karl Heuer <kwzh@gnu.org>
parents:
15302
diff
changeset
|
377 close-bracket-prospects))))))) |
5147 | 378 |
20764 | 379 (if icomplete-mode |
380 (icomplete-mode 1)) | |
381 | |
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
382 ;;;_* Local emacs vars. |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
383 ;;;Local variables: |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
384 ;;;outline-layout: (-2 :) |
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
385 ;;;End: |
5147 | 386 |
387 ;;; icomplete.el ends here |