]> git.eshelyaron.com Git - emacs.git/commitdiff
project-switch-to-buffer: Use the "other buffer" as default
authorAndrii Kolomoiets <andreyk.mad@gmail.com>
Thu, 18 Jun 2020 23:21:55 +0000 (02:21 +0300)
committerDmitry Gutov <dgutov@yandex.ru>
Fri, 19 Jun 2020 00:44:01 +0000 (03:44 +0300)
* lisp/progmodes/project.el
(project-switch-to-buffer): Pass the "other buffer" as DEF to
read-buffer if it belongs to the current project (bug#41879).

lisp/progmodes/project.el

index 7a41df614b9f9aa06b860369feb2170913911a00..89dcee97fa9306a23bbef32e1a35caa8a784d307 100644 (file)
@@ -777,14 +777,24 @@ Arguments the same as in `compile'."
 (defun project-switch-to-buffer ()
   "Switch to a buffer in the current project."
   (interactive)
-  (let ((root (project-root (project-current t))))
+  (let* ((root (project-root (project-current t)))
+         (current-buffer (current-buffer))
+         (other-buffer (other-buffer current-buffer))
+         (other-name (buffer-name other-buffer))
+         (predicate
+          (lambda (buffer)
+            ;; BUFFER is an entry (BUF-NAME . BUF-OBJ) of Vbuffer_alist.
+            (and (not (eq (cdr buffer) current-buffer))
+                 (when-let ((file (buffer-local-value 'default-directory
+                                                      (cdr buffer))))
+                   (file-in-directory-p file root))))))
     (switch-to-buffer
      (read-buffer
-      "Switch to buffer: " nil t
-      (lambda (buffer)
-        ;; BUFFER is an entry (BUF-NAME . BUF-OBJ) of Vbuffer_alist.
-        (when-let ((file (buffer-file-name (cdr buffer))))
-          (file-in-directory-p file root)))))))
+      "Switch to buffer: "
+      (when (funcall predicate (cons other-name other-buffer))
+        other-name)
+      t
+      predicate))))
 
 (defcustom project-kill-buffers-skip-conditions
   '("\\*Help\\*")