diff options
| author | Martin Rudalics | 2008-01-19 16:29:08 +0000 |
|---|---|---|
| committer | Martin Rudalics | 2008-01-19 16:29:08 +0000 |
| commit | f3a221cf73ddcb68d168d2a3e81c4ad60881525e (patch) | |
| tree | a734641406fbe6c6f07650765eadbd03fd0032ae | |
| parent | 38b5ca4a1bf83b3d18473fc8928b9ee0537e3e21 (diff) | |
| download | emacs-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/ChangeLog | 18 | ||||
| -rw-r--r-- | lisp/progmodes/hideif.el | 56 |
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 @@ | |||
| 1 | 2008-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 | |||
| 1 | 2008-01-19 Stefan Monnier <monnier@iro.umontreal.ca> | 19 | 2008-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." |