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.

È stato utile?

Soluzione

Si stanno avendo diversi problemi qui. Mi occuperò con i primi problemi minori.

  1. .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.

  2. 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.

  3. 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top