path: root/contrib/emacs/git.el
diff options
authorAlexandre Julliard <>2006-07-22 13:39:53 (GMT)
committerJunio C Hamano <>2006-07-24 06:36:03 (GMT)
commit73389f12bf0ef39820685a322527fab549676f33 (patch)
treee4fb5e58259d04b3ee2dd4cf0777f95078f87111 /contrib/emacs/git.el
parent9f56a7fda940caa7d4a1b06947481b5157510557 (diff)
git.el: Try to reuse an existing buffer when running git-status.
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 <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'contrib/emacs/git.el')
1 files changed, 23 insertions, 1 deletions
diff --git a/contrib/emacs/git.el b/contrib/emacs/git.el
index 5837471..92cb2b9 100644
--- a/contrib/emacs/git.el
+++ b/contrib/emacs/git.el
@@ -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
@@ -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)