Re: gnus
Олександр Харкiвський -> debian-russian@lists.debian.org @ Tue, 17 Oct 2006 11:45:20 +0300:
ОХ> Пытаюсь освоить таки gnus а за одно и emacs.
ОХ> У кого вдруг откоментироавнные конфиги одного с другим - поделитесь.
ОХ> Гугль допрошен, в связи с чем Отту и Бутенко спасибо :)
Гнус:
(setq
;; Автоматически подписываться на все почтовые группы ...
gnus-auto-subscribed-groups "^nnml\\|^nnfolder\\|^nnmbox\\|^nnmh\\|^nnbabyl\\|^nnmaildir\\|^nnimap"
;; ... по топикам
gnus-subscribe-options-newsgroup-method 'gnus-subscribe-topics
;; При переходе на следующую группу выбираем группу с лучшим уровнем
gnus-keep-same-level 'best
;; Сортируем группы по рангу (уровень-score)
gnus-group-sort-function 'gnus-group-sort-by-rank
;;; По возможности выбирать следующую статью с той же темой
;;;gnus-auto-select-same t
;; Чарсеты, которые можно посылать без кодирования
gnus-group-posting-charset-alist
'(("^\\(no\\|fr\\)\\.[^,]*\\(,[ \n]*\\(no\\|fr\\)\\.[^,]*\\)*$" iso-8859-1 (iso-8859-1))
("^\\(fido7\\|local\\|relcom\\)\\.[^,]*\\(,[ \n]*\\(fido7\\|local\\|relcom\\)\\.[^,]*\\)*$" koi8-r (koi8-r))
(message-this-is-mail nil t)
(message-this-is-news nil t))
;; Полуручное указание charset для g
gnus-summary-show-article-charset-alist
'((1 . koi8-r) (2 . windows-1251) (3 . ibm866) (4 . utf-8))
;; При сборке треда усыновлять сиротинушек
gnus-summary-make-false-root nil
;; Треды изначально показывать свернутыми
gnus-thread-hide-subtree t
;; и сортировать по total score, затем по номеру
gnus-thread-sort-functions
'(gnus-thread-sort-by-number gnus-thread-sort-by-total-score)
;; Не использовать пока адаптивный скоринг
gnus-use-adaptive-scoring nil
;; Дубликаты не показывать
gnus-summary-ignore-duplicates t
;; Смайлики не рисовать
gnus-treat-display-smileys nil
;; Дополнительные хедера - показывать вместо From, если оно наше
gnus-extra-headers '(To X-Comment-To Newsgroups)
;; В summary показывать, есть ли в этом треде еще письма
gnus-summary-line-format "%U%R%z%~(pad 5)~(ignore \"0\")V%I%e%(%[%*%-23,23f%]%) (%k) %s\n"
;; Наши адреса
gnus-ignored-from-addresses "\\(ran\\(\\+\\w+\\)?\\|mst\\|cmrcp\\|Artem_Chuprina\\)@\\(\\(home\\.\\)?ran\\.pp\\|cryptocom\\)\\.ru"
message-alternative-emails "\\(ran\\(\\+\\w+\\)?\\|mst\\|cmrcp\\|Artem_Chuprina\\)@\\(\\(home\\.\\)?ran\\.pp\\|cryptocom\\)\\.ru"
;; Заголовки, которые показывать
gnus-visible-headers
'("^From:" "^Newsgroups:" "^Subject:" "^Date:" "^\\(Mail-\\)?Followup-To:"
"^Reply-To:" "^Organization:" "^Summary:" "^Keywords:" "^To:"
"^X-Comment-To:" "^[BGF]?Cc:" "^Posted-To:" "^Mail-Copies-To:"
"^Apparently-To:" "^Gnus-Warning:" "^Resent-From:" "X-Sent:" "Content-Type:")
;; И в каком порядке их показывать
gnus-sorted-header-list
'("^From:" "^\\(X-Comment-\\)?To:" "^Followup-To:" "^Cc:" "^Subject:" "^Date:" "^Summary:" "^Keywords:" "^Newsgroups:" "^Organization:")
;; Автоматически шифровать ответы на зашифрованные письма
gnus-message-replyencrypt t
;; Просить подтверждения, если я отвечаю почтой на ньюсовые письма
gnus-confirm-mail-reply-to-news t
;; Использовать кэш для хранения интересных статей
gnus-use-cache t
;; ... только для ньюсов
gnus-uncacheable-groups "^nnml\\|^nnfolder\\|^nnmbox\\|^nnmh\\|^nnbabyl\\|^nnmaildir\\|^nnimap\\|^INBOX"
;; Вписывать Mail-Followup-To согласно параметрам групп
message-subscribed-address-functions '(gnus-find-subscribed-addresses)
;; Агента нафиг, ибо глючит, сволочь.
gnus-agent nil
;; overview для nnimap тоже нафиг
nnimap-nov-is-evil t
;; Про unsubscribed группы сервер не спрашивать
gnus-activate-level 5
;; Типа подпись длиннее 10 строк - не подпись
gnus-signature-limit '(10.0)
;; Автоматически проверять подпись
mm-verify-option 'known
)
;; Доступ к ньюсам
(setq gnus-select-method '(nntp "news.45.free.net"))
; (nntp-open-connection-function nntp-open-rlogin)
; (nntp-rlogin-program "ssh")
; (nntp-rlogin-parameters ("-o" "BatchMode=yes" "-x" "-a" "telnet" "-8" "news.45.free.net" "nntp"))))
;; Доступ к почте
(setq imap-shell-program '("ssh-imap %s"))
(let ((gssm-wizzle '(nnimap "wizzle" (nnimap-stream shell) (imap-log t)))
(gssm-castle '(nnimap "castle"
(nnimap-stream shell)
(nnimap-address "castle.ran.pp.ru")
(imap-log t)))
(gssm-cryptocom '(nnimap "cryptocom"
(nnimap-stream shell)
(nnimap-address "mx.cryptocom.ru")
(imap-log t)))
(gssm-dungeon '(nnimap "dungeon" (nnimap-stream shell) (imap-log t))))
(setq gnus-secondary-select-methods
(cond ((string-match "^tigger\\." (system-name))
(list gssm-wizzle gssm-castle gssm-cryptocom))
((string-match "^\\(wizzle\\|dungeon\\)\\(\\.\\|$\\)" (system-name))
(list gssm-wizzle gssm-castle gssm-cryptocom gssm-dungeon)))))
(defun Ran:signature ()
(let ((message-signature ""))
(condition-case nil (fortune-to-signature) (error nil))
(insert "
--
Artem Chuprina
RFC2822: <ran{}ran.pp.ru> Jabber: ran@jabber.ran.pp.ru
" message-signature)))
;; Стили постинга
(setq gnus-posting-styles
'((".*"
(eval (setq Ran:add-x-comment-to nil))
(signature Ran:signature))
("^fido7\\."
(address "ran+news@ran.pp.ru")
("Keywords" (and (message-news-p) "пароль тут"))
(eval (setq Ran:add-x-comment-to t)))
("^nnimap\\+castle:"
(address "ran@ran.pp.ru"))
("^nnimap\\+wizzle:"
(address "ran@wizzle.ran.pp.ru"))
("^nnimap\\+cryptocom:"
(address "ran@cryptocom.ru"))
("^nnimap\\+dungeon:"
(address "ran@home.ran.pp.ru"))))
(add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
(add-hook 'gnus-summary-exit-hook 'gnus-summary-bubble-group)
(add-hook 'message-mode-hook (lambda () (setq fill-column 72) (turn-on-auto-fill)))
(defun Ran:citation-line ()
(let ((name-to
(or
(message-fetch-reply-field "X-Comment-To")
(message-fetch-reply-field "To"))))
(insert (SNP:email->stripped-full-name (mail-header-from message-reply-headers)))
(when name-to
(insert " -> " (SNP:email->stripped-full-name name-to)))
(insert " @ " (mail-header-date message-reply-headers) ":\n\n")))
(setq message-citation-line-function 'Ran:citation-line)
(defun Ran:citation ()
(let ((beg (point))
(end (mark t))
(initials (SNP:full-name->initials
(SNP:email->stripped-full-name
(message-fetch-reply-field "From")))))
(save-excursion
(narrow-to-region beg end)
(while (not (eobp))
(beginning-of-line)
(unless (eolp)
(if (re-search-forward "^ *\\(\\w*\\)\\(>\\)" (point-at-eol) t)
(replace-match " \\1>\\2")
(insert " " initials "> ")))
(forward-line 1))
(widen))))
(setq mail-citation-hook
'(lambda ()
(Ran:citation)
(Ran:citation-line)))
(defun Ran:message-setup ()
(let ((from-value (message-fetch-reply-field "From")))
;; Вставляем X-Comment-To
(when (and Ran:add-x-comment-to from-value (message-news-p))
(save-excursion
(goto-char (point-min))
(insert "X-Comment-To: " (SNP:email->stripped-full-name from-value) "\n")))
;; Разрыв строки с сохранением квотинга
(local-set-key [return] 'Ran:break-cited-line)))
(add-hook 'message-setup-hook 'Ran:message-setup)
(defun Ran:message-for-bounce ()
(interactive)
(set-buffer-modified-p t)
(basic-save-buffer)
(set-buffer-file-coding-system 'koi8-r)
(revert-buffer t t t))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Разные полезные функции из gnus-snp
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Удалить пробелы в начале и в конце строки
;;
(defun SNP:strip-string (str)
(let ((s str))
(when (string-match "^[ \"]+" s)
(setq s (substring s (match-end 0))))
(when (string-match "[ \"]+$" s)
(setq s (substring s 0 (match-beginning 0))))
(symbol-value 's)))
;;
;; Получить имя из e-mail'а
;;
(defun SNP:email->full-name (from)
(if from
(let ((s))
(if (cdr (setq s (split-string from "<\\|>")))
(car s)
(if (cdr (setq s (split-string from "\(\\|\)")))
(cadr s)
from)))
""))
(defun SNP:email->stripped-full-name (from)
(SNP:strip-string (SNP:email->full-name from)))
;;
;; Получить начало имени из полного имени
;;
(defun SNP:full-name->first-name (name)
(when (string-match "[^ ]*" name)
(substring name (match-beginning 0) (match-end 0))))
;;
;; Получить инициалы из имени
;;
(defun SNP:full-name->initials (name)
(let ((lst (split-string name " +"))
(out ""))
(while lst
(setq out (concat out (char-to-string (car (string-to-list (car lst))))))
(setq lst (cdr lst))
)
(symbol-value 'out)))
;;
;; Разрыв строки, сохраняющий квотинг
;;
(defun Ran:break-cited-line ()
(interactive)
(if (or (bolp) (eolp))
(insert "\n")
(let ((quote-string nil))
(save-excursion
(beginning-of-line)
(when (re-search-forward "^ *\\w*>+" (point-at-eol) t)
(setq quote-string (match-string 0))))
(if quote-string
(insert (concat "\n" quote-string))
(insert "\n")))))
Конфиг емакса у меня нифига не откомментирован.
Фортунка в тему, да...
--
Artem Chuprina
RFC2822: <ran{}ran.pp.ru> Jabber: ran@jabber.ran.pp.ru
Вам правду резать или кусочком?
Кнышев
Reply to:
- References:
- gnus
- From: Олександр Харкiвський <oharkivsky@hm.ukrtelecom.net>