$WW,1$$FG,5$$TX+CX,"Keyboard Allocations"$$FG$

See $LK,"Char",A="HI:Char"$ for definition of scan codes.

When you are at the cmd line, editing documents, browsing documentation and help, entering items in forms or in menu's, the $LK,"CDoc",A="MN:CDoc"$ editor handles keys.  It allows you to define your own key handlers in a $LK,"MyPutKey",A="MN:MyPutKey"$() function.  If you choose, you can catch most keys, overriding the default handlers.  See $LK,"DocPutKey",A="MN:DocPutKey"$().  The following is an overview of key allocations.

$FG,2$ALT-keys and ALT-SHIFT-keys$FG$

Free for user cfgurations in your $LK,"MyPutKey",A="MN:MyPutKey"$() handler, except for $FG,2$ALT-BACKSPACE$FG$ (undo).  There are a few examples pre-defined, but you can change them if you wish.

$FG,2$ALT-digit keys$FG$

Extended ASCII (3 digit decimal number).



$FG,2$CTRL-ALT-keys and CTRL-ALT-SHIFT-keys$FG$

Handled at a system level, NOT by the $LK,"CDoc",A="MN:CDoc"$ editor.  I reserve the right to allocate these, but in the mean time, you can make your own by assigning handlers to the $LK,"fp_ctrl_alt_let_cbs",A="MN:fp_ctrl_alt_let_cbs"$[] array.  Be aware that they operate in an interrupt framework, so they are tricky to use.


$FG,2$CTRL-function key$FG$

Auto-completes wordstat words.



$FG,2$CTRL-digit key$FG$

$FG$Auto-completes dictionary words.


$FG,2$CTRL-SHIFT-function key$FG$

$FG$Jumps to src code.


$FG,2$CTRL-SHIFT-digit key$FG$

Jumps to dictionary definition.


$FG,2$function keys and SHIFT-function keys$FG$

$FG$I reserve the right to allocate these, but there are some free now.


$FG,2$CTRL-key and CTRL-SHIFT-key$FG$

I reserve the right to allocate to these.  There are not many free.



$FG,5$$TX+CX,"Behind the Scenes"$$FG$

$AN,"",A="PutKeyHandling"$The editor mostly stays in a $LK,"GetKey",A="MN:GetKey"$()/$LK,"PutKey",A="MN:PutKey"$() loop.  The putkey portion is where keys are acted-upon.  TempleOS has a chain of putkey handlers in a $LK,"Circular Queue",A="HI:Circular Queue"$ with priorities.  The highest priority handlers can choose to terminate handling, otherwise, the keys get sent on down the chain.

$LK,"KeyDevAdd",A="MN:KeyDevAdd"$() defines a putkey device with a priority.  "Device" might be a misnomer.  Currently, the following are defined:

Priority    Handler
---------- ---------
$FG,2$0x20000000$FG$ $LK,"MyPutKey",A="MN:MyPutKey"$() user handler
$FG,2$0x40000000$FG$ $LK,"KDInputFilterPutKey",A="MN:KDInputFilterPutKey"$() for $LK,"Auto",A="MN:Auto"$(), $LK,"AutoStr",A="MN:AutoStr"$(), and $LK,"AutoFile",A="MN:AutoFile"$() handling.
$FG,2$0x60000000$FG$ $LK,"KDRawDisplayPutKey",A="MN:KDRawDisplayPutKey"$() direct to video mem debug output. 
$FG,2$0x80000000$FG$ $LK,"KDDocPutKey",A="MN:KDDocPutKey"$() standard document cmds

Since handling individual keys is slow, TempleOS supports PutS() as well.  If no puts handler is defined, individual keys are sent.

$LK,"CDoc",A="MN:CDoc"$$FG,2$.user_put_key$FG$ and $LK,"CDoc",A="MN:CDoc"$$FG,2$.user_put_s$FG$ are call back routines which offer some neat tricks.  See $LK,"::/Apps/MusicOrgan/JukeBox.CPP"$.  There is a var $LK,"CDoc",A="MN:CDoc"$$FG,2$.user_put_data$FG$ which gets passed to them.
