diff options
Diffstat (limited to '.config/emacs/modules/bd--files.el')
-rw-r--r-- | .config/emacs/modules/bd--files.el | 113 |
1 files changed, 49 insertions, 64 deletions
diff --git a/.config/emacs/modules/bd--files.el b/.config/emacs/modules/bd--files.el index 52b46ae..a39f21c 100644 --- a/.config/emacs/modules/bd--files.el +++ b/.config/emacs/modules/bd--files.el @@ -4,79 +4,64 @@ (require 'recentf) -(defmacro bd/defun-find-file-wrapper (name types open-f) - `(defun ,name (f &rest args) - "Wrapper around F (find-file), passing ARGS." - (if (string-match (regexp-opt ,types) (or (file-name-extension (car args)) "")) - (progn - (,(eval open-f) (car args)) - (recentf-add-file (car args)) - nil) - (apply f args)))) -;;;; dired -(defun bd/dired-find-file () - (interactive) - (if (file-directory-p (dired-get-file-for-visit)) - (dired-find-alternate-file) - (dired-find-file))) -(defun bd/dired-up-directory () - (interactive) - (let ((buf (current-buffer))) - (dired-up-directory) - (kill-buffer buf))) -(require 'dired) -(keymap-global-set "C-c d" 'dired-jump) -(keymap-set dired-mode-map "RET" #'bd/dired-find-file) -(keymap-set dired-mode-map "^" #'bd/dired-up-directory) -(setopt dired-listing-switches "-alhLG --time-style=long-iso --group-directories-first" - - dired-recursive-copies 'always - dired-recursive-deletes 'always - - dired-auto-revert-buffer t - - ;; "dwim": guess where to move files - dired-dwim-target t - - dired-guess-shell-alist-user - `((,(regexp-opt '(".pdf")) "pdftotext -nopgbrk -enc UTF-8 -eol unix -layout") - (,(regexp-opt '(".html")) "icecat &"))) - -;; pdf (defun bd/zathura (file) "Open FILE with zathura" - (interactive) - (start-process (concat "zathura (" (file-name-base file) ")") nil "zathura" (expand-file-name file))) - -(bd/defun-find-file-wrapper bd/pdf-find-file-wrapper - '("epub" "pdf") - #'bd/zathura) -(advice-add 'find-file :around #'bd/pdf-find-file-wrapper) - -;; video + (start-process "zathura" nil "zathura" (expand-file-name file))) (defun bd/mpv (file) "Open FILE with mpv" - (start-process (concat "mpv (" (file-name-base file) ")") nil "mpv" "--force-window=yes" (expand-file-name file))) - - -(bd/defun-find-file-wrapper bd/video-find-file-wrapper - '("mkv" "mov" "mp4" "webm" "m4v" "wav" "mp3" "opus" "ogv" "flac") - #'bd/mpv) -(advice-add 'find-file :around 'bd/video-find-file-wrapper) - -;; image + (start-process "mpv" nil "mpv" "--force-window=yes" (expand-file-name file))) (defun bd/nsxiv (file) "Open FILE with nsxiv" - (start-process (concat "nsxiv (" (file-name-base file) ")") nil "nsxiv" (expand-file-name file))) -(bd/defun-find-file-wrapper bd/image-find-file-wrapper - '("jpg" "jpeg" "png" "webp" "bmp" "ico" "gif" "JPG" "PNG") - #'bd/nsxiv) -(advice-add 'find-file :around 'bd/image-find-file-wrapper) - + (start-process "nsxiv" nil "nsxiv" (expand-file-name file))) + +(defun bd/external-find-file-wrapper (f &rest args) + "Wrapper around F (find-file), passing ARGS." + (defun runner (f) + (funcall f (car args)) + (recentf-add-file (car args))) + + (let ((ext (or (file-name-extension (car args)) ""))) + (cond + ((string-match (regexp-opt '("epub" "pdf")) ext) + (runner #'bd/zathura)) + ((string-match (regexp-opt '("mkv" "mov" "mp4" "webm" "m4v" + "wav" "mp3" "opus" "ogv" "flac")) ext) + (runner #'bd/mpv)) + ((string-match (regexp-opt '("jpg" "jpeg" "png" "webp" + "ico" "gif" "JPG" "PNG")) ext) + (runner #'bd/nsxiv)) + (t (apply f args))))) +(advice-add 'find-file :around #'bd/external-find-file-wrapper) + +(use-package dired + :bind + (("C-c d" . dired-jump)) + :config + (defun bd/dired-find-file () + (interactive) + (if (file-directory-p (dired-get-file-for-visit)) + (dired-find-alternate-file) + (dired-find-file))) + (defun bd/dired-up-directory () + (interactive) + (let ((buf (current-buffer))) + (dired-up-directory) + (kill-buffer buf))) + + (keymap-set dired-mode-map "RET" #'bd/dired-find-file) + (keymap-set dired-mode-map "^" #'bd/dired-up-directory) + :custom + (dired-listing-switches "-alhLG --time-style=long-iso --group-directories-first") + (dired-recursive-copies 'always) + (dired-recursive-deletes 'always) + (dired-auto-revert-buffer t) + (dired-dwim-target t) + (dired-guess-shell-alist-user + `((,(regexp-opt '(".pdf")) "pdftotext -nopgbrk -enc UTF-8 -eol unix -layout") + (,(regexp-opt '(".html")) "icecat &")))) -;;;; transmission (use-package transmission :bind (:map transmission-mode-map |