Lo descubrí.
Si uno presiona la tecla de flecha derecha justo en milisegundos antes de que se muestre el cuadro de diálogo, entonces la respuesta predeterminada
no será seleccionada y el cursor parpadeante se colocará después del texto predeterminado.
Puedes realizar esta acción en AppleScript de la siguiente manera:
-- Desmarcar la “respuesta predeterminada” en un cuadro de diálogo de entrada:
tell application "System Events"
key code 124 -- tecla de flecha derecha
end tell
display dialog "Ingresa una palabra clave:" default answer "No quiero que este texto esté resaltado. "
En teoría, la solución anterior no debería funcionar. En teoría, la pulsación de tecla debería iniciar y completarse antes de que se inicie el comando display dialog
. Pero, este método sí funciona, por alguna razón.
Nota: Este método no funcionará si insertas key code 124
antes del primer primer cuadro de diálogo de tu archivo AppleScript. En este caso, mi código anterior no se comportará como se desea y el texto de la respuesta predeterminada
seguirá seleccionado. (Puede parecer que funciona correctamente si simplemente estás ejecutando el código AppleScript desde Script Editor.app o Automator.app, pero no funcionará correctamente si ejecutas el archivo .scpt a través de Fast Scripts, osascript
en Terminal.app, u otro método).
Sin embargo, si el display dialog
en cuestión es el segundo, tercero o quincuagésimo cuadro de diálogo en un archivo AppleScript, mi solución funciona correctamente. No me preguntes por qué no funciona en el primer cuadro de diálogo (porque no lo sé).
Por lo tanto, no tienes más opción que reorganizar los diálogos del archivo AppleScript para que el primer diálogo no necesite tener una respuesta predeterminada
.
Una solución alternativa, si tu diálogo inicial debe tener una respuesta predeterminada
que no esté seleccionada, es insertar un diálogo que proceda automáticamente después de que haya pasado un breve lapso de tiempo. Este diálogo debe insertarse inmediatamente antes del bloque tell anterior. No es una solución elegante, pero aquí tienes un código que funcionará:
display alert "Por favor espera..." message "..." buttons ("") giving up after 1
-- Creo que "1" es el mínimo para "giving up after." Probé con "0.5" y el diálogo se detuvo por completo.
Siempre y cuando no preceda al diálogo inicial de un script, personalmente he encontrado que mi método es confiable; funciona el 100% del tiempo en mi computadora.
0 votos
No creo que sea una buena práctica de UI usar una respuesta personalizada como la respuesta predeterminada. Una respuesta predeterminada debe ser o sí o no pero no no, pero ... (o sí, pero ...).
0 votos
@klanomath El diálogo en cuestión no recibe una entrada de sí/no del usuario, sino que recibe una palabra clave. Dependiendo de la intención del usuario, a veces la palabra clave predeterminada será suficiente. Otras veces, el usuario querrá eliminar por completo la palabra clave. Sin embargo, la mayoría de las veces, el usuario querrá agregar texto a esta palabra clave (por eso quiero que la
respuesta predeterminada
no esté seleccionada, para que el usuario pueda agregar texto de inmediato sin tener que presionar la tecla de flecha hacia la derecha primero). Utilizar unarespuesta predeterminada
es la forma más eficiente para mí de ofrecer todas estas opciones al alcance del usuario.