On Dec 13, 2008, at 9:54 AM, gshenaut wrote:

> I was hoping it to be built into BBedit, but I guess it isn't, so I
> wanted to make a script to do it, but that turns out to be nontrivial.

There are several of ways to do something like this and it's fairly  
trivial as
long as you have a little patience in exploring your options. Here are  
a few
things that come to mind:

(1) Work entirely within AppleScript:

    Here's a basic start for a script that you can develop further:

       property theCommand : ""
       tell application "BBEdit"
          tell window 1
             set currentSelection to selection as string
             set theCommand to text returned of ¬
                (display dialog "Enter shell command:" ¬
                default answer theCommand buttons {"Execute"} ¬
                default button 1 with icon 1)
             try
                set theOutput to ¬
                (do shell script theCommand & " '" & ¬
                currentSelection & "'") & return
             on error errMsg number errNum
                beep
                display dialog "Error: " & errNum & ". " & errMsg ¬
                with icon stop buttons {"Cancel"} default button 1
             end try
             set selection to theOutput
          end tell
       end tell


(2) Use BBEdit Unix Filters, avoiding AppleScript altogether:

    Without AppleScript, it's more difficult to collect input from a  
GUI prompt.
    But you could write a Unix Filter for all the shell commands you  
want to
    perform, where only the text to be processed varies.

    Or, if the commands themselves vary as well, you could type them  
in BBEdit
    and pass them along to a Unix Filter as part of the input. Then  
"eval" the
    entire thing from within your shell script.

    Here's an example of the latter approach using Python (but you can  
use any
    language you want):

       #!/usr/local/bin/python
       import fileinput
       import string
       import os
       if __name__ == "__main__":
         cmdResult = ''
         for my_line in fileinput.input():
           cmdResult = cmdResult + os.popen(my_line).read()
         print cmdResult


(3) Combine options 1 and 2 above:

    This is an AppleScript I threw together a while back and never  
really
    finished, so there's lots of room for improvement. But the basic  
idea is to
    execute the selected text as a shell command, like we did in  
option 2 above.

    The difference, however, is that because it uses AppleScript, we  
can do some
    fancier things: use a different interpreter based on the source  
language of
    the current document ('php -r' for PHP code, 'perl -e' for Perl,  
'ruby -e'
    for Ruby, etc.), display GUI error dialogs, and have more  
flexibility in how
    the returned text is presented.

    Give it a try if you're interested, and feel free to modify it to  
suit your
    needs.

       http://web.me.com/dennisrande/downloads/Run%20Shell%20Command.zip


(4) Use a BBEdit shell worksheet, a special document type that allows  
you to
     store and execute Unix command lines. See page 322 of the BBEdit  
User Manual
     for more information.


Hope this gives you some ideas.

-Dennis


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "BBEdit Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/bbedit?hl=en
If you have a specific feature request or would like to report a suspected (or 
confirmed) problem with the software, please email to "[email protected]" 
rather than posting to the group.
-~----------~----~----~----~------~----~------~--~---

Reply via email to