Answers:
在Linux上,我一直都这样做。在dired
模式下,将光标放在要观看的文件上。
键入!
,然后输入要使用的程序。
我使用mplayer
,所以输入:
!mplayer
就是这样。您也可以使用vlc或在您的平台上运行的任何工具:
!vlc
使用Dired的真正好处是,我得到了一个包含mplayer输出的窗口(如果使用诸如nautilus
或的文件编辑器,则无法获得该窗口thunar
,而我右键单击并请求该文件以mplayer开头)。
无论如何,不需要任何宏或扩展。只是...!
&
异步执行操作,例如:&vlc
-您无需关闭shell命令即可获得emacs
&vlc
似乎没有用,但是vlc&
可以用。
&
代替的!
。因此,当光标位于所需文件上时,只需点击即可&
,它将与异步运行,这与不同!
。
我已经在这篇文章中介绍了我的VLC设置。真正酷的是子进程通过取消了nohup
,因此您可以安全地重新启动或关闭Emacs,而无需自动关闭VLC。
这是代码:
(require 'dired-aux)
(defvar dired-filelist-cmd
'(("vlc" "-L")))
(defun dired-start-process (cmd &optional file-list)
(interactive
(let ((files (dired-get-marked-files
t current-prefix-arg)))
(list
(dired-read-shell-command "& on %s: "
current-prefix-arg files)
files)))
(let (list-switch)
(start-process
cmd nil shell-file-name
shell-command-switch
(format
"nohup 1>/dev/null 2>/dev/null %s \"%s\""
(if (and (> (length file-list) 1)
(setq list-switch
(cadr (assoc cmd dired-filelist-cmd))))
(format "%s %s" cmd list-switch)
cmd)
(mapconcat #'expand-file-name file-list "\" \"")))))
(define-key dired-mode-map "r" 'dired-start-process)
该代码所做的另一件事是,它允许使用标记多个文件m,然后将所有文件排队到VLC播放列表中。
以下代码段仅在OSX操作系统上适用于当前光标所在的一个文件-代码不提供检查文件扩展名和/或猜测与文件扩展名匹配的正确应用程序的代码:
(start-process
"my-process-name" ;; process name
nil ;; buffer output name, if an output buffer is so desired.
"open" ;; argument 1
"-a" ;; argument 2
"/Applications/VLC.app/Contents/MacOS/VLC" ;; argument 3
(dired-get-file-for-visit)) ;; argument 4
如果楼主想要对付打开多个标记文件,然后使用dired-get-marked-files
和mapcar
在列表中向下。