<\body> Besides the basic concepts from the previous sections, which underly the scheme API for , the kernel implements several other utilities and language extensions. In this section, we will briefly sketch some of them on hand of examples. Further details can be found in the chapter about extensions to and utilities|../utils/scheme-utils.en.tm>. implements the routines and for matching regular expressions and selecting subexpressions along a ``path''. These routines both work for the type. For instance, in order to search all expressions of the form <\equation*> |1+>> in the current buffer, where > and > are general expressions, one may use the following command: <\session|scheme|default> <\input|scheme] > (select (buffer-tree) '(:* (:match (frac :%1 (concat "1+" (sqrt :%1)))))) supports several commands for interactive dialogues with the user. For instance, when executing the following scheme command, you will be prompted for two numbers, whose product will be displayed in the footer: <\session|scheme|default> <\input|Scheme] > (user-ask "First number:" \ \ (lambda (a) \ \ \ \ (user-ask "Second number:" \ \ \ \ \ \ (lambda (b) \ \ \ \ \ \ \ \ (set-message (number-\string (* (string-\number a) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (string-\number b))) \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "product"))))) <\input|Scheme] > \; When writing a plug-in, you may wish to define some new user preferences. This can be done using the command, which adds a list of user preferences, together with their default values and a call-back routine. The call-back routine is called whenever you change the corresponding preference. For instance: <\scm-code> (define-preferences \ \ ("Gnu's hair color" "brown" notify-gnu-hair-change) \ \ ("Snail's cruising speed" "1mm/sec" notify-Achilles)) Preferences can be set, reset and read using , and . New data formats and converters can be declared using the and instructions. When a format can be converted from or into , then it will automatically appear into the and menus. Similarly, when a format can be converted to , then it also becomes a valid format for images. also attempts to combine explictly declared converters into new ones. Typically, the declaration of a new format and a converter would look like: <\scm-code> (define-format blablah \ \ (:name "Blablah") \ \ (:suffix "bla")) \; (converter blablah-file latex-file \ \ (:require (url-exists-in-path? "bla2tex")) \ \ (:shell "bla2tex" from "\" to))