X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/6503cec3499f6b722f40304d78a10f9d79ed5165..61523a7c4090576ccc812e3328bf18aa9ea9ecec:/lisp/reposition.el diff --git a/lisp/reposition.el b/lisp/reposition.el index 97b6ec2419..f19111cc8e 100644 --- a/lisp/reposition.el +++ b/lisp/reposition.el @@ -1,11 +1,17 @@ -;;; -*- 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, 2001, 2002, 2003, 2004, +;; 2005, 2006, 2007, 2008 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 3, or (at your option) ;; any later version. ;; GNU Emacs is distributed in the hope that it will be useful, @@ -14,22 +20,25 @@ ;; 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; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: -;;; Written by Michael D. Ernst, mernst@theory.lcs.mit.edu, Jan 1991. +;; 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: ;;;###autoload (defun reposition-window (&optional arg) @@ -63,13 +72,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 @@ -111,16 +121,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. @@ -161,9 +171,6 @@ first comment line visible (if point is in a comment)." ;;(repos-debug-macro "4") )))) -;;;###autoload -(define-key esc-map "\C-l" 'resposition-window) - ;;; Auxiliary functions ;; Return number of screen lines between START and END. @@ -182,8 +189,11 @@ 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) +;;; arch-tag: 79487039-3bd7-4ab5-a3e8-ecf3b4919010 +;;; reposition.el ends here