터미널 에뮬레이터에서 emacsclient를 실행할 때 몇 가지 함수를 호출하고 싶습니다. Emacs가 텍스트 전용 터미널에서 시작될 때 작동하는 코드. 그래픽 모드에서 Emacs를 시작하고 터미널에서 emacsclient -t
을 실행하면 함수가 실행되지 않으므로 터미널 에뮬레이터에서 마우스를 사용할 수 없습니다.emacsclient가 터미널에서 시작된 경우에도 윈도우 시스템이 0이 아닌 경우
(defun my-terminal-config (&optional frame)
"Establish settings for the current terminal."
(message (format "%s" window-system)) ;; "ns" (Mac OS X) when Emacs is started graphically
(message (format "%s" (display-graphic-p))) ;; nil when Emacs is started graphically
(unless (display-graphic-p)
;; enable mouse reporting for terminal emulators
(xterm-mouse-mode 1)
(global-set-key [mouse-4] '(lambda()
(interactive)
(scroll-down 1)))
(global-set-key [mouse-5] '(lambda()
(interactive)
(scroll-up 1)))))
(add-hook 'after-make-frame-functions 'my-terminal-config)
이 이상한 상황 : 여기
문제의 코드입니다. Emacsclient는 서버에 연결하여 새 프레임을 만들지 만 서버가 그래픽 환경에서 실행 중이기 때문에 터미널 시스템에서는 "ns"로 표시되지만 윈도우 시스템은 nil이됩니다. 따라서 터미널에서emacsclient -t
을 실행하면 마우스보고 기능 활성화가 실행되지 않습니다. emacsclient가 실행 중일 때
C-x 5 2
으로 새 프레임을 만들면 윈도우 시스템이 해당 프레임에서 nil이되므로 마우스보고 기능 활성화가 실행됩니다.
터미널과 윈도우 시스템간에 프레임을 섞으면, window-system
의 값은 항상 Emacs 서버의 값으로 보입니다.
그래픽 모드에서 emacs를 사용하고 텍스트 모드에서 emacsclient를 실행하고 마우스 기능을 실행할 수있는 방법이 있습니까? 즉, 생성되는 프레임이 그래픽 또는 텍스트 환경에서 끝날 것임을 감지 할 수 있습니까?
window-system
값에 관계없이 프레임을 만들 때 항상 이러한 기능을 실행해야합니까?
재미있는 문제 : 나는 (윈도우 시스템 및 디스플레이 그래픽-P 동작합니다 제대로을 만들기 위해) 내
after-make-frame-functions
후크의 시작 부분에이를 추가했다. Linux (RHEL)에서 Emacs 23.2.1을 사용하고 그래픽 서버에 대해 emacsclient -t를 실행하고 창 시스템을 검사 할 때 그래픽이 아닌 Emacs 인 반면 X는 X입니다. 올바르게 작동하는 것. 설치 세부 사항은 무엇입니까? –Mac OS X 10.6.8에서 Emacs 23.3을 사용하고 있습니다. 나는 그것과 같은 결과를 가지고있다. emacsclient가 실행되면 window-system은 nil이지만 * make-frame-functions 후크 안에는 "ns"가됩니다. 후크가 완료된 후 얼마 지나지 않아 프레임에 대상 창 시스템이없는 것으로 보입니다. – hekevintran
@hekevintran Mac 사용자가 터미널 에뮬레이션에서 Emacs를 사용하는 것에 대해 많은 질문이있는 이유를 간단히 살펴볼 수 있습니까? 사용 시나리오는 정확히 무엇입니까? 나는이 질문들을 많이 볼 수 있기 때문에 정말로 호기심이 많습니다. –