aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Rudalics2008-01-19 16:29:08 +0000
committerMartin Rudalics2008-01-19 16:29:08 +0000
commitf3a221cf73ddcb68d168d2a3e81c4ad60881525e (patch)
treea734641406fbe6c6f07650765eadbd03fd0032ae
parent38b5ca4a1bf83b3d18473fc8928b9ee0537e3e21 (diff)
downloademacs-f3a221cf73ddcb68d168d2a3e81c4ad60881525e.tar.gz
emacs-f3a221cf73ddcb68d168d2a3e81c4ad60881525e.zip
(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.
-rw-r--r--lisp/ChangeLog18
-rw-r--r--lisp/progmodes/hideif.el56
2 files changed, 62 insertions, 12 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index b3f873c73e3..cab7c60b452 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,21 @@
12008-01-19 Martin Rudalics <rudalics@gmx.at>
2
3 * progmodes/hideif.el (hide-ifdef-shadow): New option.
4 (hide-ifdef-shadow): New face.
5 (hide-ifdef-toggle-shadowing): New function to toggle between
6 shadowing and making code invisible.
7 (hide-ifdef-mode-submap): Add binding for
8 hide-ifdef-toggle-shadowing.
9 (hide-ifdef-mode-menu): Add entry for
10 hide-ifdef-toggle-shadowing.
11 (hide-ifdef-region-internal): Give new overlay hide-ifdef
12 property. Shadow text when hide-ifdef-shadow is non-nil.
13 (hif-show-ifdef-region): Remove overlays with hide-ifdef
14 property set.
15 (hif-hide-line): Use when instead of if.
16 (hide-ifdef-initially, hide-ifdef-read-only, hide-ifdef-lines):
17 Remove unneeded * from doc-strings.
18
12008-01-19 Stefan Monnier <monnier@iro.umontreal.ca> 192008-01-19 Stefan Monnier <monnier@iro.umontreal.ca>
2 20
3 * doc-view.el (doc-view-goto-page): Don't move point any more, now that 21 * doc-view.el (doc-view-goto-page): Don't move point any more, now that
diff --git a/lisp/progmodes/hideif.el b/lisp/progmodes/hideif.el
index 126b5310ccc..0d2bf1a656a 100644
--- a/lisp/progmodes/hideif.el
+++ b/lisp/progmodes/hideif.el
@@ -128,6 +128,7 @@
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)
@@ -155,7 +156,9 @@
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.")
@@ -256,9 +259,12 @@ how the hiding is done:
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.
@@ -270,7 +276,7 @@ Everything including these lines is made invisible."
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) ===
@@ -740,11 +746,11 @@ Point is left unchanged."
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
@@ -829,22 +835,33 @@ It does not do the work that's pointless to redo on a recursive entry."
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."
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."
845 :type 'boolean 857 :type 'boolean
846 :group 'hide-ifdef) 858 :group 'hide-ifdef)
847 859
860;;;###autoload
861(defface hide-ifdef-shadow '((t (:inherit shadow)))
862 "Face for shadowing ifdef blocks."
863 :group 'hide-ifdef)
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)
@@ -866,6 +883,21 @@ It does not do the work that's pointless to redo on a recursive entry."
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."