Я ненавижу способ, которым elisp (не уверен, что LISP вообще) обрабатывает многострочные строки документов.
(defun foo ()
"This is
a multi
liner
docstring"
(do-stuff))
Я действительно хочу, чтобы я мог сделать что-то вроде
(defun foo ()
(eval-when-compile
(concat
"This is\n"
"a multi\n"
"line\n"
"docstring"))
(do-stuff))
так что отступ был последовательным.
К сожалению, eval-when-compile не выполняет эту работу.
У кого-нибудь есть идеи?
elisp
doc-strings
Крейзи Глью
источник
источник
defun
. Недостаток этого подхода - и он серьезный - заключается в том, что он может сбить с толку любое программное обеспечение (кроме компилятора / интерпретатора elisp), которое анализирует ваш код в поискахdefun
s.eval-when-compile
цитирует его результат (чтобы превратить его из значения в выражение). Если бы он был немного умнее и цитировал свой результат только тогда, когда он не цитировался сам, он бы работал.Ответы:
Конечно,
my-defun
макрос - это простой выход. Но более простое решение будетЧто должно заставить ваш трюк работать, по крайней мере, во всех случаях, когда функция расширяется макросом до ее фактического определения, что должно включать основные варианты использования (например, если она загружена из файла, если она скомпилирована байтом, или если она определена) через
M-C-x
).Тем не менее, это не исправит весь существующий код, поэтому, возможно, лучший ответ будет выглядеть примерно так:
который должен просто сдвигать строки документации на 2 пробела, но только на стороне дисплея, не затрагивая фактическое содержимое буфера.
источник
Вы можете использовать макрос как это:
Затем вы можете определить свои функции следующим образом:
Тем не менее, я настоятельно рекомендую не идти против стандартов для такой предельной выгоды. «Нерегулярный отступ», который беспокоит вас, - это всего лишь 2 столбца, не говоря уже о том, что он помогает выделить первую строку документации, которая является более важной.
источник
eval-when-compile
был макрос.Я видел пакеты, которые определяют строки документации, как это:
Поместите первую цитату в первую строку, затем начните текст в следующей строке, чтобы они все выстроились в линию. Это определенно не стандарт, но вы не единственный, кто это делает.
источник