Ich habe also ein einfaches AppleScript, von dem ich denke, dass es eine Reihe von Tasten eingeben sollte, aber das Punktzeichen wird in den virtuellen Maschinen von VMware Fusion nicht gedruckt. Das ist seltsam, weil mein Periodenschlüssel ( .) in diesen VMs wie gewohnt einen Punkt eingibt.
Hier ist meine neueste Version, die ich ausprobiert habe:
on run {input, parameters}
set file_text to "this another test: ... hello ..."
delay 0.3
repeat with ch in file_text
tell application "System Events" to keystroke ch
delay 0.1
end repeat
return input
end run
Ich habe dies als Dienst in Automator erstellt. Ich führe dies aus, indem ich zu meiner Anwendung gehe und dann in der Titelleiste Dienste -> Quicktype auswähle.
Es sollte nur den Text eingeben this another test: ... hello ...
. In vielen Anwendungen tut es genau das.
In einer FreeBSD-VM wird durch Drücken von .ein Punkt auf der Shell gerendert (wie normal). Wenn das obige Skript ausgeführt wird, sehen die Punkte jedoch wie Backspaces aus. Endresultat:
Rendert in einer Windows-VM .einen Punkt im Editor (wie normal). Wenn das obige Skript ausgeführt wird, scheinen die Punkte jedoch vollständig ignoriert zu werden. Endresultat:
Gibt es eine Möglichkeit, das Drücken der Tasten aus einer Zeichenfolge in AppleScript wirklich zu emulieren? Denn der obige Weg tut das eindeutig nicht.
Weiß jemand, warum das oben beschriebene Verhalten auftritt? Warum funktioniert das in TextMate und Terminal und anderen Mac-Apps, aber nicht in Fusion-VMs?
Ich verstehe nicht, warum das nicht funktioniert, aber ich habe eine Lösung. Ich habe herausgefunden, dass das Ausführen tell application "System Events" to key code 47
einen Punkt korrekt sendet.
Also wickelte ich meinen Lesevorgang in eine Bedingung wie diese ein:
on run {input, parameters}
#set input_file to "/path/to/file"
#set file_text to read input_file
set file_text to "test: ... hello ..."
delay 0.3
repeat with ch in file_text
if ch as string = "." then
tell application "System Events" to key code 47
else
tell application "System Events" to keystroke ch
end if
delay 0.1
end repeat
return input
end run
Doktor G.
Gregor Schmitt
u = Address.first
. Früher habe ichvim
alles geschrieben, also musste ich nichts umwandeln, wie es manche Textverarbeitungsprogramme tun.