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.
De acuerdo, me quemé varias veces con bloques de ramas extraños en Elisp (si- y otra parte separada por una nueva línea, prognnecesaria para los bloques), por lo que una recomendación para todos los que no estén familiarizados con las peculiaridades: revise esta respuesta .
metakermit
1
@ kermit666 en realidad prognno es necesario si no tiene otro caso. Lo que quiero decir con eso es que puede usar en whenlugar de if, que es equivalente a(if ... (progn ...) '())
Café eléctrico
1
Voto a favor porque estaba tratando de usar "=" y no estaba funcionando.
Quise decir case, no cond. casefunciona ya que system-typees un símbolo como 'gnu/linuxo darwin, no una cadena
ealfonso
22
Creé una macro simple para ejecutar fácilmente el código según el 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!"))
En un .emacs, no solo existe el system-type, sino también la window-systemvariable. Esto es útil cuando desea elegir entre alguna opción de solo x, o una configuración de terminal o macos.
Ahora también existe el Subsistema Linux para Windows (bash en Windows 10) donde system-typeestá gnu/linux. Para detectar este tipo de sistema, utilice:
(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"))
También hay (en las versiones 24-26 al menos) system-configuration, si desea ajustar las diferencias en el sistema de compilación. Sin embargo, la documentación de esta variable no describe los posibles valores que puede contener como lo hace la documentación de la system-typevariable.
Respuestas:
La
system-type
variable:fuente
Para las personas más nuevas en elisp, un uso de muestra:
fuente
progn
necesaria para los bloques), por lo que una recomendación para todos los que no estén familiarizados con las peculiaridades: revise esta respuesta .progn
no es necesario si no tiene otro caso. Lo que quiero decir con eso es que puede usar enwhen
lugar deif
, que es equivalente a(if ... (progn ...) '())
cond
así:(case system-type ((gnu/linux) "notify-send") ((darwin) "growlnotify -a Emacs.app -m"))
case
, nocond
.case
funciona ya quesystem-type
es un símbolo como'gnu/linux
odarwin
, no una cadenaCreé una macro simple para ejecutar fácilmente el código según el tipo de sistema:
fuente
En un .emacs, no solo existe el
system-type
, sino también lawindow-system
variable. Esto es útil cuando desea elegir entre alguna opción de solo x, o una configuración de terminal o macos.fuente
Ahora también existe el Subsistema Linux para Windows (bash en Windows 10) donde
system-type
estágnu/linux
. Para detectar este tipo de sistema, utilice:fuente
Esto ya está respondido en su mayoría, pero para aquellos interesados, acabo de probarlo en FreeBSD y allí el valor informado fue "berkeley-unix".
fuente
También hay (en las versiones 24-26 al menos)
system-configuration
, si desea ajustar las diferencias en el sistema de compilación. Sin embargo, la documentación de esta variable no describe los posibles valores que puede contener como lo hace la documentación de lasystem-type
variable.fuente