Вопрос

Я пытался использовать EMACS в режиме пакетного режима, чтобы напечатать файл ActionScript, но он не совсем делает то, что я ожидал. Я скачал actionscript-mode.el и as-config.el отсюда http://blog.pettomato.com/?p=12и поместите их в свой домашний каталог, дублируя ActionScript-Mode.el в мой рабочий рег. Затем я сделал файл ".emacs" также в моем домашнем каталоге со следующим содержанием:

(load "~/actionscript-mode.el")
(actionscript-mode)
(indent-region 0 (buffer-size)  nil)
(save-buffer)

Затем я перехожу в каталог с неправильно отформатированным файлом .as и запустите эту команду в командной строке:

emacs -batch WrongFormat.as -l ~/.emacs -l actionscript-mode.el

And I get:

Loading /Users/pnm/actionscript-mode.el (source)...
Indenting region...
Indenting region... done
(No changes need to be saved)

Теперь вопрос:

Как я могу заставить Emacs переформатировать Curly Braces, чтобы не быть на новой линии? Я получаю отчаяние, и я не уверен, что 50 попаданий с деревянной палкой - хорошее альтернативное средство для обеспечения соблюдения руководства по стилю кода.

Это было полезно?

Решение

У вас здесь несколько проблем. Сначала я буду иметь дело с незначительными проблемами.

  1. .emacs это плохое место, чтобы положить ваши пакетные команды. То .emacs Файл - ваш личный файл конфигурации, который запускается всякий раз, когда вы запускаете Emacs Interactive. Вы не хотите, чтобы ваши пакетные команды должны выполняться в интерактивном режиме.

  2. Когда Emacs выполняется с --batch, "Аргументы действия" (нравится -l) оцениваются по порядку слева направо. Так что уже слишком поздно делать -l actionscript-mode.el После того, как вы уже загрузили и сохранили файл.

  3. Лучший стиль кодирования Emacs, чтобы позвонить (point-min) чтобы получить начало (видимая часть) буфера и (point-max) Чтобы получить конец буфера. (В этом случае не очень важно, но приятно правильно понять.)

Таким образом, ваш сценарий оболочки должен выглядеть что-то вроде следующего. (Я выписал все варианты в полном объеме для максимальной ясности.)

emacs --batch \
      --load=~/actionscript-mode.el \
      --visit=FILE \
      --funcall=actionscript-mode \
      --execute='(indent-region (point-min) (point-max))' \
      --funcall=save-buffer

Теперь, по главной проблеме. Вы хотите переместить открывающиеся скобки, поэтому они появляются в конце строк, а не в начале строк. Команда indent-region Не сделает этого для вас - это только добавляет или снимает вдали в линии, которые вы ему даете. Поэтому для вашего приложения вам действительно нужно отредактировать файл. Например, вы можете добавить этот аргумент в свой пакетный сценарий (после вызова actionscript-mode и до звонка indent-region):

      --execute='(replace-regexp " *\n *{" " {")' 

Это немного грубо, и может неправильно перемещать некоторые брекеты (например, скобки внутри строк), но это может быть достаточно хорошим для вашего применения. Спросите еще раз, есть ли у вас проблемы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top