[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#2379: [PATCH?] lisp.el: beginning-of-defun
From: |
Aaron S. Hawley |
Subject: |
bug#2379: [PATCH?] lisp.el: beginning-of-defun |
Date: |
Wed, 18 Feb 2009 21:37:39 -0500 |
There's some strange programming style in `beginning-of-defun-raw' for
Emacs 22.2, perhaps this is what was meant by the use of this `progn'
syntax?
--- lisp.el 18 Feb 2009 20:56:29 -0500 1.79.2.3
+++ lisp.el 18 Feb 2009 21:07:49 -0500
@@ -234,7 +234,7 @@
"\\(?:" defun-prompt-regexp "\\)\\s(")
"^\\s(")
nil 'move arg)
- (progn (goto-char (1- (match-end 0)))) t))
+ (progn (goto-char (1- (match-end 0))) t)))
;; If open-paren-in-column-0-is-defun-start and defun-prompt-regexp
;; are both nil, column 0 has no significance - so scan forward
If not, then this is what it probably should be:
--- lisp.el 18 Feb 2009 20:56:29 -0500 1.79.2.3
+++ lisp.el 18 Feb 2009 21:10:21 -0500
@@ -234,7 +234,7 @@
"\\(?:" defun-prompt-regexp "\\)\\s(")
"^\\s(")
nil 'move arg)
- (progn (goto-char (1- (match-end 0)))) t))
+ (goto-char (1- (match-end 0)))))
;; If open-paren-in-column-0-is-defun-start and defun-prompt-regexp
;; are both nil, column 0 has no significance - so scan forward
Then, once that is figured out, why doesn't `beginning-of-defun'
manage zero arguments like many of the movement commands do? Running
C-0 C-M-a seems to run `beginning-of-line' regardless. That's an easy
fix with this patch:
--- lisp.el 18 Feb 2009 20:56:29 -0500 1.79.2.3
+++ lisp.el 18 Feb 2009 21:25:05 -0500
@@ -204,7 +204,7 @@
(and transient-mark-mode mark-active)
(push-mark))
(and (beginning-of-defun-raw arg)
- (progn (beginning-of-line) t)))
+ (progn (if (and (integerp arg) (/= arg 0)) (beginning-of-line)) t)))
(defun beginning-of-defun-raw (&optional arg)
"Move point to the character that starts a defun.
But then, `beginning-of-defun-raw' seems to run (forward-char -1).
That requires this patch.
--- lisp.el 18 Feb 2009 20:56:29 -0500 1.79.2.3
+++ lisp.el 18 Feb 2009 21:28:22 -0500
@@ -234,7 +234,7 @@
"\\(?:" defun-prompt-regexp "\\)\\s(")
"^\\s(")
nil 'move arg)
- (progn (goto-char (1- (match-end 0)))) t))
+ (progn (or (zerop arg) (goto-char (1- (match-end 0))))) t))
;; If open-paren-in-column-0-is-defun-start and defun-prompt-regexp
;; are both nil, column 0 has no significance - so scan forward
That's my best look at the situation.
Support for a zero argument in these functions is important for
situations where you want to be programmatic with
`beginning-of-defun', Can this be fixed?
Thanks,
/a
- bug#2379: [PATCH?] lisp.el: beginning-of-defun,
Aaron S. Hawley <=