annotate lisp/icomplete.el @ 24419:30e478cd167e

(shell-command-default-error-buffer): Renamed from shell-command-on-region-default-error-buffer. (shell-command-on-region): Mention in echo area when there is some error output. Mention success or failure, too. Accumulate multiple error outputs going forward, with formfeed in between. Display the error buffer when we have put something in it. (shell-command): Add the ERROR-BUFFER argument feature.
author Karl Heuer <kwzh@gnu.org>
date Mon, 01 Mar 1999 03:19:32 +0000
parents 8b04da31eb63
children f1206b87ffc8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21803
8b04da31eb63 Fix synopsis line.
Dave Love <fx@gnu.org>
parents: 21364
diff changeset
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
640305a5c871 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18029
diff changeset
3 ;; Copyright (C) 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
5147
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
84acc3adcd63 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 12933
diff changeset
7 ;; Created: Mar 1993 klm@nist.gov - first release to usenet
84acc3adcd63 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 12933
diff changeset
8 ;; Keywords: help, abbrev
5147
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13989
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13989
diff changeset
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13989
diff changeset
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
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 ;;; Commentary:
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13989
diff changeset
29 ;; Loading this package implements a more fine-grained minibuffer
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13989
diff changeset
30 ;; completion feedback scheme. Prospective completions are concisely
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13989
diff changeset
31 ;; indicated within the minibuffer itself, with each successive
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13989
diff changeset
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
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
34 ;; See `icomplete-completions' docstring for a description of the
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13989
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13989
diff changeset
37 ;; See the `icomplete-minibuffer-setup-hook' docstring for a means to
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13989
diff changeset
38 ;; customize icomplete setup for interoperation with other
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13989
diff changeset
39 ;; minibuffer-oriented packages.
5147
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40
20764
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
41 ;; To activate icomplete mode, simply add the following to .emacs:
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
42 ;; (icomplete-mode)
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
43 ;; You can subsequently deactivate it by invoking the function
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
44 ;; icomplete-mode with a negative prefix-arg (C-U -1 ESC-x
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
45 ;; icomplete-mode). Also, you can prevent activation of the mode
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
46 ;; during package load by first setting the variable `icomplete-mode'
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
47 ;; to nil. Icompletion can be enabled any time after the package is
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13989
diff changeset
55 ;; Thanks to everyone for their suggestions for refinements of this
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13989
diff changeset
56 ;; package. I particularly have to credit Michael Cook, who
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13989
diff changeset
57 ;; implemented an incremental completion style in his 'iswitch'
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13989
diff changeset
58 ;; functions that served as a model for icomplete. Some other
20764
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
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
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13989
diff changeset
62 ;; klm.
5147
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 ;;; Code:
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 (provide 'icomplete)
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68
20764
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
69
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
70 (defgroup icomplete nil
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
71 "Show completions dynamically in minibuffer."
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
72 :prefix "icomplete-"
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
73 :group 'minibuffer)
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
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
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
76 (defcustom icomplete-mode nil
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
77 "*Non-nil enables incremental minibuffer completion.
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
78 As text is typed into the minibuffer, prospective completions are indicated
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
79 in the minibuffer.
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
80 You must modify via \\[customize] for this variable to have an effect."
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
81 :set (lambda (symbol value)
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
82 (icomplete-mode (if value 1 -1)))
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
83 :initialize 'custom-initialize-default
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
84 :type 'boolean
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
85 :group 'icomplete
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
86 :require 'icomplete)
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
87
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
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
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
90 completions - see `icomplete-delay-completions-threshold'."
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
91 :type 'number
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
92 :group 'icomplete)
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
93
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
94 (defcustom icomplete-delay-completions-threshold 400
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
95 "*Pending-completions number over which to apply icomplete-compute-delay."
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
96 :type 'integer
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
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
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
99 (defcustom icomplete-max-delay-chars 3
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
100 "*Maximum number of initial chars to apply icomplete compute delay."
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
101 :type 'integer
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
102 :group 'icomplete)
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
103
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
104 (defcustom icomplete-show-key-bindings t
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
105 "*If non-nil, show key bindings as well as completion for sole matches."
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
106 :type 'boolean
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
107 :group 'icomplete)
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
108
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
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
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
123 icompletion is occurring."
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
124 :type 'hook
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
125 :group 'icomplete)
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
126
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
127
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
128 ;;;_* Initialization
5147
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 (defvar icomplete-eoinput 1
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 "Point where minibuffer input ends and completion info begins.")
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 (if (and (boundp 'icomplete-eoinput)
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 (if (> icomplete-eoinput (point-max))
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 ;; Oops, got rug pulled out from under us - reinit:
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 (make-local-variable 'icomplete-eoinput)
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 (let ((contents (buffer-substring (point-min)(point-max)))
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 (buffer-undo-list t))
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 (save-excursion
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248 (goto-char (point-max))
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 ; Register the end of input, so we
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 ; know where the extra stuff
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 ; (match-status info) begins:
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 (if (not (boundp 'icomplete-eoinput))
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 ;; In case it got wiped out by major mode business:
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 (make-local-variable 'icomplete-eoinput))
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 (setq icomplete-eoinput (point))
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 "Identify prospective candidates for minibuffer completion.
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 minibuffer completion.
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 Prospective completion suffixes (if any) are displayed, bracketed by
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 one of \(), \[], or \{} pairs. The choice of brackets is as follows:
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 \(...) - a single prospect is identified and matching is enforced,
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 \[...] - a single prospect is identified but matching is optional, or
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 (let ((comps (all-completions name candidates predicate))
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 ; "-determined" - only one candidate
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 (open-bracket-determined (if require-match "(" "["))
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 (close-bracket-determined (if require-match ")" "]"))
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 ;"-prospects" - more than one candidate
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 (open-bracket-prospects "{")
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 (close-bracket-prospects "}")
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378
20764
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
379 (if icomplete-mode
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
380 (icomplete-mode 1))
d1d94511b3b7 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 18251
diff changeset
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
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386
54b3438dfc7f Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387 ;;; icomplete.el ends here