I want to open a pdf with evince instead of DocView mode. Is there a possibility to open a file with a specific command like 'evince'?
8 Answers
Yes. Use ! while in dired to run a shell command on a file.
In the case of evince, it's smarter to use &, though, which will run the command asynchronously, so emacs will still be usable while you have the PDF open.
2 Comments
There is more then one way to do that. I suggest OpenWith library. Setup for your case may look like that:
(add-to-list 'load-path "/path/to/downloaded/openwith.el") (require 'openwith) (setq openwith-associations '(("\\.pdf\\'" "evince" (file)))) (openwith-mode t) It sets file handler that will work from both dired and find-file.
4 Comments
evince with open, and then it uses the default software (Skim in my case).RET on the file name in dired instead of using ! or & to run a shell command. You also lose all the built in associations by using setq on openwith-associations. Might there be a better way to change only the pdf association while leaving in associations for .mp3, .jpg, ... ?evince with open, PDF files are opened by Preview.Try this.
(defun dired-open-file () "In dired, open the file named on this line." (interactive) (let* ((file (dired-get-filename nil t))) (message "Opening %s..." file) (call-process "gnome-open" nil 0 nil file) (message "Opening %s done" file))) 1 Comment
gnome-open with xdg-open, in case of use in another GUI such as KDE.You can use ! to open the file and then specify a command.
1 Comment
& instead of ! if you want to run that command asynchronously.Note that you can keep the process alive after exiting Emacs by using nohup [Wikipedia], so put the point on a single file in dired:
C-u ! nohup evince ? & which creates a Persistent Processes [EmacsWiki].
1 Comment
Another windows OS solution using explorer.exe to open single/multiple files. To open multiple files, mark the file using m in dired and then hit o to open multiple files. To just open a single file under point hit o. I have tested it in Emacs 28.2 GUI running natively on windows (no WSL/Cygwin/Linux-on-Windows).
(use-package dired :bind (:map dired-mode-map ("o" . jr/dired-open)) :config (defun jr/dired-open () (interactive) (if-let ((marks (dired-get-marked-files))) (dolist (file marks) (shell-command (format "explorer.exe %s" (file-name-nondirectory file)))) (user-error "No marked files; aborting")))) Comments
(defun dired-open() (interactive) (setq file (dired-get-file-for-visit)) (setq ext (file-name-extension file)) (cond ((string= ext "pdf") ;; shell-quote-argument escapes white spaces on the file name (async-shell-command (concat "zathura " (shell-quote-argument file)))) ((string= ext "epub") (async-shell-command (concat "zathura " (shell-quote-argument file)))) ((string= ext "rar") (async-shell-command (concat "file-roller " (shell-quote-argument file)))) ((string= ext "zip") (async-shell-command (concat "file-roller " (shell-quote-argument file)))) (t (dired-find-file))))