::
::::  /hoon/belt/dill/mar
  ::
/?    310
/-    kyev, sole
/+    old-zuse
::
::::
  ::
=,  sole
=,  old-zuse
|_  dill-belt
::
++  grab                                                ::  convert from
  |%
  ++  json
    =<  (cork . kyev)
    |=  jon/^json  ^-  ^kyev
    !!
::    %-  need
::    %.  jon  =>  jo  %-  ot
::    :~  mod+(cu silt (ar (su (perk ~[%ctrl %shift %alt %meta]))))
::        :-  %key
::        %+  cu  |*(a/$%({$str @t} {$act @}) ?+(-.a a $str +.a))
::        =-  (of [str+so act+(su (perk -)) ~])
::        :~  %ctrl  %shift  %alt   %meta   %entr  %esc  %caps  %uncap
::            %pgup  %pgdn   %home  %end    %baxp  %del  %ins
::            %up    %down   %left  %right
::    ==  ==
  ++  kyev
    |=  kev/^kyev  ^-  dill-belt
    ~|  dill-belt-incomplete+kev
    ?:  ?=({$act ?($ctrl $shift $alt $meta)} q.kev)
      [%txt ~]                        ::  ignore
    =+  mod=(~(del in p.kev) %shift)
    ?^  mod
      ?^  q.kev  !!                   ::  only accept strings
      =.  q.kev
        ?.  (~(has in p.kev) %ctrl)
          q.kev
        (con 96 q.kev)                ::  ctrl key decoding
      =+  cha=(tuba (trip q.kev))
      ?>  ?=({@ $~} cha)               ::  of a single character
      ?+  mod  !!                     ::  modified by one buckykey
        {$ctrl $~ $~}  [%ctl i.cha]
        {$alt $~ $~}   [%met i.cha]
      ==
    ?@  q.kev
      [%txt (tuba (trip q.kev))]
    ?+  +.q.kev  !!
      $del   [%del ~]
      $baxp  [%bac ~]
      $entr  [%ret ~]
      $up     [%aro %u]
      $down   [%aro %d]
      $left   [%aro %l]
      $right  [%aro %r]
    ==  ::  %yow, %rez?
  ::
  ++  noun  dill-belt                                   ::  clam from %noun
  --
--