Refactor tools/dired; fix leader key in dired buffers

This commit is contained in:
Henrik Lissner 2018-01-27 20:49:46 -05:00
parent fcbfe352c4
commit cedb8d0058
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395

View file

@ -1,61 +1,54 @@
;;; tools/dired/config.el -*- lexical-binding: t; -*- ;;; tools/dired/config.el -*- lexical-binding: t; -*-
(setq ;; Always copy/delete recursively (def-package! dired
dired-recursive-copies 'always :defer t
dired-recursive-deletes 'top :init
;; Auto refresh dired, but be quiet about it (setq ;; Always copy/delete recursively
global-auto-revert-non-file-buffers t dired-recursive-copies 'always
auto-revert-verbose nil dired-recursive-deletes 'top
;; files ;; Auto refresh dired, but be quiet about it
image-dired-dir (concat doom-cache-dir "image-dired/") global-auto-revert-non-file-buffers t
image-dired-db-file (concat image-dired-dir "image-dired/db.el") auto-revert-verbose nil
image-dired-gallery-dir (concat image-dired-dir "gallery/") ;; files
image-dired-temp-image-file (concat image-dired-dir "temp-image") image-dired-dir (concat doom-cache-dir "image-dired/")
image-dired-temp-rotate-image-file (concat image-dired-dir "temp-rotate-image")) image-dired-db-file (concat image-dired-dir "image-dired/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"))
:config
(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)
(defun +dired|sort-directories-first () ;; Automatically create missing directories when creating new files
"List directories first in dired buffers." (defun +dired|create-non-existent-directory ()
(save-excursion (let ((parent-directory (file-name-directory buffer-file-name)))
(let (buffer-read-only) (when (and (not (file-exists-p parent-directory))
(forward-line 2) ;; beyond dir. header (y-or-n-p (format "Directory `%s' does not exist! Create it?" parent-directory)))
(sort-regexp-fields t "^.*$" "[ ]*." (point) (point-max)))) (make-directory parent-directory t))))
(and (featurep 'xemacs) (push #'+dired|create-non-existent-directory find-file-not-found-functions)
(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 ;; Don't interfere with leader key
(defun +dired|create-non-existent-directory () (define-key dired-mode-map (kbd doom-leader-key) nil))
(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 (def-package! dired-k
:after dired :after dired
:config :config
(setq dired-k-style 'git) (setq dired-k-style 'git)
(add-hook 'dired-initial-position-hook #'dired-k)
(add-hook 'dired-after-readin-hook #'dired-k-no-revert)
(defun +dired*dired-k-highlight (orig-fn &rest args) (defun +dired*dired-k-highlight (orig-fn &rest args)
"Butt out if the requested directory is remote (i.e. through tramp)." "Butt out if the requested directory is remote (i.e. through tramp)."
(unless (file-remote-p default-directory) (unless (file-remote-p default-directory)
(apply orig-fn args))) (apply orig-fn args)))
(advice-add #'dired-k--highlight :around #'+dired*dired-k-highlight) (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))