¿Cómo se elimina un solo elemento del menú "Abrir reciente" en Mac OS X?

8

La mayoría de las aplicaciones de Mac OS X basadas en documentos tienen un elemento de menú Archivo ---> Abrir reciente ... Esta es una lista de archivos recientes que ha abierto con el programa. Quitar todos los artículos es fácil; simplemente seleccione Borrar menú .

Sin embargo, a veces es posible que solo desee eliminar uno o dos elementos en lugar de todo, como un archivo que ya no existe o uno que nunca desea volver a ver. ¿Cómo se elimina un solo elemento de la lista Abrir reciente, sin eliminar nada más?

Abrir reciente ... ejemplo

Dave Gallagher
fuente
1
Los archivos que ya no existen no se muestran en todas las aplicaciones que implementan correctamente el menú Abrir reciente (al no cambiar el valor predeterminado de Cocoa).
Daniel Beck

Respuestas:

14

En la mayoría de las aplicaciones , los documentos recientes específicos de la aplicación están en un archivo llamado:

~/Library/Preferences/com.company.application.LSSharedFileList.plist

Para enumerar todos estos archivos en la Terminal, ingrese lo siguiente:

ls -Ad Library/Preferences/* | grep LSSharedFileList

En Mac OS X 10.6, estos archivos están (generalmente) en formato binario.

Utilice el Editor de lista de propiedades (Herramientas de desarrollo de Apple / Xcode 3) o Xcode 4 para verlos y editarlos.

Se vuelven a leer cuando se inicia la aplicación, no mientras se está ejecutando. Debe cerrar la aplicación mientras edita este archivo.


Supongo que estaba aburrida ...

#!/usr/bin/env bash

mode=$2
if [ -z "$mode" ] ; then
    echo "Usage:"
    echo "$0 <filename> ls       - list recent file entries in specified *.LSSharedFileList.plist"
    echo "$0 <filename> rm <idx> - remove recent file entry with given index from specified plist"
    exit 1
fi

if [ "$mode" != "ls" ] && [ "$mode" != "rm" ] ; then
    echo "second argument must be one of [ls, rm]"
    exit 1
fi

file=$1
if [ -z $file ] ; then
    echo "Need argument (recent items plist file)!"
    exit 1
fi
if [ ! -f $file ] ; then
    echo "File $file does not exist!"
    exit 1
fi

if [ "$mode" = "ls" ] ; then
    i=0
    cont=1
    while [ $cont ] ; do
        recentfilename=$( /usr/libexec/PlistBuddy -c "Print RecentDocuments:CustomListItems:$i:Name" $file 2>/dev/null )
        if [ "$?" -ne "0" ] ; then
            cont=
        else
            echo "$i - $recentfilename"
            i=$(( $i + 1 ))
        fi
    done
fi

if [ "$mode" = "rm" ] ; then
    i=$3
    if [[ $i =~ ^-?[0-9]+$ ]] ; then
        # argument is integer
        $( /usr/libexec/PlistBuddy -c "Delete RecentDocuments:CustomListItems:$i" $file )
    else
        echo "Expected integer, got $i as third argument"
        exit 1
    fi
fi

Uso:

$ ./editrecent.sh 
Usage:
./editrecent.sh <filename> ls       - list recent file entries in specified *.LSSharedFileList.plist
./editrecent.sh <filename> rm <idx> - remove recent file entry with given index from specified plist


$ ./editrecent.sh Library/Preferences/com.macromates.textmate.LSSharedFileList.plist ls
0 - rcd
1 - artifactory.sh
2 - py.py
3 - iTunes Music Library.xml
4 - iTunes Library.xml
5 - gradle-proxy-support.diff
6 - DefaultGradlePropertiesLoader.java
7 - DefaultGradlePropertiesLoader-proxy.java
8 - gradle-proxy-support.patch
9 - DefaultKeyBinding.dict
10 - DefaultKeyBindings.dict

$ ./editrecent.sh Library/Preferences/com.macromates.textmate.LSSharedFileList.plist rm 3

$ ./editrecent.sh Library/Preferences/com.macromates.textmate.LSSharedFileList.plist ls
0 - rcd
1 - artifactory.sh
2 - py.py
3 - iTunes Library.xml
4 - gradle-proxy-support.diff
5 - DefaultGradlePropertiesLoader.java
6 - DefaultGradlePropertiesLoader-proxy.java
7 - gradle-proxy-support.patch
8 - DefaultKeyBinding.dict
9 - DefaultKeyBindings.dict
Daniel Beck
fuente
Ja, ja, gracias por el guión! ¡Extramadamente útil! :)
Dave Gallagher
Sé que fue hace un tiempo, pero ahora estoy agarrando este guión. Muchas gracias por tomarse el tiempo para escribirlo.
Rob
@ Rob De nada. Tenga en cuenta que esto se escribió cuando OS X 10.6 Snow Leopard era la versión actual, por lo que las cosas podrían haber cambiado desde entonces.
Daniel Beck
¡En Mavericks es necesario cerrar sesión para guardar los cambios (antes de volver a abrir xCode)!
natanavra
2

Lo que está pidiendo no es una función compatible.

Sin embargo, hay instrucciones que sugieren que es posible eliminar elementos individuales editando /Users/YOURUSERNAME/Library/Preferences/com.apple.recentitems.plist, luego desconectando y volviendo a iniciar sesión.

Sin embargo, ese archivo es para el historial de todo el sistema; No pude encontrar un plist específicamente para el historial de Vista previa. Suponiendo que esté ejecutando Leopard o más reciente, el archivo plist es binario, por lo que un editor de texto básico no lo manejará. Text Wrangler es un editor gratuito que puede manejar listas binarias.

Fuente: Eliminar elementos individuales de la lista "Elementos recientes"

jcardinal
fuente