-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdired.el
169 lines (143 loc) · 5.27 KB
/
dired.el
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
;;; setup default dired -- cheatsheet here:
;; https://github.com/daviwil/emacs-from-scratch/blob/8c302a79bf5700f6ef0279a3daeeb4123ae8bd59/Emacs.org#dired
;; more here: https://github.com/Fuco1/dired-hacks/tree/7c0ef09d57a80068a11edc74c3568e5ead5cc15a#dired-open
(use-package dired
:straight (:type built-in)
:commands (dired dired-jump)
:custom ((dired-listing-switches "-agho --group-directories-first"))
:config
;; tell emacs to revert each Dired buffer automatically when revisiting buffer
(setq dired-auto-revert-buffer t
dired-kill-when-opening-new-dired-buffer t
;; Disable the prompt about whether I want to kill the Dired buffer for a
;; deleted directory. Of course I do!
dired-clean-confirm-killing-deleted-buffers nil)
;; Auto-refresh dired on filesystem change
(add-hook 'dired-mode-hook 'auto-revert-mode)
(evil-collection-define-key 'normal 'dired-mode-map
"l" 'dired-find-file
"L" 'dired-find-file-other-window
"h" 'dired-up-directory))
;; stole the below function from dired-hacks-utils.el since it was difficult
;; to just install that one file with straight.
;;;###autoload
(defun dired-hacks-next-file (&optional arg)
"Move point to the next file.
Optional prefix ARG says how many lines to move; default is one
line."
(interactive "p")
(unless arg (setq arg 1))
(if (< arg 0)
(dired-hacks-previous-file (- arg))
(--dotimes arg
(forward-line)
(while (and (or (not (dired-utils-is-file-p))
(get-text-property (point) 'invisible))
(= (forward-line) 0))))
(if (not (= (point) (point-max)))
(dired-move-to-filename)
(forward-line -1)
(dired-move-to-filename)
nil)))
;;;###autoload
(defun jds~avy-dired-cands ()
(save-excursion
(save-restriction
(narrow-to-region (window-start) (window-end (selected-window) t))
(goto-char (point-min))
(setq pt (point))
(dired-hacks-next-file)
(let ((candidates (list (cons (point) (selected-window)))))
(setq pt (point))
(dired-hacks-next-file)
(while (not (equal (point) pt))
(setq pt (point))
(push (cons (point) (selected-window)) candidates)
(dired-hacks-next-file))
(nreverse candidates)))))
;;;###autoload
(defun jds/avy-dired ()
"Goto a visible file or directory in a dired-buffer."
(interactive)
(avy-action-goto (avy-with jds/avy-dired
(avy-process (jds~avy-dired-cands)))))
(use-package dired-open
:config
(setq dired-open-extensions '(("docx" . "libreoffice")
("doc" . "libreoffice")
("xlsx" . "libreoffice")
("xls" . "libreoffice")
("odp" . "libreoffice")
("pptx" . "libreoffice"))))
(use-package dired-hide-dotfiles
:hook (dired-mode . dired-hide-dotfiles-mode)
:config
(evil-collection-define-key 'normal 'dired-mode-map
"H" 'dired-hide-dotfiles-mode))
(use-package dired-copy-paste
:straight (dired-copy-paste :type git :host github :repo "jsilve24/dired-copy-paste"))
(use-package dired-registers
:disabled ;; disabled since it depends on dired-single which I am no longer-using, could remove.
:straight (dired-registers :type git :host github :repo "jsilve24/dired-registers")
:config
(dired-registers-store ?d "~/Downloads/")
(dired-registers-store ?h "~/")
(dired-registers-store ?c "~/.emacs.d/")
(dired-registers-store ?g "~/Dropbox/Faculty/Grants/")
(dired-registers-store ?t "~/Dropbox/Faculty/Teaching/")
(dired-registers-store ?p "~/Dropbox/Faculty/Presentations/")
(dired-registers-store ?o "~/Dropbox/org/")
(dired-registers-store ?r "~/Dropbox/org/roam/"))
;;; dired history
(use-package dired-hist
:straight (dired-hist :type git :host github :repo "karthink/dired-hist")
:config
(dired-hist-mode 1))
;;;###autoload
(defun jds/dired-copy-dirname-as-kill ()
"Yank current directory path."
(interactive)
(kill-new dired-directory))
;; setup wv, ws, we bindings
(with-eval-after-load 'dired
(defun jds~dired-setup-function ()
"Function to setup buffer local variables. Added to `dired-mode-hook`."
(general-define-key
:states 'normal
:keymaps 'local
"f" #'jds/avy-dired
"F" #'link-hint-open-link
"w" #'(:ignore t)
"wo" #'dired-view-file
";" #'(:ignore t)
";d" #'dired-copy-paste-do-cut
"y" '(:ignore t :wk "yank")
"yd" #'jds/dired-copy-dirname-as-kill
"M" #'dired-mark
;; copy filename
"yf" #'dired-copy-filename-as-kill
;; copy absolute filepath
"yy" #'(lambda () (interactive) (dired-copy-filename-as-kill 0))
";y" #'dired-copy-paste-do-copy
";p" #'dired-copy-paste-do-paste
";m" #'dired-registers-store
";j" #'dired-registers-goto))
(add-hook 'dired-mode-hook 'jds~dired-setup-function))
;; local bindings
(jds/localleader-def dired-mode-map
;; "e" #'wdired-change-to-wdired-mode
;; "c" #'dired-rsync
"S" #'jds/dired-screenshot
"+" #'jds/make-dated-directory
"d" #'jds/dragon-dired)
;;; fluff
(use-package all-the-icons-dired
:hook (dired-mode . all-the-icons-dired-mode)
:diminish all-the-icons-dired-mode)
;;; mode specific bindings
(general-define-key
:keymaps 'dired-mode-map
:states 'n
"zh" #'dired-hide-dotfiles-mode)
(load-config "autoloads/dired.el")
(provide 'config-dired)