URxvt> = 9.20でCTRL-ALT-[C | V]をCTRL-SHIFT- [C | V]に再バインドします。

URxvt> = 9.20でCTRL-ALT-[C | V]をCTRL-SHIFT- [C | V]に再バインドします。

9.20以降、++を使用URxvtしてテキストをクリップボードにコピーできます(++を使用して貼り付けることもできます)。CtrlAltCCtrlAltV

しかし、私はすでにこれらのバインディングを他の目的に使用しています。

URxvtそれでは、> = 9.20でこれを++ Ctrl(および貼り付けの場合++)にどのように再バインドしますか?ShiftCCtrlShiftV

答え1

rxvt-unicodeに含まれる評価拡張には、この目的のための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

これら2つのバインディングを実装するコードは次のとおりです。

  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このリソースを使用して他のコンテンツを再バインドすることはできません。それ文字列にのみマッピングされます(controlなどの修飾子を除くalt)。

ただし、選択を処理する方法があるPerl拡張機能を使用できます。ただし、それらを互いにリンクするにはPerlスクリプトを作成する必要があります。

答え4

evalを使用して(paste_clipboardおよびselection_to_clipboard)拡張@Ennoの答えが言及されました。ファイルに以下を追加できます.Xresources

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

関連情報