Mercurial > emacs
annotate lisp/icomplete.el @ 14659:7669c19beda8
Comment change.
| author | Richard M. Stallman <rms@gnu.org> |
|---|---|
| date | Sat, 24 Feb 1996 04:43:05 +0000 |
| parents | 83f275dcd93a |
| children | c23c9712ef5c |
| rev | line source |
|---|---|
| 13337 | 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 |
| 13337 | 3 ;; Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc. |
| 5147 | 4 |
| 13337 | 5 ;; Author: Ken Manheimer <klm@nist.gov> |
| 6 ;; Maintainer: Ken Manheimer <klm@nist.gov> | |
| 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 |
| 14169 | 34 ;; See 'icomplete-completions' docstring for a description of the |
| 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 |
| 14169 | 41 ;; To activate icomplete mode, simply load the package. You can |
| 42 ;; subsequently deactivate it by invoking the function icomplete-mode | |
| 43 ;; with a negative prefix-arg (C-U -1 ESC-x icomplete-mode). Also, | |
| 44 ;; you can prevent activation of the mode during package load by | |
| 45 ;; first setting the variable `icomplete-mode' to nil. Icompletion | |
| 46 ;; can be enabled any time after the package is loaded by invoking | |
| 47 ;; 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
|
48 |
| 14169 | 49 ;; Thanks to everyone for their suggestions for refinements of this |
| 50 ;; package. I particularly have to credit Michael Cook, who | |
| 51 ;; implemented an incremental completion style in his 'iswitch' | |
| 52 ;; functions that served as a model for icomplete. Some other | |
| 53 ;; contributors: Noah Freidman (restructuring as minor mode), Colin | |
| 54 ;; Rafferty (lemacs reconciliation), Lars Lindberg, RMS, and | |
| 55 ;; others. | |
|
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
56 |
| 14169 | 57 ;; klm. |
| 5147 | 58 |
| 59 ;;; Code: | |
| 60 | |
|
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
61 ;;;_* Provide |
| 5147 | 62 (provide 'icomplete) |
| 63 | |
|
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
64 ;;;_* User Customization variables |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
65 |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
66 ;;;_* Initialization |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
67 ;;;_ = icomplete-minibuffer-setup-hook |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
68 (defvar icomplete-minibuffer-setup-hook nil |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
69 "*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
|
70 |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
71 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
|
72 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
|
73 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
|
74 |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
75 \(add-hook 'icomplete-minibuffer-setup-hook |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
76 \(function |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
77 \(lambda () |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
78 \(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
|
79 \(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
|
80 |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
81 will constrain rsz-mini to a maximum minibuffer height of 3 lines when |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
82 icompletion is occurring.") |
| 5147 | 83 |
|
5375
0e30cf7aa525
(icomplete-pre-command-hook): Reconciled with keyboard macro operation.
Richard M. Stallman <rms@gnu.org>
parents:
5147
diff
changeset
|
84 ;;;_ + Internal Variables |
|
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
85 ;;;_ = icomplete-mode |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
86 (defvar icomplete-mode t |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
87 "Non-nil enables incremental minibuffer completion, once |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
88 `\\[icomplete-mode]' function has set things up.") |
|
5375
0e30cf7aa525
(icomplete-pre-command-hook): Reconciled with keyboard macro operation.
Richard M. Stallman <rms@gnu.org>
parents:
5147
diff
changeset
|
89 ;;;_ = icomplete-eoinput 1 |
| 5147 | 90 (defvar icomplete-eoinput 1 |
| 91 "Point where minibuffer input ends and completion info begins.") | |
| 92 (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
|
93 ;;;_ = icomplete-pre-command-hook |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
94 (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
|
95 "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
|
96 |
|
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
97 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
|
98 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
|
99 minibuffer completion.") |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
100 (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
|
101 ;;;_ = icomplete-post-command-hook |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
102 (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
|
103 "Incremental-minibuffer-completion post-command-hook. |
| 5147 | 104 |
|
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
105 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
|
106 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
|
107 minibuffer completion.") |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
108 (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
|
109 |
|
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
110 ;;;_ > icomplete-mode (&optional prefix) |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
111 ;;;###autoload |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
112 (defun icomplete-mode (&optional prefix) |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
113 "Activate incremental minibuffer completion for this emacs session, |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
114 or deactivate with negative prefix arg." |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
115 (interactive "p") |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
116 (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
|
117 (cond ((>= prefix 0) |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
118 (setq icomplete-mode t) |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
119 ;; 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
|
120 ;; no great loss. |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
121 (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
|
122 (t (setq icomplete-mode nil)))) |
| 5147 | 123 |
|
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
124 ;;;_ > icomplete-simple-completing-p () |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
125 (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
|
126 |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
127 "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
|
128 |
|
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
129 Conditions are: |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
130 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
|
131 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
|
132 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
|
133 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
|
134 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
|
135 |
|
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
136 (and (window-minibuffer-p (selected-window)) |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
137 (not executing-macro) |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
138 (not (symbolp minibuffer-completion-table)))) |
|
12933
61f11030ecc9
(icomplete-minibuffer-setup): Use make-local-hook
Richard M. Stallman <rms@gnu.org>
parents:
11035
diff
changeset
|
139 |
|
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
140 ;;;_ > icomplete-minibuffer-setup () |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
141 ;;;###autoload |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
142 (defun icomplete-minibuffer-setup () |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
143 "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
|
144 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
|
145 (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
|
146 (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
|
147 (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
|
148 (function (lambda () |
|
12933
61f11030ecc9
(icomplete-minibuffer-setup): Use make-local-hook
Richard M. Stallman <rms@gnu.org>
parents:
11035
diff
changeset
|
149 (run-hooks 'icomplete-pre-command-hook))) |
|
61f11030ecc9
(icomplete-minibuffer-setup): Use make-local-hook
Richard M. Stallman <rms@gnu.org>
parents:
11035
diff
changeset
|
150 nil t) |
|
61f11030ecc9
(icomplete-minibuffer-setup): Use make-local-hook
Richard M. Stallman <rms@gnu.org>
parents:
11035
diff
changeset
|
151 (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
|
152 (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
|
153 (function (lambda () |
|
12933
61f11030ecc9
(icomplete-minibuffer-setup): Use make-local-hook
Richard M. Stallman <rms@gnu.org>
parents:
11035
diff
changeset
|
154 (run-hooks 'icomplete-post-command-hook))) |
|
61f11030ecc9
(icomplete-minibuffer-setup): Use make-local-hook
Richard M. Stallman <rms@gnu.org>
parents:
11035
diff
changeset
|
155 nil t) |
|
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
156 (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
|
157 |
|
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
158 ;;;_* Completion |
|
5375
0e30cf7aa525
(icomplete-pre-command-hook): Reconciled with keyboard macro operation.
Richard M. Stallman <rms@gnu.org>
parents:
5147
diff
changeset
|
159 |
|
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
160 ;;;_ > icomplete-tidy () |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
161 (defun icomplete-tidy () |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
162 "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
|
163 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
|
164 and `minibuffer-setup-hook'." |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
165 (if (icomplete-simple-completing-p) |
| 5147 | 166 (if (and (boundp 'icomplete-eoinput) |
| 167 icomplete-eoinput) | |
|
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
168 |
| 5147 | 169 (if (> icomplete-eoinput (point-max)) |
| 170 ;; Oops, got rug pulled out from under us - reinit: | |
| 171 (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
|
172 (let ((buffer-undo-list buffer-undo-list )) ; prevent entry |
| 5147 | 173 (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
|
174 |
|
5375
0e30cf7aa525
(icomplete-pre-command-hook): Reconciled with keyboard macro operation.
Richard M. Stallman <rms@gnu.org>
parents:
5147
diff
changeset
|
175 ;; Reestablish the local variable 'cause minibuffer-setup is weird: |
| 5147 | 176 (make-local-variable 'icomplete-eoinput) |
| 177 (setq icomplete-eoinput 1)))) | |
|
12933
61f11030ecc9
(icomplete-minibuffer-setup): Use make-local-hook
Richard M. Stallman <rms@gnu.org>
parents:
11035
diff
changeset
|
178 |
|
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
179 ;;;_ > icomplete-exhibit () |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
180 (defun icomplete-exhibit () |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
181 "Insert icomplete completions display. |
|
12933
61f11030ecc9
(icomplete-minibuffer-setup): Use make-local-hook
Richard M. Stallman <rms@gnu.org>
parents:
11035
diff
changeset
|
182 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
|
183 and `minibuffer-setup-hook'." |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
184 (if (icomplete-simple-completing-p) |
| 5147 | 185 (let ((contents (buffer-substring (point-min)(point-max))) |
| 186 (buffer-undo-list t)) | |
| 187 (save-excursion | |
| 188 (goto-char (point-max)) | |
| 189 ; Register the end of input, so we | |
| 190 ; know where the extra stuff | |
| 191 ; (match-status info) begins: | |
| 192 (if (not (boundp 'icomplete-eoinput)) | |
| 193 ;; In case it got wiped out by major mode business: | |
| 194 (make-local-variable 'icomplete-eoinput)) | |
| 195 (setq icomplete-eoinput (point)) | |
| 196 ; Insert the match-status information: | |
| 197 (if (> (point-max) 1) | |
| 198 (insert-string | |
|
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
199 (icomplete-completions contents |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
200 minibuffer-completion-table |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
201 minibuffer-completion-predicate |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
202 (not |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
203 minibuffer-completion-confirm)))))))) |
|
12933
61f11030ecc9
(icomplete-minibuffer-setup): Use make-local-hook
Richard M. Stallman <rms@gnu.org>
parents:
11035
diff
changeset
|
204 |
|
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
205 ;;;_ > 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
|
206 (defun icomplete-completions (name candidates predicate require-match) |
| 5147 | 207 "Identify prospective candidates for minibuffer completion. |
| 208 | |
|
5375
0e30cf7aa525
(icomplete-pre-command-hook): Reconciled with keyboard macro operation.
Richard M. Stallman <rms@gnu.org>
parents:
5147
diff
changeset
|
209 The display is updated with each minibuffer keystroke during |
| 5147 | 210 minibuffer completion. |
| 211 | |
| 212 Prospective completion suffixes (if any) are displayed, bracketed by | |
| 213 one of \(), \[], or \{} pairs. The choice of brackets is as follows: | |
| 214 | |
| 215 \(...) - a single prospect is identified and matching is enforced, | |
| 216 \[...] - a single prospect is identified but matching is optional, or | |
| 217 \{...} - 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
|
218 further input is required to distinguish a single one. |
| 5147 | 219 |
|
13989
d60fffb9acd1
(icomplete-simple-completing-p, icomplete-completions):
Karl Heuer <kwzh@gnu.org>
parents:
13337
diff
changeset
|
220 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
|
221 \(whether complete or not), or ` \[No matches]', if no eligible |
| 5147 | 222 matches exist." |
| 223 | |
| 224 (let ((comps (all-completions name candidates predicate)) | |
| 225 ; "-determined" - only one candidate | |
| 226 (open-bracket-determined (if require-match "(" "[")) | |
| 227 (close-bracket-determined (if require-match ")" "]")) | |
| 228 ;"-prospects" - more than one candidate | |
| 229 (open-bracket-prospects "{") | |
| 230 (close-bracket-prospects "}") | |
| 231 ) | |
| 232 (cond ((null comps) (format " %sNo matches%s" | |
| 233 open-bracket-determined | |
| 234 close-bracket-determined)) | |
| 235 ((null (cdr comps)) ;one match | |
| 236 (concat (if (and (> (length (car comps)) | |
| 237 (length name))) | |
| 238 (concat open-bracket-determined | |
| 239 (substring (car comps) (length name)) | |
| 240 close-bracket-determined) | |
| 241 "") | |
| 242 " [Matched]")) | |
| 243 (t ;multiple matches | |
| 244 (let* ((most (try-completion name candidates predicate)) | |
| 245 (most-len (length most)) | |
| 246 most-is-exact | |
| 247 (alternatives | |
| 248 (apply | |
|
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
249 (function concat) |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
250 (cdr (apply |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
251 (function nconc) |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
252 (mapcar '(lambda (com) |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
253 (if (= (length com) most-len) |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
254 ;; Most is one exact match, |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
255 ;; note that and leave out |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
256 ;; for later indication: |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
257 (progn |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
258 (setq most-is-exact t) |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
259 ()) |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
260 (list "," |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
261 (substring com |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
262 most-len)))) |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
263 comps)))))) |
| 5147 | 264 (concat (and (> most-len (length name)) |
| 265 (concat open-bracket-determined | |
| 266 (substring most (length name)) | |
| 267 close-bracket-determined)) | |
| 268 open-bracket-prospects | |
| 269 (if most-is-exact | |
| 270 (concat "," alternatives) | |
| 271 alternatives) | |
| 272 close-bracket-prospects)))))) | |
| 273 | |
|
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
274 ;;;_ + Initialization |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
275 ;;; If user hasn't setq-default icomplete-mode to nil, then setup for |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
276 ;;; activation: |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
277 (if icomplete-mode |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
278 (icomplete-mode)) |
| 5147 | 279 |
|
5375
0e30cf7aa525
(icomplete-pre-command-hook): Reconciled with keyboard macro operation.
Richard M. Stallman <rms@gnu.org>
parents:
5147
diff
changeset
|
280 |
|
8871
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
281 ;;;_* Local emacs vars. |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
282 ;;;Local variables: |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
283 ;;;outline-layout: (-2 :) |
|
299cfe0a6069
Major rewrite to behave more like a minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
8434
diff
changeset
|
284 ;;;End: |
| 5147 | 285 |
| 286 ;;; icomplete.el ends here | |
|
5375
0e30cf7aa525
(icomplete-pre-command-hook): Reconciled with keyboard macro operation.
Richard M. Stallman <rms@gnu.org>
parents:
5147
diff
changeset
|
287 |
