如何在GNU Emacs中关闭过度滚动?

4
当我在GNU Emacs中打开的文件(缓冲区)行数少于当前窗口(帧)可显示的行数时,我可以默认使用滚动条向下滚动,并使顶部行向上消失(“超滚动”)。
如何关闭它,以便在帧中完整地显示整个缓冲区时无法滚动?
我可以对Emacs源代码中的 gtkutil.c进行修补,但更优雅的解决方案会更好。

我已经澄清了问题,提到使用滚动条进行滚动。 - asjo
1
你可以禁用滚动条;-) - Reactormonk
@Tass 那我就没有漂亮的视觉仪表来显示缓冲区的长度了... :-) - asjo
3个回答

1
现在可以通过设置变量scroll-bar-adjust-thumb-portion(对于我的目的,设置为nil)来修改滚动条的行为,以下是文档:
scroll-bar-adjust-thumb-portion is a variable defined in `C source code'.
Its value is nil
Original value was t

Documentation:
Adjust thumb for overscrolling for Gtk+ and MOTIF.
Non-nil means adjust the thumb in the scroll bar so it can be dragged downwards
even if the end of the buffer is shown (i.e. overscrolling).
Set to nil if you want the thumb to be at the bottom when the end of the buffer
is shown.  Also, the thumb fills the whole scroll bar when the entire buffer
is visible.  In this case you can not overscroll.

[...] version 24.4 of Emacs.

通过此提交引入:r111506


-1

你需要添加如下代码到你的初始化文件中:

(setq next-line-add-newlines nil)


不,那并不能关闭overscroll。要看我所说的,请打开一个新的emacs,进入scratch缓冲区,然后拖动滚动条向下 - 前三/四行会向上滚动。将next-line-add-newlines设置为nil也无法改变这一点(默认值也是nil)。 - asjo
非常正确,抱歉我误解了你的问题。 - elemakil

-1
据我所知,目前你无法做到这一点(当然你可能能够把它弄糊涂)。正确地实现它可能会消耗大量的CPU时间,但更重要的是,似乎实现这个“功能”比让人们习惯它并发现它实际上并不是问题更费力。因此,还没有人为此编写补丁。

让我感到困惑的是,一个完整显示的小文件却出现了不到100%高度的滚动条 - 这与我生命中任何其他滚动条都不同。从对2003年和2009年emacs-devel线程的研究来看,修复它似乎是不可能的,所以我希望可以通过关闭过度滚动来解决这个问题。 - asjo
@asjo,实际上这个问题可以很容易地解决,但是只能通过引入其他缺点来实现。例如,使用另一个工具包,或者在拖动时将拇指变小。 - Stefan
当鼠标拖动滚动条时会发生什么并不重要,我几乎只使用它来衡量缓冲区的大小(就像我在使用其他带有滚动条的程序一样(我不使用vim :-))。我已经在本地Emacs中打了gtkutil.c的补丁以删除*30的东西,但是如果可以通过配置实现相同的效果会更好,我认为。尽管如此,我不知道正确的方法是什么(欢迎指点!) - asjo
我现在已经制作了一个小补丁,根据一个变量使得代码块成为可选项,这个补丁是针对我在问题中提到的那个补丁的:http://debbugs.gnu.org/cgi/bugreport.cgi?bug=1036#23 - asjo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接