C 在无吸盘ST终端中向后滚动以支持鼠标滚轮的补丁

C 在无吸盘ST终端中向后滚动以支持鼠标滚轮的补丁,c,unix,terminal,x11,C,Unix,Terminal,X11,这个有一个。我想更新所说的补丁,除了“PageUp”和“PageDown”之外,还可以启用鼠标滚轮上下信号。我怀疑config.h中的一个小改动是需要的,但我在终端代码方面没有经验,因此请求帮助 在源代码中,在config.h中显示以下行: static Mousekey mshortcuts[] = { /* button mask string */ { Button4, XK_ANY_MOD,

这个有一个。我想更新所说的补丁,除了“PageUp”和“PageDown”之外,还可以启用鼠标滚轮上下信号。我怀疑
config.h
中的一个小改动是需要的,但我在终端代码方面没有经验,因此请求帮助

在源代码中,在
config.h
中显示以下行:

static Mousekey mshortcuts[] = {
    /* button               mask            string */
    { Button4,              XK_ANY_MOD,     "\031" },
    { Button5,              XK_ANY_MOD,     "\005" },
};
所以,很明显,我们知道按钮4/5是什么。此外,我们还有:

static Shortcut shortcuts[] = {
    /* mask                 keysym          function        argument */
    [...]
    { ShiftMask,            XK_Page_Up,     kscrollup,      {.i = -1} },
    { ShiftMask,            XK_Page_Down,   kscrolldown,    {.i = -1} },
};
因此,天真地,我假设再加上两个原始(一个用于上轮,一个用于下轮)就可以了。然而,什么



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

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

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

之所以提到Button4和Button5,是因为它们通常用于传递鼠标滚轮事件。这种情况已经有相当一段时间了;1999年()修改xterm之前使用了一个资源文件,以使其成为一个内置功能

可能的X事件在C头文件和X源代码中的表中列出;因此,不提供滚轮鼠标事件。例如,X Toolkit库中有一个列表,列出了所有可能性(适用于使用X Toolkit(如xterm)的客户机)
xev
使用标题定义


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

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

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

要启用它,首先当然要从下载/克隆源代码并在本地构建它

然后在
st
config.def.h
中修改这一行(您必须获取最近的git提交以获得对
滚动的支持)

char*scroll=NULL;

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

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

/path/to/st-e/path/to/scroll/bin/sh

虽然这不是我想要的答案,但它确实给了我一个清晰的问题解释。谢谢。所以有一种方法可以做到这一点,因为有一种方法可以做到这一点。然而,鉴于我的问题,你的回答仍然是最好的,因此它仍然被接受。