Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 访问并在emacs中写入文件时对其进行预处理/后处理_Xml_Json_Emacs_Elisp - Fatal编程技术网

Xml 访问并在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

我有一堆相当详细的xml文件,它们以某种方式命名,比如“verbosefile*.xml”。我有一对python脚本,可以将这些xml文件转换为紧凑的json格式,反之亦然。目前,我的工作流程是首先使用脚本将详细xml文件转换为压缩json文件,对该文件进行更改或编辑,然后将压缩json版本转换回详细xml格式。我希望每当我在emacs中访问/打开文件时,这个过程都能透明地进行。基本上,我的新工作流程应该是,在直接从编辑器打开详细的xml文件时,我应该看到紧凑的json表示,在编写文件时,json应该在后台转换为详细的xml格式并写入。关于如何做到这一点的一些提示将非常有用。我不熟悉elisp和emacs钩子/函数,即使我已经使用编辑器一段时间了


编辑:我可以更改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,无论您使用什么主要模式,都会得到您所需要的。这是一个十六进制编辑器,它使用外部命令将文件转储为人类可读的格式,并在保存后再次将其转换回。