在 URxvt >= 9.20 中将 CTRL-ALT-[C|V] 重新绑定到 CTRL-SHIFT-[C|V]

fau*_*uve 19 keyboard-shortcuts clipboard rxvt

由于URxvt9.20,文本可以被复制到剪贴板与Ctrl+ Alt+ C(并且还从与粘贴Ctrl+ Alt+ V)。

但是,我已经将这些绑定用于另一件事。

那么我怎样才能在URxvt>=9.20中将它重新绑定到Ctrl+ Shift+ C(和Ctrl+ Shift+V用于粘贴)?

小智 29

rxvt-unicode 附带的 eval 扩展为此具有 paste_clipboard 和 selection_to_clipboard 操作,可以绑定到任何键符(请参见此处)。

在您.Xresources添加:

URxvt.keysym.Shift-Control-V: eval:paste_clipboard
URxvt.keysym.Shift-Control-C: eval:selection_to_clipboard
Run Code Online (Sandbox Code Playgroud)

要禁用以前的键绑定,您还需要:

URxvt.keysym.Control-Meta-c: builtin-string:
URxvt.keysym.Control-Meta-v: builtin-string:
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令重新加载文件:

xrdb -load .Xresources
Run Code Online (Sandbox Code Playgroud)

您需要重新启动 rxvt 以使更改生效。

  • 这根本不起作用,直到我还将其添加或编辑为`.Xresources: URxvt.perl-ext-common: default` #also disable keycaps as per this answer:https://unix.stackexchange.com/a/ 444777/8827 (2认同)

Tho*_*key 2

代码实现这两个绑定如下:

  if (ctrl && meta && (keysym == XK_c || keysym == XK_v))
    { 
      if (keysym == XK_v)
        selection_request (ev.time, Sel_Clipboard);
      else if (selection.len > 0)
        { 
          free (selection.clip_text);
          selection.clip_text = rxvt_wcsdup (selection.text, selection.len);
          selection.clip_len = selection.len;
          selection_grab (CurrentTime, true);
        }

      return;
    }
Run Code Online (Sandbox Code Playgroud)

您不能使用该keysym资源重新绑定其他内容,因为仅映射到字符串(没有诸如control和之类的修饰符alt)。

但是,您可以使用 Perl 扩展,它具有处理选择的方法。但您必须编写一个 Perl 脚本将它们连接在一起。