feat(dired): open dirvish sidebar w/ '<leader> o {p,P}'

A new alternative to neotree and treemacs.
This commit is contained in:
Henrik Lissner 2024-09-09 18:49:38 -04:00
parent 07eae64509
commit 47c8c905b8
No known key found for this signature in database
GPG key ID: B60957CA074D39A3
3 changed files with 40 additions and 0 deletions

View file

@ -249,6 +249,9 @@
(:when (modulep! :ui treemacs)
:desc "Project sidebar" "p" #'+treemacs/toggle
:desc "Find file in project rsidebar" "P" #'treemacs-find-file)
(:when (modulep! :emacs dired +dirvish)
:desc "Project sidebar" "p" #'dirvish-side
:desc "Find file in project sidebar" "P" #'+dired/dirvish-side-and-follow)
(:when (modulep! :term shell)
:desc "Toggle shell popup" "t" #'+shell/toggle
:desc "Open shell here" "T" #'+shell/here)

View file

@ -697,6 +697,9 @@
(:when (modulep! :ui treemacs)
:desc "Project sidebar" "p" #'+treemacs/toggle
:desc "Find file in project sidebar" "P" #'treemacs-find-file)
(:when (modulep! :emacs dired +dirvish)
:desc "Project sidebar" "p" #'dirvish-side
:desc "Find file in project sidebar" "P" #'+dired/dirvish-side-and-follow)
(:when (modulep! :term shell)
:desc "Toggle shell popup" "t" #'+shell/toggle
:desc "Open shell here" "T" #'+shell/here)

View file

@ -13,3 +13,37 @@
(and (not (file-remote-p default-directory))
(locate-dominating-file "." ".git")
(dired-git-info-mode 1)))
;;;###autoload
(defun +dired/dirvish-side-or-follow (&optional arg)
"Open `dirvish-side' then find the currently focused file.
If dirvish is already open, remotely jump to the file in Dirvish.
If given the prefix ARG, then prompt for a directory (replaces existing Dirvish
sidebars)."
(interactive "P")
(save-selected-window
(let ((win (dirvish-side--session-visible-p)))
(when (and win arg)
(with-selected-window win
(dirvish-quit))
(setq win nil))
(unless win
(call-interactively #'dirvish-side))
(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)))))
(select-window (dirvish-side--session-visible-p)))