설정 플래그를 사용하지 않고 bash와 X11 사이에 마우스 붙여넣기 버퍼(클립보드 아님)를 어떻게 공유할 수 있습니까?

설정 플래그를 사용하지 않고 bash와 X11 사이에 마우스 붙여넣기 버퍼(클립보드 아님)를 어떻게 공유할 수 있습니까?

관련 답변(아래 링크)이 있지만 이를 위해서는 플래그 설정이 필요합니다. Ctrl+ U다르게 작동합니다. \Cu아니면 \C-u그냥 교체할 수 없습니다 \eW(아래 코드).

이게 뭐야?Bash와 X11 간에 클립보드 공유제안.

if [[ -n $DISPLAY ]]; then
  copy_line_to_x_clipboard () {
    printf %s "$READLINE_LINE" | xsel -ib
  }
  bind -x '"\eW": copy_line_to_x_clipboard'
fi

그래서 질문은: bash에 텍스트를 추가하고 CtrlXorg U의 마우스(가운데 클릭) 붙여넣기 버퍼로 잘라내는 방법은 무엇입니까?

답변1

함수는 해당 줄을 클립보드에 복사합니다.

Ctrl+C/Ctrl+V 클립보드 대신 마우스 붙여넣기 버퍼를 사용하려면 xsel-b옵션 없이 실행하세요.

복사하지 않고 잘라내려면 나중에 텍스트를 삭제하세요. READLINE_LINE빈 문자열로 설정하세요.

Bash에서 제공하는 터미널 설정은 stty자체 키 바인딩보다 우선합니다. 나는 주로 터미널의 설정을 존중하는 것이 목적이라고 생각합니다.BackSpace를 보내 ^H거나^?stty -a, 그러나 보다 일반적으로 이는 bash에 나열된 모든 문자 (예 ^C: ^D, , ^H, ^Q, ^S, ^W및 ) ^Z에 대한 키 바인딩이 기본적으로 사용되지 않음 을 의미합니다. 리바인드하려는 제어 문자의 stty를 설정 해제해야 합니다.^\^?

~/.bashrc이것은 Ubuntu 16.04의 bash 4.3에서 다음 코드로 저에게 효과적이었습니다.

if [[ -n $DISPLAY ]]; then
  stty kill ''
  copy_line_to_x_clipboard() {
    printf %s "$READLINE_LINE" | xsel -i;
    READLINE_LINE= READLINE_POINT=0
  };
  bind -x '"\C-u": copy_line_to_x_clipboard';
fi

이것을 명령줄에 붙여 넣으면 작동하지 않습니다. 귀하의 의견에서 언급한 효과를 얻었습니다. 즉, ^Uinserts aliteral 을 누르는 것입니다 ^U. 을 실행 stty kill ''한 다음 bind -x …후속 명령을 실행하면 작동합니다.

관련 정보