在 emacs 中使用 dired,我会以“打开方式”的方式打开(即 .png)具有查看器列表(可通过键入选择)的任何文件...
我怎样才能做到这一点?
谢谢,
史蒂夫,
您应该使用&异步运行命令:! 将在命令运行时冻结 Emacs。
自定义dired-guess-shell-alist-user
为常见扩展的猜测列表:
(setq dired-guess-shell-alist-user
'(("\\.pdf\\'" "evince" "okular")
("\\.eps\\'" "evince")
("\\.jpe?g\\'" "eog")
("\\.png\\'" "eog")
("\\.gif\\'" "eog")
("\\.xpm\\'" "eog")
("\\.csv\\'" "libreoffice")
("\\.tex\\'" "pdflatex" "latex")
("\\.\\(?:mp4\\|mkv\\|avi\\|flv\\|ogv\\)\\'" "vlc")
("\\.\\(?:mp3\\|flac\\)\\'" "rhythmbox")
("\\.html?\\'" "firefox")
("\\.cue?\\'" "audacious")))
列表中的第一项将是默认选项,例如evince
over okular
。M-n您可以使用/导航到其他选项
M-p。
如果您使用的是 Linux,您可以尝试我用于此任务的命令:
(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)))
(apply
#'start-process
(list cmd nil shell-file-name shell-command-switch
(format "nohup 1>/dev/null 2>/dev/null %s \"%s\""
(if (> (length file-list) 1)
(format "%s %s"
cmd
(cadr (assoc cmd dired-filelist-cmd)))
cmd)
(mapconcat #'expand-file-name file-list "\" \"")))))
它比这更好dired-do-async-shell-command
,
&因为即使您关闭打开它们的 Emacs,打开的文件也会保留。我比平时更倾向于关闭 Emacs,因为我经常在测试东西,并且重新启动比重置到默认状态更快。
如果您可以不使用查看器列表,则可以!在点位于 dired 文件上方时点击,并且可以键入命令的名称(如果您的 Emacs 足够新,则使用制表符完成)。dired 将运行该命令,并在末尾添加文件名。
如果文件名不应该在命令的末尾,添加*
它应该在的任何地方,dired 会将它放在那里。
例如,点击!并foo.png
输入 just bar
will run bar foo.png
,而 typingbar * --baz
将 run bar foo.png --baz
。
对于大多数 GNU/linux 桌面,您可以使用中介程序包,它使用Freedesktop mime 类型规范来自动显示适合打开某个特定扩展名文件的程序列表。