Emacs가 커서를 화면 밖으로 이동 시키십시오


23

이 질문은 원래 /programming/15895313/let-emacs-move-the-cursor-off-screen 에서 요청 되었지만, 내가받은 모든 답변은 "수행 할 수 없다"고 대답했습니다. emacs에서는 허용되지 않습니다.

대부분의 GUI 텍스트 편집기가 작동하는 것처럼 Emacs가 커서를 화면 밖으로 이동시킬 수 있습니까? 이것은 GUI 편집기에서 Emacs를 사용할 때 나를 괴롭히는 가장 큰 것 중 하나입니다. 아래로 스크롤하면 커서가 버퍼의 상단으로 "밀어집니다".

이전에는 이것이 Emacs 아키텍처에 연결되어 있기 때문에 이것이 완전히 불가능하다고 생각했지만, 다중 커서를 보았습니다. 커서). 다중 커서를 사용하여 숨겨진 커서에 기본 커서를 두는 것이 가능하고 효과적인 커서는 실제로 편집하는 것입니까? 아니면 다른 영리한 속임수일까요? 아니면 내 인터넷 검색이 실패하고 마법이 없으면 이미 가능합니까?

터미널 이맥스를 사용하므로 거기서 작동해야합니다.


다중 커서 패키지가 수행하는 모든 것은 실제 커서의 제한을받지 않는 가짜 커서를 추가하는 것입니다. 이전 질문의 제안에 따라 답변이 되시기 바랍니다.
wasamasa

이 문제는 스크롤 막대 사용과 관련이 있다고 가정합니다. 맞습니까?
nispio

1
커서를 가져 오지 않을 것으로 예상되는 스크롤 명령은 무엇입니까? 내 경험상 커서는 PgUp / PgDn 또는 화살표 키를 사용할 때 모든 편집기 에서 당신을 따릅니다 .
nispio

4
@nispio 마우스 휠로 스크롤 할 수 있습니까?
ffevotte

2
커서가 화면 밖으로 이동하지 않으면 Page up 및 Page down (Cv 및 Mv)은 커서를 emacs로 이동하지 않습니다. 스크롤은 이동 (커서)과 다릅니다.
asmeurer

답변:


11

GNU ELPA 에는 scroll-restore이 문제를 해결하기 위한 새로운 패키지가 있습니다 . 몇 가지 다른 동작 중에서 선택할 수 있지만, 내가 직접 구성한 방식 (아래 참조)으로 인해 스크롤 명령 중에 커서가 보이지 않게되고 다시 입력을 시작하면 원래 위치로 되돌아갑니다.

지금까지 몇 가지 버그가 발생했지만 패키지는 대부분 광고대로 작동하는 것으로 보입니다. 함께 설치하여 테스트 할 수 있습니다

M-x package-install RET scroll-restore RET

패키지가 설치된 후 다음과 같이 마이너 모드를 활성화 할 수 있습니다

M-x scroll-restore-mode

개인적으로, 나는 Scroll Lock그것이 엄청나게 찬성하는 것처럼 보이기 때문에 그것을 열쇠에 묶고 있습니다 ! 이것이 내 init 파일에 추가하는 것입니다.

(require 'scroll-restore)
(scroll-restore-mode 1)
;; Allow scroll-restore to modify the cursor face
(setq scroll-restore-handle-cursor t)
;; Make the cursor invisible while POINT is off-screen
(setq scroll-restore-cursor-type nil)
;; Jump back to the original cursor position after scrolling
(setq scroll-restore-jump-back t)
;; Toggle scroll-restore-mode with the Scroll Lock key
(global-set-key (kbd "<Scroll_Lock>") 'scroll-restore-mode)

1
키를 바인딩 한 경우 때로는 비활성화 할 수 있다고 가정합니다. 이 모드는 일반 편집에 성가 시나요?
T. Verron 14'14

1
@ T.Verron 그것은 지금 꽤 버그가있는 것 같고, 그 실패 모드 중 하나는 커서를 한 영역에 "포획"하여 놓아 두지 않는 것입니다. 커서를 다시 해제하는 유일한 방법은 모드를 비활성화하는 것입니다. 모든 버그가 해결되면 항상 사용하지 않아도됩니다.
nispio

2
이것은 어떻게 작동합니까? 나는 아무것도 할 수없는 것 같습니다.
asmeurer

5

항상 사용하는 방법은 되돌아 가려는 위치에 마크를 설정 한 다음 버퍼를 다 읽었을 때을 사용하여 마크를 표시하는 것 C-u C-SPC입니다. 방황하기 전에 마크를 잊는 경우에도 마크를 터뜨리면 내가 어디에서 왔는지 알 수 있습니다. 이것은 일부 명령 ( isearch예 : 같은 )이 사용자가 인식하지 못하고 마크를 설정 했기 때문 입니다. 따라서 편집 과정을 통해 부주의하게 약간의 빵 부스러기 흔적이 남았습니다.

설명서에서 :

set-mark-command is an interactive compiled Lisp function in `simple.el'.

It is bound to C-@, C-SPC.

(set-mark-command ARG)

....

With prefix argument (e.g., C-u C-SPC), jump to the mark, and set the mark
from position popped off the local mark ring (this does not affect the global
mark ring).  Use C-x C-@ to jump to a mark popped off the global mark ring
(see `pop-global-mark').

나는 거의 설정 즐겨 찾기 또는 레지스터 신경 적이 있지만, 나는 거의 항상 내가 빨리 중 하나를 사용하여 온 내 방식으로 다시 찾을 수 있습니다 C-u C-SPC또는 pop-global-mark.


솔직히 말해서, 사람들이 커서를 화면 밖으로 이동시키기를 원하는 주된 이유는 커서 위치에 대한 적절한 기록이없는 편집자에게 익숙하기 때문입니다. 당신은 또한 그것을 만들 수 scroll-up있고 scroll-down자동으로 마크를 설정, 그래서 C-u C-SPC당신이 어디에서 왔는지 다시 얻을 수 있도록.
Radon Rosborough

0

다음 코드는 마우스 휠 스크롤 후 뒤로 뛰어 넘기에 충분합니다.

(advice-add 'mwheel-scroll :before (lambda (arg) (if (not (eq last-command 'mwheel-scroll)) (setq point-before-mwheel-scroll (window-point)))))
(defun jump-back () (goto-char point-before-mwheel-scroll))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.