refactor(dired): dirvish-hide-details

Prior to this, I used window-width to determine whether file details
should be hidden, but there was a jarring delay on `dirvish-setup-hook`
that made the effect look awful (especially when walking up and down
file trees).

This changes `dirvish-hide-details` to accept a list of contexts where
it should be enabled, which I think is more elegant. Of course,
`dirvish-hide-details` will fall back on old behavior if set to `t` or
`nil`.

I'll consider upstreaming it later (and perhaps doing similar for
`dirvish-hide-cursor`).

Ref: #6760
This commit is contained in:
Henrik Lissner 2024-08-19 02:06:17 -04:00
parent d4ad14b75d
commit ddfb0cc3cc
No known key found for this signature in database
GPG key ID: B60957CA074D39A3

View file

@ -105,17 +105,27 @@ Fixes #3939: unsortable dired entries on Windows."
(setq dirvish-subtree-always-show-state t)
(appendq! dirvish-attributes '(nerd-icons subtree-state)))
;; HACK: Doom will treat an integer value for `dirvish-hide-details' to mean
;; hide file/dir details if window is less than N characters wide (e.g. for
;; side windows or small full-window layouts).
(setq dirvish-hide-details 50)
;; TODO: Proc this hook sooner. The delay on `dirvish-setup-hook' is jarring.
(add-hook! 'dirvish-setup-hook
(defun +dired-hide-details-in-side-mode-h ()
(when (integerp dirvish-hide-details)
(dired-hide-details-mode
(if (< (window-width dirvish--selected-window) dirvish-hide-details)
+1 -1)))))
;; HACK: Makes `dirvish-hide-details' accept a list of symbols to instruct
;; Dirvish in what contexts `dirvish-hide-details' should be enabled. The
;; accepted values are:
;; - `dired': when opening a directory directly or w/o Dirvish's full UI.
;; - `dirvish': when opening full-frame Dirvish.
;; - `dirvish-side': when opening Dirvish in the sidebar.
;; REVIEW: Upstream this behavior later. (Maybe with similar treatment for
;; `dirvish-hide-cursor'?)
(setq dirvish-hide-details '(dirvish dirvish-side))
(defadvice! +dired--hide-details-maybe-a (fn &rest args)
:around #'dirvish-init-dired-buffer
(let ((dirvish-hide-details
(if (listp dirvish-hide-details)
(cond ((if dirvish--this (memq 'side (dv-type dirvish--this)))
(memq 'dirvish-side dirvish-hide-details))
((or (null dirvish--this)
(null (car (dv-layout dirvish--this))))
(memq 'dired dirvish-hide-details))
((memq 'dirvish dirvish-hide-details)))
dirvish-hide-details)))
(apply fn args)))
(when (modulep! :ui tabs)
(after! centaur-tabs