]> code.delx.au - gnu-emacs/blobdiff - lisp/reposition.el
* lisp/progmodes/compile.el: Avoid an N² behavior in grep.
[gnu-emacs] / lisp / reposition.el
index d981eefec5e9d10778090dad2e24d93dae103d39..51dd630a0c6a43f207cf0d070f8e9895af8ee1e5 100644 (file)
@@ -1,6 +1,6 @@
 ;;; reposition.el --- center a Lisp function or comment on the screen
 
-;; Copyright (C) 1991 Free Software Foundation, Inc.
+;; Copyright (C) 1991, 1994, 2001-2011  Free Software Foundation, Inc.
 
 ;; Author: Michael D. Ernst <mernst@theory.lcs.mit.edu>
 ;; Created: Jan 1991
@@ -8,10 +8,10 @@
 
 ;; This file is part of GNU Emacs.
 
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
-;;; Reposition-window makes an entire function definition or comment visible,
-;;; or, if it is already visible, places it at the top of the window;
-;;; additional invocations toggle the visibility of comments preceding the
-;;; code.  For the gory details, see the documentation for reposition-window;
-;;; rather than reading that, you may just want to play with it.
+;; Reposition-window makes an entire function definition or comment visible,
+;; or, if it is already visible, places it at the top of the window;
+;; additional invocations toggle the visibility of comments preceding the
+;; code.  For the gory details, see the documentation for reposition-window;
+;; rather than reading that, you may just want to play with it.
 
-;;; This tries pretty hard to do the recentering correctly; the precise
-;;; action depends on what the buffer looks like.  If you find a situation
-;;; where it doesn't behave well, let me know.  This function is modeled
-;;; after one of the same name in ZMACS, but the code is all-new and the
-;;; behavior in some situations differs.
+;; This tries pretty hard to do the recentering correctly; the precise
+;; action depends on what the buffer looks like.  If you find a situation
+;; where it doesn't behave well, let me know.  This function is modeled
+;; after one of the same name in ZMACS, but the code is all-new and the
+;; behavior in some situations differs.
 
 ;;; Code:
 
@@ -58,7 +57,7 @@ visible (if point is in code and it could not be made so, or if only
 comments, including the first comment line, are visible), or to make the
 first comment line visible (if point is in a comment)."
   (interactive "P")
-  (let* (;; (here (save-excursion (beginning-of-line) (point)))
+  (let* (;; (here (line-beginning-position))
         (here (point))
         ;; change this name once I've gotten rid of references to ht.
         ;; this is actually the number of the last screen line
@@ -70,13 +69,14 @@ first comment line visible (if point is in a comment)."
               (repos-count-screen-lines-signed
                ;; the beginning of the preceding comment
                (save-excursion
-                 (forward-char 1) (end-of-defun -1) 
+                 (if (not (eobp)) (forward-char 1))
+                 (end-of-defun -1)
                  ;; Skip whitespace, newlines, and form feeds.
-                 (re-search-forward "[^\\s \n\014]")
-                 (backward-char 1)
+                 (if (re-search-forward "[^ \t\n\f]" nil t)
+                     (backward-char 1))
                  (point))
                here)))
-        (defun-height 
+        (defun-height
           (repos-count-screen-lines-signed
            (save-excursion
              (end-of-defun 1) ; so comments associate with following defuns
@@ -118,16 +118,16 @@ first comment line visible (if point is in a comment)."
           ;; whose first line is offscreen.
           ;; Avoid moving definition up even if defun runs offscreen;
           ;; we care more about getting the comment onscreen.
-          
+
           (cond ((= line ht)
                  ;; cursor on last screen line (and so in a comment)
                  (if arg (progn (end-of-defun) (beginning-of-defun)))
                  (recenter 0)
                  ;;(repos-debug-macro "2a")
                  )
-                
+
                 ;; This condition, copied from case 4, may not be quite right
-                
+
                 ((and arg (< ht comment-height))
                  ;; Can't get first comment line onscreen.
                  ;; Go there and try again.
@@ -168,9 +168,6 @@ first comment line visible (if point is in a comment)."
           ;;(repos-debug-macro "4")
           ))))
 
-;;;###autoload
-(define-key esc-map "\C-l" 'reposition-window)
-
 ;;; Auxiliary functions
 
 ;; Return number of screen lines between START and END.
@@ -189,9 +186,10 @@ first comment line visible (if point is in a comment)."
        lines
       (- lines))))
 
-; (defmacro repos-debug-macro (case-no)
-;   (` (message
-;       (concat "Case " (, case-no) ": %s %s %s %s %s")
-;       ht line comment-height defun-height defun-depth)))
+;; (defmacro repos-debug-macro (case-no)
+;;   `(message (concat "Case " ,case-no ": %s %s %s %s %s")
+;;             ht line comment-height defun-height defun-depth))
+
+(provide 'reposition)
 
 ;;; reposition.el ends here