]> git.eshelyaron.com Git - emacs.git/commitdiff
(beginning-of-defun-raw, end-of-defun):
authorStefan Monnier <monnier@iro.umontreal.ca>
Wed, 14 Apr 2004 18:20:23 +0000 (18:20 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Wed, 14 Apr 2004 18:20:23 +0000 (18:20 +0000)
Correctly handle negative arguments when calling hook functions.

lisp/emacs-lisp/lisp.el

index 4d90abd9f4e4b24db4c9f8b3ef835604a7ede702..e1ed508b86509d4ad8fae8539a0fb2ad936d4bb1 100644 (file)
@@ -1,6 +1,6 @@
 ;;; lisp.el --- Lisp editing commands for Emacs
 
-;; Copyright (C) 1985, 1986, 1994, 2000 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 86, 1994, 2000, 2004  Free Software Foundation, Inc.
 
 ;; Maintainer: FSF
 ;; Keywords: lisp, languages
@@ -188,8 +188,12 @@ If variable `beginning-of-defun-function' is non-nil, its value
 is called as a function to find the defun's beginning."
   (interactive "p")
   (if beginning-of-defun-function
-      (dotimes (i (or arg 1))
-       (funcall beginning-of-defun-function))
+      (if (> (setq arg (or arg 1)) 0)
+         (dotimes (i arg)
+           (funcall beginning-of-defun-function))
+       ;; Better not call end-of-defun-function directly, in case
+       ;; it's not defined.
+       (end-of-defun (- arg)))
     (and arg (< arg 0) (not (eobp)) (forward-char 1))
     (and (re-search-backward (if defun-prompt-regexp
                                 (concat (if open-paren-in-column-0-is-defun-start
@@ -219,13 +223,17 @@ matches the open-parenthesis that starts a defun; see function
 If variable `end-of-defun-function' is non-nil, its value
 is called as a function to find the defun's end."
   (interactive "p")
+  (if (or (null arg) (= arg 0)) (setq arg 1))
   (if end-of-defun-function
-      (dotimes (i (or arg 1))
-       (funcall end-of-defun-function))
-    (if (or (null arg) (= arg 0)) (setq arg 1))
+      (if (> arg 0)
+         (dotimes (i arg)
+           (funcall end-of-defun-function))
+       ;; Better not call beginning-of-defun-function
+       ;; directly, in case it's not defined.
+       (beginning-of-defun (- arg)))
     (let ((first t))
       (while (and (> arg 0) (< (point) (point-max)))
-       (let ((pos (point)) npos)
+       (let ((pos (point)))
          (while (progn
                   (if (and first
                            (progn