Используйте EMACS для довольно печатных ActionScript 3.0
-
28-09-2019 - |
Вопрос
Я пытался использовать 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 попаданий с деревянной палкой - хорошее альтернативное средство для обеспечения соблюдения руководства по стилю кода.
Решение
У вас здесь несколько проблем. Сначала я буду иметь дело с незначительными проблемами.
.emacs
это плохое место, чтобы положить ваши пакетные команды. То.emacs
Файл - ваш личный файл конфигурации, который запускается всякий раз, когда вы запускаете Emacs Interactive. Вы не хотите, чтобы ваши пакетные команды должны выполняться в интерактивном режиме.Когда Emacs выполняется с
--batch
, "Аргументы действия" (нравится-l
) оцениваются по порядку слева направо. Так что уже слишком поздно делать-l actionscript-mode.el
После того, как вы уже загрузили и сохранили файл.Лучший стиль кодирования 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 *{" " {")'
Это немного грубо, и может неправильно перемещать некоторые брекеты (например, скобки внутри строк), но это может быть достаточно хорошим для вашего применения. Спросите еще раз, есть ли у вас проблемы.