* files.el (insert-file-contents-literally): Treat file as binary;
call file-name-handlers. [sync with Emacs 20.3.10]
+1999-06-24 Bob Weiner <weiner@beopen.com>
+
+ * lib-complete.el (find-library):
+ (find-library-other-window):
+ (find-library-other-frame): Completely rewrote
+ so that these functions actually work when called non-interactively.
+ Also made them handle LIBRARY arguments which end with .el or .elc.
+
+1999-06-24 Bob Weiner <weiner@beopen.com>
+
+ * simple.el (indent-new-comment-line): Locally bound
+ `block-comment-start' to `comstart' or else when this is called
+ from do-auto-fill, e.g. in Lisp mode, it will insert any non-nil
+ `block-comment-start' value, ignoring any existing spacing after a
+ comment prefix in the previous line and producing ugly comments.
+
+1999-06-23 Bob Weiner <weiner@beopen.com>
+
+ * list-mode.el (mouse-choose-completion):
+ (choose-completion):
+ (completion-switch-to-minibuffer): Added.
+ ([Tab]): [Tab] previously switched to the minibuffer
+ but since [space] does that and since most applications in the
+ world use [Tab] to select the next item in a list, do that in the
+ *Completions* buffer too. This will cause the least confusion
+ among the largest population of users. -- Bob Weiner, BeOpen.com,
+ 06/23/1999.
+
+1999-06-22 Bob Weiner <weiner@beopen.com>
+
+ * help.el (help-buffer-name): Added support for a null value
+ of `help-buffer-prefix-string' since some buffers require no
+ prefix.
+
+1999-06-20 Bob Weiner <weiner@beopen.com>
+
+ * list-mode.el (completion-list-mode-quit): Added and bound to {q}
+ in the completion-list-mode-map to bury the completions buffer
+ even when the minibuffer is no longer active.
+
+1999-06-20 Bob Weiner <weiner@beopen.com>
+
+ * list-mode.el (list-mode): It is visually disconcerting to have
+ the text cursor disappear within list buffers, especially when
+ moving from window to window, so leave it visible.
+
+1999-07-01 SL Baur <steve@miho.m17n.org>
+
+ * menubar-items.el (default-menubar): Conditionalize the bug
+ report menu item (which may not be possible in this XEmacs).
+ Reported by: Ken'ichi Handa <handa@etl.go.jp>
+
1999-06-30 SL Baur <steve@miho.m17n.org>
* subr.el (with-current-buffer): DOC string fix.
;; Last Modified By: Heiko M|nkel <muenkel@tnt.uni-hannover.de>
;; Additional XEmacs integration By: Chuck Thompson <cthomp@cs.uiuc.edu>
;; Last Modified On: Thu Jul 1 14:23:00 1994
-;; RCS Info : $Revision: 1.3.2.2 $ $Locker: $
;; ========================================================================
;; NOTE: XEmacs must be redumped if this file is changed.
;;
;;; ChangeLog:
;; 4/26/97: sb Mule-ize.
+;; 6/24/1999 much rewriting from Bob Weiner
;;; Code:
;;=== Utilities ===========================================================
-(defmacro progn-with-message (message &rest forms)
+(defmacro progn-with-message (MESSAGE &rest FORMS)
"(progn-with-message MESSAGE FORMS ...)
Display MESSAGE and evaluate FORMS, returning value of the last one."
;; based on Hallvard Furuseth's funcall-with-message
- `(if (eq (selected-window) (minibuffer-window))
+ (`
+ (if (eq (selected-window) (minibuffer-window))
(save-excursion
(goto-char (point-max))
(let ((orig-pmax (point-max)))
(unwind-protect
(progn
- (insert " " ,message) (goto-char orig-pmax)
+ (insert " " (, MESSAGE)) (goto-char orig-pmax)
(sit-for 0) ; Redisplay
- ,@forms)
+ (,@ FORMS))
(delete-region orig-pmax (point-max)))))
(prog2
- (message "%s" ,message)
- (progn ,@forms)
- (message ""))))
+ (message "%s" (, MESSAGE))
+ (progn (,@ FORMS))
+ (message "")))))
(put 'progn-with-message 'lisp-indent-hook 1)
(if tail (setcdr tail nil)))))
;;=== Read a filename, with completion in a search path ===================
-(defvar read-library-internal-search-path)
(defun read-library-internal (FILE FILTER FLAG)
"Don't call this."
(cond
((equal library "") DEFAULT)
(FULL (locate-file library read-library-internal-search-path
- '(".el" ".el.gz" ".elc")))
+ ;; decompression doesn't work with Mule -slb
+ (if (featurep 'mule)
+ ".el:.elc"
+ ".el:.el.gz:.el.Z:.elc")))
(t library))))
+(defun read-library-name (prompt)
+ "PROMPTs for and returns an existing Elisp library name (without any suffix) or the empty string."
+ (interactive)
+ (let ((read-library-internal-search-path load-path))
+ (completing-read prompt
+ 'read-library-internal
+ (lambda (fn)
+ (cond
+ ;; decompression doesn't work with mule -slb
+ ((string-match (if (featurep 'mule)
+ "\\.el$"
+ "\\.el\\(\\.gz\\|\\.Z\\)?$") fn)
+ (substring fn 0 (match-beginning 0)))))
+ t nil)))
+
;; NOTE: as a special case, read-library may be used to read a filename
;; relative to the current directory, returning a *relative* pathname
;; (read-file-name returns a full pathname).
;;
;; eg. (read-library "Local header: " '(nil) nil)
-(defun get-library-path ()
- "Front end to read-library"
- (read-library "Find Library file: " load-path nil t t
- (function (lambda (fn)
- (cond
- ;; decompression doesn't work with mule -slb
- ((string-match (if (featurep 'mule)
- "\\.el$"
- "\\.el\\(\\.gz\\)?$") fn)
- (substring fn 0 (match-beginning 0))))))
- ))
-
;;=== Replacement for load-library with completion ========================
(defun load-library (library)
"Load the library named LIBRARY.
This is an interface to the function `load'."
(interactive
- (list (read-library "Load Library: " load-path nil nil nil
- (function (lambda (fn)
- (cond
- ((string-match "\\.elc?$" fn)
- (substring fn 0 (match-beginning 0))))))
- )))
+ (list (read-library "Load library: " load-path nil nil nil
+ (function (lambda (fn)
+ (cond
+ ((string-match "\\.elc?$" fn)
+ (substring fn 0 (match-beginning 0))))))
+ )))
(load library))
-;;=== find-library with completion (Author: Heiko Muenkel) ===================
+;;=== find-library with completion (Author: Bob Weiner) ===================
-(defun find-library (library &optional codesys)
- "Find and edit the source for the library named LIBRARY.
-The extension of the LIBRARY must be omitted.
-Under XEmacs/Mule, the optional second argument specifies the
-coding system to use when decoding the file. Interactively,
-with a prefix argument, you will be prompted for the coding system."
+(defun find-library (library &optional codesys display-function)
+ "Find and display in the current window the source for the Elisp LIBRARY.
+LIBRARY should be a name without any path information and may include or omit
+the \".el\" suffix. Under XEmacs/Mule, the optional second argument CODESYS
+specifies the coding system to use when decoding the file. Interactively,
+with a prefix argument, this prompts for the coding system. Optional third
+argument DISPLAY-FUNCTION must take two arguments, the filename to display
+and CODESYS. The default for DISPLAY-FUNCTION is `find-file'."
(interactive
- (list (get-library-path)
+ (list (read-library-name "Find library: ")
(if current-prefix-arg
(read-coding-system "Coding System: "))))
- (find-file library codesys))
+ (let ((path (if (or (null library) (equal library ""))
+ nil
+ (locate-file library load-path
+ ;; decompression doesn't work with Mule -slb
+ (if (featurep 'mule)
+ ":.el:.elc"
+ ":.el:.el.gz:.el.Z:.elc")))))
+ (if path (funcall (if (fboundp display-function)
+ display-function 'find-file)
+ path codesys)
+ (error "(find-library): Cannot locate library `%s'" library))))
(defun find-library-other-window (library &optional codesys)
- "Load the library named LIBRARY in another window.
-Under XEmacs/Mule, the optional second argument specifies the
-coding system to use when decoding the file. Interactively,
-with a prefix argument, you will be prompted for the coding system."
+ "Find and display in another window the source for the Elisp LIBRARY.
+LIBRARY should be a name without any path information and may include or omit
+the \".el\" suffix. Under XEmacs/Mule, the optional second argument CODESYS
+specifies the coding system to use when decoding the file. Interactively,
+with a prefix argument, this prompts for the coding system."
(interactive
- (list (get-library-path)
+ (list (read-library-name "Find library in other window: ")
(if current-prefix-arg
- (read-coding-system "Coding System: "))))
- (find-file-other-window library codesys))
+ (read-coding-system "Coding System: "))))
+ (find-library library codesys 'find-file-other-window))
(defun find-library-other-frame (library &optional codesys)
- "Load the library named LIBRARY in a newly-created frame.
-Under XEmacs/Mule, the optional second argument specifies the
-coding system to use when decoding the file. Interactively,
-with a prefix argument, you will be prompted for the coding system."
+ "Find and display in another frame the source for the Elisp LIBRARY.
+LIBRARY should be a name without any path information and may include or omit
+the \".el\" suffix. Under XEmacs/Mule, the optional second argument CODESYS
+specifies the coding system to use when decoding the file. Interactively,
+with a prefix argument, this prompts for the coding system."
(interactive
- (list (get-library-path)
+ (list (read-library-name "Find library in other frame: ")
(if current-prefix-arg
(read-coding-system "Coding System: "))))
- (find-file-other-frame library codesys))
+ (find-library library codesys 'find-file-other-frame))
-; This conflicts with an existing binding
-;(define-key global-map "\C-xl" 'find-library)
+;; This conflicts with an existing binding.
+;;(define-key global-map "\C-xl" 'find-library)
(define-key global-map "\C-x4l" 'find-library-other-window)
(define-key global-map "\C-x5l" 'find-library-other-frame)
(make-local-variable 'next-line-add-newlines)
(setq next-line-add-newlines nil)
(setq list-mode-extent nil)
- (set-specifier text-cursor-visible-p nil (current-buffer))
+;; It is visually disconcerting to have the text cursor disappear within list
+;; buffers, especially when moving from window to window, so leave it
+;; visible. -- Bob Weiner, 06/20/1999
+; (set-specifier text-cursor-visible-p nil (current-buffer))
(setq buffer-read-only t)
(goto-char (point-min))
(run-hooks 'list-mode-hook))
(define-derived-mode completion-list-mode list-mode
"Completion List"
"Major mode for buffers showing lists of possible completions.
-Type \\<completion-list-mode-map>\\[choose-completion] in the completion list\
- to select the completion near point.
-Use \\<completion-list-mode-map>\\[mouse-choose-completion] to select one\
- with the mouse."
+\\{completion-list-mode-map}"
(make-local-variable 'completion-base-size)
(setq completion-base-size nil))
(let ((map completion-list-mode-map))
+ (define-key map 'button2up 'mouse-choose-completion)
+ (define-key map 'button2 'undefined)
+ (define-key map "\C-m" 'choose-completion)
(define-key map "\e\e\e" 'delete-completion-window)
(define-key map "\C-g" 'minibuffer-keyboard-quit)
- (define-key map "q" 'abort-recursive-edit)
- (define-key map " " (lambda () (interactive)
- (select-window (minibuffer-window))))
- (define-key map "\t" (lambda () (interactive)
- (select-window (minibuffer-window)))))
+ (define-key map "q" 'completion-list-mode-quit)
+ (define-key map " " 'completion-switch-to-minibuffer)
+ ;; [Tab] used to switch to the minibuffer but since [space] does that and
+ ;; since most applications in the world use [Tab] to select the next item
+ ;; in a list, do that in the *Completions* buffer too. -- Bob Weiner,
+ ;; BeOpen.com, 06/23/1999.
+ (define-key map "\t" 'next-list-mode-item))
(defvar completion-reference-buffer nil
"Record the buffer that was current when the completion list was requested.
If this is nil, it means to compare text to determine which part
of the tail end of the buffer's text is involved in completion.")
+;; These names are referenced in the doc string for `completion-list-mode'.
+(defalias 'choose-completion 'list-mode-item-keyboard-selected)
+(defalias 'mouse-choose-completion 'list-mode-item-mouse-selected)
+
(defun delete-completion-window ()
"Delete the completion list window.
Go to the window from which completion was requested."
(if (get-buffer-window buf)
(select-window (get-buffer-window buf)))))
+(defun completion-switch-to-minibuffer ()
+ "Move from a completions buffer to the active minibuffer window."
+ (interactive)
+ (select-window (minibuffer-window)))
+
+(defun completion-list-mode-quit ()
+ "Abort any recursive edit and bury the completions buffer."
+ (interactive)
+ (condition-case ()
+ (abort-recursive-edit)
+ (error nil))
+ ;; If there was no recursive edit to abort, simply bury the completions
+ ;; list buffer.
+ (if (eq major-mode 'completion-list-mode) (bury-buffer)))
+
(defun completion-do-in-minibuffer ()
(interactive "_")
(save-excursion