修补程序在无可挑剔的ST终端中向后滚动以支持鼠标滚轮

时间:2015-05-20 07:52:53

标签: c unix terminal x11

ST terminal有一个patch for scrolling back。我想更新所述补丁以启用鼠标滚轮上下信号以及" PageUp"和" PageDown"。我怀疑config.h中的一个小变化是需要的,但我没有终端代码的经验,因此我请求帮助。

在源代码中,在config.h中出现以下行:

static Mousekey mshortcuts[] = {
    /* button               mask            string */
    { Button4,              XK_ANY_MOD,     "\031" },
    { Button5,              XK_ANY_MOD,     "\005" },
};

所以,很明显,我们知道Button4 / 5是什么。另外,我们有这些:

static Shortcut shortcuts[] = {
    /* mask                 keysym          function        argument */
    [...]
    { ShiftMask,            XK_Page_Up,     kscrollup,      {.i = -1} },
    { ShiftMask,            XK_Page_Down,   kscrolldown,    {.i = -1} },
};

所以,天真地,我假设添加另外两个原始(一个用于向上轮,一个用于向下轮)将成功。但是,什么?

注意:知道 suckless建议使用tmux等终端多路复用器。我已经用过了。但是,有时(很少)我只想使用没有tmux的终端,这个功能会很有用。 请不要评论/回答使用tmux,这不是这个问题的内容。

3 个答案:

答案 0 :(得分:2)

不是那么简单。当有人想要左/右滚动鼠标轨迹球时,偶尔会出现这个问题。

表格的左栏是 X事件。这些仅限于预定义符号的组合。

提到了Button4和Button5,因为它们通常用于传递鼠标 wheel 事件。这种情况已经持续了一段时间;在1999年修改xterm(patch #120)之前使用了一个资源文件,使其成为内置功能。<​​/ p>

可能的X事件在C头文件中列出 - X.h - 和X源代码中的表格;没有提供滚轮鼠标事件。例如,X Toolkit库中有一个table列出了所有可能性(对于使用X Toolkit的客户端,例如xterm)。 xev使用标头定义。

如果X以不同的方式支持滚轮鼠标事件,它可能会为此目的使用新的函数调用,因为现有的信息可能以一种排除易于扩展的方式打包到位字段中。

答案 1 :(得分:1)

现在有一个独立程序scroll,可为任何终端仿真器提供回滚缓冲区。在编写此答案时,它仍处于实验状态,预计会有很多错误。尽管如此,它比st的回滚修补程序对回滚的处理要好。例如。调整终端的大小将包装先前的输出,而不是切断并丢失它们。

要启用它,首先要从suckless website下载/克隆源代码,然后在本地进行构建。

然后在config.def.h的{​​{1}}中修改这一行(您必须获取最近的git commit以获得对st的支持)

scroll

char *scroll = NULL;

现在重建char *scroll = "/path/to/scroll"; ,然后运行st。它将自动使用滚动来提供回滚缓冲区。

如手册中所述,不修改st的课程代码的另一种方法是在安装了stst之后,使用以下命令运行st

scroll

答案 2 :(得分:0)

suckless网站上,有一些scroll back patches允许使用Shift+MouseWheel滚动以及完整鼠标滚动。最后一个补丁可能会破坏除滚动功能之外的其他mkeys