Utilizzare Emacs per pretty-stampa ActionScript 3.0
-
28-09-2019 - |
Domanda
Ho cercato di usare emacs in modalità batch per pretty-stampare un file ActionScript, ma non abbastanza fare quello che mi aspettavo che. Ho scaricato actionscript-mode.el e as-config.el da qui http://blog.pettomato.com /? p = 12 e metterli nella mia home directory, duplicazione ActionScript mode.el nel mio dir di lavoro. Poi ho fatto un file ".emacs" anche nella mia home directory con il seguente contenuto:
(load "~/actionscript-mode.el")
(actionscript-mode)
(indent-region 0 (buffer-size) nil)
(save-buffer)
Poi vado alla directory con il file .as non correttamente formattato ed eseguire questo comando sulla riga di comando:
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)
Ora la domanda è:
Come faccio a ottenere emacs riformattare parentesi graffe non essere su una nuova linea? Sto diventando disperata e non sono sicuro di 50 colpi con un bastone di legno è un buon mezzo alternativo per far rispettare il codice di guida di stile.
Soluzione
Si stanno avendo diversi problemi qui. Mi occuperò con i primi problemi minori.
-
.emacs
è un brutto posto per mettere i vostri comandi batch. Il file.emacs
è il vostro file di configurazione personale, che viene eseguito ogni volta che si avvia Emacs in modo interattivo. Tu non vuoi i tuoi comandi batch per eseguire in modo interattivo. -
Quando Emacs viene eseguito con
--batch
, il " argomenti di azione " (come-l
) vengono valutati in ordine da sinistra a destra. Così è troppo tardi per fare-l actionscript-mode.el
dopo aver già caricato e salvato il file. -
E 'meglio lo stile Emacs codifica alla chiamata
(point-min)
per ottenere l'inizio del (parte visibile del) tampone e(point-max)
per ottenere il fine del buffer. (Non è un grosso problema in questo caso, ma è bello per ottenere le cose per bene.)
Così il vostro shell script dovrebbe essere simile a quanto segue. (Ho scritto tutte le opzioni in pieno per la massima chiarezza.)
emacs --batch \
--load=~/actionscript-mode.el \
--visit=FILE \
--funcall=actionscript-mode \
--execute='(indent-region (point-min) (point-max))' \
--funcall=save-buffer
Ora, al problema principale. Si desidera spostare le parentesi di apertura in modo che appaiano alla fine di linee, non all'inizio delle linee. Il indent-region
comando non farà questo per voi, solo aggiungere o rimuove il rientro per le linee che si dà. Quindi per la vostra applicazione, è effettivamente bisogno di modificare il file. Ad esempio, è possibile aggiungere questo argomento per lo script batch (dopo la chiamata a actionscript-mode
e prima della chiamata a indent-region
):
--execute='(replace-regexp " *\n *{" " {")'
Questo è un po 'grezza, e potrebbe spostare alcuni parentesi in modo non corretto (ad esempio parentesi all'interno delle stringhe), ma potrebbe essere abbastanza buono per la vostra applicazione. Chiedi di nuovo se avete ancora problemi.