我想向用户显示一个正常的缓冲区,但我想以 XML 格式保存他/她所写的内容。我可以在 Emacs 中这样做吗?使用某些功能等?
笔记:
普通缓冲区:没有标记的文本......与...... XML格式:具有XML标签的文件和文件/缓冲区的所有内容都存储为记录..
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 更改回纯文本。
它将转换缓冲区保存在带有额外后缀的文件中.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)