Comment supprimer un seul élément du menu «Ouvrir récent» sur Mac OS X?

8

La plupart des applications Mac OS X basées sur des documents ont un élément de menu Fichier ---> Ouvrir récent .... Il s'agit d'une liste de fichiers récents que vous avez ouverts avec le programme. La suppression de tous les éléments est facile; sélectionnez simplement Effacer le menu .

Cependant, il peut arriver que vous souhaitiez simplement supprimer un ou deux éléments plutôt que tout, comme un fichier qui n'existe plus ou un fichier que vous ne voudrez plus jamais revoir. Comment supprimer un seul élément de la liste Ouvrir récent, sans rien supprimer d'autre?

Ouvrir l'exemple récent ...

Dave Gallagher
la source
1
Les fichiers qui n'existent plus ne sont pas affichés dans toutes les applications qui implémentent correctement le menu Ouvrir récent (en ne modifiant pas la valeur par défaut de Cocoa).
Daniel Beck

Réponses:

14

Dans la plupart des applications , les documents récents spécifiques à l'application se trouvent dans un fichier nommé:

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

Pour répertorier tous ces fichiers dans Terminal, entrez les informations suivantes:

ls -Ad Library/Preferences/* | grep LSSharedFileList

Sous Mac OS X 10.6, ces fichiers sont (généralement) au format binaire.

Utilisez l'éditeur de liste de propriétés (Apple Developer Tools / Xcode 3) ou Xcode 4 pour les afficher et les modifier.

Ils sont relus lors du lancement de l'application, pas pendant son exécution. Vous devez fermer l'application lors de la modification de ce fichier.


Je suppose que je m'ennuyais ...

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

Usage:

$ ./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
la source
Ha ha, merci pour le script! Extrêmement utile! :)
Dave Gallagher
Je sais que c'était il y a quelque temps, mais je viens de saisir ce script. Merci beaucoup d'avoir pris le temps de l'écrire.
Rob
@Rob Vous êtes les bienvenus. Notez que cela a été écrit lorsque OS X 10.6 Snow Leopard était la version actuelle, donc les choses pourraient avoir changé depuis.
Daniel Beck
Sur Mavericks, une déconnexion est nécessaire pour enregistrer les modifications (avant de rouvrir xCode)!
natanavra
2

Ce que vous demandez n'est pas une fonctionnalité prise en charge.

Cependant, certaines instructions suggèrent qu'il est possible de supprimer des éléments individuels en les modifiant /Users/YOURUSERNAME/Library/Preferences/com.apple.recentitems.plist, puis en se déconnectant et en se reconnectant.

Ce fichier est destiné à l'historique du système; Je n'ai pas pu trouver de liste spécifiquement pour l'historique de prévisualisation. En supposant que vous exécutez Leopard ou une version plus récente, le fichier plist est binaire, donc un éditeur de texte de base ne le gérera pas. Text Wrangler est un éditeur gratuit qui peut gérer des plists binaires.

Source: suppression d'éléments individuels de la liste "Éléments récents"

jcardinal
la source