开发者

How can I open files externally in Emacs dired mode?

开发者 https://www.devze.com 2023-03-23 11:58 出处:网络
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

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.


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)))


You can use ! to open the file and then specify a command.


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...


(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))))
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号