2011-07-27 46 views
7

我見過不同的Emacs模板引擎(包括yasnippet),但我想要的是一個不同的野獸。大部分模板引擎都在您寫作時助手。我想要的更多是一個「文本生成器」,而不是一個打字保存器。我即將嘗試實現它,但只是提出問題,看看您是否可以給我提示實現類似的emacs包。用於Emacs的模板引擎?

總結一下,我想要的是在文檔內部(在給定語言或文本格式的註釋內)內嵌emacs-lisp代碼以在標記內生成文本並使用任何組合鍵來更新它。例如,假設我要產生一些LaTeX的代碼是有點長,重複性的,但我可以用一些變量參數:

... rest of the normal text... 
# (deftemplate my-repetitive-latex-code (parameter) 
# ("blah blah" parameter "more blah blah") 
# 
# (defvar *latex-code-parameters* '("abc" "def")) 
# 
# (apply-template #'my-repetitive-latex-code *latex-code-paramters*) 
# 
# START GENERATED TEXT 
# END GENERATED TEXT 
... rest of the normal text... 

的想法是,當我「評價」的評價的Emacs口齒不清代碼,系統會尋找下一個START GENERATED TEXT標籤,並插入評估所選代碼的結果(即,包括與參數abc然後def文本),喜歡的東西:

# START GENERATED TEXT 
blah blah abc more blah blah 
blah blah def more blah blah 
# END GENERATED TEXT 

,或者甚至更好,一些類似於Perl Text::Template的模板引擎,即能夠區分用Perl編寫的位(使用標記),並以內聯方式替換結果,但在當前情況下,使用emacs-lisp作爲編程語言。 (例如,我使用Perl Text :: Template來生成我的PhD的PGF/TikZ圖形,它確實是一個很好的組合,但我必須使用外部程序(Perl)來過濾文件才能饋送膠乳)

回答

3

您的要求立即讓我想到了Org Babel,但我不確定它可以在文檔的某些區域內用作次要模式。如果你在組織名單上提問,很可能有人會告訴你如何獲得你想要的行爲。

+0

+1非常有趣的是Org Babel。我實際上使用Org,並提出詢問是否可以包含在某些次要模式中的建議。 –

+0

如果您在組織列表中獲得答案,請在此處張貼(並接受它!),以便我們都可以看到您做了什麼。 – sanityinc

0

由於sanityinc提到,這絕對是org babel的用途。它已經支持R,lisp,python,latex等多種語言。有關org babel的更多信息,請看here