Когда я еще располагаю конструкцию if-then-else с отступом в шепелявости emacs, блок не делает отступ правильно. То, что я получаю:
(defun swank-clojure-decygwinify (path) "Convert path from CYGWIN UNIX style to Windows style" (if (swank-clojure-cygwin) (replace-regexp-in-string "\n" "" (shell-command-to-string (concat "cygpath -w " path))) (path)))
где еще форма не располагается с отступом на том же уровне как тогдашняя форма. Существует ли очевидный способ зафиксировать это?
Это правильный отступ. Цитата из руководства:
Слово «else» не написано в коде Lisp; часть else в выражении if идет после части then. В написанном Лиспе else-part обычно пишется так, чтобы начинаться с отдельной строки, и с отступом меньше, чем then-part:
(if TRUE-OR-FALSE-TEST
ACTION-TO-CARRY-OUT-IF-THE-TEST-RETURNS-TRUE
ACTION-TO-CARRY-OUT-IF-THE-TEST-RETURNS-FALSE)
Например, следующее if
выражение выводит сообщение 4 is
не больше 5!
, когда вы оцениваете это обычным способом:
(if (> 4 5) ; if-part
(message "4 falsely greater than 5!") ; then-part
(message "4 is not greater than 5!")) ; else-part
Обратите внимание, что различные уровни отступа позволяют легко
отличить тогда-часть от другой-части. (В GNU Emacs есть несколько команд
, которые автоматически делают отступ , если
выражения правильно. * Примечание
GNU Emacs помогает вам вводить списки: списки ввода.)
Это функция, не ошибка: -)
У меня нет под рукой соответствующей документации, но похоже, что это делает то, что вы хотите:
(put 'if 'lisp-indent-function nil)
Кроме того, вы неправильно использовали слово «правильно»; по определению, однако отступы emacs являются "правильными" :)