Emacs 23.2 incluye js-mode, que es un Espresso renombrado y retocado. Sólo hice "guión-región" en su código redunkulous y obtuve esto:
var o = { foo : 'bar'
, baz : 'foo'
}
, p
, q = new Squash(o
, { start: 0
, limit: 50
}
)
supongo que no es exactamente lo que quiere. Las comas se compensan de forma diferente a lo que probablemente te gusta.
(Gosh eso es feo.)
EDITAR
Ok Miré en js-mode y la sangría parece estar hecho por js--proper-indentation
. Mira la línea actual y luego trata de tomar decisiones sobre cómo sangrar.
Tiene un montón de condiciones que prueba, para varios patrones de sintaxis. Acabo de poner un cheque por una línea que comienza con una coma, y dieron los siguientes resultados:
var o = { foo : 'bar'
, baz : 'foo'
}
, p
, q = new Squash(o
, { start: 0
, limit: 50
}
)
Creo que eso es lo que quiere, pero todavía se ve totalmente roto a mí. De todos modos, así es como lo hice.
inyectar este cond en la parte superior de la lista para 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))))
....
Asegúrese de mantener el resto de las condiciones en las que defun - No sé lo que hacen, pero probablemente es importante the're .
No tengo idea de si esto es robusto, no lo he probado, excepto por su caso de prueba. Pero esto debería ayudarte a empezar.
Sí, la gente a menudo aumentan js2 modo mediante la inclusión de sangría desde Espresso (JS-mode). Pero Espresso tiene exactamente el problema que intento resolver. –
Re: EDITAR Gracias, eso es muy útil. Tendré que hacer algunas pruebas y volver a esto. –