Шаблонный движок для Emacs? - PullRequest
7 голосов
/ 28 июля 2011

Я видел разные движки шаблонов для Emacs (включая yasnippet), но я хочу другого зверя. Большинство шаблонизаторов помогают, пока вы пишете. То, что я хочу, это больше "генератор текста", чем заставка для набора текста. Я собираюсь попытаться реализовать это, но просто задайте вопрос, можете ли вы дать мне подсказки по реализации пакетов 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-lisp, система будет искать следующий тег 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 для генерации графики PGF / TikZ моего доктора философии, и это была действительно хорошая комбинация, но мне пришлось использовать внешнюю программу (Perl), чтобы отфильтровать файлы перед подачей в LaTeX.)

Ответы [ 3 ]

3 голосов
/ 28 июля 2011

Ваши требования сразу же заставили меня задуматься о Org Babel , но я не уверен, что его можно использовать как второстепенный режим только в определенных областях вашего документа. Если вы спросите в списке организаций, вероятно, кто-то скажет вам, как получить желаемое поведение.

0 голосов
/ 29 июля 2011

Как упомянул sanityinc, это определенно то, для чего нужен org babel.Он уже поддерживает несколько языков, таких как R, lisp, python, latex и многие другие.Для получения дополнительной информации об организации Babel, посмотрите здесь .

0 голосов
/ 28 июля 2011

Возможно, вы захотите взглянуть на SRecode, который является частью CEDET и также объединен с Emacs:

http://cedet.sourceforge.net/srecode.shtml

Он больше нацелен на генерацию кода, но, возможно, вы можетеприспособить его под свои нужды?

...