macOS en escala de grises, excepto algunas aplicaciones

2

¿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?

    
pregunta JM97 25.02.2018 - 17:34

2 respuestas

1

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.

    
respondido por el RecursivelyIronic 13.11.2018 - 22:26
0

No, esta opción solo está disponible como una opción global en las opciones de accesibilidad.

    
respondido por el unknowndomain 25.02.2018 - 17:49

Lea otras preguntas en las etiquetas