###############################################################################
# BRLTTY - A background process providing access to the console screen (when in
#          text mode) for a blind person using a refreshable braille display.
#
# Copyright (C) 1995-2023 by The BRLTTY Developers.
#
# BRLTTY comes with ABSOLUTELY NO WARRANTY.
#
# This is free software, placed under the terms of the
# GNU Lesser General Public License, as published by the Free Software
# Foundation; either version 2.1 of the License, or (at your option) any
# later version. Please see the file LICENSE-LGPL for details.
#
# Web Page: http://brltty.app/
#
# This software is maintained by Dave Mielke <dave@mielke.cc>.
###############################################################################

map Dot1 DOT1
map Dot2 DOT2
map Dot3 DOT3
map Dot4 DOT4
map Dot5 DOT5
map Dot6 DOT6
map Dot7 DOT7
map Dot8 DOT8
map \{space} SPACE

assign chord \{space}+
include ../chords.kti

bind \{press} RETURN
include ../nav.kti

ifKey RoutingKey
bind \{space}+RoutingKey KEY_FUNCTION
bind \{space}+RoutingKey+!RoutingKey CLIP_APPEND

bind RoutingKey+\{press} DESCCHAR
bind RoutingKey+Left CLIP_NEW
bind RoutingKey+Up CLIP_ADD
bind RoutingKey+Right COPY_LINE
bind RoutingKey+Down COPY_RECT
endIf


#################
# Menu Bindings #
#################

context menu

bind \{press} PREFMENU
bind Up MENU_PREV_ITEM
bind Down MENU_NEXT_ITEM
bind Left MENU_PREV_SETTING
bind Right MENU_NEXT_SETTING

bind \{space} MENU_PREV_LEVEL
bind \{space}+\{press} PREFSAVE
bind \{space}+Up MENU_FIRST_ITEM
bind \{space}+Down MENU_LAST_ITEM
bind \{space}+Left FWINLT
bind \{space}+Right FWINRT

context default
