elisp에서 운영 체제를 확인하는 방법은 무엇입니까?


답변:


99

system-type변수 :

system-type is a variable defined in `C source code'.
Its value is darwin

Documentation:
Value is symbol indicating type of operating system you are using.
Special values:
  `gnu'         compiled for a GNU Hurd system.
  `gnu/linux'   compiled for a GNU/Linux system.
  `darwin'      compiled for Darwin (GNU-Darwin, Mac OS X, ...).
  `ms-dos'      compiled as an MS-DOS application.
  `windows-nt'  compiled as a native W32 application.
  `cygwin'      compiled using the Cygwin library.
Anything else indicates some sort of Unix system.

83

elisp를 처음 사용하는 사람들을 위해 샘플 사용법 :

(if (eq system-type 'darwin)
  ; something for OS X if true
  ; optional something if not
)

좋아, 나는 Elisp에서 이상한 가지 블록으로 여러 번 나 자신을 태웠다 (블록에 progn필요한 개행 문자로 구분되는 경우 및 기타 부분 ) . 단점에 익숙하지 않은 모든 사람에게 권장 사항- 이 답변 을 확인하십시오 .
metakermit 2013 년

1
progn다른 경우가 없다면 @ kermit666은 실제로 필요하지 않습니다. 내가 의미하는 바는 when대신에 그냥 사용할 수 있다는 것입니다 if. 이것은 다음과 같습니다.(if ... (progn ...) '())
Electric Coffee

1
"="를 사용하려고하는데 작동하지 않았기 때문에 찬성했습니다.
필립 다니엘스

3
@metakermit 당신은 사용할 수 있습니다 cond과 같이 :(case system-type ((gnu/linux) "notify-send") ((darwin) "growlnotify -a Emacs.app -m"))
ealfonso

내 말은 case아니야 cond. case이후 작동 system-type과 같은 상징 'gnu/linux하거나 darwin,하지 문자열
ealfonso

22

시스템 유형에 따라 코드를 쉽게 실행할 수있는 간단한 매크로를 만들었습니다.

(defmacro with-system (type &rest body)
  "Evaluate BODY if `system-type' equals TYPE."
  (declare (indent defun))
  `(when (eq system-type ',type)
     ,@body))

(with-system gnu/linux
  (message "Free as in Beer")
  (message "Free as in Freedom!"))

11

.emacs에는 system-type뿐만 아니라 window-system변수도 있습니다. x 전용 옵션, 터미널 또는 macOS 설정 중에서 선택하려는 경우 유용합니다.


5

이제 Windows 용 Linux 하위 시스템 (Windows 10의 bash) system-typegnu/linux있습니다. 이 시스템 유형을 감지하려면 다음을 사용하십시오.

(if
    (string-match "Microsoft"
         (with-temp-buffer (shell-command "uname -r" t)
                           (goto-char (point-max))
                           (delete-char -1)
                           (buffer-string)))
    (message "Running under Linux subsystem for Windows")
    (message "Not running under Linux subsystem for Windows")
  )

2

이것은 대부분 이미 답변되어 있지만 관심있는 사람들을 위해 FreeBSD에서 이것을 테스트했고보고 된 값은 "berkeley-unix"였습니다.


0

system-configuration빌드 시스템의 차이를 조정하려는 경우 ( 최소한 24-26 버전에서는)도 있습니다. 그러나이 변수의 문서는 system-type변수 문서처럼 포함 할 수있는 가능한 값을 설명 하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.