Question

I want to send commands from TextWrangler to the terminal. Even if I found this, I don't understand how that works since I'm brand new to Unix and running Applescripts.

tell application "TextWrangler"
    set the_selection to (selection of front window as string)
    if (the_selection) is "" then
        set the_selection to line (get startLine of selection) of front window as string
    end if
end tell

tell application "Terminal"
    do script with command the_selection in window 1
end tell

I saved an Applescript that looks like this: enter image description here

Now, what I think is to put the script in the TextWrangler Scripts Folder: enter image description here

  1. But then, how do I send commands to the Terminal.app?
  2. How can I press cmd + enter to send a line from TextWrangler to the Terminal?
Was it helpful?

Solution

You must put the script in the "/Users/yourName/Library/Application Support/TextWrangler/Scripts" folder

After that:

  • Open the preferences of the TextWrangler
  • Select "Menus & ShortCuts" --> "Scripts" --> "your script" to add your shortcut to the script
  • TextWrangler accept the (cmd + enter) keys as shortcut enter image description here

OTHER TIPS

In order to use an AppleScript script in TextWrangler's Script menu, it (or a link to it) must be in TextWrangler's Script folder located at, ~/Library/Application Support/TextWrangler/Scripts in order for it to appear on the menu. Note: The "~" in that path is your Home Folder and the Library folder may not be visible. You can open it from TextWrangler's Script menu, Open Scripts Folder command and place the script or link to the script from wherever you saved it.

For the purpose of answering this question I created an AppleScript named Run Selected Line(s) in Terminal.scpt and placed it in TextWrangler's Script folder and is now available on the Script menu in TextWrangle as show in the image below.

TW_Script_Menu.png

That said, the script you have, as written may fail as Terminal can be a bit finicky. In other words, if Terminal is closed when executing the script, then the code as written can produce an error, e.g.: "A scripting error has occurred: Terminal got an error: Can’t get window 1."

Even telling Terminal to activate didn't open a window like it does when opening Terminal from the Dock Tile I have set to "Keep in Dock" and I'd get the aforementioned error. So a Google query yielded much useful information. So I experimented with a few different solutions I saw and the code I'm using is shown below.


tell application "TextWrangler"
    activate
    set the_selection to (selection of front window as string)
    if (the_selection) is "" then
        set the_selection to line (get startLine of selection) of front window as string
    end if
end tell

tell application "Terminal"
    if not (exists window 1) then reopen
    activate
    -- delay 0.5
    do script with command the_selection in front window
end tell

Note that I've commented out the delay command with -- and may or may not be needed depending on if Terminal is initially closed and or how slow your system responds. The value is in seconds expressed decimally. You can uncomment and modify if/as necessary.

Image of code showing syntactical highlighting:

code showing syntactical highlighting

Note: This was tested under OS X 10.8.5 and TextWrangler v4.5.9 (3390) and may react differently in other versions of OS X and or TextWrangler.

Licensed under: CC-BY-SA with attribution
Not affiliated with apple.stackexchange
scroll top