Commit c89164c5 authored by Richard M. Stallman's avatar Richard M. Stallman
Browse files

(icomplete-pre-command-hook): Reconciled with keyboard macro operation.

(icomplete-post-command-hook): Likewise.
(window-minibuffer-p): Cleaned up according to suggestion from
Richard Mlynarik.
General rectification of doc strings and comments.
parent fea504fb
;;; icomplete.el - minibuffer completion incremental feedback
;;; This package is in the publid domain.
;;; This package is in the public domain.
;;; Author: Ken Manheimer <klm@nist.gov>
;;; Maintainer: Ken Manheimer <klm@nist.gov>
;;; Version: icomplete.el,v 3.2 1993/11/19 18:42:52 klm Exp klm
;;; Version: icomplete.el,v 3.3 1993/12/11 11:27:35 klm Exp klm
;;; Created: Mar 1993 klm@nist.gov - first release to usenet
;;; Keywords: help, abbrev
......@@ -15,12 +15,22 @@
;;; the documentation string for 'icomplete-prompt' for a specific
;;; description of icompletion.
;;; This will not work on Emacs 18 versions - there may be a version
;;; for v18 in the elisp archives, at archive.cis.ohio-state.edu, in
;;; /pub/gnu/emacs/elisp-archive.
;;; It should run on most version of Emacs 19 (including Lucid emacs
;;; 19 - thanks to the efforts of Colin Rafferty (craffert@lehman.com)
;;; - thanks, Colin!) This version of icomplete will *not* work on
;;; Emacs 18 versions - the elisp archives, at
;;; archive.cis.ohio-state.edu:/pub/gnu/emacs/elisp-archive, probably
;;; still has a version that works in GNU Emacs v18.
;;; Thanks to Colin Rafferty for assistance reconciling for lemacs,
;;; and to Michael Cook, who implemented an incremental completion
;;; style in his 'iswitch' functions that served as the basis for
;;; icomplete.
;;; Code:
;;;_* (Allout outline root topic. Please leave this in.)
;;;_ + Provide
(provide 'icomplete)
......@@ -29,18 +39,24 @@
(defvar icomplete-inhibit nil
"*Set this variable to t at any time to inhibit icomplete.")
;;;_ + Setup
;;;_ - Internal Variables
;;;_ + Internal Variables
;;;_ = icomplete-eoinput 1
(defvar icomplete-eoinput 1
"Point where minibuffer input ends and completion info begins.")
(make-variable-buffer-local 'icomplete-eoinput)
;;;_ > icomplete-prime-session ()
;;;###autoload
(defun icomplete-prime-session ()
"Prep emacs v 19 for icompletion. For emacs v19.18 and later revs,
icomplete is installed in 'minibuffer-setup-hook'. Global pre- and
post-command-hook functions are used in v19.17 and earlier revs."
"Prep emacs v 19 for more finely-grained minibuffer completion-feedback.
You can inhibit icomplete after loading by setting icomplete-inhibit
non-nil. Set the var back to nil to re-enable icomplete."
;; For emacs v19.18 and later revs, the icomplete key function is
;; installed in 'minibuffer-setup-hook'. Global pre- and post-
;; command-hook functions are used in v19.17 and earlier v19 revs."
(let* ((v19-rev (and (string-match "^19\\.\\([0-9]+\\)" emacs-version)
(string-to-int (substring emacs-version
......@@ -62,15 +78,16 @@ post-command-hook functions are used in v19.17 and earlier revs."
;;;_ > icomplete-prime-minibuffer ()
(defun icomplete-prime-minibuffer ()
"Prep emacs, v 19.18 or later, for icomplete. \(icomplete-prime-
session establishes global hooks, instead, in emacs 19 versions 19.17
and prior.\) Run via minibuffer-setup-hook \(emacs 19.18 or later\),
adds icomplete pre- and post-command hooks to do icomplete display
management."
"Prep emacs, v 19.18 or later, for icomplete.
\(In emacs v19.17 and earlier, and in lemacs, icomplete-prime-session
is used, instead to establish global hooks.\)
Run via minibuffer-setup-hook, adds icomplete pre- and post-command
hooks at the start of each minibuffer."
;; We append the hooks because preliminary version of blink-paren
;; post-command-hook i have interferes with proper operation of
;; minibuffer quit.
;; Append the hooks to avoid as much as posssible interference from
;; other hooks that foul up minibuffer quit.
(make-local-variable 'pre-command-hook)
(make-local-variable 'post-command-hook)
(add-hook 'pre-command-hook 'icomplete-pre-command-hook)
......@@ -79,19 +96,20 @@ management."
(defmacro icomplete-window-minibuffer-p ()
"Returns non-nil if current window is a minibuffer window.
Trivially equates to '(window-minibuffer-p nil)', with the nil
provided in case the argument is not optional in Lucid emacs (which
some net correspondance seems to indicate)."
'(window-minibuffer-p nil))
Trivially equates to '(window-minibuffer-p (selected-window))', with
the argument definitely provided for emacsen that require it, eg Lucid."
'(window-minibuffer-p (selected-window)))
;;;_ + Completion
;;;_ - Completion feedback hooks
;;;_ > icomplete-pre-command-hook ()
(defun icomplete-pre-command-hook ()
"Cleanup completions exhibit before user's new input (or whatever) is dealt
with."
"Cleanup completions display before user's new command is dealt with."
(if (and (icomplete-window-minibuffer-p)
(not executing-macro)
(not (symbolp minibuffer-completion-table))
(not icomplete-inhibit))
(if (and (boundp 'icomplete-eoinput)
......@@ -101,14 +119,15 @@ with."
(setq icomplete-eoinput (point-max))
(let ((buffer-undo-list buffer-undo-list )) ; prevent entry
(delete-region icomplete-eoinput (point-max))))
;; Reestablish the local variable 'cause minibuffer-setup is weird:
(make-local-variable 'icomplete-eoinput)
(setq icomplete-eoinput 1))))
;;;_ > icomplete-post-command-hook ()
(defun icomplete-post-command-hook ()
"Exhibit completions, leaving icomplete-eoinput with position where user
input leaves off and exhibit begins, so icomplete-pre-command-hook can
subsequently cleanup."
"Exhibit completions, leaving bookkeeping so pre- hook can tidy up."
(if (and (icomplete-window-minibuffer-p) ; ... in a minibuffer.
(not executing-macro)
(not icomplete-inhibit) ; ... not specifically inhibited.
;(sit-for 0) ; ... redisplay and if there's input
; waiting, then don't icomplete
......@@ -120,17 +139,14 @@ subsequently cleanup."
(icomplete-exhibit))))
;;;_ > icomplete-window-setup-hook ()
(defun icomplete-window-setup-hook ()
"Exhibit completions, leaving icomplete-eoinput with position where user
input leaves off and exhibit begins, so icomplete-pre-command-hook can
subsequently cleanup."
"Exhibit completions, leaving bookkeeping so pre- hook can tidy up."
(if (and (icomplete-window-minibuffer-p) ; ... in a minibuffer.
)
(message "ic ws doing")(sit-for 1)))
;;;_ > icomplete-exhibit ()
(defun icomplete-exhibit ()
"Exhibit completions, leaving icomplete-eoinput with position where user
input leaves off and exhibit begins, so icomplete-pre-command-hook can
subsequently cleanup."
"Insert icomplete completions display."
(if (not (symbolp minibuffer-completion-table))
(let ((contents (buffer-substring (point-min)(point-max)))
(buffer-undo-list t))
......@@ -157,8 +173,7 @@ subsequently cleanup."
(defun icomplete-prompt (name candidates predicate require-match)
"Identify prospective candidates for minibuffer completion.
The display is updated with each minibuffer keystroke when icomplete
is enabled \(by loading the 'icomplete' elisp package\) and doing
The display is updated with each minibuffer keystroke during
minibuffer completion.
Prospective completion suffixes (if any) are displayed, bracketed by
......@@ -222,10 +237,11 @@ matches exist."
alternatives)
close-bracket-prospects))))))
;;;_ + Initialization
;;;_ - Initialization
(icomplete-prime-session)
;;;_* Local emacs vars.
;;;_ + Local emacs vars.
'(
Local variables:
eval: (save-excursion
......@@ -242,3 +258,4 @@ eval: (save-excursion
End:)
;;; icomplete.el ends here
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment