1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-02-01 20:06:00 +00:00

(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.
This commit is contained in:
Richard M. Stallman 1993-12-30 11:56:19 +00:00
parent fea504fb08
commit c89164c5e5

View File

@ -1,9 +1,9 @@
;;; 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,69 +39,77 @@
(defvar icomplete-inhibit nil
"*Set this variable to t at any time to inhibit icomplete.")
;;;_ + Setup
;;;_ - Internal Variables
;;;_ = icomplete-eoinput 1
;;;_ + 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 ()
;;;_ > 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.
(let* ((v19-rev (and (string-match "^19\\.\\([0-9]+\\)" emacs-version)
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
(match-beginning 1)
(match-end 1))))))
(cond ((and v19-rev ; emacs v 19, some rev,
(> v19-rev 17))
;; Post v19rev17, has minibuffer-setup-hook, use it:
(add-hook 'minibuffer-setup-hook 'icomplete-prime-minibuffer))
(v19-rev
;; v19rev17 and prior (including lucid): use global
;; pre- and post-command-hooks, instead:
(add-hook 'pre-command-hook 'icomplete-pre-command-hook 'append)
(add-hook 'post-command-hook
'icomplete-post-command-hook 'append))
((format "icomplete: non v19 emacs, %s - %s"
emacs-version "try elisp-archive icomplete")))))
;;;_ > icomplete-prime-minibuffer ()
(cond ((and v19-rev ; emacs v 19, some rev,
(> v19-rev 17))
;; Post v19rev17, has minibuffer-setup-hook, use it:
(add-hook 'minibuffer-setup-hook 'icomplete-prime-minibuffer))
(v19-rev
;; v19rev17 and prior (including lucid): use global
;; pre- and post-command-hooks, instead:
(add-hook 'pre-command-hook 'icomplete-pre-command-hook 'append)
(add-hook 'post-command-hook
'icomplete-post-command-hook 'append))
((format "icomplete: non v19 emacs, %s - %s"
emacs-version "try elisp-archive icomplete")))))
;;;_ > 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.
;; We append the hooks because preliminary version of blink-paren
;; post-command-hook i have interferes with proper operation of
;; minibuffer quit.
\(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."
;; 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)
(add-hook 'post-command-hook 'icomplete-post-command-hook))
;;;_ > icomplete-window-minibuffer-p ()
;;;_ > icomplete-window-minibuffer-p ()
(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)
@ -99,16 +117,17 @@ with."
(if (> icomplete-eoinput (point-max))
;; Oops, got rug pulled out from under us - reinit:
(setq icomplete-eoinput (point-max))
(let ((buffer-undo-list buffer-undo-list )) ; prevent entry
(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