Кто-то еще может прийти с некоторой предопределенной функцией, которая делает именно то, что вы хотите, но я не знаю ни одной.Вы можете создать свой собственный без слишком особых проблем.
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.")))))