拡張子に依存しないファイルのメジャーモードを識別する方法はいくつかあります。マニュアルの「ファイルモードの選択」を参照してください。
扱うファイルの種類によっては、おそらくを使用できますmagic-mode-alist
。また、auto-mode-alist
拡張子の一致に限定されないことに注意してください。ファイル名またはパスの任意の部分を一致させることができます。
処理するファイルがこれらのメカニズムに対して十分に整合性がない場合、1つのオプションはauto-mode-alist
、ファイル名全体に一致するエントリを追加するか、プロジェクトのルートパスに一致させ、名前にモードを一致させるカスタム関数を呼び出すことです。
特定のディレクトリ内のすべてのファイルが同じタイプである場合は、ディレクトリローカル変数を使用してモードを設定することもできます。ディレクトリ変数は、.dir-localsファイルではなく、initファイルで設定できます。詳細については、ディレクトリ変数を参照してください。
更新
ここでは、絶対ファイル名とメジャーモードの独自のリストを管理する簡単な試みを示します。
(defvar my-custom-mode-alist '())
(defvar my-custom-mode-alist-file (expand-file-name "custom-file-assoc" user-emacs-directory))
;; command to save the file->mode association of the current buffer
(defun save-file-mode-association ()
(interactive)
(when buffer-file-name
(add-to-list 'my-custom-mode-alist (cons buffer-file-name major-mode))
(write-custom-mode-alist my-custom-mode-alist-file)))
(defun write-custom-mode-alist (file)
(with-current-buffer (get-buffer-create " *Custom File Assocations*")
(goto-char (point-min))
(delete-region (point-min) (point-max))
(pp my-custom-mode-alist (current-buffer))
(condition-case nil
(write-region (point-min) (point-max) file)
(file-error (message "Can't write %s" file)))
(kill-buffer (current-buffer))
(message "Wrote custom file associations to file %s" file)))
(defun load-custom-mode-alist (file)
(when (file-exists-p file)
(with-current-buffer
(let ((enable-local-variables nil))
(find-file-noselect file))
(goto-char (point-min))
(setq my-custom-mode-alist (read (current-buffer)))
(setq auto-mode-alist (append auto-mode-alist my-custom-mode-alist))
(kill-buffer (current-buffer)))))
;; Load any custom file associations and add them to auto-mode-alist
(load-custom-mode-alist my-custom-mode-alist-file)
# -*- mode: conf -*-
ますconf-mode
。それらの数が少なく、正規表現を介してそれらを照合できる場合は、正規表現をに追加できますautomode-alist
。