branch: elpa/dirvish
commit 24e612c39de520b713cf8dc1027cd934daf9d28e
Author: Alex Lu <[email protected]>
Commit: Alex Lu <[email protected]>
fix(core): respect `dirvish-use-header/mode-line`
This commit merges scattered mode-line/header-line settings to
dirvish--setup-mode-line, and use the default mode-line/header-line when
dirvish-use-mode/header-line user option is set to nil.
Hope it makes sense.
---
dirvish.el | 64 +++++++++++++++++++++++++++-------------------
extensions/dirvish-side.el | 1 -
2 files changed, 37 insertions(+), 28 deletions(-)
diff --git a/dirvish.el b/dirvish.el
index a8e608a2ba..ca11586491 100644
--- a/dirvish.el
+++ b/dirvish.el
@@ -510,9 +510,6 @@ ARGS is a list of keyword arguments for `dirvish' struct."
(not (with-current-buffer b server-buffer-clients)))
do (kill-buffer b)
finally (setf (dv-index dv) (car (dv-roots dv))))
- (when dirvish-use-header-line
- (with-current-buffer index
- (setq header-line-format dirvish--header-line-fmt)))
(cl-loop for (_d . b) in (dv-roots dv)
when (not (eq b index)) do (kill-buffer b))
(when-let* ((wconf (dv-winconf dv))) (set-window-configuration wconf)))
@@ -762,9 +759,9 @@ When FORCE, ensure the preview get refreshed."
(dirvish-debounce nil
(if (not (car (dv-layout dv)))
(and (< emacs-major-version 29) (force-mode-line-update))
- (when (and dirvish-use-mode-line (buffer-live-p f-buf))
+ (when (buffer-live-p f-buf)
(with-current-buffer f-buf (force-mode-line-update)))
- (when (and dirvish-use-header-line (buffer-live-p h-buf))
+ (when (buffer-live-p h-buf)
(with-current-buffer h-buf (force-mode-line-update)))
(when (or force (not (equal last-index filename)))
(dirvish--preview-update dv filename))))))))
@@ -967,7 +964,8 @@ LEFT and RIGHT are segments aligned to left/right
respectively.
If HEADER, set the `dirvish--header-line-fmt' instead."
`((:eval
(let* ((dv (dirvish-curr))
- (buf (and (car (dv-layout dv)) (cdr (dv-index dv))))
+ (fullframe-p (car (dv-layout dv)))
+ (buf (cdr (dv-index dv)))
(expand
(lambda (segs)
(cl-loop for s in segs collect
@@ -1026,14 +1024,28 @@ use `car'. If HEADER, use `dirvish-header-line-height'
instead."
(setq-local meow-cursor-type-motion nil
meow-cursor-type-default nil)))))
-(defun dirvish--setup-mode-line (layout)
- "Setup the mode/header line according to LAYOUT."
- (setq mode-line-format
- (unless (or layout (not dirvish-use-mode-line))
- dirvish--mode-line-fmt)
- header-line-format
- (cond ((or layout (not dirvish-use-header-line)) nil)
- (t (or (dirvish-prop :cus-header) dirvish--header-line-fmt)))))
+(defun dirvish--setup-mode-line (dv)
+ "Setup the mode/header line for dirvish DV."
+ (let* ((idx-buf (cdr (dv-index dv)))
+ (hl (or (dirvish-prop :cus-header) dirvish--header-line-fmt))
+ (ml dirvish--mode-line-fmt)
+ (fullframe-p (car (dv-layout dv))))
+ (cond ; setup `header-line-format'
+ ((and fullframe-p (not dirvish-use-header-line)))
+ (fullframe-p
+ (with-current-buffer idx-buf (setq header-line-format nil))
+ (with-current-buffer (dirvish--util-buffer 'header dv)
+ (setq header-line-format hl)))
+ (dirvish-use-header-line
+ (with-current-buffer idx-buf (setq header-line-format hl))))
+ (cond ; setup `mode-line-format'
+ ((and fullframe-p (not dirvish-use-mode-line)))
+ (fullframe-p
+ (with-current-buffer idx-buf (setq mode-line-format nil))
+ (with-current-buffer (dirvish--util-buffer 'footer dv)
+ (setq mode-line-format ml)))
+ (dirvish-use-mode-line
+ (with-current-buffer idx-buf (setq mode-line-format ml))))))
(defun dirvish-revert (&optional ignore-auto _noconfirm)
"Reread the Dirvish buffer.
@@ -1106,7 +1118,6 @@ LEVEL is the depth of current window."
(parent-dirs ())
(depth (or (caar (dv-layout dv)) 0))
(i 0))
- (dirvish--setup-mode-line (car (dv-layout dv)))
(when-let* ((fixed (nth 1 (dv-type dv)))) (setq window-size-fixed fixed))
(set-window-dedicated-p
nil (and (or (car (dv-layout dv)) (nth 2 (dv-type dv))) t))
@@ -1139,11 +1150,12 @@ LEVEL is the depth of current window."
(add-hook 'window-scroll-functions #'dirvish-apply-ansicolor-h nil t))
(with-current-buffer (dirvish--util-buffer 'header dv)
(dirvish-prop :dv (dv-name dv))
- (setq cursor-type nil window-size-fixed 'height mode-line-format nil))
+ (setq cursor-type nil window-size-fixed 'height
+ mode-line-format nil header-line-format nil))
(with-current-buffer (dirvish--util-buffer 'footer dv)
(dirvish-prop :dv (dv-name dv))
- (setq cursor-type nil window-size-fixed 'height)
- (setq header-line-format nil mode-line-format dirvish--mode-line-fmt)))
+ (setq cursor-type nil window-size-fixed 'height
+ mode-line-format nil header-line-format nil)))
(defsubst dirvish--dir-data-getter (dir)
"Script for DIR data retrieving."
@@ -1229,6 +1241,7 @@ Run `dirvish-setup-hook' afterwards when SETUP is
non-nil."
(w-order (and layout (dirvish--window-split-order))) util-windows)
(setq dirvish--selected-window (selected-window))
(dirvish--init-util-buffers dv)
+ (dirvish--setup-mode-line dv)
(when w-order (let ((ignore-window-parameters t)) (delete-other-windows)))
(dolist (pane w-order)
(let* ((buf (dirvish--util-buffer pane dv nil (eq pane 'preview)))
@@ -1238,15 +1251,12 @@ Run `dirvish-setup-hook' afterwards when SETUP is
non-nil."
(t (set-window-dedicated-p win t) (push win util-windows)))
(set-window-buffer win buf)))
(dirvish--create-parent-windows dv)
- (let ((h-fmt (or (dirvish-prop :cus-header) dirvish--header-line-fmt)))
- (with-current-buffer (dirvish--util-buffer 'header dv)
- (setq header-line-format h-fmt))
- (when (and (display-graphic-p) (> emacs-major-version 28))
- (let ((window-safe-min-height 0) (window-resize-pixelwise t))
- (dolist (win util-windows) (fit-window-to-buffer win 2 1))))
- (unless (dirvish-prop :cached)
- (dirvish-data-for-dir default-directory (current-buffer) t)
- (dirvish-prop :cached t)))
+ (when (and (display-graphic-p) (> emacs-major-version 28))
+ (let ((window-safe-min-height 0) (window-resize-pixelwise t))
+ (dolist (win util-windows) (fit-window-to-buffer win 2 1))))
+ (unless (dirvish-prop :cached)
+ (dirvish-data-for-dir default-directory (current-buffer) t)
+ (dirvish-prop :cached t))
(setq dirvish--this dv)))
(defun dirvish--reuse-or-create (path layout)
diff --git a/extensions/dirvish-side.el b/extensions/dirvish-side.el
index 6571ef761a..e2e64ebca2 100644
--- a/extensions/dirvish-side.el
+++ b/extensions/dirvish-side.el
@@ -118,7 +118,6 @@ filename until the project root when opening a side
session."
(if dirvish-side-auto-expand (dirvish-subtree-expand-to curr)
(dired-goto-file curr))
(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)))))