鼠标释放处理

鼠标释放处理

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);
}

如果你想要粘贴右边的按钮,而不是中间的按钮,只需更改Button2Button3然后重新编译:

            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_vnow 有一个小写的“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 以进行自助粘贴 - 如果您希望在单击鼠标右键时触发粘贴功能,这就是您想要执行的操作。

天哪,我爱圣。这是唯一可以像这样轻松配置的终端。

相关内容