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

Cuando uno usa el default answerparámetro in display dialogen AppleScript, cualquier texto que se establezca default answerse resalta automáticamente al mostrar el cuadro de diálogo.

¿Es posible especificar una respuesta predeterminada sin resaltar la respuesta?

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

No creo que sea una buena práctica de interfaz de usuario usar una respuesta personalizada como respuesta predeterminada. Una respuesta predeterminada debe ser o no , pero no no, pero... (o sí, pero... ).
@klanomath El diálogo en cuestión no recibe una entrada de sí/no del usuario, recibe una palabra clave. Dependiendo de la intención del usuario, la palabra clave predeterminada a veces será suficiente. Otras veces, el usuario querrá eliminar la palabra clave por completo. Sin embargo, la mayoría de las veces, el usuario querrá agregar texto a esta palabra clave (es por eso que quiero que no default answeresté seleccionada, para que el usuario pueda agregar texto inmediatamente sin tener que presionar primero la tecla de flecha hacia la derecha). Emplear un default answeres la forma más eficiente para mí de ofrecer todas estas opciones al alcance de la mano del usuario.

Respuestas (1)

Me lo imaginé.

Si se presiona la tecla de flecha hacia la derecha solo milisegundos antes de que se muestre el cuadro de diálogo, default answerno se seleccionará y el cursor parpadeante se colocará después del texto predeterminado.

Puede realizar esta acción en AppleScript así:

-- 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. "

En teoría, la solución anterior no debería funcionar. En teoría, la pulsación de la tecla debería comenzar y completarse antes de que display dialogse inicie el comando. Pero, este método funciona, por la razón que sea.


Nota: este método no funcionará si inserta key code 124antes del primer cuadro de diálogo de su archivo AppleScript. En este caso, mi código anterior no se comportará como se desea y el default answertexto permanecerá seleccionado. (Puede parecer engañoso que funciona correctamente si simplemente está ejecutando el código AppleScript desde Script Editor.app o Automator.app, pero no funcionará correctamente si ejecuta el archivo .scpt a través de Fast Scripts, en Terminal.app osascripto cualquier otro método).

Sin embargo, si el display dialogcuadro de diálogo en cuestión es el segundo, tercero o quincuagésimo en un archivo AppleScript, mi solución funciona correctamente. No me preguntes por qué no funcionará en el primer diálogo (porque no lo sé).

Por lo tanto, no tiene más remedio que reorganizar los cuadros de diálogo del archivo AppleScript para que el primer cuadro de diálogo no necesite tener una extensión default answer.

Una solución, si su cuadro de diálogo inicial debe tener una default answerque no está seleccionada, es insertar un cuadro de diálogo que continúe automáticamente después de que haya transcurrido un breve período de tiempo. Este cuadro de diálogo debe insertarse inmediatamente antes del bloque anterior. No es una solución elegante, pero aquí hay un código que funcionará:

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.

Siempre que 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.

Si bien es posible que hayas encontrado que es confiable, yo no. Funcionó una de cada diez veces y, además, no es un método programáticamente correcto porque el key code evento debería terminar antes que el display dialog. Probablemente variará en cada sistema probado y, en mi opinión, es una casualidad, es confiable para usted. Además, confiable es cuando funciona siempre para cualquiera que lo pruebe.
@ user3439894 Olvidé mencionar una advertencia importante. Por favor, vea mi respuesta actualizada. ¿Mi método es confiable en su sistema, cuando el display dialogdiálogo en cuestión no es el diálogo inicial de un AppleScript (y cuando en realidad está ejecutando el archivo .scpt fuera de un entorno como Script Editor.app o Automator.app)?
De acuerdo, solo cuando se ejecuta como una aplicación independiente parece ser confiable. Obviamente, no he realizado pruebas exhaustivas, pero ciertamente fue bastante diferente ejecutarlo como una aplicación compilada frente a ejecutarlo dentro del Editor de secuencias de comandos. Si tuviera una necesidad real, no la tengo en este momento, probablemente vería si se pudiera hacer un diálogo en Cocoa-AppleScript para no tener seleccionada la respuesta predeterminada. Sin embargo, buena solución. Le daré un +1 por ingenio.
@ usuario3439894 Gracias. No es tan buena como la respuesta de user3439894, pero supera a las otras respuestas :). Para que quede claro, mi código no solo funciona de manera confiable cuando se guarda como un archivo .app independiente. También funciona de manera confiable como un archivo .scpt si ese archivo .scpt es activado por FastScripts.app o en Terminal.app a través de osascript.
Cuando dije " Está bien, solo cuando se ejecuta como una aplicación independiente parece ser confiable ". Comprenda que se trataba de una comparación entre la aplicación .app y la ejecución en el Editor de secuencias de comandos, ya que eso es todo lo que probé. Es bueno saber que también funciona en otros escenarios. ¡No te subestimes, definitivamente es una buena respuesta dadas las circunstancias! :)
Oh, ahora entiendo lo que quisiste decir. ¡Gracias por las amables palabras!