프레임 아래쪽에 단어 목록을 표시 하시겠습니까?


20

내가 연 모든 emacs 프레임의 하단 (상단은 작동하지만)을 따라 가로로 별도의 줄에 3 개의 단어 목록을 표시하고 싶습니다. 나는 이것을하는 6 가지 방법을 생각했으며 모두 문제가 있습니다.

  1. 나의 첫 번째 생각은 내 모드 행에 줄을 추가하는 것이었지만 AFAICT는 줄 바꿈 문자를 모드 줄에 사용할 수 없으며 "^ J"로 변환됩니다.

  2. 두 번째 생각은 화면 상단에 줄이 있고 머리글 줄을 사용하는 것이었지만 줄 바꿈 문자도 지원하지 않습니다.

  3. 창의 마지막 3 줄 위에 오버레이를 표시 할 수는 있지만이 견고성을 어렵게 만듭니다. 포인트가 창의 실제 끝이 아닌 오버레이에 도달하면 스크롤이 트리거되어야하며 지속적으로 위치를 바꿔야합니다. 오버레이는 창 공간이 아닌 텍스트 공간에 있기 때문에 오버레이.

  4. 프레임 바닥에 전용 창문을 만들려고 할 수 있습니다. 이 코딩을 시도했지만 매우 강력하지는 않습니다. 프레임에 이미 분할 창이 포함되어 있고 Cx, 1을 무시하는 delete-other-windows의 사용자 정의 버전으로 리 바인드해야 할 때 제대로 작동하지 않는 것 같습니다. 내 특별한 창문과 다른 코너 케이스가 있다고 확신합니다. 또한 도움말 창이 열리면 이미 수평 분할이 있다고 생각하기 때문에 세로로 열립니다 (기술적으로는 있지만 한 줄 창만 표시).

  5. 이를 위해 전용 프레임을 가질 수는 있지만 구성은 터미널 모드에서 작동하지 않으며 화면 하단을 따라 유지하도록 레이아웃을 변경하지 않고 창 관리자를 스크립트 처리해야합니다. 등

  6. 3 줄의 텍스트를 미니 버퍼에 직접 삽입 할 수 있습니다. 나는이 부분적으로 작동하고, 3 줄을 수용하기 위해 미니 버퍼를 키울 수 있으며, 그것들을 표시 할 수 있습니다. 그러나 메시지가 에코 될 때마다 다른 명령을 발행 할 때까지 줄이 사라집니다. 이상적으로 3 줄과 에코 영역이 겹치지 않으므로 둘 다 볼 수 있습니다. 에코 영역으로 보내는 메시지를 안정적으로 필터링 할 수 있다면 성가신 일이 아닙니다 .EmacsWiki에서 해결책을 찾았지만 emacs C 소스에서 시작된 메시지에는 효과가없는 것 같습니다 (특히 타이머에 자주 자동 저장하기 때문에 파일 저장 메시지를 제거하십시오).

문맥 상, 나의 목표는 현재 버퍼에서 가장 자주 사용되는 단어, 현재 버퍼에서 가장 가까운 단어 및 현재 버퍼에서 가장 최근에 사용 된 단어를 지속적으로 표시하는 것입니다. 음성 명령을 통해 버퍼에 삽입 할 수 있기를 원합니다. 그래서 "nearest 2"라고 말할 수 있고 가장 가까운 단어 목록에서 두 번째 항목을 선택하여 삽입하도록합니다. 나는 현재 편집중인 버퍼에 대해 단어 목록이 표시되는 것에 대해서만 관심이 있습니다. 목록이 항상 표시되어야하기 때문에 다양한 코드 완성 모드에서 사용되는 팝업 창을 사용하고 싶지 않습니다.


좋은 질문과 좋은 자세. 유용한 제안을 받으시기 바랍니다.
Drew

터미널 모드 요구 (주요 사항) 외에도 # 5의 다른 부분에 대해 궁금합니다. 하단에 위치한 전용 프레임을 사용할 수 있습니다 (문제 없음). 선택 불가능 하다는 것은 무엇을 의미하며 , 왜 필요한가요? 읽기 전용을 의미하는 경우에도 문제가 없습니다. 레이아웃에 영향을 미치지 않는다는 것은 무엇을 의미 합니까? 요컨대, # 5는 나에게 너무 명확하지 않습니다.
Drew

