Basándose en la respuesta de PrimoCocaína y en esta respuesta a una vieja pregunta que publiqué yo mismo en el foro de BBEdit, he llegado a este AppleScript, que es específico para Python:
-------------------------------------------------------------------------------------------
# Auth: Christopher Stone
# modif Fabio Grazioso
# dCre: 2015/09/22 11:00
# dMod: 2017/10/03 18:40
# Appl: BBEdit, Terminal
# Task: Attempt to run the front text document in Terminal.app.
# Libs: None
# Osax: None
# Tags: @Applescript, @Script, @BBEdit, @Run, @Front, @Document, @Terminal, @Python
-------------------------------------------------------------------------------------------
tell application "BBEdit"
tell front text document
if on disk = false then error "Front document is not saved!"
if modified = true then save
if contents of line 1 does not start with "#!" then error "No valid shebang line found!"
set docName to its name
set docFile to POSIX path of (get its file)
end tell
end tell
set shCMD to text 2 thru -1 of "
FILE=" & docFile & ";
if [[ ! -x \"$FILE\" ]]; then
chmod +x \"$FILE\";
fi
"
do shell script shCMD
set {oldTIDS, AppleScript's text item delimiters} to {AppleScript's text item delimiters, "/"}
set docName to quoted form of docName
set docParentPath to quoted form of ((text items 1 thru -2 of docFile) as text)
set AppleScript's text item delimiters to oldTIDS
tell application "Terminal"
activate
if name of windows = {missing value} then do script
if processes of front window = {} then do script
tell front window
if its busy = true then
do script "cd " & docParentPath & " && python -i " & docName
else
do script "cd " & docParentPath & " && python -i " & docName in selected tab
end if
end tell
end tell
-------------------------------------------------------------------------------------------
Esta respuesta me parece mejor que la propuesta por CousinCocaine sólo porque puedo crear un atajo de teclado al script (AFAIK no es posible asociar un atajo a un servicio).
Los pasos a seguir para que esto funcione son los siguientes:
- Copiar el código script en la script Editor.app (que se encuentra en la carpeta /Applications/Utilities/).
- Compilar el script (icono del martillo en la barra del Editor)
- Guárdelo en la carpeta BBEdit scripts: /Users//Library/Application\ Support/BBEdit/scripts/
- Opcional: En BBEdit asocia el script a un atajo de teclado, en las Preferencias -> Menús y Atajos -> (tienes que pulsar a la derecha del nombre del script, donde pone "ninguno", y pulsar tu atajo)
- Finalmente, creas un script en BBEdit, por ejemplo un script de Python, lo guardas, y mientras es la ventana frontal en BBEdit, seleccionas el AppleScript del menú de BBEdit. Esto enviará el script de Python a la Terminal y se ejecutará el script.
Sobre el AppleSript, observe que la opción "-i" en la llamada de Python en la línea
do script "cd " & docParentPath & " && python -i " & docName
hace que tras la ejecución del script de Python, no se salga del intérprete de Python, tal y como se pide en la pregunta.
Si las líneas
do script "cd " & docParentPath & " && python -i " & docName
do script "cd " & docParentPath & " && python -i " & docName in selected tab
se sustituyen por las líneas
do script "cd " & docParentPath & " && ./" & docName
do script "cd " & docParentPath & " && ./" & docName in selected tab
entonces este AppleScript puede lanzar cualquier script, siempre que la línea "shebang" correcta esté presente en el script, como la primera línea. Para un script de Python, la línea shebang debe ser:
#!/usr/bin/env python
mientras que para un shell bash script la línea shebang debe ser:
#!/bin/bash