2012-12-03 4 views
6

Come sapete la versione 2 di TextMate è sulla strada e la versione di sviluppo attuale è molto promettente: https://github.com/textmate/textmate/blob/master/README.mdCome posso inviare il testo selezionato (o una linea) in TextMate2 a R in esecuzione su Terminal

Nel mio caso ho sto usando R in terminale (MacOSX Mountain Lion) e sviluppo il mio codice con TextMate2. Con la versione precedente di TextMate (1.5.11) ho usato il seguente trucco per inviare messaggi di testo o le linee selezionato alla mia finestra del terminale:

-> Vedi How can I send selected text (or a line) in TextMate to R running on Terminal

Questo trucco ha funzionato perfettamente per me, ma io non riesco a capire come ottenere un comportamento simile con TextMate2.

Qualche idea? Ti ringrazio in anticipo per il tuo prezioso aiuto.

risposta

1

Un po 'una risposta indiretta: utilizzo il pacchetto R in Textmate 2 (che ha funzionato anche in Textmate 1). Basta selezionare le linee che si desidera eseguire e "Invia selezione a/R App" (l'ho legato al comando-R ma non sono sicuro se è il binding originale)

La prima volta che si apre l'app R e eseguire il codice. Le volte successive semplicemente incolla il codice ed eseguirlo.

non è esattamente "invia al terminale", ma funziona ancora

+0

grazie, ma mi piace molto lavorare direttamente con il terminale MacOSX – bhaibeka

2

realtà basata su una risposta precedente (How can I send selected text (or a line) in TextMate to R running on Terminal), ho creato il mio Bundle in TextMate 2 utilizzando il seguente codice:

#!/bin/bash 

source "$TM_SUPPORT_PATH/lib/bash_init.sh" # might not be necessary 

# input is selection or document 
rawText="$(cat | sed 's///g;')" 

osascript -e 'on run(theCode)' \ 
      -e ' tell application "Terminal"' \ 
      -e ' do script theCode in window 1' \ 
      -e ' end tell' \ 
      -e 'end run' -- "$rawText" 

open "txmt://open?line=$(($TM_LINE_NUMBER+1))&column=1000000" & 

See lo screenchot sotto.

code and options for the new bundle L'unico problema è che quando si seleziona un blocco di testo, il cursore salta alla prima riga del documento, il che è un comportamento molto irritante. Cambiare 'Input" da 'Linea' a 'doe Selection' non risolve il problema.

Qualche idea?

0

ho ottenuto che funziona con alcune modifiche sulla risposta di bhaibeka. Apparentemente $ TM_LINE_NUMBER è vuota e che fa la cursore a saltare alla prima riga del documento. per sbarazzarsi dell'ultima riga, risolve parte del problema.

#!/bin/bash 
[[ -f "${TM_SUPPORT_PATH}/lib/bash_init.sh" ]] && . "${TM_SUPPORT_PATH}/lib/bash_init.sh" 
rawText="`cat`" 

osascript -e 'on run(theCode)' \ 
     -e ' tell application "Terminal"' \ 
     -e ' do script theCode in window 1' \ 
     -e ' end tell' \ 
     -e 'end run' -- "$rawText" > /dev/null 

l'altro problema è come spostare il cursore alla fine della selezione. ho fatto funziona inserendo l'output 'vuoto' alla fine della selezione (sul pannello di destra: Output: "Insert After Input" e Format: "Text"). Probabilmente questo non è il modo più elegante per farlo ma funziona.

2

Questo funziona per me e va correttamente alla fine della selezione. Ho appena aggiunto la parte osascript nella risposta precedente e l'ho inserita nel codice che era nel pacchetto R originale scritto da Hans-Jörg Bibiko. Impostare "selettore ambito" su "source.r" e "output" su "scarto". Impostare "Input" su "line" e fa ciò di cui ho bisogno: invia la riga se non è selezionato nulla e invia la selezione in caso contrario.

modifica: funziona perfettamente con le selezioni, ma non con la linea. Quando non si seleziona il testo, si esegue nuovamente tutto dalla parte superiore del file

edit2: risolto, ho scritto a Hans-Jörg Bibiko e mi ha indicato la selezione "Input".

#!/usr/bin/env bash 

# input is selection or document 
rawText="$(cat | sed 's///g;')" 

curDir='' 
if [[ ${#TM_DIRECTORY} -gt 0 ]]; then 
    curDir="$TM_DIRECTORY" 
fi 

osascript -e 'on run(theCode)' \ 
      -e ' tell application "Terminal"' \ 
      -e ' do script theCode in window 1' \ 
      -e ' end tell' \ 
      -e 'end run' -- "$rawText" 

if [ "$TM_LINE_NUMBER" != "" ]; then 
    "$TM_MATE" -l "$(($TM_LINE_NUMBER+1)):1000000" 
elif [[ $TM_SELECTION =~ [1-9][0-9]*:?[0-9]*-([1-9][0-9]*):?[0-9]* ]]; then 
    # Regular Selection 
    "$TM_MATE" -l "$((${BASH_REMATCH[1]}+1)):1000000" 
elif [[ $TM_SELECTION =~ [1-9][0-9]*:?[0-9]*x([1-9][0-9]*):?[0-9]* ]]; then 
    # Block (option) selection 
    "$TM_MATE" -l "$((${BASH_REMATCH[1]}+1)):1000000" 
else 
    "$TM_MATE" 
fi 
Problemi correlati