Escritura en NSUserDictionaryReplacementItems con valores predeterminados

1

El siguiente comando lee el NSUserDictionaryReplacementItems. Las teclas se denominan accesos directos de texto en OS X.

defaults read NSGlobalDomain NSUserDictionaryReplacementItems

Quiero crear nuevos accesos directos usando el comando defaults , porque las plistas en Mavericks ahora están en caché (y por varias otras razones). Como puede ver en la salida del comando anterior, enumera otras claves y valores. ¿Cómo accedería a las claves y valores dentro de la clave principal NSUserDictionaryReplacementItems ? La página de manual de defaults no dice cómo (o si) se puede hacer.

    
pregunta Zettt 16.11.2013 - 10:29

1 respuesta

2

Diferentes formas de agregar un reemplazo:

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>'

Diferentes formas de reemplazar la lista completa:

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>'

Cierre y vuelva a abrir las aplicaciones para aplicar los cambios.

Editar: los cambios realizados con defaults se pierden si abre la pestaña Texto del panel de preferencias del teclado. Para evitarlo, use un script como este:

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%?})"

Los reemplazos se guardan en ~/Library/Dictionaries/CoreDataUbiquitySupport/$USER~*/UserDictionary/local/store/UserDictionary.db incluso si iCloud está deshabilitado.

    
respondido por el user495470 16.11.2013 - 12:05

Lea otras preguntas en las etiquetas