Coverage for pyilper/pilkeymap.py: 57%
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1#!/usr/bin/python3
2# -*- coding: utf-8 -*-
3#
4# pyILPER
5#
6# Keyboard mapping definitions
7# Copyright (c) 2019 J. Siebold
8#
9# This program is free software; you can redistribute it and/or
10# modify it under the terms of the GNU General Public License
11# as published by the Free Software Foundation; either version 2
12# of the License, or (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program; if not, write to the Free Software
21# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22#
23# pyILPER keyboard definitions ---------------------------------------------------
24#
25# Changelog
26# 20.01.2019 - jsi:
27# - initial release
28# 21.01.2019 - jsi:
29# - bug fixes
30# 23.01.2019 - jsi
31# - missing HP-75 keys added
32# 25.01.2019 - jsi:
33# - added Shift Alt I and Ctrl Alt I keystrokes for Shift I/R and Ctrl I/R
34# - refactoring
35# 11.02.2019 jsi:
36# - fixed backtab key
38from PySide6 import QtCore
39from .pilcore import isMACOS
40#
41# Modifier masks
42#
43KEYBOARD_ALT = 0x100000000
44KEYBOARD_SHIFT= 0x200000000
45KEYBOARD_CTRL=0x400000000
46ESC= 27
48#
49# Keyboard types
50#
51KEYBOARD_TYPE_HP71=0
52KEYBOARD_TYPE_HP75=1
53keyboardtypes= ["HP-71","HP-75"]
54#
55# Lookup Types (macOS keytab)
56#
57T_CHAR=0
58T_KEY=1
60#
61# Keyboard map for the HP-71
62#
63keymap_hp71 = {
64 QtCore.Qt.Key_Up : [ ESC , ord("A")], # Up
65 QtCore.Qt.Key_Down : [ ESC , ord("D")], # Down
66 QtCore.Qt.Key_Right : [ ESC , ord("C")], # Right
67 QtCore.Qt.Key_Left : [ ESC , ord("B")], # Left
68 QtCore.Qt.Key_Return: [ ESC , ord("R")], # Endline
69 QtCore.Qt.Key_Insert: [ ESC , ord("H")], # I/R
70 QtCore.Qt.Key_Delete: [ ESC , ord("G")], # -CHAR
71 QtCore.Qt.Key_Backspace: [ ESC , ord("Q")], # BACK
72 QtCore.Qt.Key_Up | KEYBOARD_SHIFT: [ ESC , ord("J")], # far up
73 QtCore.Qt.Key_Down | KEYBOARD_SHIFT: [ ESC , ord("K")], # far down
74 QtCore.Qt.Key_Left | KEYBOARD_SHIFT : [ ESC , ord("E")], # far left
75 QtCore.Qt.Key_Home : [ ESC , ord("E")], # far left
76 QtCore.Qt.Key_Right | KEYBOARD_SHIFT: [ ESC , ord("F")], # far right
77 QtCore.Qt.Key_End : [ ESC , ord("F")], # far right
78 QtCore.Qt.Key_Down | KEYBOARD_CTRL: [ ESC , ord("T")], # next catalog
79 QtCore.Qt.Key_F1 : [ ESC , ord("L")], # ATTN
80 QtCore.Qt.Key_F2 : [ ESC , ord("M")], # RUN
81 QtCore.Qt.Key_F3 : [ ESC , ord("N")], # CMDS
82 QtCore.Qt.Key_F4 : [ ESC , ord("P")], # SST
83 QtCore.Qt.Key_F5 : [ ESC , ord("I")], # -LINE
84 QtCore.Qt.Key_F6 : [ ESC , ord("O")], # LC
86# map PC keyboard keys to HP special characters
87 0xc4 : [21], # Ä
88 0xd6 : [23], # Ö
89 0xdc : [25], # Ü
90 0xc4 | KEYBOARD_SHIFT : [22], # ä
91 0xd6 | KEYBOARD_SHIFT : [24], # ö
92 0xdc | KEYBOARD_SHIFT : [26], # ü
93 QtCore.Qt.Key_sterling : [30] # Sterling
94}
96#
97# Keyboard map for the HP-75
98#
99keymap_hp75 = {
100# non modifier group
101 QtCore.Qt.Key_Backspace: [8],
102 QtCore.Qt.Key_Return: [13],
103 QtCore.Qt.Key_Escape : [27],
104 QtCore.Qt.Key_F1 : [128], # ATTN
105 QtCore.Qt.Key_F2 : [129], # TIME
106 QtCore.Qt.Key_F3 : [130], # APPT
107 QtCore.Qt.Key_F4 : [131], # APPT
108 QtCore.Qt.Key_Up : [132],
109 QtCore.Qt.Key_Down : [133],
110 QtCore.Qt.Key_Left : [134],
111 QtCore.Qt.Key_Right : [135],
112 QtCore.Qt.Key_Insert: [136],
113 QtCore.Qt.Key_F5 : [137], # FET
114 QtCore.Qt.Key_F6 : [139], # CLR
115 QtCore.Qt.Key_Delete: [138], # DEL
116 QtCore.Qt.Key_F8 : [141], # RUN
117 QtCore.Qt.Key_Tab : [142], # TAB
118 QtCore.Qt.Key_Home : [166], # Goto BOL
119 QtCore.Qt.Key_End : [167], # Goto EOL
120 QtCore.Qt.Key_F7 : [168], # Lit.
122# Shift modifier group
123 QtCore.Qt.Key_F1 | KEYBOARD_SHIFT: [160], # OFF
124 QtCore.Qt.Key_F2 | KEYBOARD_SHIFT : [161], # --
125 QtCore.Qt.Key_F3 | KEYBOARD_SHIFT: [162], # chk interval
126 QtCore.Qt.Key_F4 | KEYBOARD_SHIFT: [163], # --
127 QtCore.Qt.Key_Up | KEYBOARD_SHIFT : [164], # Page up
128 QtCore.Qt.Key_Down | KEYBOARD_SHIFT: [165], # Page down
129 QtCore.Qt.Key_Left | KEYBOARD_SHIFT: [166], # Goto BOL
130 QtCore.Qt.Key_Right| KEYBOARD_SHIFT : [167], # Goto EOL
131 QtCore.Qt.Key_Insert | KEYBOARD_SHIFT: [168], # Enter char
132 QtCore.Qt.Key_F5 | KEYBOARD_SHIFT: [169], # last err
133 QtCore.Qt.Key_Delete | KEYBOARD_SHIFT: [170], # Del to EOL
134 QtCore.Qt.Key_F6 | KEYBOARD_SHIFT: [171], # --
135 QtCore.Qt.Key_F8 | KEYBOARD_SHIFT : [173], # SST
136 QtCore.Qt.Key_Backtab | KEYBOARD_SHIFT: [174], # Tab back
137 QtCore.Qt.Key_F7 | KEYBOARD_SHIFT : [200], # Lit and _
139# Control modifier group
140 QtCore.Qt.Key_Plus | KEYBOARD_CTRL: [28], # sigma
141 QtCore.Qt.Key_Equal | KEYBOARD_CTRL: [29], # not equal
142 QtCore.Qt.Key_Semicolon | KEYBOARD_CTRL: [30], # Sterling
143 QtCore.Qt.Key_8 | KEYBOARD_CTRL: [31], # smear
144 QtCore.Qt.Key_9 | KEYBOARD_CTRL: [127], # append
145 QtCore.Qt.Key_0 | KEYBOARD_CTRL: [176], # underscore 0
146 QtCore.Qt.Key_1 | KEYBOARD_CTRL: [177], # underscore 1
147 QtCore.Qt.Key_2 | KEYBOARD_CTRL: [178], # underscore 2
148 QtCore.Qt.Key_3 | KEYBOARD_CTRL: [179], # underscore 3
149 QtCore.Qt.Key_4 | KEYBOARD_CTRL: [180], # underscore 4
150 QtCore.Qt.Key_5 | KEYBOARD_CTRL: [181], # underscore 5
151 QtCore.Qt.Key_6 | KEYBOARD_CTRL: [182], # underscore 6
152 QtCore.Qt.Key_F1 | KEYBOARD_CTRL : [192], # --
153 QtCore.Qt.Key_F2 | KEYBOARD_CTRL : [193], # --
154 QtCore.Qt.Key_F3 | KEYBOARD_CTRL : [194], # --
155 QtCore.Qt.Key_F4 | KEYBOARD_CTRL : [195], # --
156 QtCore.Qt.Key_Up | KEYBOARD_CTRL : [196], # send ESC S
157 QtCore.Qt.Key_Down | KEYBOARD_CTRL : [197], # send ESC T
158 QtCore.Qt.Key_Left | KEYBOARD_CTRL : [198], # 32 <-
159 QtCore.Qt.Key_Right| KEYBOARD_CTRL : [199], # 32 ->
160 QtCore.Qt.Key_Insert | KEYBOARD_CTRL : [200], # lit+undersc.
161 QtCore.Qt.Key_F5 | KEYBOARD_CTRL : [201], # last entry
162 QtCore.Qt.Key_F6 | KEYBOARD_CTRL : [203], # reset display
163 QtCore.Qt.Key_Delete | KEYBOARD_CTRL : [202], # Delete to BOL
164 QtCore.Qt.Key_F8 | KEYBOARD_CTRL : [205], # --
165 QtCore.Qt.Key_F7 | KEYBOARD_CTRL : [201], # lit+undersc.
166 QtCore.Qt.Key_Tab | KEYBOARD_CTRL : [206], # --
168# Shift+Control modifier group
169 QtCore.Qt.Key_F1 | KEYBOARD_CTRL | KEYBOARD_SHIFT: [224], # --
170 QtCore.Qt.Key_F2 | KEYBOARD_CTRL | KEYBOARD_SHIFT: [225], # --
171 QtCore.Qt.Key_F3 | KEYBOARD_CTRL | KEYBOARD_SHIFT: [226], # --
172 QtCore.Qt.Key_F4 | KEYBOARD_CTRL | KEYBOARD_SHIFT: [227], # --
173 QtCore.Qt.Key_Up | KEYBOARD_CTRL | KEYBOARD_SHIFT: [228], # --
174 QtCore.Qt.Key_Down | KEYBOARD_CTRL | KEYBOARD_SHIFT: [229], # --
175 QtCore.Qt.Key_Left | KEYBOARD_CTRL | KEYBOARD_SHIFT: [230], # find prv char
176 QtCore.Qt.Key_Right| KEYBOARD_CTRL | KEYBOARD_SHIFT: [231], # find next char
177 QtCore.Qt.Key_Insert | KEYBOARD_CTRL | KEYBOARD_SHIFT:[232], # --
178 QtCore.Qt.Key_F5 | KEYBOARD_CTRL | KEYBOARD_SHIFT: [233], # --
179 QtCore.Qt.Key_Delete | KEYBOARD_CTRL | KEYBOARD_SHIFT:[234], # --
180 QtCore.Qt.Key_F6 | KEYBOARD_CTRL | KEYBOARD_SHIFT: [255], # reset
181 QtCore.Qt.Key_F7 | KEYBOARD_CTRL | KEYBOARD_SHIFT: [232], # --
182 QtCore.Qt.Key_F8 | KEYBOARD_CTRL | KEYBOARD_SHIFT: [237], # Reset
183 QtCore.Qt.Key_Backtab | KEYBOARD_CTRL | KEYBOARD_SHIFT: [238], # --
187# map PC keyboard keys to HP special characters
188 0xc4 : [21], # Ä
189 0xd6 : [23], # Ö
190 0xdc : [25], # Ü
191 0xc4 | KEYBOARD_SHIFT : [22], # ä
192 0xd6 | KEYBOARD_SHIFT : [24], # ö
193 0xdc | KEYBOARD_SHIFT : [26], # ü
194 QtCore.Qt.Key_sterling : [30] # Sterling
196}
198#
199# add special shortcuts for macOS to the HP-71 and HP-75 keymap
200#
201if isMACOS():
202# Shift+Alt modifier
203 keymap_hp75[QtCore.Qt.Key_I | KEYBOARD_SHIFT | KEYBOARD_ALT]= [168] # Enter char
204# Control+Alt modifier
205 keymap_hp75[QtCore.Qt.Key_I | KEYBOARD_CTRL | KEYBOARD_ALT]= [200] # Enter char and literalize
206 keymap_hp71[QtCore.Qt.Key_5 | KEYBOARD_ALT]= [ord("[")]
207 keymap_hp75[QtCore.Qt.Key_5 | KEYBOARD_ALT]= [ord("[")]
208 keymap_hp71[QtCore.Qt.Key_6 | KEYBOARD_ALT]= [ord("]")]
209 keymap_hp75[QtCore.Qt.Key_6 | KEYBOARD_ALT]= [ord("]")]
210 keymap_hp71[QtCore.Qt.Key_7 | KEYBOARD_ALT]= [124]
211 keymap_hp75[QtCore.Qt.Key_7 | KEYBOARD_ALT]= [124]
212 keymap_hp71[QtCore.Qt.Key_8 | KEYBOARD_ALT]= [ord("{")]
213 keymap_hp75[QtCore.Qt.Key_8 | KEYBOARD_ALT]= [ord("{")]
214 keymap_hp71[QtCore.Qt.Key_9 | KEYBOARD_ALT]= [ord("}")]
215 keymap_hp75[QtCore.Qt.Key_9 | KEYBOARD_ALT]= [ord("}")]
216 keymap_hp71[QtCore.Qt.Key_L | KEYBOARD_ALT]= [ord("@")]
217 keymap_hp75[QtCore.Qt.Key_L | KEYBOARD_ALT]= [ord("@")]
218 keymap_hp71[QtCore.Qt.Key_I | KEYBOARD_ALT]= [ ESC , ord("H")] # I/R
219 keymap_hp75[QtCore.Qt.Key_I | KEYBOARD_ALT]= [136] # I/R
221#
222# lookup keyboard map
223#
224def keyboard_lookup(keycode, keyboard_type):
226 try:
227 if keyboard_type== KEYBOARD_TYPE_HP71:
228 return(keymap_hp71[keycode])
229 else:
230 return(keymap_hp75[keycode])
231 except KeyError as e:
232 return []