On 2011-04-20 02:18, Marius Hofert wrote:
Dear textmate-experts,
I use textmate to program in the statistical software R. To execute an R script, I typically first select the lines and then use "Apple-key + R" which launches "Send Selection/Document to ... R.app". In order to execute all lines before the current cursor position, I also first select all lines (with "Apple-key + shirt + up"). But that shifts the view to the top of the document, which is a bit tedious. Is there a simple way to tell textmate to execute all lines before the current cursor position?
I can think of a couple ways to do it.
The easiest way is with a macro. Start recording, jump to beginning of line, select to top, "Send selection to R.app", right arrow, stop recording. Save the macro as you wish. The key is the right-arrow action at the end, which will deselect everything and leave the cursor at the end of the selected area. Two disadvantages: It does move your cursor to the beginning of the current line, and it moves the current line to the bottom of the window.
Better, and almost as easy, would be to modify the bundle command "Send Selection/Document to R.app", which is in the "R Console (R.app)" bundle. It's just a shell script which captures its stdin and uses AppleScript to send it to R.app. This can be modified really easily to do what you want. The line that captures the input is near the top: 'rawText="`cat`"' Change that to:
rawText = "`head -$(($TM_LINE_NUMBER-1))`"
The $TM_LINE_NUMBER environment variable contains the number of the current line. The $((... -1)) expression simply says to subtract one to get all lines *before* the cursor. And the head command simply gets that many lines from stdin and discards the rest.