From ddfb0cc3cc4326e72efb6db84c95eeb1401c7fc2 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Mon, 19 Aug 2024 02:06:17 -0400 Subject: [PATCH] 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 --- modules/emacs/dired/config.el | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/modules/emacs/dired/config.el b/modules/emacs/dired/config.el index e237b0c7d..744598a36 100644 --- a/modules/emacs/dired/config.el +++ b/modules/emacs/dired/config.el @@ -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