* vc.el (vc-status-crt-marked): New variable.
(vc-status-mode): Make it local. (vc-status-refresh): Use it to save the marked files. (vc-update-vc-status-buffer): Use it to restore the marked files. * vc-svn.el (vc-svn-after-dir-status): * vc-hg.el (vc-hg-after-dir-status): Clean up the temporary buffer.
This commit is contained in:
parent
e42fc90537
commit
9b7b3814df
5 changed files with 42 additions and 2 deletions
|
@ -1,3 +1,13 @@
|
|||
2008-02-29 Dan Nicolaescu <dann@ics.uci.edu>
|
||||
|
||||
* vc.el (vc-status-crt-marked): New variable.
|
||||
(vc-status-mode): Make it local.
|
||||
(vc-status-refresh): Use it to save the marked files.
|
||||
(vc-update-vc-status-buffer): Use it to restore the marked files.
|
||||
|
||||
* vc-svn.el (vc-svn-after-dir-status):
|
||||
* vc-hg.el (vc-hg-after-dir-status): Clean up the temporary buffer.
|
||||
|
||||
2008-02-29 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* allout.el (allout-topic-encryption-bullet)
|
||||
|
|
|
@ -482,7 +482,7 @@ REV is the revision to check out into WORKFILE."
|
|||
(define-derived-mode vc-hg-incoming-mode vc-hg-log-view-mode "Hg-Incoming")
|
||||
|
||||
;; XXX Experimental function for the vc-dired replacement.
|
||||
(defun vc-hg-after-dir-status (update-function buff)
|
||||
(defun vc-hg-after-dir-status (update-function status-buffer)
|
||||
(let ((status-char nil)
|
||||
(file nil)
|
||||
(translation '((?= . up-to-date)
|
||||
|
@ -505,7 +505,9 @@ REV is the revision to check out into WORKFILE."
|
|||
(when (and translated (not (eq (cdr translated) 'up-to-date)))
|
||||
(push (cons file (cdr translated)) result))
|
||||
(forward-line))
|
||||
(funcall update-function result buff)))
|
||||
;; Remove the temporary buffer.
|
||||
(kill-buffer (current-buffer))
|
||||
(funcall update-function result status-buffer)))
|
||||
|
||||
;; XXX Experimental function for the vc-dired replacement.
|
||||
(defun vc-hg-dir-status (dir update-function status-buffer)
|
||||
|
|
|
@ -605,6 +605,8 @@ If FILE is not registered, this function always returns nil."
|
|||
;; Backward compatibility.
|
||||
(define-obsolete-function-alias
|
||||
'vc-workfile-version 'vc-working-revision "23.1")
|
||||
(define-obsolete-function-alias
|
||||
'vc-previous-version 'vc-previous-revision "23.1")
|
||||
(defun vc-default-working-revision (backend file)
|
||||
(message
|
||||
"`working-revision' not found: using the old `workfile-version' instead")
|
||||
|
|
|
@ -175,6 +175,7 @@ If you want to force an empty list of arguments, use t."
|
|||
(filename (match-string 2)))
|
||||
(when state
|
||||
(setq result (cons (cons filename state) result)))))
|
||||
(kill-buffer (current-buffer))
|
||||
(funcall callback result buffer)))
|
||||
|
||||
(defun vc-svn-dir-status (dir callback buffer)
|
||||
|
|
25
lisp/vc.el
25
lisp/vc.el
|
@ -2824,12 +2824,16 @@ With prefix arg READ-SWITCHES, specify a value to override
|
|||
(defvar vc-status-process-buffer nil
|
||||
"The buffer used for the asynchronous call that computes the VC status.")
|
||||
|
||||
(defvar vc-status-crt-marked nil
|
||||
"The list of marked files before `vc-status-refresh'.")
|
||||
|
||||
(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)
|
||||
(set (make-local-variable 'vc-status-crt-marked) nil)
|
||||
(use-local-map vc-status-mode-map)
|
||||
(let ((buffer-read-only nil)
|
||||
(backend (vc-responsible-backend default-directory))
|
||||
|
@ -2846,17 +2850,38 @@ With prefix arg READ-SWITCHES, specify a value to override
|
|||
(defun vc-update-vc-status-buffer (entries buffer)
|
||||
(with-current-buffer buffer
|
||||
(when entries
|
||||
;; Insert the entries we got into the ewoc.
|
||||
(dolist (entry entries)
|
||||
(ewoc-enter-last vc-status
|
||||
(vc-status-create-fileinfo (cdr entry) (car entry))))
|
||||
;; If we had marked items before the refresh, try mark them here.
|
||||
;; XXX: there should be a better way to do this...
|
||||
(when vc-status-crt-marked
|
||||
(ewoc-map
|
||||
(lambda (arg)
|
||||
(when (member (vc-status-fileinfo->name arg) vc-status-crt-marked)
|
||||
(setf (vc-status-fileinfo->marked arg) t)))
|
||||
vc-status))
|
||||
(ewoc-goto-node vc-status (ewoc-nth vc-status 0)))
|
||||
;; We are done, turn of the in progress message in the mode-line.
|
||||
(setq mode-line-process nil)))
|
||||
|
||||
(defun vc-status-refresh ()
|
||||
"Refresh the contents of the VC status buffer."
|
||||
(interactive)
|
||||
|
||||
;; This is not very efficient; ewoc could use a new function here.
|
||||
;; We clear the ewoc, but remember the marked files so that we can
|
||||
;; mark them after the refresh is done.
|
||||
(setq vc-status-crt-marked
|
||||
(mapcar
|
||||
(lambda (elem)
|
||||
(vc-status-fileinfo->name elem))
|
||||
(ewoc-collect
|
||||
vc-status
|
||||
(lambda (crt) (vc-status-fileinfo->marked crt)))))
|
||||
(ewoc-filter vc-status (lambda (node) nil))
|
||||
|
||||
(let ((backend (vc-responsible-backend default-directory)))
|
||||
(vc-set-mode-line-busy-indicator)
|
||||
;; Call the dir-status backend function. dir-status is supposed to
|
||||
|
|
Loading…
Add table
Reference in a new issue