ассоциирование cperl-режима с кодом Perl в emacs - PullRequest
2 голосов
/ 03 марта 2012

Я пытаюсь связать режим CPerl с исходными файлами Perl в emacs (23.1.1 в CentOS 6).

Если я включу следующую строку в мой .emacs

(defalias 'perl-mode 'cperl-mode)

, тогда режим CPerl будет загружен при открытии исходного файла Perl.

Однако следующая строка, которая выглядит так, как будто она должна работать, приводит к загрузке режима Perl:

(add-to-list 'auto-mode-alist '("\\.p[lm]$" . cperl-mode))

Там нет сообщения об ошибке - он просто загружает режим Perl вместо режима CPerl.

Причина, по которой я спрашиваю, состоит в том, что у меня возникли некоторые проблемы с использованием стиля cperl-set (работает из меню emacs, но не в том случае, если я добавляю его в качестве ловушки в режим CPerl, когда он был добавлен в perl-mode ) и я хотел попробовать загрузить режим CPerl напрямую.

Оператор, который я использую в своем .emacs, чтобы установить стиль отступа в качестве привязки к режиму CPerl:

(eval-after-load "cperl-mode" 
    add-hook 'cperl-mode-hook (lambda() (cperl-set-style 'C++))))

Это, очевидно, не имеет никакого эффекта, если режим CPerl не загружен (когда я использую подход auto-mode-alist), и не делает правильную вещь (кажется, использует стиль отступа GNU), когда я загружаю режим CPerl, накладывая его на Perl mode.

Ответы [ 2 ]

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

Вам нужно использовать (cperl-set-style "C++") вместо (cperl-set-style 'C++).Если вы посмотрите на переменную cperl-style-alist (например, с Ch v ), то увидите, что car состоит из строк, а не символов.Кажется прискорбным, что ваш пример провалился молча, а не выдал ошибку.Большую часть времени я хотел бы знать, что я пытался выбрать несуществующий стиль, но, вероятно, есть веская причина, чтобы он был таким, какой он есть.

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

M -: (info "(emacs) Choosing Modes") RET

Ваши сценарии Perl начинаются с #!/usr/bin/perl?

Второе, еслинет файловой переменной, задающей основной режим, Emacs проверяет, начинается ли содержимое файла с `#! '.Если это так, это означает, что файл может служить в качестве исполняемой команды оболочки, которая работает при запуске интерпретатора, указанного в первой строке файла (остальная часть файла используется в качестве входных данных для интерпретатора).Поэтому Emacs пытается использовать имя интерпретатора для выбора режима.Например, файл, начинающийся с `#! / Usr / bin / perl ', открывается в режиме Perl.Переменная ʻpreter-mode-alist 'определяет соответствие между именами программ переводчика и основными режимами.

Конечно, по умолчанию используется perl-mode:

ELISP> (assoc "perl" interpreter-mode-alist)
("perl" . perl-mode)

Так что вы быпросто используйте add-to-list снова ...

(add-to-list 'interpreter-mode-alist '("perl" . cperl-mode))
...