在emacs中打开时如何自动解压缩自定义压缩文件?

时间:2014-01-14 16:08:47

标签: unix emacs elisp

我知道Emacs会自动打开.tar.gz等压缩文件。我试图用我自己的压缩脚本而不是标准脚本来实现这个目标。 在this link之后,我将以下内容添加到我的Emacs init文件

(if (fboundp 'auto-compression-mode)
    (auto-compression-mode 0)
  (require 'jka-compr)) 
(add-to-list 'jka-compr-compression-info-list 
             ["\\.customcom\\'"
              "custom compressing"  "customcom" (-c)
              "custom decompressing" "customcom" (-d)
              nil t])
(auto-compression-mode 1) 

理想情况下,我想在打开文件时运行命令customcom -d foo.customcom但是通过上面的添加,它运行customcom -d < foo.cusotmcom并发出错误。如何修改上面的内容以使输入重定向无效,以便它只采用文件名而不是文件的内容,或者是否有不同的方法来解决此问题?

3 个答案:

答案 0 :(得分:2)

也许,以下代码很有帮助。顺便说一句,有趣的是jka-compr的作者没有考虑对程序参数的评估,也没有提供filename作为可能的可评估论点之一。

我不知道您的压缩/解压缩程序。因此,我只使用cat代替以.cat结尾的文件进行测试。

(defadvice jka-compr-info-compress-args (around eval-args activate)
  "Evaluate program arguments"
  (setq ad-return-value (mapcar 'eval (aref info 3))))

(defadvice jka-compr-info-uncompress-args (around eval-args activate)
  "Evaluate program arguments"
  (setq ad-return-value (mapcar 'eval (aref info 6))))


(add-to-list 'jka-compr-compression-info-list ["\\.cat\\'" "cat" "cat" ("-")
                           "cat uncompress" "cat" (filename) nil t ""])

(add-to-list 'auto-mode-alist '("\\.cat\\'" nil jka-compr))

(add-to-list 'file-name-handler-alist '("\\.cat\\'" . jka-compr-handler))

相应的增强请求:

http://debbugs.gnu.org/cgi/bugreport.cgi?msg=5;att=1;bug=16454

答案 1 :(得分:1)

在不知道自定义压缩和解压缩工具的情况下很难对此进行测试,但在Linux上使用xargs似乎对我有用:

(if (fboundp 'auto-compression-mode)
    (auto-compression-mode 0)
  (require 'jka-compr))

(add-to-list 'jka-compr-compression-info-list
             ["\\.customcomm\\'"
              "custom compressing" "xargs" ("customcom" "-c")
              "custom decompressing" "xargs" ("customcom" "-d")
              nil t])

(auto-compression-mode 1)

请注意,如果此命令的输出不是STDOUT,则可能仍有问题。

答案 2 :(得分:1)

您可能希望尝试使用("-d" "-")作为参数,以防customcom遵循将-解释为“使用标准输入”的习惯。或者根据您的操作系统,您可以尝试("-d" "/dev/stdin"):它至少应该在GNU / Linux下运行。