Ответ 1
org-link-unescape
делает работу для очень простых случаев... w3m-url-decode-string
лучше, но она не встроена, а версия, которую я локально не работает с Emacs 23.
У меня есть строка типа "foo %20bar", и я хочу "foo bar" из нее.
Я знаю, что должна быть встроенная функция для декодирования строки с кодировкой URL (строка запроса) в Emacs Lisp, но для жизни меня я не могу найти ее сегодня, либо в моем lisp/или с Google.
Кто-нибудь помнит, что он называл?
org-link-unescape
делает работу для очень простых случаев... w3m-url-decode-string
лучше, но она не встроена, а версия, которую я локально не работает с Emacs 23.
url-unhex-string
В моем случае мне нужно было сделать это в интерактивном режиме. Предыдущие ответы дали мне правильные функции для вызова, тогда было просто немного его немного сделать, чтобы сделать их интерактивными:
(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))
Добавьте соль, я имею в виду привязку к клавишам по вкусу.
Emacs поставляется с библиотекой URL-адресов, которая предоставляет кучу функций разбора URL-адресов как huaiyuan и Чарли Мартин уже указывал. Вот небольшой пример, который даст вам представление о том, как его использовать:
(let ((url "http://www.google.hu/search?q=elisp+decode+url&btnG=Google+keres%E9s&meta="))
;; Return list of arguments and values
(url-parse-query-string
;; Decode hexas
(url-unhex-string
;; Retrieve argument list
(url-filename
;; Parse URL, return a struct
(url-generic-parse-url url)))))
=> (("meta" "") ("btnG" "Google+keresés") ("/search?q" "elisp+decode+url"))
Думаю, лучше полагаться на него, чем на org-mode
, поскольку его основная цель - проанализировать URL.
Я думаю, что вы делаете это слишком сложно: split-string
, вероятно, сделает большую часть того, что вы хотите. Для любительских вещей взгляните на функции в url-expand.el
; к сожалению, многие из них не имеют doc-строк, поэтому вам, возможно, придется читать код.
url-generic-parse-url
выглядит потенциальным победителем.