LINUX.ORG.RU

Gnus. Как переопределить кодировку названий групп

 ,


0

2

В Групповом Буфере названия Групп (будь то imap или rss бэкэнды) написанные латиницей отображаются корректно, но всё что написано кириллицей имеет вид примерно такой:

320\243\320\264\320\260\320\273\320\265\320\275\320\213\etc

Следуя руководству, пробовал делать так:

(setq gnus-group-name-charset-method-alist
      '((nnimap "*.*" . utf-8)))


но эффекта не возымело.  Как сделать правильно?

P.S.
Те имена, которые настроены (переопределяются) на стороне клиента, отображаются корректно.  Вопрос вызывают именно те, которые выгружаются с сервера.


Последнее исправление: Dreamdrawer (всего исправлений: 3)

В Групповом Буфере названия Групп (будь то imap или rss бэкэнды) написанные латиницей отображаются корректно, но всё что написано кирилицей имеет вид примерно такой

УМВР.

Следуя руководству, пробовал делать так:
(setq gnus-group-name-charset-method-alist '((nnimap "*.*" . utf-8)))

Какому руководству?

Во-первых, список не такой — ключом должен быть список. Во-вторых, регулярное выражение некорректное. В третьих, с чего вы вообще взяли, что здесь можно вписать регулярное выражение?

‘gnus-group-name-charset-method-alist’
     An alist of select methods and charsets.  The default value is
     ‘nil’.  The names of groups in the server specified by that select
     method are all supposed to use the corresponding charset.  For
     example:

          (setq gnus-group-name-charset-method-alist
                '(((nntp "news.com.cn") . cn-gb-2312)))

(info "(gnus) Non-ASCII Group Names")

Ну и в-главных, для IMAP’а это все игнорируется.

(defun gnus-group-name-charset (method group)
  (unless method
    (setq method (gnus-find-method-for-group group)))
  (when (stringp method)
    (setq method (gnus-server-to-method method)))
  (if (eq (car method) 'nnimap)
      ;; IMAP groups should not be encoded, since they do the encoding
      ;; in utf7 in the protocol.
      'utf-8
    (let ((item (or (assoc method gnus-group-name-charset-method-alist)
		    (and (consp method)
			 (assoc (list (car method) (cadr method))
				gnus-group-name-charset-method-alist))))
	  (alist gnus-group-name-charset-group-alist)
	  result)
      (if item
	  (cdr item)
	(while (setq item (pop alist))
	  (if (string-match (car item) group)
	      (setq alist nil
		    result (cdr item))))
	result))))

gnus-group.el

Zmicier ★★★★★
()
Ответ на: комментарий от Zmicier

Да, вот так работает. Спасибо.

Хотя долгое время не срабатывала вообще, о тех пор пока не удалил из кода ранее добавленную функцию, которая переопределяет названия групп.

;; Переопределение имён групп
;; (setq gnus-group-line-format "%M%S%5y/%-5t: %uG %D\n")
;; (defun gnus-user-format-function-G (arg)
;;   (let ((mapped-name (assoc gnus-tmp-group group-name-map)))
;;     (if (null mapped-name)
;;         gnus-tmp-group
;;       (cdr mapped-name))))

;; Эта небольшая функция просто ищет текущее имя группы на карте, которую я определяю,
;; и если есть «перевод», она отображает его вместо фактического имени.
;; (setq group-name-map '(("INBOX" . "Яндекс — Входящие")
;;              ("nnimap+mail:INBOX" . "Mail — Входящие")
;; 		("nnimap+mail:Спам" . "Mail — Спам")
;; 		("nnimap+mail:Корзина" . "Dramdrawer Mail — Корзина")
;; 		("nnfolder+archive:sent.2017-09" . "Архив — 2017-09")
;; 		("nnimap+gmail:INBOX" . "Gmail — Входящие")
;; 		("nnimap+gmail:[Gmail]/Вся почта" . "Gmail — Вся почта")
;; 		("nnimap+gmail:[Gmail]/Спам " . "Gmail — Спам")
;; 					   ("nndraft:drafts" . "Черновики")
;; 					   ("Удаленные" . "Яндекс — Удалённые")
;; 					   ("nnrss:Группа АЛИСА" . "RSS — АлисА")
;; 					   ))



Она красиво отрабатывала, но часть групп игнорировала, т.е. часть групп, содержащих кириллические (хотя и чисто латинские тоже) символы обрабатывает, а часть оставляет как было.  Закономерность так и не понял.
Dreamdrawer
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.