comparison lisp/progmodes/hideif.el @ 87851:6e4b2a69d875

(hide-ifdef-shadow): New option. (hide-ifdef-shadow): New face. (hide-ifdef-toggle-shadowing): New function to toggle between shadowing and making code invisible. (hide-ifdef-mode-submap): Add binding for hide-ifdef-toggle-shadowing. (hide-ifdef-mode-menu): Add entry for hide-ifdef-toggle-shadowing. (hide-ifdef-region-internal): Give new overlay hide-ifdef property. Shadow text when hide-ifdef-shadow is non-nil. (hif-show-ifdef-region): Remove overlays with hide-ifdef property set. (hif-hide-line): Use when instead of if. (hide-ifdef-initially, hide-ifdef-read-only, hide-ifdef-lines): Remove unneeded * from doc-strings.
author Martin Rudalics <rudalics@gmx.at>
date Sat, 19 Jan 2008 16:28:36 +0000
parents a1342e6e097a
children adc70c059607
comparison
equal deleted inserted replaced
87850:dd673d4bceda 87851:6e4b2a69d875
126 (define-key map "s" 'show-ifdefs) 126 (define-key map "s" 'show-ifdefs)
127 (define-key map "\C-d" 'hide-ifdef-block) 127 (define-key map "\C-d" 'hide-ifdef-block)
128 (define-key map "\C-s" 'show-ifdef-block) 128 (define-key map "\C-s" 'show-ifdef-block)
129 129
130 (define-key map "\C-q" 'hide-ifdef-toggle-read-only) 130 (define-key map "\C-q" 'hide-ifdef-toggle-read-only)
131 (define-key map "\C-w" 'hide-ifdef-toggle-shadowing)
131 (substitute-key-definition 132 (substitute-key-definition
132 'toggle-read-only 'hide-ifdef-toggle-outside-read-only map) 133 'toggle-read-only 'hide-ifdef-toggle-outside-read-only map)
133 map) 134 map)
134 "Keymap used by `hide-ifdef-mode' under `hide-ifdef-mode-prefix-key'.") 135 "Keymap used by `hide-ifdef-mode' under `hide-ifdef-mode-prefix-key'.")
135 136
153 ["Define a variable" hide-ifdef-define t] 154 ["Define a variable" hide-ifdef-define t]
154 ["Define an alist" hide-ifdef-set-define-alist t] 155 ["Define an alist" hide-ifdef-set-define-alist t]
155 ["Use an alist" hide-ifdef-use-define-alist t] 156 ["Use an alist" hide-ifdef-use-define-alist t]
156 ["Undefine a variable" hide-ifdef-undef t] 157 ["Undefine a variable" hide-ifdef-undef t]
157 ["Toggle read only" hide-ifdef-toggle-read-only 158 ["Toggle read only" hide-ifdef-toggle-read-only
158 :style toggle :selected hide-ifdef-read-only])) 159 :style toggle :selected hide-ifdef-read-only]
160 ["Toggle shadowing" hide-ifdef-toggle-shadowing
161 :style toggle :selected hide-ifdef-shadow]))
159 162
160 (defvar hide-ifdef-hiding nil 163 (defvar hide-ifdef-hiding nil
161 "Non-nil when text may be hidden.") 164 "Non-nil when text may be hidden.")
162 165
163 (or (assq 'hide-ifdef-hiding minor-mode-alist) 166 (or (assq 'hide-ifdef-hiding minor-mode-alist)
254 (end-of-line) 257 (end-of-line)
255 (while (= (logand 1 (skip-chars-backward "\\\\")) 1) 258 (while (= (logand 1 (skip-chars-backward "\\\\")) 1)
256 (end-of-line 2))) 259 (end-of-line 2)))
257 260
258 (defun hide-ifdef-region-internal (start end) 261 (defun hide-ifdef-region-internal (start end)
259 (remove-overlays start end 'invisible 'hide-ifdef) 262 (remove-overlays start end 'hide-ifdef t)
260 (let ((o (make-overlay start end))) 263 (let ((o (make-overlay start end)))
261 (overlay-put o 'invisible 'hide-ifdef))) 264 (overlay-put o 'hide-ifdef t)
265 (if hide-ifdef-shadow
266 (overlay-put o 'face 'hide-ifdef-shadow)
267 (overlay-put o 'invisible 'hide-ifdef))))
262 268
263 (defun hide-ifdef-region (start end) 269 (defun hide-ifdef-region (start end)
264 "START is the start of a #if or #else form. END is the ending part. 270 "START is the start of a #if or #else form. END is the ending part.
265 Everything including these lines is made invisible." 271 Everything including these lines is made invisible."
266 (save-excursion 272 (save-excursion
268 (goto-char end) (hif-end-of-line) (setq end (point)) 274 (goto-char end) (hif-end-of-line) (setq end (point))
269 (hide-ifdef-region-internal start end))) 275 (hide-ifdef-region-internal start end)))
270 276
271 (defun hif-show-ifdef-region (start end) 277 (defun hif-show-ifdef-region (start end)
272 "Everything between START and END is made visible." 278 "Everything between START and END is made visible."
273 (remove-overlays start end 'invisible 'hide-ifdef)) 279 (remove-overlays start end 'hide-ifdef t))
274 280
275 281
276 ;;===%%SF%% evaluation (Start) === 282 ;;===%%SF%% evaluation (Start) ===
277 283
278 ;; It is not useful to set this to anything but `eval'. 284 ;; It is not useful to set this to anything but `eval'.
738 744
739 ;;; A bit slimy. 745 ;;; A bit slimy.
740 746
741 (defun hif-hide-line (point) 747 (defun hif-hide-line (point)
742 "Hide the line containing point. Does nothing if `hide-ifdef-lines' is nil." 748 "Hide the line containing point. Does nothing if `hide-ifdef-lines' is nil."
743 (if hide-ifdef-lines 749 (when hide-ifdef-lines
744 (save-excursion 750 (save-excursion
745 (goto-char point) 751 (goto-char point)
746 (hide-ifdef-region-internal (line-beginning-position) 752 (hide-ifdef-region-internal
747 (progn (hif-end-of-line) (point)))))) 753 (line-beginning-position) (progn (hif-end-of-line) (point))))))
748 754
749 755
750 ;;; Hif-Possibly-Hide 756 ;;; Hif-Possibly-Hide
751 ;;; There are four cases. The #ifX expression is "taken" if it 757 ;;; There are four cases. The #ifX expression is "taken" if it
752 ;;; the hide-ifdef-evaluator returns T. Presumably, this means the code 758 ;;; the hide-ifdef-evaluator returns T. Presumably, this means the code
827 833
828 ;;===%%SF%% exports (Start) === 834 ;;===%%SF%% exports (Start) ===
829 835
830 ;;;###autoload 836 ;;;###autoload
831 (defcustom hide-ifdef-initially nil 837 (defcustom hide-ifdef-initially nil
832 "*Non-nil means call `hide-ifdefs' when Hide-Ifdef mode is first activated." 838 "Non-nil means call `hide-ifdefs' when Hide-Ifdef mode is first activated."
833 :type 'boolean 839 :type 'boolean
834 :group 'hide-ifdef) 840 :group 'hide-ifdef)
835 841
836 ;;;###autoload 842 ;;;###autoload
837 (defcustom hide-ifdef-read-only nil 843 (defcustom hide-ifdef-read-only nil
838 "*Set to non-nil if you want buffer to be read-only while hiding text." 844 "Set to non-nil if you want buffer to be read-only while hiding text."
839 :type 'boolean 845 :type 'boolean
840 :group 'hide-ifdef) 846 :group 'hide-ifdef)
841 847
842 ;;;###autoload 848 ;;;###autoload
843 (defcustom hide-ifdef-lines nil 849 (defcustom hide-ifdef-lines nil
844 "*Non-nil means hide the #ifX, #else, and #endif lines." 850 "Non-nil means hide the #ifX, #else, and #endif lines."
845 :type 'boolean 851 :type 'boolean
852 :group 'hide-ifdef)
853
854 ;;;###autoload
855 (defcustom hide-ifdef-shadow nil
856 "Non-nil means shadow text instead of hiding it."
857 :type 'boolean
858 :group 'hide-ifdef)
859
860 ;;;###autoload
861 (defface hide-ifdef-shadow '((t (:inherit shadow)))
862 "Face for shadowing ifdef blocks."
846 :group 'hide-ifdef) 863 :group 'hide-ifdef)
847 864
848 (defun hide-ifdef-toggle-read-only () 865 (defun hide-ifdef-toggle-read-only ()
849 "Toggle `hide-ifdef-read-only'." 866 "Toggle `hide-ifdef-read-only'."
850 (interactive) 867 (interactive)
864 (setq buffer-read-only 881 (setq buffer-read-only
865 (or (and hide-ifdef-hiding hide-ifdef-read-only) 882 (or (and hide-ifdef-hiding hide-ifdef-read-only)
866 hif-outside-read-only)) 883 hif-outside-read-only))
867 (force-mode-line-update)) 884 (force-mode-line-update))
868 885
886 (defun hide-ifdef-toggle-shadowing ()
887 "Toggle shadowing."
888 (interactive)
889 (set (make-local-variable 'hide-ifdef-shadow) (not hide-ifdef-shadow))
890 (message "Shadowing %s" (if hide-ifdef-shadow "ON" "OFF"))
891 (save-restriction
892 (widen)
893 (dolist (overlay (overlays-in (point-min) (point-max)))
894 (when (overlay-get overlay 'hide-ifdef)
895 (if hide-ifdef-shadow
896 (progn
897 (overlay-put overlay 'invisible nil)
898 (overlay-put overlay 'face 'hide-ifdef-shadow))
899 (overlay-put overlay 'face nil)
900 (overlay-put overlay 'invisible 'hide-ifdef))))))
869 901
870 (defun hide-ifdef-define (var) 902 (defun hide-ifdef-define (var)
871 "Define a VAR so that #ifdef VAR would be included." 903 "Define a VAR so that #ifdef VAR would be included."
872 (interactive "SDefine what? ") 904 (interactive "SDefine what? ")
873 (hif-set-var var 1) 905 (hif-set-var var 1)