emacs - 永久改变一段代码缩略显示的状态?

标签 emacs

在 Emacs Lisp 的 *scratch* 缓冲区中,当你计算了一个计算结果为复杂 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,它会将状态切换回来。显然,我的第一 react 是尝试格式化输出,所以我按了RET!然后它会折叠或展开,具体取决于它所处的状态。如果我复制并粘贴整个内容,那么它会被视为普通文本,但是有没有更快的方法呢? IE。我想永久扩展它,而不必复制粘贴。

我找不到切换状态的函数(也许我调用不正确)。我花了一段时间才意识到无论如何都可以切换它(是的,它在工具提示中显示,但谁在 Emacs 中使用鼠标?)。

此外,总的来说,我喜欢这个想法,是否也可以将其应用于其他语言?我在哪里可以阅读有关此功能的更多信息?

最佳答案

两个变量控制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))))))))

关于emacs - 永久改变一段代码缩略显示的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13568262/

相关文章:

emacs - Clojure 1.2 发布了!如何让 swank-clojure 使用它?

Emacs - 无法让缓冲提供保存工作

c++ - 在 Windows 7 中的 Emacs 上编译和运行 C++

macos - 如何在 OSX 中从命令行启动 GUI Emacs?

emacs - 在 Slime REPL 中打印 UTF-8 文本

emacs - 如何确定一个包是否安装在elisp中?

vim - 展示vi或emacs生产力的视频

html - emacs 可以为我重新缩进一大块 HTML 吗?

emacs - Elisp - 删除长度为 1 的列表中的唯一项

eclipse - 将 Emacs 键盘配置导入 Eclipse?