Finestra di dialogo Applescript, alias di Bash / funzione

0

Sto provando a creare un alias breve per la creazione di finestre di dialogo del sistema dal terminale. Ho provato a creare una funzione Bash (dal momento che un alias non sembra prendere argomenti) e aggiungerlo al mio .bash_profile, ma mi sta fallendo.

Il mio ultimo tentativo è:

dialog() {
    DIALOGVAR='tell app "system events" to display dialog "'$@'"'
    CMD="osascript -e 'tell app \"system events\" to activate' -e '$DIALOGVAR'"
    $CMD
}

Ma quando lo eseguo tramite il terminale, ottengo

0:1: syntax error: A unknown token can’t go here. (-2740)

Anche se l'echo della variabile CMD mi dà un comando formattato correttamente:

osascript -e 'tell app "system events" to activate' -e 'tell app "system events" to display dialog "foo bar"'

Forse sto facendo qualcosa di sbagliato, forse c'è un modo più semplice per raggiungere questo obiettivo. Tutto quello che sto cercando di fare è creare un comando facile da eseguire che mostri le finestre di dialogo.

EDIT: anche il tentativo alternativo non ha portato a nulla. Questo funziona per argomenti senza spazi, ma fallisce per più argomenti.

sysdialog() {
    osascript -e "tell app \"system events\" to activate" -e "tell app \"system events\" to display dialog \"$@\""
}
    
posta Joost 17.02.2013 - 13:37
fonte

2 risposte

1

È possibile utilizzare il gestore di esecuzione per passare argomenti:

dialog() {
    osascript -e 'on run args
    try
    tell app "SystemUIServer" to display dialog (item 1 of args)
    end
    activate app (path to frontmost application as text)
    end' "$1"
}

Se vuoi chiamarlo come dialog a b (anziché dialog 'a b' ), modifica $1 in $* .

Gli eventi di sistema si chiudono automaticamente quando non viene utilizzato, e c'è un piccolo ritardo quando viene aperto, quindi dire che per visualizzare la finestra di dialogo a volte sarà più lento.

Senza il blocco try ci sarebbe un errore se l'utente preme un pulsante di annullamento. Senza activate la finestra precedentemente focalizzata non otterrebbe il focus indietro quando la finestra di dialogo è chiusa.

Puoi usare qualcosa di simile per visualizzare le finestre di dialogo del testo:

answer=$(osascript -e 'try
tell app "SystemUIServer"
set answer to text returned of (display dialog "" default answer "")
end
end
activate app (path to frontmost application as text)
answer' | tr '\r' ' ')
[ -z "$answer" ] && exit
    
risposta data 17.02.2013 - 16:47
fonte
0

Prova questo;

#!/bin/bash
dialog() {
  DIALOGVAR=$('tell app "System Events" to display dialog "'$@'"')
  CMD=$("osascript -e 'tell application \"System Events\" to activate'"; "osascript -e '$DIALOGVAR'")
  $CMD
  }
    
risposta data 28.09.2013 - 19:02
fonte

Leggi altre domande sui tag