这一定是一个愚蠢的简单问题,但尽管以多种方式多次搜索谷歌并挖掘 Calc 文档,但我仍然无法找到答案。
给定一个 Emacs 实例,运行 Calc,并执行了多次计算,包括存储变量和方程,其中一些可能来自“~/.emacs.d/calc.el”文件,
如何在不重新启动 Emacs的情况下将 Calc 恢复到原始状态?
Pristine:堆栈上什么都没有。路上什么都没有。没有存储的变量或方程。等等。
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 with
m 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)))))
当前的内置变量列表:
(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-φ"))
M-# 0
这应该是你需要做的所有事情。