Bereiche
News
Rewind
Tipps & Berichte
Forum
Galerie
Journals
Events
Umfragen
Themenwoche
Kleinanzeigen
Interaktiv
Anmelden
Registrierung
Zu allen empfangenen Nachrichten
Suche...
Zur erweiterten Suche
Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum
>
Software
>
Aktuelle Rechtschreibkorrektur mit Apple Script
Aktuelle Rechtschreibkorrektur mit Apple Script
Dom Juan
14.01.19
19:16
Hallo,
Ich versuche grade ein Apple Script auf die Beine zu bekommen, welches mir nur sagt welche Sprache grade als Rechtschreibkorrektur dient. Aber das hier
tell application "System Preferences"
activate
reveal anchor "Text" of pane id "com.apple.preference.keyboard"
delay 0.5
tell application "System Events"
tell pop up button 3 of tab group 1 of window 1 of application process "System Preferences"
get (value) of menu 1
print (value) of menu 1
end tell
end tell
quit
end tell
Schlägt fehl. Ab dem " get (value)".
Hilft mir flott wehr? 😃 Danke!
Hilfreich?
0
Kommentare
Dom Juan
14.01.19
19:19
Nächste Frage wäre dann übrigens, ob es eine Möglichkeit gibt, dass System Prefs dabei nicht das aktuell offene Programm "verdrängt", sondern den Ablauf im Hintergrund macht.
Hilfreich?
0
Megaseppl
14.01.19
21:56
Versuch es mal damit:
tell application "System Preferences"
activate
reveal anchor "Text" of pane id "com.apple.preference.keyboard"
delay 0.5
tell application "System Events"
tell pop up button 3 of tab group 1 of window 1 of application process "System Preferences"
display dialog value as string buttons {"Ich hasse Apple Script!"}
end tell
end tell
quit
end tell
Hilfreich?
0
Megaseppl
14.01.19
21:59
Und wenn du es nicht im Vordergrund haben willst, benutze dies:
tell application "System Preferences"
reveal anchor "Text" of pane id "com.apple.preference.keyboard"
delay 0.5
tell application "System Events"
tell pop up button 3 of tab group 1 of window 1 of application process "System Preferences"
display dialog value as string buttons {"Ich hasse Apple Script immernoch!"}
end tell
end tell
quit
end tell
Hilfreich?
0
MikeMuc
14.01.19
22:27
Gibts da echt kein Setting was man da auslesen kann. Also was, was sich mit do script "Defaults read xxx.yyy.zz auslesen läßt? Irgendwo muß das OS doch die Einstellung speichern.
UI-Scripting ist doch immer nur eine Notlösung wenn alle anderen Stricke schon gerissen sind.
Hilfreich?
+4
Dom Juan
15.01.19
06:54
@Megaseppl
Supi, klein Juan dankt Dir 😉
@MikeMuc
Keine Ahnung 🤷🏻♂️ Das übersteigt bei weitem meine bescheidenen Kenntnisse 😃
Hilfreich?
0
MikeMuc
15.01.19
09:44
Dom Juan
??? Den das ist eigentlich deutlich einfacher und kürzer als UI Scripting welches schon beim Update wieder „kaputt“ gehen kann.
In irgendeiner .plist wir die Einstellung schon drin stehen. Und dann ist man mit defaults read um Längen besser dran.
Hilfreich?
+2
Megaseppl
15.01.19
12:08
MikeMuc
Dom Juan
??? Den das ist eigentlich deutlich einfacher und kürzer als UI Scripting welches schon beim Update wieder „kaputt“ gehen kann.
In irgendeiner .plist wir die Einstellung schon drin stehen. Und dann ist man mit defaults read um Längen besser dran.
Grundsätzlich gebe ich dir da recht. Dort wird vermutlich aber nur ein sprachneutraler Referenzwert drin stehen statt der Sprachbezeichnung als normaler Namens-String. Im besten Fall ein Language-ISO-Wert oder ein Culture-Wert ("en" bzw. "en-GB"), im schlimmsten Fall nur eine ID oder UID als Referenz.
Eleganter fände ich über die Klasse NSSpellChecker und dessen Funktion language() die aktuelle Sprache auszulesen. Da muss man die plist nicht kennen.
Wird aber in Apple Script nicht gehen.
Hilfreich?
0
MikeMuc
15.01.19
14:09
So, nun bin rich bin wenig neugierig geworden.
In dem fraglichen Menü steht bei mit (10.12.6 entweder "Automatisch nach Sprache" oder ein Sprachname.
Megaseppl:
ja, da hast du ebenfalls (teilweise) Recht. Mit
do shell script "defaults read Apple Global Domain NSPreferredSpellServerLanguage" ergibt
- bei Canadian English "en_CA" und
- bei Deutsch "de"
- bei "Automatisch nach Sprache" ebenfalls "de" wenn Deutsch die Systemsprache ist.
Damit wäre prinzipiell schon mal die Sprache geklärt. Fehlt nur noch die "Übersetzungstabelle" aus der man über das Kürzel die jeweilige aktuelle Landessprache auslesen kann... Ich bin mir sicher, das unser geliebtes System irgendwo diese Tabelle irgendwo versteckt hat und man die auch auslesen kann.
So, nach einiger Suche bin ich hier
gelandet und aus dem letzen Codefetzen dort habe ich das hier abgeleitet:
set aLocaleID to do shell script "defaults read NSGlobalDomain NSPreferredSpellServerLanguage"
use framework "Foundation"
set aLocale to (current application's NSLocale's currentLocale())
set aLocaleDesc to (aLocale's displayNameForKey:(current application's NSLocaleIdentifier) value:aLocaleID)
set aDict to (current application's NSDictionary's dictionaryWithDictionary:{desc:aLocaleDesc, code:aLocaleID})
log aLocaleDesc as list
Ob die Teile mit "current Application's" noch verbesserungsbedürftig sind, kann ich mangels Wissen nicht entscheiden. Vielleicht gibt es da auch ein "current System" oder so. Aber immerhin kommt schon mal ein lesbarer Text anstatt eines Kürzels raus
Hilfreich?
+1
Dom Juan
19.01.19
13:55
Ok, ich bins nochmal.
Ich nutze das Script mit BetterTouchTool in der Touch Bar. Dort wird ein Widget angezeigt mit den Einstellungen "Run Script and Return Value". Das habe ich meinen Bedürfnissen mit Eure Hilfe folgendermaßen angepasst:
tell application "System Preferences"
reveal anchor "Text" of pane id "com.apple.preference.keyboard"
delay 0.5
tell application "System Events"
tell pop up button 3 of tab group 1 of window 1 of application process "System Preferences"
if value is "Automatic by language" then
return "🌐"
else if (value) is "Français" then
return "🇫🇷"
else if (value) is "Deutsch" then
return "🇩🇪"
else if (value) is "Italiano" then
return "🇮🇹"
else if (value) is "U.S. English" then
return "🇺🇸"
else
return "❔"
end if
end tell
quit
end tell
quit
end tell
Funktioniert auch hervorragend, bis auf ein Detail - System Prefs wird nicht beendet.
Hab ich im Code was verschlafen, oder ist das ein Programmierproblem im Widget seitens der BTT Developer?
Hilfreich?
0
Dom Juan
19.01.19
14:13
Mist, war zu langsam um meinen Vorherigen Beitrag zu löschen. Da das Script läuft sobald das Widget erscheint wird die App wohl wieder neu gestartet.
Ein Workaround der funktioniert ist, dem Knopf der die Touch Bar Gruppe schließt eine Folgeaktion zu verpassen, die System Preferences beendet.
Frage dazu.
tell application "System Preferences"
quit
end tell
Ist mir da etwas zu stumpf. Ich hätte System Prefs gerne nur geschlossenen, wenn der Textreiter auch offen ist um mir Unfälle zu ersparen, wenn die Prefs mal in nem anderen Fenster offen sind.
tell application "System Preferences"
if exists anchor "Text" of pane id "com.apple.preference.keyboard" then
quit application "System Preferences"
else
donothing
end if
end tell
Schließt die App aber ganz brutal, egal ob der Text anchor jetzt offen ist oder nicht ☹️ Hat jemand die Güte einem Laien zu erklären warum?
Hilfreich?
0
Weia
19.01.19
17:00
Dom Juan
Schließt die App aber ganz brutal, egal ob der Text anchor jetzt offen ist oder nicht ☹️ Hat jemand die Güte einem Laien zu erklären warum?
Es ist aber von Effizienz, Schnelligkeit usw. doch – entschuldige – wirklich grotesk, die Applikation
System Preferences
zu bemühen, nur um einen
defaults
-Wert herauszufinden. Das geht viel einfacher und ohne solche Komplikationen direkt, und
MikeMuc
hat ja auch schon beschrieben, wie.
„“I don’t care” is such an easy lie. (The Warning, “Satisfied”)“
Hilfreich?
+2
Weia
19.01.19
17:06
Dom Juan
@MikeMuc
Keine Ahnung 🤷🏻♂️ Das übersteigt bei weitem meine bescheidenen Kenntnisse 😃
Also, wer es schafft, AppleScript zu verstehen, dem sollte doch nicht mal die allgemeine Relativitätstheorie nennenswerte Mühen bereiten. Mir jedenfalls ist Ersteres in Gegensatz zu Letzterem nie gelungen.
„“I don’t care” is such an easy lie. (The Warning, “Satisfied”)“
Hilfreich?
+2
Dom Juan
19.01.19
17:44
Sicherlich. Leider beschränken sich ,eine Scriptkenntnisse auf Variablen, und das grobe Verstehen wenn ich was lese - von Schreiben ist da noch keine Rede. Daher verstehe ich MikeMucs gut gemeintem Beitrag zwar, kann ihn jedoch nicht alleine in ein funktionierendes Script umwandeln. Und da meine UI Lösung funktioniert hab ichs dabei belassen 🤷🏻♂️
Deswegen begnüge ich mich momentan mit der Hilfestellung, wie ich ein bestimmtes Programm nur dann beende, wenn ein bestimmtes Fenster mit einem bestimmten Reiter offen ist 😇
Sollte sich jemand die Mühe machen wollen, und mir einen Crashkurs über Scripting zu machen der mir bei meinem Problemchen hilft ist das natürlich auch willkommen - nur erwarte ich dies von niemandem 🙂 Ich bin mit einer Zeile UI Scripting happy!
Hilfreich?
0
Weia
19.01.19
19:38
Hier ist eine Shellskript-Version für Deine gewünschte Funktionalität:
#!/bin/sh
MULTI=`defaults read -g NSSpellCheckerAutomaticallyIdentifiesLanguages`
if [ $MULTI -eq 1 ]; then echo 🌐
else
MULTI=`defaults read -g NSPreferredSpellServerLanguage`
if [ $MULTI = fr ]; then echo 🇫🇷
elif [ $MULTI = de ]; then echo 🇩🇪
elif [ $MULTI = it ]; then echo 🇮🇹
elif [ $MULTI = en ]; then echo 🇺🇸
else echo ❔
fi
fi
Sollte selbsterklärend sein.
Ich kenne
BetterTouchTool
nicht und weiß daher nicht, ob es auch mit Shellskripten umgehen kann.
Falls nein, gibt es ja wohl auch eine AppleScript-Funktion, um ein Shellskript auszuführen. Das überlasse ich aber anderen – wie gesagt, ich mag AppleScript nicht mal mit der Kneifzange anfassen…
„“I don’t care” is such an easy lie. (The Warning, “Satisfied”)“
Hilfreich?
+2
Dom Juan
19.01.19
20:11
Ist selbsterklärend, danke Dir! Ist auch unbedeutend (etwa 3x) schneller als mein UI 😯
Auf das Risiko hin erschlagen zu werden, zwei Dinge:
Ich habe noch ein importiertes Lexikon (da macOS die entsprechende Sprache nicht standardmäßig mitliefert) welches mit in die erkannte Liste sollte. Wie kann ich den entsprechenden Wert auslesen?
Gibt es ein Script, mit dem ich die Sprache auch ändern könnte?
Mit Apple Script geht das dann (zugegebener Maßen sehr be💩) mit dem Script
tell application "System Preferences"
reveal anchor "Text" of pane id "com.apple.preference.keyboard"
delay 0.5
tell application "System Events"
tell pop up button 3 of tab group 1 of window 1 of application process "System Preferences"
if (value) is not "Deutsch" then
click
click menu item "Deutsch" of menu 1
else if (value) is "Français" then
click
click menu item "Automatic by Language" of menu 1
end if
end tell
end tell
quit
end tell
Geht sowas auch mit einem Shellskript? (*hoff*)
Danke für die Hilfsbereitschaft und Geduld mit einem Studenten 👍🏼
Hilfreich?
+1
Weia
19.01.19
20:47
Dom Juan
Ich habe noch ein importiertes Lexikon (da macOS die entsprechende Sprache nicht standardmäßig mitliefert) welches mit in die erkannte Liste sollte. Wie kann ich den entsprechenden Wert auslesen?
Wenn Du die Sprache in den
Systemeinstellungen
eingestellt hast, gibst Du in einem
Terminal
-Fenster
defaults read -g NSPreferredSpellServerLanguage
ein und drückst
Return
. Dann sollte im
Terminal
-Fenster eine
de
usw. vergleichbare Ausgabe zu lesen sein, evtl. auch mit mehr Zeichen (britisches Englisch wäre z.B.
en_GB
).
Gibt es ein Script, mit dem ich die Sprache auch ändern könnte?
Grundsätzlich ist das supersimpel und ganz entsprechend; Du ersetzt einfach
read
durch
write
und gibst am Ende den gewünschten Wert an. Das „Komplizierteste“ ist zu berücksichtigen, dass
Automatisch nach Sprache
nicht eine unter vielen möglichen gleichberechtigten Spracheinstellungen ist (wie das Pop-Up in den
Systemeinstellungen
nahelegt), sondern eine übergeordnete Einstellung, die alle spezifischen Spracheinstellungen außer Kraft setzt.
Also: Um
Automatisch nach Sprache
zu aktivieren, kannst Du im
Terminal
(oder einem Skript)
defaults write -g NSSpellCheckerAutomaticallyIdentifiesLanguages 1
eingeben; welche spezifische Sprache ausgewählt war (und intern bleibt!), ist dabei egal.
Willst Du zu der zuvor schon eingestellten spezifischen Sprache zurück, würdest Du einfach
defaults write -g NSSpellCheckerAutomaticallyIdentifiesLanguages 0
eingeben.
Willst Du zugleich (so wie im Pop-Up in den
Systemeinstellungen
) auch angeben, welche spezifische Sprache genutzt werden soll, so würdest Du z.B. für Deutsch
defaults write -g NSSpellCheckerAutomaticallyIdentifiesLanguages 0; defaults write -g NSPreferredSpellServerLanguage de
eingeben. (Zumindest auf meinem ollen macOS 10.9. bemerken die
Systemeinstellungen
das allerdings erst nach einem Neustart …)
Der größte Aufwand wäre (wie so oft) bei einem entsprechenden Skript dann die Nutzerschnittstelle. Sprich, ich weiß nicht, wie der Mechanismus ist, mit dem Du dem Skript dann würdest mitteilen wollen, welche Sprache ausgewählt werden soll. Je nachdem müsste dem Skript dann ein entsprechender Parameter beim Aufruf übergeben werden, und das Skript müsste den auswerten und je nachdem die entsprechenden
defaults
-Werte wählen.
„“I don’t care” is such an easy lie. (The Warning, “Satisfied”)“
Hilfreich?
+3
Dom Juan
19.01.19
21:01
Alles gut! Danke Dir!!!
Mit dem Path
/bin/bash
und dem Parameter -c läuft das wie geschmiert!!
Hilfreich?
0
Weia
19.01.19
21:17
Dom Juan
Alles gut!
Prima!
Danke Dir!!!
Bitte.
„“I don’t care” is such an easy lie. (The Warning, “Satisfied”)“
Hilfreich?
0
Weia
20.01.19
15:32
Nur zur Vermeidung von Missverständnissen, falls hier später mal jemand drauf stößt:
Weia
(Zumindest auf meinem ollen macOS 10.9. bemerken die
Systemeinstellungen
das allerdings erst nach einem Neustart …)
Damit ist ein Neustart des Programms
Systemeinstellungen
gemeint und nicht etwa ein Neustart von macOS. Alle anderen Programme reagieren auch sofort angemessen, nur die
Systemeinstellungen
rechnen eben nicht damit, dass sich jemand anderes erdreistet, „ihre“ Werte zu verändern.
„“I don’t care” is such an easy lie. (The Warning, “Satisfied”)“
Hilfreich?
0
Kommentieren
Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.
Bericht: M5 Pro trennt GPU- von CPU-Kernen für ...
iPhone 17 "Air": Weitere Informationen zu Preis...
Vor 35 Jahren: Der "Diesel" wird in die Apple-S...
M4 Mac mini im Effizienztest: Hohe Ersparnis im...
Gurman: Apple Stores erhalten neue Produkte (Ak...
Mac-Tipp: Was tun, wenn „Volume auswerfen“ sche...
Kurz: WhatsApp mit Mehrfach-Accounts pro Device...
Neues iPhone SE, MacBook Air und iPad Air vorau...