Existem várias maneiras de identificar o modo principal de um arquivo que não depende de uma extensão, consulte Escolhendo modos de arquivo no manual.
Dependendo dos tipos de arquivos com os quais você está lidando, talvez você possa usar o magic-mode-alist
. Observe também que auto-mode-alist
não se limita às extensões correspondentes: você pode corresponder a qualquer parte do nome ou caminho do arquivo.
Se os arquivos com os quais você está lidando não forem consistentes o suficiente para esses mecanismos, uma opção é adicionar auto-mode-alist
entradas que correspondam ao nome do arquivo inteiro ou que correspondam ao caminho raiz de algum projeto e chame uma função personalizada para corresponder os nomes aos modos.
Se todos os arquivos em um determinado diretório forem do mesmo tipo, você também poderá usar uma variável local do diretório para definir o modo. As variáveis de diretório podem ser definidas no seu arquivo init em vez de em um arquivo .dir-locals - consulte Variáveis de diretório para obter detalhes.
Atualizar
Aqui está uma tentativa rápida de gerenciar sua própria lista de nomes de arquivos absolutos e modos principais.
(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 -*-
:, e isso indicaria o uso do Emacsconf-mode
. Se houver alguns deles, e você puder correspondê-los por meio de expressão regular, adicione o regexp aautomode-alist
.