     sync ted
     sendAction {det}
 
-
-  Mousetrap.handleKey = (char, mod, e)->
-    norm = {
-      capslock:  'caps'
-      pageup:    'pgup'
-      pagedown:  'pgdn'
-      backspace: 'baxp'
-      enter:     'entr'
-    }
-
-    key = switch
-      when char.length is 1
-        if e.type is 'keypress'
-          chac = char.charCodeAt(0)
-          if chac < 32          # normalize ctrl keys
-            char = String.fromCharCode chac | 96
-          str: char
-      when e.type is 'keydown'
-        if char isnt 'space'
-          act: norm[char] ? char
-      when e.type is 'keyup' and norm[key] is 'caps'
-        act: 'uncap'
-    if !key then return
-    if key.act and key.act in mod
-      return
-    e.preventDefault()
+  yank = ''
+  eatKyev= (mod, key)->
     mapr = matr.props
-    #[fore, aft] = (
-    #  [sli,cur] = [mapr.input.slice, mapr.cursor]
-    #  [sli(0, cur), sli(cur)]
-    #)
-
     switch mod.sort().join '-'
       when '', 'shift'
         if key.str

    $el.css {background}
    if background
      setTimeout (-> flash $el,''), 50

  matr = rend (Matr
    rows:[]

    switch Object.keys(ruh)[0]
      when 'txt' then update rows: [mapr.rows..., ruh.txt]
      when 'tan' then ruh.tan.split("\n").reverse().map (txt)-> peer {txt}
      when 'hop' then update cursor: ruh.hop; bell() # XX buffer.transpose?
      when 'pro' then update prompt: ruh.pro.cad
      when 'blk' then console.log "Stub #{str ruh}"
      when 'det' then buffer.receive ruh.det; sync ruh.det.ted
      when 'act' then switch ruh.act
        when 'clr' then update rows:[]
        when 'bel' then bell()
        when 'nex' then update
          input: ""
          cursor: 0
