diff options
| author | Richard M. Stallman | 1994-05-04 23:20:44 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1994-05-04 23:20:44 +0000 |
| commit | 36f063e869bda74dc2641ec395f494c06abab345 (patch) | |
| tree | ba3a585ac35d4cf726afb6d3f88655dc3a6df401 | |
| parent | f0aee528a4faf9d78b3b53c9e4a02c2619246d07 (diff) | |
| download | emacs-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.el | 120 |
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 |
| 151 | before `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 |