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

Unix 如何在emacs中打开自定义压缩文件时自动解压缩?,unix,emacs,elisp,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 ["\\.custo

我知道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-dfoo.customcom
,但是通过上面的添加,它将运行
customcom-d
,并给出一个错误。如何修改上述内容以取消输入重定向,使其只接受文件名而不接受文件内容,或者是否有其他解决此问题的方法?

如果不知道您的自定义压缩和解压缩工具是什么,很难对其进行测试,但是在Linux上使用
xargs
似乎对我很有效:

(如果(fboundp'自动压缩模式)
(自动压缩模式0)
(需要“jka压缩机”)
(添加到列表“jka压缩信息列表”
[“\\.customcomm\\'”
自定义压缩“xargs”(“customcom”-c)
自定义解压缩“xargs”(“自定义COM”-d)
零t])
(自动压缩模式1)

请注意,如果此命令的输出不是STDOUT,则可能仍然存在问题。以下代码可能会有所帮助。顺便说一句,有趣的是,
jka compr
的作者没有考虑程序参数的计算,也没有将
filename
作为可能的可计算参数之一

我不知道你的压缩/解压缩程序。因此,我只是将
cat
用于以
.cat
结尾的文件,而不是用于测试

(defadvice jka compr info compress args(在eval args附近激活)
“计算程序参数”
(setq ad返回值(mapcar评估(aref信息3)))
(defadvice jka压缩信息解压参数(激活评估参数周围)
“计算程序参数”
(setq ad返回值(mapcar评估(aref信息6)))
(添加到列表“jka压缩信息列表[“\\.cat\\”“cat”“cat”(“-”)中)
“cat解压”“cat”(文件名)nil t”“])
(添加到列表“自动模式列表”(“\\.cat\\'”nil jka compr))
(添加到列表“文件名处理程序列表”(“\\.cat\\”.jka compr handler))
相应的增强请求:


如果
customcom
遵循解释
-
的习惯,意思是“使用stdin”,您可能希望尝试使用
(“-d”“-”
作为参数。或者根据您的操作系统,您可以尝试
(“-d”“/dev/stdin”)
:它至少应该在GNU/Linux下工作。

这是纯粹的天才。我不知道有一种方法可以在不修补源代码的情况下扩展init文件中的现有功能。你能推荐一本好书吗。我只使用了一个月的emacs,我已经向bug gnu提交了一个增强请求-emacs@gnu.org'. 标题是“增强:emacs库jka compr”。我不知道它什么时候到达名单上。此增强包括对程序参数的评估。正如@stefan所指出的,建议对于生产代码是有害的。因此,让我们希望他们接受这一改进。有关elisp的介绍,请参见C-h i Emacs Lisp简介
。更多增强的内容在
C-HI Elisp
中。