Para alternar el estado de Sustituciones de texto intercambiando el ~/Library/Preferences/.GlobalPreferences.plist archivo , tendría que tener una forma de actualizar la copia en caché de la misma en la memoria. Si se trata de un Objetivo-C programador y tener Xcode puedes rodar tu propio aplicación para actualizar el archivo y lo que se almacena en la memoria. Sin eso, aquí hay un método que utiliza un utilidad de línea de comandos de terceros , shortcuts
y un shell script que funciona para mí.
El bash shell script He escrito utiliza el shortcuts
ejecutable binario a copia de seguridad , borrar y restaurar el Sustituciones de texto . El copia de seguridad y restaurar son sencillas y directas en comparación con la eliminación del Sustituciones de texto como shortcuts
sólo puede eliminar una acceso directo a la vez. Es relativamente rápido. Tengo más de 200 artículos en mi Sustituir | Con lista y el script tarda unos 4 segundos en borrarlos, y una fracción de segundo en restaurarlos.
Esto se probó bajo MacOS Catalina y MacOS Big Sur con Lengua y región ajustes en Preferencias del sistema ajustado a Inglés (EE.UU.) - Primaria y me ha funcionado sin problemas 1 .
- 1 Asume la configuración necesaria y adecuada en <strong>Preferencias del sistema </strong>> <strong>Seguridad y privacidad </strong>> <strong>Privacidad </strong>se han fijado/abordado según las necesidades.
Nota: Primero haz una copia de seguridad manual de tu Sustituciones de texto visitando la página web Preferencias del sistema > Teclado > Texto , pulsando A para resaltar todas las entradas de Sustituir | Con lista entonces click-hold con el ratón y luego arrastrar y soltar en el Escritorio o cualquier carpeta de un Buscador ventana .
Esto creará un archivo llamado Sustituciones de texto.plist que se puede arrastrar y soltar en el Sustituir | Con lista en Preferencias del sistema > Teclado > Texto para restaurar manualmente.
El ejemplo shell script código junto con el shortcuts
utilidad de línea de comandos hace su propia copia de seguridad y restaura a partir de su copia de seguridad, pero siempre hace la copia de seguridad manual descrita anteriormente sólo para tenerla si alguna vez se necesita.
Instalar shortcuts
mediante uno de los métodos mencionados en el enlace.
He descargado el código fuente revisó y verificó que no había nada siniestro en el código y luego lo construyó con Xcode .
También está disponible a través de Homebrew , en Terminal brew install rodionovd/taps/shortcuts
o descargar como binario preconstruido .
Nota: Las siguientes instrucciones y ejemplo shell script código son para su uso como ejecutable shell script en Terminal y o puede ser utilizado en un Ejecutar Shell script acción en un Automatizador Servicio/Acción Rápida y se le asignó un atajo de teclado en: Preferencias del sistema > Teclado > Atajos > Servicios
Yo sugeriría probar como un ejecutable shell script primero para asegurarse de que funciona para usted, luego utilice el ejemplo shell script código en un Automatizador Servicio/Acción Rápida .
En Terminal , ejecute lo siguiente comando compuesto :
Asume la pwd
es su INICIO directorio .
f=trw; touch "$f"; open -e "$f"; chmod +x "$f"
Nota: trw
= Alternar Reemplazar con (Tenía que ponerle un nombre.)
En la apertura trw documento copiar y pegar el ejemplo shell script código en él, y luego guárdalo y ciérralo.
De vuelta en Terminal :
./trw
Cambiará el estado del Sustituciones de texto .
Nota: Después de la prueba, mueva trw
a un directorio definido en el PATH
para que esté disponible sin necesidad de teclear: ./
Ejemplo shell script código :
#!/bin/bash
# set -e
# set -x
shortcuts="/usr/local/bin/shortcuts"
automator=false # true or false
message() {
[ "${1}" == "xmissing" ] && msg=" The 'shortcuts' executable is missing!"
[ "${1}" == "already" ] && msg=" The text substitutions deletion is already in progress!"
[ "${1}" == "backedup" ] && msg=" The text substitutions have been backed up."
[ "${1}" == "nobackup" ] && msg=" No text substitutions to backup or restore!"
[ "${1}" == "restored" ] && msg=" The text substitutions have been restored."
[ "${1}" == "deleting" ] && msg=" The text substitutions deletion is in progress..."
[ "${1}" == "finished" ] && msg=" The text substitutions deletion has completed."
[ $automator == false ] && printf '%s\n' "${msg}"
[ $automator == true ] && printf '%s\n' "$(date -j) ${msg}" >> message.txt
[ $automator == true ] && [ -n "${2}" ] && \
osascript -e "display notification \"${msg}\" with title \"Toggle Replace With\""
}
backupdir="$HOME/Library/Application Support/com.$USER.shortcuts"
[ ! -d "${backupdir}" ] && mkdir -p "${backupdir}"
cd "${backupdir}" || exit
backup="${backupdir}/Text_Substitutions.plist"
lockdir="/private/tmp/com.$USER.shortcuts"
[ ! -e "${lockdir}" ] && mkdir -p "${lockdir}"
cd "${lockdir}" || exit
if [ ! -x "${shortcuts}" ]; then
message "xmissing"
[ $automator == true ] && message "xmissing" "notification"
exit
fi
if [ -e ".lock" ]; then
message "already"
[ $automator == true ] && message "already" "notification"
exit
fi
contents="$(defaults read -g NSUserDictionaryReplacementItems)"
empty='(
)'
if [ ! -e "${backup}" ] && [ "${contents}" != "${empty}" ]; then
"${shortcuts}" read --as-plist | tee "${backup%.*}.$(date '+%s').plist" > "${backup}"
message "backedup"
elif [ -e "${backup}" ] && [ "${contents}" != "${empty}" ]; then
"${shortcuts}" read --as-plist | tee "${backup%.*}.$(date '+%s').plist" > "${backup}"
message "backedup"
elif [ !-e "${backup}" ] && [ "${contents}" == "${empty}" ]; then
message "nobackup"
[ $automator == true ] && message "nobackup" "notification"
exit
fi
if [ "${contents}" == "${empty}" ]; then
"${shortcuts}" import "${backup}"
message "restored"
[ $automator == true ] && message "restored" "notification"
else
touch ".lock"
message "deleting"
[ $automator == true ] && message "deleting" "notification"
while IFS= read -r line; do
"${shortcuts}" delete "${line}"
done <<< "$("$shortcuts" read | awk 'sub(/^"/, "", $2) sub(/"$/, "", $2) $1 ~ /^[0-9]+:/ { print $2 }')"
sleep 1
rm ".lock"
message "finished"
[ $automator == true ] && message "finished" "notification"
fi
Notas:
Tal y como está codificado, el ejemplo shell script código asumir la shortcuts
se encuentra en /usr/local/bin/shortcuts
, cambie lo que corresponda. Se codifica así /usr/local/bin/
no está en el PATH
pasado a un Ejecutar Shell script acción en un Automatizador Servicio/Acción Rápida .
La primera vez que el shell script crea una copia de seguridad del Sustituciones de texto para restaurar, por lo que es imperativo que haya realmente algún sustituciones de texto a la copia de seguridad ¡! Cada vez se hace una copia de seguridad actual antes de borrarlos del ~/Library/Preferences/.GlobalPreferences.plist archivo y se restaura desde la última copia de seguridad.
La razón por la que un aplicación de terceros se está utilizando es en este caso de uso hace algo que el MacOS utilidades por defecto no pueden hacer, que es actualizar dinámicamente los cambios en el sistema. En otras palabras, el defaults
comando así como el /usr/libexec/PlistBuddy
comando en este caso de uso no actualiza el sistema a los cambios y tiene el mismo problema que cambiar el ~/Library/Preferences/.GlobalPreferences.plist archivo .
Cuando se utiliza el ejemplo shell script código en un Ejecutar Shell script acción en un Automatizador Servicio/Acción Rápida , es necesario establecer automator=true
en la línea que sigue, por ejemplo shortcuts="/usr/local/bin/shortcuts"
Las copias de seguridad se guardan en:
$HOME/Library/Application Support/com.$USER.shortcuts/Text_Substitutions.plist
El ejemplo shell script código cuando se ejecuta como un ejecutable shell script emite mensajes a stdout
y se ven a medida que se avanza, sin embargo, cuando se utiliza en un Ejecutar Shell script acción en un Automatizador Servicio/Acción Rápida los mensajes se muestran en Centro de notificaciones y también se registra en:
/private/tmp/com.$USER.shortcuts/message.txt
Intentaré que añadas comentarios a la código y o añadir notas adicionales aquí en los próximos días.
Nota de descargo de responsabilidad: El ejemplo shell script código es sólo eso y sin ningún tipo de inclusión tratamiento de errores no contiene ningún otro tratamiento de errores según convenga. Es responsabilidad del usuario añadir cualquier tratamiento de errores como sea apropiado, necesario o deseado.