使用Emacs来漂亮地打印ActionScript 3.0

时间:2010-11-04 15:53:25

标签: actionscript-3 actionscript emacs pretty-print reformat

我一直在尝试在批处理模式下使用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重新格式化花括号而不是换行? 我变得绝望了,我不确定使用木棍的50次点击是强制执行代码风格指南的好方法。

1 个答案:

答案 0 :(得分:4)

你在这里遇到了几个问题。我会首先处理这些小问题。

  1. .emacs是放置批处理命令的不好的地方。 .emacs文件是您的个人配置文件,只要您以交互方式启动Emacs,它就会运行。您不希望批处理命令以交互方式执行。

  2. 当使用--batch执行Emacs时,将按从左到右的顺序评估“action arguments”(如-l)。因此,在您已加载并保存文件后执行-l actionscript-mode.el为时已晚。

  3. 更好的Emacs编码风格是调用(point-min)来获取缓冲区(可见部分)的开头,(point-max)来获取缓冲区的结尾。 (在这种情况下没什么大不了的,但是把事情搞定是件好事。)

  4. 因此,您的shell脚本应如下所示。 (为了最清楚,我已经完整地写出了所有选项。)

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

    这有点粗糙,并且可能会错误地移动一些大括号(例如字符串中的大括号),但它可能对您的应用程序来说已经足够了。再问一下你是否还有问题。