summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
Diffstat (limited to 'lisp')
-rw-r--r--lisp/progmodes/project.el22
1 files 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\\*")