Bagaimana Anda menghapus satu item dari menu "Open Recent" di Mac OS X?

8

Sebagian besar aplikasi berbasis dokumen-Mac OS X memiliki file ---> Open Terbaru ... item menu. Ini adalah daftar file terbaru yang Anda buka dengan program. Menghapus semua item itu mudah; cukup pilih Clear Menu .

Namun, kadang-kadang Anda mungkin hanya ingin menghapus satu atau dua item daripada semuanya, seperti file yang tidak ada lagi, atau yang tidak pernah ingin Anda lihat lagi. Bagaimana Anda menghapus satu item dari daftar Open Recent, tanpa menghapus yang lain?

Buka Terbaru ... contoh

Dave Gallagher
sumber
1
File yang sudah tidak ada lagi tidak ditampilkan di semua aplikasi yang mengimplementasikan menu Open Recent dengan benar (dengan tidak mengubah default Cocoa).
Daniel Beck

Jawaban:

14

Di sebagian besar aplikasi , dokumen terbaru khusus aplikasi berada dalam file bernama:

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

Untuk daftar semua file ini di Terminal, masukkan yang berikut ini:

ls -Ad Library/Preferences/* | grep LSSharedFileList

Pada Mac OS X 10.6, file-file ini (biasanya) dalam format biner.

Gunakan Editor Daftar Properti (Alat Pengembang Apple / Xcode 3) atau Xcode 4 untuk melihat dan mengeditnya.

Mereka membaca kembali ketika aplikasi diluncurkan, bukan saat sedang berjalan. Anda harus menutup aplikasi saat mengedit file ini.


Saya kira saya bosan ...

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

Pemakaian:

$ ./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
sumber
Ha ha, terima kasih untuk skripnya! Sangat membantu! :)
Dave Gallagher
Saya tahu itu beberapa waktu yang lalu, tetapi saya baru saja mengambil naskah ini. Terima kasih banyak telah meluangkan waktu untuk menuliskannya.
Rob
@Rob Sama-sama. Perhatikan bahwa ini ditulis ketika OS X 10.6 Snow Leopard adalah rilis saat ini, jadi semuanya mungkin telah berubah sejak saat itu.
Daniel Beck
Pada Mavericks, logout diperlukan agar perubahan dapat disimpan (Sebelum membuka kembali xCode)!
natanavra
2

Apa yang Anda minta bukanlah fitur yang didukung.

Namun, ada petunjuk yang menyarankan untuk menghapus setiap item dengan mengedit /Users/YOURUSERNAME/Library/Preferences/com.apple.recentitems.plist, lalu keluar dan masuk kembali.

File itu untuk sejarah seluruh sistem; Saya tidak dapat menemukan daftar khusus untuk riwayat Pratinjau. Dengan asumsi Anda menjalankan Leopard atau yang lebih baru, file plist adalah biner, jadi editor teks dasar tidak akan menanganinya. Wrangler Teks adalah editor gratis yang dapat menangani daftar biner.

Sumber: Menghapus item individual dari daftar "Item Terbaru"

kardinal
sumber