Как пометить текст в emacs

Я разрабатываю систему текстовых аннотаций в emacs, где формат аннотации примерно такой. Если это текст:

Lorem ipsem por favor

Мне нужно аннотировать это так:

{latin}Lorem imsem{/latin} {spanish}por favor{/spanish}

Итак, что я хочу сделать, это выбрать регион, а затем запустить функцию или макрос, который запросит имя тега и вставит фигурные скобки, закрывающий / и имя тега в буфер в начале и конце региона .

Это, вероятно, довольно просто, но я всегда находил emacs lisp довольно запутанным для начала, потому что я вообще не использую его очень часто.


person singingfish    schedule 09.09.2009    source источник


Ответы (2)


Ну есть куча способов. yasnippet — один из них, и я уверен, что он есть во многих различных режимах xml/html. .

Для простоты вы можете использовать какой-нибудь elisp, например:

(defun my-tag-region (b e tag)
  "'tag' a region"
  (interactive "r\nMTag for region: ")
  (save-excursion
    (goto-char e)
    (insert (format "{/%s}" tag))
    (goto-char b)
    (insert (format "{%s}" tag))))
person Trey Jackson    schedule 09.09.2009
comment
блестяще, спасибо! А просто чтобы курсор оказался в нужном месте в конце, после функции сохранения-экскурсии, мы можем сделать (поиск-вперед}) - person singingfish; 09.09.2009

Если вы хотите, чтобы точка была после закрытия }, когда вы закончите, я думаю, что это более надежно, чем поиск:

(defun my-tag-region (b e tag)
  "'tag' a region"
  (interactive "r\nMTag for region: ")
  (let ((e (copy-marker e)))
    (goto-char b)
    (insert (format "{%s}" tag))
    (goto-char e)
    (insert (format "{/%s}" tag))))
person offby1    schedule 09.09.2009