h/c,cppのファイルをトグルする。

梅雨入りした割りにはそんな雨も降らず、むしろやたらと暑いんですが。
・・・その前に梅雨入りしてましたっけ。最近天気予報も見てないからわからないですなぁ。

さて、題名通りですが、こんなelispはそこら中に転がっていると思います。でもあえて車輪の再発明をします。
探すの面倒だったから(ぇ

(defun toggle-source ()
  (interactive)

  ;; 現在バッファで開いているファイル名を取得する。
  (let ((ms '(lambda (str)
               (substring str (match-beginning 1)
                          (match-end 1)))))
    (when (buffer-file-name)
      (let ((prefix (progn
                      (string-match "^.+\\.\\(.+\\)$" (file-name-nondirectory (buffer-file-name)))
                      (funcall ms (file-name-nondirectory (buffer-file-name)))
                      ))
            (name (progn
                    (string-match "^\\(.+\\)\\." (file-name-nondirectory (buffer-file-name)))
                    (funcall ms (file-name-nondirectory (buffer-file-name)))
                    ))
            )
        ;; ファイル名とプレフィックスに基づいて調べる。
        (cond
         ((string-equal "h" prefix)
          (cond
           ((file-exists-p (concat name ".cpp"))
            (find-file (concat "./" name ".cpp")))
           ((file-exists-p (concat name ".c"))
            (find-file (concat "./" name ".c")))))
         ((or (string-equal "c" prefix)
              (string-equal "cpp" prefix))
          (if (file-exists-p (concat name ".h"))
              (find-file (concat name ".h"))))))
      )
    )
  )

なんていうか美しくもなんともないソースですが、ちゃんとhoge.cppというファイルを開いているバッファの上で実行すると、
hoge.hが同じディレクトリにあればそれを開いてくれました。
多分色々考慮が足りてない部分が一杯あると思いますが、自分で使う分にはこんなのでも十分だよっていうことで。