2

在 emacs 中使用 dired,我会以“打开方式”的方式打开(即 .png)具有查看器列表(可通过键入选择)的任何文件...

我怎样才能做到这一点?

谢谢,

史蒂夫,

4

3 回答 3

1

您应该使用&异步运行命令:! 将在命令运行时冻结 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 okularM-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,因为我经常在测试东西,并且重新启动比重置到默认状态更快。

于 2014-04-12T13:59:24.700 回答
0

如果您可以不使用查看器列表,则可以!在点位于 dired 文件上方时点击,并且可以键入命令的名称(如果您的 Emacs 足够新,则使用制表符完成)。dired 将运行该命令,并在末尾添加文件名。

如果文件名不应该在命令的末尾,添加*它应该在的任何地方,dired 会将它放在那里。

例如,点击!foo.png输入 just barwill run bar foo.png,而 typingbar * --baz将 run bar foo.png --baz

于 2014-04-12T13:39:19.253 回答
0

对于大多数 GNU/linux 桌面,您可以使用中介程序包,它使用Freedesktop mime 类型规范来自动显示适合打开某个特定扩展名文件的程序列表。

于 2021-07-19T21:59:45.203 回答