X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/57d378a93d9b4e69aeb4aeb0fc1e9de2836072d4..81276211e4129321b2f78851fc006e85c0fc7ddf:/lisp/reposition.el diff --git a/lisp/reposition.el b/lisp/reposition.el index c34f370b35..e961d4e557 100644 --- a/lisp/reposition.el +++ b/lisp/reposition.el @@ -1,11 +1,16 @@ -;;; -*- Mode: Emacs-lisp -*- -;; Copyright (C) 1991 Free Software Foundation, Inc. +;;; reposition.el --- center a Lisp function or comment on the screen + +;; Copyright (C) 1991, 1994 Free Software Foundation, Inc. + +;; Author: Michael D. Ernst +;; Created: Jan 1991 +;; Maintainer: FSF ;; This file is part of GNU Emacs. ;; 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 1, or (at your option) +;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; GNU Emacs is distributed in the hope that it will be useful, @@ -17,7 +22,7 @@ ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -;;; Written by Michael D. Ernst, mernst@theory.lcs.mit.edu, 1/26/91 +;;; 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; @@ -25,15 +30,15 @@ ;;; code. For the gory details, see the documentation for reposition-window; ;;; rather than reading that, you may just want to play with it. -;;; The recommended binding for this function is M-C-r: -;;; (global-set-key "\e\C-r" 'reposition-window) - ;;; 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: + +;;;###autoload (defun reposition-window (&optional arg) "Make the current definition and/or comment visible. Further invocations move it to the top of the window or toggle the @@ -65,13 +70,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 @@ -113,16 +119,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. @@ -163,6 +169,8 @@ 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. @@ -186,3 +194,4 @@ first comment line visible (if point is in a comment)." ; (concat "Case " (, case-no) ": %s %s %s %s %s") ; ht line comment-height defun-height defun-depth))) +;;; reposition.el ends here