Xml 访问并在emacs中写入文件时对其进行预处理/后处理
我有一堆相当详细的xml文件,它们以某种方式命名,比如“verbosefile*.xml”。我有一对python脚本,可以将这些xml文件转换为紧凑的json格式,反之亦然。目前,我的工作流程是首先使用脚本将详细xml文件转换为压缩json文件,对该文件进行更改或编辑,然后将压缩json版本转换回详细xml格式。我希望每当我在emacs中访问/打开文件时,这个过程都能透明地进行。基本上,我的新工作流程应该是,在直接从编辑器打开详细的xml文件时,我应该看到紧凑的json表示,在编写文件时,json应该在后台转换为详细的xml格式并写入。关于如何做到这一点的一些提示将非常有用。我不熟悉elisp和emacs钩子/函数,即使我已经使用编辑器一段时间了Xml 访问并在emacs中写入文件时对其进行预处理/后处理,xml,json,emacs,elisp,Xml,Json,Emacs,Elisp,我有一堆相当详细的xml文件,它们以某种方式命名,比如“verbosefile*.xml”。我有一对python脚本,可以将这些xml文件转换为紧凑的json格式,反之亦然。目前,我的工作流程是首先使用脚本将详细xml文件转换为压缩json文件,对该文件进行更改或编辑,然后将压缩json版本转换回详细xml格式。我希望每当我在emacs中访问/打开文件时,这个过程都能透明地进行。基本上,我的新工作流程应该是,在直接从编辑器打开详细的xml文件时,我应该看到紧凑的json表示,在编写文件时,jso
编辑:我可以更改python脚本以使事情变得更简单。例如,如果处理std输入的脚本使问题更容易解决,我可以这样做。有多种方法可以满足您的要求 其中一种,即所谓的“规范方式”(尽管似乎并不经常使用),就是使用
格式列表
。在您的情况下,格式的检测基于文件名而不是文件内容,因此您需要全局地向format alist
添加一个条目,其中REGEXP部分为nil。然后,您可以通过自动模式alist
设置一个特殊模式,该模式将首先通过第一个脚本传递缓冲区的内容(使用调用处理区域
),然后设置缓冲区文件格式
,以指示您正在使用添加到格式alist
的格式
另一个选项是使用文件名处理程序alist
,就像我们对.gz文件所做的那样
另一种选择是使用特殊模式(如上所述),但不必设置
格式列表
和缓冲文件格式
,只需(添加hook“write file functions”#“my-write-hook nil t)
,并使用第二个脚本使我的write hook
保存文件。我有一种不同的光盘格式(gjots)我想用emacs的组织模式编辑它们
由于format alist无法使用类似*.gjots的文件扩展名,因此我遵循了上一篇文章中对该技术的描述,并(结合上一篇文章中的代码)找到了解决原始问题的有效方法:
(setq format-alist
(cons '(gjots "gjots" nil "gjots2org" "org2gjots" t nil) format-alist))
(define-derived-mode gjots-mode org-mode "gjots"
"Major mode for editing gjots files."
(format-decode-buffer 'gjots))
(autoload 'gjots-mode "gjots-mode" "Major mode to edit gjots files." t)
(setq auto-mode-alist
(cons '("\\.gjots$" . gjots-mode) auto-mode-alist))
这里有一个关于设置sentinel的文档链接:这里有一个关于为流程设置过滤器的文档链接(以防您需要监控流程输出并根据所述输出采取某些操作):这里有一个链接,指向讨论如何使用
启动流程的文档:一旦你解决了这个流程的问题,剩下的将是小菜一碟——使用主模式钩子或查找文件钩子或类似的东西。我先从流程开始——让它工作起来,然后是一个简单的Google for emacs add hook,无论您使用什么主要模式,都会得到您所需要的。这是一个十六进制编辑器,它使用外部命令将文件转储为人类可读的格式,并在保存后再次将其转换回。