annotate lisp/reposition.el @ 20279:69a6030e443a

(kill-region): Detect read-only text by getting an error trying to delete it. Handle the cases where we can, and can't, get the killed text from the undo list with much the same code.
author Karl Heuer <kwzh@gnu.org>
date Wed, 19 Nov 1997 21:36:56 +0000
parents 11218164bc54
children 64ee9a4a698e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
658
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 269
diff changeset
1 ;;; reposition.el --- center a Lisp function or comment on the screen
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 269
diff changeset
2
7300
cc7cd83ccf3f Update copyright.
Karl Heuer <kwzh@gnu.org>
parents: 5290
diff changeset
3 ;; Copyright (C) 1991, 1994 Free Software Foundation, Inc.
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 807
diff changeset
4
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 658
diff changeset
5 ;; Author: Michael D. Ernst <mernst@theory.lcs.mit.edu>
2315
9e7ec92a4fdf Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 906
diff changeset
6 ;; Created: Jan 1991
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 658
diff changeset
7 ;; Maintainer: FSF
196
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 658
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
196
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; any later version.
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 7300
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 7300
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 7300
diff changeset
24 ;; Boston, MA 02111-1307, USA.
196
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 658
diff changeset
26 ;;; Commentary:
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 658
diff changeset
27
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 7300
diff changeset
28 ;; Reposition-window makes an entire function definition or comment visible,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 7300
diff changeset
29 ;; or, if it is already visible, places it at the top of the window;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 7300
diff changeset
30 ;; additional invocations toggle the visibility of comments preceding the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 7300
diff changeset
31 ;; code. For the gory details, see the documentation for reposition-window;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 7300
diff changeset
32 ;; rather than reading that, you may just want to play with it.
196
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 7300
diff changeset
34 ;; This tries pretty hard to do the recentering correctly; the precise
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 7300
diff changeset
35 ;; action depends on what the buffer looks like. If you find a situation
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 7300
diff changeset
36 ;; where it doesn't behave well, let me know. This function is modeled
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 7300
diff changeset
37 ;; after one of the same name in ZMACS, but the code is all-new and the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 7300
diff changeset
38 ;; behavior in some situations differs.
196
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 658
diff changeset
40 ;;; Code:
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 658
diff changeset
41
262
990d2229354c *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 197
diff changeset
42 ;;;###autoload
196
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 (defun reposition-window (&optional arg)
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 "Make the current definition and/or comment visible.
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 Further invocations move it to the top of the window or toggle the
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 visibility of comments that precede it.
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 Point is left unchanged unless prefix ARG is supplied.
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 If the definition is fully onscreen, it is moved to the top of the
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 window. If it is partly offscreen, the window is scrolled to get the
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 definition (or as much as will fit) onscreen, unless point is in a comment
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 which is also partly offscreen, in which case the scrolling attempts to get
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 as much of the comment onscreen as possible.
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 Initially `reposition-window' attempts to make both the definition and
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 preceding comments visible. Further invocations toggle the visibility of
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 the comment lines.
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 If ARG is non-nil, point may move in order to make the whole defun
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 visible (if only part could otherwise be made so), to make the defun line
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 visible (if point is in code and it could not be made so, or if only
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 comments, including the first comment line, are visible), or to make the
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 first comment line visible (if point is in a comment)."
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 (interactive "P")
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 (let* (;; (here (save-excursion (beginning-of-line) (point)))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 (here (point))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 ;; change this name once I've gotten rid of references to ht.
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 ;; this is actually the number of the last screen line
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 (ht (- (window-height (selected-window)) 2))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 (line (repos-count-screen-lines (window-start) (point)))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 (comment-height
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 ;; The call to max deals with the case of cursor between defuns.
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 (max 0
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 (repos-count-screen-lines-signed
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 ;; the beginning of the preceding comment
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 (save-excursion
4182
b85c00ac4ae3 (reposition-window): Don't forward-char if eobp.
Richard M. Stallman <rms@gnu.org>
parents: 2315
diff changeset
74 (if (not (eobp)) (forward-char 1))
5290
fee2ab7de353 (reposition-window): Fix whitespace-skipping regexp.
Richard M. Stallman <rms@gnu.org>
parents: 4182
diff changeset
75 (end-of-defun -1)
196
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 ;; Skip whitespace, newlines, and form feeds.
5290
fee2ab7de353 (reposition-window): Fix whitespace-skipping regexp.
Richard M. Stallman <rms@gnu.org>
parents: 4182
diff changeset
77 (if (re-search-forward "[^ \t\n\f]" nil t)
fee2ab7de353 (reposition-window): Fix whitespace-skipping regexp.
Richard M. Stallman <rms@gnu.org>
parents: 4182
diff changeset
78 (backward-char 1))
196
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 (point))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 here)))
5290
fee2ab7de353 (reposition-window): Fix whitespace-skipping regexp.
Richard M. Stallman <rms@gnu.org>
parents: 4182
diff changeset
81 (defun-height
196
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 (repos-count-screen-lines-signed
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 (save-excursion
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 (end-of-defun 1) ; so comments associate with following defuns
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 (beginning-of-defun 1)
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 (point))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 here))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 ;; This must be positive, so don't use the signed version.
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 (defun-depth (repos-count-screen-lines here
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 (save-excursion
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 (end-of-defun 1)
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 (point))))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 (defun-line-onscreen-p
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 (and (<= defun-height line)
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 (<= (- line defun-height) ht))))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 (cond ((or (= comment-height line)
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 (and (= line ht)
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 (> comment-height line)
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 ;; if defun line offscreen, we should be in case 4
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 defun-line-onscreen-p))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 ;; Either first comment line is at top of screen or (point at
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 ;; bottom of screen, defun line onscreen, and first comment line
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 ;; off top of screen). That is, it looks like we just did
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 ;; recenter-definition, trying to fit as much of the comment
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 ;; onscreen as possible. Put defun line at top of screen; that
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 ;; is, show as much code, and as few comments, as possible.
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 (if (and arg (> defun-depth (1+ ht)))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 ;; Can't fit whole defun onscreen without moving point.
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 (progn (end-of-defun) (beginning-of-defun) (recenter 0))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 (recenter (max defun-height 0)))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 ;;(repos-debug-macro "1")
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 )
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 ((or (= defun-height line)
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 (= line 0)
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 (and (< line comment-height)
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 (< defun-height 0)))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 ;; Defun line or cursor at top of screen, OR cursor in comment
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 ;; whose first line is offscreen.
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 ;; Avoid moving definition up even if defun runs offscreen;
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 ;; we care more about getting the comment onscreen.
5290
fee2ab7de353 (reposition-window): Fix whitespace-skipping regexp.
Richard M. Stallman <rms@gnu.org>
parents: 4182
diff changeset
123
196
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 (cond ((= line ht)
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 ;; cursor on last screen line (and so in a comment)
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 (if arg (progn (end-of-defun) (beginning-of-defun)))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 (recenter 0)
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 ;;(repos-debug-macro "2a")
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 )
5290
fee2ab7de353 (reposition-window): Fix whitespace-skipping regexp.
Richard M. Stallman <rms@gnu.org>
parents: 4182
diff changeset
130
196
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 ;; This condition, copied from case 4, may not be quite right
5290
fee2ab7de353 (reposition-window): Fix whitespace-skipping regexp.
Richard M. Stallman <rms@gnu.org>
parents: 4182
diff changeset
132
196
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 ((and arg (< ht comment-height))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 ;; Can't get first comment line onscreen.
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 ;; Go there and try again.
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 (forward-line (- comment-height))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 (beginning-of-line)
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 ;; was (reposition-window)
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 (recenter 0)
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 ;;(repos-debug-macro "2b")
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 )
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 (t
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 (recenter (min ht comment-height))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 ;;(repos-debug-macro "2c")
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 ))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 ;; (recenter (min ht comment-height))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 )
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 ((and (> (+ line defun-depth -1) ht)
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 defun-line-onscreen-p)
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 ;; Defun runs off the bottom of the screen and the defun line
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 ;; is onscreen.
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 ;; Move the defun up.
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 (recenter (max 0 (1+ (- ht defun-depth)) defun-height))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 ;;(repos-debug-macro "3")
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 )
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 (t
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 ;; If on the bottom line and comment start is offscreen
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 ;; then just move all comments offscreen, or at least as
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 ;; far as they'll go.
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 ;; Try to get as much of the comments onscreen as possible.
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 (if (and arg (< ht comment-height))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 ;; Can't get defun line onscreen; go there and try again.
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 (progn (forward-line (- defun-height))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 (beginning-of-line)
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 (reposition-window))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 (recenter (min ht comment-height)))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 ;;(repos-debug-macro "4")
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 ))))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172
5290
fee2ab7de353 (reposition-window): Fix whitespace-skipping regexp.
Richard M. Stallman <rms@gnu.org>
parents: 4182
diff changeset
173 ;;;###autoload (define-key esc-map "\C-l" 'reposition-window)
264
7db4ff4204a5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 262
diff changeset
174
196
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 ;;; Auxiliary functions
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 ;; Return number of screen lines between START and END.
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 (defun repos-count-screen-lines (start end)
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 (save-excursion
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 (save-restriction
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 (narrow-to-region start end)
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 (goto-char (point-min))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 (vertical-motion (- (point-max) (point-min))))))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 ;; Return number of screen lines between START and END; returns a negative
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 ;; number if END precedes START.
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 (defun repos-count-screen-lines-signed (start end)
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 (let ((lines (repos-count-screen-lines start end)))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 (if (< start end)
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 lines
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 (- lines))))
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192
18383
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
193 ;; (defmacro repos-debug-macro (case-no)
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
194 ;; (` (message
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
195 ;; (concat "Case " (, case-no) ": %s %s %s %s %s")
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
196 ;; ht line comment-height defun-height defun-depth)))
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
197
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
198 (provide 'reposition)
196
cb231c9208d8 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199
658
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 269
diff changeset
200 ;;; reposition.el ends here