3 votos

Modificar programáticamente la visibilidad y el orden de las etiquetas.

Necesito alterar de forma programática tanto la visibilidad como el orden de clasificación predeterminado de las etiquetas, explícitamente en Catalina: Tengo diferentes categorías de etiquetas que, dependiendo del proyecto en el que esté trabajando, me gustaría mostrar y ocultar en el lateral del Finder en bloque (es decir, 'comida: xxx' o 'fuente: xxx').

Estoy familiarizado con la utilidad de línea de comandos tag y las aplicaciones de Leap; ninguno parece ofrecer la opción de modificar la visibilidad u orden de clasificación.

El diccionario en com.apple.finder.plist parece listarlos en orden de visualización, y el atributo <

> parece indicar la visibilidad, pero el archivo advierte:

//
// El listado de propiedades impresas a continuación ha sido creado
// a partir de una versión binaria en el disco y no debe ser guardado ya que
// el formato ASCII es un subconjunto de la representación binaria!
//

Los datos objetivo se representan en forma binaria en values[:FinderTagDict][:remotevalue] - pero no está claro si ese es el repositorio definitivo de las propiedades, o si eso es solo parte de los atributos con formato bonito.

¿Actualizar values[:FinderTagDict][:remotevalue] en com.apple.finder.plist será suficiente para actualizar las preferencias del Finder? ¿O hay otro nivel de abstracción que necesita ser tratado?

Alternativamente, ¿hay alguna otra clase escondida que gestione los atributos kMDItemUserTags?

Por el momento, modificar la visibilidad y el orden es el caso de uso principal. El panel de preferencias no redimensionable y sin filtro simplemente no es suficiente.

(quinta vez que intento encontrar una respuesta a esto, si hay recursos por ahí que simplemente no encuentro.)

0 votos

Mirando en com.apple.finder.plist, no veo lo que estás viendo. No hay listados de FinderTagDict o remoteValue. ¿Puedes explicar con precisión cómo obtuviste ese resultado?

0 votos

Estoy mirando en ~/Library/SyncedPreferences/com.apple.finder.plist.

0 votos

Hm. Bueno, SyncedPreferences se utiliza para la sincronización de dispositivos. Mirando un poco, sospecho que la información principal se almacena en ~/Library/Application Support/Knowledge/KnowledgeC.db, que es una base de datos sqlite que parece almacenar metadatos de Spotlight. No intentaría modificar esa db directamente, incluso si eres un experto en sqlite; las consecuencias podrían ser graves. Pero puede haber una forma de acceder a ella a través de utilidades de metadatos. Voy a investigar un poco más.

2voto

Ted Wrigley Puntos 101

Aquí hay una solución parcial que podría servir hasta que pueda ver algo más efectivo. En lugar de intentar rastrear el lugar correcto para modificar la configuración del Finder bajo el capó — lo cual es sorprendentemente difícil — este script de GUI configura el Finder para activar solo las etiquetas que desees usar en un momento dado. El script te presenta un campo de token, donde introduces los nombres de las etiquetas que deseas activar (las comas y los retornos son los caracteres de separación), luego abre la ventana de preferencias del Finder, recorre todos los elementos en la vista de tabla y los activa o desactiva según sea necesario para que solo veas los que deseas. Es lento y ocasionalmente arroja un error (típico de la creación de GUI) pero hace el trabajo.


  • Script actualizado el 29/11/20 con trampa para algunos problemas de sincronización de la GUI..

global click_error_depth, seek_error_depth

establecer {click_error_depth, seek_error_depth} a {0, 0}

establecer tag_string a texto devuelto de (mostrar diálogo "Introduce una lista de etiquetas" respuesta por defecto "")
establecer tid a mis delimitadores de elementos de texto
establecer mis delimitadores de elementos de texto a {",  ", ", ", ","}
establecer tag_list a elementos de texto de tag_string
establecer mis delimitadores de elementos de texto a tid

decir aplicación "Finder"
    abrir ventana de preferencias de Finder
    decir preferencias de Finder
        decir su ventana
            establecer (panel actual) a panel de Preferencias de Etiqueta
        fin decir
    fin decir
fin decir
decir aplicación "Eventos del Sistema"
    decir proceso "Finder"
        decir ventana "Preferencias de Finder"
            decir primera área de desplazamiento de primera tabla
                con tiempo de espera de 3600 segundos
                    establecer curretly_tagged a primera casilla de verificación de primer elemento de UI de (cada fila cuya primera casilla de verificación del primer elemento de UI es 1)
                fin tiempo de espera
                repetir con este_checkbox en curretly_tagged
                    mi clickErrorTrap(this_checkbox)
                fin repetir
                repetir con una_etiqueta en tag_list
                    establecer casilla_objetivo a mi seekErrorTrap(una_etiqueta)
                    si clase de casilla_objetivo es casilla de verificación entonces
                        mi clickErrorTrap(casilla_objetivo)
                    fin si
                fin repetir
            fin decir
        fin decir
    fin decir
fin decir
decir aplicación "Finder"
    decir preferencias de Finder
        decir su ventana
            cerrar
        fin decir
    fin decir
fin decir

sobre clickErrorTrap(a_checkbox)
    intentar
        decir aplicación "Eventos del Sistema"
            decir a_checkbox
                hacer clic
            fin decir
        fin decir
        devolver verdadero
    en caso de error
        si click_error_depth < 10 entonces
            establecer click_error_depth a click_error_depth + 1
            retraso 0.1
            establecer flag a clickErrorTrap(a_checkbox)
        de lo contrario
            devolver falso
        fin si
        establecer click_error_depth a click_error_depth - 1
        devolver flag
    fin intentar
fin clickErrorTrap

sobre seekErrorTrap(una_etiqueta)
    intentar
        decir aplicación "Eventos del Sistema"
            decir proceso "Finder"
                decir ventana "Preferencias de Finder"
                    decir primera área de desplazamiento de primera tabla
                        establecer casilla_objetivo a primera casilla de verificación de primer elemento de UI de (primera fila cuyo primer elemento de UI es una_etiqueta)
                        devolver casilla_objetivo
                    fin decir
                fin decir
            fin decir
        fin decir
    en caso de error
        si seek_error_depth < 5 entonces
            establecer seek_error_depth a seek_error_depth + 1
            retraso 0.1
            establecer casilla_objetivo a seekErrorTrap(una_etiqueta)
            establecer seek_error_depth a seek_error_depth - 1
            devolver casilla_objetivo
        de lo contrario
            devolver falso
        fin si
    fin intentar
fin seekErrorTrap

0 votos

Los comentarios no son para discusiones prolongadas; esta conversación ha sido trasladada a un chat. ¡Excelente trabajo en esto, así que quería que las personas pudieran ver estos comentarios en el chat!

0 votos

Extrañaba esto que pasó hace un par de años: ¡esto es jodidamente ASOMBROSO! Esto abre todo un nuevo mundo. Lo probaré esta noche.

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