В буфере *scratch* в Emacs Lisp после того, как вы вычислили выражение, которое дает сложную форму Lisp, эта форма "сокращается", т.е. некоторые длинные списки или их внутренние части заменяются многоточием. Выглядит примерно так:
(let* ((--3 (make-hash-table)) d c (--5 (let ... ... ...)) (--6 0) (--0 (make-
hash-table)) b a (--1 0) --7) (catch (quote --2) (maphash (lambda ... ... ...
... ... ... ...) --0)) (nreverse --7))
против расширенной версии:
(let* ((--3 (make-hash-table)) d c (--5 (let (--4) (maphash (lambda (k v)
(setq --4(cons k --4))) --3) (nreverse --4))) (--6 0) (--0 (make-hash-table))
b a (--1 0) --7) (catch (quote --2) (maphash (lambda (k v) (when (or (> --6
150) (> --1 100)) (throw (quote --2) nil)) (setq a k b v) (setq c (car --5) d
(gethash (car --5) --3) --5 (cdr --5)) (incf --6) (setq --7 (cons (list (cons
a b) (cons c d)) --7)) (message "a: %s, b: %s, c: %s, d: %s" a b c d)) --0))
(nreverse --7))
Если я нажимаю RET в развернутом или свернутом состоянии, это переключает состояние обратно. Очевидно, моя первая реакция — попытаться отформатировать вывод, поэтому я нажимаю RET! И тогда он либо свернется, либо расширится, в зависимости от того, в каком состоянии он был. Если я скопирую и вставлю все это, то он будет обработан как обычный текст, но есть ли более быстрый способ сделать это? т.е. Я хотел бы постоянно расширять его, без необходимости копировать-вставлять.
Я не смог найти функцию, которая переключает состояние (возможно, я неправильно ее называю). Мне потребовалось некоторое время, чтобы понять, что его все равно можно переключать (да, это отображается во всплывающей подсказке, но кто использует мышь в Emacs?).
Также мне, в целом, идея нравится, можно ли ее применить и к другим языкам? Где я могу прочитать больше об этой функции?