Emacs 23.2 включает js-mode, который является переименованным и тронутым эспрессо. Я просто сделал «отступ-регион» на ваш redunkulous код и получил это:
var o = { foo : 'bar'
, baz : 'foo'
}
, p
, q = new Squash(o
, { start: 0
, limit: 50
}
)
Я предполагаю, что это не совсем то, что вы хотите. Эти запятые смещены по-другому, чем вам нравится.
(Гоша это некрасиво.)
EDIT
Ok Я посмотрел в JS-режиме и отступы, кажется, сделано js--proper-indentation
. Он смотрит на текущую строку и затем пытается принять решение о том, как отступать.
У этого есть куча условий, которые он тестирует, для различных синтаксических шаблонов. Я просто положить в чеке на строку, начинающуюся с запятой, и получил следующие результаты:
var o = { foo : 'bar'
, baz : 'foo'
}
, p
, q = new Squash(o
, { start: 0
, limit: 50
}
)
Я думаю, что это то, что вы хотите, но он все еще выглядит полностью сломал мне. Во всяком случае, так я и сделал.
Вводят этот конд в верхней части списка для 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))))
....
Не забудьте сохранить остальные условия в этом DEFUN - я не знаю, что они делают, но the're вероятно, важно ,
Не знаю, является ли это надежным, я не тестировал его, кроме одного тестового примера. Но это должно начаться.
Да, люди часто увеличивают СП2-режим, включая отступ от Эспрессо (JS-режим). Но у Espresso есть именно та проблема, которую я пытаюсь решить. –
Re: EDIT Спасибо, это очень полезно. Мне нужно будет провести некоторое тестирование и вернуться к этому. –