En mi caso, necesitaba hacer esto de forma interactiva. Las respuestas anteriores me dieron las funciones correctas para llamar, entonces era sólo una cuestión de envolver un poco para hacerlos interactivo:
(defun func-region (start end func)
"run a function over the region between START and END in current buffer."
(save-excursion
(let ((text (delete-and-extract-region start end)))
(insert (funcall func text)))))
(defun hex-region (start end)
"urlencode the region between START and END in current buffer."
(interactive "r")
(func-region start end #'url-hexify-string))
(defun unhex-region (start end)
"de-urlencode the region between START and END in current buffer."
(interactive "r")
(func-region start end #'url-unhex-string))
Añadir la sal, es decir se unen a las teclas según el gusto.
Eso es suficiente por ahora. Sin embargo, es extraño que solo use una lista constante de 17 caracteres. Tal vez lo arregle en algún momento. – Ken
'url-unhex-string' hace lo que quiere. – Cheeso