annotate lisp/reveal.el @ 59384:a1edc5959dcf

* macfns.c: Include sys/param.h. [TARGET_API_MAC_CARBON] (mac_nav_event_callback): New declaration and function. [TARGET_API_MAC_CARBON] (Fx_file_dialog): Use MAXPATHLEN for size of filename string. Set event callback function when creating dialog boxes. Add code conversions for filenames. Don't dispose apple event descriptor record if failed to create it. * macterm.c: Include sys/param.h. [USE_CARBON_EVENTS] (mac_handle_window_event): Add handler for kEventWindowUpdate. (install_window_handler) [USE_CARBON_EVENTS]: Register it. (do_ae_open_documents) [TARGET_API_MAC_CARBON]: Get FSRef instead of FSSpec from apple event descriptor record. (do_ae_open_documents) [TARGET_API_MAC_CARBON]: Use MAXPATHLEN for size of filename string. [TARGET_API_MAC_CARBON] (mac_do_receive_drag): Likewise. [TARGET_API_MAC_CARBON] (mac_do_receive_drag): Return error when a file dialog is in action. [TARGET_API_MAC_CARBON] (mac_do_track_drag): Likewise. Reject only when there are no filename items. Set background color before (un)highlighting the window below the dragged items. (XTread_socket) [!USE_CARBON_EVENTS]: Don't call do_window_update.
author Steven Tamm <steventamm@mac.com>
date Thu, 06 Jan 2005 02:53:39 +0000
parents 180297c18beb
children f3c5c717aa02 f2ebccfa87d4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
41621
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1 ;;; reveal.el --- Automatically reveal hidden text at point
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2
57816
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
3 ;; Copyright (C) 2000, 2001, 2004 Free Software Foundation, Inc.
41621
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
4
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
5 ;; Author: Stefan Monnier <monnier@cs.yale.edu>
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
6 ;; Keywords: outlines
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
7
42320
44b4a14ae7fc Fix Lisp headers.
Pavel Janík <Pavel@Janik.cz>
parents: 41778
diff changeset
8 ;; This file is part of GNU Emacs.
44b4a14ae7fc Fix Lisp headers.
Pavel Janík <Pavel@Janik.cz>
parents: 41778
diff changeset
9
45340
a0cc96a3bf71 Fix the preamble comments.
Eli Zaretskii <eliz@gnu.org>
parents: 42320
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
41621
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
13 ;; any later version.
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
14
45341
1471d94c6f8a More preamble fixes.
Eli Zaretskii <eliz@gnu.org>
parents: 45340
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
41621
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
18 ;; GNU General Public License for more details.
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
19
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
22 ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
23 ;; Boston, MA 02111-1307, USA.
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
24
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
25 ;;; Commentary:
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
26
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
27 ;; Reveal mode is a minor mode that makes sure that text around point
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
28 ;; is always visible. When point enters a region of hidden text,
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
29 ;; `reveal-mode' temporarily makes it visible.
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
30 ;;
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
31 ;; This is normally used in conjunction with `outline-minor-mode',
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
32 ;; `hs-minor-mode', `hide-ifdef-mode', ...
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
33 ;;
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
34 ;; It only works with packages that hide text using overlays.
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
35 ;; Packages can provide special support for it by placing
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
36 ;; a function in the `reveal-toggle-invisible' property on the symbol
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
37 ;; used as the value of the `invisible' overlay property.
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
38 ;; The function is called right after revealing (or re-hiding) the
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
39 ;; text with two arguments: the overlay and a boolean that's non-nil
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
40 ;; if we have just revealed the text. When revealing, that function
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
41 ;; may re-hide some of the text.
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
42
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
43 ;;; Todo:
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
44
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
45 ;; - find other hysteresis features.
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
46
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
47 ;;; Code:
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
48
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
49 (require 'pcvs-util)
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
50
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
51 (defgroup reveal nil
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
52 "Reveal hidden text on the fly."
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
53 :group 'editing)
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
54
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
55 (defcustom reveal-around-mark t
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
56 "Reveal text around the mark, if active."
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
57 :type 'boolean)
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
58
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
59 (defvar reveal-open-spots nil)
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
60 (make-variable-buffer-local 'reveal-open-spots)
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
61
57816
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
62 (defvar reveal-last-tick nil)
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
63 (make-variable-buffer-local 'reveal-last-tick)
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
64
41621
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
65 ;; Actual code
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
66
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
67 (defun reveal-post-command ()
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
68 ;; Refresh the spots that might have changed.
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
69 ;; `Refreshing' here means to try and re-hide the corresponding text.
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
70 ;; We don't refresh everything correctly:
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
71 ;; - we only refresh spots in the current window.
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
72 ;; FIXME: do we actually know that (current-buffer) = (window-buffer) ?
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
73 (with-local-quit
45428
ac7e0cc03aed (reveal-post-command): Reverse the semantics of
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45341
diff changeset
74 (condition-case err
41621
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
75 (let* ((spots (cvs-partition
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
76 (lambda (x)
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
77 ;; We refresh any spot in the current window as well
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
78 ;; as any spots associated with a dead window or a window
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
79 ;; which does not show this buffer any more.
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
80 (or (eq (car x) (selected-window))
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
81 (not (window-live-p (car x)))
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
82 (not (eq (window-buffer (car x))
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
83 (current-buffer)))))
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
84 reveal-open-spots))
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
85 (old-ols (mapcar 'cdr (car spots)))
45428
ac7e0cc03aed (reveal-post-command): Reverse the semantics of
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45341
diff changeset
86 (repeat t))
41621
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
87 (setq reveal-open-spots (cdr spots))
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
88 ;; Open new overlays.
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
89 (while repeat
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
90 (setq repeat nil)
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
91 (dolist (ol (nconc (when (and reveal-around-mark mark-active)
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
92 (overlays-at (mark)))
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
93 (overlays-at (point))))
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
94 (push (cons (selected-window) ol) reveal-open-spots)
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
95 (setq old-ols (delq ol old-ols))
57816
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
96 (let ((open (overlay-get ol 'reveal-toggle-invisible)) inv)
45428
ac7e0cc03aed (reveal-post-command): Reverse the semantics of
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45341
diff changeset
97 (when (or open
57816
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
98 (and (setq inv (overlay-get ol 'invisible))
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
99 (symbolp inv)
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
100 (or (setq open (or (get inv 'reveal-toggle-invisible)
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
101 (overlay-get ol 'isearch-open-invisible-temporary)))
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
102 (overlay-get ol 'isearch-open-invisible)
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
103 (and (consp buffer-invisibility-spec)
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
104 (assq inv buffer-invisibility-spec)))
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
105 (overlay-put ol 'reveal-invisible inv)))
45428
ac7e0cc03aed (reveal-post-command): Reverse the semantics of
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45341
diff changeset
106 (if (null open)
ac7e0cc03aed (reveal-post-command): Reverse the semantics of
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45341
diff changeset
107 (overlay-put ol 'invisible nil)
41621
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
108 ;; Use the provided opening function and repeat (since the
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
109 ;; opening function might have hidden a subpart around point).
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
110 (setq repeat t)
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
111 (condition-case err
45428
ac7e0cc03aed (reveal-post-command): Reverse the semantics of
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 45341
diff changeset
112 (funcall open ol nil)
50384
09ec24acd6a5 (reveal-post-command): Remove buggy debugging code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50374
diff changeset
113 (error (message "!!Reveal-show: %s !!" err)
50374
73660951a233 (reveal-post-command): Better error handling and debugging.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48399
diff changeset
114 ;; Let's default to a meaningful behavior to avoid
73660951a233 (reveal-post-command): Better error handling and debugging.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48399
diff changeset
115 ;; getting stuck in an infinite loop.
50384
09ec24acd6a5 (reveal-post-command): Remove buggy debugging code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50374
diff changeset
116 (setq repeat nil)
50374
73660951a233 (reveal-post-command): Better error handling and debugging.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48399
diff changeset
117 (overlay-put ol 'invisible nil))))))))
41621
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
118 ;; Close old overlays.
57816
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
119 (if (not (eq reveal-last-tick
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
120 (setq reveal-last-tick (buffer-modified-tick))))
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
121 ;; The buffer was modified since last command: let's refrain from
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
122 ;; closing any overlay because it tends to behave poorly when
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
123 ;; inserting text at the end of an overlay (basically the overlay
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
124 ;; should be rear-advance when it's open, but things like
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
125 ;; outline-minor-mode make it non-rear-advance because it's
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
126 ;; a better choice when it's closed).
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
127 (dolist (ol old-ols)
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
128 (push (cons (selected-window) ol) reveal-open-spots))
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
129 ;; The last command was only a point motion or some such
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
130 ;; non-buffer-modifying command. Let's close whatever can be closed.
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
131 (dolist (ol old-ols)
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
132 (when (and (eq (current-buffer) (overlay-buffer ol))
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
133 (not (rassq ol reveal-open-spots)))
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
134 (if (and (>= (point) (save-excursion
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
135 (goto-char (overlay-start ol))
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
136 (line-beginning-position 1)))
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
137 (<= (point) (save-excursion
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
138 (goto-char (overlay-end ol))
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
139 (line-beginning-position 2))))
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
140 ;; Still near the overlay: keep it open.
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
141 (push (cons (selected-window) ol) reveal-open-spots)
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
142 ;; Really close it.
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
143 (let ((open (overlay-get ol 'reveal-toggle-invisible)) inv)
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
144 (if (or open
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
145 (and (setq inv (overlay-get ol 'reveal-invisible))
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
146 (setq open (or (get inv 'reveal-toggle-invisible)
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
147 (overlay-get ol 'isearch-open-invisible-temporary)))))
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
148 (condition-case err
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
149 (funcall open ol t)
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
150 (error (message "!!Reveal-hide: %s !!" err)))
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
151 (overlay-put ol 'invisible inv))))))))
50384
09ec24acd6a5 (reveal-post-command): Remove buggy debugging code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50374
diff changeset
152 (error (message "Reveal: %s" err)))))
41621
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
153
58435
180297c18beb (reveal-mode-map): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57816
diff changeset
154 (defvar reveal-mode-map
180297c18beb (reveal-mode-map): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57816
diff changeset
155 (let ((map (make-sparse-keymap)))
180297c18beb (reveal-mode-map): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57816
diff changeset
156 ;; Override the default move-end-of-line which skips valuable
180297c18beb (reveal-mode-map): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57816
diff changeset
157 ;; invisible text.
180297c18beb (reveal-mode-map): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57816
diff changeset
158 (define-key map [?\C-e] 'end-of-line)
180297c18beb (reveal-mode-map): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57816
diff changeset
159 map))
180297c18beb (reveal-mode-map): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57816
diff changeset
160
41621
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
161 ;;;###autoload
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
162 (define-minor-mode reveal-mode
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
163 "Toggle Reveal mode on or off.
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
164 Reveal mode renders invisible text around point visible again.
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
165
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
166 Interactively, with no prefix argument, toggle the mode.
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
167 With universal prefix ARG (or if ARG is nil) turn mode on.
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
168 With zero or negative ARG turn mode off."
41778
19e76eadbf86 (reveal-mode): Fix reveal-mode's lighter.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41621
diff changeset
169 :lighter (global-reveal-mode nil " Reveal")
58435
180297c18beb (reveal-mode-map): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57816
diff changeset
170 :keymap reveal-mode-map
41621
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
171 (if reveal-mode
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
172 (progn
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
173 (set (make-local-variable 'search-invisible) t)
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
174 (add-hook 'post-command-hook 'reveal-post-command nil t))
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
175 (kill-local-variable 'search-invisible)
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
176 (remove-hook 'post-command-hook 'reveal-post-command t)))
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
177
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
178 ;;;###autoload
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
179 (define-minor-mode global-reveal-mode
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
180 "Toggle Reveal mode in all buffers on or off.
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
181 Reveal mode renders invisible text around point visible again.
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
182
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
183 Interactively, with no prefix argument, toggle the mode.
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
184 With universal prefix ARG (or if ARG is nil) turn mode on.
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
185 With zero or negative ARG turn mode off."
48399
59fc5f077731 (global-reveal-mode): Add group.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 45428
diff changeset
186 :global t :group 'reveal
41621
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
187 (setq-default reveal-mode global-reveal-mode)
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
188 (if global-reveal-mode
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
189 (progn
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
190 (setq search-invisible t)
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
191 (add-hook 'post-command-hook 'reveal-post-command))
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
192 (setq search-invisible 'open) ;FIXME
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
193 (remove-hook 'post-command-hook 'reveal-post-command)))
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
194
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
195 (provide 'reveal)
48399
59fc5f077731 (global-reveal-mode): Add group.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 45428
diff changeset
196
57816
af6e1f8dd9e0 (reveal-last-tick): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
197 ;; arch-tag: 96ba0242-2274-4ed7-8e10-26bc0707b4d8
41621
8835d207e12a Initial commit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
198 ;;; reveal.el ends here