Hay varias formas de identificar el modo principal para un archivo que no depende de una extensión, consulte Elección de modos de archivo en el manual.
Dependiendo de los tipos de archivos con los que esté tratando, quizás podría usar el magic-mode-alist
. También tenga en cuenta que auto-mode-alist
no se limita a las extensiones coincidentes: puede hacer coincidir cualquier parte del nombre o la ruta del archivo.
Si los archivos con los que está tratando no son lo suficientemente consistentes para esos mecanismos, una opción es agregar auto-mode-alist
entradas que coincidan con el nombre completo del archivo o con la ruta raíz de algún proyecto y llamar a una función personalizada para que coincida con los nombres de los modos.
Si todos los archivos en un directorio dado son del mismo tipo, también podría usar una variable local de directorio para establecer el modo. Las variables de directorio se pueden configurar en su archivo init en lugar de en un archivo .dir-locals; consulte Variables de directorio para obtener más información.
Actualizar
Aquí hay un intento rápido de administrar su propia lista de nombres de archivos absolutos y modos principales.
(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 -*-
y eso le indicaría a Emacs que lo useconf-mode
. Si hay algunos de ellos y puede hacerlos coincidir mediante una expresión regular, puede agregar la expresión regular aautomode-alist
.