使用applescript在OSX中创建新的空间/桌面?

时间:2014-01-13 09:32:56

标签: macos applescript keyboard-shortcuts hotkeys spaces

由于OSX似乎缺少创建新空间/桌面的键盘快捷键,我想知道是否可以创建一个AppleScript并将其绑定到键盘快捷键。

谷歌上看了很多,找不到任何东西。令人惊讶的是之前没有人问过这个问题......似乎很多人会发现它非常有用。

1 个答案:

答案 0 :(得分:1)

以下是我在网上找到的AppleScript Spaces例程列表::

--my get_spaces_enabled()
--my set_spaces_enabled(enable_spaces)
--my toggle_spaces_enabled()
--my get_spaces_rows()
--my set_spaces_rows(row_count)
--my get_spaces_columns()
--my set_spaces_columns(column_count)
--my get_spaces_count()
--my show_all_spaces()
--my get_spaces_application_bindings()
--my set_spaces_application_bindings(new_bindings)
--my collect_application_in_current_space(application_bundle_id)
--my set_spaces_application_binding_for_application(application_bundle_id, chosen_space)
--my get_space_binding_for_application(application_bundle_id)
--my choose_space_for_current_application()
--my choose_space_for_application(application_bundle_id)
--my remove_spaces_application_binding(application_bundle_id)
--my get_spaces_arrow_key_modifiers()
--my get_spaces_numbers_key_modifiers()
--my switch_to_space(space_number)
--my open_spaces_preferences()
--my display_spaces_not_enabled_error()

on get_spaces_enabled()
   tell application "System Events" to tell spaces preferences of expose preferences to return (get spaces enabled)
end get_spaces_enabled

on set_spaces_enabled(enable_spaces)
   tell application "System Events" to tell spaces preferences of expose preferences to set spaces enabled to enable_spaces
end set_spaces_enabled

on toggle_spaces_enabled()
   my set_spaces_enabled(not (my get_spaces_enabled()))
end toggle_spaces_enabled

on get_spaces_rows()
   tell application "System Events" to tell spaces preferences of expose preferences to return (get spaces rows)
end get_spaces_rows

on set_spaces_rows(row_count)
   tell application "System Events" to tell spaces preferences of expose preferences to set spaces rows to row_count
end set_spaces_rows

on get_spaces_columns()
   tell application "System Events" to tell spaces preferences of expose preferences to return (get spaces columns)
end get_spaces_columns

on set_spaces_columns(column_count)
   tell application "System Events" to tell spaces preferences of expose preferences to set spaces columns to column_count
end set_spaces_columns

on get_spaces_count()
   return ((my get_spaces_rows()) * (my get_spaces_columns()))
end get_spaces_count

on show_all_spaces()
   try
       tell application "Finder" to set spaces_app_path to (application file id "com.apple.spaceslauncher") as string
       do shell script "open " & quoted form of POSIX path of spaces_app_path
   end try
end show_all_spaces

on get_spaces_application_bindings()
   tell application "System Events" to tell spaces preferences of expose preferences to return (get application bindings)
end get_spaces_application_bindings

on set_spaces_application_bindings(new_bindings)
   tell application "System Events" to tell spaces preferences of expose preferences to set application bindings to new_bindings
end set_spaces_application_bindings

on collect_application_in_current_space(application_bundle_id)
   set application_bundle_id to my make_lowercase(application_bundle_id)
   set app_bindings to my get_spaces_application_bindings()
   my set_spaces_application_bindings((run script "{|" & application_bundle_id & "|:65544}") & app_bindings)
   my set_spaces_application_bindings(app_bindings)
end collect_application_in_current_space

on set_spaces_application_binding_for_application(application_bundle_id, chosen_space)
   set application_bundle_id to my make_lowercase(application_bundle_id)
   if chosen_space is in {0, "None"} then
       my remove_spaces_application_binding(application_bundle_id)
   else
       if chosen_space = "All" then set chosen_space to 65544
       my set_spaces_application_bindings((run script "{|" & application_bundle_id & "|: " & chosen_space & "}") & (my get_spaces_application_bindings()))
   end if
end set_spaces_application_binding_for_application

on get_space_binding_for_application(application_bundle_id)
   set application_bundle_id to my make_lowercase(application_bundle_id)
   set app_bindings to my get_spaces_application_bindings()
   try
       get app_bindings as string
   on error error_string
       set app_bindings to my string_to_list(text 13 thru -20 of error_string, ", ")
   end try
   repeat with i from 1 to (count app_bindings)
       if item i of app_bindings starts with ("|" & application_bundle_id & "|:") then return (item 2 of (my string_to_list(item i of app_bindings, ":"))) as number
   end repeat
   return 0
end get_space_binding_for_application

on choose_space_for_current_application()
   return my choose_space_for_application(bundle identifier of (info for (path to frontmost application)))
end choose_space_for_current_application

