Tengo la siguiente función, adaptada ligeramente desde aquí :
;; Insert text around a region. In this case, it's
;; the LaTeX code environment from the listings package
(defun wrap-code (start end)
"Insert a \begin{code} and \end{code} around a region."
(interactive "r")
(save-excursion
(goto-char start) (insert "\\begin{code}")
(goto-char end) (insert "\\end{code}")
))
;; Assign its shortcut
(global-set-key (kbd "C-c p") 'wrap-code)
Si luego selecciono una región y aplico mi función, la inserta \end{code}
en el lugar equivocado:
\begin{code}while :; do
echo this is\end{code} a test
done