[racket] xml/plist plist-dict

From: Steve Byan (stevebyan at verizon.net)
Date: Thu May 31 17:09:57 EDT 2012

I've finally found the time and motivation to start exploring racket in earnest. I'm diving right in by trying to edit the preferences in my Mac OS X Mail.app mail client to set all my mailboxes to sort in descending order. This involves scanning over the xml in all the Info.plist files scattered throughout my ~/Library/Mail/V2/Mailboxes directory tree, finding the ones with the "SortedDescending" property set to "NO", and re-writing them with "SortedDescending" set to "YES".

Many thanks to the fine Racket developers; I'm finding the documentation surprisingly useful for "just diving in". (The last LISP I wrote in earnest was before Scheme had been invented, back in 6.011 in 1973.) Thanks also to the developer of the xml/plist library; I didn't expect to have something already in the library that parses Apple's plist xml DTD. (BTW, avoiding xpath and xslt was the primary motivator for trying to write this in Racket; at this point, I only have a limited number of brain cells to spend, and don't want to waste them on learning that nonsense.)

However, I would appreciate a pointer. I've got "find-files" working to produce a list of all my Info.plist files, and the "for" list-comprehension iterating over "find-files" result, and "call-with-input-file" working with "read-plist" to suck in the XML and produce a "plist-dict". 

But, I'm at something of a loss to understand what to do with a plist-dict. Is there a way to convert between a plist-dict and a real dictionary and vice-versa? I'd like to query the existence of the property key, get its value, and either mutate it by setting a new value or copy it with a new value for the key. I see the grammar for plist-dicts in the docs, but my instinct tells me that there's a better way to deal with them than by writing functions based on the grammar to implement the dictionary-like behavior that I seek.

Best regards,
-Steve

-- 
Steve Byan <stevebyan at me.com>
Littleton, MA 01460



-- 
Steve Byan <stevebyan at me.com>
Littleton, MA 01460





Posted on the users mailing list.