twittering-mode更新でOAuth認証

twittering-modeでTwitterで説明したとおり、Mac上のCocoa Emacsではtwittering-modeを用いてtweetしています。

久しくupdateしていなかったため、思い立ったがなんとやら、git先端からupdateして、認証方式もOAuthに切り替えてみようとしたら、ちょっとはまりました。

GnuPGがなかった

まず、 (install-elisp "http://github.com/hayamiz/twittering-mode/raw/master/twittering-mode.el") をevalしてtwittering-modeを更新し、.emacsに下記を追加します。

(setq twittering-use-master-password t)
(setq twittering-auth-method 'oauth)

そして、M-x twitで起動すると、 "You need GnuPG and (EasyPG or alpaca.el) for master password!" と言われてしまいました。 Emacs23ベースのCocoa Emacsを使っているのだから、EasyPGは対応しているはず…ということはGnuPGがあやしい。

M-: (executable-find "gpg")の結果はnilが返されました。 GnuPGMac portsでインストールします。

ターミナルで

$ sudo port install gnupg

を実行したあと、M-: (executable-find "gpg")の結果は"/opt/local/bin/gpg"が返されました。

起動したあと

M-x twitすると、PINコードを入手するためのURLが表示されます。 minibufferでbrowse-urlでURLを開くかと訊かれましたので、yと答え、ブラウザで「アプリを認証」をクリックして表示されたPINコードをminibufferにて入力しました。

その後、master passwordを2回入力すると無事起動できました。 Emacsを抜けて、再度、M-x twitする際には、~/.twittering-mode.gpgとmaster passwordで認証をクリアします。

現在の.emacs

;;
;; Twitter
;;
;; (install-elisp "http://github.com/hayamiz/twittering-mode/raw/master/twittering-mode.el")
; from http://masutaka.net/chalow/2009-06-07-5.html
;;
(require 'twittering-mode)
(setq twittering-use-master-password t)
(setq twittering-auth-method 'oauth)
(setq twittering-username "atauky")
(setq twittering-timer-interval 75)
(setq twittering-convert-fix-size 48)
(setq twittering-update-status-function 'twittering-update-status-from-pop-up-buffer)
(setq twittering-icon-mode t)
(setq twittering-scroll-mode nil)
(setq twittering-edit-skeleton 'inherit-any)
;; いくつかのTLをまとめて名前をつけることができる
(setq twittering-timeline-spec-alias
      `(("related-to" .
     ,(lambda (username)
        (if username
        (format ":search/to:%s OR from:%s OR @%s/"
            username username username)
          ":home")))
    ))
;; 起動時に以下のリストを読みこむ
(setq twittering-initial-timeline-spec-string
      '("$related-to(atauky)"
    "atauky/who-i-met"
    "atauky/conversationlist"
    "atauky/jef-united"
    ":direct_messages"
    ":home"))
(add-hook 'twittering-mode-hook
          (lambda ()
            (set-face-bold-p 'twittering-username-face t)
            (set-face-foreground 'twittering-username-face "DeepSkyBlue3")
            (set-face-foreground 'twittering-uri-face "gray60")
        (setq twittering-status-format "%i %p%s / %S:n%FOLD{%T}n%r %R [%@]")
        (setq twittering-retweet-format " RT @%s: %t")
            ;; "F"でお気に入り
            ;; "R"でリツイートできるようにする
            (define-key twittering-mode-map (kbd "F") 'twittering-favorite)
            (define-key twittering-mode-map (kbd "R") 'twittering-native-retweet)
            ;; "<"">"で先頭、最後尾にいけるように
            (define-key twittering-mode-map (kbd "<") (lambda () (interactive) (goto-char (point-min))))
            (define-key twittering-mode-map (kbd ">") (lambda () (interactive) (goto-char (point-max))))))
;; URL短縮サービスをj.mpに
;; YOUR_USER_IDとYOUR_API_KEYを自分のものに置き換えてください
;; from http://u.hoso.net/2010/03/twittering-mode-url-jmp-bitly.html
(add-to-list 'twittering-tinyurl-services-map
         '(jmp . "http://api.j.mp/shorten?version=2.0.1&login=YOUR_USER_ID&apiKey=YOUR_API_KEY&format=text&longUrl="))
(setq twittering-tinyurl-service 'jmp)

日本語ハッシュタグが使えるようになっていたり、いわゆる「全員に返信」にtwittering-edit-skeletonで対応できるようになっているようなので、設定してみようと思います。