From 0ab155ef5d5fff4208fccd31819723d669172dab Mon Sep 17 00:00:00 2001
From: Ivica Ico Bukvic <ico@vt.edu>
Date: Fri, 22 Nov 2013 19:22:15 -0500
Subject: [PATCH] added updated help files for pdinfo, classinfo, and
 canvasinfo (by Jonathan Wilkes), merged patch by Jonathan Wilkes for the
 search-plugin.tcl with additional enhancements for tab/focus.

---
 pd/doc/5.reference/canvasinfo-help.pd | 271 +++++++++++++++++++++-----
 pd/doc/5.reference/classinfo-help.pd  | 111 +++++++++++
 pd/doc/5.reference/classinfo.pd       |  13 --
 pd/doc/5.reference/pdinfo-help.pd     | 172 ++++++++++++++--
 pd/src/search-plugin.tcl              |  32 ++-
 5 files changed, 512 insertions(+), 87 deletions(-)
 create mode 100644 pd/doc/5.reference/classinfo-help.pd
 delete mode 100644 pd/doc/5.reference/classinfo.pd

diff --git a/pd/doc/5.reference/canvasinfo-help.pd b/pd/doc/5.reference/canvasinfo-help.pd
index 688683ded..58202f6ca 100644
--- a/pd/doc/5.reference/canvasinfo-help.pd
+++ b/pd/doc/5.reference/canvasinfo-help.pd
@@ -1,54 +1,217 @@
-#N canvas 275 179 549 358 10;
-#N canvas 530 268 625 300 foo 0;
-#X obj 42 195 canvasinfo;
-#X text 124 195 get information about the properties of a canvas;
-#X msg 42 17 bang;
-#X text 79 17 print all properties and values to the console;
-#X msg 58 40 editmode;
-#X obj 42 215 print output;
-#X text 119 40 send an anything to retrieve a property's value;
-#X floatatom 99 173 5 0 0 0 - - -;
-#X text 138 172 set the parent level to get properties from a parent
-canvas;
-#X symbolatom 76 91 10 0 0 0 - - -;
-#X text 184 80 or use a symbol;
-#X msg 87 145 dollarzero 1;
-#X msg 87 117 list dollarzero 1;
-#X text 207 117 or use a list to set parent level as well;
-#X text 177 145 or even an anything to do the same \, like [pack];
-#X msg 69 65 symbol editmode;
-#X connect 0 0 5 0;
-#X connect 2 0 0 0;
-#X connect 4 0 0 0;
-#X connect 7 0 0 1;
-#X connect 9 0 0 0;
-#X connect 11 0 0 0;
-#X connect 12 0 0 0;
-#X connect 15 0 0 0;
-#X restore 243 256 pd foo bar;
-#X obj 338 256 demo-abs foo bar bee;
-#X obj 62 225 canvasinfo;
-#X text 144 225 get information about the properties of a canvas;
-#X msg 62 47 bang;
-#X text 99 47 print all properties and values to the console;
-#X msg 78 70 editmode;
-#X obj 62 245 print output;
-#X text 139 70 send an anything to retrieve a property's value;
-#X floatatom 119 203 5 0 0 0 - - -;
-#X text 158 202 set the parent level to get properties from a parent
-canvas;
-#X symbolatom 96 121 10 0 0 0 - - -;
-#X text 204 110 or use a symbol;
-#X msg 107 175 dollarzero 1;
-#X msg 107 147 list dollarzero 1;
-#X text 227 147 or use a list to set parent level as well;
-#X text 197 175 or even an anything to do the same \, like [pack];
-#X msg 89 95 symbol editmode;
-#X connect 2 0 7 0;
-#X connect 4 0 2 0;
-#X connect 6 0 2 0;
-#X connect 9 0 2 1;
-#X connect 11 0 2 0;
-#X connect 13 0 2 0;
-#X connect 14 0 2 0;
-#X connect 17 0 2 0;
+#N canvas 0 19 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header canvasinfo 3 12
+0 18 -204280 -1 0;
+#X obj 0 431 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 48 165 482 332 META 0;
+#X text 12 145 LIBRARY internal;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 105 INLET_1 float;
+#X text 12 5 KEYWORDS patch_op canvas_op;
+#X text 12 45 DESCRIPTION get info about a canvas;
+#X text 12 65 INLET_0 args boxtext coords dir dirty dollarzero editmode
+filename hitbox name pointer posonparent screenpos toplevel vis;
+#X text 12 125 OUTLET_0 list;
+#X text 12 165 AUTHOR Jonathan Wilkes;
+#X text 12 185 RELEASE_DATE 2013;
+#X text 12 205 HELP_PATCH_AUTHORS Jonathan Wilkes;
+#X restore 500 597 pd META;
+#X obj 0 494 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 526 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 563 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 439 cnv 17 3 30 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#N canvas 196 385 428 108 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [canvasinfo] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X obj 78 503 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 4 597 pddp/pddplink all_about_help_patches.pd -text Usage Guide
+;
+#X msg 39 48 print;
+#X text 80 47 print all attributes to the console;
+#X text 98 438 print;
+#X text 168 438 - print out each available message (other than "print")
+followed by a semicolon and the output for that method.;
+#X text 168 464 pdinfo's availabe methods are shown above \, with audio-device
+and midi-device message in subpatches.;
+#X text 99 503 list;
+#X text 169 503 - output varies depending on the message sent to [pdinfo].
+;
+#X obj 483 5 canvasinfo;
+#X text 11 20 get info about a canvas;
+#X obj 39 390 canvasinfo;
+#X msg 69 68 args;
+#X msg 75 89 boxtext;
+#X msg 86 109 coords;
+#X text 141 109 list of coords for an abstraction;
+#X msg 94 131 dir;
+#X msg 104 153 dirty;
+#X text 143 152 whether this patch has been edited since the last time
+it was saved (0 = no \, 1 = yes);
+#X msg 108 180 dollarzero;
+#X msg 117 203 editmode;
+#X text 181 202 whether the canvas is in editmode (0 = no \, 1 = yes)
+;
+#X msg 123 223 filename;
+#X msg 133 244 hitbox;
+#X msg 138 265 name;
+#X text 176 265 symbolic receive name for the canvas;
+#X text 204 286 pointer to this canvas;
+#X msg 148 286 pointer;
+#X msg 155 308 posonparent;
+#X msg 165 328 screenpos;
+#X text 233 308 poson of a gop canvas on its parent canvas;
+#X text 233 328 screen position of a visible canvas;
+#X msg 175 368 vis;
+#X text 203 368 whether a canvas is visible on the screen;
+#X text 132 89 full text of the object box for an abstraction or subpatch
+;
+#X text 181 244 see whether a coordinate lies on an object in the canvas
+;
+#X text 123 130 directory for this canvas' environment;
+#X text 178 180 value of \$0 for this canvas' environment;
+#X text 185 223 filename for this canvas' environment;
+#X obj 39 411 print;
+#X msg 174 349 toplevel;
+#X text 235 348 whether this canvas is a toplevel (0 = no \, 1 = yes)
+;
+#N canvas 196 140 428 435 canvas_environment 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 25 34 A canvas can take several forms:;
+#X text 25 54 1) A toplevel patch (e.g. \, what you get when you create
+a new patch).;
+#X text 25 84 2) An abstraction \, or a Pd patch that has been instantiated
+in an object box.;
+#X text 25 114 3) A subpatch \, like [pd foo].;
+#X text 25 144 Toplevel patches and abstractions come with an "environment"
+that is inherited by all the [pd] subpatches contained within it.;
+#X text 25 184 For example \, this subpatch inherits its "environment
+from the canvasinfo-help.pd patch which contains it.;
+#X text 25 224 What's included in a canvas' environment?;
+#X obj 119 246 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 119 266 f \$0;
+#X floatatom 119 300 5 0 0 0 - - -, f 5;
+#N canvas 433 184 450 300 another-subpatch 0;
+#X msg 148 42 bang;
+#X obj 128 63 f \$0;
+#X floatatom 148 94 5 0 0 0 - - -, f 5;
+#X text 185 95 <-- the value for \$0 is the same for;
+#X text 185 109 all canvases in the same environment.;
+#X obj 128 21 inlet;
+#X obj 128 124 outlet;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 1 0 6 0;
+#X connect 5 0 1 0;
+#X restore 169 279 pd another-subpatch;
+#X text 197 259 get the same \$0:;
+#X text 25 379 * filename;
+#X text 25 359 * directory;
+#X text 25 244 * dollarzero:;
+#X text 25 329 * args: dollarsign variables \$1 \, \$2 \, \$3 \, and
+so on (if they exist);
+#X text 7 1 [canvasinfo] What is a Canvas' Environment?;
+#X text 197 244 So this subpatch will;
+#X obj 169 246 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X floatatom 169 300 5 0 0 0 - - -, f 5;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 11 0 20 0;
+#X connect 19 0 11 0;
+#X restore 101 573 pd canvas_environment;
+#X text 111 68 list of dollarsign arguments for this canvas' environment
+;
+#N canvas 139 127 428 435 hitbox_and_coords 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [canvasinfo] hitbox and coords messages;
+#X text 25 34 The "hitbox" message tells whether there's an object
+on the canvas that includes the "x y" coordinates you send it:;
+#X obj 25 89 canvasinfo;
+#X msg 25 68 hitbox 50 75;
+#X text 111 67 <-- the point (50 \, 75) is contained within;
+#X text 134 83 the message box.;
+#X obj 25 110 unpack s f f f f;
+#X symbolatom 25 204 10 0 0 3 object - -, f 10;
+#X floatatom 93 204 5 0 0 3 top-x - -, f 5;
+#X floatatom 131 204 5 0 0 3 top-y - -, f 5;
+#X floatatom 169 204 5 0 0 3 btm-x - -, f 5;
+#X floatatom 207 203 5 0 0 3 btm-y - -, f 5;
+#X text 197 104 If there is a "hit" \, [canvasinfo];
+#X text 197 134 followed by coordinates for the;
+#X text 197 119 outputs the name of the object;
+#X text 197 149 top-right and bottom-left of its;
+#X text 197 164 bounding box.;
+#X msg 25 257 coords;
+#N canvas 433 184 450 300 gop-subpatch 0;
+#X obj 31 32 inlet;
+#X obj 31 53 canvasinfo;
+#X obj 31 184 outlet;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X coords 0 -1 1 1 94 40 1 100 100;
+#X restore 25 281 pd gop-subpatch;
+#X obj 25 334 unpack f f f f f f f f f;
+#X floatatom 25 375 5 0 0 3 x-min - -, f 5;
+#X floatatom 65 375 5 0 0 3 y-min - -, f 5;
+#X floatatom 105 375 5 0 0 3 x-max - -, f 5;
+#X floatatom 145 375 5 0 0 3 y-max - -, f 5;
+#X floatatom 185 375 5 0 0 3 width - -, f 5;
+#X floatatom 225 375 5 0 0 3 height - -, f 5;
+#X floatatom 270 375 5 0 0 3 gop - -, f 5;
+#X floatatom 310 375 5 0 0 3 x-margin - -, f 5;
+#X floatatom 365 375 5 0 0 3 y-margin - -, f 5;
+#X text 82 257 The "coords" message returns info that is set in the
+;
+#X text 132 272 "Properties" dialog for gop dimensions \,;
+#X text 132 287 data structure scaling \, and so on.;
+#X connect 3 0 7 0;
+#X connect 4 0 3 0;
+#X connect 7 0 8 0;
+#X connect 7 1 9 0;
+#X connect 7 2 10 0;
+#X connect 7 3 11 0;
+#X connect 7 4 12 0;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
+#X connect 20 0 21 0;
+#X connect 20 1 22 0;
+#X connect 20 2 23 0;
+#X connect 20 3 24 0;
+#X connect 20 4 25 0;
+#X connect 20 5 26 0;
+#X connect 20 6 27 0;
+#X connect 20 7 28 0;
+#X connect 20 8 29 0;
+#X restore 251 573 pd hitbox_and_coords;
+#X text 81 541 1) float;
+#X text 169 541 - canvas stacking level (0 = this canvas \, 1 = parent
+\, etc.);
+#X connect 11 0 20 0;
+#X connect 20 0 48 0;
+#X connect 21 0 20 0;
+#X connect 22 0 20 0;
+#X connect 23 0 20 0;
+#X connect 25 0 20 0;
+#X connect 26 0 20 0;
+#X connect 28 0 20 0;
+#X connect 29 0 20 0;
+#X connect 31 0 20 0;
+#X connect 32 0 20 0;
+#X connect 33 0 20 0;
+#X connect 36 0 20 0;
+#X connect 37 0 20 0;
+#X connect 38 0 20 0;
+#X connect 41 0 20 0;
+#X connect 49 0 20 0;
diff --git a/pd/doc/5.reference/classinfo-help.pd b/pd/doc/5.reference/classinfo-help.pd
new file mode 100644
index 000000000..972146fd5
--- /dev/null
+++ b/pd/doc/5.reference/classinfo-help.pd
@@ -0,0 +1,111 @@
+#N canvas 425 49 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header classinfo 3 12 0
+18 -204280 -1 0;
+#X obj 0 321 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 323 205 482 332 META 0;
+#X text 12 145 LIBRARY internal;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 105 OUTLET_0 list;
+#X text 12 165 AUTHOR Jonathan Wilkes;
+#X text 12 185 RELEASE_DATE 2013;
+#X text 12 205 HELP_PATCH_AUTHORS Jonathan Wilkes;
+#X text 12 5 KEYWORDS pd_op symbol_op;
+#X text 12 45 DESCRIPTION get info about a class;
+#X text 12 65 INLET_0 float args externdir methods print size;
+#X text 12 85 INLET_1 symbol;
+#X text 12 125 OUTLET_1 bang;
+#X restore 500 597 pd META;
+#X obj 0 494 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 526 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 563 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 329 cnv 17 3 122 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#N canvas 196 385 428 108 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [classinfo] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X obj 78 503 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 4 597 pddp/pddplink all_about_help_patches.pd -text Usage Guide
+;
+#X msg 53 61 print;
+#X text 94 60 print all attributes to the console;
+#X text 98 358 print;
+#X text 168 358 - print out each available message (other than "print")
+followed by a semicolon and the output for that method.;
+#X text 99 503 list;
+#X text 169 503 - output varies depending on the message sent to [pdinfo].
+;
+#X msg 83 81 args;
+#X obj 53 264 print;
+#X text 11 20 get info about a class;
+#X obj 462 3 classinfo;
+#X obj 140 264 print reject_outlet;
+#X text 125 81 list of argument types accepted by the object;
+#X msg 89 102 externdir;
+#X text 156 102 directory where an external's executable is located
+;
+#X msg 100 122 methods;
+#X text 155 122 total number of methods (not counting built-in methods)
+;
+#X msg 108 144 size;
+#X text 146 143 size of the class in bytes;
+#X obj 53 243 classinfo moses;
+#X msg 140 187 symbol nonexistent_object;
+#X text 295 276 todo: fix "print" method;
+#X text 295 291 when class doesn't exist;
+#X msg 153 210 symbol moses;
+#X obj 78 459 cnv 17 3 30 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
+-162280 0;
+#X text 98 458 symbol;
+#X text 98 388 args;
+#X text 168 388 - list of argument types accepted by the object;
+#X text 98 408 externdir;
+#X text 168 408 - directory where an external's executable is located
+;
+#X text 98 423 methods;
+#X text 168 423 - total number of methods (not counting built-in methods)
+;
+#X text 98 438 size;
+#X text 168 438 - size of the class \, in bytes;
+#X text 98 328 float;
+#X text 168 328 - method name and arguments for method entry at index
+specified by the incoming number;
+#X text 168 458 - name of a Pd class that is currently loaded;
+#X text 169 541 - name of a Pd class that is currently loaded;
+#N canvas 196 140 428 235 arg_types 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [classinfo] Argument types;
+#X text 25 34 Argument types for the class \, as well as its methods
+\, are as follows:;
+#X text 25 64 A_FLOAT: a required float argument;
+#X text 25 84 A_SYMBOL: a required symbol argument;
+#X text 25 104 A_DEFFLOAT: optional float argument (defaults to zero)
+;
+#X text 25 124 A_DEFSYM: optional symbol argument (defaults to empty
+symbol);
+#X text 25 154 A_GIMME: optional \, arbitrary-length list of atoms
+as an argument;
+#X restore 101 573 pd arg_types;
+#X text 81 541 1) symbol;
+#X floatatom 96 210 5 0 0 0 - - -, f 5;
+#X msg 340 201 symbol canvas;
+#X connect 11 0 29 0;
+#X connect 17 0 29 0;
+#X connect 23 0 29 0;
+#X connect 25 0 29 0;
+#X connect 27 0 29 0;
+#X connect 29 0 18 0;
+#X connect 29 1 21 0;
+#X connect 30 0 29 1;
+#X connect 33 0 29 1;
+#X connect 50 0 29 0;
+#X connect 51 0 29 1;
diff --git a/pd/doc/5.reference/classinfo.pd b/pd/doc/5.reference/classinfo.pd
deleted file mode 100644
index c3069b7c8..000000000
--- a/pd/doc/5.reference/classinfo.pd
+++ /dev/null
@@ -1,13 +0,0 @@
-#N canvas 495 201 450 300 10;
-#X obj 53 152 print;
-#X msg 53 23 bang;
-#X text 89 23 print all properties and values to the console;
-#X obj 53 132 classinfo;
-#X msg 83 52 symbol moses;
-#X msg 94 77 int;
-#X msg 100 99 foo;
-#X connect 1 0 3 0;
-#X connect 3 0 0 0;
-#X connect 4 0 3 0;
-#X connect 5 0 3 0;
-#X connect 6 0 3 0;
diff --git a/pd/doc/5.reference/pdinfo-help.pd b/pd/doc/5.reference/pdinfo-help.pd
index 47c552cdd..0f18107a5 100644
--- a/pd/doc/5.reference/pdinfo-help.pd
+++ b/pd/doc/5.reference/pdinfo-help.pd
@@ -1,13 +1,159 @@
-#N canvas 495 201 450 300 10;
-#X msg 83 52 dsp;
-#X obj 53 132 pdinfo;
-#X obj 53 152 print;
-#X msg 53 23 bang;
-#X text 89 23 print all properties and values to the console;
-#X msg 94 77 version;
-#X msg 100 99 symbol dsp;
-#X connect 0 0 1 0;
-#X connect 1 0 2 0;
-#X connect 3 0 1 0;
-#X connect 5 0 1 0;
-#X connect 6 0 1 0;
+#N canvas 308 59 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 -228856 -66577 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header pdinfo 3 12 0 18
+-204280 -1 0;
+#X obj 0 389 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+-228856 -1 0;
+#N canvas 34 81 482 506 META 0;
+#X text 12 175 LIBRARY internal;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 235 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
+to conform to the PDDP template for Pd version 0.42.;
+#X text 12 5 KEYWORDS pd_op;
+#X text 12 45 DESCRIPTION get info from the global Pd instance that's
+running;
+#X msg 54 545 audio-api audio-apilist audio-apilist-raw audio-inchannels
+audio-indev audio-indevlist audio-multidev-support audio-outchannels
+audio-outdev audio-outdevlist blocksize dir dsp-status midi-api midi-apilist
+midi-indev midi-indevlist midi-outdev midi-outdevlist pi samplerate
+version;
+#X text 12 75 INLET_0 audio-api audio-apilist audio-apilist-raw audio-inchannels
+audio-indev audio-indevlist audio-multidev-support audio-outchannels
+audio-outdev audio-outdevlist blocksize dir dsp-status midi-api midi-apilist
+midi-indev midi-indevlist midi-outdev midi-outdevlist pi samplerate
+version;
+#X text 12 155 OUTLET_0 list;
+#X text 12 195 AUTHOR Jonathan Wilkes;
+#X text 12 215 RELEASE_DATE 2013;
+#X restore 500 597 pd META;
+#X obj 0 486 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 -228856 -1 0;
+#X obj 0 523 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 -228856 -1 0;
+#X obj 0 563 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 -228856 -1 0;
+#X obj 78 397 cnv 17 3 30 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#N canvas 102 481 428 108 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X obj 22 36 samplerate~;
+#X text 7 1 [pdinfo] Related Objects;
+#X restore 101 597 pd Related_objects;
+#X obj 78 495 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
+-162280 0;
+#X obj 4 597 pddp/pddplink all_about_help_patches.pd -text Usage Guide
+;
+#X text 11 20 get info from the global Pd instance that's running;
+#X obj 503 7 pdinfo;
+#X obj 39 286 pdinfo;
+#X msg 39 80 print;
+#X text 80 79 print all attributes to the console;
+#X msg 101 255 version;
+#X obj 39 317 print pd-version;
+#X text 155 254 version of Pd that's running (MAJOR MINOR TEST);
+#X msg 95 232 samplerate;
+#X text 169 231 global samplerate;
+#X msg 78 145 dir;
+#X text 107 144 directory of the Pd executable;
+#X msg 72 115 blocksize;
+#X text 144 114 global blocksize;
+#X msg 92 205 pi;
+#X text 121 204 value of Pi;
+#X msg 89 175 dsp-status;
+#X text 164 175 whether dsp is turned on (0 = off \, 1 = on);
+#N canvas 100 44 428 514 audio-attributes 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [pdinfo] Audio Attributes;
+#X obj 29 448 pdinfo;
+#X obj 29 469 print pd-version;
+#X msg 29 37 audio-api;
+#X text 94 37 audio api that is currently in use;
+#X msg 42 72 audio-apilist;
+#X text 134 71 list of available audio apis;
+#X msg 65 102 audio-apilist-raw;
+#X text 179 102 audio apis for all platforms;
+#X msg 79 132 audio-inchannels;
+#X text 184 132 number of incoming audio channels;
+#X text 179 188 input device at index \$1 (defaults to 0);
+#X floatatom 84 168 5 0 0 0 - - -, f 5;
+#X msg 84 189 audio-indev \$1;
+#X msg 87 229 audio-indevlist;
+#X text 192 229 list of input device names;
+#X msg 91 259 audio-multidev-support;
+#X text 236 259 whether the current setup;
+#X text 236 279 supports multiple devices;
+#X msg 88 309 audio-outchannels;
+#X text 203 309 number of outgoing audio channels;
+#X msg 84 377 audio-outdev \$1;
+#X text 183 376 input device at index \$1 (defaults to 0);
+#X floatatom 84 356 5 0 0 0 - - -, f 5;
+#X msg 84 414 audio-outdevlist;
+#X text 193 414 list of output device names;
+#X text 179 203 returns: device_index no_of_channels;
+#X text 183 391 returns: device_index no_of_channels;
+#X connect 2 0 3 0;
+#X connect 4 0 2 0;
+#X connect 6 0 2 0;
+#X connect 8 0 2 0;
+#X connect 10 0 2 0;
+#X connect 13 0 14 0;
+#X connect 14 0 2 0;
+#X connect 15 0 2 0;
+#X connect 17 0 2 0;
+#X connect 20 0 2 0;
+#X connect 22 0 2 0;
+#X connect 24 0 22 0;
+#X connect 25 0 2 0;
+#X restore 206 317 pd audio-attributes;
+#N canvas 125 83 428 395 midi-attributes 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 -204280 -1 0;
+#X text 7 1 [pdinfo] Midi Attributes;
+#X obj 23 324 pdinfo;
+#X obj 23 345 print pd-version;
+#X text 173 128 input device at index \$1 (defaults to 0);
+#X floatatom 78 108 5 0 0 0 - - -, f 5;
+#X text 186 169 list of input device names;
+#X text 177 237 input device at index \$1 (defaults to 0);
+#X floatatom 78 217 5 0 0 0 - - -, f 5;
+#X text 187 290 list of output device names;
+#X msg 23 45 midi-api;
+#X text 88 45 midi api that is currently in use;
+#X msg 36 80 midi-apilist;
+#X text 128 79 list of available midi apis;
+#X msg 78 129 midi-indev \$1;
+#X msg 81 169 midi-indevlist;
+#X msg 78 239 midi-outdev \$1;
+#X msg 78 290 midi-outdevlist;
+#X text 173 143 returns: device_index;
+#X text 177 250 returns: device_index;
+#X connect 2 0 3 0;
+#X connect 5 0 14 0;
+#X connect 8 0 16 0;
+#X connect 10 0 2 0;
+#X connect 12 0 2 0;
+#X connect 14 0 2 0;
+#X connect 15 0 2 0;
+#X connect 16 0 2 0;
+#X connect 17 0 2 0;
+#X restore 346 317 pd midi-attributes;
+#X text 98 396 print;
+#X text 168 396 - print out each available message (other than "print")
+followed by a semicolon and the output for that method.;
+#X text 99 495 list;
+#X text 81 540 none;
+#X text 168 436 pdinfo's available methods are shown above \, with
+audio-device and midi-device message in subpatches.;
+#X text 169 495 - output varies depending on the message sent to [pdinfo]
+;
+#X connect 13 0 17 0;
+#X connect 14 0 13 0;
+#X connect 16 0 13 0;
+#X connect 19 0 13 0;
+#X connect 21 0 13 0;
+#X connect 23 0 13 0;
+#X connect 25 0 13 0;
+#X connect 27 0 13 0;
diff --git a/pd/src/search-plugin.tcl b/pd/src/search-plugin.tcl
index f9a121b3c..3bd2a3a4b 100644
--- a/pd/src/search-plugin.tcl
+++ b/pd/src/search-plugin.tcl
@@ -192,6 +192,8 @@ proc ::dialog_search::create_dialog {mytoplevel} {
     # tweak: get rid of arrow so the combobox looks like a simple entry widget
     ttk::style configure Entry.TCombobox -highlightcolor $linux_wm_hlcolor
     ttk::style configure Genre.TCombobox
+    ttk::style configure GenreFocused.TCombobox
+    ttk::style map GenreFocused.TCombobox -fieldbackground [list readonly $linux_wm_hlcolor]
     ttk::style configure Search.TButton
     ttk::style configure Search.TCheckbutton
     # widgets
@@ -214,7 +216,7 @@ proc ::dialog_search::create_dialog {mytoplevel} {
 	-font "$searchfont -12" -style "Entry.TCombobox" -cursor "xterm"
     ttk::button $mytoplevel.f.searchbutton -text [_ "Search"] -takefocus 1 \
 	-command ::dialog_search::search -style Search.TButton
-    ttk::combobox $mytoplevel.f.genrebox -values $genres -state readonly \
+    ttk::combobox $mytoplevel.f.genrebox -values $genres -state readonly\
 	-style "Genre.TCombobox" -takefocus 1
     $mytoplevel.f.genrebox current 0
     ttk::label $mytoplevel.f.advancedlabel -text [_ "Help"] -foreground $linux_wm_hlcolor \
@@ -370,15 +372,31 @@ proc ::dialog_search::create_dialog {mytoplevel} {
 	"::dialog_search::ctrl_bksp $mytoplevel.f.searchtextentry"
     bind $mytoplevel.f.searchtextentry <$::modifier-Key-a> \
         "$mytoplevel.f.searchtextentry selection range 0 end; break"
+    bind $mytoplevel.f.searchbutton <FocusIn> "$mytoplevel.statusbar configure -text \"Search\""
+    bind $mytoplevel.f.searchbutton <FocusOut> "$mytoplevel.statusbar configure -text \"\""
+    bind $mytoplevel.f.searchbutton <Enter> "$mytoplevel.statusbar configure -text \"Search\""
+    bind $mytoplevel.f.searchbutton <Leave> "$mytoplevel.statusbar configure -text \"\""
     bind $mytoplevel.f.genrebox <<ComboboxSelected>> "::dialog_search::filter_results \
 	$mytoplevel.f.genrebox $mytoplevel.resultstext"
+    bind $mytoplevel.f.genrebox <FocusIn> "$mytoplevel.statusbar configure -text \
+        \"Filter the search results by category\"; $mytoplevel.f.genrebox configure -style GenreFocused.TCombobox"
+    bind $mytoplevel.f.genrebox <FocusOut> "$mytoplevel.statusbar configure -text \"\"; $mytoplevel.f.genrebox configure -style Genre.TCombobox"
+    bind $mytoplevel.f.genrebox <Enter> "$mytoplevel.statusbar configure -text \
+        \"Filter the search results by category\"; $mytoplevel.f.genrebox configure -style GenreFocused.TCombobox"
+    bind $mytoplevel.f.genrebox <Leave> "$mytoplevel.statusbar configure -text \"\"; $mytoplevel.f.genrebox configure -style Genre.TCombobox"
     set advancedlabeltext [_ "Advanced search options"]
     bind $mytoplevel.f.advancedlabel <Enter> "$mytoplevel.f.advancedlabel configure \
 	-cursor hand2; $mytoplevel.statusbar configure -text \"$advancedlabeltext\""
     bind $mytoplevel.f.advancedlabel <Leave> "$mytoplevel.f.advancedlabel configure \
 	-cursor xterm; $mytoplevel.statusbar configure -text \"\""
+    bind $mytoplevel.f.advancedlabel <FocusIn> "$mytoplevel.f.advancedlabel configure \
+   -cursor hand2 -text \">Help<\"; $mytoplevel.statusbar configure -text \"$advancedlabeltext\""
+    bind $mytoplevel.f.advancedlabel <FocusOut> "$mytoplevel.f.advancedlabel configure \
+   -cursor xterm -text \"Help\"; $mytoplevel.statusbar configure -text \"\""
     bind $mytoplevel.f.advancedlabel <Button-1> \
 	{menu_doc_open doc/5.reference all_about_finding_objects.pd}
+    bind $mytoplevel.f.advancedlabel <Return> \
+    {menu_doc_open doc/5.reference all_about_finding_objects.pd}
 #   Right now we're suppressing dialog bindings because helpbrowser namespace
 #   doesn't work unless all procs are prefixed with dialog_
 #    ::pd_bindings::dialog_bindings $mytoplevel "search"
@@ -1181,11 +1199,11 @@ proc ::dialog_search::intro { t } {
     ]
     set i 1
     foreach {title dir desc} $intro_docs {
-        $t insert end "$title" "link clickable_dir intro_link$i spacing"
+        $t insert end "$title" "link clickable_dir intro_link$i spacing dt"
         $t insert end [file join $::sys_libdir doc $dir] basedir
         $t insert end "0" is_libdir
         $t insert end "dummy" filename
-	$t insert end " $desc\n" description
+	$t insert end "\t$desc\n" dd
 	set i [expr {($i+1)%30}]
     }
     $t insert end [_ "All About Pd"] "link homepage_file spacing"
@@ -1193,8 +1211,8 @@ proc ::dialog_search::intro { t } {
     $t insert end all_about.pd filename
     $t insert end " " description
     $t insert end \
-        [_ "reference patches for key concepts and settings in Pd"] \
-        description
+        [join  [list \t [_ "reference patches for key concepts and settings in Pd"]] ""] \
+        "description dd"
     $t insert end "\n"
 
     $t insert end [_ "Advanced Topics"] homepage_title
@@ -1213,11 +1231,11 @@ proc ::dialog_search::intro { t } {
     ]
     set i 0
     foreach {title dir desc} $advanced_docs {
-	$t insert end "$title" "link clickable_dir intro_link$i spacing"
+	$t insert end "$title" "link clickable_dir intro_link$i spacing dt"
 	$t insert end [file join $::sys_libdir doc $dir] basedir
 	$t insert end "0" is_libdir
 	$t insert end "dummy" filename
-	$t insert end " $desc\n" description
+	$t insert end "\t$desc\n" "description dd"
 	set i [expr {($i+1)%30}]
     }
 
-- 
GitLab