changeset 2603:f80a342fd945

Add compilation-minor-mode to minor-mode-alist and minor-mode-map-alist. (compilation-minor-mode): New defvar. (compilation-minor-mode-map): New defvar; keymap with the bindings from compilation-mode-map except SPC and DEL. (compilation-mode-map): Construct this keymap to inherit from compilation-minor-mode-map. (compilation-setup): New function, code broken out of compilation-mode. (compilation-mode): Call it. (compilation-minor-mode): New function to toggle compilation-minor-mode; if setting it, call compilation-setup.
author Roland McGrath <roland@gnu.org>
date Wed, 28 Apr 1993 22:44:29 +0000
parents 2465861025cd
children 3a56b8caf6c9
files lisp/progmodes/compile.el
diffstat 1 files changed, 42 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/progmodes/compile.el	Wed Apr 28 21:19:21 1993 +0000
+++ b/lisp/progmodes/compile.el	Wed Apr 28 22:44:29 1993 +0000
@@ -327,18 +327,24 @@
     ;; Make it so the next C-x ` will use this buffer.
     (setq compilation-last-buffer outbuf)))
 
-(defvar compilation-mode-map
+(defvar compilation-minor-mode-map
   (let ((map (make-sparse-keymap)))
     (define-key map "\C-c\C-c" 'compile-goto-error)
     (define-key map "\C-c\C-k" 'kill-compilation)
-    (define-key map " " 'scroll-up)
-    (define-key map "\^?" 'scroll-down)
     (define-key map "\M-n" 'compilation-next-error)
     (define-key map "\M-p" 'compilation-previous-error)
     (define-key map "\M-{" 'compilation-previous-file)
     (define-key map "\M-}" 'compilation-next-file)
     map)
-  "Keymap for compilation log buffers.")
+  "Keymap for compilation-minor-mode.")
+
+(defvar compilation-mode-map
+  (let ((map (cons 'keymap compilation-minor-mode-map)))
+    (define-key map " " 'scroll-up)
+    (define-key map "\^?" 'scroll-down)
+    map)
+  "Keymap for compilation log buffers.
+compilation-minor-mode-map is a cdr of this.")
 
 (defun compilation-mode ()
   "Major mode for compilation log buffers.
@@ -350,16 +356,43 @@
   (interactive)
   (fundamental-mode)
   (use-local-map compilation-mode-map)
-  (setq major-mode 'compilation-mode)
-  (setq mode-name "Compilation")
-  ;; Make buffer's mode line show process state
+  (setq major-mode 'compilation-mode
+	mode-name "Compilation")
+  (compilation-setup)
+  (run-hooks 'compilation-mode-hook))
+
+;; Prepare the buffer for the compilation parsing commands to work.
+(defun compilation-setup ()
+  ;; Make the buffer's mode line show process state.
   (setq mode-line-process '(": %s"))
   (set (make-local-variable 'compilation-error-list) nil)
   (set (make-local-variable 'compilation-old-error-list) nil)
   (set (make-local-variable 'compilation-parsing-end) 1)
   (set (make-local-variable 'compilation-directory-stack) nil)
-  (setq compilation-last-buffer (current-buffer))
-  (run-hooks 'compilation-mode-hook))
+  (setq compilation-last-buffer (current-buffer)))
+
+(defvar compilation-minor-mode nil
+  "Non-nil when in compilation-minor-mode.
+In this minor mode, all the error-parsing commands of the
+Compilation major mode are available.")
+
+(or (assq 'compilation-minor-mode minor-mode-alist)
+    (setq minor-mode-alist (cons '(compilation-minor-mode " Compilation")
+				 minor-mode-alist)))
+(or (assq 'compilation-minor-mode minor-mode-map-alist)
+    (setq minor-mode-map-alist (cons '(compilation-minor-mode
+				       . compilation-minor-mode-map)
+				     minor-mode-map-alist)))
+
+(defun compilation-minor-mode (&optional arg)
+  "Toggle compilation minor mode.
+With arg, turn compilation mode on if and only if arg is positive.
+See `compilation-mode'."
+  (interactive "P")
+  (if (setq compilation-minor-mode (if (null arg)
+				       (null compilation-minor-mode)
+				     (> (prefix-numeric-value arg) 0)))
+      (compilation-setup)))
 
 ;; Called when compilation process changes state.
 (defun compilation-sentinel (proc msg)