diff options
author | Dmitry Gutov <dmitry@gutov.dev> | 2023-04-22 02:27:22 +0300 |
---|---|---|
committer | Dmitry Gutov <dmitry@gutov.dev> | 2023-04-22 02:27:34 +0300 |
commit | 4f3dae2b0d5fc43e5e2effa6d36544b6de2a43d8 (patch) | |
tree | 20601e6f857ecb67aa4af60d8784219369bfd971 | |
parent | 42def8422fdeb86054155a7d484db1f56ddf8e87 (diff) | |
download | emacs-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.el | 24 |
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) |