Mercurial > emacs
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) |