[PD-dev] info classes

Jonathan Wilkes jancsika at yahoo.com
Thu Mar 7 23:54:01 CET 2013


An update for the [classinfo] object:

*** Get methods and args with [classinfo] ***

You can get the number of methods for [bng]
(other than built-ins like bang, float, etc.):

[methods(
|
[classinfo bng]

Or send a float to get the method and args at that index:

[my_numbox]
|
[classinfo bng]

Above, sending a "0" gives:
list click A_FLOAT A_FLOAT A_FLOAT A_FLOAT A_FLOAT

Since all the pd classes are stored as methods to a class named
"objectmaker", [mynumbox]---[classinfo objectmaker] lets you peruse
all the loaded objects' args at your leisure. Put that all together with
an [until] and a [route some-object-name] you can get the argument
types for any loaded object.  That's pretty handy, so I added some
syntactic sugar:

[args(
|
[classinfo bng]

The above will do all that for you, thus outputting:
symbol A_GIMME

This is in addition to figuring out which build-in methods a class
accepts (float, symbol, etc.) as well as many of the other class
fields.  So now you can program 1,000 [random]
monkeys building infinite well-formed Pd patches with the correct
args and methods!

More useful, however, is that we can now auto-build a help patch with
_some_ [pd META] comments already filled in, plus programmatically
add argument info to the extant help patches.  Of course the A_GIMME
example above shows why the author can't be 100% lazy, but it does
make it lots easier to make fun of devs who are 100% lazy since
50% of the work will be autocompleted by clicking a button. :)

-Jonathan

----- Original Message -----
> From: Jonathan Wilkes <jancsika at yahoo.com>
> To: Jonathan Wilkes <jancsika at yahoo.com>; "pd-dev at iem.at" <pd-dev at iem.at>
> Cc: 
> Sent: Monday, March 4, 2013 6:35 PM
> Subject: Re: [PD-dev] info classes
> 
> Ok, I've got some working code for building a simple linked list
> of classes and a function to return a class by symbol.  This should
> be fun.
> 
> Should I go ahead and make some convenience functions for
> accessing class members?  That way anyone who wants to
> use this functionality can get info on a class without worrying
> about being locked in to the class struct if it happens to change.
> 
> -Jonathan
> 
> 
> 
> 
> ----- Original Message -----
>>  From: Jonathan Wilkes <jancsika at yahoo.com>
>>  To: Jonathan Wilkes <jancsika at yahoo.com>; "pd-dev at iem.at" 
> <pd-dev at iem.at>
>>  Cc: 
>>  Sent: Saturday, March 2, 2013 3:45 PM
>>  Subject: Re: [PD-dev] info classes
>> 
>>  ----- Original Message -----
>> 
>>>   From: Jonathan Wilkes <jancsika at yahoo.com>
>>>   To: Jonathan Wilkes <jancsika at yahoo.com>; 
> "pd-dev at iem.at" 
>>  <pd-dev at iem.at>
>>>   Cc: 
>>>   Sent: Friday, March 1, 2013 1:27 PM
>>>   Subject: Re: [PD-dev] info classes
>>> 
>>>   Just made a change so that the "args" method grabs from
>>>   the parent instead of the root canvas.
>> 
>>  After some more testing I think this change is wrong. If 
> [my_abstraction]'s
>>  args are "foo bar" and I'm inside subpatch [pd blah], the tk 
>>  window for [pd blah]
>>  shows the args as "(foo bar)" and not "(blah)".  But 
> this is 
>>  just an effect
>>  of the larger point, which is that the _abstraction_ arguments are the ones
>>  that replace dollarsign variables regardless of which subpatch you happen 
> to
>>  be in.  So the "args" method to [canvasinfo] should return the 
> atoms 
>>  that will
>>  replace $1, $2, $3, etc. in the context of the current canvas.  Even for 
> nested
>>  subpatches, that means the arguments for the root canvas (i.e., containing
>>  abstraction, or if there's no abstraction then the toplevel patch), so 
> those 
>>  are
>>  the ones that will be returned.  That makes the canvasinfo "args" 
> 
>>  method
>>  consistent with the rest of the Pd interface.
>> 
>>  The only question is how to accommodate a user who wants to grab the args
>>  of a [pd].  For this I'd like to simply add a method that returns the 
> entire 
>>  object
>>  box contents for the current canvas.  So [pd blah] would return "pd 
>>  blah",
>>  [foo-abstraction 1 2 3] would return "foo-abstraction 1 2 3", and 
> so 
>>  on.  (I suppose
>>  a toplevel patch would just return a bang since there's no box, and I 
>>  already
>>  have a "filename" method.)
>> 
>>  But what should I call the method?  objstring? boxmatter? boxtext? boxguts?
>> 
>>  -Jonathan
>> 
>



More information about the Pd-dev mailing list