diff options
author | Alexandre Julliard <julliard@winehq.org> | 2006-07-22 15:39:53 +0200 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-07-23 23:36:03 -0700 |
commit | 73389f12bf0ef39820685a322527fab549676f33 (patch) | |
tree | e4fb5e58259d04b3ee2dd4cf0777f95078f87111 | |
parent | git.el: Prepend a slash to the file name when adding to .gitignore. (diff) | |
download | tgif-73389f12bf0ef39820685a322527fab549676f33.tar.xz |
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 <julliard@winehq.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r-- | contrib/emacs/git.el | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/contrib/emacs/git.el b/contrib/emacs/git.el index 5837471375..92cb2b90fe 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) (git-status-mode) |