X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/b578f267af27af50e3c091f8c9c9eee939b69978..139bbb9cc4db48696ce8c48b8dd6ce09c2c07594:/lisp/chistory.el diff --git a/lisp/chistory.el b/lisp/chistory.el index 3685e01db5..c05fd849db 100644 --- a/lisp/chistory.el +++ b/lisp/chistory.el @@ -1,9 +1,10 @@ ;;; chistory.el --- list command history -;; Copyright (C) 1985 Free Software Foundation, Inc. +;; Copyright (C) 1985, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. ;; Author: K. Shane Hartman ;; Maintainer: FSF +;; Keywords: convenience ;; This file is part of GNU Emacs. @@ -19,8 +20,8 @@ ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. ;;; Commentary: @@ -31,6 +32,10 @@ ;;; Code: +(defgroup chistory nil + "List command history." + :group 'keyboard) + ;;;###autoload (defun repeat-matching-complex-command (&optional pattern) "Edit and re-evaluate complex command with name matching PATTERN. @@ -59,15 +64,17 @@ editing and the result is evaluated." (setq command-history (cdr command-history))) (edit-and-eval-command "Redo: " what)))) -(defvar default-command-history-filter-garbage +(defcustom default-command-history-filter-garbage '(command-history-mode list-command-history electric-command-history) "*A list of symbols to be ignored by `default-command-history-filter'. -It that function is given a list whose car is an element of this list, +If that function is given a list whose car is an element of this list, then it will return non-nil (indicating the list should be discarded from the history). -Initially, all commands related to the command history are discarded.") +Initially, all commands related to the command history are discarded." + :type '(repeat symbol) + :group 'chistory) (defvar list-command-history-filter 'default-command-history-filter "Predicate to test which commands should be excluded from the history listing. @@ -83,8 +90,10 @@ from the command history." (or (not (consp frob)) (memq (car frob) default-command-history-filter-garbage))) -(defvar list-command-history-max 32 - "*If non-nil, maximum length of the listing produced by `list-command-history'.") +(defcustom list-command-history-max 32 + "*If non-nil, maximum length of the listing produced by `list-command-history'." + :type '(choice integer (const nil)) + :group 'chistory) ;;;###autoload (defun list-command-history () @@ -114,32 +123,42 @@ The buffer is left in Command History mode." (goto-char (point-min)) (if (eobp) (error "No command history") - (Command-history-setup))))) - -(defun Command-history-setup (&optional majormode modename keymap) - (set-buffer "*Command History*") - (use-local-map (or keymap command-history-map)) - (lisp-mode-variables nil) - (set-syntax-table emacs-lisp-mode-syntax-table) - (setq buffer-read-only t) - (use-local-map (or keymap command-history-map)) - (setq major-mode (or majormode 'command-history-mode)) - (setq mode-name (or modename "Command History"))) - -(defvar command-history-hook nil - "If non-nil, its value is called on entry to `command-history-mode'.") + (command-history-mode))))) (defvar command-history-map nil) -(if command-history-map - nil - (setq command-history-map - (nconc (make-sparse-keymap) shared-lisp-mode-map)) +(unless command-history-map + (setq command-history-map (make-sparse-keymap)) + (set-keymap-parent command-history-map lisp-mode-shared-map) (suppress-keymap command-history-map) (define-key command-history-map "x" 'command-history-repeat) (define-key command-history-map "\n" 'next-line) (define-key command-history-map "\r" 'next-line) (define-key command-history-map "\177" 'previous-line)) +(defun command-history-mode () + "Major mode for listing and repeating recent commands. + +Keybindings: +\\{command-history-map}" + (interactive) + (Command-history-setup) + (setq major-mode 'command-history-mode) + (setq mode-name "Command History") + (use-local-map command-history-map) + (run-mode-hooks 'command-history-mode-hook)) + +(defun Command-history-setup () + (kill-all-local-variables) + (use-local-map command-history-map) + (lisp-mode-variables nil) + (set-syntax-table emacs-lisp-mode-syntax-table) + (setq buffer-read-only t)) + +(defcustom command-history-hook nil + "If non-nil, its value is called on entry to `command-history-mode'." + :type 'hook + :group 'chistory) + (defun command-history-repeat () "Repeat the command shown on the current line. The buffer for that command is the previous current buffer." @@ -153,8 +172,8 @@ The buffer for that command is the previous current buffer." (car (cdr (buffer-list)))))))) ;;;###autoload -(defun command-history-mode () - "Major mode for examining commands from `command-history'. +(defun command-history () + "Examine commands from `command-history' in a buffer. The number of commands listed is controlled by `list-command-history-max'. The command history is filtered by `list-command-history-filter' if non-nil. Use \\\\[command-history-repeat] to repeat the command on the current line. @@ -162,8 +181,9 @@ Use \\\\[command-history-repeat] to repeat the command on t Otherwise much like Emacs-Lisp Mode except that there is no self-insertion and digits provide prefix arguments. Tab does not indent. \\{command-history-map} -Calls the value of `command-history-hook' if that is non-nil. -The Command History listing is recomputed each time this mode is invoked." + +This command always recompiles the Command History listing +and runs the normal hook `command-history-hook'." (interactive) (list-command-history) (pop-to-buffer "*Command History*") @@ -171,4 +191,5 @@ The Command History listing is recomputed each time this mode is invoked." (provide 'chistory) +;;; arch-tag: c201a0cd-89f2-4d39-a532-4cb309391dbd ;;; chistory.el ends here