8

Большинство основанных на документе приложений Mac OS X имеют пункт меню File ---> Open Recent .... Это список последних файлов, которые вы открыли с помощью программы. Удалить все предметы легко; просто выберите Очистить меню.

Однако иногда вы можете просто захотеть удалить один или два элемента, а не все, например, файл, который больше не существует, или файл, который вы больше никогда не захотите видеть. Как удалить один элемент из списка «Открыть последние», не удаляя ничего другого?

Открыть последние ... пример

2 ответа2

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
2

То, что вы просите, не поддерживается.

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

Этот файл предназначен для общесистемной истории; Я не смог найти список специально для истории предварительного просмотра. Предполагая, что вы используете Leopard или новее, файл plist является двоичным, поэтому простой текстовый редактор не справится с этим. Text Wrangler - это бесплатный редактор, который может обрабатывать двоичные списки.

Источник: удаление отдельных элементов из списка "Недавние элементы".

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .