Skip to content

Commit

Permalink
git.el: Try to reuse an existing buffer when running git-status.
Browse files Browse the repository at this point in the history
By default, running git-status again will now reuse an existing buffer
that displays the same directory. The old behavior of always creating
a new buffer can be obtained by customizing the git-reuse-status-buffer
option.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Alexandre Julliard authored and Junio C Hamano committed Jul 24, 2006
1 parent 9f56a7f commit 73389f1
Showing 1 changed file with 23 additions and 1 deletion.
24 changes: 23 additions & 1 deletion contrib/emacs/git.el
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,12 @@ then to `add-log-mailing-address' and then to `user-mail-address'."
:group 'git
:type 'boolean)

(defcustom git-reuse-status-buffer t
"Whether `git-status' should try to reuse an existing buffer
if there is already one that displays the same directory."
:group 'git
:type 'boolean)

(defcustom git-per-dir-ignore-file ".gitignore"
"Name of the per-directory ignore file."
:group 'git
Expand Down Expand Up @@ -1003,12 +1009,28 @@ Commands:
(set (make-local-variable 'list-buffers-directory) default-directory)
(run-hooks 'git-status-mode-hook)))

(defun git-find-status-buffer (dir)
"Find the git status buffer handling a specified directory."
(let ((list (buffer-list))
(fulldir (expand-file-name dir))
found)
(while (and list (not found))
(let ((buffer (car list)))
(with-current-buffer buffer
(when (and list-buffers-directory
(string-equal fulldir (expand-file-name list-buffers-directory))
(string-match "\\*git-status\\*$" (buffer-name buffer)))
(setq found buffer))))
(setq list (cdr list)))
found))

(defun git-status (dir)
"Entry point into git-status mode."
(interactive "DSelect directory: ")
(setq dir (git-get-top-dir dir))
(if (file-directory-p (concat (file-name-as-directory dir) ".git"))
(let ((buffer (create-file-buffer (expand-file-name "*git-status*" dir))))
(let ((buffer (or (and git-reuse-status-buffer (git-find-status-buffer dir))
(create-file-buffer (expand-file-name "*git-status*" dir)))))
(switch-to-buffer buffer)
(cd dir)
(git-status-mode)
Expand Down

0 comments on commit 73389f1

Please sign in to comment.