2009-06-07 16 views
7

Sto usando la modalità Clojure di Emacs con SLIME e Swank-Clojure. Ho un problema con il rientro. Il più delle volte la rientranza fa quello che voglio: fa i rientri con 2 spazi quando premo TAB. Ma, ad esempio, nel caso di un proxy, il rientro ottenuto con TAB è enorme: 10 spazi. Esempio:Emacs Clojure mode indentation tab enorme in alcuni casi

(defn- create-frame [] 
    (let [frame (JFrame. "Hello Swing") 
     button (JButton. "Click Me")] 
    (.addActionListener button 
       (proxy [ActionListener] [] 
         (actionPerformed [evt] 

...

Lo stesso vale con i metodi proxy, ad esempio azioneSformato sopra.

Dove si trova questa impostazione e come posso modificarla? A mio avviso, deve essere il problema della modalità Clojure.

+1

Il rientro che ottengo è diverso da quello ad esempio, e in realtà ha più spazi (i "(proxy" allinea con "pulsante", e "[ActionListner]" e "(actionPerformed" line up pure. Molto simile all'indentazione indecisa.Puoi indicare il clojure.el che stai utilizzando? –

+0

Anche io sto vedendo questo ... un massiccio rientro quando si fa commenti, sto usando la modalità clojure 1.71 tramite ELPA – justinhj

risposta

15

L'indentazione del clojure si basa sulla rientranza del lisp, che, se non diversamente specificato, è di indentare la seconda riga per allineare con il primo argomento della funzione. Le seguenti linee sono rientrate sotto la riga precedente (supponendo che non vi siano cambiamenti nel nesting).

Per esempio

(some-function arg1 arg2 arg3 
       arg4-on-second-line) 

Oppure, quando il primo argomento è sulla seconda riga:

(some-function 
arg1 
arg2 
arg3 ...) 

Tuttavia, se si modifica la variabile lisp-indent-offset, ciò ignora lo schema di rientro spiegato sopra e forze la seconda riga di espressioni da rientrare lisp-indent-offset più colonne rispetto all'inizio della chiamata di funzione.

Quindi, forse il seguente sarebbe ottenere il rientro che stai cercando:

(setq lisp-indent-offset 2) 
+2

+1 ancora utile 3 anni dopo – doda

8

C'è "Sempre 2 posti" opzione in clojure mode. Puoi impostarlo aggiungendo la seguente riga nel tuo .emacs o init.el.

(setq clojure-defun-style-default-indent t)