Fold lisp/bandali-utils.el back into init.el
[~bandali/configs] / lisp / bandali-dired.el
index f89676e..9ed1030 100644 (file)
 
 ;;; Code:
 
-(use-package dired
-  :config
-  (setq dired-dwim-target t
-        dired-listing-switches "-alh"
-        ls-lisp-use-insert-directory-program nil)
+(with-eval-after-load 'dired
+  (csetq
+   dired-dwim-target t
+   dired-listing-switches "-alh"
+   dired-recent-directories-file (b/var "dired-recent-directories.el")
+   ls-lisp-dirs-first t
+   ls-lisp-use-insert-directory-program nil)
 
+  (declare-function dired-dwim-target-directory "dired-aux")
   ;; easily diff 2 marked files
   ;; https://oremacs.com/2017/03/18/dired-ediff/
   (defun dired-ediff-files ()
                         (set-window-configuration wnd))))
         (error "no more than 2 files should be marked"))))
 
+  (defun b/dired-start-process (program &optional args)
+    "Open current file with a PROGRAM."
+    ;; Shell command looks like this: "program [ARGS]... FILE" (ARGS
+    ;; can be nil, so remove it).
+    (declare-function dired-get-file-for-visit "dired")
+    (apply #'b/start-process
+           program
+           (remove nil (list args (dired-get-file-for-visit)))))
+
+  ;; local key bindings
+  (define-key dired-mode-map (kbd "b") #'dired-up-directory)
+  (define-key dired-mode-map (kbd "E") #'dired-ediff-files)
+  (define-key dired-mode-map (kbd "e") #'dired-toggle-read-only)
+  (define-key dired-mode-map (kbd "\\") #'dired-hide-details-mode)
+  (define-key dired-mode-map (kbd "z")
+    (lambda ()
+      (interactive)
+      (b/dired-start-process "zathura")))
+
   (require 'dired-x)
-  (setq dired-guess-shell-alist-user
-        '(("\\.pdf\\'"  "evince" "zathura" "okular")
-          ("\\.doc\\'"  "libreoffice")
-          ("\\.docx\\'" "libreoffice")
-          ("\\.ppt\\'"  "libreoffice")
-          ("\\.pptx\\'" "libreoffice")
-          ("\\.xls\\'"  "libreoffice")
-          ("\\.xlsx\\'" "libreoffice")
-          ("\\.flac\\'" "mpv")))
-  :bind (:map dired-mode-map
-              ("b"  . dired-up-directory)
-              ("E"  . dired-ediff-files)
-              ("e"  . dired-toggle-read-only)
-              ("\\" . dired-hide-details-mode)
-              ("z"  . (lambda ()
-                        (interactive)
-                        (b/dired-start-process "zathura"))))
-  :hook (dired-mode . dired-hide-details-mode))
+  (csetq dired-guess-shell-alist-user
+         '(("\\.pdf\\'"  "evince" "zathura" "okular")
+           ("\\.doc\\'"  "libreoffice")
+           ("\\.docx\\'" "libreoffice")
+           ("\\.ppt\\'"  "libreoffice")
+           ("\\.pptx\\'" "libreoffice")
+           ("\\.xls\\'"  "libreoffice")
+           ("\\.xlsx\\'" "libreoffice")
+           ("\\.flac\\'" "mpv"))))
+;; hooks
+(add-hook 'dired-mode-hook #'dired-hide-details-mode)
 
 (provide 'bandali-dired)
 ;;; bandali-dired.el ends here