ユーザーに通常のバッファを表示したいが、ユーザーが書いたものを XML 形式で保存したい。とにかくEmacsでこれを行うことはできますか? いくつかの機能などを使用していますか?
ノート:
通常のバッファ: マークアップのないテキスト ... vs. ... 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)