2010-11-04 7 views
2

J'ai essayé d'utiliser emacs en mode de traitement par lots pour imprimer un fichier ActionScript, mais il ne fonctionne pas comme prévu. J'ai téléchargé actionscript-mode.el et as-config.el à partir d'ici http://blog.pettomato.com/?p=12 et les mettre dans mon répertoire personnel, en dupliquant actionscript-mode.el dans mon répertoire de travail. Ensuite, je fait un fichier « emacs » aussi dans mon répertoire avec le contenu suivant:Utiliser Emacs pour imprimer ActionScript 3.0

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

Puis-je aller dans le répertoire avec le fichier .as correctement formaté et exécuter cette commande sur la ligne de commande:

maintenant, la question
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) 

est:

Comment puis-je obtenir emacs reformater accolades ne pas être sur une nouvelle ligne? Je deviens désespéré et je ne suis pas sûr que 50 coups avec un bâton en bois est une bonne alternative pour appliquer le guide de style de code.

Répondre

4

Vous rencontrez plusieurs problèmes ici. Je traiterai d'abord des problèmes mineurs.

  1. .emacs est un mauvais endroit pour mettre vos commandes par lots. Le fichier .emacs est votre fichier de configuration personnel, qui est exécuté chaque fois que vous lancez Emacs de manière interactive. Vous ne voulez pas que vos commandes par lots s'exécutent de manière interactive.

  2. Lorsqu'Emacs est exécuté avec --batch, le « action arguments » (comme -l) sont évalués dans l'ordre de gauche à droite. Il est donc trop tard pour faire -l actionscript-mode.el après avoir déjà chargé et enregistré le fichier.

  3. Il est préférable que le style de codage d'Emacs appelle (point-min) pour obtenir le début de la partie (visible du tampon) et (point-max) pour obtenir la fin du tampon. (Pas un gros problème dans ce cas, mais il est bon de faire les choses correctement.)

Donc votre script shell devrait ressembler à ceci. (J'ai écrit toutes les options dans leur intégralité pour une clarté maximale.)

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

Maintenant, sur le problème principal. Vous voulez déplacer les accolades d'ouverture pour qu'elles apparaissent à la fin des lignes, pas au début des lignes. La commande indent-region ne le fera pas pour vous: elle ajoute ou supprime uniquement l'indentation aux lignes que vous lui attribuez. Donc, pour votre application, vous devez modifier le fichier. Par exemple, vous pouvez ajouter cet argument à votre script batch (après l'appel à actionscript-mode et avant l'appel à indent-region):

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

Ceci est un peu grossier, et peut-être déplacer quelques accolades de façon incorrecte (par exemple, des accolades à l'intérieur des chaînes), mais cela pourrait être suffisant pour votre application. Demandez à nouveau si vous avez encore des problèmes.

+0

Cela a fonctionné! Merci beaucoup!! –

Questions connexes