5

当我在 Emacs 中搜索“save-restriction”的描述时,它有一个关于“缓冲区限制”的句子——我在下面包含了完整的描述。这个词是什么意思?保存限制是如何工作的,考虑到这一点,何时应该使用它?

(save-restriction &rest BODY) 

Execute BODY, saving and restoring current buffer's restrictions.
The buffer's restrictions make parts of the beginning and end invisible. 
(They are set up with `narrow-to-region' and eliminated with `widen'.)
This special form, `save-restriction', saves the current buffer's restrictions
when it is entered, and restores them when it is exited.
So any `narrow-to-region' within BODY lasts only until the end of the form.
The old restrictions settings are restored
even in case of abnormal exit (throw or error).

The value returned is the value of the last form in BODY.
4

2 回答 2

12

除非您的代码的目的是修改限制、当前缓冲区、点或窗口配置,否则您应该使用适当的保存方法来记住状态并自动为您恢复它。

  • save-current-buffer保存当前缓冲区,以便您可以切换到另一个缓冲区而无需记住切换回来。
  • save-excursion保存当前缓冲区及其当前点和标记,因此您可以移动点而无需记住恢复它。
  • save-restriction保存限制,以便您可以缩小或widen不必记住恢复它。
  • save-window-excursion保存框架上所有窗口的完整配置,除了当前缓冲区中的点值。

(旁注:我上次使用save-window-excursion时没有window-configuration-p方法。)

于 2012-07-21T22:24:53.950 回答
3

narrow-* 函数使用 save-restriction 来保存当前缓冲区,然后再隐藏它,以便能够恢复它。

'save-restriction' 记住所有的 'buffer' 数据结构,特别是 point-min、point-max、point-max-marker 等。例如,在窄函数修改缓冲区的可见性之前,它会记住旧配置,以便能够使用 widen() 恢复它。

于 2012-07-21T21:37:42.257 回答