【问题标题】:How to completely erase Emacs Calc's state?如何彻底清除 Emacs Calc 的状态?
【发布时间】:2012-10-14 23:12:37
【问题描述】:

这一定是一个愚蠢的简单问题,但尽管以多种方式多次搜索 Google 并翻阅了 Calc 文档,但我仍然无法找到答案。

GIVEN 一个 Emacs 实例,正在运行 Calc,并执行了多次计算,包括存储变量和方程,其中一些可能来自“~/.emacs.d/calc.el "文件,

如何在不重新启动 Emacs 的情况下将 Calc 返回到原始状态?

Pristine:堆栈上没有任何内容。路上什么都没有。没有存储的变量或方程。等等。

【问题讨论】:

    标签: emacs calc


    【解决方案1】:

    M-x calc-reset,也绑定到C-x * 0,是你需要的。来自info manual

    C-x * 0' command ('calc-reset'; that's 'C-x *' followed by a zero) resets the Calculator to its initial state. This clears the stack, resets all the modes to their initial values (the values that were saved withm m' (calc-save-modes')), clears the caches (*note Caches::), and so on. (It does _not_ erase the values of any variables.) With an argument of 0, Calc will be reset to its default state; namely, the modes will be given their default values. With a positive prefix argument,C-x * 0' 保留堆栈的内容 但将其他所有内容重置为其初始状态;带有否定前缀 参数,`C-x * 0' 保留堆栈的内容但重置 其他一切都恢复到默认状态。

    编辑:哎呀。即使这样也不能清除变量。我不确定是否有一种直接的方法可以一直回到原始状态:(

    编辑 2:看起来 Calc 将所有变量(包括 pi 和 e 之类的“内置”)存储为带有前缀“var-”的全局变量。据我所知,它不会跟踪模式(如 pi)设置了哪些变量,以及用户设置了哪些变量。此外,默认用户变量存储为 var-q0、var-q1 等。因此,为了清除所有变量,您需要编译启动时存在的变量和状态列表,擦除不在该列表中的所有内容,然后恢复该列表中变量的原始值。这当然是可能的,但有点乏味。

    编辑 3:这是我的尝试。我又看了一下 calc-mode,在启动时它定义了我添加到下面的 my-calc-builtin-vars 的变量。第二行将删除 Emacs 中所有以前缀 'var-' 开头并且在此列表中 not 的变量。这将包括您定义的任何变量,或者在另一个包中。所以让我们希望没有其他人使用前缀“var-”。并且它不会重置内置变量的值,所以如果你将 pi 重新定义为 3,它将保持为 3。

    (setq my-calc-builtin-vars
          '("var-nan" "var-uinf" "var-sym" "var-lines" "var-Modes"
          "var-EvalRules" "var-inf" "var-phi" "var-pi" "var-gamma" "var-π"
          "var-φ" "var-γ" "var-spec" "var-e" "var-i")) 
    
    (defun really-reset-calc ()
      (interactive)
      (calc-reset nil)
      (mapc #'(lambda (el) (unintern el)) 
            (remove nil (mapcar 
                         #'(lambda (el) (unless (member el my-calc-builtin-vars) el))
                         (all-completions "var-" obarray)))))
    

    更新日期:2016 年 8 月 6 日

    当前内置变量列表:

    (setq my-calc-builtin-vars
          '("var-CommuteRules" "var-Decls" "var-DistribRules" "var-EvalRules"
          "var-FactorRules" "var-FitRules" "var-Holidays" "var-IntegAfterRules"
          "var-IntegLimit" "var-InvertRules" "var-JumpRules" "var-MergeRules"
          "var-Modes" "var-NegateRules" "var-e" "var-gamma" "var-i" "var-phi"
          "var-pi" "var-γ" "var-π" "var-φ"))
    

    【讨论】:

    • 一个 E 表示努力,但它确实需要擦除存储的变量和方程。如果在不久的将来我没有得到更好的答案,我会继续并标记你的接受。
    • @EdwinW 看看这是否适合你。我没有使用足够的 calc 对此进行非常彻底的测试。
    【解决方案2】:

    M-#0

    这应该就是你需要做的。

    【讨论】:

    • M-# 在手册或模式帮助中都不会作为命令的开头出现。请参阅上面泰勒的答案以获得更好但仍不完整的答案。
    猜你喜欢
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 2014-10-06
    • 2021-07-22
    • 2016-09-18
    • 2013-10-05
    • 1970-01-01
    • 2011-07-28
    相关资源
    最近更新 更多