macOS in scala di grigi tranne alcune app

2

Esiste comunque un sistema con scala di grigi a livello di sistema, ad eccezione di alcune app selezionate (per utente), su macOS?

    
posta JM97 25.02.2018 - 17:34
fonte

2 risposte

1

Sì, questo è possibile, anche se la mia soluzione è un po 'hacky. Tieni presente che questo metodo utilizza alcune API Objective C non documentate e non passa attraverso normali impostazioni di accessibilità, quindi fai attenzione.

Per prima cosa è necessario disporre di strumenti di sviluppo installati in modo da poter compilare il codice Objective C. Quindi compila due comandi enable-grayscale e disable-grayscale dall'origine (basato su questa risposta StackOverflow che fornisce alcuni modi aggiuntivi di fare questo).

$  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;
}

Quindi compilarli in comandi:

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

Inserisci i file risultanti da qualche parte in cui desideri eseguirli, ad es. la tua directory home.

Ora installa Hammerspoon . Dovrai dargli accesso all'accessibilità in Preferenze di Sistema. All'interno di Hammerspoon, seleziona "Apri config" e modifica il codice Lua per fare ciò che vuoi. Di seguito la mia configurazione, basata su questo esempio dai loro documenti :

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()

Questa è la configurazione che ho scelto (attiva la scala di grigi per Firefox, ma lasciala fuori per tutte le altre applicazioni). Ogni volta che Firefox è focalizzato, l'intero schermo diventa in scala di grigi. Quando altre applicazioni sono focalizzate, è il colore. Sembra che tu voglia il contrario: la scala di grigi è attiva in Preferenze di Sistema, con la disattivazione quando si concentra un'applicazione dalla lista che ti interessa. Una volta configurato come vuoi, fai clic su "Ricarica configurazione" per attivare le modifiche.

    
risposta data 13.11.2018 - 22:26
fonte
0

Questa opzione non è disponibile solo come opzione globale nelle opzioni di accessibilità.

    
risposta data 25.02.2018 - 17:49
fonte

Leggi altre domande sui tag