AppleScript: Ist es möglich, in einem Eingabedialog eine nicht ausgewählte "Standardantwort" zu haben?

default answerWenn man den Parameter in in AppleScript verwendet display dialog, wird der eingestellte Text default answerbei der Anzeige des Dialogs automatisch hervorgehoben.

Ist es möglich, eine Standardantwort anzugeben, ohne dass die Antwort hervorgehoben wird?

Ich möchte idealerweise, dass der Cursor hinter dem letzten Zeichen der Standardantwort platziert wird, sodass der Benutzer Text an diese Antwort anhängen kann, ohne zuerst die Taste zu drücken ( oder schlimmer noch, versehentlich die Standardantwort zu überschreiben).

Ich denke nicht, dass es eine gute UI-Praxis ist, eine benutzerdefinierte Antwort als Standardantwort zu verwenden. Eine Standardantwort sollte entweder ja oder nein sein , aber nicht nein, aber ... (oder ja, aber ... ).
@klanomath Der betreffende Dialog erhält keine Ja/Nein-Eingabe vom Benutzer - er erhält ein Schlüsselwort. Abhängig von der Absicht des Benutzers ist das Standardschlüsselwort manchmal ausreichend. In anderen Fällen möchte der Benutzer das Schlüsselwort vollständig entfernen. Meistens möchte der Benutzer jedoch Text an dieses Schlüsselwort anhängen (weshalb ich möchte, dass das default answernicht ausgewählt ist, damit der Benutzer sofort Text anhängen kann, ohne zuerst die rechte Pfeiltaste drücken zu müssen). Der Einsatz von a default answerist für mich der effizienteste Weg, all diese Optionen dem Benutzer zur Verfügung zu stellen.

Antworten (1)

Ich habe es herausgefunden.

Drückt man nur Millisekunden vor der Anzeige des Dialogs die rechte Pfeiltaste , so default answerwird der nicht ausgewählt und der blinkende Cursor wird hinter den Standardtext gesetzt.

Sie können diese Aktion in AppleScript wie folgt ausführen:

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

Theoretisch sollte die obige Lösung nicht funktionieren. Theoretisch sollte der Tastendruck beginnen und abgeschlossen sein, bevor der display dialogBefehl eingeleitet wird. Aber diese Methode funktioniert, warum auch immer.


Hinweis: Diese Methode funktioniert nicht, wenn Sie key code 124vor dem allerersten Dialog Ihrer AppleScript-Datei einfügen. In diesem Fall verhält sich mein obiger Code nicht wie gewünscht und der default answerText bleibt ausgewählt. (Es kann irreführend erscheinen, richtig zu funktionieren, wenn Sie den AppleScript-Code einfach in Script Editor.app oder Automator.app ausführen, aber es funktioniert nicht richtig, wenn Sie die .scpt-Datei über Fast Scripts, osascriptin Terminal.app oder jede andere Methode.)

Wenn es sich jedoch display dialogum den zweiten, dritten oder fünfzigsten Dialog in einer AppleScript-Datei handelt, funktioniert meine Lösung ordnungsgemäß. Fragen Sie mich nicht, warum es beim ersten Dialog nicht funktioniert (weil ich es nicht weiß).

Sie haben also keine andere Wahl, als die Dialoge der AppleScript-Datei neu anzuordnen, sodass der erste Dialog keine default answer.

Wenn Ihr Anfangsdialog ein default answernicht ausgewähltes haben muss, besteht eine Problemumgehung darin, einen Dialog einzufügen, der automatisch fortgesetzt wird, nachdem eine kurze Zeitspanne verstrichen ist. Dieser Dialog sollte unmittelbar vor dem obigen Tell-Block eingefügt werden. Es ist keine elegante Lösung, aber hier ist ein Code, der funktionieren wird:

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.

Solange es nicht dem Anfangsdialog eines Skripts vorausgeht, habe ich persönlich meine Methode als zuverlässig empfunden; es funktioniert 100% der Zeit auf meinem Computer.

Während Sie es vielleicht als zuverlässig empfunden haben, habe ich es nicht. Es hat einmal in zehn Mal funktioniert und außerdem ist es keine programmatisch korrekte Methode, da das key code Ereignis eigentlich vor dem enden sollte display dialog. Es wird wahrscheinlich auf jedem getesteten System variieren und meiner Meinung nach ist es ein Zufall, dass es für Sie zuverlässig ist. Darüber hinaus ist zuverlässig , wenn es für jeden, der es versucht, jedes Mal funktioniert.
@ user3439894 Ich habe vergessen, einen wichtigen Vorbehalt zu erwähnen. Bitte beachten Sie meine aktualisierte Antwort. Ist meine Methode auf Ihrem System zuverlässig, wenn es display dialogsich nicht um den ersten Dialog eines AppleScripts handelt (und wenn Sie die .scpt-Datei tatsächlich außerhalb einer Umgebung wie Script Editor.app oder Automator.app ausführen)?
Okay, nur wenn es als eigenständige App ausgeführt wird, scheint es zuverlässig zu sein. Natürlich habe ich keine ausführlichen Tests durchgeführt, aber es war sicherlich ein ganz anderer Lauf als kompilierte App als im Skripteditor. Wenn ich ein echtes Bedürfnis hätte, tue ich es jetzt nicht, würde ich wahrscheinlich sehen, ob ein Dialog in Cocoa-AppleScript erstellt werden könnte, um die Standardantwort nicht auszuwählen. Schöne Problemumgehung. Ich gebe ihm +1 für Einfallsreichtum.
@user3439894 Danke. Es ist nicht so gut wie eine Antwort von user3439894, aber es übertrifft die anderen Antworten :). Nur um das klarzustellen, mein Code funktioniert nicht nur zuverlässig, wenn er als eigenständige .app-Datei gespeichert wird. Es funktioniert auch zuverlässig als .scpt-Datei, wenn diese .scpt-Datei von FastScripts.app oder in Terminal.app über osascript.
Als ich sagte: " Okay, nur wenn es als eigenständige App ausgeführt wird, scheint es zuverlässig zu sein. " verstehen Sie, dass dies als Vergleich zwischen der .app und der Ausführung im Skripteditor gemeint war, da dies alles war, was ich getestet hatte. Es ist schön zu wissen, dass es auch in anderen Szenarien funktioniert. Verkaufen Sie sich nicht unter Wert, es ist unter den gegebenen Umständen definitiv eine gute Antwort! :)
Oh, jetzt verstehe ich, was du meinst. Vielen Dank für die netten Worte!