;;; -*- lexical-binding: t; -*- ;;; Commentary: ;;; Code: (defun bd/file-has-extension? (file types) "Returns t if file has an extension in LST, nil otherwise." (string-match (regexp-opt lst) (or (file-name-extension file) ""))) (defmacro bd/defun-find-file-wrapper (name types open-f) `(defun ,name (f &rest args) "Wrapper around F (find-file), passing ARGS." (if (bd/file-has-extension? (car args) ,types) (progn (,(eval open-f) (car args)) (recentf-add-file (car args)) nil) (apply f args)))) ;;;; dired (require 'dired) (keymap-global-set "C-c d" 'dired-jump) (keymap-set dired-mode-map "h" #'dired-hide-details-mode) (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 '(".jpeg" ".jpg" ".png")) "nsxiv &") (,(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 (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 (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) ;;;; transmission (use-package transmission :bind (:map transmission-mode-map ("R" . #'transmission-move))) (provide 'bd--files) ;;; bd-files ends here