Esiste comunque un sistema con scala di grigi a livello di sistema, ad eccezione di alcune app selezionate (per utente), su macOS?
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.
Questa opzione non è disponibile solo come opzione globale nelle opzioni di accessibilità.
Leggi altre domande sui tag accessibility color macos