
Sí, estoy teniendo una terrible experiencia de principiante con Apple Script.
Necesito abrir una nueva ventana de Terminal en el espacio del escritorio actual. NO moverme a otro espacio que tenga una Terminal en ejecución y luego abrir otra ventana de Terminal.
Por supuesto, si la Terminal no se está ejecutando, entonces debería iniciar un nuevo proceso de Terminal.
Respuesta1
tell application "Terminal"
do script " "
activate
end tell
Parece extraño, pero aprovecha una rareza en cómo Terminal maneja los comandos entrantes de "hacer script"; crea una nueva ventana para cada uno. De hecho, podrías reemplazar eso con algo útil si lo deseas; ejecutará lo que quieras justo después de abrir la nueva ventana.
Respuesta2
Si no tiene ningún texto entre el script do " ", no obtendrá un símbolo del sistema adicional en la terminal.
tell application "Terminal"
do script ""
activate
end tell
Respuesta3
Se me ocurren tres formas diferentes de hacerlo (las dos primeras robadas de otro lugar pero no recuerdo dónde). Utilizo el tercero, que llama a un script de shell desde Applecript, porque quiero abrir una nueva ventana cada vez y porque era la más corta.
A diferencia del script integrado en OS X desde al menos 10.10, todos estos abren la terminal en cualquier directorio que sea el directorio de trabajo actual en la ventana del buscador (es decir, no es necesario tener una carpeta seleccionada para poder abrirla).
También se incluyen un par de funciones bash para completar el círculo Finder > Terminal > Finder.
1. Reutilice una pestaña existente o cree una nueva ventana de Terminal:
tell application "Finder" to set myDir to POSIX path of (insertion location as alias)
tell application "Terminal"
if (exists window 1) and not busy of window 1 then
do script "cd " & quoted form of myDir in window 1
else
do script "cd " & quoted form of myDir
end if
activate
end tell
2. Reutilice una pestaña existente o cree una nueva pestaña Terminal:
tell application "Finder" to set myDir to POSIX path of (insertion location as alias)
tell application "Terminal"
if not (exists window 1) then reopen
activate
if busy of window 1 then
tell application "System Events" to keystroke "t" using command down
end if
do script "cd " & quoted form of myDir in window 1
end tell
3. Genere una nueva ventana cada vez a través de un script de shell llamado desde un Applescript.
tell application "Finder"
set myDir to POSIX path of (insertion location as alias)
do shell script "open -a \"Terminal\" " & quoted form of myDir
end tell
4. (BONIFICACIÓN) Alias de Bash para abrir una nueva ventana del buscador para el directorio de trabajo actual en su terminal
Agregue este alias a su .bash_profile.
alias f='open -a Finder ./'
5. (BONIFICACIÓN) Cambie el directorio en la ventana de su terminal a la ruta de la ventana frontal del Finder
Agregue esta función a su .bash_profile.
cdf() {
target=`osascript -e 'tell application "Finder" to if (count of Finder windows) > 0 then get POSIX path of (target of front Finder window as text)'`
if [ "$target" != "" ]; then
cd "$target"; pwd
else
echo 'No Finder window found' >&2
fi
}
Respuesta4
Las respuestas anteriores sólo funcionan si la Terminal ya se está ejecutando. De lo contrario, abre dos ventanas de Terminal a la vez: una debido a do script
y otra debido a activate
.
Puedes evitar esto con un simple if... else:
if application "Terminal" is running then
tell application "Terminal"
do script ""
activate
end tell
else
tell application "Terminal"
activate
end tell
end if
Prima:
Si desea ejecutar comandos directamente, puede hacerlo pulsando teclas (no es muy elegante, ¡lo sé! Pero funciona)
[...]
else
tell application "Terminal"
activate
tell application "System Events" to keystroke "ls -la"
tell application "System Events" to key code 36
end tell
end if