#lang scheme
(require framework/framework)
(provide setup-keymap
keymap)
(define (setup-keymap keymap)
(local ((define (add-edit-function name call-method)
(send keymap add-function name
(λ (edit event)
(call-method edit)))))
(add-edit-function "tabify-at-caret"
(λ (x) (send x tabify-selection)))
(add-edit-function "do-return"
(λ (x)
(send x insert-return)))
(add-edit-function "do-pipe"
(λ (x)
(send x insert-pipe))))
(send keymap add-function "balance-parens"
(λ (edit event)
(send edit balance-parens event)))
(send keymap map-function "TAB" "tabify-at-caret")
(send keymap map-function "return" "do-return")
(send keymap map-function "s:return" "do-return")
(send keymap map-function "s:c:return" "do-return")
(send keymap map-function "a:return" "do-return")
(send keymap map-function "s:a:return" "do-return")
(send keymap map-function "c:a:return" "do-return")
(send keymap map-function "c:s:a:return" "do-return")
(send keymap map-function "c:return" "do-return")
(send keymap map-function "d:return" "do-return")
(send keymap map-function "|" "do-pipe")
(send keymap map-function ")" "balance-parens")
(send keymap map-function "]" "balance-parens")
(send keymap map-function "}" "balance-parens")
(let ([map-meta
(λ (key func)
(keymap:send-map-function-meta keymap key func))]
[map
(λ (key func)
(send keymap map-function key func))])
(map-meta "|" "do-pipe")
(map-meta "return" "do-return")
(map-meta "s:return" "do-return")
(map-meta "s:c:return" "do-return")
(map-meta "a:return" "do-return")
(map-meta "s:a:return" "do-return")
(map-meta "c:a:return" "do-return")
(map-meta "c:s:a:return" "do-return")
(map-meta "c:return" "do-return")))
(define keymap (make-object keymap:aug-keymap%))
(setup-keymap keymap)
(define (get-keymap) keymap)