emacs가 터미널 모드인지 어떻게 감지합니까?
내 .emacs
파일에는 그래픽 모드에서만 의미가있는 명령이 있습니다 (예 :) (set-frame-size (selected-frame) 166 100)
. 터미널 모드가 아닌 그래픽 모드에서만 실행하는 방법 (예 :) emacs -nw
.
감사!
이 window-system
변수는 Lisp 프로그램에 Emacs가 실행중인 윈도우 시스템을 알려줍니다. 가능한 값은 다음과 같습니다.
- 엑스
- Emacs는 X를 사용하여 프레임을 표시합니다.
- w32
- Emacs는 기본 MS-Windows GUI를 사용하여 프레임을 표시합니다.
- ns
- Emacs는 Nextstep 인터페이스 (GNUstep 및 Mac OS X에서 사용)를 사용하여 프레임을 표시합니다.
- pc
- Emacs는 MS-DOS 직접 화면 쓰기를 사용하여 프레임을 표시합니다.
- 무
- Emacs는 문자 기반 터미널에 프레임을 표시하고 있습니다.
에서 다큐먼트 .
편집 : 윈도우 시스템이 더 이상 사용되지 않는 것 같습니다 display-graphic-p
(출처 : emacs 23.3.1의 Ch f 윈도우 시스템 RET).
(display-graphic-p &optional DISPLAY)
Return non-nil if DISPLAY is a graphic display.
Graphical displays are those which are capable of displaying several
frames and several different fonts at once. This is true for displays
that use a window system such as X, and false for text-only terminals.
DISPLAY can be a display name, a frame, or nil (meaning the selected
frame's display).
그래서 당신이 원하는 것은 :
(if (display-graphic-p)
(progn
;; if graphic
(your)
(code))
;; else (optional)
(your)
(code))
else 절이없는 경우 다음을 수행 할 수 있습니다.
;; more readable :)
(when (display-graphic-p)
(your)
(code))
언급 window-system
하고 display-graphic-p
잘못된 대답 은 아니지만 전체 그림을 말하지는 않습니다.
실제로 단일 Emacs 인스턴스는 여러 프레임을 가질 수 있으며, 그중 일부는 터미널에 있고 다른 일부는 윈도우 시스템에있을 수 있습니다. 즉 window-system
, 단일 Emacs 인스턴스 내에서도 다른 값을 얻을 수 있습니다 .
예를 들어, 윈도우 시스템 Emacs를 시작한 다음 emacsclient -t
터미널을 통해 연결할 수 있습니다 . 결과 터미널 프레임에 nil
for 값이 표시 됩니다 window-system
. 마찬가지로 데몬 모드에서 emacs를 시작한 다음 나중에 그래픽 프레임을 만들도록 지시 할 수 있습니다.
따라서 .emacs에 의존하는 코드를 .emacs에 넣지 마십시오 window-system
. 대신 set-frame-size
프레임이 생성 된 후 실행되는 후크 함수에 예제 와 같은 코드를 넣으십시오 .
(add-hook 'after-make-frame-functions
(lambda ()
(if window-system
(set-frame-size (selected-frame) 166 100)))))
있습니다 'after-make-frame-functions
그것은 또한 위처럼 프레임 관련 후크 기능을 추가해야하는 경우가 많습니다 그래서 후크, 초기 프레임에 대해 실행되지 않습니다 'after-init-hook
.
윈도우 시스템은`C 소스 코드 '에 정의 된 변수입니다. 값은 x입니다.
Documentation: Name of window system through which the selected frame is displayed. The value is a symbol--for instance, `x' for X windows. The value is nil if the selected frame is on a text-only-terminal.
Basically do a:
(if window-system
(progn
(something)
(something-else)))
If its in Gui mode, then the following would be true.
(if window-system )
I have defined an extra function to wrap the window-name functionality because I'm using Emacs everywhere, i.e. from the terminal and in graphics mode and in Linux and MacOS:
(defun window-system-name()
(cond ((eq system-type 'gnu/linux) (if (display-graphic-p) "x" "nox"))
((eq system-type 'darwin) (if (display-graphic-p) "mac" "nox"))
(t (error "Unsupported window-system") nil)))
It can be extended to cover other systems like Windows or older systems where a serial terminal is used. But I Have no time to do so ;-)
참고URL : https://stackoverflow.com/questions/5795451/how-to-detect-that-emacs-is-in-terminal-mode
'programing' 카테고리의 다른 글
composer.json에서 require와 require-dev 섹션의 차이점은 무엇입니까? (0) | 2020.10.14 |
---|---|
Git 기능 브랜치를 삭제할 적절한시기는 언제입니까? (0) | 2020.10.14 |
특정 지역의 고객에게 서비스를 제공하는 데 가장 적합한 AWS 위치를 어떻게 결정할 수 있습니까? (0) | 2020.10.14 |
'id에 할당 (0) | 2020.10.14 |
C # 속성은 실제로 메서드입니까? (0) | 2020.10.14 |