我知道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)
理想情况下,我想在打开文件时运行命令customcom -d foo.customcom
,但使用上面的代码,运行customcom -d < foo.cusotmcom
并给出错误。 我怎样才能修改上述取消inputredirect,以便它只接受文件名而不是文件的内容,或者是否有不同的方法来解决这个问题?
也许,下面的代码是有帮助的。 顺便提一句,有趣的是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
如果不知道自定义的压缩和解压缩工具是什么,就很难测试,但在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
,您可能仍然有问题。
如果customcom
遵循解释习惯,则可以尝试使用("-d" "-")
作为参数,以表示“使用stdin”。 或者取决于你的操作系统,你可以尝试("-d" "/dev/stdin")
:它至少应该在GNU / Linux下工作。