annotate lisp/elide-head.el @ 26370:5f52cc1417ab

Use block statements in cases and declare v1 and v2 locally there. Rearrange case statements so that thos most frequently executed come first. Avoid goto's in frequently executed cases.
author Gerd Moellmann <gerd@gnu.org>
date Sun, 07 Nov 1999 13:06:59 +0000
parents 983ad33e1d97
children 61f2605f9e41
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
26151
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
1 ;;; elid-head.el --- hide headers in files
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
2
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
3 ;; Copyright (C) 1999 Free Software Foundation, Inc.
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
4
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
5 ;; Author: Dave Love <fx@gnu.org>
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
6 ;; Keywords: outlines tools
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
7
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
9
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
13 ;; any later version.
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
14
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
18 ;; GNU General Public License for more details.
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
19
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
23 ;; Boston, MA 02111-1307, USA.
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
24
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
25 ;;; Commentary:
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
26
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
27 ;; Functionality for eliding boilerplate text (normally copyright
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
28 ;; notices) in file headers to avoid clutter when you know what it
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
29 ;; says.
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
30 ;;
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
31 ;; `elide-head-headers-to-hide' controls what is elided by the command
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
32 ;; `elide-head'. A buffer-local invisible overlay manages the
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
33 ;; elision.
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
34
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
35 ;; Please don't turn this on in site init files so that information
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
36 ;; isn't hidden from users who may not know what it says.
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
37
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
38 ;; Inspired by jwz's hide-copyleft.el, for which we don't have an
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
39 ;; assignment.
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
40
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
41 ;;; Code:
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
42
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
43 (defgroup elide-head nil
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
44 "Eliding copyright headers and the like in source files."
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
45 :prefix "elide-head"
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
46 :group 'tools)
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
47
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
48 (defcustom elide-head-headers-to-hide
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
49 '(("is free software; you can redistribute it" . ; GNU boilerplate
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
50 "Boston, MA 02111-1307, USA\\.")
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
51 ("The Regents of the University of California\\. All rights reserved\\." .
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
52 "SUCH DAMAGE\\.") ; BSD
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
53 ("Permission is hereby granted, free of charge" . ; X11
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
54 "authorization from the X Consortium\\."))
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
55 "Alist of regexps defining start end end of text to elide.
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
56
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
57 The cars of elements of the list are searched for in order. Text is
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
58 elided with an invisible overlay from the end of the line where the
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
59 first match is found to the end of the match for the corresponding
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
60 cdr."
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
61 :group 'elide-head
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
62 :type '(alist :key-type (string :tag "Start regexp")
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
63 :value-type (string :tag "End regexp")))
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
64
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
65 (defvar elide-head-overlay nil)
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
66 (make-variable-buffer-local 'elide-head-overlay)
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
67
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
68 ;;;###autoload
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
69 (defun elide-head (&optional arg)
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
70 "Hide header material in buffer according to `elide-head-headers-to-hide'.
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
71
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
72 The header is made invisible with an overlay. With a prefix arg, show
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
73 an elided material again.
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
74
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
75 This is suitable as an entry on `find-file-hooks' or appropriate mode hooks."
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
76 (interactive "P")
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
77 (if arg
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
78 (elide-head-show)
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
79 (save-excursion
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
80 (save-restriction
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
81 (let ((rest elide-head-headers-to-hide)
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
82 beg end)
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
83 (widen)
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
84 (goto-char (point-min))
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
85 (while rest
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
86 (save-excursion
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
87 (when (re-search-forward (caar rest) nil t)
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
88 (setq beg (point))
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
89 (when (re-search-forward (cdar rest) nil t)
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
90 (setq end (point)
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
91 rest nil))))
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
92 (if rest (setq rest (cdr rest))))
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
93 (if (not (and beg end))
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
94 (if (interactive-p)
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
95 (error "No header found"))
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
96 (goto-char beg)
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
97 (end-of-line)
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
98 (if (overlayp elide-head-overlay)
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
99 (move-overlay elide-head-overlay (point) end)
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
100 (setq elide-head-overlay (make-overlay (point) end)))
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
101 (overlay-put elide-head-overlay 'invisible t)
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
102 (overlay-put elide-head-overlay 'intangible t)
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
103 (overlay-put elide-head-overlay 'after-string "...")))))))
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
104
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
105 (defun elide-head-show ()
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
106 "Show a header elided current buffer by \\[elide-head]."
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
107 (interactive)
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
108 (if (and (overlayp elide-head-overlay)
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
109 (overlay-buffer elide-head-overlay))
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
110 (delete-overlay elide-head-overlay)
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
111 (if (interactive-p)
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
112 (error "No header hidden"))))
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
113
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
114 (provide 'elide-head)
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
115
983ad33e1d97 *** empty log message ***
Dave Love <fx@gnu.org>
parents:
diff changeset
116 ;;; elide-head.el ends here