major-mode – Recordar modos para archivos sin extensiones

Pregunta:

Comencé a editar muchos archivos que no tienen extensiones, pero que todavía están en un formato de modo principal.

Soy el único usuario de Emacs en el equipo, y no quiero que sea dolorosamente obvio que mi editor necesita cosas especiales . Me gustaría evitar cambiar el código base.

  • No puedo cambiar el nombre del archivo
  • No puedo usar comentarios especiales de Emacs

Me gustaría que Emacs recordara el modo en el que coloqué el archivo manualmente en último lugar (con, digamos Mx conf-mode ) y que active automáticamente ese modo cuando lo vuelva a visitar.

Utilizo savehist-mode para manejar la persistencia.

¿Puedo hacer esto sin dolor?

Respuesta:

Hay varias formas de identificar el modo principal de 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, tal vez podría usar la magic-mode-alist . También tenga en cuenta que auto-mode-alist no se limita a hacer coincidir extensiones: puede hacer coincidir cualquier parte del nombre del archivo o la ruta.

Si los archivos con los que está tratando no son lo suficientemente consistentes para esos mecanismos, una opción es agregar entradas de auto-mode-alist que coincidan con el nombre del archivo completo, o que coincidan con la ruta raíz de algún proyecto y llamar a una función personalizada para hacer coincidir los nombres con modos.

Si todos los archivos en un directorio dado son del mismo tipo, también puede usar una variable de directorio local para establecer el modo. Las variables de directorio se pueden configurar en su archivo de inicio en lugar de en un archivo .dir-locals; consulte Variables de directorio para obtener más detalles.

Actualizar

Aquí hay un intento rápido de administrar su propia lista de nombres de archivo 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)

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım