5

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

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

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

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

4

2 回答 2

9

M-x calc-reset,这也必然是C-x * 0,是你所需要的。从信息手册

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' ( Cx * 0' 保留堆栈的内容,但将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,其他所有内容重置为其初始状态;使用负前缀参数,`Cx * 0' 保留堆栈的内容,但将其他所有内容重置为其默认状态。

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

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

编辑3:这是我的尝试。我又看了一下 calc-mode,在启动时它定义了我添加到下面的 my-calc-builtin-vars 中的变量。第二行将删除 Emacs 中所有以前缀 'var-' 开头且不在此列表中的变量。这将包括您定义的任何变量,或者在另一个包中。所以让我们希望没有其他人使用前缀“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-φ"))
于 2012-10-24T21:07:44.657 回答
-1

M-# 0

这应该是你需要做的所有事情。

于 2012-10-24T20:45:36.903 回答