branch: elpa/dirvish commit b760209f40ab2c429dc68080dc132000cb35003f Author: Alex Lu <hellosimon1...@hotmail.com> Commit: Alex Lu <hellosimon1...@hotmail.com>
fix(side): `run-with-timer` is still needed on auto jumper (#264) --- extensions/dirvish-side.el | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/extensions/dirvish-side.el b/extensions/dirvish-side.el index 2777fb7a74..3c9a55bc64 100644 --- a/extensions/dirvish-side.el +++ b/extensions/dirvish-side.el @@ -98,23 +98,29 @@ filename until the project root when opening a side session." (defun dirvish-side--auto-jump () "Select latest buffer file in the visible `dirvish-side' session." - (when-let* (((not dirvish--this)) - (dir (or (dirvish--get-project-root) default-directory)) - (win (dirvish-side--session-visible-p)) - (dv (with-selected-window win (dirvish-curr))) - ((not (active-minibuffer-window))) - (file buffer-file-name)) - (with-selected-window win - (when dir - (setq dirvish--this dv) - (let (buffer-list-update-hook) (dirvish-find-entry-a dir)) - (if dirvish-side-auto-expand (dirvish-subtree-expand-to file) - (dired-goto-file file)) - (dirvish-prop :cus-header 'dirvish-side-header) - (dirvish--setup-mode-line (car (dv-layout dv))) - (dirvish-update-body-h)) - (setq dirvish--this nil)) - (set-window-dedicated-p win t))) + ;; some commands such as `consult-buffer' that uses minibuffer somehow causes + ;; a delay on `current-buffer' updating, so we wait for 0.01s here to ensure + ;; the latest buffer is correctly grabbed. (#264) + (run-with-timer + 0.01 nil + (lambda () + (when-let* (((not dirvish--this)) + (dir (or (dirvish--get-project-root) default-directory)) + (win (dirvish-side--session-visible-p)) + (dv (with-selected-window win (dirvish-curr))) + ((not (active-minibuffer-window))) + (file buffer-file-name)) + (with-selected-window win + (when dir + (setq dirvish--this dv) + (let (buffer-list-update-hook) (dirvish-find-entry-a dir)) + (if dirvish-side-auto-expand (dirvish-subtree-expand-to file) + (dired-goto-file file)) + (dirvish-prop :cus-header 'dirvish-side-header) + (dirvish--setup-mode-line (car (dv-layout dv))) + (dirvish-update-body-h)) + (setq dirvish--this nil)) + (set-window-dedicated-p win t))))) (defun dirvish-side--new (path) "Open a side session in PATH." @@ -170,7 +176,7 @@ If called with \\[universal-arguments], prompt for PATH, otherwise it defaults to `project-current'." (interactive (list (and current-prefix-arg (read-directory-name "Open sidetree: ")))) - (let ((fullframep (when-let ((dv (dirvish-curr))) (car (dv-layout dv)))) + (let ((fullframep (when-let* ((dv (dirvish-curr))) (car (dv-layout dv)))) (visible (dirvish-side--session-visible-p)) (path (or path (dirvish--get-project-root) default-directory))) (cond (fullframep (user-error "Can not create side session here"))