补丁在 suckless ST 终端中向后滚动以支持鼠标滚轮
Patch scrolling back in suckless ST terminal to support mouse wheel
ST terminal has a patch for scrolling back。除了 "PageUp" 和 "PageDown" 之外,我想更新上述补丁以启用鼠标滚轮上下信号。我怀疑 config.h
中的一个小改动是需要的,但我没有终端代码方面的经验,因此我请求帮助。
在源代码中,在 config.h
中出现了这些行:
static Mousekey mshortcuts[] = {
/* button mask string */
{ Button4, XK_ANY_MOD, "1" },
{ Button5, XK_ANY_MOD, "[=10=]5" },
};
所以,很明显,我们知道 Button4/5 是什么。此外,我们还有这些:
static Shortcut shortcuts[] = {
/* mask keysym function argument */
[...]
{ ShiftMask, XK_Page_Up, kscrollup, {.i = -1} },
{ ShiftMask, XK_Page_Down, kscrolldown, {.i = -1} },
};
所以,天真地,我假设添加另外两个原始(一个用于轮子向上,一个用于轮子向下)就可以了。然而,什么?
注意:我知道suckless recommends using a terminal multiplexer such as tmux. I use that already. However, sometimes (rarely) I just want to use a terminal without tmux and this feature would be useful. Please do not comment/answer to use tmux,这不是这个问题的问题。
没那么简单。当有人想要 left/right 滚动鼠标轨迹球时,偶尔会出现这个问题。
表格的左栏是一个 X 事件。这些仅限于预定义符号的组合。
Button4 和 Button5 被提及是因为它们通常用于传递鼠标 滚轮 事件。这种情况已经有一段时间了。在 1999 年 (patch #120) 修改 xterm 之前使用了一个资源文件,使其成为 built-in 功能。
可能的 X 事件在 C header 文件中列出 — X.h — and tables in the X source code; no wheel mouse events are provided for as such. For instance, there is a table 在 X 工具包库中,其中列出了所有可能性(对于使用 X 工具包的客户,例如 xterm)。 xev
使用 header-definitions.
如果 X 以不同的方式支持滚轮鼠标事件,它可能会为此目的使用新的函数调用,因为现有信息可能会以一种难以扩展的方式打包到 bit-fields 中。
来自 suckless site, there are some scroll back patches 允许使用 Shift+MouseWheel
滚动以及完全鼠标滚动。最后一个补丁可能会破坏其他 mkeys
,不包括滚动功能。
现在有一个独立的程序 scroll 可以为任何终端仿真器提供回滚缓冲区。在撰写此答案时,它仍处于 实验状态 ,预计会有很多错误。尽管如此,它已经比 st 的回滚补丁更好地处理回滚。例如。调整终端的大小将包裹以前的输出而不是切断并丢失它们。
要启用它,当然首先 download/clone 来自 suckless website 的源代码并在本地构建它。
然后在 st
的 config.def.h
中修改这一行(您必须获取最近的 git 提交以获得对 scroll
的支持)
char *scroll = NULL;
到
char *scroll = "/path/to/scroll";
现在重建 st
和 运行 st
。它会自动使用滚动来提供回滚缓冲区。
如手册中所述,另一种不修改 st
源代码的方法是 运行 st
在安装完 st
之后使用以下命令和 scroll
:
/path/to/st -e /path/to/scroll /bin/sh
ST terminal has a patch for scrolling back。除了 "PageUp" 和 "PageDown" 之外,我想更新上述补丁以启用鼠标滚轮上下信号。我怀疑 config.h
中的一个小改动是需要的,但我没有终端代码方面的经验,因此我请求帮助。
在源代码中,在 config.h
中出现了这些行:
static Mousekey mshortcuts[] = {
/* button mask string */
{ Button4, XK_ANY_MOD, "1" },
{ Button5, XK_ANY_MOD, "[=10=]5" },
};
所以,很明显,我们知道 Button4/5 是什么。此外,我们还有这些:
static Shortcut shortcuts[] = {
/* mask keysym function argument */
[...]
{ ShiftMask, XK_Page_Up, kscrollup, {.i = -1} },
{ ShiftMask, XK_Page_Down, kscrolldown, {.i = -1} },
};
所以,天真地,我假设添加另外两个原始(一个用于轮子向上,一个用于轮子向下)就可以了。然而,什么?
注意:我知道suckless recommends using a terminal multiplexer such as tmux. I use that already. However, sometimes (rarely) I just want to use a terminal without tmux and this feature would be useful. Please do not comment/answer to use tmux,这不是这个问题的问题。
没那么简单。当有人想要 left/right 滚动鼠标轨迹球时,偶尔会出现这个问题。
表格的左栏是一个 X 事件。这些仅限于预定义符号的组合。
Button4 和 Button5 被提及是因为它们通常用于传递鼠标 滚轮 事件。这种情况已经有一段时间了。在 1999 年 (patch #120) 修改 xterm 之前使用了一个资源文件,使其成为 built-in 功能。
可能的 X 事件在 C header 文件中列出 — X.h — and tables in the X source code; no wheel mouse events are provided for as such. For instance, there is a table 在 X 工具包库中,其中列出了所有可能性(对于使用 X 工具包的客户,例如 xterm)。 xev
使用 header-definitions.
如果 X 以不同的方式支持滚轮鼠标事件,它可能会为此目的使用新的函数调用,因为现有信息可能会以一种难以扩展的方式打包到 bit-fields 中。
来自 suckless site, there are some scroll back patches 允许使用 Shift+MouseWheel
滚动以及完全鼠标滚动。最后一个补丁可能会破坏其他 mkeys
,不包括滚动功能。
现在有一个独立的程序 scroll 可以为任何终端仿真器提供回滚缓冲区。在撰写此答案时,它仍处于 实验状态 ,预计会有很多错误。尽管如此,它已经比 st 的回滚补丁更好地处理回滚。例如。调整终端的大小将包裹以前的输出而不是切断并丢失它们。
要启用它,当然首先 download/clone 来自 suckless website 的源代码并在本地构建它。
然后在 st
的 config.def.h
中修改这一行(您必须获取最近的 git 提交以获得对 scroll
的支持)
char *scroll = NULL;
到
char *scroll = "/path/to/scroll";
现在重建 st
和 运行 st
。它会自动使用滚动来提供回滚缓冲区。
如手册中所述,另一种不修改 st
源代码的方法是 运行 st
在安装完 st
之后使用以下命令和 scroll
:
/path/to/st -e /path/to/scroll /bin/sh