• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

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
---
 
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.
 
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 :(
 
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.
 
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.
 
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
 
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>  ';
 
Guter tipp, das probier ich gleich mal aus, danke.

Grüsse, Ronald
---
 
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
---