2012-07-26 131 views
1

我想向用戶顯示一個正常的緩衝區,但我想保存他/她以XML格式寫入的內容。我可以在Emacs中執行此操作嗎?使用某些功能或其他?如何以XML格式保存緩衝區(以XML格式顯示給用戶) - 在Emacs中

注:

正常緩衝:文本沒有標記的......比較... XML格式:有XML標籤和LL文件/緩衝區的內容存儲爲記錄的文件..

+0

你說的正常的格式VS XML格式的意思。它們都只是文本文件。你的意思是改變主模式形式的XML嗎?根據emacs文件的格式由文件擴展名或頭文件決定。 – zellio 2012-07-26 17:48:58

+0

@Mimisbrunnr:我在問題中增加了一個註釋,thnx – Daniel 2012-07-26 17:51:21

回答

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) 
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回純文本。

+0

偉大的建議人。我的主要問題是緩衝區內容實際轉換爲XML類型文件。我的意思是將「TEXT TEXT」存儲爲「 TEXT TEXT ..你可以給我提一些關於太配對嗎? – Daniel 2012-07-26 18:00:26

+0

所以你可以用轉換函數做到這一點, /採取一個很好的代碼塊,但你可以讓emacs輸出符合XML的字符串。 – zellio 2012-07-26 18:11:57