Fedora 18에서 36으로 업그레이드한 후 마우스 클릭 시 XTerm 쉘(readline)에서 커서 위치 지정이 중지됩니다.

Fedora 18에서 36으로 업그레이드한 후 마우스 클릭 시 XTerm 쉘(readline)에서 커서 위치 지정이 중지됩니다.

다음 제어 시퀀스를 사용하여 설정하고 XTerm의 셸(BASH)에서 명령줄을 클릭하면커서를 이 위치로 이동하세요.. 적어도 제가 가지고 있던 고대 Fedora 18에서는 그렇게 작동했습니다. (저는 매우 긴 파이프라인을 작성하는 경향이 있기 때문에 이 기능은 수년 동안 사용하면서 완전히 익숙해졌기 때문에 나에게 훌륭하고 중요합니다.)

"대상 클릭" 기능을 활성화하려면 어떻게 해야 합니까(일반적으로 PS1BASH 변수에서):

\[\e[?2001;2002;2003;2004;2005;2006s\e[?2001;2002;2003h\]

그리고 원래 저장된 상태를 복원합니다(일반적 PS0으로 셸에서 실행되는 명령에 영향을 주지 않기 위해).

\[\e[?2001;2002;2003;2004;2005;2006r\]

실험에 사용된 별칭은 다음과 같습니다.

alias tmouseon='printf -- '\''\e[2001;2002;2003;2004;2005;2006s\e[?2001;2002;2003h'\'''
alias tmouseoff='printf -- '\''\e[?2001;2002;2003;2004;2005;2006r'\'''

다음은 내 XTerm 구성입니다. 일부는 이 문제와 관련이 있을 수 있지만 XTerm 매뉴얼에 따르면 내 구성에 문제를 일으킬 수 있는 다른 옵션이나 옵션을 찾을 수 없습니다. 또한 xrdb -merge내 X를 모른다 는 점에 유의하세요. 리소스 파일을 사용 .xinitrc했지만 xrdb배포판의 기본 설정이 마음에 들지 않았고 배포판에 대한 모든 권한을 원했기 때문에 몇 년 동안 아무런 문제 없이 사용해 왔습니다.)

! Init
XTerm.ptyInitialErase: true
XTerm.waitForMap:      true

! Buffers
XTerm.buffered:    true
XTerm.bufferedFPS: 100
XTerm.maxBufSize:  131072
XTerm.minBufSize:  8192

! TERMINAL

! Name
XTerm.VT100.termName: xterm-256color

! Session
XTerm.VT100.loginShell: true

! Features
XTerm.VT100.allowFontOps:   true
XTerm.VT100.allowMouseOps:  true
XTerm.VT100.allowTcapOps:   true
XTerm.VT100.allowTitleOps:  true
XTerm.VT100.allowWindowOps: true
XTerm.VT100.c132:           true

! Input
XTerm.VT100.backarrowKey:        true
XTerm.VT100.backarrowKeyIsErase: true

! Scrolling
XTerm.VT100.scrollBar:       false
XTerm.VT100.scrollTtyOutput: false
XTerm.VT100.allowScrollLock: true

! Screen buffer
XTerm.VT100.saveLines: 10000

! Alternate screen
XTerm.VT100.titeInhibit:  true
XTerm.VT100.tiXtraScroll: true

! Visual bell
XTerm.VT100.visualBell:      true
XTerm.VT100.visualBellLine:  true
XTerm.VT100.visualBellDelay: 150

! Pointer shape
XTerm.VT100.pointerShape: hand1

! Margin bell
XTerm.VT100.marginBell:  true
XTerm.VT100.nMarginBell: 8

! Cursor blinking
XTerm.VT100.cursorBlink:   true
XTerm.VT100.cursorOffTime: 250
XTerm.VT100.cursorOnTime:  750

! Selection
XTerm.VT100.charClass:          33:48,36-47:48,58-59:48,61:48,63-64:48,95:48,126:48
XTerm.VT100.highlightReverse:   false
XTerm.VT100.highlightSelection: true
XTerm.VT100.trimSelection:      true

(색상 설정 생략...)

아주 아주 오래된(알고 있지만 꽤 "스파르타" 환경에 있었고 평소 도구를 사용했을 때) Fedora 18 워크스테이션을 최신 Fedora 36으로 업그레이드한 후 마우스의 기능이 XTerm Click의 커서가 작동을 멈추고 찾을 수 없습니다.문제의 근본 원인. (열심히 고치려고 노력했지만 완전히 실패했습니다.) 기능을 복원하고 싶습니다. 누구든지 도와줄 수 있나요?

누구든지 같은 문제가 있습니까? 어떻게 분석하나요?

내 생각엔가능한TermInfo에 문제가 발생했지만 더 이상 자세히 조사하는 방법을 모르겠습니다... 다시 작동시키는 방법에 대한 모든 아이디어에 감사드립니다!

답변1

일반적으로 다른 배포판에 적용되므로 다른 답변을 남겨 두겠습니다. 이 답변은 readline-buttonFedora 31에서 작동이 중지된 이유를 설명합니다.

rpm 버전 30을 다운로드하고 로컬로 압축을 푼 다음 바이너리에서 "readline-button"을 찾았습니다 xterm.

rel=30; mkdir $rel; cd $rel
dnf download --disablerepo='*' --enablerepo=fedora --downloadonly \
 --releasever=$rel xterm
rpm2cpio xterm-*fc$rel.x86_64.rpm | cpio -cdimB
strings usr/bin/xterm | grep readline-button

Fedora 30 바이너리에는 여전히 나타나지만 Fedora 31 바이너리에서는 사라졌습니다.

소스 rpm을 다운로드하고 압축을 풀었습니다.

dnf download --disablerepo='*' --enablerepo=fedora-source \
 --source --releasever=$rel xterm
HOME=$PWD rpm -i xterm-*fc$rel.src.rpm 
HOME=$PWD rpmbuild -bp --nodeps rpmbuild/SPECS/xterm.spec
(cd rpmbuild/BUILD/; ln -s xterm-* xterm)

소스를 비교하면 다양한 변형이 표시되지만 이는 관련성이 있는 것 같습니다.

$ diff -wub {30,31}/rpmbuild/BUILD/xterm/ptyx.h
@@ -830,12 +845,6 @@
-#if OPT_PASTE64 && !OPT_READLINE
-/* OPT_PASTE64 uses logic from OPT_READLINE */
-#undef  OPT_READLINE
-#define OPT_READLINE 1
-#endif

변경 로그 파일에는 다음이 언급되어 있습니다.

$ diff -wub {30,31}/rpmbuild/BUILD/xterm/xterm.log.html
+    <li>adjusted ifdef's so that the paste64 configure option does
+    not automatically enable the readline-mouse configure
+    option.</li>

제목 아래패치 #338 - 2018/12/09. rpm 사양 파일을 비교해 보면 유일한 실제 차이점은 xterm 버전 334에서 이 새로운 패치가 포함된 346으로 마이그레이션된다는 것입니다.

$ diff -wub {30,31}/rpmbuild/SPECS/xterm.spec
-Version: 334
+Version: 346

추가 단서는 다음과 같습니다.

$ diff -wub {30,31}/rpmbuild/BUILD/xterm/INSTALL
   --enable-readline-mouse enable support for mouse in readline applications
-       Compile-in code to support experimental bracketed paste mode, i.e.,
+       Compile-in code to support predecessor to bracketed paste mode, i.e.,
        provide functions for setting/getting the selection data.  Essentially
        this puts xterm into a mode that sends special function-key strings to
        bracket the data.
-       (See --enable-paste64, which fits xterm's protocol better).
+       (The "paste64" feature, which fits xterm's protocol better, is
+       configured by default).

사양 파일은 --enable-readline-mouse구성에 사용된 적이 없음 을 보여줍니다 31/rpmbuild/SPECS/xterm.spec.

%configure \
        --enable-meta-sends-esc \
        --disable-backarrow-key \
        --enable-256-color \
        --enable-exec-xterm \
        --enable-luit \
%{?with_trace: --enable-trace} \
        --enable-warnings \
        --enable-wide-chars \
        --with-app-defaults=%{x11_app_defaults_dir} \
        --with-icon-theme=hicolor \
        --with-icondir=%{_datadir}/icons \
        --with-utempter \
        --with-tty-group=tty \
        --disable-full-tgetent

이 옵션이 없으면 OPT_READLINE0으로 정의되므로 readline-button 코드는 컴파일되지 않습니다 31/rpmbuild/BUILD/xterm-346/charproc.c. 예를 들면 다음과 같습니다.

#if OPT_READLINE
    { "readline-button",        ReadLineButton },
#endif

결론적으로

Fedora에서는 사용되지 않습니다 --enable-readline-mouse. 버전 30 이전에는 --enable-paste64기본적으로 활성화되어 OPT_PASTE64정의에 사용되었으므로 이는 중요하지 않습니다 OPT_READLINE. 버전 31 및 패치 338에서는 더 이상 수행되지 않으므로 이 기능이 손실되었습니다.

해결책은 --enable-readline-mouseFedora 사양 파일에 추가하는 것일 수 있습니다.

답변2

제공하신 이스케이프 시퀀스에 익숙하지 않지만 man xterm유용할 수 있는 함수가 있습니다.

줄 읽기 버튼() 버튼 해제 이벤트에서 반복되는 커서 앞으로 또는 뒤로 제어 시퀀스를 에코하여 호스트 애플리케이션에 버튼 이벤트와 일치하도록 커서 위치 개념을 업데이트하도록 요청함으로써 선택적 읽기 라인 기능을 지원합니다.

이를 사용하려면 적절한 번역 바인딩을 추가하거나 다음을 사용하여 테스트하세요 -xrm.

xterm -xrm 'XTerm.VT100.translations:  #override\
 Mod4 <Btn1Down>: readline-button()\n'

이 예제 바인딩의 경우 Meta(또는 Super) 키를 사용하여 입력 줄의 문자를 마우스 왼쪽 버튼으로 클릭하면 xterm은 커서가 정렬될 때까지 왼쪽 또는 오른쪽 클릭을 생성합니다.

man urxvt-readline마찬가지로 urxvt 에는 기본적으로 활성화되고 Shift 및 왼쪽 클릭을 바인딩하는 내장 Perl 확장(참고자료 참조)이 있습니다 .

관련 정보