;;; -*- lexical-binding: t; -*- ;;; Commentary: ;;; Code: (require 'recentf) (defun bd/zathura (file) "Open FILE with zathura" (start-process "zathura" nil "zathura" (expand-file-name file))) (defun bd/mpv (file) "Open FILE with mpv" (start-process "mpv" nil "mpv" "--force-window=yes" (expand-file-name file))) (defun bd/nsxiv (file) "Open FILE with nsxiv" (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 &")))) (use-package transmission :bind (:map transmission-mode-map ("R" . #'transmission-move))) (provide 'bd--files) ;;; bd-files ends here