Fix new workspace & file prompt on project switch

Properly initialize a new workspace, switch to the fallback buffer
(scratch/dash), update its default-directory to the project root, and
fuzzy-prompt for a file to open.
This commit is contained in:
Henrik Lissner 2017-08-06 18:38:19 +02:00
parent 85c28444b3
commit 6d44cec666
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
2 changed files with 16 additions and 9 deletions

View file

@ -459,12 +459,6 @@ the workspace and move to the next."
(+workspace/new) (+workspace/new)
(set-frame-parameter frame 'assoc-persp (+workspace-current-name))) (set-frame-parameter frame 'assoc-persp (+workspace-current-name)))
;;;###autoload
(defun +workspaces|create-project-workspace ()
"Create a new workspace when switching project with `projectile'."
(when persp-mode
(+workspace-switch (projectile-project-name) t)))
;;;###autoload ;;;###autoload
(defun +workspaces|delete-associated-workspace-maybe (frame) (defun +workspaces|delete-associated-workspace-maybe (frame)
"Delete workspace associated with current frame IF it has no real buffers." "Delete workspace associated with current frame IF it has no real buffers."
@ -480,3 +474,15 @@ the workspace and move to the next."
(when (doom-real-buffer-list) (when (doom-real-buffer-list)
(apply orig-fn args)) (apply orig-fn args))
t) t)
;;;###autoload
(defun +workspaces*switch-project-by-name (orig-fn &rest args)
"Switch to a project and prompt for a file to open.
Ensures the scratch (or dashboard) buffers are CDed into the project's root."
(when persp-mode
(+workspace-switch (car args) t)
(with-current-buffer (switch-to-buffer (doom-fallback-buffer))
(setq default-directory (car args))))
(apply orig-fn args))

View file

@ -46,11 +46,12 @@ renamed.")
(define-key persp-mode-map [remap delete-window] #'+workspace/close-window-or-workspace) (define-key persp-mode-map [remap delete-window] #'+workspace/close-window-or-workspace)
;; per-frame workspaces ;; per-frame and per-project workspaces
(setq persp-init-new-frame-behaviour-override nil (setq persp-init-new-frame-behaviour-override nil
persp-interactive-init-frame-behaviour-override #'+workspace-on-new-frame) persp-interactive-init-frame-behaviour-override #'+workspace-on-new-frame
(add-hook 'projectile-before-switch-project-hook #'+workspaces|create-project-workspace) projectile-switch-project-action #'projectile-find-file)
(add-hook 'delete-frame-functions #'+workspaces|delete-associated-workspace-maybe) (add-hook 'delete-frame-functions #'+workspaces|delete-associated-workspace-maybe)
(advice-add #'projectile-switch-project-by-name :around #'+workspaces*switch-project-by-name)
;; only auto-save when real buffers are present ;; only auto-save when real buffers are present
(advice-add #'persp-asave-on-exit :around #'+workspaces*autosave-real-buffers) (advice-add #'persp-asave-on-exit :around #'+workspaces*autosave-real-buffers)