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

이 두 바인딩을 구현하는 코드는 다음과 같습니다.

  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_clipboardselection_to_clipboard) 확장@Enno의 답변이 언급되었습니다.파일 에 다음을 추가할 수 있습니다 .Xresources.

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

관련 정보