AppleScript pour renvoyer les dossiers récents du Finder sous forme de liste

2

J'ai besoin d'écrire un AppleScript qui me rendra un liste du menu Dossiers récents dans le Finder. Je ne veux pas d'un AppleScript qui ouvrira simplement ce menu - j'ai besoin d'un script pour renvoyer les dossiers récents sous forme de liste.

Si cela est possible, cela pourrait être une idée de démontrer en affichant la liste avec un dialogue, peut-être.

C'est possible?

Menu

Oliver Joseph Ash
la source

Réponses:

1

Ce Fil MacScripter a un script pour obtenir les dossiers comme alias, mais je ne pouvais pas le faire fonctionner sous 10.8. Il n'y a plus de clés de fichier, mais cela ne fonctionnait pas non plus:

tell application "System Events"
    value of property list item "file-bookmark" of property list item 1 of property list item "FXRecentFolders" of contents of property list file "~/Library/Preferences/com.apple.finder.plist"
    try
        value of result
    on error err
        text 30 thru -4 of err
        (run script "«data alis" & result & "»") as alias
    end try
end tell

Vous pouvez imprimer les valeurs de texte brut avec PlistBuddy:

$ PlistBuddy -c 'Print FXRecentFolders:0:file-bookmark' ~/Library/Preferences/com.apple.finder.plist
book?0?Userslau?4A?x?iH???A?1M?$5DF7A03E-A7FB-3E80-B61D-F10CD8BF7B5D?/?6a0c3f51ea4eaf67e96c08fa9b69b93aee598f01;00000000;0000000000000020;com.apple.app-sandbox.read-write;00000001;01000002;000000000005ca9f;/users/lauri?????$Tt@d  ? ? ? ?  ?0 ???? ??,

Le gestionnaire dans ce fil travaillé dans 10,7 mais pas 10,8.

Si vous avez seulement besoin des noms de base, il existe des clés distinctes pour eux:

tell application "System Events" to value of property list item "name" of property list items of property list item "FXRecentFolders" of contents of property list file "~/Library/Preferences/com.apple.finder.plist"

Lri
la source
Merci pour votre réponse. Il est donc possible de récupérer les chemins de ces dossiers récents sous forme de liste? Le dernier exemple que vous avez donné fonctionne mais, comme vous le dites, ne renvoie que les noms de base.
Oliver Joseph Ash
Je suppose que c'est possible, mais je ne sais pas comment. Le format semble changer dans chaque version d'OS X.
Lri
2

Ce script renverra les noms de base et l'emplacement du chemin:

on findPathSeparator(theData, theFile)
    set pathSeparator to {0, 0, 0, 1, 1, 0, 0}
    set bytesFound to 0
    set bytesSearched to 0

    try
        read theFile from 0 for 0

        set numIterations to 0

        repeat (get eof theFile) times
            set theId to id of (read theFile from bytesSearched for 1)

            if theId is item (bytesFound + 1) of pathSeparator then
                set bytesFound to bytesFound + 1
            else
                set bytesFound to 0
            end if

            if bytesFound is (count of pathSeparator) then exit repeat

            set bytesSearched to bytesSearched + 1
        end repeat
    on error msg
        msg
    end try

    return bytesSearched - (count of pathSeparator)
end findPathSeparator

on getPathFromData(theData)
    set pathSeparator to {0, 0, 0, 1, 1, 0, 0}

    set theFile to (open for access POSIX file ("/tmp/get_recent_folders") with write permission)

    set eof theFile to 0

    write contents of theData to theFile

    set startPosition to findPathSeparator(theData, theFile)

    try
        read theFile from startPosition for 0

        set thePath to ""

        repeat
            set idList to id of (read theFile for 8)

            if (idList does not end with pathSeparator) then exit repeat

            set theLength to item 1 of idList

            set thePath to thePath & ("/" & (read theFile for theLength as «class utf8»))

            read theFile for (4 - theLength mod 4) mod 4
        end repeat
    on error msg
        msg
    end try

    close access theFile

    return thePath
end getPathFromData

tell application "System Events"
    tell property list file "~/Library/Preferences/com.apple.finder.plist"
        set dataItems to property list item "FXRecentFolders"'s property list items's property list item "file-bookmark"'s value
        set itemNames to property list item "FXRecentFolders"'s property list items's property list item "name"'s value
    end tell
end tell

set theOutput to ""

set itemNum to 1
repeat (count of dataItems) times
    set theOutput to theOutput & item itemNum of itemNames & "
" & getPathFromData(item itemNum of dataItems) & "
"
    set itemNum to itemNum + 1
end repeat

theOutput
Oliver Joseph Ash
la source