如何使用 Ctrl-Insert 从 XTerm 复制?

如何使用 Ctrl-Insert 从 XTerm 复制?

在像 Firefox 这样的应用程序中Ctrl-InsertShift- 的Insert工作方式类似于Ctrl-cCtrl- v(修改中学剪贴板),但在 XTerm 中却是这样不是工作就像共同点Ctrl——Shift和——c​​CtrlShiftv:

  1. Ctrl-Insert不更改剪贴板,而是;5~在当前提示符上逐字打印。
  2. Shift-Insert粘贴基本的剪贴板而不是辅助剪贴板。

我可以解决这个问题吗.inputrc或者其他什么?最好有二冲程跨平台剪切和粘贴快捷方式到处。

答案1

xterm 的约定是在 Firefox 甚至 Web 发明之前许多年制定的,由应用资源。这些是从多个地方合并的,包括像 之类的文件/usr/share/X11/app-defaults/XTerm,以及使用 看到的 X11 服务器保存的信息xrdb -q。您可以通过在文件中放置以下内容来覆盖这些资源~/.Xdefaults

XTerm*VT100.Translations:       #override\n\
 Shift Ctrl <KeyPress> v: insert-selection(CLIPBOARD)\n\
 Shift Ctrl <KeyPress> c: copy-selection(CLIPBOARD)\n

这绑定ctrl-shift-v到插入剪贴板内容。我不清楚你到底想要什么,所以检查一下手册页 用于功能以及 PRIMARY、SECONDARY 和 CUT_BUFFER0 选择。


您大概可以添加(不要忘记前面几行的反斜杠):

Shift <Key>Insert: insert-selection(SECONDARY)\n\
Ctrl  <Key>Insert: copy-selection(SECONDARY)\n

答案2

这类似于如何从 xterm(Awesome、Debian、VirtualBox)复制文本?,包括部分建议答案。

但是:通过后台,xterm接收 X 事件(您可以使用 来查看xev),并以不同的方式处理这些事件:

  • 对于controlinsert,xterm 查看控制键和插入键的事件,并构造一个字符序列以发送到您的应用程序,例如,^[[28;5~
  • shiftinsert处理方式有所不同,因为它是默认translations资源对于 xterm。这是 X Toolkit 库的一个功能,它来自xterm 可以看到事件。在里面translations资源,就是这一行:
      Shift 插入:插入选择(SELECT, CUT_BUFFER0) \n\

SELECT此资源中的关键字被 xterm 解释为 PRIMARY 或 CLIPBOARD,具体取决于资源selectToClipboard(或选择到剪贴板菜单项)。顺便说一下,CLIPBOARD 不是次要选择。看2.6.1.2。二次选择在 ICCM 中了解二次选择的描述。

您可以启用selectToClipboard资源,将其添加到您的$HOME/.Xdefaults文件(或其他资源文件,甚至使用xrdb):

xterm*selectToClipboard: true

您还可以使用controlshift修饰符(以任一顺序)和insert键添加翻译。改编一下我在另一个问题中的回答:

xterm*VT100.Translations: #override \
                 Shift <Key>Insert:    insert-selection(SELECT) \n\
                 Ctrl <Key>Insert:     copy-selection(SELECT) \n\
                 Ctrl Shift <Key>V:    insert-selection(SELECT) \n\
                 Ctrl Shift <Key>C:    copy-selection(SELECT)

X Toolkit 中的翻译解析器可以识别关键字的各种拼写。因此与和Key相同。但这是它知道密钥的唯一方法。KeyPressKeyDownCtrlcontrol

当你可以添加controlCcontrolV,通常不建议这样做,因为这些控制键在您的终端中很有用(默认情况下):

$ stty -a
speed 38400 baud; rows 40; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

进一步阅读:

相关内容