【问题标题】:How can emacs make a 'open-with' selectable for files?emacs 如何为文件选择“打开方式”?
【发布时间】:2014-05-26 14:19:46
【问题描述】:

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

我该怎么做?

谢谢,

史蒂夫,

【问题讨论】:

  • 我使用自定义设置:在通常不编辑的文件类型(例如 *.pdf)上输入键(或者当我选择多个类似类型的文件时),我得到一个选择列表 -例如,[a]dobe | [s]kim | [p]review | [o]mnipage。如果我想要一些特别的东西,而不是使用回车键,我点击了用户定义的键盘快捷键,dired 缓冲区打开应用程序文件夹 - 在recursive-edit - 然后当我点击所需应用程序上的回车键, 它将打开先前选择的文件 -- start-process . . . 被选定的应用程序激活并且文件打开。
  • 这里是上述 Github 示例的链接:github.com/lawlist/dired-read-file-name/blob/master/…

标签: emacs elisp open-with


【解决方案1】:

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

如果文件名不应该在命令的末尾,请在应该在的地方添加 *,然后 dired 会将其放在那里。

例如,在foo.png 上点击! 并仅输入bar 将运行bar foo.png,而输入bar * --baz 将运行bar foo.png --baz

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 不,这不适用于具有不同扩展名的文件列表:...("\\.jpe?g\\'" "eog") ("\\.png\\'" "eog") ("\\.gif\\'" "eog") ("\\.xpm\\'" "eog")...。见Emacs bug #17251。您必须组合这些正则表达式并为命令“eog”使用单个条目。
    • 谢谢。我需要加载 dired-xdired-aux 才能正常工作。
    【解决方案3】:

    对于大多数 GNU/linux 桌面,您可以使用 mediator 软件包,该软件包使用 Freedesktop mime-type specifications 自动显示适合打开某个特定扩展名文件的程序列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-29
      • 2013-02-16
      • 2014-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      相关资源
      最近更新 更多