TextMate is a text editor for OS X. It's (to some) EMACS done the Mac way. Here are some commands that I've found handy for integrating TextMate a bit with an IPython session running in OS X's Terminal.app. There's not much error checking in any of these, so YMMV. All of these scripts check if the current tab in Terminal.app is running a Python process. If it is, the script assumes it's an IPython instance and runs the appropriate command in that session. If the current tab is not running a Python process, these commands will open a new terminal window and start ipython (make sure it's on your PATH) and then run the appropriate command.

All of these code snippets should be entered into the "Command(s)" field of a new command. Set the scope to "source.python". You probably also want to set the Save: popup to "Current file", the Input: popup to "None" and the Output popup to "Discard". Of course you can set the key equivalent to be anything you want.

I've added the following commands to the Python bundle in my copy of TextMate and found them to be useful...

Run the current file using IPython's %run

#!/bin/bash
    
osascript <<- APPLESCRIPT
        tell application "Terminal"
                set currentTab to (selected tab of (get first window))
                set tabProcs to processes of currentTab
                set theProc to (end of tabProcs)
                if theProc is not "Python" then
                        set currentTab to (do script "ipython")
                end if
                
                do script "%run -e -i -n '$TM_FILEPATH'" in currentTab
        end tell
APPLESCRIPT

Toggle IPython's %pdb state

#!/bin/bash

osascript <<- APPLESCRIPT
        tell application "Terminal"
                set currentTab to (selected tab of (get first window))
                set tabProcs to processes of currentTab
                set theProc to (end of tabProcs)
                if theProc is not "Python" then
                        set currentTab to (do script "ipython")
                end if
        
                do script "%pdb" in currentTab
        end tell
APPLESCRIPT

Add a pdb breakpoint at the current line

You must be in pdb/ipdb

#!/bin/bash

osascript  <<- APPLESCRIPT
        tell application "Terminal"
                set currentTab to (selected tab of (get first window))
                set tabProcs to processes of currentTab
                set theProc to (end of tabProcs)
                if theProc is not "Python" then
                        set currentTab to (do script "ipython")
                end if
                
                do script "break $TM_FILEPATH:$TM_LINE_NUMBER" in currentTab
        end tell
APPLESCRIPT

Clear breakpoint for the current line

#!/bin/bash

osascript  <<- APPLESCRIPT
        tell application "Terminal"
                set currentTab to (selected tab of (get first window))
                set tabProcs to processes of currentTab
                set theProc to (end of tabProcs)
                if theProc is not "Python" then
                        set currentTab to (do script "ipython")
                end if
                
                do script "clear $TM_FILEPATH:$TM_LINE_NUMBER" in currentTab
        end tell
APPLESCRIPT

Cookbook/UsingIPythonWithTextMate (last edited 2008-01-15 23:40:34 by BarryWark)