https://st.suckless.org/patches/clipboard/使鼠标滚轮进行选择和粘贴,但我需要在选择鼠标左键时进行复制,然后单击鼠标右键进行粘贴。
要扩展,请按 ctrl-v 进行粘贴。
我用xorg,archlinux。
如何实现这一目标?
答案1
鼠标释放处理
将鼠标事件转换为粘贴的例程brelease()
位于x.c
:
void
brelease(XEvent *e)
{
if (IS_SET(MODE_MOUSE) && !(e->xbutton.state & forceselmod)) {
mousereport(e);
return;
}
if (e->xbutton.button == Button2)
selpaste(NULL);
else if (e->xbutton.button == Button1)
mousesel(e, 1);
}
如果你想要粘贴右边的按钮,而不是中间的按钮,只需更改Button2
为Button3
然后重新编译:
if (e->xbutton.button == Button3)
键盘快捷键定义
键盘快捷键位于shortcuts
中的数组中config.h
。剪贴板粘贴已映射到Ctrl- Shift- V:
static Shortcut shortcuts[] = {
/* mask keysym function argument */
...
{ TERMMOD, XK_V, clippaste, {.i = 0} },
Ctrl-v在某些 shell 和编辑器中已经具有特殊含义,因此您可能不希望终端拦截它,而更喜欢使用现有的快捷方式。但如果您确实决定使用这个新快捷方式,则必须添加/更改该行,如下所示:
{ ControlMask, XK_v, clippaste, {.i = 0} },
请注意XK_v
now 有一个小写的“v”,因为它没有Shift.
答案2
非常感谢@JigglyNaga,但现在(2022 年 8 月)这个配置可以在 config.def.h / config.h 中完成:
/*
* Internal mouse shortcuts.
* Beware that overloading Button1 will disable the selection.
*/
static MouseShortcut mshortcuts[] = {
/* mask button function argument release */
{ XK_ANY_MOD, Button3, selpaste, {.i = 0}, 1 },
{ ShiftMask, Button4, ttysend, {.s = "\033[5;2~"} },
{ XK_ANY_MOD, Button4, ttysend, {.s = "\031"} },
{ ShiftMask, Button5, ttysend, {.s = "\033[6;2~"} },
{ XK_ANY_MOD, Button5, ttysend, {.s = "\005"} },
};
请注意,我已将 Button2 更改为 Button3 以进行自助粘贴 - 如果您希望在单击鼠标右键时触发粘贴功能,这就是您想要执行的操作。
天哪,我爱圣。这是唯一可以像这样轻松配置的终端。