之前看坛子里有人说 28.1 不稳定,所以编译 Emacs 时一直将版本固定在 27.1,今天忍不住试了下 28.1,发现多了一个 undo-redo 了,试了下,还不错。
这个跟原来的 redo 和undo 有什么不一样吗?
就是undo一个undo,原来你只能C-g C-/
来undo一个undo
简单来说就是使用 undo
的时候撤销了你的输入,如果你不想撤销了,只能使用 undo
来继续撤销你原本的撤销。这个时候会有一个问题,就是一不小心撤销撤过头了等各种乱七八糟的问题。
而 undo-redo
就是恢复你的撤销,恢复到头了就动不了了。相当于在原本的 undo
了 undo
的基础上加了一些限制。
其实我现在用原版的还挺适应的(甚至还省了个 redo 键
怎么说呢,多了一个选择总是好事,偶尔不小心 undo
懵掉的时候用用 undo-redo
也不错。
此外,在 MS-Windows 上 Emacs 现在可以开关输入法了,不知道是因为我是 Linux 上编译的还是什么其他原因,没找到 w32-set-ime-open-status
, w32-get-ime-open-status'
这两函数。这代码我没记错的话好像还是论坛里的兄弟贡献的。
之前逛邮件列表的时候,看其他人讨论,Linux 平台应该早就有相关函数了,有人知道叫什么名字吗?直接搜索 ime
没有搜索到。
你的代码使用的是 lexical
还是 dynamic scoping
? 现在 mode-line 上可以直接看到了。
dynamic scoping
Elisp
后面多了一个 /d
lexical scoping
Elisp
后面多了一个 /l
这个挺实用~~~
有具体的 redo 函数挺好的。但我现在是 Emacs 27 ,其实是可以一直 redo 的。(不用C-g C-/一个个按)
具体就是 undo 多了,此时执行非编辑动作,(比如 C-f C-b什么的),再执行 undo 的时候就是 redo 了,而且可以一直 redo ,打断它也很简单,开始编辑就行。
参考 How do you ‘redo’ changes after ‘undo’ with Emacs?
但如果要整个很详细的 undo history(多支线分叉),只能用别的插件了。
undo-redo 很奇怪,他的行为不协调。比如你间歇性输入
aaa1 bbb2 ccc3
: 光标停在位置3
undo
: 一次会跳回2,两次会跳回1。在位置1 undo-redo
时候会插入 bbb
,但是光标却停留在位置1,不会跳转到位置2。
应该是primitive-undo
的问题,我把L3624行换成 (goto-char (+ pos (length string)))
可以临时纠正过来,pcase的其他情况我就改不了了。