]> git.eshelyaron.com Git - emacs.git/commitdiff
(beginning-of-defun-raw): Pass `arg' down to beginning-of-defun-function.
authorStefan Monnier <monnier@iro.umontreal.ca>
Thu, 22 Nov 2007 22:12:22 +0000 (22:12 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Thu, 22 Nov 2007 22:12:22 +0000 (22:12 +0000)
etc/NEWS
lisp/ChangeLog
lisp/emacs-lisp/lisp.el

index e336a757b24cc9e237bc441c8caaf311cf4b49d0..f9817d634f0ea9801a4744983abae795d7451f65 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -383,6 +383,9 @@ because they clash with commands provided by dirtrack.el.  Use
 \f
 * Lisp Changes in Emacs 23.1
 
+** `beginning-of-defun-function' now takes one argument, the count
+   given to `beginning-of-defun'.
+
 +++
 ** New function `match-substitute-replacement' returns the result of
 `replace-match' without actually using it in the buffer.
index 43ef38d73cd947c8610bd62a7c5ed95242e73fa0..393f7791e2cb541f903a691383b99f93c1c80a5a 100644 (file)
@@ -1,3 +1,8 @@
+2007-11-22  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * emacs-lisp/lisp.el (beginning-of-defun-raw): Pass `arg' down to
+       beginning-of-defun-function.
+
 2007-11-22  Reiner Steib  <Reiner.Steib@gmx.de>
 
        * mail/hashcash.el: Move from ../gnus.  Add hashcash payments to email.
index 788be284cdaf59d96809da20d0935adc8ebfced2..e607245d0ed52b97734e59240b41a7dddc91eb6a 100644 (file)
@@ -175,9 +175,10 @@ normal recipe (see `beginning-of-defun').  Major modes can define this
 if defining `defun-prompt-regexp' is not sufficient to handle the mode's
 needs.
 
-The function (of no args) should go to the line on which the current
-defun starts, and return non-nil, or should return nil if it can't
-find the beginning.")
+The function takes the same argument as `beginning-of-defun' and should
+behave similarly, returning non-nil if it found the beginning of a defun.
+Ideally it should move to a point right before an open-paren which encloses
+the body of the defun.")
 
 (defun beginning-of-defun (&optional arg)
   "Move backward to the beginning of a defun.
@@ -218,12 +219,22 @@ is called as a function to find the defun's beginning."
   (unless arg (setq arg 1))
   (cond
    (beginning-of-defun-function
-    (if (> arg 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))))
+    (condition-case nil
+        (funcall beginning-of-defun-function arg)
+      ;; We used to define beginning-of-defun-function as taking no argument
+      ;; but that makes it impossible to implement correct forward motion:
+      ;; we used to use end-of-defun for that, but it's not supposed to do
+      ;; the same thing (it moves to the end of a defun not to the beginning
+      ;; of the next).
+      ;; In case the beginning-of-defun-function uses the old calling
+      ;; convention, fallback on the old implementation.
+      (wrong-number-of-arguments
+       (if (> arg 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))))))
 
    ((or defun-prompt-regexp open-paren-in-column-0-is-defun-start)
     (and (< arg 0) (not (eobp)) (forward-char 1))