Como você remove um único item do menu "Abrir Recente" no Mac OS X?

8

A maioria dos aplicativos Mac OS X baseados em documentos possui um item de menu Arquivo ---> Abrir Recente .... Esta é uma lista dos arquivos recentes que você abriu com o programa. Remover todos os itens é fácil; basta selecionar Limpar menu .

No entanto, às vezes você pode querer remover um único item ou dois em vez de tudo, como um arquivo que não existe mais ou que você nunca mais deseja ver novamente. Como você remove um único item da lista Abrir Recente, sem remover mais nada?

Abrir Recente ... exemplo

Dave Gallagher
fonte
1
Os arquivos que não existem mais não são exibidos em todos os aplicativos que implementam corretamente o menu Abrir Recente (não alterando o padrão de Cacau).
Daniel Beck

Respostas:

14

Na maioria dos aplicativos , os documentos recentes específicos do aplicativo estão em um arquivo chamado:

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

Para listar todos esses arquivos no Terminal, digite o seguinte:

ls -Ad Library/Preferences/* | grep LSSharedFileList

No Mac OS X 10.6, esses arquivos (geralmente) estão em formato binário.

Use o Editor de lista de propriedades (Apple Developer Tools / Xcode 3) ou Xcode 4 para visualizá-los e editá-los.

Eles são relidos quando o aplicativo é iniciado, não enquanto está em execução. Você precisa fechar o aplicativo enquanto edita este arquivo.


Acho que estava entediado ...

#!/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
fonte
Ha ha, obrigado pelo script! Extremamente útil! :)
Dave Gallagher
Eu sei que já faz um tempo, mas agora estou pegando esse script. Muito obrigado por reservar um tempo para escrevê-lo.
Rob
@Rob De nada. Observe que isso foi escrito quando o OS X 10.6 Snow Leopard foi a versão atual; portanto, as coisas podem ter mudado desde então.
Daniel Beck
No Mavericks, é necessário fazer logout para salvar as alterações (Antes de reabrir o xCode)!
Natanavra
2

O que você está pedindo não é um recurso suportado.

No entanto, existem instruções sugerindo que é possível remover itens individuais editando e fazendo logoff /Users/YOURUSERNAME/Library/Preferences/com.apple.recentitems.pliste logon novamente.

Esse arquivo é para toda a história do sistema; Não consegui encontrar uma lista específica para o histórico de visualização. Supondo que você esteja executando o Leopard ou mais recente, o arquivo plist é binário, portanto, um editor de texto básico não o trata. O Text Wrangler é um editor gratuito que pode lidar com listas binárias.

Origem: Removendo itens individuais da lista "Itens Recentes"

jcardinal
fonte