on choose_space_for_application(application_bundle_id)
   set application_bundle_id to my make_lowercase(application_bundle_id)
   if (not my get_spaces_enabled()) then if (not my display_spaces_not_enabled_error()) then return false
   try
       tell application "Finder" to set app_path to (application file id application_bundle_id) as string
       set app_name to short name of (info for (app_path as alias))
       set the_choices to {"None", "All"}
       repeat with i from 1 to (my get_spaces_count())
           set end of the_choices to i
       end repeat
       set default_space to my get_space_binding_for_application(application_bundle_id)
       if default_space = 0 then
           set default_space to "None"
       else if default_space = 65544 then
           set default_space to "All"
       end if
       set chosen_space to (choose from list the_choices default items {default_space} with title "Spaces Assigner" with prompt "Assign " & app_name & " to Space:" OK button name "Assign" without multiple selections allowed and empty selection allowed)
       if chosen_space = false then return false
       my set_spaces_application_binding_for_application(application_bundle_id, item 1 of chosen_space)
       return true
   on error e number n
       log "choose_space_for_application (" & application_bundle_id & ") Error (" & n & "): " & e
       return false
   end try
end choose_space_for_application

on remove_spaces_application_binding(application_bundle_id)
   set application_bundle_id to my make_lowercase(application_bundle_id)
   set app_bindings to my get_spaces_application_bindings()
   try
       get app_bindings as string
   on error error_string
       set app_bindings to my string_to_list(text 13 thru -20 of error_string, ", ")
   end try
   set new_bindings to {}
   repeat with i in app_bindings
       set i to contents of i
       if i does not start with "|" & application_bundle_id & "|:" then set end of new_bindings to i
   end repeat
   my set_spaces_application_bindings(run script "{" & (my list_to_string(new_bindings, ", ")) & "}")
end remove_spaces_application_binding

on get_spaces_arrow_key_modifiers()
   tell application "System Events" to tell spaces preferences of expose preferences to return (get key modifiers of (get properties of arrow key modifiers))
end get_spaces_arrow_key_modifiers

on get_spaces_numbers_key_modifiers()
   tell application "System Events" to tell spaces preferences of expose preferences to return (get key modifiers of (get properties of numbers key modifiers))
end get_spaces_numbers_key_modifiers

on switch_to_space(space_number)
   if not my gui_scripting_check() then return
   set key_modifiers to my get_spaces_numbers_key_modifiers()
   tell application "System Events"
       set key_modifier_list to {}
       if key_modifiers contains command then set end of key_modifier_list to "command down"
       if key_modifiers contains control then set end of key_modifier_list to "control down"
       if key_modifiers contains option then set end of key_modifier_list to "option down"
       if key_modifiers contains shift then set end of key_modifier_list to "shift down"
       set key_modifier_list to my list_to_string(key_modifier_list, ", ")
       if key_modifier_list ≠ "" then set key_modifier_list to " using {" & key_modifier_list & "}"
   end tell
   run script ("tell application \"System Events\" to keystroke \"" & space_number & "\"" & key_modifier_list)
end switch_to_space

on open_spaces_preferences()
   tell application "System Preferences"
       activate
       tell pane id "com.apple.preference.expose" to reveal anchor "Spaces"
   end tell
end open_spaces_preferences

on display_spaces_not_enabled_error()
   beep
   activate
   if ((button returned of (display dialog "Spaces is not enabled. Would You like to enable it now?" with title "Spaces Error" buttons {"Keep Disabled", "Enable"} default button 2 with icon 0)) = "Keep Disabled") then return false
   my set_spaces_enabled(true)
   return true
end display_spaces_not_enabled_error

on list_to_string(l, d)
   tell (a reference to my text item delimiters)
       set {o, contents} to {contents, d}
       set {l, contents} to {"" & l, o}
   end tell
   return l as Unicode text
end list_to_string

on string_to_list(s, d)
   tell (a reference to my text item delimiters)
       set {o, contents} to {contents, d}
       set {s, contents} to {s's text items, o}
   end tell
   return s
end string_to_list

on gui_scripting_check()
   tell application "System Events" to set gui_scripting_enabled to UI elements enabled
   if not gui_scripting_enabled then
       tell application "System Preferences"
           activate
           set current pane to pane "com.apple.preference.universalaccess"
           display dialog "This application utilizes the built-in Graphic User Interface Scripting architecture of Mac OS X which is currently disabled." & return & return & "You can activate GUI Scripting by selecting the checkbox \"Enable access for assistive devices\" in the Universal Access preference pane." with icon 2 buttons {"OK"} default button 1
       end tell
   end if
   return gui_scripting_enabled
end gui_scripting_check

on make_lowercase(the_string)
   return do shell script "echo " & quoted form of the_string & " | /usr/bin/perl -pe 'use encoding utf8; s/(\\w)/\\L$1/gi'"
end make_lowercase

您可以使用它们来制作代码:)

链接到例程网站:: MacScripter - Applescript Spaces Routine

相关问题