[Emacs] Replace dired with dirvish, optimize TRAMP
This commit is contained in:
parent
489074ddf1
commit
c6a3771ff4
@ -3149,50 +3149,110 @@ any graphical file manager for me most of the time because:
|
|||||||
- All actions can be done with keybindings
|
- All actions can be done with keybindings
|
||||||
- I get a consistent behavior between Dired and Emacs, since it’s the
|
- I get a consistent behavior between Dired and Emacs, since it’s the
|
||||||
same thing.
|
same thing.
|
||||||
However, the only thing I lack still is thumbnails. In any case, I
|
I used to have an extensive configuration for Dired with a couple of
|
||||||
need still to make some tweaks in order to make it usable for
|
additional packages to make it more usable. Dirvish rendered that
|
||||||
me.
|
obsolete!
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(use-package dired
|
(use-package dirvish
|
||||||
:straight (:type built-in)
|
:straight (:build t)
|
||||||
:defer t
|
:defer t
|
||||||
:hook (dired-mode . turn-on-gnus-dired-mode)
|
:init (dirvish-override-dired-mode)
|
||||||
:general
|
:custom
|
||||||
(phundrak/evil
|
(dirvish-quick-access-entries
|
||||||
:keymaps 'dired-mode-map
|
'(("h" "~/" "Home")
|
||||||
:packages 'dired
|
("d" "~/Downloads/" "Downloads")
|
||||||
"(" #'dired-hide-details-mode
|
("c" "~/org/config" "Config")
|
||||||
"n" #'evil-next-line
|
("C" "~/Documents/conlanging/content" "Conlanging")))
|
||||||
"p" #'evil-previous-line)
|
(dirvish-mode-line-format
|
||||||
|
'(:left (sort file-time "" file-size symlink) :right (omit yank index)))
|
||||||
|
(dirvish-attributes '(all-the-icons file-size collapse subtree-state vc-state git-msg))
|
||||||
:config
|
:config
|
||||||
|
(dirvish-peek-mode)
|
||||||
|
<<dired-drag-and-drop>>
|
||||||
|
<<dired-listing-flags>>
|
||||||
|
<<dired-files-and-dirs>>
|
||||||
|
<<dirvish-exa-offload>>
|
||||||
(csetq dired-dwim-target t
|
(csetq dired-dwim-target t
|
||||||
dired-recursive-copies 'always
|
dired-recursive-copies 'always
|
||||||
dired-recursive-deletes 'top
|
dired-recursive-deletes 'top
|
||||||
dired-listing-switches "-ahl1v --time-style=long-iso --group-directories-first"
|
delete-by-moving-to-trash t)
|
||||||
dired-auto-revert-buffer t
|
|
||||||
image-dired-thumb-size 150
|
|
||||||
image-dired-dir (expand-file-name (file-name-as-directory "dired-img")
|
|
||||||
user-emacs-directory)
|
|
||||||
image-dired-db-file (expand-file-name "dired-db.el" user-emacs-directory)
|
|
||||||
image-dired-gallery-dir (expand-file-name (file-name-as-directory "gallery")
|
|
||||||
user-emacs-directory)
|
|
||||||
image-dired-temp-image-file (expand-file-name "temp-image" image-dired-dir)
|
|
||||||
image-dired-temp-rotate-image-file (expand-file-name "temp-rotate-image"
|
|
||||||
image-dired-dir)))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
Dired-x stands for “dired extra” which provides a couple more features
|
|
||||||
that are for some reason not included in dired yet.
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(use-package dired-x
|
|
||||||
:straight (:type built-in)
|
|
||||||
:after dired
|
|
||||||
:commands (dired-jump dired-jump-other-window dired-omit-mode)
|
|
||||||
:general
|
:general
|
||||||
(phundrak/evil
|
(phundrak/evil
|
||||||
:keymaps 'dired-mode-map
|
:keymaps 'dirvish-mode-map
|
||||||
:packages 'dired-x
|
:packages '(dired dirvish)
|
||||||
"«" #'dired-omit-mode))
|
"q" #'dirvish-quit
|
||||||
|
"TAB" #'dirvish-subtree-toggle)
|
||||||
|
(phundrak/major-leader-key
|
||||||
|
:keymaps 'dirvish-mode-map
|
||||||
|
:packages '(dired dirvish)
|
||||||
|
"a" #'dirvish-quick-access
|
||||||
|
"e" #'dirvish-emerge-menu
|
||||||
|
"f" #'dirvish-fd-jump
|
||||||
|
"F" #'dirvish-file-info-menu
|
||||||
|
"h" '(:ignore t :which-key "history")
|
||||||
|
"hp" #'dirvish-history-go-backward
|
||||||
|
"hn" #'dirvish-history-go-forward
|
||||||
|
"hj" #'dirvish-history-jump
|
||||||
|
"hl" #'dirvish-history-last
|
||||||
|
"l" '(:ignore t :which-key "layout")
|
||||||
|
"ls" #'dirvish-layout-switch
|
||||||
|
"lt" #'dirvish-layout-toggle
|
||||||
|
"m" #'dirvish-mark-menu
|
||||||
|
"s" #'dirvish-quicksort
|
||||||
|
"S" #'dirvish-setup-menu
|
||||||
|
"y" #'dirvish-yank-menu
|
||||||
|
"n" #'dirvish-narrow))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
Since Emacs 29, it is possible to enable drag-and-drop between Emacs
|
||||||
|
and other applications.
|
||||||
|
#+name: dired-drag-and-drop
|
||||||
|
#+begin_src emacs-lisp :tangle no
|
||||||
|
(csetq dired-mouse-drag-files t
|
||||||
|
mouse-drag-and-drop-region-cross-program t)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
In Dirvish, it’s best to use the long name of flags whenever possible,
|
||||||
|
otherwise some commands won’t work.
|
||||||
|
#+name: dired-listing-flags
|
||||||
|
#+begin_src emacs-lisp :tangle no
|
||||||
|
(csetq dired-listing-switches (string-join '("--all"
|
||||||
|
"--human-readable"
|
||||||
|
"--time-style=long-iso"
|
||||||
|
"--group-directories-first"
|
||||||
|
"-lv1")
|
||||||
|
" "))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
However, it is possible to instead use ~exa~ when it is available.
|
||||||
|
Instead of making Emacs’ main thread to the file listing in a
|
||||||
|
directory, we offload it to an external thread.
|
||||||
|
#+name: dirvish-exa-offload
|
||||||
|
#+begin_src emacs-lisp :tangle no
|
||||||
|
(dirvish-define-preview exa (file)
|
||||||
|
"Use `exa' to generate directory preview."
|
||||||
|
:require ("exa")
|
||||||
|
(when (file-directory-p file)
|
||||||
|
`(shell . ("exa" "--color=always" "-al" ,file))))
|
||||||
|
|
||||||
|
(add-to-list 'dirvish-preview-dispatchers 'exa)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
Finally, some directories need to be set for Dired to store various
|
||||||
|
files and images.
|
||||||
|
#+name: dired-files-and-dirs
|
||||||
|
#+begin_src emacs-lisp :tangle no
|
||||||
|
(let ((my/file (lambda (path &optional dir)
|
||||||
|
(expand-file-name path (or dir user-emacs-directory))))
|
||||||
|
(my/dir (lambda (path &optional dir)
|
||||||
|
(expand-file-name (file-name-as-directory path)
|
||||||
|
(or dir user-emacs-directory)))))
|
||||||
|
(csetq image-dired-thumb-size 150
|
||||||
|
image-dired-dir (funcall my/dir "dired-img")
|
||||||
|
image-dired-db-file (funcall my/file "dired-db.el")
|
||||||
|
image-dired-gallery-dir (funcall my/dir "gallery")
|
||||||
|
image-dired-temp-image-file (funcall my/file "temp-image" image-dired-dir)
|
||||||
|
image-dired-temp-rotate-image-file (funcall my/file "temp-rotate-image" image-dired-dir)))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
Copying files with Dired is a blocking process. It’s usually fine when
|
Copying files with Dired is a blocking process. It’s usually fine when
|
||||||
@ -3212,84 +3272,6 @@ happening.
|
|||||||
"C-r" #'dired-rsync))
|
"C-r" #'dired-rsync))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
~dired-du~ provides the user with the option to be able to see the size
|
|
||||||
of directories as they are, rather than just the size of their
|
|
||||||
inode. However, I will not enable it by default as it can take some
|
|
||||||
time to get the actual size of a directory.
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(use-package dired-du
|
|
||||||
:after dired
|
|
||||||
:straight (:build t)
|
|
||||||
:general
|
|
||||||
(phundrak/evil
|
|
||||||
:keymaps 'dired-mode-map
|
|
||||||
:packages 'dired-du
|
|
||||||
"»" #'dired-du-mode))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
This package on the other hand provides Git information to the user in
|
|
||||||
the current dired buffer in a similar way to how Github and Gitea
|
|
||||||
display the latest commit message and its age about a file in the file
|
|
||||||
tree. And by default, I want ~dired-git-info~ to hide file details.
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(use-package dired-git-info
|
|
||||||
:after (dired)
|
|
||||||
:straight (:build t)
|
|
||||||
:hook (dired-after-reading . dired-git-info-auto-enable)
|
|
||||||
:general
|
|
||||||
(phundrak/evil
|
|
||||||
:keymaps 'dired-mode-map
|
|
||||||
:packages 'dired-git-info
|
|
||||||
")" #'dired-git-info-mode)
|
|
||||||
:config
|
|
||||||
(setq dgi-auto-hide-details-p t))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
Diredfl makes dired colorful, and much more readable in my opinion.
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(use-package diredfl
|
|
||||||
:after (dired all-the-icons)
|
|
||||||
:straight (:build t)
|
|
||||||
:init
|
|
||||||
(diredfl-global-mode 1))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
Dired can benefit from ~fd~, a fast reimplementation of ~find~, to
|
|
||||||
increase the speed of ~find-dired~.
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(use-package fd-dired
|
|
||||||
:if (executable-find "fd")
|
|
||||||
:defer t
|
|
||||||
:straight (:build t)
|
|
||||||
:init
|
|
||||||
(global-set-key [remap find-dired] #'fd-dired))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
And let’s add some fancy icons in dired!
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(use-package all-the-icons-dired
|
|
||||||
:after (all-the-icons)
|
|
||||||
:straight (:build t)
|
|
||||||
:defer t
|
|
||||||
:hook (dired-mode . all-the-icons-dired-mode)
|
|
||||||
:config
|
|
||||||
(defun my/all-the-icons-dired--refresh (orig-fun &rest args)
|
|
||||||
(unless (or (not (file-remote-p default-directory))
|
|
||||||
(<= (count-lines (point-min) (point-max)) 512))
|
|
||||||
(apply orig-fun args)))
|
|
||||||
(advice-add #'all-the-icons-dired--refresh
|
|
||||||
:around
|
|
||||||
#'my/all-the-icons-dired--refresh))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
Lastly, let’s install some extensions to ~image-dired~.
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(use-package image-dired+
|
|
||||||
:after (image-dired)
|
|
||||||
:straight (:build t)
|
|
||||||
:init (image-diredx-adjust-mode 1))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
*** Compilation mode
|
*** Compilation mode
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:CUSTOM_ID: Packages-Configuration-Emacs-built-ins-Compilation-mode-7nh817m0t8j0
|
:CUSTOM_ID: Packages-Configuration-Emacs-built-ins-Compilation-mode-7nh817m0t8j0
|
||||||
@ -3624,13 +3606,15 @@ various hosts using various protocols, such as ~ssh~ and
|
|||||||
~rsync~. However, I have some use-case for Tramp which are not
|
~rsync~. However, I have some use-case for Tramp which are not
|
||||||
supported natively. I will describe them here.
|
supported natively. I will describe them here.
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(require 'tramp)
|
|
||||||
(use-package tramp
|
(use-package tramp
|
||||||
:straight (tramp :type built-in :build t)
|
:straight (tramp :type built-in :build t)
|
||||||
:init
|
:init
|
||||||
<<tramp-add-yadm>>
|
<<tramp-add-yadm>>
|
||||||
:config
|
:config
|
||||||
(setq tramp-ssh-controlmaster-options "")
|
(csetq tramp-ssh-controlmaster-options nil
|
||||||
|
tramp-verbose 0
|
||||||
|
tramp-auto-save-directory (locate-user-emacs-file "tramp/")
|
||||||
|
tramp-chunksize 2000)
|
||||||
(add-to-list 'backup-directory-alist ; deactivate auto-save with TRAMP
|
(add-to-list 'backup-directory-alist ; deactivate auto-save with TRAMP
|
||||||
(cons tramp-file-name-regexp nil)))
|
(cons tramp-file-name-regexp nil)))
|
||||||
#+end_src
|
#+end_src
|
||||||
@ -8374,7 +8358,7 @@ My keybinds for jumping around are prefixed by ~j~.
|
|||||||
|-----+-------------------------+-------------|
|
|-----+-------------------------+-------------|
|
||||||
| | | jump |
|
| | | jump |
|
||||||
| f | counsel-file-jump | |
|
| f | counsel-file-jump | |
|
||||||
| d | dired-jump | |
|
| d | dirvish-dwim | |
|
||||||
| D | dired-jump-other-window | |
|
| D | dired-jump-other-window | |
|
||||||
|
|
||||||
** Project
|
** Project
|
||||||
|
Loading…
Reference in New Issue
Block a user