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

# This key subtable is for Papenmeier displays which have 13 front keys.
note There are 13 keys on the front.
note * The rectangular key at the center is named Shift.
note * The square keys immediately to its left and right are named Home and End.
note * The left and right bars are named Up and Down.
note * The four square keys at the very left are named: Dot7, Dot3, Dot2, Dot1.
note * The four square keys at the very right are named: Dot4, Dot5, Dot6, Dot8.

bind !Shift HOME
bind !Home TOP
bind !End BOT
bind !Up LNUP
bind !Down LNDN
bind Dot1 PRDIFLN
bind Dot4 NXDIFLN
bind Dot2 ATTRUP
bind Dot5 ATTRDN
bind Dot3 PRPGRPH
bind Dot6 NXPGRPH
bind Dot7 PRPROMPT
bind Dot8 NXPROMPT

bind Dot1+Dot2 WINUP
bind Dot4+Dot5 WINDN
bind Dot3+Dot7 PRSEARCH
bind Dot6+Dot8 NXSEARCH

bind Dot1+Dot2+!RoutingKey1 PRDIFCHAR
bind Dot4+Dot5+!RoutingKey1 NXDIFCHAR
bind Dot3+Dot7+!RoutingKey1 PRINDENT
bind Dot6+Dot8+!RoutingKey1 NXINDENT

bind Dot1+!Up FWINLT
bind Dot1+!Down FWINRT
bind Dot1+!Home TOP_LEFT
bind Dot1+!End BOT_LEFT

bind Dot4+!Up HWINLT
bind Dot4+!Down HWINRT
bind Dot4+!Home CHRLT
bind Dot4+!End CHRRT

bind Dot1+!Shift LNBEG
bind Dot4+!Shift LNEND

bind Dot1+!RoutingKey1 SETLEFT
bind Dot4+!RoutingKey1 DESCCHAR

bind Dot2+!Shift KEY_TAB
bind Dot2+!Home KEY_CURSOR_LEFT
bind Dot2+!End KEY_CURSOR_RIGHT
bind Dot2+!Up KEY_CURSOR_UP
bind Dot2+!Down KEY_CURSOR_DOWN
bind Dot2+!RoutingKey1 KEY_FUNCTION

bind Dot5+!Shift KEY_INSERT
bind Dot5+!Home KEY_HOME
bind Dot5+!End KEY_END
bind Dot5+!Up KEY_PAGE_UP
bind Dot5+!Down KEY_PAGE_DOWN
bind Dot5+!RoutingKey1 SWITCHVT

bind Dot6+!Shift UNSTICK
bind Dot6+!Home META
bind Dot6+!End GUI
bind Dot6+!Up SHIFT
bind Dot6+!Down CONTROL

bind Dot7+!Shift SPKHOME
bind Dot7+!Home SAY_ABOVE
bind Dot7+!End SAY_BELOW
bind Dot7+!Up MUTE
bind Dot7+!Down SAY_LINE

bind Dot8+!Shift RESTARTSPEECH
bind Dot8+!Home SAY_SLOWER
bind Dot8+!End SAY_FASTER
bind Dot8+!Up SAY_SOFTER
bind Dot8+!Down SAY_LOUDER

bind Dot7+!RoutingKey1 CLIP_NEW
bind Dot3+!RoutingKey1 CLIP_ADD
bind Dot6+!RoutingKey1 COPY_LINE
bind Dot8+!RoutingKey1 COPY_RECT

bind Dot1+Dot2+Dot3+Dot7 TIME

include routing.kti

assign toggleOff Dot7
assign toggleOn Dot8
include status\{statusKeys}.kti


bind Dot2+Dot3+!Shift CONTEXT+default
bind Dot2+Dot3+!Home CONTEXT+chords
bind Dot2+Dot3+!End CONTEXT+braille


####################
# Chord Input Mode #
####################

context chords Chorded Commands Mode

assign noUnchorded
assign chord
include ../chords.kti
include ../menu.kti


######################
# Braille Input Mode #
######################

context braille Braille Input Mode

map Dot1 DOT1
map Dot2 DOT2
map Dot3 DOT3
map Dot4 DOT4
map Dot5 DOT5
map Dot6 DOT6
map Dot7 DOT7
map Dot8 DOT8

bind Dot3+!Shift KEY_ESCAPE
bind Dot3+!Home KEY_BACKSPACE
bind Dot3+!End KEY_DELETE
bind Dot3+!Up KEY_ENTER
bind Dot3+!Down PASSDOTS


