• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

Fortgeschrittene Textersetzung

Pantagruel

Jonagold
Registriert
18.01.07
Beiträge
21
Hier zu finden: Systemeinstellungen/Sprache & Text/Text

Hallo,
ich möchte ein paar Textersetzungen automatisch anlegen und mache das mit einem UNIX Script

Beispiel um einen hochgestellten Index zu erhalten:
defaults write -g NSUserReplacementItems -array-add '{ "on" = 1 ;"replace" = "ccm"; "with" = "cm³";}'

Leider funktioniert es nicht perfekt. Mein Eintrag wird zwar, wie erwartet, angelegt aber nicht auch aktiviert. Dafür ist "on" = 1 zuständig.

Schaut man sich die plist an, dann sieht man das Problem.
Der Wert "on" ist dort Number. Die von mir angelegten sind aber String.

Jetzt Rätsel ich rum, wie ich das als Number anlegen kann.

Hat jemand eine Idee?
Das Löschen der Leerzeichen in "on" = 1 habe ich schon probiert.

Über Tipps würde ich mich freuen.

Grüsse, Ronald
---
 

helge

Leipziger Reinette
Registriert
17.10.06
Beiträge
1.791
Ich verstehe nicht viel von defaults write und so, aber könnte man die 1 nicht zu int casten? Also so ähnlich die "on" = (int)1 ...

EDIT: der Kommentar zu diesem Video suggeriert, dass es auch -integer 1 heißen könnte.
 

Pantagruel

Jonagold
Registriert
18.01.07
Beiträge
21
Ja, das steht ja in der Man Page von Defaults so beschrieben.
Ich habe schon alle Varianten ausprobiert, kriege aber immer Fehler, wenn ich von dem abweiche was ich habe :(
 

Pantagruel

Jonagold
Registriert
18.01.07
Beiträge
21
Wenn ich übrigens mit 'defaults read -g NSUserReplacementItems' die replacements auslese, erhalte ich völlig richtig folgendes:

{
on = 1;
replace = "5/8";
with = "\\U215d";
},
{
on = 1;
replace = "7/8";
with = "\\U215e";
},
{
on = 1;
replace = ccm;
with = "cm\\U00b3";
},

Man beachte, dass die Einträge vor meinem 'ccm' Eintrag alle das gleiche 'on = 1;' stehen haben.
Der Unterschied ist tatsächlich nur der Feldtyp in der plist.
 

helge

Leipziger Reinette
Registriert
17.10.06
Beiträge
1.791
Hat es was zu sagen, dass du oben "on" = 1 und unten on = 1 (ohne "") zu stehen hast?

Kann dir die Seite weiterhelfen?
Hier heißt es zum Beispiel
Code:
defaults write com.apple.Safari AppleSmoothFontsSizeThreshold -int 8

Vielleicht will er auch gar kein int, sondern bool oder irgend etwas anderes.
 

Pantagruel

Jonagold
Registriert
18.01.07
Beiträge
21
Also das 'on = 1 (ohne "")' ist das Ergebnis in der xml Datei. So wird das dort hineingeschrieben.
Das '"on" = 1' stammt von mir, ist syntaktisch aber richtig, weil das 'on' in diesem Falle ein Keyword ist. Ich habe es aber auch ohne die Anführungszeichen versucht und das Resultat war das gleiche.
Unten ein Screenshot aus der plist Datei.

- Item 14 ist standardmässig angelegt und aktiviert. on=1 und eine Number.
- Item 15 wurde von mir angelegt und aktiviert. Aber on=1 aber ein String.
Wenn ich dann in in die Systemeinstellungen gehe und mein Atem per Hand aktiviere ändert sich der Parameter meines Eintrags auch in ein Number.

Dass das irgendwie mit -int gehen muss ist mir schon klar. Nur wo kommt das in diesem Falle hin. Ich habe ja schon jede Menge Varianten probiert aber keine geht :(

Grüsse, Ronald
---

Bildschirmfoto201-0618_060844.png
 

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
Benutze statt der alten NextStep-Syntax einfach die modernere XML-Form.
Die ist sowieso übersichtlicher in der Gestaltung:
Code:
defaults write -g NSUserReplacementItems -array-add '

<dict>

    <key>on</key>
      <integer>1</integer>

    <key>replace</key>
      <string>Banane</string>

    <key>with</key>
      <string>Apfel</string>

</dict>  ';
(Whitespace natürlich optional)

BTW
"So richtig" korrekt wäre übrigens das hier:
Code:
defaults write -g NSUserReplacementItems -array-add '

<dict>

    <key>on</key>
      [COLOR="blue"]<true/>[/COLOR]

    <key>replace</key>
      <string>Banane</string>

    <key>with</key>
      <string>Apfel</string>

</dict>  ';
 

Pantagruel

Jonagold
Registriert
18.01.07
Beiträge
21
Guter tipp, das probier ich gleich mal aus, danke.

Grüsse, Ronald
---
 

Pantagruel

Jonagold
Registriert
18.01.07
Beiträge
21
Cool, das war die Lösung. Darf ich mal fragen, wo Du das her hast?
Interessiert sich sehr.

Apple schreibt übrigens dies als xml:

<dict>
<key>on</key>
<integer>1</integer>
<key>replace</key>
<string>7/8</string>
<key>with</key>
<string>⅞</string>
</dict>

Ich habe aber die Variante mit <true/> gewählt und die geht auch. Genaugenommen gehen beide Varianten.

Grüsse, Ronald
---