Как правильно использовать Emacs Gnus в письмах HTML, содержащих символы UTF-8, с Lynx в качестве средства визуализации HTML?

Я использую GNU Emacs 24.2.1 (но никогда не работает Emacs) с Gnus v5.13 и настроил его следующим образом, чтобы использовать Lynx для форматирования почты HTML:

(setq 'mm-text-html-renderer 'lynx)
(setcdr (assoc 'lynx mm-text-html-renderer-alist)
        '(mm-inline-render-with-stdin
          nil "lynx" "-dump" "-force_html" "-stdin" "-display_charset=UTF-8"))

Но символы UTF-8 отображаются некорректно, например я вижу что-то вроде этого:

Es gibt \303\274ber 700 neue Top-Level-Domains.

Это легко решить с помощью следующих команд:

(toggle-read-only)
(recode-region (point-min) (point-max) 'utf-8 'utf-8)

Но можно ли заставить Gnus интерпретировать вывод Lynx в целом как UTF-8?

(Этот вопрос также был задан без ответов здесь: http://lists.gnu.org/archive/html/info-gnus-english/2010-06/msg00006.html)


person OK2    schedule 18.11.2013    source источник


Ответы (1)


Я сам нашел ответ, здесь полный код для активации Lynx в Gnus с UTF-8:

(require 'mm-view)
(setq mm-text-html-renderer 'lynx)
(setcdr (assoc 'lynx mm-text-html-renderer-alist)
        '(mm-inline-render-with-stdin
          nil "lynx" "-dump" "-force_html" "-stdin" "-display_charset=UTF-8"))

(defvar mm-insert-inline-use-utf-8 nil)

(defadvice mm-insert-inline (around mm-insert-inline-utf-8)
  (let ((x (point)))
    (prog1 (progn ad-do-it)
      (when mm-insert-inline-use-utf-8
        (decode-coding-region x (point-max) 'utf-8)))))
(ad-activate 'mm-insert-inline)

(defadvice mm-inline-text-html (around mm-inline-text-html-utf-8)
  (let ((mm-insert-inline-use-utf-8 t))
    ad-do-it))
(ad-activate 'mm-inline-text-html)
person OK2    schedule 19.11.2013
comment
Может быть, вы могли бы как-то установить систему кодирования для вызова lynx? Или даже для всех подпроцессов? - person tripleee; 19.11.2013
comment
Lynx настроен на UTF-8 (аргумент display_charset и переменные правой локали также установлены), но Gnus читает его в функции mm-inline-render-with-stdin с макросом mm-with-unibyte-buffer и поэтому игнорирует кодировку программы. - person OK2; 20.11.2013