Mac OS Xの「最近使用したファイルを開く」メニューから1つのアイテムを削除するにはどうすればよいですか?


8

ほとんどのドキュメントベースのMac OS Xアプリケーションには、[ファイル] ---> [最近使用したファイルを開く... ]メニュー項目があります。これは、プログラムで開いた最近のファイルのリストです。すべてのアイテムを削除するのは簡単です。[ メニュークリア]を選択するだけです。

ただし、存在しなくなったファイルや、二度と見たくないファイルなど、すべてではなく1つまたは2つのアイテムを削除したい場合もあります。他のアイテムを削除せずに、[最近のオープン]リストから単一のアイテムをどのように削除しますか?

最近開いた...の例


1
存在しないファイルは、(Cocoaのデフォルトを変更しないことにより)[最近使ったファイルを開く ]メニューを適切に実装するすべてのアプリケーションに表示されません。
ダニエルベック

回答:


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

ハハ、スクリプトをありがとう!とても役に立ちました!:)
Dave Gallagher

少し前のことですが、今このスクリプトを取得しています。執筆に時間を割いていただき、ありがとうございました。
Rob

@Robどういたしまして。これは、OS X 10.6 Snow Leopardが現在のリリースであるときに書かれたため、その後、状況が変わった可能性があります。
Daniel Beck

Mavericksでは、変更を保存するためにログアウトが必要です(xCodeを再度開く前)。
natanavra 2014

2

あなたが求めているのはサポートされている機能ではありません。

ただし、を編集/Users/YOURUSERNAME/Library/Preferences/com.apple.recentitems.plistしてからログアウトしてから再度ログインすると、個々のアイテムを削除できることを示唆する指示があります。

ただし、そのファイルはシステム全体の履歴用です。プレビュー履歴専用のplistを見つけることができませんでした。Leopard以降を実行している場合、plistファイルはバイナリであるため、基本的なテキストエディターでは処理できません。テキストラングラーは、バイナリplistを処理できる無料のエディターです。

出典:「最近のアイテム」リストから個々のアイテムを削除する

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.