Làm thế nào để bạn loại bỏ một mục duy nhất khỏi menu Mở rộng gần đây trên Mac OS X?


8

Hầu hết các ứng dụng Mac OS X dựa trên tài liệu đều có Tệp menu ---> Mở mục menu ... Gần đây . Đây là danh sách các tệp gần đây bạn đã mở với chương trình. Loại bỏ tất cả các mục là dễ dàng; chỉ cần chọn Xóa Menu .

Tuy nhiên, đôi khi bạn có thể chỉ muốn xóa một hoặc hai mục chứ không phải tất cả mọi thứ, chẳng hạn như một tệp không còn tồn tại hoặc một mục bạn không bao giờ muốn gặp lại. Làm thế nào để bạn xóa một mục khỏi danh sách Mở gần đây mà không xóa bất kỳ mục nào khác?

Mở gần đây ... ví dụ


1
Các tệp không còn tồn tại sẽ không được hiển thị trong tất cả các ứng dụng triển khai đúng menu Mở gần đây (bằng cách không thay đổi mặc định Ca cao).
Daniel Beck

Câu trả lời:


14

Trong hầu hết các ứng dụng , các tài liệu gần đây dành riêng cho ứng dụng nằm trong một tệp có tên:

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

Để liệt kê tất cả các tệp này trong Terminal, nhập thông tin sau:

ls -Ad Library/Preferences/* | grep LSSharedFileList

Trên Mac OS X 10.6, các tệp này (thường) ở định dạng nhị phân.

Sử dụng Trình chỉnh sửa danh sách tài sản (Công cụ phát triển của Apple / Xcode 3) hoặc Xcode 4 để xem và chỉnh sửa chúng.

Chúng được đọc lại khi ứng dụng khởi chạy, không phải trong khi nó đang chạy. Bạn cần đóng ứng dụng trong khi chỉnh sửa tập tin này.


Tôi đoán là tôi đã chán ...

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

Sử dụng:

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

Ha ha, cảm ơn vì kịch bản! Vô cùng hữu ích! :)
Dave Gallagher

Tôi biết đó là một thời gian trước đây nhưng bây giờ tôi mới lấy kịch bản này. Cảm ơn rất nhiều vì đã dành thời gian để viết nó lên.
Cướp

@Rob Bạn được chào đón. Lưu ý rằng điều này đã được viết khi OS X 10.6 Snow Leopard là bản phát hành hiện tại, vì vậy mọi thứ có thể đã thay đổi kể từ đó.
Daniel Beck

Trên Mavericks cần phải đăng xuất để thay đổi được lưu (Trước khi mở lại xCode)!
natanavra

2

Những gì bạn đang yêu cầu không phải là một tính năng được hỗ trợ.

Tuy nhiên, có các hướng dẫn cho thấy có thể xóa các mục riêng lẻ bằng cách chỉnh sửa /Users/YOURUSERNAME/Library/Preferences/com.apple.recentitems.plist, sau đó đăng xuất và đăng nhập lại.

Tập tin đó là dành cho lịch sử toàn hệ thống; Tôi không thể tìm thấy một danh sách cụ thể cho lịch sử Xem trước. Giả sử bạn đang chạy Leopard hoặc mới hơn, tệp plist là nhị phân, vì vậy trình soạn thảo văn bản cơ bản sẽ không xử lý nó. Text Wrangler là một trình soạn thảo miễn phí có thể xử lý các nhị phân.

Nguồn: Xóa các mục riêng lẻ khỏi danh sách "Các mục gần đây"

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.