branch: elpa/dirvish
commit 250768fa040293b04fc74149cc253d3c243a5f7e
Author: Alex Lu <hellosimon1...@hotmail.com>
Commit: Alex Lu <hellosimon1...@hotmail.com>

    perf(core): render icons in parent windows only once
---
 dirvish.el           | 20 +++++++++------
 docs/CUSTOMIZING.org | 71 ++++++++++++++++++++++++++++------------------------
 2 files changed, 51 insertions(+), 40 deletions(-)

diff --git a/dirvish.el b/dirvish.el
index 6ba41f1a8f..4aedeb414a 100644
--- a/dirvish.el
+++ b/dirvish.el
@@ -932,10 +932,9 @@ When the attribute does not exist, set it with BODY."
                          (remove-overlays pm pM ov t))
              finally
              (with-silent-modifications
-               (and (derived-mode-p '(dired-mode dirvish-directory-view-mode))
-                    (save-excursion
-                      (dirvish--render-attrs-1
-                       height remain (point) remote fns (if gui 0 2) hl 
ww)))))))
+               (save-excursion
+                 (dirvish--render-attrs-1
+                  height remain (point) remote fns (if gui 0 2) hl ww))))))
 
 (dirvish-define-attribute hl-line
   "Highlight current line.
@@ -1166,6 +1165,8 @@ LEVEL is the depth of current window."
                     (with-temp-buffer (dired-insert-directory dir flags)
                                       (buffer-string)))))
          (attrs (mapcar #'car (dv-attributes dv)))
+         (sudo (with-current-buffer (cdr (dv-index dv))
+                 (dirvish-prop :local-sudo)))
          (icon (cond ((memq 'all-the-icons attrs) '(all-the-icons))
                      ((memq 'nerd-icons attrs) '(nerd-icons))
                      ((memq 'vscode-icon attrs) '(vscode-icon)))))
@@ -1174,6 +1175,7 @@ LEVEL is the depth of current window."
       (dirvish-directory-view-mode)
       (dirvish-prop :dv (dv-id dv))
       (dirvish-prop :remote (file-remote-p dir))
+      (dirvish-prop :local-sudo sudo)
       (puthash dir str (dv-parent-hash dv))
       (let (buffer-read-only) (erase-buffer) (save-excursion (insert str)))
       (setq-local dired-subdir-alist (list (cons dir (point-min-marker))))
@@ -1265,8 +1267,11 @@ Dirvish sets `revert-buffer-function' to this function."
   (when-let* ((dv (dirvish-curr)) ((not (derived-mode-p 'wdired-mode)))
               (r-win (dv-root-window dv)) ((window-live-p r-win)))
     (when (dirvish--apply-hiding-p dirvish-hide-cursor) 
(dired-move-to-filename))
-    (dolist (w (window-list)) (unless (eq r-win w) (dirvish--render-attrs w))
-    (dirvish--render-attrs r-win))
+    (dolist (w (window-list))
+      (when (and (not (eq r-win w))
+                 (with-selected-window w (derived-mode-p 'dired-mode)))
+        (dirvish--render-attrs w)))
+    (dirvish--render-attrs r-win)
     (when-let* ((filename (dired-get-filename nil t)))
       (dirvish-prop :index (file-local-name filename)))))
 
@@ -1324,6 +1329,7 @@ Dirvish sets `revert-buffer-function' to this function."
                             (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
+               (dirvish--render-attrs w 'never) ; only render icon
                (with-selected-window w
                  (set-window-fringes w 1 1) (set-window-dedicated-p w t))))))
 
@@ -1509,7 +1515,7 @@ are killed and the Dired buffer(s) in the selected window 
are buried."
   (let* ((dir (or path default-directory))
          (fn (if dired-kill-when-opening-new-dired-buffer 'find-alternate-file
                'find-file))
-         (cur? (dirvish-curr)) ; can be non-default session, reuse it directly
+         (cur? (dirvish-curr)) ; can be a non-default session, reuse it 
directly
          (vis? (cl-loop for w in (window-list)
                         for b = (window-buffer w)
                         for dv = (with-current-buffer b (dirvish-curr))
diff --git a/docs/CUSTOMIZING.org b/docs/CUSTOMIZING.org
index a21c5ea5b3..6edd0d915a 100644
--- a/docs/CUSTOMIZING.org
+++ b/docs/CUSTOMIZING.org
@@ -443,7 +443,8 @@ you don't have to require them explicitly if you installed 
dirvish from MELPA or
    '(("h" "~/"                          "Home")
      ("d" "~/Downloads/"                "Downloads")
      ("m" "/mnt/"                       "Drives")
-     ("s" "/ssh:my-server")             "SSH server"
+     ("s" "/ssh:my-remote-server")      "SSH server"
+     ("e" "/sudo:root@localhost:/etc")  "Modify program settings"
      ("t" "~/.local/share/Trash/files/" "TrashCan")))
   :config
   ;; (dirvish-peek-mode)             ; Preview files in minibuffer
@@ -454,28 +455,28 @@ you don't have to require them explicitly if you 
installed dirvish from MELPA or
         '(vc-state subtree-state nerd-icons collapse git-msg file-time 
file-size)
         dirvish-side-attributes
         '(vc-state nerd-icons collapse file-size))
-  (setq delete-by-moving-to-trash t)
   (setq dired-listing-switches
         "-l --almost-all --human-readable --group-directories-first 
--no-group")
   :bind ; Bind `dirvish-fd|dirvish-side|dirvish-dwim' as you see fit
   (("C-c f" . dirvish)
    :map dirvish-mode-map          ; Dirvish inherits `dired-mode-map'
+   ;; ("o" . dired-up-directory)  ; So you can adjust dired bindings here
    ("?"   . dirvish-dispatch)     ; contains most of sub-menus in dirvish 
extensions
    ("a"   . dirvish-quick-access)
-   ("f"   . dirvish-file-info-menu)
+   ("f"   . dirvish-history-go-forward)
+   ("b"   . dirvish-history-go-backward)
    ("y"   . dirvish-yank-menu)
    ("N"   . dirvish-narrow)
    ("^"   . dirvish-history-last)
+   ("s"   . dirvish-setup-menu)   ; `st' toggles mtime, `ss' toggles file 
size, etc.
    ("h"   . dirvish-history-jump) ; remapped `describe-mode'
-   ("s"   . dirvish-quicksort)    ; remapped `dired-sort-toggle-or-edit'
+   ("r"   . dirvish-quicksort)    ; remapped `dired-sort-toggle-or-edit'
    ("v"   . dirvish-vc-menu)      ; remapped `dired-view-file'
    ("TAB" . dirvish-subtree-toggle)
-   ("M-f" . dirvish-history-go-forward)
-   ("M-b" . dirvish-history-go-backward)
+   ("M-f" . dirvish-file-info-menu)
    ("M-l" . dirvish-ls-switches-menu)
    ("M-m" . dirvish-mark-menu)
    ("M-t" . dirvish-layout-toggle)
-   ("M-s" . dirvish-setup-menu)
    ("M-e" . dirvish-emerge-menu)
    ("M-j" . dirvish-fd-jump)))
 #+end_src
@@ -498,10 +499,10 @@ Some keybindings for mouse:
 - /middle click/: opening a file/directory in new window
 
 #+begin_src emacs-lisp
-  (setq mouse-1-click-follows-link nil)
-  (define-key dirvish-mode-map (kbd "<mouse-1>") 
'dirvish-subtree-toggle-or-open)
-  (define-key dirvish-mode-map (kbd "<mouse-2>") 
'dired-mouse-find-file-other-window)
-  (define-key dirvish-mode-map (kbd "<mouse-3>") 'dired-mouse-find-file)
+(setq mouse-1-click-follows-link nil)
+(define-key dirvish-mode-map (kbd "<mouse-1>") 'dirvish-subtree-toggle-or-open)
+(define-key dirvish-mode-map (kbd "<mouse-2>") 
'dired-mouse-find-file-other-window)
+(define-key dirvish-mode-map (kbd "<mouse-3>") 'dired-mouse-find-file)
 #+end_src
 
 ** TRAMP integration
@@ -534,26 +535,30 @@ be able to answer to in the child emacs.
 These packages are only listed here for discoverability.
 
 #+begin_src emacs-lisp
-  (use-package dired-x
-    :config
-    ;; Make dired-omit-mode hide all "dotfiles"
-    (setq dired-omit-files
-          (concat dired-omit-files "\\|^\\..*$")))
-
-  ;; Additional syntax highlighting for dired
-  (use-package diredfl
-    :hook
-    ((dired-mode . diredfl-mode)
-     ;; highlight parent and directory preview as well
-     (dirvish-directory-view-mode . diredfl-mode))
-    :config
-    (set-face-attribute 'diredfl-dir-name nil :bold t))
-
-  ;; Use `nerd-icons' as Dirvish's icon backend
-  (use-package nerd-icons)
-
-  ;; Or, use `vscode-icon' instead
-  ;; (use-package vscode-icon
-  ;;   :config
-  ;;   (push '("jpg" . "image") vscode-icon-file-alist))
+
+(use-package dired-x
+  :config
+  ;; Make dired-omit-mode hide all "dotfiles"
+  (setq dired-omit-files
+        (concat dired-omit-files "\\|^\\..*$")))
+
+;; Additional syntax highlighting for dired
+(use-package diredfl
+  :hook
+  ((dired-mode . diredfl-mode)
+   ;; highlight parent and directory preview as well
+   (dirvish-directory-view-mode . diredfl-mode))
+  :config
+  (set-face-attribute 'diredfl-dir-name nil :bold t))
+
+;; Use `nerd-icons' as Dirvish's icon backend
+(use-package nerd-icons)
+
+;; Or, use `vscode-icon' instead
+;; (use-package vscode-icon
+;;   :config
+;;   (push '("jpg" . "image") vscode-icon-file-alist))
+
+;; miscs
+(setq delete-by-moving-to-trash t)
 #+end_src

Reply via email to