2 votos

AppleScript: ¿Es posible tener una "respuesta predeterminada" no seleccionada en un cuadro de diálogo de entrada?

Cuando se utiliza el parámetro default answer en display dialog en AppleScript, todo el texto establecido en default answer se resalta automáticamente al mostrar el diálogo.

¿Es posible especificar una respuesta predeterminada sin resaltarla?

Lo ideal sería que el cursor se colocara después del último carácter de la respuesta predeterminada, para que el usuario pueda agregar texto a esta respuesta sin tener que presionar primero la tecla (o, peor aún, sobrescribir accidentalmente la respuesta predeterminada).

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 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 una respuesta predeterminada es la forma más eficiente para mí de ofrecer todas estas opciones al alcance del usuario.

2voto

rubik's sphere Puntos 31

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

Mientras puede que tú lo hayas encontrado confiable, yo no. Funcionó una vez cada diez veces y además no es un método correcto desde el punto de vista programático porque el código de tecla evento debería terminar antes de que se muestre el diálogo de presentación. Probablemente variará en cada sistema probado y en mi opinión es una casualidad que sea confiable para ti. Además, confiable es cuando funciona cada vez para cualquiera que lo intente.

0 votos

@user3439894 Olvidé mencionar una advertencia importante. Por favor, revisa mi respuesta actualizada. ¿Es confiable mi método en tu sistema, cuando el display dialog en cuestión no es el diálogo inicial de un AppleScript (y cuando en realidad estás ejecutando el archivo .scpt fuera de un entorno como Script Editor.app o Automator.app)?

0 votos

De acuerdo, solo cuando se ejecuta como una aplicación independiente parece ser confiable. Obviamente, no he realizado pruebas exhaustivas, pero sin duda fue muy diferente al ejecutarse como una aplicación compilada que al ejecutarse dentro del Editor de Scripts. Si tuviera una necesidad real, lo cual no es el caso ahora mismo, probablemente vería si se podría hacer un cuadro de diálogo en Cocoa-AppleScript para no tener la respuesta predeterminada seleccionada. Sin embargo, buen truco. Le daré un +1 por ingenio.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X