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で「貼り付け」のショートカットとしてCtrl + Vを使用するには、.Xresourcesファイルにどの行を追加する必要がありますか?それともどうすればいいですか?
答え1
urxvtのスクリプト機能を使用でき、xdotool
urxvtはキーの組み合わせ操作をトリガーできるPerlスクリプトをロードできます。私のurxvt設定では、この機能を使用して+を押したときに端末にctrl+を入力します。shiftvctrlv
私が実装した方法にはハッキングされた解決策が含まれているので、これは実際には解決策の半分にすぎません(機能していることを確認し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);