summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Gutov <dmitry@gutov.dev>2023-04-22 02:27:22 +0300
committerDmitry Gutov <dmitry@gutov.dev>2023-04-22 02:27:34 +0300
commit4f3dae2b0d5fc43e5e2effa6d36544b6de2a43d8 (patch)
tree20601e6f857ecb67aa4af60d8784219369bfd971
parent42def8422fdeb86054155a7d484db1f56ddf8e87 (diff)
downloademacs-4f3dae2b0d5fc43e5e2effa6d36544b6de2a43d8.tar.gz
emacs-4f3dae2b0d5fc43e5e2effa6d36544b6de2a43d8.tar.bz2
emacs-4f3dae2b0d5fc43e5e2effa6d36544b6de2a43d8.zip
project--read-project-buffer: Fixup default-directory if needed
* lisp/progmodes/project.el (project--read-project-buffer): Make sure that when the read buffer is new, its default-directory belongs to the project (bug#62974).
-rw-r--r--lisp/progmodes/project.el24
1 files changed, 17 insertions, 7 deletions
diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index 04c67710d71..7c51778d5d4 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -1327,13 +1327,23 @@ general form of conditions."
(and (memq (cdr buffer) buffers)
(not
(project--buffer-check
- (cdr buffer) project-ignore-buffer-conditions))))))
- (read-buffer
- "Switch to buffer: "
- (when (funcall predicate (cons other-name other-buffer))
- other-name)
- nil
- predicate)))
+ (cdr buffer) project-ignore-buffer-conditions)))))
+ (buffer (read-buffer
+ "Switch to buffer: "
+ (when (funcall predicate (cons other-name other-buffer))
+ other-name)
+ nil
+ predicate)))
+ ;; XXX: This check hardcodes the default buffer-belonging relation
+ ;; which `project-buffers' is allowed to override. Straighten
+ ;; this up sometime later. Or not. Since we can add a method
+ ;; `project-contains-buffer-p', but a separate method to create a
+ ;; new project buffer seems too much.
+ (if (or (get-buffer buffer)
+ (file-in-directory-p default-directory (project-root pr)))
+ buffer
+ (let ((default-directory (project-root pr)))
+ (get-buffer-create buffer)))))
;;;###autoload
(defun project-switch-to-buffer (buffer-or-name)