¿Existe alguna forma de que se pueda tener un sistema en escala de grises en todo el sistema, excepto algunas aplicaciones seleccionadas (por usuario), en macOS?
¿Existe alguna forma de que se pueda tener un sistema en escala de grises en todo el sistema, excepto algunas aplicaciones seleccionadas (por usuario), en macOS?
Sí, esto es posible, aunque mi solución es un poco complicada. Tenga en cuenta que este método utiliza algunas API de Objective C no documentadas y no pasa por la configuración de accesibilidad normal, así que tenga cuidado.
Primero necesita tener instaladas herramientas de desarrollador para poder compilar el código de Objective C. Luego compile dos comandos enable-grayscale
y disable-grayscale
de la fuente (basado en esta respuesta de StackOverflow que proporciona otras formas adicionales de hacer esto).
$ cat enable-grayscale.c
// https://stackoverflow.com/questions/14163788/how-does-on-screen-color-inversion-work-in-os-x
#include <stdio.h>
#include <ApplicationServices/ApplicationServices.h>
CG_EXTERN bool CGDisplayUsesForceToGray(void);
CG_EXTERN void CGDisplayForceToGray(bool forceToGray);
int
main(int argc, char** argv)
{
bool isGrayscale = CGDisplayUsesForceToGray();
if (!isGrayscale) {
CGDisplayForceToGray(TRUE);
}
return 0;
}
$ cat disable-grayscale.c
// https://stackoverflow.com/questions/14163788/how-does-on-screen-color-inversion-work-in-os-x
#include <stdio.h>
#include <ApplicationServices/ApplicationServices.h>
CG_EXTERN bool CGDisplayUsesForceToGray(void);
CG_EXTERN void CGDisplayForceToGray(bool forceToGray);
int
main(int argc, char** argv)
{
bool isGrayscale = CGDisplayUsesForceToGray();
if (isGrayscale) {
CGDisplayForceToGray(0);
}
return 0;
}
Luego compílalos en comandos:
clang -g -O2 -std=c11 -Wall -framework ApplicationServices enable-grayscale.c -o enable-grayscale
clang -g -O2 -std=c11 -Wall -framework ApplicationServices disable-grayscale.c -o disable-grayscale
Coloque los archivos resultantes en algún lugar donde desee ejecutarlos, por ejemplo. su directorio de inicio.
Ahora instale Hammerspoon . Tendrá que darle acceso de accesibilidad en las Preferencias del sistema. Dentro de Hammerspoon, seleccione "Abrir configuración" y modifique el código Lua para hacer lo que quiera. A continuación, mi configuración se basa en este ejemplo de sus documentos :
function applicationWatcher(appName, eventType, appObject)
if (eventType == hs.application.watcher.activated) then
if (appName == "Firefox") then
os.execute('/path/to/scripts/enable-grayscale')
end
end
if (eventType == hs.application.watcher.deactivated) then
if (appName == "Firefox") then
os.execute('/path/to/scripts/disable-grayscale')
end
end
end
appWatcher = hs.application.watcher.new(applicationWatcher)
appWatcher:start()
Esa es la configuración que elegí (activar en escala de grises para Firefox, pero dejarlo para todas las demás aplicaciones). Cuando se enfoca Firefox, toda la pantalla se vuelve en escala de grises. Cuando otras aplicaciones están enfocadas, es color. Suena como si quisieras lo contrario: la escala de grises está activada en las Preferencias del sistema, y se deshabilita cuando enfocas una aplicación de la lista que te interesa. Una vez que la hayas configurado como quieras, haz clic en "Volver a cargar la configuración". para activar los cambios.
No, esta opción solo está disponible como una opción global en las opciones de accesibilidad.
Lea otras preguntas en las etiquetas macos color accessibility