###############################################################################
# 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>.
###############################################################################

####################
# Default Bindings #
####################

bind Up LNUP
bind Down LNDN

bind Select FWINRT
bind Up+Down FWINRT

bind Select+Up TOP
bind Select+Down BOT

bind Select+Up+Down RETURN

bind !RoutingKey ROUTE
bind Select+!RoutingKey.1 HELP
bind Select+!RoutingKey.2 LEARN
bind Select+!RoutingKey.3 PREFMENU
bind Select+!RoutingKey.4 INFO

bind Up+!RoutingKey CLIP_NEW
bind Up+Select+!RoutingKey CLIP_APPEND
bind Down+!RoutingKey COPY_LINE
bind Down+Select+!RoutingKey COPY_RECT


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

context menu

bind Up MENU_PREV_ITEM
bind Down MENU_NEXT_ITEM

bind Select+Up MENU_FIRST_ITEM
bind Select+Down MENU_LAST_ITEM

bind Select MENU_NEXT_SETTING
bind Up+Down MENU_PREV_SETTING

bind Select+Up+Down PREFMENU


context default
