emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/vc.el,v


From: Dan Nicolaescu
Subject: [Emacs-diffs] Changes to emacs/lisp/vc.el,v
Date: Sun, 06 Jan 2008 10:20:28 +0000

CVSROOT:        /cvsroot/emacs
Module name:    emacs
Changes by:     Dan Nicolaescu <dann>   08/01/06 10:20:27

Index: vc.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/vc.el,v
retrieving revision 1.506
retrieving revision 1.507
diff -u -b -r1.506 -r1.507
--- vc.el       6 Jan 2008 03:18:08 -0000       1.506
+++ vc.el       6 Jan 2008 10:20:25 -0000       1.507
@@ -1276,6 +1276,8 @@
                (unless (eq (vc-backend f) firstbackend)
                  (error "All members of a fileset must be under the same 
version-control system."))))
           marked))
+       ((eq major-mode 'vc-status-mode)
+        (vc-status-marked-files))
        ((vc-backend buffer-file-name)
         (list buffer-file-name))
        ((and vc-parent-buffer (or (buffer-file-name vc-parent-buffer)
@@ -2496,6 +2498,94 @@
                               vc-dired-switches
                               'vc-dired-mode))))
 
+;;; Experimental code for the vc-dired replacement
+(require 'ewoc)
+
+(defstruct (vc-status-fileinfo
+            (:copier nil)
+            (:constructor vc-status-create-fileinfo (state name &optional 
marked))
+            (:conc-name vc-status-fileinfo->))
+  marked
+  state
+  name)
+
+(defvar vc-status nil)
+
+(defun vc-status-insert-headers (backend dir)
+  (insert (format "VC backend :%s\n" backend))
+  (insert "Repository : The repository goes here\n")
+  (insert (format "Working dir: %s\n\n\n" dir)))
+
+(defun vc-status-printer (fileentry)
+  "Pretty print FILEENTRY."
+  (insert
+   (format "%c   %-20s %s"
+          (if (vc-status-fileinfo->marked fileentry) ?* ? )
+          (vc-status-fileinfo->state fileentry)
+          (vc-status-fileinfo->name fileentry))))
+
+(defun vc-status (dir)
+  "Show the VC status for DIR."
+  (interactive "DVC status for directory: ")
+  (vc-setup-buffer "*vc-status*")
+  (switch-to-buffer "*vc-status*")
+  (cd dir)
+  (vc-status-mode))
+
+(defvar vc-status-mode-map 
+  (let ((map (make-sparse-keymap)))
+    (define-key map "m" 'vc-status-mark-file)
+    (define-key map "u" 'vc-status-unmark-file)
+    map)
+  "Keymap for VC status")
+
+(defun vc-status-mode ()
+  "Major mode for VC status.
+\\{vc-status-mode-map}"
+  (setq mode-name "*VC Status*")
+  (setq major-mode 'vc-status-mode)
+  (setq buffer-read-only t)
+  (use-local-map vc-status-mode-map)
+  (let ((buffer-read-only nil)
+       (backend (vc-responsible-backend default-directory))
+       entries)
+    (erase-buffer)
+    (set (make-local-variable 'vc-status)
+        (ewoc-create #'vc-status-printer))
+    (vc-status-insert-headers backend default-directory)
+    (setq entries (vc-call-backend backend 'dir-status default-directory))
+    (dolist (entry entries)
+      (ewoc-enter-last 
+       vc-status (vc-status-create-fileinfo (cdr entry) (car entry))))))
+
+(defun vc-status-mark-file ()
+  "Mark the current file."
+  (interactive)
+  (let* ((crt (ewoc-locate vc-status))
+         (file (ewoc-data crt)))
+    (setf (vc-status-fileinfo->marked file) t)
+    (ewoc-invalidate vc-status crt)
+    (ewoc-goto-next vc-status 1)))
+
+(defun vc-status-unmark-file ()
+  "Mark the current file."
+  (interactive)
+  (let* ((crt (ewoc-locate vc-status))
+         (file (ewoc-data crt)))
+    (setf (vc-status-fileinfo->marked file) nil)
+    (ewoc-invalidate vc-status crt)
+    (ewoc-goto-next vc-status 1)))
+
+(defun vc-status-marked-files ()
+  "Return the list of marked files"
+  (mapcar 
+   (lambda (elem)
+     (expand-file-name (vc-status-fileinfo->name elem)))
+   (ewoc-collect
+    vc-status 
+    (lambda (crt) (vc-status-fileinfo->marked crt)))))
+
+;;; End experimental code.
 
 ;; Named-configuration entry points
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]