我想向用户显示一个正常的缓冲区,但我想保存他/她用XML格式编写的内容。我能在Emacs中做到这一点吗?使用某些功能还是等?
注:
普通缓冲区:没有标记的文本...对... XML格式:具有XML标记的文件,ll文件/缓冲区的内容存储为记录..
答案 0 :(得分:3)
Emacs提供了可以附加功能的动作挂钩。在这种情况下,您可能希望将某些内容附加到before-save-hook
,这会在您保存文件时对其进行转换。
(defun some-transform () ... )
(add-hook 'after-save-hook 'some-transform nil t)
我对你的问题了解不多了。
这里的问题是这是一个文字转换,一旦用户保存文件,除非你应用另一个转换,否则它不会改变。
在这种情况下,您需要挂钩find-file-hook
(defn some-reverse-transform () ... )
(add-hook 'find-file-hook 'some-reverse-transform)
将xml更改为平面文本。
答案 1 :(得分:3)
它将变换缓冲区保存在带有额外后缀.xml
(defun transform-file-on-save ()
(let ((bufer-as-string (buffer-string))
(new-file-name (concat (buffer-file-name) ".xml")))
(with-temp-buffer
(insert bufer-as-string)
;; some operations in the buffer
(goto-char (point-min))
(replace-string "(" "<b>")
(goto-char (point-min))
(replace-string ")" "</b>")
;; save file
(message "Writing file: %s" new-file-name)
(write-region (point-min) (point-max) new-file-name nil 'quietly))))
(add-hook 'after-save-hook 'transform-file-on-save)
;; better have it around to get rid of the hook
;;(remove-hook 'after-save-hook 'transform-file-on-save)