3

複雑な Lisp フォームに評価される式を評価した後の Emacs Lisp の *scratch* バッファーでは、そのフォームは「省略」されます。つまり、いくつかの長いリストまたはその内部部分が省略記号に置き換えられます。次のようになります。

(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でマウスを使用するのは誰ですか?)。

また、私は一般的にそのアイデアが好きですが、それを他の言語にも適用することは可能ですか? この機能の詳細はどこで確認できますか?

4

1 に答える 1

4

2 つの変数が の結果の出力を制御しますeval-expression*scratch*バッファ内:

eval-expression-print-length
eval-expression-print-level

それらを に設定するnilと、結果は常に展開されます。

完全に展開された状態に切り替えたいRET(トグルしない) だけの場合は、このアドバイスを使用して、表示状態の切り替えを可能にするテキスト プロパティを削除できます。

(defadvice last-sexp-toggle-display (after last-sexp-toggle-display-only-long-form activate)
  "After the function is called, check to see if the long form had been displayed, and if so, remove property enabling toggling"
  (save-restriction
    (widen)
    (let ((value (get-text-property (point) 'printed-value)))
      (when value
        (let ((beg (or (previous-single-property-change (min (point-max) (1+ (point)))
                                                        'printed-value)
                       (point)))
              (end (or (next-single-char-property-change (point) 'printed-value) (point)))
              (standard-output (current-buffer))
              (point (point)))
          (if (< (length (nth 1 value)) (length (nth 2 value)))
              (remove-text-properties beg end '(printed-value))))))))
于 2012-11-26T17:08:32.503 に答える