AppleScript: è possibile avere una "risposta predefinita" deselezionata in una finestra di dialogo di input?

2

Quando si utilizza il parametro default answer in display dialog in AppleScript, qualunque testo sia impostato su default answer viene automaticamente evidenziato alla visualizzazione della finestra di dialogo.

È possibile specificare una risposta predefinita senza la risposta evidenziata?

Preferirei che il cursore fosse posizionato dopo l'ultimo carattere della risposta predefinita, in modo che l'utente possa aggiungere del testo a questa risposta senza prima premere il tasto (o, peggio, accidentalmente sovrascrivere la risposta predefinita).

    
posta rubik's sphere 03.03.2017 - 19:51
fonte

1 risposta

2

L'ho capito.

Se si preme il tasto freccia destra solo millisecondi prima viene visualizzata la finestra di dialogo, quindi default answer non verrà selezionato e il cursore lampeggiante verrà posizionato dopo il testo predefinito.

Puoi eseguire questa azione in AppleScript in questo modo:

-- Unselect the “default answer” in an input dialog:
tell application "System Events"
        key code 124 -- right arrow key
end tell

display dialog "Enter a keyword:" default answer "I do not want this text to be highlighted. "

In teoria, la soluzione di cui sopra non dovrebbe funzionare. In teoria, la pressione dei tasti dovrebbe iniziare e completarsi prima dell'avvio del comando display dialog . Ma questo metodo funziona, per qualsiasi ragione.

Nota: questo metodo non funzionerà se inserisci key code 124 prima della finestra di dialogo prima del tuo file AppleScript. In questo caso, il mio codice precedente non funzionerà come desiderato e il testo default answer rimarrà selezionato. (Potrebbe sembrare erroneamente che funzioni correttamente se stai semplicemente eseguendo il codice AppleScript da Script Editor.app o Automator.app, ma non funzionerà correttamente se esegui il file .scpt tramite Fast Scripts, osascript in Terminal. app, o qualsiasi altro metodo.)

Tuttavia, se display dialog in questione è la seconda, terza o cinquantesima finestra di dialogo in un file AppleScript, la mia soluzione funziona correttamente. Non chiedermi perché non funzionerà nella prima finestra di dialogo (perché non lo so).

Quindi non hai altra scelta che riorganizzare le finestre di dialogo del file AppleScript in modo che la prima finestra di dialogo non abbia bisogno di avere un default answer .

Una soluzione alternativa, se la tua finestra di dialogo iniziale deve avere una default answer che non è selezionata, è inserire una finestra di dialogo che procede automaticamente dopo che è trascorso un breve lasso di tempo. Questa finestra di dialogo dovrebbe essere inserita immediatamente prima del suddetto blocco. Non è una soluzione elegante, ma ecco un codice che funzionerà:

display alert "Please wait..." message "..." buttons ("") giving up after 1
-- I think that "1" is the minimum for "giving up after." I tried "0.5" and the dialog completely stalled.

Finché non precede il dialogo iniziale di una sceneggiatura, ho personalmente trovato il mio metodo affidabile; funziona al 100% del tempo sul mio computer.

    
risposta data 07.03.2017 - 20:40
fonte

Leggi altre domande sui tag