我在 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);