我知道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
并发出错误。如何修改上面的内容以使输入重定向无效,以便它只采用文件名而不是文件的内容,或者是否有不同的方法来解决此问题?
答案 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下运行。