Олександр Харкiвський -> [email protected]  @ 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: [EMAIL PROTECTED]

" message-signature)))

;; Стили постинга
(setq gnus-posting-styles
          '((".*"
                 (eval (setq Ran:add-x-comment-to nil))
                 (signature Ran:signature))
                ("^fido7\\."
                 (address "[EMAIL PROTECTED]")
                 ("Keywords" (and (message-news-p) "пароль тут"))
                 (eval (setq Ran:add-x-comment-to t)))
                ("^nnimap\\+castle:"
                 (address "[EMAIL PROTECTED]"))
                ("^nnimap\\+wizzle:"
                 (address "[EMAIL PROTECTED]"))
                ("^nnimap\\+cryptocom:"
                 (address "[EMAIL PROTECTED]"))
                ("^nnimap\\+dungeon:"
                 (address "[EMAIL PROTECTED]"))))

(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: [EMAIL PROTECTED]

Вам правду резать или кусочком?
        Кнышев


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Ответить