branch: elpa/dirvish
commit 254dc73d85f0d8973e0220d1c4b4a81fa4cde874
Author: Alex Lu <[email protected]>
Commit: Alex Lu <[email protected]>
fix: `dirvish-toggle-subtree` requires positive window fringe (#311)
The error occurs when user executed `(set-fringe-style 0)` or uses 0-pixel
fringes in some way.
Closes: #311
---
dirvish.el | 21 ++++++++++++++-------
extensions/dirvish-vc.el | 12 ++----------
2 files changed, 16 insertions(+), 17 deletions(-)
diff --git a/dirvish.el b/dirvish.el
index e3ba547e37..cac77fc7bb 100644
--- a/dirvish.el
+++ b/dirvish.el
@@ -130,7 +130,7 @@ The valid value are:
"Like `dirvish-use-mode-line', but for header line."
:group 'dirvish :type 'symbol)
-(defcustom dirvish-mode-line-height 30
+(defcustom dirvish-mode-line-height 21
"Height of Dirvish's mode line.
The value should be a cons cell (H-WIN . H-FRAME), where H-WIN
and H-FRAME represent the height of mode line in single window
@@ -139,7 +139,7 @@ integer INT, it is seen as a shorthand for (INT . INT)."
:group 'dirvish
:type '(choice integer (cons integer integer)))
-(defcustom dirvish-header-line-height 30
+(defcustom dirvish-header-line-height '(25 . 35)
"Like `dirvish-mode-line-height', but for header line."
:type '(choice integer (cons integer integer)))
@@ -171,7 +171,7 @@ Set it to nil to use the default `mode-line-format'."
"Like `dirvish-mode-line-format', but for header line ."
:group 'dirvish :type 'plist)
-(defcustom dirvish-mode-line-bar-image-width 2
+(defcustom dirvish-mode-line-bar-image-width 3
"Pixel width of the leading bar image in both mode-line and header-line.
If the value is 0, the bar image is hidden."
:group 'dirvish :type 'integer)
@@ -197,6 +197,10 @@ Works all the same as `dirvish-hide-details' but for
cursor."
:type '(choice (boolean :tag "Apply to all Dirvish buffers")
(repeat :tag "Apply to a list of buffer types: 'dired,
'dirvish, 'dirvish-fd or 'dirvish-side" symbol)))
+(defcustom dirvish-window-fringe 3
+ "Root window's left fringe in pixels."
+ :group 'dirvish :type 'natnum)
+
(defcustom dirvish-preview-dired-sync-omit nil
"If non-nil, `dired' preview buffers sync `dired-omit-mode' from root window.
Notice that it only take effects on the built-in `dired' preview dispatcher."
@@ -602,8 +606,9 @@ ARGS is a list of keyword arguments for `dirvish' struct."
(defun dirvish--clear-session (dv &optional from-quit)
"Reset DV's slot and kill its buffers.
FROM-QUIT is used to signify the calling command."
- (let ((index (cdr (dv-index dv))) (frg (dirvish-prop :fringe)))
- (when frg (set-window-fringes nil (frame-parameter nil 'left-fringe)))
+ (let ((index (cdr (dv-index dv))))
+ (set-window-fringes
+ nil (frame-parameter nil 'left-fringe) (frame-parameter nil
'right-fringe))
(if (not (dv-curr-layout dv))
(cl-loop for (_d . b) in (dv-roots dv)
when (and (not (get-buffer-window b))
@@ -1293,7 +1298,8 @@ LEVEL is the depth of current window."
(window-parameters . ((no-other-window . t))))
for b = (dirvish--create-parent-buffer dv parent current level)
for w = (display-buffer b `(dirvish--display-buffer . ,args)) do
- (with-selected-window w (set-window-dedicated-p w t))))))
+ (with-selected-window w
+ (set-window-fringes w 1 1) (set-window-dedicated-p w t))))))
(defun dirvish--init-special-buffers (dv)
"Initialize special buffers for DV."
@@ -1387,12 +1393,13 @@ INHIBIT-SETUP is non-nil."
(when layout (dirvish--init-special-buffers dv))
(dirvish--setup-mode-line dv)
(when w-order (let ((ignore-window-parameters t)) (delete-other-windows)))
- (dirvish-prop :fringe nil)
;; if called from `dirvish-side--auto-jump', do nothing
(when (eq (dv-type dv) 'default) (dirvish--change-selected))
(when-let* ((fixed (dv-size-fixed dv))) (setq window-size-fixed fixed))
(when (or (dv-curr-layout dv) (dv-dedicated dv))
(set-window-dedicated-p nil t))
+ ;; ensure a positive fringe on both sides for `dirvish-subtree' (#311)
+ (set-window-fringes nil (1+ dirvish-window-fringe) 1)
(dolist (pane w-order)
(let* ((buf (dirvish--special-buffer pane dv (eq pane 'preview)))
(args (alist-get pane w-args))
diff --git a/extensions/dirvish-vc.el b/extensions/dirvish-vc.el
index 18c4603eb3..309df01736 100644
--- a/extensions/dirvish-vc.el
+++ b/extensions/dirvish-vc.el
@@ -21,10 +21,6 @@
(defclass dirvish-vc-preview (transient-switches) ()
"Class for dirvish vc-* preview dispatchers.")
-(defcustom dirvish-vc-state-fringe 2
- "The width of the fringe used to display the vc state indicator."
- :group 'dirvish :type 'integer)
-
(defcustom dirvish-vc-state-face-alist
'((up-to-date . nil)
(edited . dirvish-vc-edited-state)
@@ -176,13 +172,9 @@ It is called when `:vc-backend' is included in
DIRVISH-PROPs while
(dirvish-define-attribute vc-state
"The version control state at left fringe.
This attribute only works on graphic displays."
- ;; Avoid setting fringes repeatedly
- :when (prog1 t (unless (dirvish-prop :fringe)
- (dirvish-prop :fringe (car (window-fringes)))
- (set-window-fringes nil dirvish-vc-state-fringe)))
+ :when (and (symbolp (dirvish-prop :vc-backend)) (not (dirvish-prop :remote)))
(let ((ov (make-overlay l-beg l-beg)))
- (when-let* (((symbolp (dirvish-prop :vc-backend)))
- (state (dirvish-attribute-cache f-name :vc-state))
+ (when-let* ((state (dirvish-attribute-cache f-name :vc-state))
(face (alist-get state dirvish-vc-state-face-alist))
(display `(left-fringe dirvish-vc-gutter . ,(cons face nil))))
(overlay-put ov 'before-string (propertize " " 'display display)))