拆解 beginning-of-buffer

和其他看似复杂的表达式一样,beginning-of-buffer 中的条件表达式可以按 if-then-else 模板拆解。框架如下:

(if (buffer-is-large
    divide-buffer-size-by-10-and-multiply-by-arg
  else-use-alternate-calculation

内层 if 判断缓冲区大小。原因是早期 Emacs 18 版本使用的数值上限约八百万,程序员担心大缓冲区计算时出现数值过大的问题。注释中提到的 “溢出(overflow)” 就是指数值过大。新版 Emacs 支持更大数值,但这段代码仍被保留,部分原因是现在的缓冲区往往比以前大得多。

逻辑分为两种情况:缓冲区很大,或不大。