How to tag text in emacs

2020-04-11 11:32发布

问题:

I'm developing a text annotation system in emacs, where the format of the annotation is something like this. If this is the text:

Lorem ipsem por favor

I need to annotate it like this:

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

So what I want to do is select a region and then run a function or a macro that will prompt for the tag name, and insert the curly braces, the closing / and the tag name into the buffer at the start and end of the region.

This is probably pretty straightforward, but I've always found emacs lisp to be rather confusing to get started with, because I don't use it very often at all.

回答1:

Well, there are a bunch of ways. yasnippet is one, and I'm sure a bunch of the various xml/html modes have one.

For simplicity, you can use some elisp like:

(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))))


回答2:

If you want point to be after the closing } when you're done, I think this is more robust than searching:

(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))))