In AppleScript o JavaScript come è possibile fare clic sulla voce di menu?

3

Ho bisogno di cambiare un tema usando uno script per Mojave, Alfred e Sourcetree. L'ho già fatto con Mojave e Alfred usando questo script:

var alfredLightTheme = "Alfred"
var alfredDarkTheme = "Alfred Dark"

function run(args) {
    args = args ? args : []
    var systemEvents = Application("System Events")
    var alfred = Application("Alfred 3")

    if (args && args == 'dark') {
        systemEvents.appearancePreferences.darkMode = true
        alfred.setTheme(alfredDarkTheme)
    } else if (args && args == 'light') {
        systemEvents.appearancePreferences.darkMode = false
        alfred.setTheme(alfredLightTheme)
    } else {
        systemEvents.appearancePreferences.darkMode = !systemEvents.appearancePreferences.darkMode()
        alfred.setTheme(systemEvents.appearancePreferences.darkMode() ? alfredDarkTheme : alfredLightTheme)
    }

}

Per Sourcetree sembra che ho bisogno di fare clic sulle voci del menu, ma come posso farlo?

    
posta rahmat 29.09.2018 - 05:38
fonte

1 risposta

1

Poiché l'OP è contrassegnato sia con AppleScript sia con JavaScript e sono due lingue completamente separate e non è stato specificato esplicitamente e specificatamente che la soluzione doveva essere solo in JavaScript , ecco alcuni codici che dovrebbero funzionare. Dico "dovrebbe funzionare", perché funziona sulle applicazioni testate, ma non ho Sourcetree installato per testarlo esplicitamente e specificatamente.

AppleScript codice :

tell application "Sourcetree" to activate
delay 1
tell application "System Events"
    click menu item ¬
        "Dark" of menu 1 of menu item ¬
        "Theme" of menu 1 of menu bar item ¬
        "View" of menu bar 1 of application process "Sourcetree"
end tell

Nota: potrebbe essere necessario modificare il valore del comando delay per il tuo sistema.

JavaScript codice :

menuItemClick("Sourcetree", ['View', 'Theme', 'Dark'])

function menuItemClick(strAppName, lstMenuPath) {
    var oApp = Application(strAppName),
        lngChain = lstMenuPath.length,
        blnResult = false;

    if (lngChain > 1) {

        var appSE = Application("System Events"),
            lstApps = appSE.processes.where({
                name: strAppName
            }),
            procApp = lstApps.length ? lstApps[0] : null;

        if (procApp) {
            oApp.activate();
            var strMenu = lstMenuPath[0],
                fnMenu = procApp.menuBars[0].menus.byName(strMenu),
                lngLast = lngChain - 1;

            for (var i = 1; i < lngLast; i++) {
                strMenu = lstMenuPath[i];
                fnMenu = fnMenu.menuItems[strMenu].menus[strMenu];
            }


            fnMenu.menuItems[
                lstMenuPath[lngLast]
            ].click();
            blnResult = true;
        }
    }
    return blnResult;
}

Nota: il codice JavaScript viene da jxaClickAppSubMenuItem.applescript di bumaociyuan ed era biforcuta da RobTrew / jxaClickAppSubMenuItem.applescript .

    
risposta data 29.09.2018 - 14:05
fonte

Leggi altre domande sui tag