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が同じディレクトリにあればそれを開いてくれました。
多分色々考慮が足りてない部分が一杯あると思いますが、自分で使う分にはこんなのでも十分だよっていうことで。