如何使用 Control+V 键在 urxvt 终端中粘贴?

如何使用 Control+V 键在 urxvt 终端中粘贴?

我在 urxvt 中看到很多有关按键绑定的问题,但我没有看到这个确切的问题。我想使用control+v以便粘贴到终端中。 (没有 Shift 或 alt/meta 键等)

我的目标是能够从文本编辑器或 Chrome 等其他应用程序进行粘贴。 (注意这一点,以防它与所涉及的粘贴功能/剪贴板的“类型”相关,据我所知可能不止一个。)我正在使用 i3 窗口管理器运行 Ubuntu 20.04。

这是我尝试过的,修改自这个答案,但没有成功。

我在中添加了以下内容~/.Xresrouces

! Do I need to remove/change any default bindings first?
URxvt.keysym.Control-Meta-v: builtin-string:

! use control+v for "paste"
URxvt.keysym.Control-V: eval:paste_clipboard

! I read these are needed to disable other behavior of control key
URxvt.iso14755: false 
URxvt.iso14755_52: false

保存上面的文件后,我输入命令重新加载它:

xrdb -merge .Xresources

...但是重新启动 urxvt 后,即使重新启动后,我仍然无法使用control+v.

为了在 urxvt 中使用 control+v 作为“粘贴”的快捷方式,我需要添加哪些行到 .Xresources 文件中,或者我需要做什么?

答案1

可以使用 urxvt 的脚本功能和xdotool. urxvt 可以加载 Perl 脚本,该脚本可以触发组合键的操作。我的 urxvt 配置使用此功能在按下+时将ctrl+ shift+v输入终端。ctrlv

这实际上只是解决方案的一半,因为我实现它的方式涉及一个 hacky 解决方法(the sleep 0.25),实际上这具有预期的效果,并且除了少量滞后之外不会导致任何问题,但从理论上讲不能保证它能工作。

.Xresources

URxvt.keysym.Control-Shift-V: eval:paste_clipboard
URxvt.perl-ext-common: default,ctrl_v_paste
URxvt.iso14755: false
URxvt.iso14755_52: false

创造/usr/lib/x86_64-linux-gnu/urxvt/perl/ctrl_v_paste

#! /usr/bin/perl

=head1 NAME

paste - paste with ctrl v

=head1 DESCRIPTION

paste with ctrl v

=cut

sub on_init {
   my ($self) = @_;

   my $hotkey = "C-v";

   $self->bind_action ($hotkey, "%:start")
      or warn "unable to register '$hotkey' as hotkey\n";

   ()
}

sub on_action {
   my ($self, $action) = @_;
   
   $action eq "start"
      and $self->enter;

   ()
}

sub enter {
   my ($self) = @_;
   system("sleep 0.25 && xdotool getactivewindow key ctrl+shift+v &");
}

编辑:自从我上次回答以来,我找到了更好的粘贴方法,替换system("sleep 0.25 && xdotool getactivewindow key ctrl+shift+v &");为:

my $clipboard = `xclip -o`;
$self->tt_paste($clipboard);

相关内容