続・C言語の関連ファイルを開く
一つの拡張子に対して複数の拡張子を関連づけられるように改良してみた。
まだ、改良できるところはあるけど、あんまりツールの改良ばっかりやってても仕方がないので、これくらいにしておく。
(defun c-open-relational-file (how-open-type) (interactive "nOpen-Type: ") (defun get-opened-file-name-prefix (file-name) (string-match "^\\([^.]+\\)\\.[^.]+$" file-name) (match-string 1 file-name)) (defun get-ext-type (file-name) (string-match "\\.\\([^.]+\\)$" file-name) (match-string 1 file-name)) (defun get-opening-file-name (file-name-prefix ext-list) (let ((opening-file-name (concat file-name-prefix "." (car ext-list)))) (cond ((null (car ext-list)) nil) ((file-exists-p opening-file-name) opening-file-name) (t (get-opening-file-name file-name-prefix (cdr ext-list)))))) (let* ((ext-map '( ("h" . ("c")) ("c" . ("h" "s")) ("s" . ("c")) )) (opened-file-name (buffer-file-name (window-buffer))) (opened-file-name-prefix (get-opened-file-name-prefix opened-file-name)) (opened-file-ext-type (get-ext-type opened-file-name)) (opening-file-ext-type-list (cdr (assoc opened-file-ext-type ext-map))) (opening-file-name (get-opening-file-name opened-file-name-prefix opening-file-ext-type-list)) (opening-file-buffer (find-file-noselect opening-file-name))) (cond ((= how-open-type 1) (elscreen-switch-or-create opening-file-buffer)) ((= how-open-type 2) (progn (split-window-horizontally) (other-window 1) (switch-to-buffer opening-file-buffer))) (t (message "Illegal Type")))))