0

I know I can assign an application to 'All Desktops', 'This Desktop', or 'None' by right clicking it in the Dock.

I'd like to be able to toggle the current application between 'All Desktops' and 'None' using a keyboard shortcut.

Is there a way to achieve this, preferably without GUI scripting?

1 Answer 1

1

Here's a solution that does use GUI scripting:

In Automator, create a Service. Use the 'Run AppleScript' action, with the AppleScript below. Then, in Services Preferences, you can assign a keyboard shortcut to the service.

on run
    -- get active application
    tell application "System Events" to set activeApp to name of first application process whose frontmost is true

    -- right click that application in the dock
    tell application "System Events" to tell UI element activeApp of list 1 of process "Dock"
        perform action "AXShowMenu"
        click menu item "Options" of menu 1

        -- is it currently checked?
        set isChecked to value of attribute "AXMenuItemMarkChar" of menu item "All Desktops" of menu 1 of menu item "Options" of menu 1 as string

        -- toggle between "None" and "All Desktops"
        if (isChecked = "✓") then
            perform action "AXShowMenu"
            click menu item "Options" of menu 1
            click menu item "None" of menu 1 of menu item "Options" of menu 1
        else
            perform action "AXShowMenu"
            click menu item "Options" of menu 1
            click menu item "All Desktops" of menu 1 of menu item "Options" of menu 1
        end if

    end tell
end run

Potential caveats:

  • It's slow
  • It briefly flashes the dock options menu
  • It will stop working if the UI changes
  • Sometimes (but very inconsistently, not all the time), I'm prompted to allow either the current application OR Automator to control the computer. I haven't done that and it still usually works.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .