-- For the latest version: -- https://github.com/vitorgalvao/custom-alfred-iterm-scripts -- Set this property to true to always open in a new window property open_in_new_window : false -- Set this property to false to reuse current tab property open_in_new_tab : true -- Set this property to true if iTerm is configured to launch without opening a new window property iterm_opens_quietly : false -- Handlers on new_window() tell application "iTerm" to create window with default profile end new_window on new_tab() tell application "iTerm" to tell the first window to create tab with default profile end new_tab on call_forward() tell application "iTerm" to activate end call_forward on is_running() application "iTerm" is running end is_running on is_processing() tell application "iTerm" to tell the first window to tell current session to return is processing end is_processing on has_windows() if not is_running() then return false try tell application "iTerm" to return current session of current tab of first window is not missing value on error return false end try return true end has_windows on send_text(custom_text) tell application "iTerm" to tell the first window to tell current session to write text custom_text end send_text -- Main on alfred_script(query) if has_windows() then if open_in_new_window then new_window() else if open_in_new_tab then new_tab() else -- Reuse current tab end if else -- If iTerm is not running and we tell it to create a new window, we get two: -- one from opening the application, and the other from the command if is_running() or iterm_opens_quietly then new_window() else call_forward() end if end if -- macOS buffers TTY input to 1024 bytes, so if input is larger wait for session to be ready -- "with timeout" does not work with "repeat", so use a delay (0.01 * 500 means a timeout of 5 seconds) if length of query > 1024 repeat 500 times if not is_processing() then exit repeat delay 0.01 end repeat end if -- Make sure a window exists before we continue, or the write may fail -- "with timeout" does not work with "repeat", so use a delay (0.01 * 500 means a timeout of 5 seconds) repeat 500 times if has_windows() then send_text(query) call_forward() exit repeat end if delay 0.01 end repeat end alfred_script