Как использовать одно и то же расширение файла в разных режимах?

У меня есть файлы с.newрасширения, которые содержат код LaTeX (они являются результатом работы программы, которая делает что-то на исходном.texисточник).

Чтобы проверить их, мне нужно, чтобы в них был выделен синтаксис LaTeX и чтобы их можно было открывать в режиме только для чтения, чтобы избежать появления ошибок. Поэтому я поместил эти строки в свой.emacs:

      (setq auto-mode-alist
      (append '(("\\.new\\'" . read-only-mode)
                ("\\.new\\'" . latex-mode))
          auto-mode-alist))

Но это не работает должным образом, потому что применяется только первый режим. Как я могу заставить emacs применять обаread-only-modeиlatex-modeс тем же расширением файла?

2 ответа

Не уверен, что смогу дать ответ, но вот некоторые вещи, которые следует учитывать:

  1. read-only-modeявляется второстепенным режимом, в то время как
  2. auto-mode-alistпредназначена для включения основных режимов. Для основных режимов имеет смысл использовать только один.
  3. Вы можете поставить что-то вроде-*- buffer-read-only: t; -*-в вашей первой строке в файле (возможно, за некоторыми комментариями или шебангами, в зависимости от типа файла), что включит режим только для чтения. Возможно, автоматизируйте это, используяauto-insert-alistи соответствовать.newшаблон имени файла.
  4. На https://www.reddit.com/r/emacs/comments/jqxgiz/how_can_i_make_some_files_automatically_readonly/ есть несколько хороших предложений , а именно попробовать файловые локальные переменные и использоватьfind-file-hook

Надеюсь, что-то из этого поможет.

Простое решение — связать расширение вашего файла с пользовательским производным основным режимом:

      (define-derived-mode read-only-latex-mode latex-mode "LaTeX"
  "Major mode for viewing files of input for LaTeX."
  (read-only-mode 1))

(add-to-list 'auto-mode-alist '("\\.new\\'" . read-only-latex-mode))

Новыйread-only-latex-modeделает все, что делает (включая запускlatex-mode-hookесли вы уже используете это), но это дополнительно позволяетread-only-modeпосле выполнения всех действий родительского режима.

Любой другой код, который заботится о том, чтобы основной режим былlatex-mode должны уже тестировать это, используя стандартный подход(derived-mode-p 'latex-mode)что по-прежнему верно для этого нового режима; так что в принципе этот подход должен просто работать.

Другие вопросы по тегам