views:

27

answers:

1

A note item in Yojimbo's Applescript dictionary is defined as:

note item n [inh. database item] : A note item.
elements
  contained by application.
properties
  encrypted (boolean, r/o) : Is the note is encrypted?
  contents (text) : The contents of the note.  syn content

    If this note is encrypted, the contents property is only readable 
        if permitted by the current security policies.

responds to
  append, prepend.

In an attempt to export my data, I've been poking around with AppleScript, learning the language, etc, and currently have this:

tell application "Yojimbo"
    repeat with EachNote in (note items in library)
        display dialog (content of EachNote) as string
    end repeat
end tell

What's confusing me is that, though the class defines the property "contents", I have to use "content" to retrieve the contents. Using "contents" results in this error:

Can’t make «class YNot» id "A0C9E19E-3106-44F9-97A6-A1A74AD77948" 
  of application "Yojimbo" into type string.

I'm assuming the "syn content" means it's a synonym, thus I should be able to use "content" and "contents" interchangeably. But apparently the synonym works, but the original does not...?

Also, more simply, why do the contents have to be coerced into a string? If I look at the properties on the object (via: (properties of EachNote) as string ), "contents" is a double-quoted string, though I realize this isn't necessarily "proof" that it's a string.

I'm still starting with AppleScript, so if I'm making a n00bish mistake, feel free to slap.

A: 

For others who find a similar confusion, I found help here: http://groups.google.com/group/yojimbo-talk/browse_thread/thread/d04f42db335c77e7

So all props go to Jim for being awesome!

The basics:

  • contents of an object is different than contents of a variable containing an object.
  • contents of a variable containing an object returns the object, not the object's contents, unlike every other property. Other properties return the property of the object in the variable, as expected.
  • This means, to get the contents of an object inside a variable, you need to use contents of contents of variable.
  • As demonstrated here, on my blog, yes, this is extremely strange. While var == var and var == contents of var, var != contents of (contents of var), so Applescript does indeed violate the identity principle for "contents" in this specific case. It does not chain this effect, though, so you shouldn't need to use contents of three layers deep (it'll work the same as two)
  • contents of contents of var works on objects as well, so it's always safe to use.
  • Many dictionaries use content as a synonym of contents, which avoids this whole problem. If desired, use content of var, and it'll work like other properties, always returning the object's content instead of the object.
Groxx