diff options
author | Dan Nicolaescu <dann@ics.uci.edu> | 2008-02-16 07:40:06 +0000 |
---|---|---|
committer | Dan Nicolaescu <dann@ics.uci.edu> | 2008-02-16 07:40:06 +0000 |
commit | 1f3447603f121adaade6c2f847c8135f7b7c7b67 (patch) | |
tree | f7a800511acddcb8a8c15167c9233d4243041ad7 /lisp/progmodes/hideshow.el | |
parent | 517045bc37831d78eb0b24a0ee20e7a011641d95 (diff) | |
download | emacs-1f3447603f121adaade6c2f847c8135f7b7c7b67.tar.gz |
Remove the minor-mode bookkeeping. Move
make-variable-buffer-local code after the corresponding defvar.
(hs-minor-mode-map): Define and initialize in one step.
(hs-minor-mode): Change from defun to define-minor-mode.
Diffstat (limited to 'lisp/progmodes/hideshow.el')
-rw-r--r-- | lisp/progmodes/hideshow.el | 96 |
1 files changed, 38 insertions, 58 deletions
diff --git a/lisp/progmodes/hideshow.el b/lisp/progmodes/hideshow.el index 5a784b159d3..f0065cbedaf 100644 --- a/lisp/progmodes/hideshow.el +++ b/lisp/progmodes/hideshow.el @@ -345,24 +345,49 @@ info node `(elisp)Overlays'.") "Non-nil if using hideshow mode as a minor mode of some other mode. Use the command `hs-minor-mode' to toggle or set this variable.") -(defvar hs-minor-mode-map nil +(defvar hs-minor-mode-map + (let ((map (make-sparse-keymap))) + ;; These bindings roughly imitate those used by Outline mode. + (define-key map "\C-c@\C-h" 'hs-hide-block) + (define-key map "\C-c@\C-s" 'hs-show-block) + (define-key map "\C-c@\C-\M-h" 'hs-hide-all) + (define-key map "\C-c@\C-\M-s" 'hs-show-all) + (define-key map "\C-c@\C-l" 'hs-hide-level) + (define-key map "\C-c@\C-c" 'hs-toggle-hiding) + (define-key map [(shift mouse-2)] 'hs-mouse-toggle-hiding) + (easy-menu-define hs-minor-mode-menu map + "Menu used when hideshow minor mode is active." + '("Hide/Show" + ["Hide Block" hs-hide-block + :help "Hide the code or comment block at point"] + ["Show Block" hs-show-block + :help "Show the code or comment block at point"] + ["Hide All" hs-hide-all + :help "Hide all the blocks in the buffer"] + ["Show All" hs-show-all + :help "Show all the clocks in the buffer"] + ["Hide Level" hs-hide-level + :help "Hide all block at levels below the current block"] + ["Toggle Hiding" hs-toggle-hiding + :help "Toggle the hiding state of the current block"])) + map) "Keymap for hideshow minor mode.") -(defvar hs-minor-mode-menu nil - "Menu for hideshow minor mode.") - (defvar hs-c-start-regexp nil "Regexp for beginning of comments. Differs from mode-specific comment regexps in that surrounding whitespace is stripped.") +(make-variable-buffer-local 'hs-c-start-regexp) (defvar hs-block-start-regexp nil "Regexp for beginning of block.") +(make-variable-buffer-local 'hs-block-start-regexp) (defvar hs-block-start-mdata-select nil "Element in `hs-block-start-regexp' match data to consider as block start. The internal function `hs-forward-sexp' moves point to the beginning of this element (using `match-beginning') before calling `hs-forward-sexp-func'.") +(make-variable-buffer-local 'hs-block-start-mdata-select) (defvar hs-block-end-regexp nil "Regexp for end of block.") @@ -374,6 +399,7 @@ delimiters -- ie, the syntax table regexp for the character is either `(' or `)' -- `hs-forward-sexp-func' would just be `forward-sexp'. For other modes such as simula, a more specialized function is necessary.") +(make-variable-buffer-local 'hs-forward-sexp-func) (defvar hs-adjust-block-beginning nil "Function used to tweak the block beginning. @@ -394,6 +420,7 @@ It should return the position from where we should start hiding. It should not move the point. See `hs-c-like-adjust-block-beginning' for an example of using this.") +(make-variable-buffer-local 'hs-adjust-block-beginning) (defvar hs-headline nil "Text of the line where a hidden block begins, set during isearch. @@ -873,9 +900,8 @@ This can be useful if you have huge RCS logs in those comments." (hs-hide-comment-region beg end))))))) ;;;###autoload -(defun hs-minor-mode (&optional arg) - "Toggle hideshow minor mode. -With ARG, turn hideshow minor mode on if ARG is positive, off otherwise. +(define-minor-mode hs-minor-mode + "Minor mode to selectively hide/show code and comment blocks. When hideshow minor mode is on, the menu bar is augmented with hideshow commands and the hideshow commands are enabled. The value '(hs . t) is added to `buffer-invisibility-spec'. @@ -891,12 +917,10 @@ Lastly, the normal hook `hs-minor-mode-hook' is run using `run-hooks'. Key bindings: \\{hs-minor-mode-map}" - - (interactive "P") - (setq hs-headline nil - hs-minor-mode (if (null arg) - (not hs-minor-mode) - (> (prefix-numeric-value arg) 0))) + :group 'hideshow + :lighter " hs" + :keymap hs-minor-mode-map + (setq hs-headline nil) (if hs-minor-mode (progn (hs-grok-mode-type) @@ -907,12 +931,10 @@ Key bindings: (easy-menu-add hs-minor-mode-menu) (set (make-local-variable 'line-move-ignore-invisible) t) (add-to-invisibility-spec '(hs . t))) - (easy-menu-remove hs-minor-mode-menu) (remove-from-invisibility-spec '(hs . t)) ;; hs-show-all does nothing unless h-m-m is non-nil. (let ((hs-minor-mode t)) - (hs-show-all))) - (run-hooks 'hs-minor-mode-hook)) + (hs-show-all)))) ;;;###autoload (defun turn-off-hideshow () @@ -920,48 +942,6 @@ Key bindings: (hs-minor-mode -1)) ;;--------------------------------------------------------------------------- -;; load-time actions - -;; keymaps and menus -(unless hs-minor-mode-map - (setq hs-minor-mode-map (make-sparse-keymap)) - (easy-menu-define hs-minor-mode-menu - hs-minor-mode-map - "Menu used when hideshow minor mode is active." - (cons "Hide/Show" - (mapcar - ;; Interpret each table entry as follows: first, populate keymap - ;; with elements 2 and 1; then, for easymenu, use entry directly - ;; unless element 0 is nil, in which case the entry is "omitted". - (lambda (ent) - (define-key hs-minor-mode-map (aref ent 2) (aref ent 1)) - (if (aref ent 0) ent "-----")) - ;; These bindings roughly imitate those used by Outline mode. - ;; menu entry command key - '(["Hide Block" hs-hide-block "\C-c@\C-h"] - ["Show Block" hs-show-block "\C-c@\C-s"] - ["Hide All" hs-hide-all "\C-c@\C-\M-h"] - ["Show All" hs-show-all "\C-c@\C-\M-s"] - ["Hide Level" hs-hide-level "\C-c@\C-l"] - ["Toggle Hiding" hs-toggle-hiding "\C-c@\C-c"] - [nil hs-mouse-toggle-hiding [(shift mouse-2)]] - ))))) - -;; some housekeeping -(add-to-list 'minor-mode-map-alist (cons 'hs-minor-mode hs-minor-mode-map)) -(add-to-list 'minor-mode-alist '(hs-minor-mode " hs") t) - -;; make some variables buffer-local -(dolist (var '(hs-minor-mode - hs-c-start-regexp - hs-block-start-regexp - hs-block-start-mdata-select - hs-block-end-regexp - hs-forward-sexp-func - hs-adjust-block-beginning)) - (make-variable-buffer-local var)) - -;;--------------------------------------------------------------------------- ;; that's it (provide 'hideshow) |