今日のバカが征く

んー、この switch-c++-buffer って ff-find-other-file でいいんじゃないだろうか。承知の上?あ、いや対になるファイルが存在しない場合に新規バッファを作るところが違うのか。
しかし、やっぱり alist ってあまり知られてないよなぁ。ということで

(defun c++-paired-extension (basename extension)
  (if (string= "cpp" extension)
      (find-cpp-header basename)
    (cond ((string= "h" extension) "cpp")
          ((string= "hpp" extension) "cpp")
          ((string= "hh" extension) "cc")
          ((string= "cc" extension) "hh")
          ((string= "hxx" extension) "cxx")
          ((string= "cxx" extension) "hxx")
          ((string= "H" extension) "C")
          ((string= "C" extension) "H")
          (t nil))))

は以下のように書くのが better だと思うのです。

(defvar c++-paired-extension-alist
  '(("h" . "cpp")
    ("hpp" . "cpp")
    ("hh" . "cc")
    ("cc" . "hh")
    ("hxx" . "cxx")
    ("cxx" . "hxx")
    ("H" . "C")
    ("C" . "H")))
(defun c++-paired-extension (basename extension)
  (if (string= "cpp" extension)
      (find-cpp-header basename)
    (get-alist extension c++-paired-extension-alist)))