changeset 53752:592ddd618234

(beginning-of-defun-raw, end-of-defun): Iterate the hook function if arg is given. (mark-defun, narrow-to-defun): Change order of finding the limits.
author Richard M. Stallman <rms@gnu.org>
date Thu, 29 Jan 2004 17:56:42 +0000
parents e7725f50a432
children 93d749070205
files lisp/emacs-lisp/lisp.el
diffstat 1 files changed, 17 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/emacs-lisp/lisp.el	Thu Jan 29 17:55:39 2004 +0000
+++ b/lisp/emacs-lisp/lisp.el	Thu Jan 29 17:56:42 2004 +0000
@@ -188,7 +188,8 @@
 is called as a function to find the defun's beginning."
   (interactive "p")
   (if beginning-of-defun-function
-      (funcall beginning-of-defun-function)
+      (dotimes (i (or arg 1))
+	(funcall beginning-of-defun-function))
     (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,7 +220,8 @@
 is called as a function to find the defun's end."
   (interactive "p")
   (if end-of-defun-function
-      (funcall end-of-defun-function)
+      (dotimes (i (or arg 1))
+	(funcall end-of-defun-function))
     (if (or (null arg) (= arg 0)) (setq arg 1))
     (let ((first t))
       (while (and (> arg 0) (< (point) (point-max)))
@@ -267,10 +269,14 @@
 	    (end-of-defun)
 	    (point))))
 	(t
+	 ;; Do it in this order for the sake of languages with nested
+	 ;; functions where several can end at the same place as with
+	 ;; the offside rule, e.g. Python.
 	 (push-mark (point))
+	 (beginning-of-defun)
+	 (push-mark (point) nil t)
 	 (end-of-defun)
-	 (push-mark (point) nil t)
-	 (beginning-of-defun)
+	 (exchange-point-and-mark)
 	 (re-search-backward "^\n" (- (point) 1) t))))
 
 (defun narrow-to-defun (&optional arg)
@@ -280,10 +286,13 @@
   (interactive)
   (save-excursion
     (widen)
-    (end-of-defun)
-    (let ((end (point)))
-      (beginning-of-defun)
-      (narrow-to-region (point) end))))
+    ;; Do it in this order for the sake of languages with nested
+    ;; functions where several can end at the same place as with the
+    ;; offside rule, e.g. Python.
+    (beginning-of-defun)
+    (let ((beg (point)))
+      (end-of-defun)
+      (narrow-to-region beg (point)))))
 
 (defun insert-parentheses (arg)
   "Enclose following ARG sexps in parentheses.  Leave point after open-paren.