{"thread":{"id":"4947","subject":"[PATCH 3/4] git.el: Try to reuse an existing buffer when running git-status.","startedAt":"2006-07-22T13:39:53Z","lastAt":"2006-07-22T13:39:53Z","messageCount":1,"participants":["Alexandre Julliard"],"isPatch":true,"patchVersion":1,"patchTotal":4},"messages":[{"id":"23993","messageId":"87y7ulg3me.fsf@wine.dyndns.org","threadId":"4947","inReplyTo":null,"subject":"[PATCH 3/4] git.el: Try to reuse an existing buffer when running git-status.","fromName":"Alexandre Julliard","fromEmail":"julliard@winehq.org","sentAt":"2006-07-22T13:39:53Z","receivedAt":"2006-07-22T13:39:53Z","isPatch":true,"sender":{"key":"julliard@winehq.org","avatar":null},"body":"By default, running git-status again will now reuse an existing buffer\nthat displays the same directory. The old behavior of always creating\na new buffer can be obtained by customizing the git-reuse-status-buffer\noption.\n\nSigned-off-by: Alexandre Julliard <julliard@winehq.org>\n---\n contrib/emacs/git.el |   24 +++++++++++++++++++++++-\n 1 files changed, 23 insertions(+), 1 deletions(-)\n\ndiff --git a/contrib/emacs/git.el b/contrib/emacs/git.el\nindex 5837471..92cb2b9 100644\n--- a/contrib/emacs/git.el\n+++ b/contrib/emacs/git.el\n@@ -83,6 +83,12 @@ (defcustom git-append-signed-off-by nil\n   :group 'git\n   :type 'boolean)\n \n+(defcustom git-reuse-status-buffer t\n+  \"Whether `git-status' should try to reuse an existing buffer\n+if there is already one that displays the same directory.\"\n+  :group 'git\n+  :type 'boolean)\n+\n (defcustom git-per-dir-ignore-file \".gitignore\"\n   \"Name of the per-directory ignore file.\"\n   :group 'git\n@@ -1003,12 +1009,28 @@ Commands:\n   (set (make-local-variable 'list-buffers-directory) default-directory)\n   (run-hooks 'git-status-mode-hook)))\n \n+(defun git-find-status-buffer (dir)\n+  \"Find the git status buffer handling a specified directory.\"\n+  (let ((list (buffer-list))\n+        (fulldir (expand-file-name dir))\n+        found)\n+    (while (and list (not found))\n+      (let ((buffer (car list)))\n+        (with-current-buffer buffer\n+          (when (and list-buffers-directory\n+                     (string-equal fulldir (expand-file-name list-buffers-directory))\n+                     (string-match \"\\\\*git-status\\\\*$\" (buffer-name buffer)))\n+            (setq found buffer))))\n+      (setq list (cdr list)))\n+    found))\n+\n (defun git-status (dir)\n   \"Entry point into git-status mode.\"\n   (interactive \"DSelect directory: \")\n   (setq dir (git-get-top-dir dir))\n   (if (file-directory-p (concat (file-name-as-directory dir) \".git\"))\n-      (let ((buffer (create-file-buffer (expand-file-name \"*git-status*\" dir))))\n+      (let ((buffer (or (and git-reuse-status-buffer (git-find-status-buffer dir))\n+                        (create-file-buffer (expand-file-name \"*git-status*\" dir)))))\n         (switch-to-buffer buffer)\n         (cd dir)\n         (git-status-mode)\n-- \n1.4.2.rc1.ge7a0\n\n-- \nAlexandre Julliard\njulliard@winehq.org\n"}]}