22 drracket:module-language-tools
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).
(or/c (listof (list/c string? (is-a?/c bitmap%) (-> (is-a?/c drracket:unit:frame<%>) any) (or/c real? #f))) #f)
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. Similarly, if the fourth element from the list (the argument to #:number) is not present, then it is treated as #f.
procedure
(drracket:module-language-tools:add-opt-out-toolbar-button make-button id [ #:number number]) → void?
make-button :
(-> (is-a?/c top-level-window<%>) (is-a?/c area-container<%>) (is-a?/c switchable-button%)) id : symbol? number : (or/c real? #f) = #f
The number argument is the same as the number argument to register-toolbar-button.
procedure
(drracket:module-language-tools:add-online-expansion-handler mod-path id local-handler) → void? mod-path : path-string? id : symbol?
local-handler :
(-> (is-a?/c drracket:unit:definitions-text<%>) any/c any)
The first two arguments name a procedure in a module that is loaded by dynamic-require is specially designed 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.)
If the expansion raises an exception, then that exception is supplied as the first argument instead of the syntax object. If a non-exn? is raised, or if the expansion process is terminated (e.g. via custodian-shutdown-all called during expansion), then the expansion monitor is not notified.
The path? argument is the path that was the current-directory when the code was expanded. This directory should be used as the current-directory when resolving module paths obtained from the syntax object.
The third argument is the source object used in the syntax objects that come from the definitions window in DrRacket. It may be a path (if the file was saved), but it also might not be. Use equal? to compare it with the syntax-source field of syntax objects to determine if they come from the definitions window.
Note that the thread that calls this procedure may be killed at any time: 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.
Some code, however, should be longer running, surviving such custodian shutdowns. To support this, the procedure called in the separate place is supplied with a more powerful custodian that is not shut down.
procedure
(drracket:module-language-tools:add-online-expansion-monitor mod-path id local-handler) → void? mod-path : path-string? id : symbol?
local-handler :
(-> (is-a?/c drracket:unit:definitions-text<%>) (or/c drracket:module-language-tools:start? any/c) any)
Like drracket:module-language-tools:add-online-expansion-handler, the first two arguments name a procedure that is called in the separate place designated for expansion.
The expectation is that this procedure creates a thread and monitors the expansion process, sending back information to the main place while expansion is progressing.
procedure
val : any/c
procedure
(drracket:module-language-tools:register-online-expansion-pref func)
→ void? func : (-> (is-a?/c vertical-panel%) void?)
procedure
val : any/c