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

Bob*_*law 5 unix emacs elisp

我知道 Emacs 会自动打开像.tar.gz. 我试图弄清楚如何使用我自己的压缩脚本而不是标准脚本来实现这一点。按照此链接,我将以下内容添加到我的 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) 
Run Code Online (Sandbox Code Playgroud)

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

Tob*_*ias 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))
Run Code Online (Sandbox Code Playgroud)

相应的增强请求:

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