summaryrefslogtreecommitdiff
path: root/lisp/vc/log-view.el
diff options
context:
space:
mode:
authorDaniel Colascione <dancol@dancol.org>2014-01-05 23:33:06 -0800
committerDaniel Colascione <dancol@dancol.org>2014-01-05 23:33:06 -0800
commitbf6a77f31c3c5618cd37cb7c70b6e9a29df9bce2 (patch)
treeb40419d41cf834a3f8d003f281f150ef494dc772 /lisp/vc/log-view.el
parentd5081c1ed8e0dd509007b7a617d2640686e91f75 (diff)
downloademacs-bf6a77f31c3c5618cd37cb7c70b6e9a29df9bce2.tar.gz
Fix defun navigation in vc log view.
Diffstat (limited to 'lisp/vc/log-view.el')
-rw-r--r--lisp/vc/log-view.el45
1 files changed, 33 insertions, 12 deletions
diff --git a/lisp/vc/log-view.el b/lisp/vc/log-view.el
index 3006081fb55..bacf96c4677 100644
--- a/lisp/vc/log-view.el
+++ b/lisp/vc/log-view.el
@@ -429,18 +429,28 @@ to the beginning of the ARGth following entry.
This is Log View mode's default `beginning-of-defun-function'.
It assumes that a log entry starts with a line matching
`log-view-message-re'."
- (if (or (null arg) (zerop arg))
- (setq arg 1))
+ (when (null arg) (setf arg 1))
(if (< arg 0)
- (dotimes (_n (- arg))
- (log-view-end-of-defun))
- (catch 'beginning-of-buffer
- (dotimes (_n arg)
- (or (log-view-current-entry nil t)
- (throw 'beginning-of-buffer nil)))
- (point))))
-
-(defun log-view-end-of-defun ()
+ (log-view-end-of-defun (- arg))
+ (let ((found t))
+ (while (> arg 0)
+ (setf arg (1- arg))
+ (let ((cur-start (log-view-current-entry)))
+ (setf found
+ (cond ((null cur-start)
+ (goto-char (point-min))
+ nil)
+ ((>= (car cur-start) (point))
+ (unless (bobp)
+ (forward-line -1)
+ (setf arg (1+ arg)))
+ nil)
+ (t
+ (goto-char (car cur-start))
+ t)))))
+ found)))
+
+(defun log-view-end-of-defun-1 ()
"Move forward to the next Log View entry."
(let ((looping t))
(if (looking-at log-view-message-re)
@@ -457,6 +467,16 @@ It assumes that a log entry starts with a line matching
(setq looping nil)
(forward-line -1))))))
+(defun log-view-end-of-defun (&optional arg)
+ "Move forward to the next Log View entry.
+Works like `end-of-defun'."
+ (when (null arg) (setf arg 1))
+ (if (< arg 0)
+ (log-view-beginning-of-defun (- arg))
+ (dotimes (_n arg)
+ (log-view-end-of-defun-1)
+ t)))
+
(defvar cvs-minor-current-files)
(defvar cvs-branch-prefix)
(defvar cvs-secondary-branch-prefix)
@@ -511,7 +531,8 @@ If called interactively, visit the version at point."
(cond ((eq backend 'SVN)
(forward-line -1)))
(setq en (point))
- (log-view-beginning-of-defun)
+ (or (log-view-current-entry nil t)
+ (throw 'beginning-of-buffer nil))
(cond ((memq backend '(SCCS RCS CVS MCVS SVN))
(forward-line 2))
((eq backend 'Hg)