W AppleScript lub JavaScript, jak możesz kliknąć pozycję menu?

3

Muszę zmienić motyw używając skryptu dla Mojave, Alfreda i Sourcetree. Udało mi się to już zrobić z Mojave i Alfredem za pomocą tego skryptu:

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

}

Wydaje się, że w przypadku Sourcetree muszę kliknąć pozycje menu, ale jak mogę to zrobić?

sourcetree change theme

rahmat
źródło

Odpowiedzi:

1

Ponieważ OP jest oznaczony obydwoma AppleScript i JavaScript i są dwoma całkowicie odrębnymi językami i nie zostało wyraźnie i wyraźnie stwierdzone, że rozwiązanie musi być tylko w JavaScript , tu trochę kod to powinno działać. Mówię „powinien działać”, ponieważ działa na testowanych aplikacjach, ale nie mam Kwaśny zainstalowany, aby testować jawnie, a konkretnie z nim.

AppleScript kod :

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

Uwaga: The wartość z delay dowództwo może wymagać dostosowania do twojego systemu.


JavaScript kod :

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

Uwaga: The JavaScript kod pochodzi z jxaClickAppSubMenuItem.applescript przez bumaociyuan i był rozwidlony od RobTrew / jxaClickAppSubMenuItem.applescript .

user3439894
źródło