Scrittura su NSUserDictionaryReplacementItems con valori predefiniti

1

Il seguente comando legge NSUserDictionaryReplacementItems. I tasti sono chiamati collegamenti al testo in OS X.

defaults read NSGlobalDomain NSUserDictionaryReplacementItems

Voglio creare nuove scorciatoie usando il comando defaults , perché i plists in Mavericks ora sono memorizzati nella cache (e per vari altri motivi). Come puoi vedere dall'output del comando precedente, elenca altre chiavi e valori. Come posso accedere alle chiavi e ai valori all'interno della chiave NSUserDictionaryReplacementItems principale? La pagina man per defaults non dice come (o se) ciò può essere fatto.

    
posta Zettt 16.11.2013 - 10:29
fonte

1 risposta

2

Diversi modi per aggiungere una sostituzione:

defaults write -g NSUserDictionaryReplacementItems -array-add '{on=1;replace=a;with=b;}'

defaults write -g NSUserDictionaryReplacementItems -array-add '<dict><key>on</key><integer>1</integer><key>replace</key><string>a</string><key>with</key><string>b</string></dict>'

Diversi modi per sostituire l'intero elenco:

defaults write -g NSUserDictionaryReplacementItems -array '{on=1;replace=a;with="b \"\b";}' '{on=1;replace=c;with=d;}'

defaults write -g NSUserDictionaryReplacementItems '({on=1;replace=a;with="b \"\b";},{on=1;replace=c;with=d;})'

defaults write -g NSUserDictionaryReplacementItems '<array><dict><key>on</key><integer>1</integer><key>replace</key><string>a</string><key>with</key><string>b "\b</string></dict><dict><key>on</key><integer>1</integer><key>replace</key><string>c</string><key>with</key><string>d</string></dict></array>'

Chiudi e riapri le applicazioni per applicare le modifiche.

Modifica: le modifiche apportate con defaults vengono perse se apri la scheda Testo del pannello delle preferenze della tastiera. Per impedirlo, usa uno script come questo:

date=$(date +%s)
while read -r replace with; do
  plist+="{on=1;replace=\"$replace\";with=\"$with\";},"
  sql+="INSERT INTO 'ZUSERDICTIONARYENTRY' VALUES($((++i)),1,1,0,0,0,0,$date,NULL,NULL,NULL,NULL,NULL,\"$with\",\"$replace\",NULL);"
done < <(sed 's/\/\\/g;s/"/\"/g' ~/replacements.txt)
sqlite3 ~/Library/Dictionaries/CoreDataUbiquitySupport/$USER~*/UserDictionary/local/store/UserDictionary.db "delete from ZUSERDICTIONARYENTRY;$sql"
defaults write -g NSUserDictionaryReplacementItems "(${plist%?})"

Le sostituzioni vengono salvate in ~/Library/Dictionaries/CoreDataUbiquitySupport/$USER~*/UserDictionary/local/store/UserDictionary.db anche se iCloud è disabilitato.

    
risposta data 16.11.2013 - 12:05
fonte

Leggi altre domande sui tag