• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10/emacs-93/emacs/lisp/progmodes/

Lines Matching defs:ifdef

1 ;;; hideif.el --- hides selected code within ifdef
29 ;; To initialize, toggle the hide-ifdef minor mode with
31 ;; M-x hide-ifdef-mode
33 ;; This will set up key bindings and call hide-ifdef-mode-hook if it
39 ;; Hide-ifdef suppresses the display of code that the preprocessor wouldn't
48 ;; You can make your buffer read-only while hide-ifdef-hiding by setting
49 ;; hide-ifdef-read-only to a non-nil value. You can toggle this
50 ;; variable with hide-ifdef-toggle-read-only (C-c @ C-q).
56 ;; Use M-x hide-ifdef-define (C-c @ d) to define a symbol.
57 ;; Use M-x hide-ifdef-undef (C-c @ u) to undefine a symbol.
59 ;; If you define or undefine a symbol while hide-ifdef-mode is in effect,
62 ;; list with hide-ifdef-set-define-alist. This adds entries
63 ;; to hide-ifdef-define-alist.
65 ;; If you have defined a hide-ifdef-mode-hook, you can set
69 ;; (add-hook 'hide-ifdef-mode-hook
71 ;; (unless hide-ifdef-define-alist
72 ;; (setq hide-ifdef-define-alist
75 ;; (hide-ifdef-use-define-alist 'list2))) ; use list2 by default
77 ;; You can call hide-ifdef-use-define-alist (C-c @ U) at any time to specify
80 ;; To cause ifdefs to be hidden as soon as hide-ifdef-mode is called,
81 ;; set hide-ifdef-initially to non-nil.
83 ;; If you set hide-ifdef-lines to t, hide-ifdefs hides all the #ifdef lines.
85 ;; hide-ifdef-lines to nil (the default), the surrounding preprocessor
90 ;; You can explicitly hide or show individual ifdef blocks irrespective
91 ;; of the define list by using hide-ifdef-block and show-ifdef-block.
93 ;; You can move the point between ifdefs with forward-ifdef, backward-ifdef,
94 ;; up-ifdef, down-ifdef, next-ifdef, and previous-ifdef.
97 ;; may appear. "Ifdef" will appear when hide-ifdef-mode is active. "Hiding"
98 ;; will appear when text may be hidden ("hide-ifdef-hiding" is non-nil).
106 ;; I will continue to upgrade hide-ifdef-mode
113 (defgroup hide-ifdef nil
114 "Hide selected code within `ifdef'."
117 (defvar hide-ifdef-mode-submap
120 (define-key map "d" 'hide-ifdef-define)
121 (define-key map "u" 'hide-ifdef-undef)
122 (define-key map "D" 'hide-ifdef-set-define-alist)
123 (define-key map "U" 'hide-ifdef-use-define-alist)
127 (define-key map "\C-d" 'hide-ifdef-block)
128 (define-key map "\C-s" 'show-ifdef-block)
130 (define-key map "\C-q" 'hide-ifdef-toggle-read-only)
132 'toggle-read-only 'hide-ifdef-toggle-outside-read-only map)
134 "Keymap used by `hide-ifdef-mode' under `hide-ifdef-mode-prefix-key'.")
136 (defconst hide-ifdef-mode-prefix-key "\C-c@"
139 (defvar hide-ifdef-mode-map
142 (define-key map hide-ifdef-mode-prefix-key hide-ifdef-mode-submap)
144 "Keymap used with `hide-ifdef-mode'.")
146 (defvar hide-ifdef-hiding nil
149 (or (assq 'hide-ifdef-hiding minor-mode-alist)
151 (cons '(hide-ifdef-hiding " Hiding")
155 (defvar hide-ifdef-syntax-table
163 (defvar hide-ifdef-env nil
170 (define-minor-mode hide-ifdef-mode
173 In Hide-Ifdef mode, code within #ifdef constructs that the C preprocessor
177 `hide-ifdef-env'
179 current buffer. Initially, the global value of `hide-ifdef-env'
182 `hide-ifdef-define-alist'
184 Use `hide-ifdef-set-define-alist' to save the current `hide-ifdef-env'
185 and `hide-ifdef-use-define-alist' to set the current `hide-ifdef-env'
186 from one of the lists in `hide-ifdef-define-alist'.
188 `hide-ifdef-lines'
189 Set to non-nil to not show #if, #ifdef, #ifndef, #else, and
192 `hide-ifdef-initially'
196 `hide-ifdef-read-only'
200 \\{hide-ifdef-mode-map}"
201 :group 'hide-ifdef :lighter " Ifdef"
202 (if hide-ifdef-mode
205 (set (make-local-variable 'hide-ifdef-env)
206 (default-value 'hide-ifdef-env))
207 (set (make-local-variable 'hide-ifdef-hiding)
208 (default-value 'hide-ifdef-hiding))
212 (lambda () (hide-ifdef-mode -1)) nil t)
214 (add-to-invisibility-spec '(hide-ifdef . t))
216 (if hide-ifdef-initially
219 ;; else end hide-ifdef-mode
221 (remove-from-invisibility-spec '(hide-ifdef . t))
222 (if hide-ifdef-hiding
229 (hif-show-ifdef-region (point-min) (point-max)))
235 (and hide-ifdef-mode hide-ifdef-hiding
244 (defun hide-ifdef-region-internal (start end)
245 (remove-overlays start end 'invisible 'hide-ifdef)
247 (overlay-put o 'invisible 'hide-ifdef)))
249 (defun hide-ifdef-region (start end)
255 (hide-ifdef-region-internal start end)))
257 (defun hif-show-ifdef-region (start end)
259 (remove-overlays start end 'invisible 'hide-ifdef))
266 (defvar hide-ifdef-evaluator 'eval
276 "Prepend (var value) pair to hide-ifdef-env."
277 (setq hide-ifdef-env (cons (cons var value) hide-ifdef-env)))
282 (let ((val (assoc var hide-ifdef-env)))
288 (if (assoc var hide-ifdef-env) 1 0))
295 ;;; The code that understands what ifs and ifdef in files look like.
318 (with-syntax-table hide-ifdef-syntax-table
549 (defun hif-ifdef-to-endif ()
551 ;; (message "hif-ifdef-to-endif at %d" (point)) (sit-for 1)
554 (hif-ifdef-to-endif) ; find endif of nested if
555 (hif-ifdef-to-endif)) ; find outer endif or else
557 (hif-ifdef-to-endif)) ; find endif following else
561 (error "Mismatched #ifdef #endif pair"))))
564 (defun hif-endif-to-ifdef ()
566 ;; (message "hif-endif-to-ifdef at %d" (point))
570 (error "Mismatched #ifdef #endif pair")))
572 (hif-endif-to-ifdef) ; find beginning of nested if
573 (hif-endif-to-ifdef)) ; find beginning of outer if or else
575 (hif-endif-to-ifdef))
581 (defun forward-ifdef (&optional arg)
582 "Move point to beginning of line of the next ifdef-endif.
586 (if (< arg 0) (backward-ifdef (- arg))
593 (hif-ifdef-to-endif)
595 (error "No following #ifdef"))))))
598 (defun backward-ifdef (&optional arg)
599 "Move point to beginning of the previous ifdef-endif.
603 (if (< arg 0) (forward-ifdef (- arg))
611 (hif-endif-to-ifdef)
613 (error "No previous #ifdef"))))))
616 (defun down-ifdef ()
617 "Move point to beginning of nested ifdef or else-part."
624 (error "No following #ifdef"))))
627 (defun up-ifdef ()
628 "Move point to beginning of enclosing ifdef or else-part."
635 (hif-endif-to-ifdef))
637 (error "No previous #ifdef"))))
639 (defun next-ifdef (&optional arg)
644 (if (< arg 0) (previous-ifdef (- arg))
652 (defun previous-ifdef (&optional arg)
657 (if (< arg 0) (next-ifdef (- arg))
669 ;;===%%SF%% hide-ifdef-hiding (Start) ===
673 ;;; ELSE-P True if there was an else clause for the ifdef.
706 (hif-looking-at-ifX)) ; Skip nested ifdef
707 (hif-ifdef-to-endif))
717 (hif-looking-at-ifX)) ; Skip nested ifdef
718 (hif-ifdef-to-endif))
728 "Hide the line containing point. Does nothing if `hide-ifdef-lines' is nil."
729 (if hide-ifdef-lines
732 (hide-ifdef-region-internal (line-beginning-position)
738 ;;; the hide-ifdef-evaluator returns T. Presumably, this means the code
739 ;;; inside the #ifdef would be included when the program was
754 ;;; and just recursively calling hide-ifdef-guts.
760 "Call `hide-ifdef-guts' after narrowing to end of START line and END line."
766 (hide-ifdef-guts))))
770 It uses the judgement of `hide-ifdef-evaluator'."
777 (if (not (hif-not (funcall hide-ifdef-evaluator test)))
780 (hide-ifdef-region (hif-range-else range)
789 (hide-ifdef-region (hif-range-start range)
794 (hide-ifdef-region (point)
802 (defun hide-ifdef-guts ()
805 ;; (message "hide-ifdef-guts")
811 ;;===%%SF%% hide-ifdef-hiding (End) ===
817 (defcustom hide-ifdef-initially nil
820 :group 'hide-ifdef)
823 (defcustom hide-ifdef-read-only nil
826 :group 'hide-ifdef)
829 (defcustom hide-ifdef-lines nil
832 :group 'hide-ifdef)
834 (defun hide-ifdef-toggle-read-only ()
835 "Toggle `hide-ifdef-read-only'."
837 (setq hide-ifdef-read-only (not hide-ifdef-read-only))
839 (if hide-ifdef-read-only "ON" "OFF"))
840 (if hide-ifdef-hiding
841 (setq buffer-read-only (or hide-ifdef-read-only hif-outside-read-only)))
844 (defun hide-ifdef-toggle-outside-read-only ()
851 (or (and hide-ifdef-hiding hide-ifdef-read-only)
856 (defun hide-ifdef-define (var)
857 "Define a VAR so that #ifdef VAR would be included."
860 (if hide-ifdef-hiding (hide-ifdefs)))
862 (defun hide-ifdef-undef (var)
863 "Undefine a VAR so that #ifdef VAR would not be included."
866 (if hide-ifdef-hiding (hide-ifdefs)))
871 Assume that defined symbols have been added to `hide-ifdef-env'.
880 (unless hide-ifdef-mode (hide-ifdef-mode 1)) ; turn on hide-ifdef-mode
881 (if hide-ifdef-hiding
883 (setq hide-ifdef-hiding t)
884 (hide-ifdef-guts)
885 (setq buffer-read-only (or hide-ifdef-read-only hif-outside-read-only))
891 "Cancel the effects of `hide-ifdef': show the contents of all #ifdefs."
895 (setq hide-ifdef-hiding nil))
898 (defun hif-find-ifdef-block ()
899 "Utility for hide and show `ifdef-block'.
900 Return as (TOP . BOTTOM) the extent of ifdef block."
905 (up-ifdef))
907 (hif-ifdef-to-endif)
914 (hif-ifdef-to-endif)
919 (defun hide-ifdef-block ()
920 "Hide the ifdef block (true or false part) enclosing or before the cursor."
922 (unless hide-ifdef-mode (hide-ifdef-mode 1))
923 (let ((top-bottom (hif-find-ifdef-block)))
924 (hide-ifdef-region (car top-bottom) (cdr top-bottom))
925 (when hide-ifdef-lines
928 (setq hide-ifdef-hiding t))
929 (setq buffer-read-only (or hide-ifdef-read-only hif-outside-read-only)))
931 (defun show-ifdef-block ()
932 "Show the ifdef block (true or false part) enclosing or before the cursor."
934 (let ((top-bottom (hif-find-ifdef-block)))
935 (if hide-ifdef-lines
936 (hif-show-ifdef-region
942 (hif-show-ifdef-region (1- (car top-bottom)) (cdr top-bottom)))))
947 (defvar hide-ifdef-define-alist nil
956 (defun hide-ifdef-set-define-alist (name)
957 "Set the association for NAME to `hide-ifdef-env'."
959 (push (cons name (hif-compress-define-list hide-ifdef-env))
960 hide-ifdef-define-alist))
962 (defun hide-ifdef-use-define-alist (name)
963 "Set `hide-ifdef-env' to the define list specified by NAME."
967 hide-ifdef-define-alist)
970 (let ((define-list (assoc name hide-ifdef-define-alist)))
972 (setq hide-ifdef-env
976 (if hide-ifdef-hiding (hide-ifdefs))))