如何以XML格式保存缓冲区(未向用户显示为XML) - 在Emacs中

时间:2012-07-26 17:46:37

标签: emacs elisp

我想向用户显示一个正常的缓冲区,但我想保存他/她用XML格式编写的内容。我能在Emacs中做到这一点吗?使用某些功能还是等?

注:

普通缓冲区:没有标记的文本...对... XML格式:具有XML标记的文件,ll文件/缓冲区的内容存储为记录..

2 个答案:

答案 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)