@Drew : 키보드를 사용하여 WM을 구동한다는 의미입니다. 프레임에 의도적으로 초점을 맞추고 싶지 않을 것이므로 다음 창 / 이전 창 바인딩이 건너 뛰기를 원합니다. 마찬가지로 창 레이아웃이 해당 프레임이 패널 / 작업 표시 줄의 일부인 것처럼 작동하기를 원합니다. 편집 :; P 사방이 댓글에서 내가하지 창 이맥스, '창'I 평균 X 창 말했다
조셉 가빈

나에게 제안한 또 다른 가능성은 미니 버퍼를 사용하는 것입니다. 나는 그것을 사용하려고 노력하는 다른 모든 것을 방해하지 않고 수동으로 텍스트를 수동으로 표시 할 수 있는지 전혀 모른다.
Joseph Garvin

미니 버퍼 사용에 대한 메모를 추가했습니다.
Joseph Garvin

답변:


8

많은 해키 실험을 통해 # 6 (미니 버퍼 텍스트 사용)을 '충분히 좋은'작업 상태로 만들 수있었습니다. 스크린 샷은 다음과 같습니다.

작동중인 벨트의 스크린 샷

이 작업을 수행하기위한 몇 가지 주요 부분이 있습니다.

  • 미니 버퍼에 텍스트를 삽입하면 놀랍게도 거의 모든 것이 옳습니다. 거기에 삽입 된 텍스트가 실제로 나타납니다.
  • 텍스트를 일반 텍스트 대신 '오버레이 문자열'로 만들면 텍스트를 선택할 수 없게되고 커서가 실수로 입력되는 것에 대해 걱정할 필요가 없습니다.
  • 미니 버퍼 프롬프트 명령이 제대로 작동하려면 미니 버퍼 창이 활성화되어있을 때 텍스트 / 오버레이 삽입을 금지해야합니다.
  • 일반 창 크기 조정 기능으로 미니 버퍼의 크기를 조정하려고하면 너무 작은 창에 대한 오류가 발생합니다. 문서화되지 않은 md-resize-minibuf 함수를 사용하면 원하는만큼 정확한 행 수로 크기를 조정할 수 있습니다 resize-mini-windows를 nil로 먼저 설정했습니다.
  • 메시지가있을 때마다 목록이 사라지는 문제를 해결하려면 메시지를 가로 채기 위해 메시지 기능을 권장해야합니다. 그런 다음 미니 버퍼에 직접 넣으십시오. 또한 에코 영역에 마지막으로 표시된 항목을 저장하는 현재 메시지 변수를 살펴 봐야합니다 (놀랍게도 에코 영역과 미니 버퍼는 기술적으로 고유하며 일부 C 소스 코드 함수는 메시지를 거치지 않고 에코 영역에 직접 인쇄합니다. 기능). 아래에 제공하는 코드는 불완전합니다. 메시지가 여전히 조사해야 할 것보다 오래 지속됩니다 (* 메시지 *의 마지막 항목을 확인하는 것이 더 간단하고 강력 할 수 있음). 그러나 지금은 '충분히 좋습니다'.

다음은 킬 링을 표시하는 벨트 예와 함께 내 구현에 대한 링크입니다. 결국 이것은 적절한 프로젝트의 일부가 될 것입니다 : https://gist.github.com/jgarvin/ce37d08654978fd7e4c9

이것은 상당한 양의 elisp를 쓰는 것이 처음이므로 품질이 아마도 하위 수준이지만 작동합니다.


1

불행히도 모드 라인과 헤더 라인은 여러 줄이 될 수 없습니다. 나는 전에 이것에 대해 물었고이 작업을 수행하는 숨겨진 옵션이 있습니다 (적어도 그렇지는 않았습니다). 그래서 1과 2가 나왔습니다. 또한 3과 6은 장기적으로 당신을 행복하게하지 않는 해킹처럼 느껴집니다. 3과 4는 훌륭한 접근 방식처럼 보이지만 안정적으로 작동하게하려면 상당한 투자가 필요합니다.

따라서 먼저 emacs-devel 에 가져 오는 것이 좋습니다 . 내 경험상, 당신이 원하는 것을 신중하게 설명하고 왜 이것이 좋은지를 설명하면 상황이 결국 구현됩니다. 최소한 다음 릴리스까지 약간의 시간이 걸릴 수 있지만 약간 기다리거나 개발 버전을 사용하는 경우 훨씬 적은 노력으로 원하는 것을 정확하게 얻을 수 있습니다.


emacs-devel에 문의 해 주셔서 감사합니다. 솔루션을 생각해 냈지만 꽤 해키 였고 화면 좌표에 직접 그릴 수있는 실제 API를 사용하는 것이 좋을 것입니다. 따라서 시간이있을 때 아마도 전자 메일을 찍을 것입니다.
Joseph Garvin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.