Используйте Emacs для красивой печати ActionScript 3.0 - PullRequest
2 голосов
/ 04 ноября 2010

Я пытался использовать emacs в пакетном режиме, чтобы красиво напечатать файл ActionScript, но он не совсем так, как я ожидал.Я скачал Actionscript-mode.el и as-config.el отсюда http://blog.pettomato.com/?p=12 и поместил их в свой домашний каталог, скопировав actioncript-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 переформатировать фигурные скобки, чтобы не оказаться на новой строке?Я впадаю в отчаяние и не уверен, что 50 ударов деревянной палочкой - это хороший альтернативный способ применения руководства по стилю кода.

1 Ответ

4 голосов
/ 04 ноября 2010

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

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

  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 *{" " {")' 

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

...