AppleScript: Est-il possible d'avoir une "réponse par défaut" non sélectionnée dans une boîte de dialogue de saisie?

2

Quand on utilise le default answer paramètre dans display dialog dans AppleScript, quel que soit le texte défini default answer est automatiquement mis en surbrillance lors de l’affichage de la boîte de dialogue.

Est-il possible de spécifier une réponse par défaut sans la réponse en surbrillance?

Je souhaiterais idéalement que le curseur soit placé après le dernier caractère de la réponse par défaut, afin que l'utilisateur puisse ajouter du texte à cette réponse sans appuyer au préalable clé (ou pire, écrasant accidentellement la réponse par défaut).

rubik's sphere
la source
Je ne pense pas que l'utilisation d'une réponse personnalisée comme réponse par défaut soit une bonne pratique d'interface utilisateur. Une réponse par défaut devrait être soit Oui ou non mais non non mais ... (ou Oui mais ... ).
klanomath
@klanomath La boîte de dialogue en question ne reçoit aucune entrée oui / non de l'utilisateur. Elle reçoit un mot clé. Selon l'intention de l'utilisateur, le mot-clé par défaut sera parfois suffisant. D'autres fois, l'utilisateur voudra supprimer complètement le mot clé. Cependant, la plupart du temps, l’utilisateur voudra ajouter du texte à ce mot-clé (c’est pourquoi je souhaite default answer être désélectionné, de sorte que l’utilisateur puisse immédiatement ajouter du texte sans avoir à appuyer d’abord sur la flèche droite) Employant un default answer C’est le moyen le plus efficace pour moi d’offrir toutes ces options à portée de main de l’utilisateur.
rubik's sphere

Réponses:

2

Je l'ai compris.

Si on appuie sur la flèche droite juste millisecondes avant la boîte de dialogue est affichée, puis le default answer ne sera pas sélectionné et le curseur clignotant sera placé après le texte par défaut.

Vous pouvez effectuer cette action dans AppleScript comme suit:

-- 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 théorie, la solution ci-dessus ne devrait pas fonctionner. En théorie, la touche doit commencer et se terminer avant le display dialog la commande initie. Mais, cette méthode fonctionne, pour une raison quelconque.


Remarque: cette méthode ne fonctionnera pas si vous insérez key code 124 avant le très premier dialogue de votre fichier AppleScript. Dans ce cas, mon code ci-dessus ne se comportera pas comme souhaité et le default answer le texte restera sélectionné. (Il peut sembler erroné de fonctionner correctement si vous exécutez simplement le code AppleScript à partir de Script Editor.app ou Automator.app, mais cela ne fonctionnera pas correctement si vous exécutez le fichier .scpt via Fast Scripts, osascript dans Terminal.app, ou toute autre méthode.)

Cependant, si le display dialog Il s’agit du deuxième, troisième ou cinquantième dialogue d’un fichier AppleScript, ma solution fonctionne correctement. Ne me demandez pas pourquoi cela ne fonctionnera pas lors du premier dialogue (car je ne sais pas).

Vous n'avez donc pas d'autre choix que de réorganiser les boîtes de dialogue du fichier AppleScript afin que la première boîte de dialogue n'ait pas besoin de default answer.

Une solution de contournement, si votre dialogue initial doit avoir un default answer qui est désélectionné, est d'insérer un dialogue qui procède automatiquement après un court laps de temps. Cette boîte de dialogue doit être insérée immédiatement avant le bloc tell ci-dessus. Ce n'est pas une solution élégante, mais voici un code qui fonctionnera:

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.

Tant qu’elle ne précède pas le dialogue initial d’un script, j’ai personnellement trouvé ma méthode fiable; cela fonctionne 100% du temps sur mon ordinateur.

rubik's sphere
la source
Tandis que vous pouvez avoir trouvé qu'il était fiable, je n'ai pas. Cela a fonctionné une fois sur dix et d’autre part que ce n’est pas une méthode correcte par programmation car le key code un événement devrait effectivement se terminer avant la display dialog. Cela variera probablement sur chaque système testé et IMO c'est une deune fiable pour vous. Aditionellement, fiable c'est quand ça marche à tous les coups pour quiconque l'essaie.
user3439894
@ user3439894 J'ai oublié de mentionner une mise en garde importante. S'il vous plaît voir ma réponse mise à jour. Ma méthode est-elle fiable sur votre système, lorsque le display dialog en question n’est pas le dialogue initial d’un AppleScript (et quand vous exécutez le fichier .scpt en dehors d’un environnement comme Script Editor.app ou Automator.app)
rubik's sphere
D'accord, ce n'est que si elle est exécutée en tant qu'application autonome qu'elle semble fiable. Évidemment, je n'ai pas fait de tests approfondis, mais il s'agissait certainement d'une application très différente, exécutée sous forme d'application compilée ou exécutée dans Script Editor. Si j’avais un besoin réel, ce n’est pas le cas pour le moment, je verrais probablement si un dialogue pouvait être fait dans Cocoa-AppleScript afin de ne pas sélectionner la réponse par défaut. Belle solution de contournement cependant. Je vais lui donner un +1 pour l'ingéniosité.
user3439894
@ user3439894 Merci. Ce n'est pas aussi bon qu'une réponse user3439894, mais ça bat les autres réponses :). Juste pour être clair, mon code ne seulement fonctionne de manière fiable lorsqu'il est enregistré en tant que fichier .app autonome. Il fonctionne également de manière fiable en tant que fichier .scpt si ce fichier .scpt est déclenché par FastScripts.app ou dans Terminal.app via osascript.
rubik's sphere
Quand j'ai dit " D'accord, ce n'est que si elle est exécutée en tant qu'application autonome qu'elle semble fiable. "Comprenez que c’était une comparaison entre le .app et l’exécution de Script Editor, c’est tout ce que j’avais testé. C’est agréable de savoir que cela fonctionne également dans d’autres scénarios. Ne vous vendez pas trop vite, c’est une bonne réponse dans les circonstances ! :)
user3439894