Mercurial > emacs
changeset 86353:480a058ecb2f
(beginning-of-defun-raw): Pass `arg' down to beginning-of-defun-function.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Thu, 22 Nov 2007 22:12:22 +0000 |
parents | 8121805fdbcb |
children | 29047758dd89 |
files | etc/NEWS lisp/ChangeLog lisp/emacs-lisp/lisp.el |
diffstat | 3 files changed, 28 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/etc/NEWS Thu Nov 22 21:12:54 2007 +0000 +++ b/etc/NEWS Thu Nov 22 22:12:22 2007 +0000 @@ -383,6 +383,9 @@ * 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.
--- a/lisp/ChangeLog Thu Nov 22 21:12:54 2007 +0000 +++ b/lisp/ChangeLog Thu Nov 22 22:12:22 2007 +0000 @@ -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.
--- a/lisp/emacs-lisp/lisp.el Thu Nov 22 21:12:54 2007 +0000 +++ b/lisp/emacs-lisp/lisp.el Thu Nov 22 22:12:22 2007 +0000 @@ -175,9 +175,10 @@ 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 @@ (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))