[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: