Редактировать текущий основной режим Emacs - PullRequest
2 голосов
/ 05 марта 2012

Есть ли команда emacs, которая открывает файл, описывающий текущий основной режим?Было бы полезно редактировать подсветку синтаксиса и отступы на лету.

Ответы [ 2 ]

6 голосов
/ 05 марта 2012
(find-library (file-name-sans-extension (symbol-file major-mode)))

Откроет файл, который определяет текущий основной режим.Это буквально отвечает на ваш вопрос.

Однако вы не должны редактировать этот файл "на лету".Настройки в Emacs не производятся путем непосредственного редактирования исходного кода библиотеки.Вместо этого код выполняется в хуках основного режима или eval-after-load блоках.

2 голосов
/ 05 марта 2012

Кто-то еще может прийти с некоторой предопределенной функцией, которая делает именно то, что вы хотите, но я не знаю ни одной.Вы можете создать свой собственный без слишком особых проблем.

  • major-mode связан с символом, определяющим текущий основной режим *, затем вернется 1007 *
  • (symbol-file major-mode)путь к файлу, определяющий этот символ

Однако это немного сложнее, чем это.Скорее всего, большинство ваших основных режимов загружаются из скомпилированных байтовых файлов elisp, поэтому вы вернетесь к файлу .elc, который вы на самом деле не хотите открывать.Вы можете обнаружить это и отрубить последний символ, но вам также нужно обрабатывать сжатые файлы.К счастью, Emacs может открыть файл gzipped прозрачным образом, поэтому что-то вроде следующего должно в основном работать.Я набрал его и проверил в одном или двух режимах, но в основном считаю его непроверенным.

(defun load-major-mode-file ()
  (interactive)
  (let* ((loaded-file (symbol-file major-mode))
         (root-el-file (if (string-match "\\.elc$" loaded-file) (substring loaded-file 0 -1) loaded-file)))
    (if (file-exists-p root-el-file) 
      (find-file root-el-file)
      (if (file-exists-p (concat root-el-file ".gz")) 
        (find-file (concat root-el-file ".gz"))
        (message "couldn't open major-mode file.")))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...