내 .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입니다.
문서 : 선택한 프레임이 표시되는 창 시스템의 이름입니다. 값은 기호입니다 (예 : X 윈도우의 경우 ‘x’). 선택한 프레임이 텍스트 전용 터미널에있는 경우 값은 nil입니다.
기본적으로 다음을 수행하십시오.
(if window-system
(progn
(something)
(something-else)))
답변
Gui 모드이면 다음이 참입니다.
(윈도우 시스템 인 경우)
답변
터미널과 그래픽 모드, 그리고 Linux와 MacOS에서 Emacs를 모든 곳에서 사용하고 있기 때문에 창 이름 기능을 래핑하는 추가 함수를 정의했습니다.
(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)))
직렬 터미널이 사용되는 Windows 또는 이전 시스템과 같은 다른 시스템을 포함하도록 확장 할 수 있습니다. 그러나 나는 그렇게 할 시간이 없다 😉