vim에서 마우스 스크롤 이벤트를 캡처하는 방법은 무엇입니까?

vim에서 마우스 스크롤 이벤트를 캡처하는 방법은 무엇입니까?

저는 텍스트 편집기를 쓰고 있어요.

기능 1049(대체 화면) 모드+1000(마우스 추적) 모드가 활성화되면 터미널은 마우스 스크롤 이벤트와 클릭 이벤트를 캡처할 수 있습니다. 클릭 이벤트가 필요하지 않습니다.

이는 또한 마우스를 사용한 다른 유용한 작업(예: 터미널 화면에서 텍스트를 강조 표시하여 외부 복사-붙여넣기)을 허용하지 않는다는 단점도 있습니다.

스크롤 이벤트에서 커서 위치가 이를 반영하도록 변경되는 이상적인 마우스 동작이 있기 때문에 말하는 반면 vim, 클릭 이벤트는 영향을 미치지 않는 것 같습니다. 또한 깜박임을 유발하지 않는 방식으로 수행됩니다.

1049 + 1007을 사용하지 않는다는 것은 vim.

내 질문: vim이 작업은 어떻게 이루어지나요?

소스코드를 검색해봤는데 못찾겠어요. 또한 화면에 쓰는 이스케이프 시퀀스를 추적해 보았습니다. 이것은 내가 시도한 두 터미널 에뮬레이터 모두에서 작동합니다.

답변1

vim이 몇 년 동안 사용해 온 libvterm 복사본에 하드코딩되어 있습니다.상태.c:

  case 1000:
  case 1002:
  case 1003:
    settermprop_int(state, VTERM_PROP_MOUSE,
        !val          ? VTERM_PROP_MOUSE_NONE  :
        (num == 1000) ? VTERM_PROP_MOUSE_CLICK :
        (num == 1002) ? VTERM_PROP_MOUSE_DRAG  :
                        VTERM_PROP_MOUSE_MOVE);
    break;

xterm을 구현하는 척하는 모든 것이 있다고 가정합니다.어떤 사건이라도그리고아무 버튼이나제어. 많은 vim용어.c어떤 xterm-wannabe를 사용할 수 있는지 알아내려고 노력 중입니다. 그 중 어느 것도 정확하지 않지만 libvterm은 수행된 검사를 무시합니다.

(프로그램이 어떤 일을 어떻게 하는지 알고 싶다면, 시작하는 가장 효과적인 방법은 소스 코드를 읽는 것입니다.)

관련 정보