Emacs 23.2 include js-mode, che è un Espresso rinominato e ritoccato. Ho appena fatto "trattino-regione" sul vostro codice redunkulous e ottenuto questo:
var o = { foo : 'bar'
, baz : 'foo'
}
, p
, q = new Squash(o
, { start: 0
, limit: 50
}
)
Immagino che non è esattamente quello che vuoi. Le virgole vengono compensate in modo diverso rispetto a quello che probabilmente ti piace.
(Gosh che è brutto.)
EDIT
Ok ho guardato in js-mode e il rientro sembra essere fatto da js--proper-indentation
. Esamina la riga corrente e quindi tenta di prendere decisioni su come indentare.
Ha un sacco di condizioni testate, per vari schemi di sintassi. Ho appena messo in un assegno per una riga che inizia con una virgola, ed ho ottenuto questi risultati:
var o = { foo : 'bar'
, baz : 'foo'
}
, p
, q = new Squash(o
, { start: 0
, limit: 50
}
)
Credo che questo sia ciò che si vuole, ma ancora sembra totalmente rotto a me. Comunque è così che l'ho fatto.
Iniettare questo cond in cima alla lista per js--proper-indentation
:
(defun js--proper-indentation (parse-status)
"Return the proper indentation for the current line."
(save-excursion
(back-to-indentation)
(cond
((looking-at ",")
(let ((spos
(save-excursion
(while (looking-back "}[\t\n ]*")
(backward-sexp)
(if (looking-back ",[\t\n ]*")
(re-search-backward ",[\t\n ]*")))
(cond
((looking-back "\\(,\\|(\\)[ \t]*\\<\\([^:=\n\t ]+\\)[ \t\n]*")
(re-search-backward "\\(,\\|(\\)[ \t]*\\<\\([^:=\n\t ]+\\)[ \t\n]*" (point-min) t)
(+ (current-column) 2))
((re-search-backward "\\<\\([^:=\n\t ]+\\)[ \t]*\\(:\\|=\\)" (point-min) t)
(current-column))
(t
nil)))))
(if spos
(- spos 2)
(+ js-indent-level js-expr-indent-offset))))
....
Assicurarsi di mantenere il resto delle condizioni in quel defun - non so quello che fanno, ma probabilmente the're importante .
Non ho idea se questo è robusto, non l'ho testato tranne per il tuo caso di test. Ma questo dovrebbe iniziare.
Sì, la gente spesso aumentano js2 modalità includendo indentazione da Espresso (js-mode). Ma Espresso ha esattamente il problema che sto cercando di risolvere. –
Ri: EDIT Grazie, è molto utile. Dovrò fare dei test e tornare a questo. –