Pages

2013年10月23日水曜日

Gnusの設定とRSSの登録

Emacs24に移行したときか記憶が定かで無いけど Gnus が使えなくなっていて、
(Mewを使うようになった)放置していたけどとりあえず復活できた。
理由としてはMewは日本語系のメールアドレス,Gnusは英語系としたかったので

参考にしたサイト:
http://d.hatena.ne.jp/khiker/20110508/gnus
http://www.emacswiki.org/emacs/GnusEncryptedAuthInfo
http://www.emacswiki.org/emacs/GnusGmail

パスワードの入力はだるいので、authinfo.gpgファイルに保存して使うようにした。
注意: 下記の設定はGmailで利用することしか考えていません。

Emacs側の設定

使う場合はmy/gnus-mail-address変数とnntp-authinfo-file変数を適当に
設定してください。複数の gmail アドレスを利用する場合は
my/gnus-secondary-addresses変数も設定してください。これには
my/gnus-mail-addressを含める必要はありません。

(eval-when-compile (require 'cl))

(defconst my/gnus-mail-address ""
"User gmail address.")
;; if you have foo@gmail.com and bar@gmail.com
(defconst my/gnus-secondary-addresses '("foo" "bar"))
(defconst nntp-authinfo-file "~/.authinfo.gpg")

(lexical-let ((dir "~/gnus/"))
(defconst gnus-directory dir)
(defconst gnus-article-save-directory dir)
(defconst gnus-kill-files-directory dir)
(defconst gnus-cache-directory (concat dir "cache/"))
(defconst gnus-dribble-directory (concat dir "dribble/")))

(require 'gnus)
(require 'gnus-start)
(require 'gnus-setup)
(require 'gnus-agent)
(require 'gnus-util)
(require 'gnus-art)
(require 'starttls)
(require 'smtpmail)
(require 'nnir)

(eval-when-compile (require 'cl))

;; gnu-topic-mode by default
(add-hook 'gnus-group-mode-hook 'gnus-topic-mode)

;; apply diff face
(add-hook 'gnus-article-prepare-hook
'(lambda ()
(my/mail-apply-diff-faces)))

(let ((coding 'utf-8))
(setq gnus-article-save-coding-system coding
gnus-agent-file-coding-system coding
gnus-ding-file-coding-system coding
gnus-cache-coding-system coding
gnus-cache-overview-coding-system coding))

(setq password-cache-expiry t
gnus-use-mailcrypt nil
gnus-use-cache t
gnus-cache-enter-articles '(ticked dormant read unread)
gnus-cache-remove-articles nil
gnus-cacheable-groups "^nnimap"
gnus-check-new-newsgroups nil
gnus-posting-styles `((".*" (name ,user-full-name)))
;; treats wide character
gnus-use-correct-string-widths t
;; Do not ask online or not.
gnus-agent-go-online t
;; do not goto cursor to unread group.
gnus-group-goto-unread nil
;; show also user-agent.
gnus-visible-headers (concat gnus-visible-headers "\\|^User-Agent")
;; extra headers to parse.
gnus-extra-headers '(To Newsgroups X-Newsreader
Content-Type CC User-Agent Gnus-Warning)
nnmail-extra-headers gnus-extra-headers
;; If member of thread that includes new article has old
;; article, grab old articles to display thread.
gnus-fetch-old-headers t
gnus-parameters
'(("INBOX"
(gnus-use-adaptive-scoring nil)
(gnus-use-scoring nil)
(visible . t)
(display . all)
(modeline-notify . t))))

(defun my/gnus-gen-template (host-and-user-name)
"Generate nnimap template.
HOST-AND-USER-NAME is utilize to get user information from authinfo file."
`(nnimap ,host-and-user-name
(nnimap-user ,host-and-user-name)
(nnimap-address "imap.gmail.com")
(nnimap-server-port 993)
(nnimap-authinfo-file ,nntp-authinfo-file)
(nnimap-stream ssl)))

(lexical-let* ((user (car (split-string my/gnus-mail-address "@gmail.com")))
(smtp "smtp.gmail.com"))
(setq gnus-select-method (my/gnus-gen-template user)
smtpmail-smtp-user user
message-send-mail-function 'smtpmail-send-it
send-mail-function 'smtpmail-send-it
smtpmail-default-smtp-server smtp
smtpmail-smtp-server smtp
smtpmail-smtp-service 587
;; Cc: and Bcc: to header of message-mode.
message-default-mail-headers "Cc: \nBcc: \n"))

(defun my/gnus-add-select-methods (mail-addresses)
"Add MAIL-ADDRESSES to `gnus-secondary-select-methods."
(lexical-let ((addresses mail-addresses))
(loop for address in mail-addresses
do (add-to-list 'gnus-secondary-select-methods
(my/gnus-gen-template address)))))

(unless gnus-secondary-select-methods
(my/gnus-add-select-methods my/gnus-secondary-addresses))

ちなみに.gnusが自動で読みこまれるらしいけど僕は他のコードと置き場所が
違くなるのが嫌なので以下のように設定してます。

(defadvice gnus
(around ad-load-init-file activate)
"Load init file for `gnus."
(require 'init_gnus)
ad-do-it)

authinfo.gpg

nntp-authinfo-fileで指定したgpgファイルに以下を設定する。
太字の部分USERはもしgmailアドレスがuser@gmail.comなら user
となります。PASSWORDはそのままパスワードを入れてください。
ちなみにmachineの部分はhostとも書けます。

machine USER login USER password PASSWORD port 993
machine smtp.gmail.com login USER password PASSWORD port 587

複数の gmail メールアドレスを登録した場合はそのアドレスの設定も追加し
てください。下の例は my/gnus-secondary-addressesに'("foo" "bar")を設定した
場合です。

machine foo login foo password PASSWORD port 993
machine bar login bar password PASSWORD port 993

その他の設定

Gnus で authfile を使うための設定いらないのもあるかも

  • gpgの設定
    apt-getでpinentryをインストールする必要がある
    ~/.gnupg/gpg-agent.confに以下を追加
    Mewユーザーの人はpinentry-programに /mew/bin/mew-pinentry へのパスで
    いいと思います。
    pinentry-program /usr/bin/pinentry-x11
    no-grab
    default-cache-ttl 36000
  • ~/.gnupg/gpg.confも追加
    use-agent
  • gpg2の鍵生成
    もし生成してなければ
    gpg2 --gen-key

    で生成できる

  • 自動起動に追加
    自動起動の設定で以下を入れる。(バッククオートです)
    eval `gpg-agent --daemon`

実行

M-x gnusでgnusを呼び出せます。
呼び出したら"^"を押して {nnimap:USER} (opened) のところでReturnした後
"u"で読み込む箇所にマークする。終わったら"q"を2回押して最初のbufferへ

RSSフィードの登録Group bufferで"G R"キーを押すとRSSフィードを登録でき
る。とりあえずハッカーニュースを登録した。
(http://feeds.feedburner.com/hacker-news-feed-50)


0 件のコメント:

コメントを投稿