Я экспериментировал с режимом темпа emacs, и мне кажется, что это сэкономило мне много времени на печать (всегда хорошо), но я не заставил его работать именно так, как я хочу. На вики есть пример для elisp, аналогичный тому, что я хочу сделать, который работает, как и ожидалось. Вот полный .emacs, на котором я его тестировал:
(require 'tempo)
(setq tempo-interactive t)
(tempo-define-template "lambda"
'(> "(lambda (" p ")" n> r> ")">)
nil
"Insert a template for an anonymous procedure")
(define-abbrev lisp-mode-abbrev-table "lambda" "" 'tempo-template-lambda)
Это позволяет мне набирать "лямбда", затем пробел и автоматически вставлять
(lambda ( )
)
В моем буфере с точкой на первой закрывающей скобке.
Однако, заменив два последних секса на следующий код (украденный у Иоахима Бауманна через Себастьяна Варретта и измененный мной):
(tempo-define-template "c-include"
'("#include <" r ".h>" > n)
nil
"Insert a #include <> statement")
(define-abbrev c-mode-abbrev-table "c-include" "" 'tempo-template-lambda)
Не приведет к вставке шаблона после ввода «c-include» и пробела. Это на emacs 22.2.1, работающем под Ubuntu 9.04. Кто-нибудь знает, почему это может иметь место до того, как я углублюсь в код темпа и / или (не дай бог) код режима C?