changeset 94845:1aa1de92b8a1

New functions implementing motion to next and previous directory.
author Eric S. Raymond <esr@snark.thyrsus.com>
date Sat, 10 May 2008 12:40:57 +0000
parents 19d0bdbf4831
children 1a6e4ea4e517
files lisp/ChangeLog lisp/vc-dispatcher.el
diffstat 2 files changed, 46 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Sat May 10 08:54:03 2008 +0000
+++ b/lisp/ChangeLog	Sat May 10 12:40:57 2008 +0000
@@ -1,3 +1,8 @@
+2008-05-10  Eric S. Raymond  <esr@snark.thyrsus.com>
+
+	* vc-dispatcher.el (vc-dir-next-directory, vc-dir-prev-directory):
+	New functions implementing motion to next and previous directory.
+
 2008-05-10  Dan Nicolaescu  <dann@ics.uci.edu>
 
 	* vc.el: Update todo.
--- a/lisp/vc-dispatcher.el	Sat May 10 08:54:03 2008 +0000
+++ b/lisp/vc-dispatcher.el	Sat May 10 12:40:57 2008 +0000
@@ -117,8 +117,6 @@
 ;;
 ;; - vc-dir toolbar needs more icons.
 ;;
-;; - add commands to move to the prev/next directory in vc-dir.
-;;
 ;; - vc-dir-menu-map-filter hook call needs to be moved to vc.el.
 ;;
 
@@ -743,6 +741,11 @@
     (define-key map "\t" 'vc-dir-next-line)
     (define-key map "p" 'vc-dir-previous-line)
     (define-key map [backtab] 'vc-dir-previous-line)
+    ;;; Rebind paragraph-movement commands.
+    (define-key map "\M-}" 'vc-dir-next-directory)
+    (define-key map "\M-{" 'vc-dir-prev-directory)
+    (define-key map "\M-<down>" 'vc-dir-next-directory)
+    (define-key map "\M-<up>" 'vc-dir-prev-directory)
     ;; The remainder.
     (define-key map "f" 'vc-dir-find-file)
     (define-key map "\C-m" 'vc-dir-find-file)
@@ -930,6 +933,42 @@
   (ewoc-goto-prev vc-ewoc arg)
   (vc-dir-move-to-goal-column))
 
+(defun vc-dir-next-directory ()
+  "Go to the next directory."
+  (interactive)
+  (let ((orig (point)))
+    (if 
+	(catch 'foundit
+	  (while t
+	    (let* ((next (ewoc-next vc-ewoc (ewoc-locate vc-ewoc))))
+	      (cond ((not next)
+		     (throw 'foundit t))
+		    (t
+		     (progn
+		       (ewoc-goto-node vc-ewoc next)
+		       (vc-dir-move-to-goal-column)
+		       (if (vc-dir-fileinfo->directory (ewoc-data next))
+			   (throw 'foundit nil))))))))
+	(goto-char orig))))
+
+(defun vc-dir-prev-directory ()
+  "Go to the previous directory."
+  (interactive)
+  (let ((orig (point)))
+    (if 
+	(catch 'foundit
+	  (while t
+	    (let* ((prev (ewoc-prev vc-ewoc (ewoc-locate vc-ewoc))))
+	      (cond ((not prev)
+		     (throw 'foundit t))
+		    (t
+		     (progn
+		       (ewoc-goto-node vc-ewoc prev)
+		       (vc-dir-move-to-goal-column)
+		       (if (vc-dir-fileinfo->directory (ewoc-data prev))
+			   (throw 'foundit nil))))))))
+	(goto-char orig))))
+
 (defun vc-dir-mark-unmark (mark-unmark-function)
   (if (use-region-p)
       (let ((firstl (line-number-at-pos (region-beginning)))