aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard M. Stallman1994-05-04 23:20:44 +0000
committerRichard M. Stallman1994-05-04 23:20:44 +0000
commit36f063e869bda74dc2641ec395f494c06abab345 (patch)
treeba3a585ac35d4cf726afb6d3f88655dc3a6df401
parentf0aee528a4faf9d78b3b53c9e4a02c2619246d07 (diff)
downloademacs-36f063e869bda74dc2641ec395f494c06abab345.tar.gz
emacs-36f063e869bda74dc2641ec395f494c06abab345.zip
(show-ifdefs, hide-ifdefs): Bind inhibit-read-only.
Set buffer-read-only directly. (hide-ifdef-block): Likewise. (show-ifdef-block): Bind inhibit-read-only; don't set buffer-read-only. Delete bindings for C-c C-f, C-c C-b, C-c C-u, C-c C-d, C-c C-p and C-c C-n. Move C-c C-h to C-c C-d. (define-hide-ifdef-mode-map): Remove this code from a function and execute it at load time. (hide-ifdef-mode-submap): New variable holds the list of commands. (hide-ifdef-mode-map): Set this up with a prefix key and put it in minor-mode-map-alist. (hide-ifdef-mode-map-before): Variable deleted. (hide-ifdef-mode): Use force-mode-line-update. Delete the code to manipulate keymaps. (define-hide-ifdef-mode-map): Pass (keymap) as KEYMAP arg to where-is-internal.
-rw-r--r--lisp/progmodes/hideif.el120
1 files changed, 54 insertions, 66 deletions
diff --git a/lisp/progmodes/hideif.el b/lisp/progmodes/hideif.el
index a48e471f753..ee7ff90da48 100644
--- a/lisp/progmodes/hideif.el
+++ b/lisp/progmodes/hideif.el
@@ -1,8 +1,9 @@
1;;; hide-ifdef-mode.el --- hides selected code within ifdef. 1;;; hide-ifdef-mode.el --- hides selected code within ifdef.
2 2
3;;; Copyright (C) 1988 Free Software Foundation, Inc. 3;;; Copyright (C) 1988, 1994 Free Software Foundation, Inc.
4 4
5;; Author: Dan LaLiberte <liberte@a.cs.uiuc.edu> 5;; Author: Dan LaLiberte <liberte@a.cs.uiuc.edu>
6;; Maintainer: FSF
6;; Keywords: c 7;; Keywords: c
7 8
8;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
@@ -140,55 +141,59 @@
140 141
141;;; Code: 142;;; Code:
142 143
144(defvar hide-ifdef-mode-submap nil
145 "Keymap used with Hide-Ifdef mode.")
146
143(defvar hide-ifdef-mode-map nil 147(defvar hide-ifdef-mode-map nil
144 "Keymap used with Hide-Ifdef mode") 148 "Keymap used with Hide-Ifdef mode.")
145 149
146(defconst hide-ifdef-mode-prefix-key "\C-c" 150(defconst hide-ifdef-mode-prefix-key "\C-c"
147 "Prefix key for all Hide-Ifdef mode commands.") 151 "Prefix key for all Hide-Ifdef mode commands.")
148 152
149(defvar hide-ifdef-mode-map-before nil 153;; Set up the submap that goes after the prefix key.
150 "Buffer-local variable to store a copy of the local keymap 154(if hide-ifdef-mode-submap
151before `hide-ifdef-mode' modifies it.") 155 () ; dont redefine it.
152 156 (setq hide-ifdef-mode-submap (make-sparse-keymap))
153(defun define-hide-ifdef-mode-map () 157 (define-key hide-ifdef-mode-submap "\ed" 'hide-ifdef-define)
154 (if hide-ifdef-mode-map 158 (define-key hide-ifdef-mode-submap "\eu" 'hide-ifdef-undef)
155 () ; dont redefine it. 159 (define-key hide-ifdef-mode-submap "\eD" 'hide-ifdef-set-define-alist)
156 (setq hide-ifdef-mode-map (make-sparse-keymap)) 160 (define-key hide-ifdef-mode-submap "\eU" 'hide-ifdef-use-define-alist)
157 (define-key hide-ifdef-mode-map "\ed" 'hide-ifdef-define) 161
158 (define-key hide-ifdef-mode-map "\eu" 'hide-ifdef-undef) 162 (define-key hide-ifdef-mode-submap "\eh" 'hide-ifdefs)
159 (define-key hide-ifdef-mode-map "\eD" 'hide-ifdef-set-define-alist) 163 (define-key hide-ifdef-mode-submap "\es" 'show-ifdefs)
160 (define-key hide-ifdef-mode-map "\eU" 'hide-ifdef-use-define-alist) 164 (define-key hide-ifdef-mode-submap "\C-d" 'hide-ifdef-block)
161 165 (define-key hide-ifdef-mode-submap "\C-s" 'show-ifdef-block)
162 (define-key hide-ifdef-mode-map "\eh" 'hide-ifdefs) 166
163 (define-key hide-ifdef-mode-map "\es" 'show-ifdefs) 167 (define-key hide-ifdef-mode-submap "\C-q" 'hide-ifdef-toggle-read-only)
164 (define-key hide-ifdef-mode-map "\C-h" 'hide-ifdef-block) 168 (let ((where (where-is-internal 'toggle-read-only '(keymap) t)))
165 (define-key hide-ifdef-mode-map "\C-s" 'show-ifdef-block) 169 (if where
166 170 (define-key hide-ifdef-mode-submap
167 (define-key hide-ifdef-mode-map "\C-f" 'forward-ifdef) 171 where
168 (define-key hide-ifdef-mode-map "\C-b" 'backward-ifdef) 172 'hide-ifdef-toggle-outside-read-only)))
169 (define-key hide-ifdef-mode-map "\C-d" 'down-ifdef)
170 (define-key hide-ifdef-mode-map "\C-u" 'up-ifdef)
171 (define-key hide-ifdef-mode-map "\C-n" 'next-ifdef)
172 (define-key hide-ifdef-mode-map "\C-p" 'previous-ifdef)
173 (define-key hide-ifdef-mode-map "\C-q" 'hide-ifdef-toggle-read-only)
174 (let ((where (where-is-internal 'toggle-read-only nil nil t)))
175 (if where
176 (define-key hide-ifdef-mode-map
177 where
178 'hide-ifdef-toggle-outside-read-only)))
179 )
180 (fset 'hide-ifdef-mode-map hide-ifdef-mode-map) ; the function is the map
181 ) 173 )
182 174
175;; Set up the mode's main map, which leads via the prefix key to the submap.
176(if hide-ifdef-mode-map
177 ()
178 (setq hide-ifdef-mode-map (make-sparse-keymap))
179 (define-key hide-ifdef-mode-map hide-ifdef-mode-prefix-key
180 hide-ifdef-mode-submap))
181
183(defun hif-update-mode-line () 182(defun hif-update-mode-line ()
184 "Update mode-line by setting buffer-modified to itself." 183 "Update mode-line by setting buffer-modified to itself."
185 (set-buffer-modified-p (buffer-modified-p))) 184 (set-buffer-modified-p (buffer-modified-p)))
186 185
187(defvar hide-ifdef-mode nil 186(defvar hide-ifdef-mode nil
188 "non-nil when hide-ifdef-mode is activated.") 187 "Non-nil when hide-ifdef-mode is activated.")
189 188
190(defvar hide-ifdef-hiding nil 189(defvar hide-ifdef-hiding nil
191 "non-nil when text may be hidden.") 190 "Non-nil when text may be hidden.")
191
192;; Arrange to use the mode's map when the mode is enabled.
193(or (assq 'hide-ifdef-mode minor-mode-map-alist)
194 (setq minor-mode-map-alist
195 (cons (cons hide-ifdef-mode hide-ifdef-mode-map)
196 minor-mode-map-alist)))
192 197
193(or (assq 'hide-ifdef-hiding minor-mode-alist) 198(or (assq 'hide-ifdef-hiding minor-mode-alist)
194 (setq minor-mode-alist 199 (setq minor-mode-alist
@@ -240,7 +245,7 @@ hide-ifdef-read-only
240 (not hide-ifdef-mode) 245 (not hide-ifdef-mode)
241 (> (prefix-numeric-value arg) 0))) 246 (> (prefix-numeric-value arg) 0)))
242 247
243 (hif-update-mode-line) 248 (force-mode-line-update)
244 249
245 (if hide-ifdef-mode 250 (if hide-ifdef-mode
246 (progn 251 (progn
@@ -259,13 +264,6 @@ hide-ifdef-read-only
259 (make-local-variable 'hif-outside-read-only) 264 (make-local-variable 'hif-outside-read-only)
260 (setq hif-outside-read-only buffer-read-only) 265 (setq hif-outside-read-only buffer-read-only)
261 266
262 (make-local-variable 'hide-ifdef-mode-map-before)
263 (setq hide-ifdef-mode-map-before (current-local-map))
264 (use-local-map (copy-keymap (current-local-map)))
265 (local-unset-key hide-ifdef-mode-prefix-key)
266 (local-set-key hide-ifdef-mode-prefix-key 'hide-ifdef-mode-map)
267 (define-hide-ifdef-mode-map)
268
269 (run-hooks 'hide-ifdef-mode-hook) 267 (run-hooks 'hide-ifdef-mode-hook)
270 268
271 (if hide-ifdef-initially 269 (if hide-ifdef-initially
@@ -276,7 +274,6 @@ hide-ifdef-read-only
276 ; else end hide-ifdef-mode 274 ; else end hide-ifdef-mode
277 (if hide-ifdef-hiding 275 (if hide-ifdef-hiding
278 (show-ifdefs)) 276 (show-ifdefs))
279 (use-local-map hide-ifdef-mode-map-before)
280 (message "Exit hide-ifdef-mode.") 277 (message "Exit hide-ifdef-mode.")
281 )) 278 ))
282 279
@@ -922,23 +919,21 @@ Turn off hiding by calling `show-ifdef'."
922 (hide-ifdef-mode 1)) ; turn on hide-ifdef-mode 919 (hide-ifdef-mode 1)) ; turn on hide-ifdef-mode
923 (if hide-ifdef-hiding 920 (if hide-ifdef-hiding
924 (show-ifdefs)) ; Otherwise, deep confusion. 921 (show-ifdefs)) ; Otherwise, deep confusion.
925 (if buffer-read-only (toggle-read-only)) ; make it writable temporarily 922 (let ((inhibit-read-only t))
926 (setq selective-display t) 923 (setq selective-display t)
927 (setq hide-ifdef-hiding t) 924 (setq hide-ifdef-hiding t)
928 (hide-ifdef-guts) 925 (hide-ifdef-guts))
929 (if (or hide-ifdef-read-only hif-outside-read-only) 926 (setq buffer-read-only (or hide-ifdef-read-only hif-outside-read-only))
930 (toggle-read-only)) ; make it read only
931 (message "Hiding done")) 927 (message "Hiding done"))
932 928
933 929
934(defun show-ifdefs () 930(defun show-ifdefs ()
935 "Cancel the effects of `hide-ifdef'. The contents of all #ifdefs is shown." 931 "Cancel the effects of `hide-ifdef'. The contents of all #ifdefs is shown."
936 (interactive) 932 (interactive)
937 (if buffer-read-only (toggle-read-only)) ; make it writable temporarily 933 (setq buffer-read-only hif-outside-read-only)
938 (setq selective-display nil) ; defaults 934 (setq selective-display nil) ; defaults
939 (hif-show-all) 935 (let ((inhibit-read-only t))
940 (if hif-outside-read-only 936 (hif-show-all))
941 (toggle-read-only)) ; make it read only
942 (setq hide-ifdef-hiding nil)) 937 (setq hide-ifdef-hiding nil))
943 938
944 939
@@ -969,9 +964,8 @@ Set top and bottom of ifdef block."
969 (interactive) 964 (interactive)
970 (if (not hide-ifdef-mode) 965 (if (not hide-ifdef-mode)
971 (hide-ifdef-mode 1)) 966 (hide-ifdef-mode 1))
972 (if buffer-read-only (toggle-read-only))
973 (setq selective-display t) 967 (setq selective-display t)
974 (let (top bottom) 968 (let (top bottom (inhibit-read-only t))
975 (hif-find-ifdef-block) ; set top and bottom - dynamic scoping 969 (hif-find-ifdef-block) ; set top and bottom - dynamic scoping
976 (hide-ifdef-region top bottom) 970 (hide-ifdef-region top bottom)
977 (if hide-ifdef-lines 971 (if hide-ifdef-lines
@@ -979,15 +973,13 @@ Set top and bottom of ifdef block."
979 (hif-hide-line top) 973 (hif-hide-line top)
980 (hif-hide-line (1+ bottom)))) 974 (hif-hide-line (1+ bottom))))
981 (setq hide-ifdef-hiding t)) 975 (setq hide-ifdef-hiding t))
982 (if (or hide-ifdef-read-only hif-outside-read-only) 976 (setq buffer-read-only (or hide-ifdef-read-only hif-outside-read-only)))
983 (toggle-read-only)))
984 977
985 978
986(defun show-ifdef-block () 979(defun show-ifdef-block ()
987 "Show the ifdef block (true or false part) enclosing or before the cursor." 980 "Show the ifdef block (true or false part) enclosing or before the cursor."
988 (interactive) 981 (interactive)
989 (let ((old-read-only buffer-read-only)) 982 (let ((inhibit-read-only t))
990 (if old-read-only (toggle-read-only))
991 (if hide-ifdef-lines 983 (if hide-ifdef-lines
992 (save-excursion 984 (save-excursion
993 (beginning-of-line) 985 (beginning-of-line)
@@ -995,11 +987,7 @@ Set top and bottom of ifdef block."
995 987
996 (let (top bottom) 988 (let (top bottom)
997 (hif-find-ifdef-block) 989 (hif-find-ifdef-block)
998 (hif-show-ifdef-region (1- top) bottom)) 990 (hif-show-ifdef-region (1- top) bottom)))))
999 )
1000
1001 ; restore read only status since we dont know if all is shown.
1002 (if old-read-only (toggle-read-only))))
1003 991
1004 992
1005;;; definition alist support 993;;; definition alist support