¿Hay alguna forma en la que se pueda tener un sistema de escala de grises en todo el sistema, excepto algunas aplicaciones seleccionadas (por el 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 ordinaria, así que tenga cuidado.
Primero, debe tener instaladas las herramientas de desarrollo para poder compilar el código de Objective C. Luego compile dos comandos enable-grayscale
y disable-grayscale
desde la fuente (basado en esta respuesta de StackOverflow que proporciona algunas formas adicionales de hacerlo).
$ 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 compilarlos 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 instala Hammerspoon . Deberá otorgarle acceso de accesibilidad en Preferencias del Sistema. Dentro de Hammerspoon, selecciona "Abrir configuración" y modifica el código Lua para hacer lo que quieras. Mi configuración está a continuación, basada 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 la escala de grises para Firefox, pero dejarla desactivada para todas las demás aplicaciones). Cada vez que Firefox está enfocado, toda la pantalla se vuelve en escala de grises. Cuando otras aplicaciones están enfocadas, es el color. Parece que desearía lo contrario: la escala de grises activada en las Preferencias del sistema, y que se deshabilite cuando enfoca una aplicación de la lista que le interesa. Una vez que la haya configurado como desee, haga clic en "Recargar configuración" para activar los cambios.
appName
, luego puede verificar qué appName
está viendo en la consola de depuración de hammerspoon (como tal vez sea "iTerm 2" o algo así). Para ser honesto, dejé de usar esto hace un tiempo, así que no puedo ayudar más.No, esta opción solo está disponible como una opción global en las opciones de accesibilidad.
rkb