diff --git a/lisp/lib/help.el b/lisp/lib/help.el index b61a5f29b..c514577bc 100644 --- a/lisp/lib/help.el +++ b/lisp/lib/help.el @@ -469,7 +469,8 @@ will open with point on that line." (let ((default-directory doom-emacs-dir)) (split-string (cdr (doom-call-process - "rg" "--no-heading" "--line-number" "--iglob" "!*.org" + doom-ripgrep-executable + "--no-heading" "--line-number" "--iglob" "!*.org" (format "%s %s($| )" "(^;;;###package|\\(after!|\\(use-package!)" package))) @@ -694,7 +695,7 @@ config blocks in your private config." (defvar counsel-rg-base-command) (defun doom--help-search (dirs query prompt) ;; REVIEW Replace with deadgrep - (unless (executable-find "rg") + (unless doom-ripgrep-executable (user-error "Can't find ripgrep on your system")) (cond ((fboundp 'consult--grep) (consult--grep prompt #'consult--ripgrep-make-builder (cons data-directory dirs) query)) @@ -708,7 +709,8 @@ config blocks in your private config." ;; () TODO Helm support? ((grep-find (string-join - (append (list "rg" "-L" "--search-zip" "--no-heading" "--color=never" + (append (list doom-ripgrep-executable + "-L" "--search-zip" "--no-heading" "--color=never" (shell-quote-argument query)) (mapcar #'shell-quote-argument dirs)) " "))))) diff --git a/modules/editor/format/config.el b/modules/editor/format/config.el index 13278cfe6..fec55c04e 100644 --- a/modules/editor/format/config.el +++ b/modules/editor/format/config.el @@ -44,14 +44,6 @@ This is controlled by `+format-on-save-disabled-modes'." (add-to-list 'doom-debug-variables '(apheleia-log-only-errors . nil)) (add-to-list 'doom-debug-variables '(apheleia-log-debug-info . t)) - (add-to-list 'apheleia-mode-alist '(sh-mode . shfmt)) - - ;; A psuedo-formatter that dispatches to the appropriate LSP client (via - ;; `lsp-mode' or `eglot') that is capable of formatting. Without +lsp, users - ;; must manually set `+format-with' to `lsp' to use it, or activate - ;; `+format-with-lsp-mode' in the appropriate modes. - (add-to-list 'apheleia-formatters '(lsp . +format-lsp-buffer)) - (defadvice! +format--inhibit-reformat-on-prefix-arg-a (orig-fn &optional arg) "Make it so \\[save-buffer] with prefix arg inhibits reformatting." :around #'save-buffer @@ -70,4 +62,44 @@ This is controlled by `+format-on-save-disabled-modes'." (font-lock-fontify-region web-mode-scan-beg web-mode-scan-end))))) (defun +format--update-vc-gutter-h () (when (fboundp '+vc-gutter-update-h) - (+vc-gutter-update-h))))) + (+vc-gutter-update-h)))) + + + ;; + ;; Custom formatters + + ;; Apheleia already has a definition for shfmt, but doesn't assign it to any + ;; major modes, so... + (add-to-list 'apheleia-mode-alist '(sh-mode . shfmt)) + + ;; A psuedo-formatter that dispatches to the appropriate LSP client (via + ;; `lsp-mode' or `eglot') that is capable of formatting. Without +lsp, users + ;; must manually set `+format-with' to `lsp' to use it, or activate + ;; `+format-with-lsp-mode' in the appropriate modes. + (add-to-list 'apheleia-formatters '(lsp . +format-lsp-buffer)) + + ;; Apheleia's default config for prettier passes an explicit --tab-width N to + ;; all prettier formatters, respecting your indent settings in Emacs, but + ;; overriding any indent settings in your prettier config files. This changes + ;; it to omit indent switches if any configuration for prettier is present in + ;; the current project. + (dolist (formatter '(prettier prettier-css prettier-html prettier-javascript + prettier-json prettier-scss prettier-svelte + prettier-typescript prettier-yaml)) + (setf (alist-get formatter apheleia-formatters) + (append (delete '(apheleia-formatters-js-indent "--use-tabs" "--tab-width") + (alist-get formatter apheleia-formatters)) + '(unless (or (cl-loop for file + in '(".prettierrc" + ".prettierrc.json" + ".prettierrc.yml" + ".prettierrc.yaml" + ".prettierrc.json5" + ".prettierrc.js" "prettier.config.js" + ".prettierrc.mjs" "prettier.config.mjs" + ".prettierrc.cjs" "prettier.config.cjs" + ".prettierrc.toml") + if (locate-dominating-file default-directory file) + return t) + (assq 'prettier (+javascript-npm-conf))) + (apheleia-formatters-indent "--use-tabs" "--tab-width")))))) diff --git a/modules/emacs/dired/README.org b/modules/emacs/dired/README.org index a411a7a22..7cd50818b 100644 --- a/modules/emacs/dired/README.org +++ b/modules/emacs/dired/README.org @@ -4,28 +4,28 @@ #+since: 2.0.0 * Description :unfold: -This module provides reasonable defaults and augmentations for dired. +This module provides reasonable defaults and augmentations for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired.html][Dired]] (the +built-in file manager for Emacs), powered by [[doom-package:dirvish][Dirvish]]. ** Maintainers -/This module has no dedicated maintainers./ [[doom-contrib-maintainer:][Become a maintainer?]] +- [[doom-user:][@hlissner]] + +[[doom-contrib-maintainer:][Become a maintainer?]] ** Module flags -- +icons :: - Enables the display of fancy icons depending on file types in dired buffers. -- +ranger :: - Enables dired to be more like [[https://github.com/ranger/ranger][ranger]]. Incompatible with =+dirvish=. - +dirvish :: - Enables [[https://github.com/alexluigit/dirvish][dirvish]] integration. Incompatible with =+ranger=. + Enables full [[https://github.com/alexluigit/dirvish][dirvish]] integration, providing a more modern interface for Dired + that is reminiscent of [[https://github.com/ranger/ranger][Ranger]]. + + Without this flag, Dirvish is still installed and used, but only for its minor + augmentations to Dired. +- +icons :: + Enables the display of fancy icons depending on file types in dired buffers, + as well as arrows for expanded/collapsed directories. ** Packages -- [[doom-package:nerd-icons-dired]] if [[doom-module:+icons]] -- [[doom-package:dired-git-info]] -- [[doom-package:diff-hl]] +- [[doom-package:dirvish]] - [[doom-package:diredfl]] -- [[doom-package:dired-rsync]] -- [[doom-package:dirvish]] if [[doom-module:+dirvish]] -- [[doom-package:fd-dired]] -- [[doom-package:ranger]] if [[doom-module:+ranger]] ** TODO Hacks #+begin_quote @@ -42,29 +42,124 @@ This module provides reasonable defaults and augmentations for dired. This module has no requirements *except on BSDs* like MacOS or FreeBSD, where =GNU ls= (aka ~gls~) is required. -* TODO Usage -#+begin_quote - 󱌣 /This module's usage documentation is incomplete./ [[doom-contrib-module:][Complete it?]] -#+end_quote +Optionally, install these dependencies to improve the preview experience: +- =imagemagick= for image previews +- =poppler= (or [[doom-module::tools pdf-tools]]) for pdf previews, +- =ffmpegthumbnailer= for video previews, +- =mediainfo= for audio/video metadata generation, +- =tar= and =unzip= for archive files previews. -| Keybind | Description | -|-------------------+---------------------------------------------| -| [[kbd:][SPC f d]] | Find directory with dired | -| [[kbd:][q]] | Exit dired buffer | -| [[kbd:][C-c C-r]] | Run [[doom-package:dired-rsync]] | -| [[kbd:][C-c C-e]] | Rename entries with [[doom-package:wdired]] | +** macOS +#+begin_src bash :eval no +$ brew install coreutils fd poppler ffmpegthumbnailer mediainfo imagemagick +#+end_src -Other keybindings can be found on the official [[https://www.gnu.org/software/emacs/refcards/pdf/dired-ref.pdf][Dired reference card]]. +** Debian-based +#+begin_src bash :eval no +$ apt install fd-find poppler-utils ffmpegthumbnailer mediainfo imagemagick tar unzip +#+end_src -** Ranger -If [[doom-module:+ranger]] is enabled often a buffer will be opened in minimal ranger mode -(~deer-mode~). In this case [[kbd:][z P]] can be used to toggle between full ranger and -~deer-mode~. +** Arch-based +#+begin_src bash :eval no +$ pacman -S fd poppler ffmpegthumbnailer mediainfo imagemagick tar unzip +#+end_src -* TODO Configuration -#+begin_quote - 󱌣 This module has no configuration documentation yet. [[doom-contrib-module:][Write some?]] -#+end_quote +** FreeBSD +#+begin_src bash :eval no +$ pkg install gnuls fd-find poppler ffmpegthumbnailer ImageMagick7 gtar +#+end_src + +** Windows (not tested) +Via [[https://scoop.sh/][Scoop]]: +#+begin_src bash :eval no +$ scoop install coreutils fd poppler imagemagick unzip +#+end_src + +* Usage +** Global bindings +You can access Dired/Dirvish by opening a directory entry in commands like +~find-file (SPC f f)~. Or you can create a Dired buffer directly with these +keybindings. + +| Keybind | Description | +|------------------------------+------------------------------------| +| [[kbd:][SPC f d]] | Find directory with dired | +| [[kbd:][SPC o -]] | Jump to current directory in dired | + +These commands are available but not bound to any keys. + +| Command | Description | +|------------------+--------------------------------| +| [[kbd:][M-x dirvish]] | Open dired with preview | +| [[kbd:][M-x dirvish-dwim]] | Dirvish with smart layout | +| [[kbd:][M-x dirvish-fd]] | Search files in dired using fd | +| [[kbd:][M-x dirvish-side]] | Open project sidebar | + +** Dired bindings +*** Basics +| Keybind | Description | +|----------+-------------------------------------------| +| [[kbd:][n]] | Move down a line | +| [[kbd:][p]] | Move up a line | +| [[kbd:][e]] or [[kbd][RET]] | Visit the file or directory on this line | +| [[kbd:][(]] | Toggle visibility of detailed information | +| [[kbd:][q]] | Exit dired buffer | +| [[kbd:][^]] | Go Up a directory | +| [[kbd:][m]] | Mark a file | +| [[kbd:][u]] | Unmark a file | +| [[kbd:][D]] | Delete a file | +| [[kbd:][+]] | Create a directory | +| ... | ... | + +This is only a very small sample of dired keybindings, just for you to get a +sense of Dired. Other basic keybindings can be found on the official [[https://www.gnu.org/software/emacs/refcards/pdf/dired-ref.pdf][Dired +reference card]]. If you have enabled ~(evil +everywhere)~, you would get a +different set of bindings ([[kbd][j/k]] for move down/up a line), consult +=evil-collection= for the actual bindings. + +*** Extras +You don't have to memorize all of Dired bindings because this module provided a +lot of easy-to-read menus such as ~dirvish-mark-menu~ (powered by +=transient.el=) for you to find the suitable command in a specific context. All +of these (sub-)menus are included in ~dirvish-dispatch (?)~, the main help menu. +Some extremely useful ones are bound to a separate keys as well. + +| Keybind | Description | +|---------+------------------------------------------| +| [[kbd:][?]] | Ask for help | +| [[kbd:][a]] | Quick access frequently used directories | +| [[kbd:][f]] | Get file information under the cursor | +| [[kbd:][y]] ... | For copying marked files or their paths | +| [[kbd:][s]] ... | For creating symlinks | +| [[kbd:][S]] | Sort buffer with different criteria | +| [[kbd:][M-m]] | Commands relate to marking and actions | +| [[kbd:][M-s]] | Setup user interface for dirvish | +| [[kbd:][M-e]] | "Emerge" important files at the top | + +Other bindings in this module: +| [[kbd:][TAB]] | Expand or contract directory under the cursor | +| [[kbd:][M-f]] | Jump to next dired history entry | +| [[kbd:][M-b]] | Jump to previous dired history entry | +| [[kbd:][M-n]] | Narrow the buffer with user input | +| [[kbd:][M-t]] | Toggle fullscreen (preview) | +| [[kbd:][C-c C-e]] | Rename entries with [[doom-package:wdired]] | + +* Configuration +** Quick access entries +Use the following syntax to configure the entries displayed in +~dirvish-quick-access~ command. + +#+begin_src emacs-lisp +;;; add to $DOOMDIR/config.el +(after! dirvish + (setq! dirvish-quick-access-entries + `(("h" "~/" "Home") + ("e" ,user-emacs-directory "Emacs user directory") + ("c" "~/Code/" "Code") + ("d" "~/Downloads/" "Downloads") + ("m" "/mnt/" "Mounted drives") + ("t" "~/.local/share/Trash/files/" "Trash")))) +#+end_src * Troubleshooting /There are no known problems with this module./ [[doom-report:][Report one?]] @@ -72,6 +167,9 @@ If [[doom-module:+ranger]] is enabled often a buffer will be opened in minimal r * Frequently asked questions /This module has no FAQs yet./ [[doom-suggest-faq:][Ask one?]] +** How to kill all session buffers on quit? +Set ~dirvish-reuse-session~ to nil. + * TODO Appendix #+begin_quote 󱌣 This module has no appendix yet. [[doom-contrib-module:][Write one?]] diff --git a/modules/emacs/dired/config.el b/modules/emacs/dired/config.el index a87f93d09..e65b146cd 100644 --- a/modules/emacs/dired/config.el +++ b/modules/emacs/dired/config.el @@ -1,9 +1,5 @@ ;;; emacs/dired/config.el -*- lexical-binding: t; -*- -(defvar +dired-dirvish-icon-provider 'nerd-icons - "Icon provider to use for dirvish when the module is enabled.") - - ;; ;;; Packages @@ -11,7 +7,6 @@ :commands dired-jump :init (setq dired-dwim-target t ; suggest a target for moving/copying intelligently - dired-hide-details-hide-symlink-targets nil ;; don't prompt to revert, just do it dired-auto-revert-buffer #'dired-buffer-stale-p ;; Always copy/delete recursively @@ -63,123 +58,146 @@ Fixes #3939: unsortable dired entries on Windows." :before-while #'dired-buffer-stale-p (not (eq revert-buffer-function #'dired-virtual-revert))) - (map! :map dired-mode-map - ;; Kill all dired buffers on q - :ng "q" #'+dired/quit-all - ;; To be consistent with ivy/helm+wgrep integration - "C-c C-e" #'wdired-change-to-wdired-mode)) - - -(use-package! dired-rsync - :general (dired-mode-map "C-c C-r" #'dired-rsync)) - - -(use-package! diredfl - :hook (dired-mode . diredfl-mode)) - - -(use-package! ranger - :when (modulep! +ranger) - :after dired - :init (setq ranger-override-dired t) - :config - (unless (file-directory-p image-dired-dir) - (make-directory image-dired-dir)) - - (set-popup-rule! "^\\*ranger" :ignore t) - - (defadvice! +dired--cleanup-header-line-a () - "Ranger fails to clean up `header-line-format' when it is closed, so..." - :before #'ranger-revert - (dolist (buffer (buffer-list)) - (when (buffer-live-p buffer) - (with-current-buffer buffer - (when (equal header-line-format '(:eval (ranger-header-line))) - (setq header-line-format nil)))))) - - (defadvice! +dired--cleanup-mouse1-bind-a () - "Ranger binds an anonymous function to mouse-1 after previewing a buffer -that prevents the user from escaping the window with the mouse. This command is -never cleaned up if the buffer already existed before ranger was initialized, so -we have to clean it up ourselves." - :after #'ranger-setup-preview - (when (window-live-p ranger-preview-window) - (with-current-buffer (window-buffer ranger-preview-window) - (local-unset-key [mouse-1])))) - - (defadvice! +dired--ranger-travel-a () - "Temporary fix for this function until ralesi/ranger.el#236 gets merged." - :override #'ranger-travel - (interactive) - (let ((prompt "Travel: ")) - (cond - ((bound-and-true-p helm-mode) - (ranger-find-file (helm-read-file-name prompt))) - ((bound-and-true-p ivy-mode) - (ivy-read prompt 'read-file-name-internal - :matcher #'counsel--find-file-matcher - :action - (lambda (x) - (with-ivy-window - (ranger-find-file (expand-file-name x default-directory)))))) - ((bound-and-true-p ido-mode) - (ranger-find-file (ido-read-file-name prompt))) - (t - (ranger-find-file (read-file-name prompt)))))) - - (setq ranger-cleanup-on-disable t - ranger-excluded-extensions '("mkv" "iso" "mp4") - ranger-deer-show-details t - ranger-max-preview-size 10 - ranger-show-literal nil - ranger-hide-cursor nil)) + ;; To be consistent with vertico/ivy/helm+wgrep integration + (define-key dired-mode-map (kbd "C-c C-e") #'wdired-change-to-wdired-mode)) (use-package! dirvish - :when (modulep! +dirvish) - :defer t - :init (after! dired (dirvish-override-dired-mode)) - :hook (dired-mode . dired-omit-mode) + :commands dirvish-find-entry-a dirvish-dired-noselect-a + :general (dired-mode-map "C-c C-r" #'dirvish-rsync) + :init + (setq dirvish-cache-dir (file-name-concat doom-cache-dir "dirvish/")) + ;; HACK: ... + (advice-add #'dired-find-file :override #'dirvish-find-entry-a) + (advice-add #'dired-noselect :around #'dirvish-dired-noselect-a) :config - (require 'dired-x) - (setq dirvish-cache-dir (concat doom-cache-dir "dirvish/") - dirvish-hide-details nil - dirvish-attributes '(git-msg) - dired-omit-files (concat dired-omit-files "\\|^\\..*$")) + (dirvish-override-dired-mode) + (set-popup-rule! "^ ?\\*Dirvish.*" :ignore t) + + ;; Don't recycle sessions. We don't want leftover buffers lying around, + ;; especially if users are reconfiguring Dirvish or trying to recover from an + ;; error. It's too easy to accidentally break Dirvish (e.g. by focusing the + ;; header window) at the moment, or get stuck in a focus loop with the buried + ;; buffers. Starting from scratch isn't even that expensive, anyway. + (setq dirvish-reuse-session nil) + + ;; A more reserved mode-line height that should match doom-modeline's (or the + ;; vanilla mode-line's) height. + (add-hook! 'after-setting-font-hook + (defun +dired-update-mode-line-heigth-h () + ;; REVIEW: Too hardcoded. + (setq dirvish-mode-line-height (+ (frame-char-height) 4) + dirvish-header-line-height (+ (frame-char-height) 8)))) + (+dired-update-mode-line-heigth-h) + + (if (modulep! +dirvish) + (setq dirvish-attributes '(file-size) + dirvish-mode-line-format + '(:left (sort file-time symlink) :right (omit yank index))) + (setq dirvish-attributes nil + dirvish-use-header-line nil + dirvish-mode-line-format nil)) + + (when (modulep! :ui vc-gutter) + (push 'vc-state dirvish-attributes)) (when (modulep! +icons) - (push +dired-dirvish-icon-provider dirvish-attributes)) + (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))))) + + (when (modulep! :ui tabs) + (after! centaur-tabs + (add-hook 'dired-mode-hook #'centaur-tabs-local-mode) + (add-hook 'dirvish-directory-view-mode-hook #'centaur-tabs-local-mode))) + + ;; TODO: Needs more polished keybinds for non-Evil users (map! :map dirvish-mode-map - :n "b" #'dirvish-quick-access - :n "z" #'dirvish-history-jump - :n "f" #'dirvish-file-info-menu - :n "F" #'dirvish-layout-toggle - :n "l" #'dired-find-file - :n "h" #'dired-up-directory - :n "TAB" #'dirvish-subtree-toggle - :n "gh" #'dirvish-subtree-up - :n "gl" #'dirvish-subtree-down - :localleader - "h" #'dired-omit-mode)) + :n "?" #'dirvish-dispatch + :n "q" #'dirvish-quit + :n "b" #'dirvish-quick-access + :ng "f" #'dirvish-file-info-menu + :n "p" #'dirvish-yank + :ng "S" #'dirvish-quicksort + :n "F" #'dirvish-layout-toggle + :n "z" #'dirvish-history-jump + :n "gh" #'dirvish-subtree-up + :n "gl" #'dirvish-subtree-down + :m "[h" #'dirvish-history-go-backward + :m "]h" #'dirvish-history-go-forward + :m "[e" #'dirvish-emerge-next-group + :m "]e" #'dirvish-emerge-previous-group + :n "TAB" #'dirvish-subtree-toggle + :ng "M-b" #'dirvish-history-go-backward + :ng "M-f" #'dirvish-history-go-forward + :ng "M-n" #'dirvish-narrow + :ng "M-m" #'dirvish-mark-menu + :ng "M-s" #'dirvish-setup-menu + :ng "M-e" #'dirvish-emerge-menu + (:prefix ("y" . "yank") + :n "l" #'dirvish-copy-file-true-path + :n "n" #'dirvish-copy-file-name + :n "p" #'dirvish-copy-file-path + :n "r" #'dirvish-copy-remote-path + :n "y" #'dired-do-copy) + (:prefix ("s" . "symlinks") + :n "s" #'dirvish-symlink + :n "S" #'dirvish-relative-symlink + :n "h" #'dirvish-hardlink)) + + ;; HACK: Kill Dirvish session before switching projects/workspaces, otherwise + ;; it errors out on trying to delete/change dedicated windows. + (add-hook! '(persp-before-kill-functions projectile-before-switch-project-hook) + (defun +dired--cleanup-dirvish-h (&rest _) + (when-let ((win + (or (and (featurep 'dirvish-side) + (dirvish-side--session-visible-p)) + (and dirvish--this (selected-window))))) + (delete-window win)))) -(use-package! nerd-icons-dired - :when (modulep! +icons) - :unless (modulep! +dirvish) - :hook (dired-mode . nerd-icons-dired-mode) - :config - (defadvice! +dired-disable-icons-in-wdired-mode-a (&rest _) - :before #'wdired-change-to-wdired-mode - (setq-local +wdired-icons-enabled (if nerd-icons-dired-mode 1 -1)) - (when nerd-icons-dired-mode - (nerd-icons-dired-mode -1))) + ;; HACK: If a directory has a .dir-locals.el, its settings could + ;; interfere/crash Dirvish trying to preview it. + ;; REVIEW: Upstream this later. + (defadvice! +dired--ignore-local-vars-for-dir-previews-a (fn &rest args) + :around #'dirvish-default-dp + (let ((result (apply fn args))) + (if (and (file-directory-p (car args)) + (eq (car-safe result) 'dired)) + `(dired . (,@(butlast (cdr result)) + ,(format "(let ((enable-local-variables nil)) %s)" + (car (last (cdr result)))))) + result))) - (defadvice! +dired-restore-icons-after-wdired-mode-a (&rest _) - :after #'wdired-change-to-dired-mode - (nerd-icons-dired-mode +wdired-icons-enabled))) + ;; HACK: Dirvish will complain that pdf-tools is required to preview PDFs, + ;; even if the package is installed, so I advise it to try autoloading it + ;; before complaining, otherwise complain if epdfinfo hasn't been built yet. + ;; REVIEW: Upstream this later. + (defadvice! +dired--autoload-pdf-tools-a (fn &rest args) + :around #'dirvish-pdf-dp + (when (equal (nth 1 args) "pdf") + (require 'pdf-tools nil t) + (if (file-exists-p pdf-info-epdfinfo-program) + (apply fn args) + '(info . "`epdfinfo' program required to preview pdfs; run `M-x pdf-tools-install'"))))) + + +(use-package! diredfl + :hook (dired-mode . diredfl-mode) + :hook (dirvish-directory-view-mode . diredfl-mode)) (use-package! dired-x - :unless (modulep! +ranger) :hook (dired-mode . dired-omit-mode) :config (setq dired-omit-verbose nil @@ -214,37 +232,8 @@ we have to clean it up ourselves." "h" #'dired-omit-mode)) -(use-package! fd-dired - :when doom-fd-executable - :defer t - :init - (global-set-key [remap find-dired] #'fd-dired) - (set-popup-rule! "^\\*F\\(?:d\\|ind\\)\\*$" :ignore t)) - (use-package! dired-aux :defer t :config (setq dired-create-destination-dirs 'ask dired-vc-rename-file t)) - -;;;###package dired-git-info -(map! :after dired - :map (dired-mode-map ranger-mode-map) - :ng ")" #'dired-git-info-mode) -(setq dgi-commit-message-format "%h %cs %s" - dgi-auto-hide-details-p nil) -(after! wdired - ;; Temporarily disable `dired-git-info-mode' when entering wdired, due to - ;; reported incompatibilities. - (defvar +dired--git-info-p nil) - (defadvice! +dired--disable-git-info-a (&rest _) - :before #'wdired-change-to-wdired-mode - (setq +dired--git-info-p (bound-and-true-p dired-git-info-mode)) - (when +dired--git-info-p - (dired-git-info-mode -1))) - (defadvice! +dired--reactivate-git-info-a (&rest _) - :after '(wdired-exit - wdired-abort-changes - wdired-finish-edit) - (when +dired--git-info-p - (dired-git-info-mode +1)))) diff --git a/modules/emacs/dired/doctor.el b/modules/emacs/dired/doctor.el index bb157a484..2d4169316 100644 --- a/modules/emacs/dired/doctor.el +++ b/modules/emacs/dired/doctor.el @@ -2,3 +2,6 @@ (when (and (featurep :system 'bsd) (not (executable-find "gls"))) (warn! "Cannot find gls (GNU ls). This may cause issues with dired")) + +(when (modulep! +ranger) + (warn! "The +ranger flag was removed from this module and does nothing")) diff --git a/modules/emacs/dired/packages.el b/modules/emacs/dired/packages.el index 340f87ceb..ca7d80435 100644 --- a/modules/emacs/dired/packages.el +++ b/modules/emacs/dired/packages.el @@ -1,14 +1,7 @@ ;; -*- no-byte-compile: t; -*- ;;; emacs/dired/packages.el +(package! dirvish + :recipe (:host github :repo "hlissner/dirvish") + :pin "5f046190e886fb0a2dae7e884cc7cd9bcf48ac26") (package! diredfl :pin "f6d599c30875ab4894c1deab9713ff2faea54e06") -(package! dired-git-info :pin "6b6f2a5d716debba9a7dcac623d5a1e4c799eb62") -(package! dired-rsync :pin "5bcb851f3bf9c4f7c07299fcc25be7c408a68cda") -(when (modulep! +ranger) - (package! ranger :pin "2498519cb21dcd5791d240607a72a204d1761668")) -(when (modulep! +dirvish) - (package! dirvish :pin "119f9f59a618bb7b476c93e9ab1d7542c5c1df41")) -(when (and (modulep! +icons) - (not (modulep! +dirvish))) - (package! nerd-icons-dired :pin "c1c73488630cc1d19ce1677359f614122ae4c1b9")) -(package! fd-dired :pin "458464771bb220b6eb87ccfd4c985c436e57dc7e") diff --git a/modules/ui/vc-gutter/config.el b/modules/ui/vc-gutter/config.el index 688d803d0..342848be7 100644 --- a/modules/ui/vc-gutter/config.el +++ b/modules/ui/vc-gutter/config.el @@ -69,7 +69,8 @@ (defun +vc-gutter-enable-maybe-h () "Conditionally enable `diff-hl-dired-mode' in dired buffers. Respects `diff-hl-disable-on-remote'." - (unless (and (bound-and-true-p diff-hl-disable-on-remote) + (unless (and (bound-and-true-p dirvish-override-dired-mode) + (bound-and-true-p diff-hl-disable-on-remote) (file-remote-p default-directory)) (diff-hl-dired-mode +1))))