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"))

Reply via email to