2011-06-28 6 views
5

¿Cómo puedo escribir un script para ejecutar en Mac que invierte colores de pantalla?Cómo invertir textualmente colores de pantalla en Mac

Similar a How to programmatically invert screen colors in Linux, pero desafortunadamente xcalib funciona en Windows y Linux, pero no Mac, por lo que yo sé.

EDIT: Tengo una solución parcial. He encontrado una manera de volcar todos mis ajustes, antes y después de invertir colores de la pantalla:

$ mkdir before && mkdir after && cd before 
$ for d in $(defaults domains | sed 's/,//g'); do defaults read $d > $d; done 
$ cd ../after 
$ # System Preferences > Universal Access > Display > White on Black 
$ for d in $(defaults domains | sed 's/,//g'); do defaults read $d > $d; done 
$ diff -r before after 
diff -r before/com.apple.CoreGraphics after/com.apple.CoreGraphics 
3c3 
<  DisplayUseInvertedPolarity = 0; 
--- 
>  DisplayUseInvertedPolarity = 1; 
diff -r before/com.apple.universalaccess after/com.apple.universalaccess 
5c5 
<  whiteOnBlack = 0; 
--- 
>  whiteOnBlack = 1; 

Así que ahora sé qué ajustes son responsables de la inversión de la pantalla. Pero cuando intento lo obvio,

$ defaults write com.apple.universalaccess whiteOnBlack -int 1 
$ defaults write com.apple.CoreGraphics DisplayUseInvertedPolarity -int 1 

No pasa nada. Presumiblemente, cualquiera que sea el programa que use estos valores, se le debe indicar que los vuelva a cargar (ya que los ejemplos de, por ejemplo, dotfiles, necesitan matar el Finder para que tenga efecto). Pero no estoy seguro de qué aplicaciones serían, o si esta es la solución correcta de todos modos.

+0

¿Por qué quiere hacer esto? –

+0

Para recordarme a mí mismo mirar hacia arriba desde mi pantalla a intervalos regulares mientras estoy codificando. Sugerencias? –

+0

Supongo que el proceso de WindowServer necesita un empujón para notar el cambio de configuración, pero no sé cómo. Si realmente matas el WindowServer, creo que también matará todas las aplicaciones de GUI. – JWWalker

Respuesta

4

este fragmento de secuencia de comandos de Apple lo hará:

tell application "System Events" 
    key code 28 using {control down, option down, command down} 
end tell 

Este utiliza el atajo Control + Opción + Cmd-8 (código clave 28 es el número 8). Tendrá que averiguar cómo llamarlo desde lo que necesite ...

+0

Esto parece causar problemas técnicos si estoy escribiendo mientras invoco el script. ¿Hay alguna solución que no implique simular pulsaciones de teclas? –

+0

Lo siento, no sé ... No sé mucho acerca de la programación de la GUI de Mac. Presumiblemente, este atajo de teclado llama a alguna otra llamada subyacente, pero no sé. – spacemanaki

+1

Para que esto funcione, debe tener la casilla marcada en Preferencias del sistema> Acceso universal> Habilitar acceso para dispositivos de asistencia – roberthuttinger

1

Puede intentar perfeccionar este fragmento que devuelve el estado actual con secuencias de comandos GUI. El valor parece ser de solo lectura y se intenta establecerlo en 1 o 0.

tell application "System Preferences" 
    launch 
    set current pane to pane "com.apple.preference.universalaccess" 
    tell application "System Events" 
     return value of checkbox "Invert colors" of window 1 of process "System Preferences" 
    end tell 
    quit 
end 
1
tell application "System Preferences" 
    activate 
    reveal anchor "Seeing_Display" of pane id "com.apple.preference.universalaccess" 
    tell application "System Events" to tell process "System Preferences" 
    click the checkbox "Invert colors" of window "Accessibility" 
    end tell 
end tell 
tell application "System Preferences" to quit