From e2f112f220db2b511471c02095e3a28f40d419fd Mon Sep 17 00:00:00 2001 From: Tomas Abrahamsson Date: Sat, 9 Aug 2008 18:30:58 +0200 Subject: Can now reuse an existing buffer displaying the same directory Imported and adapted from `git.el', gitsum can now reuse an existing buffer if there is one showing the same directory. This is useful if you forget to quit/kill the gitsum buffer and then run gitsum again. --- gitsum.el | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) (limited to 'gitsum.el') diff --git a/gitsum.el b/gitsum.el index 0815309..1ae5858 100644 --- a/gitsum.el +++ b/gitsum.el @@ -11,6 +11,12 @@ (eval-when-compile (require 'cl)) +(defcustom gitsum-reuse-buffer t + "Whether `gitsum' should try to reuse an existing buffer +if there is already one that displays the same directory." + :group 'git + :type 'boolean) + (easy-mmode-defmap gitsum-diff-mode-shared-map '(("A" . gitsum-amend) ("c" . gitsum-commit) @@ -167,13 +173,32 @@ A numeric argument serves as a repeat count." (when marked (gitsum-refresh (mapconcat 'identity marked " "))))) +(defun gitsum-find-buffer (dir) + "Find the gitsum 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)) + (eq major-mode 'gitsum-diff-mode)) + (setq found buffer)))) + (setq list (cdr list))) + found)) + (defun gitsum () "Entry point into gitsum-diff-mode." (interactive) - (switch-to-buffer (generate-new-buffer "*gitsum*")) - (gitsum-diff-mode) - (set (make-local-variable 'list-buffers-directory) default-directory) - (gitsum-refresh)) + (let* ((dir default-directory) + (buffer (or (and gitsum-reuse-buffer (gitsum-find-buffer dir)) + (generate-new-buffer "*gitsum*")))) + (switch-to-buffer buffer) + (gitsum-diff-mode) + (set (make-local-variable 'list-buffers-directory) dir) + (gitsum-refresh))) ;; viper compatible (eval-after-load "viper" -- cgit 1.4.1