;;; emacs/dired/config.el (setq ;; Always copy/delete recursively dired-recursive-copies 'always dired-recursive-deletes 'top ;; Auto refresh dired, but be quiet about it global-auto-revert-non-file-buffers t auto-revert-verbose nil) (defun +dired|sort-directories-first () "List directories first in dired buffers." (save-excursion (let (buffer-read-only) (forward-line 2) ;; beyond dir. header (sort-regexp-fields t "^.*$" "[ ]*." (point) (point-max)))) (and (featurep 'xemacs) (fboundp 'dired-insert-set-properties) (dired-insert-set-properties (point-min) (point-max))) (set-buffer-modified-p nil)) (add-hook 'dired-after-readin-hook '+dired|sort-directories-first) ;; Automatically create missing directories when creating new files (defun +dired|create-non-existent-directory () (let ((parent-directory (file-name-directory buffer-file-name))) (when (and (not (file-exists-p parent-directory)) (y-or-n-p (format "Directory `%s' does not exist! Create it?" parent-directory))) (make-directory parent-directory t)))) (push '+dired|create-non-existent-directory find-file-not-found-functions) (after! evil (add-transient-hook! 'dired-mode-hook (map! :map dired-mode-map :n "c" 'find-file :n "d" 'dired-do-delete :n "r" 'dired-do-rename))) ;; ;; Packages ;; (def-package! dired-k :after dired :config (setq dired-k-style 'git) (defun +dired*dired-k-highlight (orig-fn &rest args) "Butt out if the requested directory is remote (i.e. through tramp)." (unless (file-remote-p default-directory) (apply orig-fn args))) (advice-add 'dired-k--highlight :around '+dired*dired-k-highlight) (add-hook 'dired-initial-position-hook 'dired-k) (add-hook 'dired-after-readin-hook #'dired-k-no-revert)) ;; Striped dired buffers (def-package! stripe-buffer :commands stripe-buffer-mode :init (add-hook 'dired-mode-hook 'stripe-buffer-mode))