From 3680c2777b0d1e7feacdb58595c799df5e05b30b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Madeleine=20Sydney=20=C5=9Alaga?= Date: Sun, 21 Sep 2025 18:37:49 -0600 Subject: [PATCH] feat(emacs): dired --- modules/home/users/msyds/emacs/init.el | 3 +- .../home/users/msyds/emacs/lisp/syd/dired.el | 101 ++++++++++++++++++ 2 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 modules/home/users/msyds/emacs/lisp/syd/dired.el diff --git a/modules/home/users/msyds/emacs/init.el b/modules/home/users/msyds/emacs/init.el index cb1f311..bf49976 100644 --- a/modules/home/users/msyds/emacs/init.el +++ b/modules/home/users/msyds/emacs/init.el @@ -45,7 +45,8 @@ syd/popups syd/pdf syd/project - syd/display-startup-time)) + syd/display-startup-time + syd/dired)) (defun syd-random-permutation (lst &optional seed) "Return a random permutation of list LST using SEED as the random state. The diff --git a/modules/home/users/msyds/emacs/lisp/syd/dired.el b/modules/home/users/msyds/emacs/lisp/syd/dired.el new file mode 100644 index 0000000..0a9503b --- /dev/null +++ b/modules/home/users/msyds/emacs/lisp/syd/dired.el @@ -0,0 +1,101 @@ +;;; -*- lexical-binding: t; -*- + +(require 'syd/base) +(require 'syd/popups) + +(defun syd-dired-here () + (interactive) + (dired default-directory)) + +(defun syd-dired-goto-file (file) + "Like `dired-goto-file', but will act as `find-file' if FILE is inside another +directory." + (interactive + (prog1 (let ((dir (dired-current-directory))) + (list (directory-file-name + (file-relative-name + (read-file-name "Goto file: " dir) + dir)))) + ;; let push-mark display its message + (push-mark)) + dired-mode) + (if (file-name-directory file) + (find-file file) + (dired-goto-file (expand-file-name file)))) + +(use-package dired + ;; Built-in to Emacs. + :straight nil + :general + (:keymaps 'syd-leader-open-map + "-" #'syd-dired-here) + (:keymaps 'syd-leader-project-map + "-" #'project-dired) + (:keymaps 'dired-mode-map + :states '(normal motion) + "g r" #'revert-buffer) + (:keymaps 'dired-mode-map + [remap dired-goto-file] #'syd-dired-goto-file) + :commands dired-jump + :custom (;; When there are other Dired windows open, suggest them as targets + ;; for renaming/copying. + (dired-dwim-target t) + ;; Don't prompt to revert, just do it. + (dired-auto-revert-buffer #'dired-buffer-stale-p) + (dired-listing-switches + (mapconcat + #'identity + '("-l" ; Mandatory! + "--almost-all" ; Show hidden files; omit '.' and '..'. + "--human-readable" ; Display sizes in human-readable units. + "--time-style=+") ; Omit times/dates. + " ")) + ;; Always copy recursively + (dired-recursive-copies 'always) + ;; Prompt for confirmation for each top-level directory being + ;; deleted. + (dired-recursive-deletes 'top) + (dired-create-destination-dirs 'ask) + (dired-create-destination-dirs-on-trailing-dirsep t) + ;; Where to store image caches + (image-dired-dir (concat syd-cache-dir "image-dired/")) + (image-dired-db-file (concat image-dired-dir "db.el")) + (image-dired-gallery-dir (concat image-dired-dir "gallery/")) + (image-dired-temp-image-file (concat image-dired-dir "temp-image")) + (image-dired-temp-rotate-image-file + (concat image-dired-dir "temp-rotate-image")) + ;; Increase thumbnail sizes. + (image-dired-thumb-size 150)) + :config + (syd-push shackle-rules + '("^\\*image-dired" + :size 0.8 :select t :inhibit-window-quit t)) + + ;; On ESC, abort `wdired-mode' (will prompt) + (syd-add-hook 'syd-escape-hook + (defun syd-dired--wdired-exit-h () + (when (eq major-mode 'wdired-mode) + (wdired-exit) + t)))) + +(use-package diredfl + :hook ((dired-mode . diredfl-mode) + (dirvish-directory-view-mode . diredfl-mode))) + +(use-package dirvish + :custom ((dirvish-cache-dir (file-name-concat syd-cache-dir "dirvish/")) + (dirvish-reuse-session 'open) + (dirvish-default-layout '(0 0.4 0.6)) + (dirvish-hide-details '(dirvish dirvish-fd dirvish-side))) + :general + (:keymaps 'dired-mode-map + "" #'dirvish-subtree-toggle + "TAB" #'dirvish-subtree-toggle) + :init + ;; Ugh… I'm fairly certain this leads to eager loading of the entire package. + (dirvish-override-dired-mode 1) + :config + ;; Fix random void-variable errors. + (require 'autorevert)) + +(provide 'syd/dired)