annotate lisp/progmodes/hideshow.el @ 63308:51d38cfbe542

Warn about using "cvs up -kb" if one intends to commit changes. Add a pointer to another site with detailed configure and build instructions. Suggest to look at config.log when configure fails. Add MinGW Make 3.80 to the list of successful combinations.
author Eli Zaretskii <eliz@gnu.org>
date Sat, 11 Jun 2005 11:31:29 +0000
parents a13c098922e1
children 18a818a2ee7c cb67264d6096
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38980
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
1 ;;; hideshow.el --- minor mode cmds to selectively display code/comment blocks
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
2
36784
04b49d665787 Update copyright.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 31856
diff changeset
3 ;; Copyright (C) 1994, 95, 96, 97, 98, 99, 2000, 01 Free Software Foundation
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14151
diff changeset
4
31856
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
5 ;; Author: Thien-Thi Nguyen <ttn@gnu.org>
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
6 ;; Dan Nicolaescu <dann@ics.uci.edu>
18070
a99f3bd58831 (hs-hide-comments-when-hiding-all)
Richard M. Stallman <rms@gnu.org>
parents: 18016
diff changeset
7 ;; Keywords: C C++ java lisp tools editing comments blocks hiding outlines
59346
a13c098922e1 Update `Maintainer-Version' header comment; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59344
diff changeset
8 ;; Maintainer-Version: 5.58.2.4
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14151
diff changeset
9 ;; Time-of-Day-Author-Most-Likely-to-be-Recalcitrant: early morning
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
10
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14151
diff changeset
11 ;; This file is part of GNU Emacs.
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
12
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14151
diff changeset
13 ;; GNU Emacs is free software; you can redistribute it and/or modify
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14151
diff changeset
14 ;; it under the terms of the GNU General Public License as published by
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14151
diff changeset
15 ;; the Free Software Foundation; either version 2, or (at your option)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14151
diff changeset
16 ;; any later version.
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
17
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14151
diff changeset
18 ;; GNU Emacs is distributed in the hope that it will be useful,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14151
diff changeset
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14151
diff changeset
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14151
diff changeset
21 ;; GNU General Public License for more details.
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
22
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14151
diff changeset
23 ;; You should have received a copy of the GNU General Public License
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14151
diff changeset
24 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14151
diff changeset
25 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14151
diff changeset
26 ;; Boston, MA 02111-1307, USA.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14151
diff changeset
27
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
28 ;;; Commentary:
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
29
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
30 ;; * Commands provided
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
31 ;;
27771
9d04cc14a320 (hs-flag-region): No longer use `intangible' overlay property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 27183
diff changeset
32 ;; This file provides Hideshow Minor Mode. When active, nine commands
27029
4ad11069f66d (hs-minor-mode-menu): Fix omission bug; was used but not declared.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 26989
diff changeset
33 ;; are available, implementing block hiding and showing. They (and their
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
34 ;; keybindings) are:
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
35 ;;
36784
04b49d665787 Update copyright.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 31856
diff changeset
36 ;; hs-hide-block C-c @ C-h
04b49d665787 Update copyright.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 31856
diff changeset
37 ;; hs-show-block C-c @ C-s
04b49d665787 Update copyright.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 31856
diff changeset
38 ;; hs-hide-all C-c @ C-M-h
04b49d665787 Update copyright.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 31856
diff changeset
39 ;; hs-show-all C-c @ C-M-s
04b49d665787 Update copyright.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 31856
diff changeset
40 ;; hs-hide-level C-c @ C-l
04b49d665787 Update copyright.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 31856
diff changeset
41 ;; hs-toggle-hiding C-c @ C-c
38980
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
42 ;; hs-mouse-toggle-hiding [(shift mouse-2)]
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
43 ;; hs-hide-initial-comment-block
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
44 ;;
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
45 ;; Blocks are defined per mode. In c-mode, c++-mode and java-mode, they
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
46 ;; are simply text between curly braces, while in Lisp-ish modes parens
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
47 ;; are used. Multi-line comment blocks can also be hidden. Read-only
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
48 ;; buffers are not a problem, since hideshow doesn't modify the text.
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
49 ;;
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
50 ;; The command `M-x hs-minor-mode' toggles the minor mode or sets it
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
51 ;; (similar to other minor modes).
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
52
38980
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
53 ;; * Suggested usage
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
54 ;;
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
55 ;; First make sure hideshow.el is in a directory in your `load-path'.
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
56 ;; You can optionally byte-compile it using `M-x byte-compile-file'.
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
57 ;; Then, add the following to your ~/.emacs:
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
58 ;;
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
59 ;; (load-library "hideshow")
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
60 ;; (add-hook 'X-mode-hook ; other modes similarly
59075
b449e405ed0d (hs-inside-comment-p): Fix omission bug:
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52873
diff changeset
61 ;; (lambda () (hs-minor-mode 1)))
38980
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
62 ;;
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
63 ;; where X = {emacs-lisp,c,c++,perl,...}. You can also manually toggle
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
64 ;; hideshow minor mode by typing `M-x hs-minor-mode'. After hideshow is
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
65 ;; activated or deactivated, `hs-minor-mode-hook' is run w/ `run-hooks'.
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
66 ;;
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
67 ;; Additionally, Joseph Eydelnant writes:
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
68 ;; I enjoy your package hideshow.el Ver. 5.24 2001/02/13
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
69 ;; a lot and I've been looking for the following functionality:
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
70 ;; toggle hide/show all with a single key.
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
71 ;; Here are a few lines of code that lets me do just that.
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
72 ;;
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
73 ;; (defvar my-hs-hide nil "Current state of hideshow for toggling all.")
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
74 ;; ;;;###autoload
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
75 ;; (defun my-toggle-hideshow-all () "Toggle hideshow all."
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
76 ;; (interactive)
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
77 ;; (setq my-hs-hide (not my-hs-hide))
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
78 ;; (if my-hs-hide
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
79 ;; (hs-hide-all)
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
80 ;; (hs-show-all)))
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
81 ;;
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
82 ;; [Your hideshow hacks here!]
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
83
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
84 ;; * Customization
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
85 ;;
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
86 ;; You can use `M-x customize-variable' on the following variables:
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
87 ;;
31856
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
88 ;; - hs-hide-comments-when-hiding-all -- self-explanatory!
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
89 ;; - hs-hide-all-non-comment-function -- if non-nil, when doing a
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
90 ;; `hs-hide-all', this function
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
91 ;; is called w/ no arguments
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
92 ;; - hs-isearch-open -- what kind of hidden blocks to
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
93 ;; open when doing isearch
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
94 ;;
31856
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
95 ;; Some languages (e.g., Java) are deeply nested, so the normal behavior
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
96 ;; of `hs-hide-all' (hiding all but top-level blocks) results in very
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
97 ;; little information shown, which is not very useful. You can use the
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
98 ;; variable `hs-hide-all-non-comment-function' to implement your idea of
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
99 ;; what is more useful. For example, the following code shows the next
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
100 ;; nested level in addition to the top-level:
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
101 ;;
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
102 ;; (defun ttn-hs-hide-level-1 ()
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
103 ;; (hs-hide-level 1)
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
104 ;; (forward-sexp 1))
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
105 ;; (setq hs-hide-all-non-comment-function 'ttn-hs-hide-level-1)
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
106 ;;
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
107 ;; Hideshow works w/ incremental search (isearch) by setting the variable
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
108 ;; `hs-headline', which is the line of text at the beginning of a hidden
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
109 ;; block that contains a match for the search. You can have this show up
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
110 ;; in the mode line by modifying the variable `mode-line-format'. For
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
111 ;; example, the following code prepends this info to the mode line:
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14151
diff changeset
112 ;;
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
113 ;; (unless (memq 'hs-headline mode-line-format)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
114 ;; (setq mode-line-format
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
115 ;; (append '("-" hs-headline) mode-line-format)))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
116 ;;
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
117 ;; See documentation for `mode-line-format' for more info.
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
118 ;;
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
119 ;; Hooks are run after some commands:
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
120 ;;
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
121 ;; hs-hide-hook in hs-hide-block, hs-hide-all, hs-hide-level
31856
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
122 ;; hs-show-hook hs-show-block, hs-show-all
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
123 ;;
31856
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
124 ;; One of `hs-hide-hook' or `hs-show-hook' is run for the toggling
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
125 ;; commands when the result of the toggle is to hide or show blocks,
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
126 ;; respectively. All hooks are run w/ `run-hooks'. See docs for each
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
127 ;; variable or hook for more info.
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
128 ;;
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
129 ;; Normally, hideshow tries to determine appropriate values for block
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
130 ;; and comment definitions by examining the buffer's major mode. If
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
131 ;; there are problems, hideshow will not activate and in that case you
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
132 ;; may wish to override hideshow's heuristics by adding an entry to
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
133 ;; variable `hs-special-modes-alist'. Packages that use hideshow should
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
134 ;; do something like:
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
135 ;;
59075
b449e405ed0d (hs-inside-comment-p): Fix omission bug:
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52873
diff changeset
136 ;; (add-to-list 'hs-special-modes-alist '(my-mode "{{" "}}" ...))
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
137 ;;
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
138 ;; If you have an entry that works particularly well, consider
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
139 ;; submitting it for inclusion in hideshow.el. See docstring for
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
140 ;; `hs-special-modes-alist' for more info on the entry format.
59086
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
141 ;;
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
142 ;; See also variable `hs-set-up-overlay' for per-block customization of
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
143 ;; appearance or other effects associated with overlays. For example:
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
144 ;;
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
145 ;; (setq hs-set-up-overlay
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
146 ;; (defun my-display-code-line-counts (ov)
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
147 ;; (when (eq 'code (overlay-get ov 'hs))
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
148 ;; (overlay-put ov 'display
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
149 ;; (propertize
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
150 ;; (format " ... <%d>"
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
151 ;; (count-lines (overlay-start ov)
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
152 ;; (overlay-end ov)))
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
153 ;; 'face 'font-lock-type-face)))))
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
154
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
155 ;; * Bugs
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
156 ;;
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
157 ;; (1) Hideshow does not work w/ emacs 18 because emacs 18 lacks the
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
158 ;; function `forward-comment' (among other things). If someone
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
159 ;; writes this, please send me a copy.
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
160 ;;
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
161 ;; (2) Sometimes `hs-headline' can become out of sync. To reset, type
38980
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
162 ;; `M-x hs-minor-mode' twice (that is, deactivate then re-activate
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
163 ;; hideshow).
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
164 ;;
38980
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
165 ;; (3) Hideshow 5.x is developed and tested on GNU Emacs 20.7.
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
166 ;; XEmacs compatibility may have bitrotted since 4.29.
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
167 ;;
31856
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
168 ;; (4) Some buffers can't be `byte-compile-file'd properly. This is because
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
169 ;; `byte-compile-file' inserts the file to be compiled in a temporary
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
170 ;; buffer and switches `normal-mode' on. In the case where you have
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
171 ;; `hs-hide-initial-comment-block' in `hs-minor-mode-hook', the hiding of
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
172 ;; the initial comment sometimes hides parts of the first statement (seems
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
173 ;; to be only in `normal-mode'), so there are unbalanced "(" and ")".
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
174 ;;
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
175 ;; The workaround is to clear `hs-minor-mode-hook' when byte-compiling:
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
176 ;;
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
177 ;; (defadvice byte-compile-file (around
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
178 ;; byte-compile-file-hideshow-off
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
179 ;; act)
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
180 ;; (let ((hs-minor-mode-hook nil))
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
181 ;; ad-do-it))
38980
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
182 ;;
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
183 ;; (5) Hideshow interacts badly with Ediff and `vc-diff'. At the moment, the
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
184 ;; suggested workaround is to turn off hideshow entirely, for example:
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
185 ;;
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
186 ;; (defun turn-off-hideshow () (hs-minor-mode -1))
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
187 ;; (add-hook 'ediff-prepare-buffer-hook 'turn-off-hideshow)
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
188 ;; (add-hook 'vc-before-checkin-hook 'turn-off-hideshow)
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
189 ;;
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
190 ;; In the case of `vc-diff', here is a less invasive workaround:
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
191 ;;
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
192 ;; (add-hook 'vc-before-checkin-hook
59075
b449e405ed0d (hs-inside-comment-p): Fix omission bug:
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52873
diff changeset
193 ;; (lambda ()
b449e405ed0d (hs-inside-comment-p): Fix omission bug:
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52873
diff changeset
194 ;; (goto-char (point-min))
b449e405ed0d (hs-inside-comment-p): Fix omission bug:
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52873
diff changeset
195 ;; (hs-show-block)))
38980
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
196 ;;
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
197 ;; Unfortunately, these workarounds do not restore hideshow state.
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
198 ;; If someone figures out a better way, please let me know.
31856
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
199
38980
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
200 ;; * Correspondance
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
201 ;;
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
202 ;; Correspondance welcome; please indicate version number. Send bug
31856
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
203 ;; reports and inquiries to <ttn@gnu.org>.
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
204
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
205 ;; * Thanks
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
206 ;;
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
207 ;; Thanks go to the following people for valuable ideas, code and
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
208 ;; bug reports.
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
209 ;;
31856
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
210 ;; Dean Andrews, Alf-Ivar Holm, Holger Bauer, Christoph Conrad, Dave
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
211 ;; Love, Dirk Herrmann, Gael Marziou, Jan Djarv, Guillaume Leray,
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
212 ;; Moody Ahmad, Preston F. Crow, Lars Lindberg, Reto Zimmermann,
38980
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
213 ;; Keith Sheffield, Chew Meng Kuan, Tony Lam, Pete Ware, François
52666
35f18ddf38e0 Thank Michael Ernst; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
214 ;; Pinard, Stefan Monnier, Joseph Eydelnant, Michael Ernst
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
215 ;;
31856
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
216 ;; Special thanks go to Dan Nicolaescu, who reimplemented hideshow using
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
217 ;; overlays (rather than selective display), added isearch magic, folded
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
218 ;; in custom.el compatibility, generalized comment handling, incorporated
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
219 ;; mouse support, and maintained the code in general. Version 4.0 is
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
220 ;; largely due to his efforts.
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
221
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
222 ;; * History
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
223 ;;
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
224 ;; Hideshow was inspired when I learned about selective display. It was
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
225 ;; reimplemented to use overlays for 4.0 (see above). WRT older history,
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
226 ;; entries in the masterfile corresponding to versions 1.x and 2.x have
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
227 ;; been lost. XEmacs support is reliable as of 4.29. State save and
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
228 ;; restore was added in 3.5 (not widely distributed), and reliable as of
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
229 ;; 4.30. Otherwise, the code seems stable. Passes checkdoc as of 4.32.
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
230 ;; Version 5.x uses new algorithms for block selection and traversal,
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
231 ;; unbundles state save and restore, and includes more isearch support.
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
232
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
233 ;;; Code:
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
234
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
235 (require 'easymenu)
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
236
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
237 ;;---------------------------------------------------------------------------
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
238 ;; user-configurable variables
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
239
18070
a99f3bd58831 (hs-hide-comments-when-hiding-all)
Richard M. Stallman <rms@gnu.org>
parents: 18016
diff changeset
240 (defgroup hideshow nil
a99f3bd58831 (hs-hide-comments-when-hiding-all)
Richard M. Stallman <rms@gnu.org>
parents: 18016
diff changeset
241 "Minor mode for hiding and showing program and comment blocks."
18237
69bb3a2c95b3 (hideshow): Added a :prefix.
Richard M. Stallman <rms@gnu.org>
parents: 18093
diff changeset
242 :prefix "hs-"
18070
a99f3bd58831 (hs-hide-comments-when-hiding-all)
Richard M. Stallman <rms@gnu.org>
parents: 18016
diff changeset
243 :group 'languages)
a99f3bd58831 (hs-hide-comments-when-hiding-all)
Richard M. Stallman <rms@gnu.org>
parents: 18016
diff changeset
244
19233
520a7d40d75c Correct the autoload cookies.
Richard M. Stallman <rms@gnu.org>
parents: 18867
diff changeset
245 ;;;###autoload
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
246 (defcustom hs-hide-comments-when-hiding-all t
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
247 "*Hide the comments too when you do an `hs-hide-all'."
18070
a99f3bd58831 (hs-hide-comments-when-hiding-all)
Richard M. Stallman <rms@gnu.org>
parents: 18016
diff changeset
248 :type 'boolean
a99f3bd58831 (hs-hide-comments-when-hiding-all)
Richard M. Stallman <rms@gnu.org>
parents: 18016
diff changeset
249 :group 'hideshow)
a99f3bd58831 (hs-hide-comments-when-hiding-all)
Richard M. Stallman <rms@gnu.org>
parents: 18016
diff changeset
250
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
251 (defcustom hs-minor-mode-hook nil
27771
9d04cc14a320 (hs-flag-region): No longer use `intangible' overlay property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 27183
diff changeset
252 "*Hook called when hideshow minor mode is activated or deactivated."
19833
fdcd167cb293 (hs-minor-mode-hook): Fix customize type.
Richard M. Stallman <rms@gnu.org>
parents: 19233
diff changeset
253 :type 'hook
36787
608c66a9bc34 (hs-minor-mode-hook): Include `:version' in defcustom form.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 36784
diff changeset
254 :group 'hideshow
608c66a9bc34 (hs-minor-mode-hook): Include `:version' in defcustom form.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 36784
diff changeset
255 :version "21.1")
18070
a99f3bd58831 (hs-hide-comments-when-hiding-all)
Richard M. Stallman <rms@gnu.org>
parents: 18016
diff changeset
256
38980
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
257 (defcustom hs-isearch-open 'code
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
258 "*What kind of hidden blocks to open when doing `isearch'.
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
259 One of the following symbols:
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
260
38980
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
261 code -- open only code blocks
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
262 comment -- open only comment blocks
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
263 t -- open both code and comment blocks
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
264 nil -- open neither code nor comment blocks
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
265
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
266 This has effect iff `search-invisible' is set to `open'."
38980
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
267 :type '(choice (const :tag "open only code blocks" code)
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
268 (const :tag "open only comment blocks" comment)
6ef918297577 Update first-line description.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 38419
diff changeset
269 (const :tag "open both code and comment blocks" t)
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
270 (const :tag "don't open any of them" nil))
18237
69bb3a2c95b3 (hideshow): Added a :prefix.
Richard M. Stallman <rms@gnu.org>
parents: 18093
diff changeset
271 :group 'hideshow)
69bb3a2c95b3 (hideshow): Added a :prefix.
Richard M. Stallman <rms@gnu.org>
parents: 18093
diff changeset
272
19233
520a7d40d75c Correct the autoload cookies.
Richard M. Stallman <rms@gnu.org>
parents: 18867
diff changeset
273 ;;;###autoload
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
274 (defvar hs-special-modes-alist
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
275 '((c-mode "{" "}" "/[*/]" nil hs-c-like-adjust-block-beginning)
18093
1e53ce338e0d (hs-show-hidden-short-form): Updated doc string.
Richard M. Stallman <rms@gnu.org>
parents: 18070
diff changeset
276 (c++-mode "{" "}" "/[*/]" nil hs-c-like-adjust-block-beginning)
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
277 (bibtex-mode ("^@\\S(*\\(\\s(\\)" 1))
59075
b449e405ed0d (hs-inside-comment-p): Fix omission bug:
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52873
diff changeset
278 (java-mode "{" "}" "/[*/]" nil hs-c-like-adjust-block-beginning))
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
279 "*Alist for initializing the hideshow variables for different modes.
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
280 Each element has the form
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
281 (MODE START END COMMENT-START FORWARD-SEXP-FUNC ADJUST-BEG-FUNC).
18016
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
282
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
283 If non-nil, hideshow will use these values as regexps to define blocks
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
284 and comments, respectively for major mode MODE.
18867
b6e4c4c2a3ef (hs-special-modes-alist): Use a regexp generated by regexp-opt.
Richard M. Stallman <rms@gnu.org>
parents: 18428
diff changeset
285
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
286 START, END and COMMENT-START are regular expressions. A block is
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
287 defined as text surrounded by START and END.
18016
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
288
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
289 As a special case, START may be a list of the form (COMPLEX-START
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
290 MDATA-SELECTOR), where COMPLEX-START is a regexp w/ multiple parts and
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
291 MDATA-SELECTOR an integer that specifies which sub-match is the proper
52021
3e312ab8ce0d (hs-special-modes-alist): Clarify MDATA-SELECTOR doc; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 45320
diff changeset
292 place to adjust point, before calling `hs-forward-sexp-func'. Point
3e312ab8ce0d (hs-special-modes-alist): Clarify MDATA-SELECTOR doc; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 45320
diff changeset
293 is adjusted to the beginning of the specified match. For example,
3e312ab8ce0d (hs-special-modes-alist): Clarify MDATA-SELECTOR doc; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 45320
diff changeset
294 see the `hs-special-modes-alist' entry for `bibtex-mode'.
18016
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
295
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
296 For some major modes, `forward-sexp' does not work properly. In those
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
297 cases, FORWARD-SEXP-FUNC specifies another function to use instead.
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
298
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
299 See the documentation for `hs-adjust-block-beginning' to see what is the
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
300 use of ADJUST-BEG-FUNC.
18016
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
301
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
302 If any of the elements is left nil or omitted, hideshow tries to guess
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
303 appropriate values. The regexps should not contain leading or trailing
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
304 whitespace. Case does not matter.")
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
305
31856
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
306 (defvar hs-hide-all-non-comment-function nil
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
307 "*Function called if non-nil when doing `hs-hide-all' for non-comments.")
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
308
14151
1087acbd29d7 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 13957
diff changeset
309 (defvar hs-hide-hook nil
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
310 "*Hook called (with `run-hooks') at the end of commands to hide text.
31856
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
311 These commands include the toggling commands (when the result is to hide
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
312 a block), `hs-hide-all', `hs-hide-block' and `hs-hide-level'.")
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
313
14151
1087acbd29d7 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 13957
diff changeset
314 (defvar hs-show-hook nil
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
315 "*Hook called (with `run-hooks') at the end of commands to show text.
31856
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
316 These commands include the toggling commands (when the result is to show
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
317 a block), `hs-show-all' and `hs-show-block'..")
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
318
59086
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
319 (defvar hs-set-up-overlay nil
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
320 "*Function called with one arg, OV, a newly initialized overlay.
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
321 Hideshow puts a unique overlay on each range of text to be hidden
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
322 in the buffer. Here is a simple example of how to use this variable:
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
323
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
324 (defun display-code-line-counts (ov)
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
325 (when (eq 'code (overlay-get ov 'hs))
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
326 (overlay-put ov 'display
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
327 (format \"... / %d\"
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
328 (count-lines (overlay-start ov)
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
329 (overlay-end ov))))))
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
330
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
331 (setq hs-set-up-overlay 'display-code-line-counts)
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
332
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
333 This example shows how to get information from the overlay as well
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
334 as how to set its `display' property. See `hs-make-overlay' and
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
335 info node `(elisp)Overlays'.")
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
336
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
337 ;;---------------------------------------------------------------------------
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
338 ;; internal variables
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
339
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
340 (defvar hs-minor-mode nil
10841
88926963f1ae Clean up doc strings.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 10276
diff changeset
341 "Non-nil if using hideshow mode as a minor mode of some other mode.
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
342 Use the command `hs-minor-mode' to toggle or set this variable.")
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
343
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
344 (defvar hs-minor-mode-map nil
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
345 "Keymap for hideshow minor mode.")
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
346
27029
4ad11069f66d (hs-minor-mode-menu): Fix omission bug; was used but not declared.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 26989
diff changeset
347 (defvar hs-minor-mode-menu nil
4ad11069f66d (hs-minor-mode-menu): Fix omission bug; was used but not declared.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 26989
diff changeset
348 "Menu for hideshow minor mode.")
4ad11069f66d (hs-minor-mode-menu): Fix omission bug; was used but not declared.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 26989
diff changeset
349
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
350 (defvar hs-c-start-regexp nil
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
351 "Regexp for beginning of comments.
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
352 Differs from mode-specific comment regexps in that
17259
24a4fe3b0ae9 (hs-show-all, hs-safety-is-job-n): Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16774
diff changeset
353 surrounding whitespace is stripped.")
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
354
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
355 (defvar hs-block-start-regexp nil
17259
24a4fe3b0ae9 (hs-show-all, hs-safety-is-job-n): Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16774
diff changeset
356 "Regexp for beginning of block.")
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
357
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
358 (defvar hs-block-start-mdata-select nil
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
359 "Element in `hs-block-start-regexp' match data to consider as block start.
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
360 The internal function `hs-forward-sexp' moves point to the beginning of this
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
361 element (using `match-beginning') before calling `hs-forward-sexp-func'.")
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
362
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
363 (defvar hs-block-end-regexp nil
17259
24a4fe3b0ae9 (hs-show-all, hs-safety-is-job-n): Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16774
diff changeset
364 "Regexp for end of block.")
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
365
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
366 (defvar hs-forward-sexp-func 'forward-sexp
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
367 "Function used to do a `forward-sexp'.
17259
24a4fe3b0ae9 (hs-show-all, hs-safety-is-job-n): Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16774
diff changeset
368 Should change for Algol-ish modes. For single-character block
24a4fe3b0ae9 (hs-show-all, hs-safety-is-job-n): Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16774
diff changeset
369 delimiters -- ie, the syntax table regexp for the character is
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
370 either `(' or `)' -- `hs-forward-sexp-func' would just be
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
371 `forward-sexp'. For other modes such as simula, a more specialized
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
372 function is necessary.")
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
373
18016
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
374 (defvar hs-adjust-block-beginning nil
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
375 "Function used to tweak the block beginning.
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
376 The block is hidden from the position returned by this function,
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
377 as opposed to hiding it from the position returned when searching
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
378 for `hs-block-start-regexp'.
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
379
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
380 For example, in c-like modes, if we wish to also hide the curly braces
44448
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38980
diff changeset
381 \(if you think they occupy too much space on the screen), this function
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
382 should return the starting point (at the end of line) of the hidden
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
383 region.
18016
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
384
45320
886037f6f545 (hs-adjust-block-beginning): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 44448
diff changeset
385 It is called with a single argument ARG which is the position in
18016
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
386 buffer after the block beginning.
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
387
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
388 It should return the position from where we should start hiding.
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
389
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
390 It should not move the point.
18016
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
391
18093
1e53ce338e0d (hs-show-hidden-short-form): Updated doc string.
Richard M. Stallman <rms@gnu.org>
parents: 18070
diff changeset
392 See `hs-c-like-adjust-block-beginning' for an example of using this.")
17259
24a4fe3b0ae9 (hs-show-all, hs-safety-is-job-n): Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16774
diff changeset
393
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
394 (defvar hs-headline nil
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
395 "Text of the line where a hidden block begins, set during isearch.
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
396 You can display this in the mode line by adding the symbol `hs-headline'
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
397 to the variable `mode-line-format'. For example,
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
398
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
399 (unless (memq 'hs-headline mode-line-format)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
400 (setq mode-line-format
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
401 (append '(\"-\" hs-headline) mode-line-format)))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
402
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
403 Note that `mode-line-format' is buffer-local.")
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
404
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
405 ;;---------------------------------------------------------------------------
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
406 ;; system dependency
10841
88926963f1ae Clean up doc strings.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 10276
diff changeset
407
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
408 (defalias 'hs-match-data 'match-data)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
409
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
410 ;;---------------------------------------------------------------------------
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
411 ;; support functions
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
412
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
413 (defun hs-discard-overlays (from to)
27029
4ad11069f66d (hs-minor-mode-menu): Fix omission bug; was used but not declared.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 26989
diff changeset
414 "Delete hideshow overlays in region defined by FROM and TO."
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
415 (when (< to from)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
416 (setq from (prog1 to (setq to from))))
59080
7a200b643c16 Require `cl' when compiling.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59079
diff changeset
417 (dolist (ov (overlays-in from to))
7a200b643c16 Require `cl' when compiling.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59079
diff changeset
418 (when (overlay-get ov 'hs)
7a200b643c16 Require `cl' when compiling.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59079
diff changeset
419 (delete-overlay ov))))
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
420
59086
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
421 (defun hs-make-overlay (b e kind &optional b-offset e-offset)
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
422 "Return a new overlay in region defined by B and E with type KIND.
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
423 KIND is either `code' or `comment'. Optional fourth arg B-OFFSET
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
424 when added to B specifies the actual buffer position where the block
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
425 begins. Likewise for optional fifth arg E-OFFSET. If unspecified
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
426 they are taken to be 0 (zero). The following properties are set
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
427 in the overlay: 'invisible 'hs 'hs-b-offset 'hs-e-offset. Also,
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
428 depending on variable `hs-isearch-open', the following properties may
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
429 be present: 'isearch-open-invisible 'isearch-open-invisible-temporary.
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
430 If variable `hs-set-up-overlay' is non-nil it should specify a function
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
431 to call with the newly initialized overlay."
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
432 (unless b-offset (setq b-offset 0))
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
433 (unless e-offset (setq e-offset 0))
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
434 (let ((ov (make-overlay b e))
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
435 (io (if (eq 'block hs-isearch-open)
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
436 ;; backward compatibility -- `block'<=>`code'
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
437 'code
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
438 hs-isearch-open)))
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
439 (overlay-put ov 'invisible 'hs)
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
440 (overlay-put ov 'hs kind)
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
441 (overlay-put ov 'hs-b-offset b-offset)
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
442 (overlay-put ov 'hs-e-offset e-offset)
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
443 (when (or (eq io t) (eq io kind))
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
444 (overlay-put ov 'isearch-open-invisible 'hs-isearch-show)
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
445 (overlay-put ov 'isearch-open-invisible-temporary
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
446 'hs-isearch-show-temporary))
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
447 (when hs-set-up-overlay (funcall hs-set-up-overlay ov))
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
448 ov))
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
449
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
450 (defun hs-isearch-show (ov)
27029
4ad11069f66d (hs-minor-mode-menu): Fix omission bug; was used but not declared.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 26989
diff changeset
451 "Delete overlay OV, and set `hs-headline' to nil.
4ad11069f66d (hs-minor-mode-menu): Fix omission bug; was used but not declared.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 26989
diff changeset
452
4ad11069f66d (hs-minor-mode-menu): Fix omission bug; was used but not declared.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 26989
diff changeset
453 This function is meant to be used as the `isearch-open-invisible'
4ad11069f66d (hs-minor-mode-menu): Fix omission bug; was used but not declared.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 26989
diff changeset
454 property of an overlay."
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
455 (setq hs-headline nil)
27029
4ad11069f66d (hs-minor-mode-menu): Fix omission bug; was used but not declared.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 26989
diff changeset
456 (delete-overlay ov))
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
457
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
458 (defun hs-isearch-show-temporary (ov hide-p)
27029
4ad11069f66d (hs-minor-mode-menu): Fix omission bug; was used but not declared.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 26989
diff changeset
459 "Hide or show overlay OV, and set `hs-headline', all depending on HIDE-P.
4ad11069f66d (hs-minor-mode-menu): Fix omission bug; was used but not declared.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 26989
diff changeset
460 If HIDE-P is non-nil, `hs-headline' is set to nil and overlay OV is hidden.
4ad11069f66d (hs-minor-mode-menu): Fix omission bug; was used but not declared.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 26989
diff changeset
461 Otherwise, `hs-headline' is set to the line of text at the head of OV, and
4ad11069f66d (hs-minor-mode-menu): Fix omission bug; was used but not declared.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 26989
diff changeset
462 OV is shown.
4ad11069f66d (hs-minor-mode-menu): Fix omission bug; was used but not declared.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 26989
diff changeset
463
4ad11069f66d (hs-minor-mode-menu): Fix omission bug; was used but not declared.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 26989
diff changeset
464 This function is meant to be used as the `isearch-open-invisible-temporary'
4ad11069f66d (hs-minor-mode-menu): Fix omission bug; was used but not declared.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 26989
diff changeset
465 property of an overlay."
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
466 (setq hs-headline
59079
5070d12d24ad Untabify, reindent; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59075
diff changeset
467 (if hide-p
5070d12d24ad Untabify, reindent; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59075
diff changeset
468 nil
5070d12d24ad Untabify, reindent; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59075
diff changeset
469 (or hs-headline
5070d12d24ad Untabify, reindent; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59075
diff changeset
470 (let ((start (overlay-start ov)))
5070d12d24ad Untabify, reindent; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59075
diff changeset
471 (buffer-substring
5070d12d24ad Untabify, reindent; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59075
diff changeset
472 (save-excursion (goto-char start)
5070d12d24ad Untabify, reindent; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59075
diff changeset
473 (beginning-of-line)
5070d12d24ad Untabify, reindent; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59075
diff changeset
474 (skip-chars-forward " \t")
5070d12d24ad Untabify, reindent; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59075
diff changeset
475 (point))
5070d12d24ad Untabify, reindent; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59075
diff changeset
476 start)))))
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
477 (force-mode-line-update)
59086
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
478 ;; handle `display' property specially
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
479 (let (value)
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
480 (if hide-p
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
481 (when (setq value (overlay-get ov 'hs-isearch-display))
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
482 (overlay-put ov 'display value)
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
483 (overlay-put ov 'hs-isearch-display nil))
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
484 (when (setq value (overlay-get ov 'display))
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
485 (overlay-put ov 'hs-isearch-display value)
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
486 (overlay-put ov 'display nil))))
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
487 (overlay-put ov 'invisible (and hide-p 'hs)))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
488
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
489 (defun hs-forward-sexp (match-data arg)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
490 "Adjust point based on MATCH-DATA and call `hs-forward-sexp-func' w/ ARG.
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
491 Original match data is restored upon return."
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
492 (save-match-data
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
493 (set-match-data match-data)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
494 (goto-char (match-beginning hs-block-start-mdata-select))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
495 (funcall hs-forward-sexp-func arg)))
18237
69bb3a2c95b3 (hideshow): Added a :prefix.
Richard M. Stallman <rms@gnu.org>
parents: 18093
diff changeset
496
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
497 (defun hs-hide-comment-region (beg end &optional repos-end)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
498 "Hide a region from BEG to END, marking it as a comment.
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
499 Optional arg REPOS-END means reposition at end."
59086
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
500 (let ((beg-eol (progn (goto-char beg) (end-of-line) (point)))
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
501 (end-eol (progn (goto-char end) (end-of-line) (point))))
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
502 (hs-discard-overlays beg-eol end-eol)
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
503 (hs-make-overlay beg-eol end-eol 'comment beg end))
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
504 (goto-char (if repos-end end beg)))
17259
24a4fe3b0ae9 (hs-show-all, hs-safety-is-job-n): Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16774
diff changeset
505
18016
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
506 (defun hs-hide-block-at-point (&optional end comment-reg)
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
507 "Hide block iff on block beginning.
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
508 Optional arg END means reposition at end.
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
509 Optional arg COMMENT-REG is a list of the form (BEGIN END) and
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
510 specifies the limits of the comment, or nil if the block is not
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
511 a comment.
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
512
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
513 The block beginning is adjusted by `hs-adjust-block-beginning'
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
514 and then further adjusted to be at the end of the line."
18016
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
515 (if comment-reg
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
516 (hs-hide-comment-region (car comment-reg) (cadr comment-reg) end)
52873
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
517 (when (looking-at hs-block-start-regexp)
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
518 (let* ((mdata (hs-match-data t))
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
519 (pure-p (match-end 0))
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
520 (p
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
521 ;; `p' is the point at the end of the block beginning,
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
522 ;; which may need to be adjusted
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
523 (save-excursion
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
524 (goto-char (funcall (or hs-adjust-block-beginning
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
525 'identity)
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
526 pure-p))
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
527 ;; whatever the adjustment, we move to eol
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
528 (end-of-line)
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
529 (point)))
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
530 (q
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
531 ;; `q' is the point at the end of the block
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
532 (progn (hs-forward-sexp mdata 1)
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
533 (end-of-line)
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
534 (point))))
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
535 (when (and (< p (point)) (> (count-lines p q) 1))
59086
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
536 (hs-discard-overlays p q)
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
537 (hs-make-overlay p q 'code (- pure-p p)))
52873
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
538 (goto-char (if end q (min p pure-p)))))))
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
539
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
540 (defun hs-safety-is-job-n ()
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
541 "Warn if `buffer-invisibility-spec' does not contain symbol `hs'."
59079
5070d12d24ad Untabify, reindent; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59075
diff changeset
542 (unless (and (listp buffer-invisibility-spec)
5070d12d24ad Untabify, reindent; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59075
diff changeset
543 (assq 'hs buffer-invisibility-spec))
5070d12d24ad Untabify, reindent; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59075
diff changeset
544 (message "Warning: `buffer-invisibility-spec' does not contain hs!!")
5070d12d24ad Untabify, reindent; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59075
diff changeset
545 (sit-for 2)))
17259
24a4fe3b0ae9 (hs-show-all, hs-safety-is-job-n): Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16774
diff changeset
546
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
547 (defun hs-inside-comment-p ()
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
548 "Return non-nil if point is inside a comment, otherwise nil.
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
549 Actually, return a list containing the buffer position of the start
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
550 and the end of the comment. A comment block can be hidden only if on
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
551 its starting line there is only whitespace preceding the actual comment
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
552 beginning. If we are inside of a comment but this condition is not met,
18016
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
553 we return a list having a nil as its car and the end of comment position
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
554 as cdr."
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
555 (save-excursion
18016
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
556 ;; the idea is to look backwards for a comment start regexp, do a
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
557 ;; forward comment, and see if we are inside, then extend extend
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
558 ;; forward and backward as long as we have comments
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
559 (let ((q (point)))
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
560 (when (or (looking-at hs-c-start-regexp)
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
561 (re-search-backward hs-c-start-regexp (point-min) t))
59075
b449e405ed0d (hs-inside-comment-p): Fix omission bug:
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52873
diff changeset
562 ;; first get to the beginning of this comment...
b449e405ed0d (hs-inside-comment-p): Fix omission bug:
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52873
diff changeset
563 (while (and (not (bobp))
b449e405ed0d (hs-inside-comment-p): Fix omission bug:
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52873
diff changeset
564 (= (point) (progn (forward-comment -1) (point))))
b449e405ed0d (hs-inside-comment-p): Fix omission bug:
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52873
diff changeset
565 (forward-char -1))
b449e405ed0d (hs-inside-comment-p): Fix omission bug:
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52873
diff changeset
566 ;; ...then extend backwards
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
567 (forward-comment (- (buffer-size)))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
568 (skip-chars-forward " \t\n\f")
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
569 (let ((p (point))
59075
b449e405ed0d (hs-inside-comment-p): Fix omission bug:
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52873
diff changeset
570 (hidable t))
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
571 (beginning-of-line)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
572 (unless (looking-at (concat "[ \t]*" hs-c-start-regexp))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
573 ;; we are in this situation: (example)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
574 ;; (defun bar ()
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
575 ;; (foo)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
576 ;; ) ; comment
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
577 ;; ^
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
578 ;; the point was here before doing (beginning-of-line)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
579 ;; here we should advance till the next comment which
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
580 ;; eventually has only white spaces preceding it on the same
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
581 ;; line
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
582 (goto-char p)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
583 (forward-comment 1)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
584 (skip-chars-forward " \t\n\f")
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
585 (setq p (point))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
586 (while (and (< (point) q)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
587 (> (point) p)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
588 (not (looking-at hs-c-start-regexp)))
59079
5070d12d24ad Untabify, reindent; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59075
diff changeset
589 (setq p (point)) ;; use this to avoid an infinite cycle
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
590 (forward-comment 1)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
591 (skip-chars-forward " \t\n\f"))
52873
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
592 (when (or (not (looking-at hs-c-start-regexp))
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
593 (> (point) q))
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
594 ;; we cannot hide this comment block
59075
b449e405ed0d (hs-inside-comment-p): Fix omission bug:
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52873
diff changeset
595 (setq hidable nil)))
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
596 ;; goto the end of the comment
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
597 (forward-comment (buffer-size))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
598 (skip-chars-backward " \t\n\f")
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
599 (end-of-line)
52873
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
600 (when (>= (point) q)
59075
b449e405ed0d (hs-inside-comment-p): Fix omission bug:
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52873
diff changeset
601 (list (and hidable p) (point))))))))
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
602
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
603 (defun hs-grok-mode-type ()
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
604 "Set up hideshow variables for new buffers.
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
605 If `hs-special-modes-alist' has information associated with the
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
606 current buffer's major mode, use that.
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
607 Otherwise, guess start, end and `comment-start' regexps; `forward-sexp'
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
608 function; and adjust-block-beginning function."
23253
0d6c3732f9d2 (hs-grok-mode-type) Handle nil `comment-start' and `comment-end'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22445
diff changeset
609 (if (and (boundp 'comment-start)
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
610 (boundp 'comment-end)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
611 comment-start comment-end)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
612 (let* ((lookup (assoc major-mode hs-special-modes-alist))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
613 (start-elem (or (nth 1 lookup) "\\s(")))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
614 (if (listp start-elem)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
615 ;; handle (START-REGEXP MDATA-SELECT)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
616 (setq hs-block-start-regexp (car start-elem)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
617 hs-block-start-mdata-select (cadr start-elem))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
618 ;; backwards compatibility: handle simple START-REGEXP
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
619 (setq hs-block-start-regexp start-elem
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
620 hs-block-start-mdata-select 0))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
621 (setq hs-block-end-regexp (or (nth 2 lookup) "\\s)")
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
622 hs-c-start-regexp (or (nth 3 lookup)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
623 (let ((c-start-regexp
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
624 (regexp-quote comment-start)))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
625 (if (string-match " +$" c-start-regexp)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
626 (substring c-start-regexp
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
627 0 (1- (match-end 0)))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
628 c-start-regexp)))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
629 hs-forward-sexp-func (or (nth 4 lookup) 'forward-sexp)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
630 hs-adjust-block-beginning (nth 5 lookup)))
52873
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
631 (setq hs-minor-mode nil)
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
632 (error "%s Mode doesn't support Hideshow Minor Mode" mode-name)))
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
633
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
634 (defun hs-find-block-beginning ()
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
635 "Reposition point at block-start.
27029
4ad11069f66d (hs-minor-mode-menu): Fix omission bug; was used but not declared.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 26989
diff changeset
636 Return point, or nil if original point was not in a block."
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
637 (let ((done nil)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
638 (here (point)))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
639 ;; look if current line is block start
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
640 (if (looking-at hs-block-start-regexp)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
641 (point)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
642 ;; look backward for the start of a block that contains the cursor
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
643 (while (and (re-search-backward hs-block-start-regexp nil t)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
644 (not (setq done
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
645 (< here (save-excursion
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
646 (hs-forward-sexp (hs-match-data t) 1)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
647 (point)))))))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
648 (if done
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
649 (point)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
650 (goto-char here)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
651 nil))))
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
652
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
653 (defun hs-hide-level-recursive (arg minp maxp)
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
654 "Recursively hide blocks ARG levels below point in region (MINP MAXP)."
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
655 (when (hs-find-block-beginning)
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
656 (setq minp (1+ (point)))
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
657 (funcall hs-forward-sexp-func 1)
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
658 (setq maxp (1- (point))))
59086
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
659 (hs-discard-overlays minp maxp) ; eliminate weirdness
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
660 (goto-char minp)
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
661 (while (progn
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
662 (forward-comment (buffer-size))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
663 (and (< (point) maxp)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
664 (re-search-forward hs-block-start-regexp maxp t)))
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
665 (if (> arg 1)
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
666 (hs-hide-level-recursive (1- arg) minp maxp)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
667 (goto-char (match-beginning hs-block-start-mdata-select))
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
668 (hs-hide-block-at-point t)))
59079
5070d12d24ad Untabify, reindent; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59075
diff changeset
669 (hs-safety-is-job-n)
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
670 (goto-char maxp))
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
671
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
672 (defmacro hs-life-goes-on (&rest body)
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
673 "Evaluate BODY forms iff variable `hs-minor-mode' is non-nil.
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
674 In the dynamic context of this macro, `inhibit-point-motion-hooks'
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
675 and `case-fold-search' are both t."
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
676 `(when hs-minor-mode
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
677 (let ((inhibit-point-motion-hooks t)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
678 (case-fold-search t))
22109
3e53877b4a08 (hs-life-goes-on): Use Emacs' native backquote support.
Dan Nicolaescu <done@ece.arizona.edu>
parents: 20820
diff changeset
679 ,@body)))
3e53877b4a08 (hs-life-goes-on): Use Emacs' native backquote support.
Dan Nicolaescu <done@ece.arizona.edu>
parents: 20820
diff changeset
680
18867
b6e4c4c2a3ef (hs-special-modes-alist): Use a regexp generated by regexp-opt.
Richard M. Stallman <rms@gnu.org>
parents: 18428
diff changeset
681 (put 'hs-life-goes-on 'edebug-form-spec '(&rest form))
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
682
17259
24a4fe3b0ae9 (hs-show-all, hs-safety-is-job-n): Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16774
diff changeset
683 (defun hs-already-hidden-p ()
18016
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
684 "Return non-nil if point is in an already-hidden block, otherwise nil."
17259
24a4fe3b0ae9 (hs-show-all, hs-safety-is-job-n): Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16774
diff changeset
685 (save-excursion
18016
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
686 (let ((c-reg (hs-inside-comment-p)))
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
687 (if (and c-reg (nth 0 c-reg))
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
688 ;; point is inside a comment, and that comment is hidable
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
689 (goto-char (nth 0 c-reg))
52873
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
690 (when (and (not c-reg)
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
691 (hs-find-block-beginning)
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
692 (looking-at hs-block-start-regexp))
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
693 ;; point is inside a block
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
694 (goto-char (match-end 0)))))
17259
24a4fe3b0ae9 (hs-show-all, hs-safety-is-job-n): Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16774
diff changeset
695 (end-of-line)
24a4fe3b0ae9 (hs-show-all, hs-safety-is-job-n): Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16774
diff changeset
696 (let ((overlays (overlays-at (point)))
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
697 (found nil))
17259
24a4fe3b0ae9 (hs-show-all, hs-safety-is-job-n): Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16774
diff changeset
698 (while (and (not found) (overlayp (car overlays)))
59079
5070d12d24ad Untabify, reindent; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59075
diff changeset
699 (setq found (overlay-get (car overlays) 'hs)
5070d12d24ad Untabify, reindent; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59075
diff changeset
700 overlays (cdr overlays)))
17259
24a4fe3b0ae9 (hs-show-all, hs-safety-is-job-n): Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16774
diff changeset
701 found)))
24a4fe3b0ae9 (hs-show-all, hs-safety-is-job-n): Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16774
diff changeset
702
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
703 (defun hs-c-like-adjust-block-beginning (initial)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
704 "Adjust INITIAL, the buffer position after `hs-block-start-regexp'.
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
705 Actually, point is never moved; a new position is returned that is
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
706 the end of the C-function header. This adjustment function is meant
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
707 to be assigned to `hs-adjust-block-beginning' for C-like modes."
18016
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
708 (save-excursion
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
709 (goto-char (1- initial))
18016
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
710 (forward-comment (- (buffer-size)))
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
711 (point)))
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
712
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
713 ;;---------------------------------------------------------------------------
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
714 ;; commands
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
715
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
716 (defun hs-hide-all ()
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
717 "Hide all top level blocks, displaying only first and last lines.
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
718 Move point to the beginning of the line, and run the normal hook
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
719 `hs-hide-hook'. See documentation for `run-hooks'.
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
720 If `hs-hide-comments-when-hiding-all' is non-nil, also hide the comments."
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
721 (interactive)
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
722 (hs-life-goes-on
17259
24a4fe3b0ae9 (hs-show-all, hs-safety-is-job-n): Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16774
diff changeset
723 (message "Hiding all blocks ...")
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
724 (save-excursion
59086
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
725 (hs-discard-overlays (point-min) (point-max)) ; eliminate weirdness
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
726 (goto-char (point-min))
31856
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
727 (let ((count 0)
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
728 (re (concat "\\("
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
729 hs-block-start-regexp
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
730 "\\)"
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
731 (if hs-hide-comments-when-hiding-all
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
732 (concat "\\|\\("
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
733 hs-c-start-regexp
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
734 "\\)")
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
735 ""))))
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
736 (while (progn
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
737 (unless hs-hide-comments-when-hiding-all
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
738 (forward-comment (point-max)))
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
739 (re-search-forward re (point-max) t))
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
740 (if (match-beginning 1)
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
741 ;; we have found a block beginning
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
742 (progn
31856
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
743 (goto-char (match-beginning 1))
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
744 (if hs-hide-all-non-comment-function
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
745 (funcall hs-hide-all-non-comment-function)
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
746 (hs-hide-block-at-point t)))
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
747 ;; found a comment, probably
59079
5070d12d24ad Untabify, reindent; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59075
diff changeset
748 (let ((c-reg (hs-inside-comment-p))) ; blech!
31856
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
749 (when (and c-reg (car c-reg))
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
750 (if (> (count-lines (car c-reg) (nth 1 c-reg)) 1)
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
751 (hs-hide-block-at-point t c-reg)
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
752 (goto-char (nth 1 c-reg))))))
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
753 (message "Hiding ... %d" (setq count (1+ count)))))
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
754 (hs-safety-is-job-n))
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
755 (beginning-of-line)
17259
24a4fe3b0ae9 (hs-show-all, hs-safety-is-job-n): Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16774
diff changeset
756 (message "Hiding all blocks ... done")
14151
1087acbd29d7 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 13957
diff changeset
757 (run-hooks 'hs-hide-hook)))
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
758
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
759 (defun hs-show-all ()
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
760 "Show everything then run `hs-show-hook'. See `run-hooks'."
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
761 (interactive)
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
762 (hs-life-goes-on
17259
24a4fe3b0ae9 (hs-show-all, hs-safety-is-job-n): Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16774
diff changeset
763 (message "Showing all blocks ...")
59086
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
764 (hs-discard-overlays (point-min) (point-max))
17259
24a4fe3b0ae9 (hs-show-all, hs-safety-is-job-n): Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16774
diff changeset
765 (message "Showing all blocks ... done")
14151
1087acbd29d7 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 13957
diff changeset
766 (run-hooks 'hs-show-hook)))
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
767
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
768 (defun hs-hide-block (&optional end)
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
769 "Select a block and hide it. With prefix arg, reposition at END.
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
770 Upon completion, point is repositioned and the normal hook
17259
24a4fe3b0ae9 (hs-show-all, hs-safety-is-job-n): Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16774
diff changeset
771 `hs-hide-hook' is run. See documentation for `run-hooks'."
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
772 (interactive "P")
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
773 (hs-life-goes-on
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
774 (let ((c-reg (hs-inside-comment-p)))
18016
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
775 (cond
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
776 ((and c-reg (or (null (nth 0 c-reg))
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
777 (<= (count-lines (car c-reg) (nth 1 c-reg)) 1)))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
778 (message "(not enough comment lines to hide)"))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
779 ((or c-reg
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
780 (looking-at hs-block-start-regexp)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
781 (hs-find-block-beginning))
18016
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
782 (hs-hide-block-at-point end c-reg)
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
783 (hs-safety-is-job-n)
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
784 (run-hooks 'hs-hide-hook))))))
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
785
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
786 (defun hs-show-block (&optional end)
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
787 "Select a block and show it.
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
788 With prefix arg, reposition at END. Upon completion, point is
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
789 repositioned and the normal hook `hs-show-hook' is run.
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
790 See documentation for functions `hs-hide-block' and `run-hooks'."
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
791 (interactive "P")
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
792 (hs-life-goes-on
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
793 (or
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
794 ;; first see if we have something at the end of the line
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
795 (catch 'eol-begins-hidden-region-p
59080
7a200b643c16 Require `cl' when compiling.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59079
diff changeset
796 (let ((here (point)))
7a200b643c16 Require `cl' when compiling.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59079
diff changeset
797 (dolist (ov (save-excursion (end-of-line) (overlays-at (point))))
7a200b643c16 Require `cl' when compiling.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59079
diff changeset
798 (when (overlay-get ov 'hs)
7a200b643c16 Require `cl' when compiling.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59079
diff changeset
799 (goto-char
7a200b643c16 Require `cl' when compiling.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59079
diff changeset
800 (cond (end (overlay-end ov))
7a200b643c16 Require `cl' when compiling.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59079
diff changeset
801 ((eq 'comment (overlay-get ov 'hs)) here)
59086
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
802 (t (+ (overlay-start ov) (overlay-get ov 'hs-b-offset)))))
59080
7a200b643c16 Require `cl' when compiling.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59079
diff changeset
803 (delete-overlay ov)
7a200b643c16 Require `cl' when compiling.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59079
diff changeset
804 (throw 'eol-begins-hidden-region-p t)))
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
805 nil))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
806 ;; not immediately obvious, look for a suitable block
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
807 (let ((c-reg (hs-inside-comment-p))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
808 p q)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
809 (cond (c-reg
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
810 (when (car c-reg)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
811 (setq p (car c-reg)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
812 q (cadr c-reg))))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
813 ((and (hs-find-block-beginning)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
814 (looking-at hs-block-start-regexp)) ; fresh match-data, ugh
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
815 (setq p (point)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
816 q (progn (hs-forward-sexp (hs-match-data t) 1) (point)))))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
817 (when (and p q)
59086
e7bb1a144715 (hs-set-up-overlay): New user var.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59080
diff changeset
818 (hs-discard-overlays p q)
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
819 (goto-char (if end q (1+ p)))))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
820 (hs-safety-is-job-n)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
821 (run-hooks 'hs-show-hook))))
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
822
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
823 (defun hs-hide-level (arg)
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
824 "Hide all blocks ARG levels below this block.
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
825 The hook `hs-hide-hook' is run; see `run-hooks'."
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
826 (interactive "p")
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
827 (hs-life-goes-on
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
828 (save-excursion
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
829 (message "Hiding blocks ...")
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
830 (hs-hide-level-recursive arg (point-min) (point-max))
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
831 (message "Hiding blocks ... done"))
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
832 (hs-safety-is-job-n)
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
833 (run-hooks 'hs-hide-hook)))
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
834
27771
9d04cc14a320 (hs-flag-region): No longer use `intangible' overlay property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 27183
diff changeset
835 (defun hs-toggle-hiding ()
9d04cc14a320 (hs-flag-region): No longer use `intangible' overlay property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 27183
diff changeset
836 "Toggle hiding/showing of a block.
9d04cc14a320 (hs-flag-region): No longer use `intangible' overlay property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 27183
diff changeset
837 See `hs-hide-block' and `hs-show-block'."
9d04cc14a320 (hs-flag-region): No longer use `intangible' overlay property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 27183
diff changeset
838 (interactive)
9d04cc14a320 (hs-flag-region): No longer use `intangible' overlay property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 27183
diff changeset
839 (hs-life-goes-on
9d04cc14a320 (hs-flag-region): No longer use `intangible' overlay property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 27183
diff changeset
840 (if (hs-already-hidden-p)
9d04cc14a320 (hs-flag-region): No longer use `intangible' overlay property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 27183
diff changeset
841 (hs-show-block)
9d04cc14a320 (hs-flag-region): No longer use `intangible' overlay property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 27183
diff changeset
842 (hs-hide-block))))
9d04cc14a320 (hs-flag-region): No longer use `intangible' overlay property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 27183
diff changeset
843
17259
24a4fe3b0ae9 (hs-show-all, hs-safety-is-job-n): Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16774
diff changeset
844 (defun hs-mouse-toggle-hiding (e)
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
845 "Toggle hiding/showing of a block.
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
846 This command should be bound to a mouse key.
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
847 Argument E is a mouse event used by `mouse-set-point'.
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
848 See `hs-hide-block' and `hs-show-block'."
17259
24a4fe3b0ae9 (hs-show-all, hs-safety-is-job-n): Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16774
diff changeset
849 (interactive "@e")
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
850 (hs-life-goes-on
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
851 (mouse-set-point e)
27771
9d04cc14a320 (hs-flag-region): No longer use `intangible' overlay property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 27183
diff changeset
852 (hs-toggle-hiding)))
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
853
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
854 (defun hs-hide-initial-comment-block ()
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
855 "Hide the first block of comments in a file.
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
856 This can be useful if you have huge RCS logs in those comments."
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
857 (interactive)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
858 (hs-life-goes-on
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
859 (let ((c-reg (save-excursion
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
860 (goto-char (point-min))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
861 (skip-chars-forward " \t\n\f")
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
862 (hs-inside-comment-p))))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
863 (when c-reg
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
864 (let ((beg (car c-reg)) (end (cadr c-reg)))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
865 ;; see if we have enough comment lines to hide
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
866 (when (> (count-lines beg end) 1)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
867 (hs-hide-comment-region beg end)))))))
17259
24a4fe3b0ae9 (hs-show-all, hs-safety-is-job-n): Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16774
diff changeset
868
24a4fe3b0ae9 (hs-show-all, hs-safety-is-job-n): Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16774
diff changeset
869 ;;;###autoload
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
870 (defun hs-minor-mode (&optional arg)
10841
88926963f1ae Clean up doc strings.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 10276
diff changeset
871 "Toggle hideshow minor mode.
88926963f1ae Clean up doc strings.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 10276
diff changeset
872 With ARG, turn hideshow minor mode on if ARG is positive, off otherwise.
88926963f1ae Clean up doc strings.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 10276
diff changeset
873 When hideshow minor mode is on, the menu bar is augmented with hideshow
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
874 commands and the hideshow commands are enabled.
18016
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
875 The value '(hs . t) is added to `buffer-invisibility-spec'.
14151
1087acbd29d7 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 13957
diff changeset
876
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
877 The main commands are: `hs-hide-all', `hs-show-all', `hs-hide-block',
31856
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
878 `hs-show-block', `hs-hide-level' and `hs-toggle-hiding'. There is also
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
879 `hs-hide-initial-comment-block' and `hs-mouse-toggle-hiding'.
18016
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
880
10841
88926963f1ae Clean up doc strings.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 10276
diff changeset
881 Turning hideshow minor mode off reverts the menu bar and the
18016
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
882 variables to default values and disables the hideshow commands.
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
883
27771
9d04cc14a320 (hs-flag-region): No longer use `intangible' overlay property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 27183
diff changeset
884 Lastly, the normal hook `hs-minor-mode-hook' is run using `run-hooks'.
9d04cc14a320 (hs-flag-region): No longer use `intangible' overlay property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 27183
diff changeset
885
18016
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
886 Key bindings:
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
887 \\{hs-minor-mode-map}"
22cbed2e6098 (hs-special-modes-alist): Include also the
Richard M. Stallman <rms@gnu.org>
parents: 17270
diff changeset
888
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
889 (interactive "P")
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
890 (setq hs-headline nil
59079
5070d12d24ad Untabify, reindent; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59075
diff changeset
891 hs-minor-mode (if (null arg)
5070d12d24ad Untabify, reindent; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59075
diff changeset
892 (not hs-minor-mode)
5070d12d24ad Untabify, reindent; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59075
diff changeset
893 (> (prefix-numeric-value arg) 0)))
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
894 (if hs-minor-mode
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
895 (progn
27771
9d04cc14a320 (hs-flag-region): No longer use `intangible' overlay property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 27183
diff changeset
896 (hs-grok-mode-type)
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
897 (easy-menu-add hs-minor-mode-menu)
38419
6dd037b0146e (hs-minor-mode): Use make-local-variable.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38193
diff changeset
898 (set (make-local-variable 'line-move-ignore-invisible) t)
27771
9d04cc14a320 (hs-flag-region): No longer use `intangible' overlay property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 27183
diff changeset
899 (add-to-invisibility-spec '(hs . t)))
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
900 (easy-menu-remove hs-minor-mode-menu)
27771
9d04cc14a320 (hs-flag-region): No longer use `intangible' overlay property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 27183
diff changeset
901 (remove-from-invisibility-spec '(hs . t)))
9d04cc14a320 (hs-flag-region): No longer use `intangible' overlay property.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 27183
diff changeset
902 (run-hooks 'hs-minor-mode-hook))
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
903
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
904 ;;---------------------------------------------------------------------------
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
905 ;; load-time actions
10841
88926963f1ae Clean up doc strings.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 10276
diff changeset
906
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
907 ;; keymaps and menus
52873
2f6d31064afd Rewrite one-armed `if'
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52666
diff changeset
908 (unless hs-minor-mode-map
17259
24a4fe3b0ae9 (hs-show-all, hs-safety-is-job-n): Fix messages.
Richard M. Stallman <rms@gnu.org>
parents: 16774
diff changeset
909 (setq hs-minor-mode-map (make-sparse-keymap))
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
910 (easy-menu-define hs-minor-mode-menu
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
911 hs-minor-mode-map
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
912 "Menu used when hideshow minor mode is active."
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
913 (cons "Hide/Show"
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
914 (mapcar
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
915 ;; Interpret each table entry as follows: first, populate keymap
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
916 ;; with elements 2 and 1; then, for easymenu, use entry directly
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
917 ;; unless element 0 is nil, in which case the entry is "omitted".
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
918 (lambda (ent)
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
919 (define-key hs-minor-mode-map (aref ent 2) (aref ent 1))
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
920 (if (aref ent 0) ent "-----"))
31856
0a0adbc72d2f Update author email address.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 30429
diff changeset
921 ;; These bindings roughly imitate those used by Outline mode.
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
922 ;; menu entry command key
36784
04b49d665787 Update copyright.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 31856
diff changeset
923 '(["Hide Block" hs-hide-block "\C-c@\C-h"]
04b49d665787 Update copyright.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 31856
diff changeset
924 ["Show Block" hs-show-block "\C-c@\C-s"]
04b49d665787 Update copyright.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 31856
diff changeset
925 ["Hide All" hs-hide-all "\C-c@\C-\M-h"]
04b49d665787 Update copyright.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 31856
diff changeset
926 ["Show All" hs-show-all "\C-c@\C-\M-s"]
04b49d665787 Update copyright.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 31856
diff changeset
927 ["Hide Level" hs-hide-level "\C-c@\C-l"]
04b49d665787 Update copyright.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 31856
diff changeset
928 ["Toggle Hiding" hs-toggle-hiding "\C-c@\C-c"]
38193
715aab816884 (hs-minor-mode-map): Use mouse-2, not button-2, when binding
Richard M. Stallman <rms@gnu.org>
parents: 37892
diff changeset
929 [nil hs-mouse-toggle-hiding [(shift mouse-2)]]
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
930 )))))
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
931
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
932 ;; some housekeeping
59080
7a200b643c16 Require `cl' when compiling.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59079
diff changeset
933 (add-to-list 'minor-mode-map-alist (cons 'hs-minor-mode hs-minor-mode-map))
7a200b643c16 Require `cl' when compiling.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59079
diff changeset
934 (add-to-list 'minor-mode-alist '(hs-minor-mode " hs") t)
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
935
22444
977318751daa Require `easymenu'. Rework to use easymenu. Remove eol ws.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 22109
diff changeset
936 ;; make some variables permanently buffer-local
59080
7a200b643c16 Require `cl' when compiling.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59079
diff changeset
937 (dolist (var '(hs-minor-mode
7a200b643c16 Require `cl' when compiling.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59079
diff changeset
938 hs-c-start-regexp
7a200b643c16 Require `cl' when compiling.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59079
diff changeset
939 hs-block-start-regexp
7a200b643c16 Require `cl' when compiling.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59079
diff changeset
940 hs-block-start-mdata-select
7a200b643c16 Require `cl' when compiling.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59079
diff changeset
941 hs-block-end-regexp
7a200b643c16 Require `cl' when compiling.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59079
diff changeset
942 hs-forward-sexp-func
7a200b643c16 Require `cl' when compiling.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59079
diff changeset
943 hs-adjust-block-beginning))
7a200b643c16 Require `cl' when compiling.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59079
diff changeset
944 (make-variable-buffer-local var)
7a200b643c16 Require `cl' when compiling.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 59079
diff changeset
945 (put var 'permanent-local t))
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
946
26989
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
947 ;;---------------------------------------------------------------------------
340ed24f202a Generally, synch w/ maintainer version 5.9.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 23368
diff changeset
948 ;; that's it
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
949
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
950 (provide 'hideshow)
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
951
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52021
diff changeset
952 ;;; arch-tag: 378b6852-e82a-466a-aee8-d9c73859a65e
10276
86c61b6bd265 Initial revision
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
diff changeset
953 ;;; hideshow.el ends here