;;; -*- lexical-binding: t; -*- ;;; Commentary: ;;; Code: (use-package recentf :demand t :bind (("C-x g" . recentf-open)) :init (recentf-mode 1) :config (setopt recentf-max-saved-items 3500 recentf-auto-cleanup 300)) (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/qemu (file) "Open FILE with QEMU." (let ((options `("qemu-system" nil "qemu-system-x86_64" ,(expand-file-name file) "-net" "nic" "-net""user,hostfwd=tcp:127.0.0.1:2222-:22" "--accel" "kvm" "-m" "4G"))) (unless (string-match-p "graphic" file) (setq options (append options (list "-nographic")))) (apply 'start-process options))) (defun bd/rom (file) "Open FILE with an emulator." (let ((command (cdr (assoc (file-name-extension file) '(("gba" . "mgba") ("z64" . "mupen64plus") ("iso" . "dolphin-emu") ("n64" . "mupen64plus") ("sfc" . "bsnes")))))) (start-process command nil command (expand-file-name file)))) (defun bd/external-find-file-wrapper (f &rest args) "Wrapper around F (find-file), passing ARGS." (defun bd/open-with-function (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) (bd/open-with-function #'bd/zathura)) ((string-match (regexp-opt '("mkv" "mov" "mp4" "webm" "m4v" "wav" "mp3" "opus" "ogv" "flac" "m4a")) ext) (bd/open-with-function #'bd/mpv)) ((string-match (regexp-opt '("jpg" "jpeg" "png" "webp" "ico" "gif" "JPG" "PNG")) ext) (bd/open-with-function #'bd/nsxiv)) ((string-match (regexp-opt '("qcow2")) ext) (bd/open-with-function #'bd/qemu)) ((string-match (regexp-opt '("gba" "z64" "n64" "sfc" "iso")) ext) (bd/open-with-function #'bd/rom)) (t (apply f args))))) (advice-add #'find-file :around #'bd/external-find-file-wrapper) (use-package dired :demand t :config (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 dired-dwim-target t dired-guess-shell-alist-user `((,(regexp-opt '(".pdf")) "pdftotext -nopgbrk -enc UTF-8 -eol unix -layout") (,(regexp-opt '(".html")) "icecat &")))) (provide 'bd--files) ;;; bd--files.el ends here