2014-01-13 35 views
1

因为OSX似乎缺少创建新空间/桌面的键盘快捷键,所以我想知道是否可以创建一个applescript并将其绑定到键盘快捷键。使用applescript在OSX中创建新的空间/桌面?

在google上看了一眼,找不到任何东西。惊讶之前没有人问过这个问题......看起来好像很多人会觉得这很有用。

回答

1

下面是我在网上找到::

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

+0

这AppleScript的空间例程列表会很棒,但不幸的是,在最新版本的OSX中“空格”不再存在,所以这些子例程不起作用。 – Brett

相关问题