1 votos

¿Cómo modificar el archivo .GlobalPreferences.plist?

mi objetivo es crear un atajo de teclado para activar/desactivar el "reemplazar con" en Mac.
La idea es crear una automatización que se pueda activar con un acceso directo a través de los servicios.

Lo que hace el atajo es cambiar dos similares .GlobalPreferences.plist archivos, uno con "reemplazar con" claves uno sin.

Aquí está mi código: enter image description here

El problema es que por alguna razón no cambia los archivos. Pero en una carpeta normal funciona.

En detalle:
corriendo mv ~/Library/Preferences/.GlobalPreferences.plist ~/Library/Preferences/.GlobalPreferencesTMP.plist funciona perfectamente, las propiedades se copian.
Por otro lado, si ejecuto mv /Library/Preferences/.GlobalPreferences2.plist ~/Library/Preferences/.GlobalPreferences.plist No mantiene las propiedades de .GlobalPreferences2.plist pero en su lugar obtuve exactamente lo mismo que .GlobalPreferences.plist con la que empecé.

1voto

user3439894 Puntos 5883

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.


enter image description here


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.

1voto

benwiggy Puntos 8

Las ventanas TextView que utilizan la sustitución de texto de MacOS suelen ofrecer un elemento de menú para activar y desactivar la sustitución de texto.

Edición > Sustituciones > Sustitución de texto

enter image description here

Puede establecer un atajo de teclado para esta opción de menú en Preferencias del Sistema > Teclado > Atajos .

enter image description here

(Aquí lo he hecho sólo para TextEdit, pero puedes hacerlo para todas las aplicaciones si quieres).

Alternando el comando de teclas me da lo siguiente, cuando escribo omw :

enter image description here

Esto logra su objetivo de cambiar el estado de reemplazo sin el complicado esfuerzo de mantener y cambiar dos archivos completos de preferencias.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X