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'?
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.
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
.
evince
with open
, and then it uses the default software (Skim
in my case). –
Villeinage 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, ... ? –
Myosin evince
with open
, PDF files are opened by Preview. –
Gastritis 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)))
gnome-open
with xdg-open
, in case of use in another GUI such as KDE. –
Appanage You can use !
to open the file and then specify a command.
&
instead of !
if you want to run that command asynchronously. –
Harping 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].
In Windows, I offen use ! and command "explorer" to open PDF/Word/Excel...
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"))))
(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))))
© 2022 - 2024 — McMap. All rights reserved.
!
viadired-guess-shell-alist-user
fromdired-x
:(setq dired-guess-shell-alist-user '(("\\.pdf\\'" "evince")))
– Isochronize