xrdb-mode.el のエラーをなんとかしたのが無駄になった

xrdp のログイン画面をちょっとだけカスタマイズして依頼、ちょいちょいLinux環境を触っている。

久し振りにEmacsの設定を見直していると、Xresoucesを編集するときのメジャー・モードがエラーを吐く。 もともと Debianのemacs-goodies-elというパッケージにあったものだった。

手直しをしてみたが、今どきはEmacsにbuild-inのconf-modeを使うのが良いらしい。 というわけで、せっかくエラーを解消したのだが無駄になってしまった。

なのだが、せっかくなので自分の記録として残しておく。

エラーの原因

エラーが出るのはマクロの書き方が古かったせいと思われる。以下のようにすればエラーは解消される。

(defmacro xrdb-safe (&rest body)
  "Safely execute BODY, return nil if an error occurred."
  `(condition-case nil
        (progn ,@body)
              (error nil)))

このマクロはエラー処理の部分で、中身について調べたことをメモしておく:

  • &rest は残りの引数を配列(例えば(1 2 3)のように)として受け取る。
  • condition-caseはエラー回避のときに使われる形式。

    (condition-case エラー変数 非トラップ本体 エラーハンドラ)

    “非トラップ本体”を評価して、エラーが起きなければ、その値を返し、エラー・ハンドラは無視される。 エラーが起きた場合は、エラーの状態を示すシンボルをエラー変数に代入して、エラー・ハンドラの処理が実行される。

    今の場合はbodyは (and (mark) (region-beginning)) (and (mark) (region-end))

    そして今の場合は、エラーが起きても無視する。

  • バッククォートの中での@はリストの中身を展開して参照する
  • @の前の,(カンマ) はカンマの後だけを評価する。(今の場合は bodyの中を展開して参照する)

参考にしたページ

YaTeXの作者の本は分かりやすく書かれている。