Come si rimuove un singolo elemento dal menu "Apri recenti" su Mac OS X?


8

La maggior parte delle applicazioni Mac OS X basate su documenti ha una voce di menu File ---> Apri recenti ... Questo è un elenco di file recenti che hai aperto con il programma. Rimuovere tutti gli oggetti è facile; seleziona semplicemente Cancella menu .

Tuttavia, a volte potresti voler semplicemente rimuovere un singolo elemento o due anziché tutto, ad esempio un file che non esiste più o uno che non vorresti più vedere. Come si rimuove un singolo elemento dall'elenco Apri recenti, senza rimuovere nient'altro?

Apri l'esempio recente ...


1
I file che non esistono più non vengono visualizzati in tutte le applicazioni che implementano correttamente il menu Apri recenti (non modificando il valore predefinito di Cocoa).
Daniel Beck

Risposte:


14

Nella maggior parte delle applicazioni , i documenti recenti specifici dell'applicazione si trovano in un file denominato:

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

Per elencare tutti questi file in Terminale, immettere quanto segue:

ls -Ad Library/Preferences/* | grep LSSharedFileList

Su Mac OS X 10.6, questi file sono (generalmente) in formato binario.

Utilizzare l'Editor elenco proprietà (Strumenti per sviluppatori Apple / Xcode 3) o Xcode 4 per visualizzarli e modificarli.

Vengono riletti all'avvio dell'applicazione, non durante l'esecuzione. Devi chiudere l'applicazione mentre modifichi questo file.


Immagino di essermi annoiato ...

#!/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

Ah ah, grazie per la sceneggiatura! Estremamente utile! :)
Dave Gallagher,

So che era un po 'di tempo fa, ma sto solo afferrando questa sceneggiatura. Grazie mille per aver dedicato del tempo a scriverlo.
Rob,

@Rob Prego. Si noti che questo è stato scritto quando OS X 10.6 Snow Leopard era la versione corrente, quindi le cose potrebbero essere cambiate da allora.
Daniel Beck

Su Mavericks è necessario il logout per salvare le modifiche (Prima di riaprire xCode)!
natanavra,

2

Quello che stai chiedendo non è una funzionalità supportata.

Tuttavia, ci sono istruzioni che suggeriscono che è possibile rimuovere singoli elementi modificando /Users/YOURUSERNAME/Library/Preferences/com.apple.recentitems.plist, quindi disconnettendosi e riconnettendosi.

Quel file è per la cronologia dell'intero sistema; Non sono stato in grado di trovare un piano specifico per la cronologia di anteprima. Supponendo che tu stia eseguendo Leopard o più recente, il file plist è binario, quindi un editor di testo di base non lo gestirà. Text Wrangler è un editor gratuito in grado di gestire le pianificazioni binarie.

Fonte: rimozione di singoli elementi dall'elenco "Articoli recenti"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.