anchor.diff:      (#\Left-Control :control)
       (#\Right-Control :control)
       (#\Left-Meta :meta)
  -    (#\Right-Meta :meta)
  +    (#\Right-Meta :shift2)
       (#\Left-Super :super)
       (#\Right-Super :super)
       (#\Left-Hyper :hyper)
  
positive.code:                                                 (#\Up-Arrow . #\Up-Arrow)
                                                  (#\Left-Arrow . #\Left-Arrow)
                                                  (#\Down-Arrow . #\Down-Arrow)
                                                  (#\Right-Arrow . #\Right-Arrow))))
  
  (defvar *enus-keymap* (make-instance 'simple-keymap
                                       :name "En-US"
  
negative.code:                                                 (#\Down-Arrow . #\Down-Arrow)
                                                  (#\Right-Arrow . #\Right-Arrow))))
  
  (defparameter *nobk-keymap* (make-instance 'simple-keymap
                                       :name "No-BK"
                                       :unshifted '((#\0 . #\0)
                                                    (#\1 . #\1)
                                                    (#\2 . #\2)
                                                    (#\3 . #\3)
                                                    (#\4 . #\4)
                                                    (#\5 . #\5)
                                                    (#\6 . #\6)
                                                    (#\7 . #\7)
                                                    (#\8 . #\8)
                                                    (#\9 . #\9)
                                                    (#\A . #\a)
                                                    (#\B . #\b)
                                                    (#\C . #\c)
                                                    (#\D . #\d)
                                                    (#\E . #\e)
                                                    (#\F . #\f)
                                                    (#\G . #\g)
                                                    (#\H . #\h)
                                                    (#\I . #\i)
                                                    (#\J . #\j)
                                                    (#\K . #\k)
                                                    (#\L . #\l)
                                                    (#\M . #\m)
                                                    (#\N . #\n)
                                                    (#\O . #\o)
                                                    (#\P . #\p)
                                                    (#\Q . #\q)
                                                    (#\R . #\r)
                                                    (#\S . #\s)
                                                    (#\T . #\t)
                                                    (#\U . #\u)
                                                    (#\V . #\v)
                                                    (#\W . #\w)
                                                    (#\X . #\x)
                                                    (#\Y . #\y)
                                                    (#\Z . #\z)
                                                    (#\- . #\+)
                                                    (#\= . #\\)
                                                    (#\[ . #\å)
                                                    (#\] . #\")
                                                    (#\; . #\ø)
                                                    (#\' . #\æ)
                                                    (#\` . #\|)
                                                    (#\# . #\')
                                                    (#\, . #\,)
                                                    (#\. . #\.)
                                                    (#\/ . #\-)
                                                    (#\\ . #\<)
                                                    (#\Esc . #\Esc)
                                                    (#\Backspace . #\Backspace)
                                                    (#\Tab . #\Tab)
                                                    (#\Newline . #\Newline)
                                                    (#\Space . #\Space)
                                                    (#\F1 . #\F1)
                                                    (#\F2 . #\F2)
                                                    (#\F3 . #\F3)
                                                    (#\F4 . #\F4)
                                                    (#\F5 . #\F5)
                                                    (#\F6 . #\F6)
                                                    (#\F7 . #\F7)
                                                    (#\F8 . #\F8)
                                                    (#\F9 . #\F9)
                                                    (#\F10 . #\F10)
                                                    (#\F11 . #\F11)
                                                    (#\F12 . #\F12)
                                                    (#\KP-0 . #\0)
                                                    (#\KP-1 . #\1)
                                                    (#\KP-2 . #\2)
                                                    (#\KP-3 . #\3)
                                                    (#\KP-4 . #\4)
                                                    (#\KP-5 . #\5)
                                                    (#\KP-6 . #\6)
                                                    (#\KP-7 . #\7)
                                                    (#\KP-8 . #\8)
                                                    (#\KP-9 . #\9)
                                                    (#\KP-Minus . #\-)
                                                    (#\KP-Plus . #\+)
                                                    (#\KP-Period . #\.)
                                                    (#\KP-Multiply . #\*)
                                                    (#\KP-Divide . #\\)
                                                    (#\KP-Enter . #\Newline)
                                                    (#\Menu . #\Menu)
                                                    (#\Insert . #\Insert)
                                                    (#\Home . #\Home)
                                                    (#\Page-Up . #\Page-Up)
                                                    (#\Delete . #\Delete)
                                                    (#\End . #\End)
                                                    (#\Page-Down . #\Page-Down)
                                                    (#\Up-Arrow . #\Up-Arrow)
                                                    (#\Left-Arrow . #\Left-Arrow)
                                                    (#\Down-Arrow . #\Down-Arrow)
                                                    (#\Right-Arrow . #\Right-Arrow))
                                       :shifted '((#\0 . #\=)
                                                  (#\1 . #\!)
                                                  (#\2 . #\")
                                                  (#\3 . #\#)
                                                  (#\4 . #\¤)
                                                  (#\5 . #\%)
                                                  (#\6 . #\&)
                                                  (#\7 . #\/)
                                                  (#\8 . #\()
                                                  (#\9 . #\))
                                                  (#\A . #\A)
                                                  (#\B . #\B)
                                                  (#\C . #\C)
                                                  (#\D . #\D)
                                                  (#\E . #\E)
                                                  (#\F . #\F)
                                                  (#\G . #\G)
                                                  (#\H . #\H)
                                                  (#\I . #\I)
                                                  (#\J . #\J)
                                                  (#\K . #\K)
                                                  (#\L . #\L)
                                                  (#\M . #\M)
                                                  (#\N . #\N)
                                                  (#\O . #\O)
                                                  (#\P . #\P)
                                                  (#\Q . #\Q)
                                                  (#\R . #\R)
                                                  (#\S . #\S)
                                                  (#\T . #\T)
                                                  (#\U . #\U)
                                                  (#\V . #\V)
                                                  (#\W . #\W)
                                                  (#\X . #\X)
                                                  (#\Y . #\Y)
                                                  (#\Z . #\Z)
                                                  (#\- . #\?)
                                                  (#\= . #\`)
                                                  (#\[ . #\Å)
                                                  (#\] . #\^)
                                                  (#\; . #\Ø)
                                                  (#\' . #\Æ)
                                                  (#\` . #\§)
                                                  (#\# . #\*)
                                                  (#\, . #\;)
                                                  (#\. . #\:)
                                                  (#\/ . #\_)
  						(#\\ . #\>)
                                                  (#\Esc . #\Esc)
                                                  (#\Backspace . #\Backspace)
                                                  (#\Tab . #\Tab)
                                                  (#\Newline . #\Newline)
                                                  (#\Space . #\Space)
                                                  (#\F1 . #\F1)
                                                  (#\F2 . #\F2)
                                                  (#\F3 . #\F3)
                                                  (#\F4 . #\F4)
                                                  (#\F5 . #\F5)
                                                  (#\F6 . #\F6)
                                                  (#\F7 . #\F7)
                                                  (#\F8 . #\F8)
                                                  (#\F9 . #\F9)
                                                  (#\F10 . #\F10)
                                                  (#\F11 . #\F11)
                                                  (#\F12 . #\F12)
                                                  (#\KP-0 . #\0)
                                                  (#\KP-1 . #\1)
                                                  (#\KP-2 . #\2)
                                                  (#\KP-3 . #\3)
                                                  (#\KP-4 . #\4)
                                                  (#\KP-5 . #\5)
                                                  (#\KP-6 . #\6)
                                                  (#\KP-7 . #\7)
                                                  (#\KP-8 . #\8)
                                                  (#\KP-9 . #\9)
                                                  (#\KP-Minus . #\-)
                                                  (#\KP-Plus . #\+)
                                                  (#\KP-Period . #\.)
                                                  (#\KP-Multiply . #\*)
                                                  (#\KP-Divide . #\\)
                                                  (#\KP-Enter . #\Newline)
                                                  (#\Menu . #\Menu)
                                                  (#\Insert . #\Insert)
                                                  (#\Home . #\Home)
                                                  (#\Page-Up . #\Page-Up)
                                                  (#\Delete . #\Delete)
                                                  (#\End . #\End)
                                                  (#\Page-Down . #\Page-Down)
                                                  (#\Up-Arrow . #\Up-Arrow)
                                                  (#\Left-Arrow . #\Left-Arrow)
                                                  (#\Down-Arrow . #\Down-Arrow)
                                                  (#\Right-Arrow . #\Right-Arrow))
  				     :shifted2 '((#\0 . #\})
  						 (#\1 . #\¡)
  						 (#\2 . #\@)
  						 (#\3 . #\£)
  						 (#\4 . #\$)
  						 (#\5 . #\½)
  						 (#\6 . #\¥)
  						 (#\7 . #\{)
  						 (#\8 . #\[)
  						 (#\9 . #\])
  						 (#\A . #\ª)
  						 (#\B . #\”)
  						 (#\C . #\©)
  						 (#\D . #\ð)
  						 (#\E . #\€)
  						 (#\F . #\đ)
  						 (#\G . #\ŋ)
  						 (#\H . #\ħ)
  						 (#\I . #\→)
  						 (#\J . #\̉)
  						 (#\K . #\ĸ)
  						 (#\L . #\ł)
  						 (#\M . #\µ)
  						 (#\N . #\n)
  						 (#\O . #\œ)
  						 (#\P . #\π)
  						 (#\Q . #\@)
  						 (#\R . #\®)
  						 (#\S . #\ß)
  						 (#\T . #\þ)
  						 (#\U . #\↓)
  						 (#\V . #\“)
  						 (#\W . #\ł)
  						 (#\X . #\»)
  						 (#\Y . #\←)
  						 (#\Z . #\«)
  						 (#\- . #\±)
  						 (#\= . #\')
  						 (#\[ . #\")
  						 (#\] . #\~)
  						 (#\; . #\')
  						 (#\' . #\')
  						 (#\` . #\¦)
  						 (#\# . #\˝)
  						 (#\, . #\¸)
  						 (#\. . #\…)
  						 (#\/ . #\–)
  						 (#\\ . #\½))))
  
  (defparameter *pancyr-keymap* (make-instance 'simple-keymap
                                       :name "PanCyr"
                                       :unshifted '((#\0 . #\0)
                                                    (#\1 . #\1)
                                                    (#\2 . #\2)
                                                    (#\3 . #\3)
                                                    (#\4 . #\4)
                                                    (#\5 . #\5)
                                                    (#\6 . #\6)
                                                    (#\7 . #\7)
                                                    (#\8 . #\8)
                                                    (#\9 . #\9)
                                                    (#\A . #\ф)
                                                    (#\B . #\и)
                                                    (#\C . #\с)
                                                    (#\D . #\в)
                                                    (#\E . #\у)
                                                    (#\F . #\а)
                                                    (#\G . #\п)
                                                    (#\H . #\р)
                                                    (#\I . #\ш)
                                                    (#\J . #\о)
                                                    (#\K . #\л)
                                                    (#\L . #\д)
                                                    (#\M . #\ь)
                                                    (#\N . #\т)
                                                    (#\O . #\щ)
                                                    (#\P . #\з)
                                                    (#\Q . #\й)
                                                    (#\R . #\к)
                                                    (#\S . #\ы)
                                                    (#\T . #\е)
                                                    (#\U . #\г)
                                                    (#\V . #\м)
                                                    (#\W . #\ц)
                                                    (#\X . #\ч)
                                                    (#\Y . #\н)
                                                    (#\Z . #\я)
                                                    (#\- . #\-)
                                                    (#\= . #\=)
                                                    (#\[ . #\х)
                                                    (#\] . #\ъ)
                                                    (#\; . #\ж)
                                                    (#\' . #\э)
                                                    (#\` . #\ё)
                                                    (#\# . #\\)
                                                    (#\, . #\б)
                                                    (#\. . #\ю)
                                                    (#\/ . #\.)
                                                    (#\\ . #\/)
                                                    (#\Esc . #\Esc)
                                                    (#\Backspace . #\Backspace)
                                                    (#\Tab . #\Tab)
                                                    (#\Newline . #\Newline)
                                                    (#\Space . #\Space)
                                                    (#\F1 . #\F1)
                                                    (#\F2 . #\F2)
                                                    (#\F3 . #\F3)
                                                    (#\F4 . #\F4)
                                                    (#\F5 . #\F5)
                                                    (#\F6 . #\F6)
                                                    (#\F7 . #\F7)
                                                    (#\F8 . #\F8)
                                                    (#\F9 . #\F9)
                                                    (#\F10 . #\F10)
                                                    (#\F11 . #\F11)
                                                    (#\F12 . #\F12)
                                                    (#\KP-0 . #\0)
                                                    (#\KP-1 . #\1)
                                                    (#\KP-2 . #\2)
                                                    (#\KP-3 . #\3)
                                                    (#\KP-4 . #\4)
                                                    (#\KP-5 . #\5)
                                                    (#\KP-6 . #\6)
                                                    (#\KP-7 . #\7)
                                                    (#\KP-8 . #\8)
                                                    (#\KP-9 . #\9)
                                                    (#\KP-Minus . #\-)
                                                    (#\KP-Plus . #\+)
                                                    (#\KP-Period . #\.)
                                                    (#\KP-Multiply . #\*)
                                                    (#\KP-Divide . #\\)
                                                    (#\KP-Enter . #\Newline)
                                                    (#\Menu . #\Menu)
                                                    (#\Insert . #\Insert)
                                                    (#\Home . #\Home)
                                                    (#\Page-Up . #\Page-Up)
                                                    (#\Delete . #\Delete)
                                                    (#\End . #\End)
                                                    (#\Page-Down . #\Page-Down)
                                                    (#\Up-Arrow . #\Up-Arrow)
                                                    (#\Left-Arrow . #\Left-Arrow)
                                                    (#\Down-Arrow . #\Down-Arrow)
                                                    (#\Right-Arrow . #\Right-Arrow))
                                       :shifted '((#\0 . #\))
                                                  (#\1 . #\!)
                                                  (#\2 . #\")
                                                  (#\3 . #\№)
                                                  (#\4 . #\;)
                                                  (#\5 . #\%)
                                                  (#\6 . #\:)
                                                  (#\7 . #\?)
                                                  (#\8 . #\*)
                                                  (#\9 . #\()
                                                  (#\A . #\Ф)
                                                  (#\B . #\И)
                                                  (#\C . #\С)
                                                  (#\D . #\В)
                                                  (#\E . #\У)
                                                  (#\F . #\А)
                                                  (#\G . #\П)
                                                  (#\H . #\Р)
                                                  (#\I . #\Ш)
                                                  (#\J . #\О)
                                                  (#\K . #\Л)
                                                  (#\L . #\Д)
                                                  (#\M . #\Ь)
                                                  (#\N . #\Т)
                                                  (#\O . #\Щ)
                                                  (#\P . #\З)
                                                  (#\Q . #\Й)
                                                  (#\R . #\К)
                                                  (#\S . #\Ы)
                                                  (#\T . #\Е)
                                                  (#\U . #\Г)
                                                  (#\V . #\М)
                                                  (#\W . #\Ц)
                                                  (#\X . #\Ч)
                                                  (#\Y . #\Н)
                                                  (#\Z . #\Я)
                                                  (#\- . #\_)
                                                  (#\= . #\+)
                                                  (#\[ . #\Х)
                                                  (#\] . #\Ъ)
                                                  (#\; . #\Ж)
                                                  (#\' . #\Э)
                                                  (#\` . #\Ё)
                                                  (#\# . #\/)
                                                  (#\, . #\Б)
                                                  (#\. . #\Ю)
                                                  (#\/ . #\,)
  						(#\\ . #\|)
                                                  (#\Esc . #\Esc)
                                                  (#\Backspace . #\Backspace)
                                                  (#\Tab . #\Tab)
                                                  (#\Newline . #\Newline)
                                                  (#\Space . #\Space)
                                                  (#\F1 . #\F1)
                                                  (#\F2 . #\F2)
                                                  (#\F3 . #\F3)
                                                  (#\F4 . #\F4)
                                                  (#\F5 . #\F5)
                                                  (#\F6 . #\F6)
                                                  (#\F7 . #\F7)
                                                  (#\F8 . #\F8)
                                                  (#\F9 . #\F9)
                                                  (#\F10 . #\F10)
                                                  (#\F11 . #\F11)
                                                  (#\F12 . #\F12)
                                                  (#\KP-0 . #\0)
                                                  (#\KP-1 . #\1)
                                                  (#\KP-2 . #\2)
                                                  (#\KP-3 . #\3)
                                                  (#\KP-4 . #\4)
                                                  (#\KP-5 . #\5)
                                                  (#\KP-6 . #\6)
                                                  (#\KP-7 . #\7)
                                                  (#\KP-8 . #\8)
                                                  (#\KP-9 . #\9)
                                                  (#\KP-Minus . #\-)
                                                  (#\KP-Plus . #\+)
                                                  (#\KP-Period . #\.)
                                                  (#\KP-Multiply . #\*)
                                                  (#\KP-Divide . #\\)
                                                  (#\KP-Enter . #\Newline)
                                                  (#\Menu . #\Menu)
                                                  (#\Insert . #\Insert)
                                                  (#\Home . #\Home)
                                                  (#\Page-Up . #\Page-Up)
                                                  (#\Delete . #\Delete)
                                                  (#\End . #\End)
                                                  (#\Page-Down . #\Page-Down)
                                                  (#\Up-Arrow . #\Up-Arrow)
                                                  (#\Left-Arrow . #\Left-Arrow)
                                                  (#\Down-Arrow . #\Down-Arrow)
                                                  (#\Right-Arrow . #\Right-Arrow))
  				     :shifted2 '((#\E . #\ў)
  						 (#\I . #\і)
  						 (#\T . #\є)
  						 (#\Q . #\ї)
  						 (#\U . #\ґ))))
  
  
  (defvar *current-keymap* *engb-keymap*)
  
  (defvar *keymap-rota* (cons *nobk-keymap*  *pancyr-keymap*))
  ;;(defvar *keymap-rota* (cons *enus-keymap*  *engb-keymap*))
  
  (defgeneric convert-scancode-to-key (keymap scancode modifier-state))
  
  (defmethod convert-scancode-to-key ((keymap simple-keymap) scancode modifier-state)
    (let* ((caps (member :caps-lock modifier-state))
           (shift (member :shift modifier-state))
  	 (shift2 (member :shift2 modifier-state))
           (key (cdr (assoc scancode (cond (shift2 (keymap-shifted2-map keymap))
  					 (shift (keymap-shifted-map keymap))
  					 (t (keymap-unshifted-map keymap)))))))
      (when (and key shift2 shift)
        (setf key (char-upcase key)))
      (if (and key (member :caps-lock modifier-state))
          (if shift
              (char-downcase key)
              (char-upcase key))
        key)))
  
  (defmethod process-event ((event key-event))
    (let* ((scancode (key-scancode event))
  