Wie entferne ich ein einzelnes Objekt aus dem Menü "Zuletzt geöffnet" unter Mac OS X?

8

Die meisten dokumentbasierten Mac OS X-Anwendungen verfügen über den Menüeintrag Datei ---> Zuletzt geöffnet .... Dies ist eine Liste der zuletzt mit dem Programm geöffneten Dateien. Das Entfernen aller Elemente ist einfach. Wählen Sie einfach Menü löschen .

Manchmal möchten Sie jedoch nur ein oder zwei Elemente und nicht alles entfernen, z. B. eine Datei, die nicht mehr vorhanden ist, oder eine Datei, die Sie nie wieder sehen möchten. Wie entferne ich ein einzelnes Element aus der Liste "Zuletzt geöffnet", ohne etwas anderes zu entfernen?

Beispiel "Zuletzt ..." öffnen

Dave Gallagher
quelle
1
Nicht mehr vorhandene Dateien werden nicht in allen Anwendungen angezeigt, die das Menü " Zuletzt geöffnet" ordnungsgemäß implementieren (indem die Cocoa-Standardeinstellung nicht geändert wird).
Daniel Beck

Antworten:

14

In den meisten Anwendungen befinden sich anwendungsspezifische aktuelle Dokumente in einer Datei mit dem Namen:

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

Geben Sie Folgendes ein, um alle diese Dateien in Terminal aufzulisten:

ls -Ad Library/Preferences/* | grep LSSharedFileList

Unter Mac OS X 10.6 haben diese Dateien (normalerweise) ein Binärformat.

Verwenden Sie den Eigenschaftenlisten-Editor (Apple Developer Tools / Xcode 3) oder Xcode 4, um sie anzuzeigen und zu bearbeiten.

Sie werden beim Start der Anwendung erneut gelesen, nicht während sie ausgeführt wird. Sie müssen die Anwendung schließen, während Sie diese Datei bearbeiten.


Ich glaube, mir war langweilig ...

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

Verwendungszweck:

$ ./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
quelle
Ha ha, danke für das Drehbuch! Extrem hilfreich! :)
Dave Gallagher
Ich weiß, dass es eine Weile her ist, aber ich greife gerade nach diesem Drehbuch. Vielen Dank, dass Sie sich die Zeit genommen haben, es aufzuschreiben.
Rob
@ Rob Gern geschehen. Beachten Sie, dass dies geschrieben wurde, als OS X 10.6 Snow Leopard die aktuelle Version war, sodass sich die Dinge seitdem möglicherweise geändert haben.
Daniel Beck
Bei Mavericks ist eine Abmeldung erforderlich, damit die Änderungen gespeichert werden (vor dem erneuten Öffnen von xCode)!
Natanavra
2

Was Sie verlangen, ist keine unterstützte Funktion.

Es gibt jedoch Anweisungen /Users/YOURUSERNAME/Library/Preferences/com.apple.recentitems.plist, die darauf hinweisen, dass es möglich ist, einzelne Elemente durch Bearbeiten , Abmelden und erneutes Anmelden zu entfernen .

Diese Datei ist jedoch für die systemweite Historie bestimmt. Ich konnte keine spezifische Liste für die Vorschau des Verlaufs finden. Vorausgesetzt, Sie verwenden Leopard oder eine neuere Version, ist die plist-Datei binär, sodass ein einfacher Texteditor nicht damit umgehen kann. Text Wrangler ist ein kostenloser Editor, der mit binären Plisten umgehen kann.

Quelle: Einzelne Elemente aus der Liste "Zuletzt verwendete Elemente" entfernen

jcardinal
quelle