1

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

笔记:

普通缓冲区:没有标记的文本......与...... XML格式:具有XML标签的文件和文件/缓冲区的所有内容都存储为记录..

4

2 回答 2

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 更改回纯文本。

于 2012-07-26T17:56:16.500 回答
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)
于 2012-07-26T20:42:15.027 回答