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.
OK, eu me queimei várias vezes com blocos de ramificação estranhos no Elisp (if-and else-part separados por uma nova linha, prognnecessário para os blocos), então uma recomendação para todos não familiarizados com as peculiaridades - verifique esta resposta .
metakermit
1
@ kermit666 na verdade prognnão é necessário se você não tiver outro caso. O que quero dizer com isso é que você pode simplesmente usar em whenvez de if, o que é equivalente a(if ... (progn ...) '())
Café elétrico
1
Votei positivamente porque estava tentando usar "=" e não estava funcionando.
Philip Daniels
3
@metakermit você pode usar condassim:(case system-type ((gnu/linux) "notify-send") ((darwin) "growlnotify -a Emacs.app -m"))
ealfonso
Eu quis dizer case, não cond. casefunciona porque system-typeé um símbolo como 'gnu/linuxou darwin, não uma string
ealfonso
22
Criei uma macro simples para executar código facilmente, dependendo do tipo de sistema:
(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!"))
Em um .emacs, não existe apenas o system-type, mas também a window-systemvariável. Isso é útil quando você deseja escolher entre alguma opção somente x, ou um terminal ou configuração de macos.
Agora também existe o subsistema Linux para Windows (bash no Windows 10) onde system-typeestá gnu/linux. Para detectar este tipo de sistema, use:
(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"))
Há também (nas versões 24-26 pelo menos) system-configuration, se você quiser ajustar as diferenças no sistema de compilação. No entanto, a documentação desta variável não descreve os valores possíveis que ela pode conter como a documentação da system-typevariável.
Respostas:
A
system-type
variável:fonte
Para as pessoas mais novas no elisp, um exemplo de uso:
fonte
progn
necessário para os blocos), então uma recomendação para todos não familiarizados com as peculiaridades - verifique esta resposta .progn
não é necessário se você não tiver outro caso. O que quero dizer com isso é que você pode simplesmente usar emwhen
vez deif
, o que é equivalente a(if ... (progn ...) '())
cond
assim:(case system-type ((gnu/linux) "notify-send") ((darwin) "growlnotify -a Emacs.app -m"))
case
, nãocond
.case
funciona porquesystem-type
é um símbolo como'gnu/linux
oudarwin
, não uma stringCriei uma macro simples para executar código facilmente, dependendo do tipo de sistema:
fonte
Em um .emacs, não existe apenas o
system-type
, mas também awindow-system
variável. Isso é útil quando você deseja escolher entre alguma opção somente x, ou um terminal ou configuração de macos.fonte
Agora também existe o subsistema Linux para Windows (bash no Windows 10) onde
system-type
estágnu/linux
. Para detectar este tipo de sistema, use:fonte
Isso já foi respondido em grande parte, mas para os interessados, eu apenas testei no FreeBSD e lá o valor relatado foi "berkeley-unix".
fonte
Há também (nas versões 24-26 pelo menos)
system-configuration
, se você quiser ajustar as diferenças no sistema de compilação. No entanto, a documentação desta variável não descreve os valores possíveis que ela pode conter como a documentação dasystem-type
variável.fonte