From: Stefan Monnier Date: Thu, 22 Nov 2007 22:12:22 +0000 (+0000) Subject: (beginning-of-defun-raw): Pass `arg' down to beginning-of-defun-function. X-Git-Tag: emacs-pretest-23.0.90~9533 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=50bfa18a09a1d1257116d0e391da864e79ebd669;p=emacs.git (beginning-of-defun-raw): Pass `arg' down to beginning-of-defun-function. --- diff --git a/etc/NEWS b/etc/NEWS index e336a757b24..f9817d634f0 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -383,6 +383,9 @@ because they clash with commands provided by dirtrack.el. Use * 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. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 43ef38d73cd..393f7791e2c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2007-11-22 Stefan Monnier + + * emacs-lisp/lisp.el (beginning-of-defun-raw): Pass `arg' down to + beginning-of-defun-function. + 2007-11-22 Reiner Steib * mail/hashcash.el: Move from ../gnus. Add hashcash payments to email. diff --git a/lisp/emacs-lisp/lisp.el b/lisp/emacs-lisp/lisp.el index 788be284cda..e607245d0ed 100644 --- a/lisp/emacs-lisp/lisp.el +++ b/lisp/emacs-lisp/lisp.el @@ -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))