If the result of read-language for a language is a function,
DrRacket will query it to determine if there are any new toolbar
buttons to be used when editing files in this language (when
DrRacket’s language is set to the Module language).
Specifically, DrRacket will pass 'drracket:toolbar-buttons
to the function and expect back a value matching this contract:
which is then used to create new toolbar buttons, one for each list in the
first. The string is the label on the button; the bitmap is the icon
(it should be 16x16), and the function is called when the button is clicked.
If the result is #f, then no toolbar buttons are created.
To implement functionality similar to the Run button, call the
execute-callback method. You may also
want to use the drracket:rep:after-expression parameter.
If 'drracket:toolbar-buttons is not recognized, DrRacket will also
pass 'drscheme:toolbar-buttons; this is for backwards
compatibility and new code should not use it.
Call this function to add another button to DrRacket’s toolbar. When buttons are added this way,
DrRacket monitors the #lang line at the top of the file; when it changes DrRacket queries
the language to see if this button should be included.
These buttons are “opt out”, meaning that if the language doesn’t explicitly ask to not
have this button (or all such buttons), the button will appear.
for more details on how a language can opt out.
DrRacket will invoke the get-info
proc from read-language
for backwards compatibility).
If the result is a list of symbols, the
listed symbols are opted out. If the result is #f
, all buttons are opted
out. The default is the empty list, meaning that all opt-out buttons appear.
Registers a pair of procedures with DrRacket’s online expansion machinery.
The first two arguments name a procedure in a module that is loaded by
dynamic-require is a separate place. When DrRacket detects that
the editor has been modified, it sends the contents of the editor over to
that separate place, expands the program there, and then supplies
the fully expanded object to that first procedure. (The procedure is called
in the same context as the expansion process.)
Note that the thread that calls this procedure may be
killed at anytime: DrRacket may kill it when the user types in the buffer
(in order to start a new expansion), but bizarro code may also create a separate
thread during expansion that lurks around and then mutates arbitrary things.
The result of the procedure is expected to be something that can be sent
across a place-channel, which is then sent back to the original
place where DrRacket itself is running and passed to the local-handler
argument. At this point, the only code running is trusted code (DrRacket itself
and other tools), but any long running computations may freeze DrRacket’s GUI,
since this procedure is invoked on DrRacket’s eventspace’s handler thread.