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

37 statements  

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 

37 

38from PySide6 import QtCore 

39from .pilcore import isMACOS 

40# 

41# Modifier masks 

42# 

43KEYBOARD_ALT = 0x100000000 

44KEYBOARD_SHIFT= 0x200000000 

45KEYBOARD_CTRL=0x400000000 

46ESC= 27 

47 

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 

59 

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 

85 

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} 

95 

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. 

121 

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 _ 

138 

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], # -- 

167 

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], # -- 

184 

185 

186 

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 

195 

196} 

197 

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 

220 

221# 

222# lookup keyboard map 

223# 

224def keyboard_lookup(keycode, keyboard_type): 

225 

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 []