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

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

从9.20 开始,可以使用+ +URxvt将文本复制到剪贴板(也可以使用+ +粘贴)。CtrlAltCCtrlAltV

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

URxvt那么,在>=9.20中,我如何将其重新绑定到Ctrl+ Shift+ C(以及用于粘贴的Ctrl+ Shift+ V)?

答案1

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

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

URxvt.keysym.Control-Meta-c: builtin-string:
URxvt.keysym.Control-Meta-v: builtin-string:

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

xrdb -load .Xresources

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

答案2

所有现有答案都处理问题的后半部分(如何将剪贴板操作的键绑定添加到新键),但不回答前半部分(如何释放原始键绑定)。

答案是简单地将它们绑定到builtin-string:(如果您希望将它们逐字发送;否则,绑定到所需的操作)。即,在.Xresources

URxvt.keysym.C-M-c: builtin-string:

或者,在命令行上:

-keysym.C-M-c builtin-string:

答案3

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

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

您不能使用该keysym资源来重新绑定其他内容,因为仅映射到字符串(没有修饰符,例如controlalt)。

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

答案4

使用 eval 扩展 (paste_clipboardselection_to_clipboard)@Enno 的回答中提到您可以将以下内容添加到您的.Xresources文件中:

URxvt.keysym.Shift-Control-V: eval:paste_clipboard
URxvt.keysym.Shift-Control-C: eval:selection_to_clipboard

相关内容