読者です 読者をやめる 読者になる 読者になる

GnusでRSSを登録したら、グループが表示されず何もできなくなってしまった

Gnus Emacs RSS

最近Gnusを使ってみてます。
Gmailのメール送受信ができるようになったので、今度はRSSを登録してみました。
登録自体は上手くいき、グループ一覧にも表示されたし、記事も閲覧できました。
…が、Emacsを起動し直して、 M-x gnus とすると、以下のエラーが表示されました。

nnrss-normalize-date: Specified time is not representable

Gnusはスプラッシュ表示で起動処理が中断されてしまっている感じで、何も操作できなくなっています。

調査

エラーでググると、以下のページが見つかりました。

どうやら、不正な日付を処理しようとしてエラーになっているようです。
nnrss-normalize-dateという関数があり、引数として日付形式の文字列を受け取って処理しているようでした。
引数をデバッグ出力するアドバイスをかましてみると、"2099-12-31"という文字列を受け取ってエラーになっていました。

対処

以下の設定を行うことで、エラーを回避できました。

(defadvice nnrss-normalize-date (around fix-date activate)
  (lexical-let (e)
    (condition-case e
        ad-do-it
      (error (message "failed nnrss-normalize-date by [%s] of [%s] : %s" (ad-get-arg 0) subject (error-message-string e))
             (setq ad-return-value (message-make-date))))))

対処内容について

nnrss-normalize-dateでエラーが発生した場合、デバッグ出力して、適当な値を戻り値に設定しています。
nnrss-normalize-dateは日付形式の文字列をGnusが扱う専用のフォーマットの文字列に変換しているようなのですが、message-make-dateという関数が内部で使われています。
message-make-dateは引数を与えなくてもよかったので、エラー時の代替としました。
取得したRSSのデータがそもそもおかしいので、エラーにならなければ何でも良いやって感じの対処です。

デバッグ出力で、おもむろにsubjectという変数の値を出力してますが、この変数にはRSSの記事のタイトルが格納されています。
nnrss-normalize-dateはnnrss-check-groupから呼ばれ、subjectはnnrss-check-groupで変数束縛されてます。

その他

  • Emacsは、GNU Emacs 24.2.1 (i386-mingw-nt5.1.2600) of 2012-12-08 on GNUPACK です。
  • Gnusは、Gnus v5.13 です。

あとがき

・・・何か、Gnusってクリティカルなエラーが多過ぎな気がするんですけど。。
しかも、ぼそっとエラー出るだけだし。エラー処理が大して実装されてないってことだよね・・・。
バンドルされてる機能がこんな完成度で良いのか・・・。

これじゃ、初心者はまず使おうと思わないだろうなぁ。
ってか、情報とかあんま見つからないし、やっぱ全然使われてないのかなぁ。
う~ん、何か使うのうんざりしてきたなぁ。