From 6fe5c21c723c1ebf1d4df911761d14c47970262f Mon Sep 17 00:00:00 2001 From: Andrii Kolomoiets Date: Fri, 19 Jun 2020 02:21:55 +0300 Subject: [PATCH] project-switch-to-buffer: Use the "other buffer" as default * 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 | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index 7a41df614b9..89dcee97fa9 100644 --- a/lisp/progmodes/project.el +++ b/lisp/progmodes/project.el @@ -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\\*") -- 2.39.5