Як видалити окремий елемент з меню "Відкрити останні" в Mac OS X?


8

У більшості програм Mac OS X на основі документів є пункт меню Файл ---> Відкрити останні .... Це список останніх файлів, які ви відкрили з програмою. Видалити всі предмети легко; просто виберіть Очистити меню .

Однак іноді ви можете просто вилучити один-два елементи, а не все, наприклад, файл, який більше не існує, або той, який ви ніколи не хочете побачити знову. Як видалити один елемент зі списку "Відкрити останні", не видаляючи нічого іншого?

Відкрийте останній ... приклад


1
Файли, які вже не існують, відображаються не у всіх програмах, які належним чином реалізують меню " Відкрити останні" (не змінюючи типово какао).
Даніель Бек

Відповіді:


14

У більшості програм останні документи, що стосуються додатків , містяться у файлі з назвою:

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

Щоб перерахувати всі ці файли в Терміналі, введіть наступне:

ls -Ad Library/Preferences/* | grep LSSharedFileList

На Mac OS X 10.6 ці файли (як правило) у двійковому форматі.

Використовуйте Редактор списку властивостей (Apple Developer Tools / Xcode 3) або Xcode 4 для їх перегляду та редагування.

Вони перечитуються під час запуску програми, а не під час роботи програми. Під час редагування цього файлу потрібно закрити програму.


Я думаю, мені було нудно ...

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

Використання:

$ ./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

Ха-ха, дякую за сценарій! Надзвичайно корисно! :)
Дейв Галлахер

Я знаю, що це був час назад, але я просто зараз захоплюю цей сценарій. Дякую велике, що знайшли час, щоб його написати.
Роб

@Rob Безкоштовно Зауважте, що це було написано, коли поточний реліз OS X 10.6 Snow Leopard був, тому з тих пір все може змінитися.
Даніель Бек

On Mavericks потрібен вихід для зміни, які потрібно зберегти (Перед повторним відкриттям xCode)!
натанавра

2

Те, що ви просите, - це не підтримується функція.

Однак є вказівки, що дозволяють видалити окремі елементи шляхом редагування /Users/YOURUSERNAME/Library/Preferences/com.apple.recentitems.plist, виходу та повернення в систему.

Цей файл є для загальносистемної історії; Мені не вдалося знайти списку спеціально для історії попереднього перегляду. Якщо припустити, що ви використовуєте Leopard або новішу версію, файл plist є двійковим, тому основний текстовий редактор не обробляє його. Text Wrangler - це безкоштовний редактор, який може обробляти двійкові списки.

Джерело: Видалення окремих елементів зі списку "Останні елементи"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.