Compare commits
147 commits
caad39421c
...
aff8ec8fc8
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
aff8ec8fc8 | ||
|
|
f7bd5d2de7 | ||
| 8c95a53948 | |||
| 8963bc3042 | |||
| c4e4aca4e1 | |||
| ec7454b331 | |||
| e028890888 | |||
|
|
1538390c0f | ||
|
|
be44d01cc6 | ||
|
|
29fd77fc7a | ||
|
|
c544d100f5 | ||
|
|
98004b2b6b | ||
|
|
7ce4b5549f | ||
|
|
d7c2455549 | ||
|
|
8435c70fef | ||
|
|
d65fbd54b5 | ||
|
|
ba90eaa9f9 | ||
|
|
0fbf77b546 | ||
|
|
994d664fd0 | ||
|
|
076d60a412 | ||
|
|
c9659f3048 | ||
|
|
9a6247e6b8 | ||
|
|
ae2234765e | ||
|
|
9c3121e122 | ||
|
|
7544754df4 | ||
|
|
9bb5b42a46 | ||
|
|
df8e7d58d9 | ||
|
|
43a46c8d28 | ||
|
|
574fc5e2e8 | ||
|
|
41c36024ba | ||
|
|
e1cbd227cc | ||
|
|
fc40073bbc | ||
|
|
2ac00aa8a1 | ||
|
|
eeb596b283 | ||
|
|
791611add5 | ||
|
|
5f4412a1a4 | ||
|
|
69a2a92f9d | ||
|
|
fd38f04ead | ||
|
|
79159729cd | ||
|
|
f7b0c6f1fc | ||
|
|
34f376868e | ||
|
|
a13f6b8f2a | ||
|
|
163c66d019 | ||
|
|
ad1c559492 | ||
|
|
f852668691 | ||
|
|
cbf4e5b6ff | ||
|
|
6b4ce8606c | ||
|
|
95577a6430 | ||
|
|
545edfee92 | ||
|
|
5e1d5a8f42 | ||
|
|
0c0e620319 | ||
|
|
6edd0fff37 | ||
|
|
1e0d8bf6b7 | ||
|
|
2c88850bea | ||
|
|
3eeb7ca9f9 | ||
|
|
5b30bb5343 | ||
|
|
6d1ac77109 | ||
|
|
40e24e7ee9 | ||
|
|
62c9e3af63 | ||
|
|
9d440fc01b | ||
|
|
9a451a5b1c | ||
|
|
e1f1a65d6b | ||
|
|
a620448e7b | ||
|
|
c375334bf5 | ||
|
|
1b58b13e30 | ||
|
|
4478c7cb95 | ||
|
|
de5fe82386 | ||
|
|
eeb6463091 | ||
|
|
77815a2959 | ||
|
|
c5d3988e7a | ||
|
|
0c95282d3d | ||
|
|
7c1ed424f1 | ||
|
|
4094fc62da | ||
|
|
5748f1af6a | ||
|
|
ed8a8114d9 | ||
|
|
8ecb3e9e44 | ||
|
|
39ff9ac3d2 | ||
|
|
ff5f1b0552 | ||
|
|
5d8b9cb1c6 | ||
|
|
89b2e49b1e | ||
|
|
190dd9a18c | ||
|
|
4603cdf134 | ||
|
|
f2791c2e37 | ||
|
|
53030f1b65 | ||
|
|
0a4cc0db31 | ||
|
|
76c7ebebd7 | ||
|
|
1ed80a9a67 | ||
|
|
a26af7ca07 | ||
|
|
7cd04d97b5 | ||
|
|
2405c989b0 | ||
|
|
2381945e30 | ||
|
|
793e6dc1a2 | ||
|
|
1cf2ea29dc | ||
|
|
77e946432e | ||
|
|
897daee456 | ||
|
|
b08d4e7f69 | ||
|
|
139ab7a418 | ||
|
|
4bc8e4018d | ||
|
|
eb9c38ff94 | ||
|
|
b236b2c616 | ||
|
|
5ddefef79f | ||
|
|
15516618e1 | ||
|
|
57c6b597ea | ||
|
|
d2427380e3 | ||
|
|
8a91d0e90c | ||
|
|
91bd988d6e | ||
|
|
976b595c2e | ||
|
|
142820c687 | ||
|
|
fc78fac72b | ||
|
|
f3f7f0e1e2 | ||
|
|
33c4f039d1 | ||
|
|
0a554052b4 | ||
|
|
04949711f4 | ||
|
|
06dbf89043 | ||
|
|
e93188021c | ||
|
|
cdd19b95dd | ||
|
|
a051019642 | ||
|
|
7a3ad79b0a | ||
|
|
1867cd48f9 | ||
|
|
e56edbfe90 | ||
|
|
a6146082fb | ||
|
|
27e3da508e | ||
|
|
3be39e436d | ||
|
|
221af6bffb | ||
|
|
3b1e5a9ce9 | ||
|
|
b32f56dff9 | ||
|
|
f5f7a1793a | ||
|
|
41845b485f | ||
|
|
fb7dba08a3 | ||
|
|
1f7cd390ae | ||
|
|
065e4e3dd5 | ||
|
|
d30fba8ce2 | ||
|
|
a84df046df | ||
|
|
c119ccaf72 | ||
|
|
ea5bf49b89 | ||
|
|
c1f7bb00b2 | ||
|
|
3478abd6bf | ||
|
|
5aaf797455 | ||
|
|
260d7b7707 | ||
|
|
5329bbefee | ||
|
|
777d1fba76 | ||
|
|
39da065913 | ||
|
|
6b7921f91b | ||
|
|
e6ad104bd8 | ||
|
|
5a7330dde4 | ||
|
|
9a673adb27 | ||
|
|
cfc23836e5 |
31 changed files with 6581 additions and 0 deletions
2
keyboard/ergodox/.gitignore
vendored
Normal file
2
keyboard/ergodox/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
keymap_passwords.h
|
||||
keymap_passwords_cub.h
|
||||
72
keyboard/ergodox/Ergodox-FAQ.md
Normal file
72
keyboard/ergodox/Ergodox-FAQ.md
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
# TMK Generic
|
||||
|
||||
* I'm not sure what the Magic + H does.
|
||||
Is this a menu that will pop up regardless of what platform and program is open?
|
||||
|
||||
Yes, this is sort of debugging.
|
||||
Use PJRC's [hid_listen](https://www.pjrc.com/teensy/hid_listen.html) to see debug messages.
|
||||
|
||||
# TMK/Ergodox specific
|
||||
|
||||
* I would like to configure my leds to indicate the active layer.
|
||||
I read that can be done, but I haven't seen an example for this firmware.
|
||||
Can someone please post an example or a link?
|
||||
|
||||
TMK for Ergodox have support for seven (!) led's:
|
||||
- three on right
|
||||
- three on left (see http://geekhack.org/index.php?topic=22780.msg873819#msg873819 for more details)
|
||||
- Teensy onboard led as well
|
||||
|
||||
Any of these leds can be used as layer indicator or NumLock/CapsLock/ScrollLock led.
|
||||
|
||||
[Here is example](https://github.com/cub-uanic/tmk_keyboard/blob/cub_layout/keyboard/ergodox/matrix.c#L121-167)
|
||||
how you can assign some meaning to each led.
|
||||
In this code only left leds are used to show layers, but you can
|
||||
[change `led_set()`](https://github.com/cub-uanic/tmk_keyboard/blob/cub_layout/keyboard/ergodox/led.c)
|
||||
and do anything you want with all leds.
|
||||
|
||||
# Firmware
|
||||
|
||||
#### Where to get binaries?
|
||||
https://github.com/cub-uanic/tmk_keyboard/releases
|
||||
|
||||
#### Where to get sources?
|
||||
https://github.com/cub-uanic/tmk_keyboard/tree/master
|
||||
|
||||
#### How to compile?
|
||||
|
||||
cd tmk_keyboard/keyboard/ergodox
|
||||
|
||||
# just to be safe
|
||||
make -f Makefile.lufa clean
|
||||
|
||||
# use one of these
|
||||
make -f Makefile.lufa
|
||||
make -f Makefile.lufa KEYMAP=dvorak
|
||||
make -f Makefile.lufa KEYMAP=colemak
|
||||
make -f Makefile.lufa KEYMAP=workman
|
||||
make -f Makefile.lufa KEYMAP=micro
|
||||
make -f Makefile.lufa KEYMAP=cub
|
||||
|
||||
|
||||
# Layouts
|
||||
|
||||
TODO description of layouts in base firmware binaries
|
||||
|
||||
|
||||
# Things TO-DO
|
||||
|
||||
- [ ] Flash NumLock led only when "numpad" layer is active
|
||||
- [ ] Command (in terms of IS_COMMAND) to switch to no-leds mode
|
||||
- [ ] Increase count of ACTION keys
|
||||
- [ ] Fix command_state() onboard led: it should flash only when kbd in some specific mode (CONSOLE || MOUSE)
|
||||
- [ ] ergodox_blink_all_leds() should save current state of leds, and restore after blink. initial state of all leds == off
|
||||
- [ ] add support for pseudo-backlight (reversed LEDs) + docs/photo
|
||||
- [ ] command to debug all LEDs (on/off/blink)
|
||||
- [ ] proper (in-core) implementation of DEBUG_MATRIX_SCAN_RATE (non-Ergodox specific)
|
||||
- [ ] proper (in-core) support for per-layer fn_actions[]
|
||||
- [ ] create one-handed layouts, see
|
||||
http://half-qwerty.com/
|
||||
https://geekhack.org/index.php?topic=60165.0
|
||||
https://www.massdrop.com/ext/ergodox/?hash=e097c3b9932179055023d47e48b25f1d
|
||||
|
||||
128
keyboard/ergodox/Makefile.lufa
Normal file
128
keyboard/ergodox/Makefile.lufa
Normal file
|
|
@ -0,0 +1,128 @@
|
|||
#----------------------------------------------------------------------------
|
||||
# On command line:
|
||||
#
|
||||
# make all = Make software.
|
||||
#
|
||||
# make clean = Clean out built project files.
|
||||
#
|
||||
# make coff = Convert ELF to AVR COFF.
|
||||
#
|
||||
# make extcoff = Convert ELF to AVR Extended COFF.
|
||||
#
|
||||
# make program = Download the hex file to the device.
|
||||
# Please customize your programmer settings(PROGRAM_CMD)
|
||||
#
|
||||
# make teensy = Download the hex file to the device, using teensy_loader_cli.
|
||||
# (must have teensy_loader_cli installed).
|
||||
#
|
||||
# make dfu = Download the hex file to the device, using dfu-programmer (must
|
||||
# have dfu-programmer installed).
|
||||
#
|
||||
# make flip = Download the hex file to the device, using Atmel FLIP (must
|
||||
# have Atmel FLIP installed).
|
||||
#
|
||||
# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
|
||||
# (must have dfu-programmer installed).
|
||||
#
|
||||
# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
|
||||
# (must have Atmel FLIP installed).
|
||||
#
|
||||
# make debug = Start either simulavr or avarice as specified for debugging,
|
||||
# with avr-gdb or avr-insight as the front end for debugging.
|
||||
#
|
||||
# make filename.s = Just compile filename.c into the assembler code only.
|
||||
#
|
||||
# make filename.i = Create a preprocessed source file for use in submitting
|
||||
# bug reports to the GCC project.
|
||||
#
|
||||
# To rebuild project do "make clean" then "make all".
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
# Target file name (without extension).
|
||||
TARGET = ergodox_lufa
|
||||
|
||||
# Directory common source filess exist
|
||||
TMK_DIR = ../../tmk_core
|
||||
|
||||
# Directory keyboard dependent files exist
|
||||
TARGET_DIR = .
|
||||
|
||||
# project specific files
|
||||
SRC = keymap_common.c \
|
||||
matrix.c \
|
||||
led.c \
|
||||
ergodox.c \
|
||||
twimaster.c
|
||||
|
||||
ifdef KEYMAP
|
||||
SRC := keymap_$(KEYMAP).c $(SRC)
|
||||
else
|
||||
SRC := keymap_blazak.c $(SRC)
|
||||
endif
|
||||
|
||||
CONFIG_H = config.h
|
||||
|
||||
|
||||
# MCU name, you MUST set this to match the board you are using
|
||||
# type "make clean" after changing this, so all files will be rebuilt
|
||||
MCU = atmega32u4
|
||||
#MCU = at90usb1286
|
||||
|
||||
|
||||
# Processor frequency.
|
||||
# Normally the first thing your program should do is set the clock prescaler,
|
||||
# so your program will run at the correct speed. You should also set this
|
||||
# variable to same clock speed. The _delay_ms() macro uses this, and many
|
||||
# examples use this variable to calculate timings. Do not add a "UL" here.
|
||||
F_CPU = 16000000
|
||||
|
||||
|
||||
#
|
||||
# LUFA specific
|
||||
#
|
||||
# Target architecture (see library "Board Types" documentation).
|
||||
ARCH = AVR8
|
||||
|
||||
# Input clock frequency.
|
||||
# This will define a symbol, F_USB, in all source code files equal to the
|
||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||
# at the end, this will be done automatically to create a 32-bit value in your
|
||||
# source code.
|
||||
#
|
||||
# If no clock division is performed on the input clock inside the AVR (via the
|
||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||
F_USB = $(F_CPU)
|
||||
|
||||
# Interrupt driven control endpoint task
|
||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||
|
||||
# Boot Section Size in *bytes*
|
||||
# Teensy halfKay 512
|
||||
# Atmel DFU loader 4096
|
||||
# LUFA bootloader 4096
|
||||
OPT_DEFS += -DBOOTLOADER_SIZE=512
|
||||
|
||||
# Build Options
|
||||
# comment out to disable the options.
|
||||
#
|
||||
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys(+5000)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+600)
|
||||
CONSOLE_ENABLE = yes # Console for debug
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||
#PS2_MOUSE_ENABLE = yes # PS/2 mouse(TrackPoint) support
|
||||
INVERT_NUMLOCK = yes # invert state of NumLock led
|
||||
|
||||
|
||||
# Search Path
|
||||
VPATH += $(TARGET_DIR)
|
||||
VPATH += $(TMK_DIR)
|
||||
|
||||
include $(TMK_DIR)/protocol.mk
|
||||
include $(TMK_DIR)/protocol/lufa.mk
|
||||
include $(TMK_DIR)/common.mk
|
||||
include $(TMK_DIR)/rules.mk
|
||||
108
keyboard/ergodox/Makefile.pjrc
Normal file
108
keyboard/ergodox/Makefile.pjrc
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
#----------------------------------------------------------------------------
|
||||
# On command line:
|
||||
#
|
||||
# make all = Make software.
|
||||
#
|
||||
# make clean = Clean out built project files.
|
||||
#
|
||||
# make coff = Convert ELF to AVR COFF.
|
||||
#
|
||||
# make extcoff = Convert ELF to AVR Extended COFF.
|
||||
#
|
||||
# make program = Download the hex file to the device.
|
||||
# Please customize your programmer settings(PROGRAM_CMD)
|
||||
#
|
||||
# make teensy = Download the hex file to the device, using teensy_loader_cli.
|
||||
# (must have teensy_loader_cli installed).
|
||||
#
|
||||
# make dfu = Download the hex file to the device, using dfu-programmer (must
|
||||
# have dfu-programmer installed).
|
||||
#
|
||||
# make flip = Download the hex file to the device, using Atmel FLIP (must
|
||||
# have Atmel FLIP installed).
|
||||
#
|
||||
# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
|
||||
# (must have dfu-programmer installed).
|
||||
#
|
||||
# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
|
||||
# (must have Atmel FLIP installed).
|
||||
#
|
||||
# make debug = Start either simulavr or avarice as specified for debugging,
|
||||
# with avr-gdb or avr-insight as the front end for debugging.
|
||||
#
|
||||
# make filename.s = Just compile filename.c into the assembler code only.
|
||||
#
|
||||
# make filename.i = Create a preprocessed source file for use in submitting
|
||||
# bug reports to the GCC project.
|
||||
#
|
||||
# To rebuild project do "make clean" then "make all".
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
# Target file name (without extension).
|
||||
TARGET = ergodox_pjrc
|
||||
|
||||
# Directory common source filess exist
|
||||
TMK_DIR = ../../tmk_core
|
||||
|
||||
# Directory keyboard dependent files exist
|
||||
TARGET_DIR = .
|
||||
|
||||
# project specific files
|
||||
SRC = keymap_common.c \
|
||||
matrix.c \
|
||||
led.c \
|
||||
ergodox.c \
|
||||
twimaster.c
|
||||
|
||||
ifdef KEYMAP
|
||||
SRC := keymap_$(KEYMAP).c $(SRC)
|
||||
else
|
||||
SRC := keymap_blazak.c $(SRC)
|
||||
endif
|
||||
|
||||
CONFIG_H = config.h
|
||||
|
||||
|
||||
# MCU name, you MUST set this to match the board you are using
|
||||
# type "make clean" after changing this, so all files will be rebuilt
|
||||
MCU = atmega32u4
|
||||
#MCU = at90usb1286
|
||||
|
||||
|
||||
# Processor frequency.
|
||||
# Normally the first thing your program should do is set the clock prescaler,
|
||||
# so your program will run at the correct speed. You should also set this
|
||||
# variable to same clock speed. The _delay_ms() macro uses this, and many
|
||||
# examples use this variable to calculate timings. Do not add a "UL" here.
|
||||
F_CPU = 16000000
|
||||
|
||||
|
||||
# Boot Section Size in *bytes*
|
||||
# Teensy halfKay 512
|
||||
# Atmel DFU loader 4096
|
||||
# LUFA bootloader 4096
|
||||
OPT_DEFS += -DBOOTLOADER_SIZE=512 -DFLASH_SIZE_BYTES=0x8000
|
||||
|
||||
|
||||
# Build Options
|
||||
# comment out to disable the options.
|
||||
#
|
||||
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys(+5000)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+600)
|
||||
CONSOLE_ENABLE = yes # Console for debug
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover (+500)
|
||||
#PS2_MOUSE_ENABLE = yes # PS/2 mouse(TrackPoint) support
|
||||
INVERT_NUMLOCK = yes # invert state of NumLock led
|
||||
|
||||
|
||||
# Search Path
|
||||
VPATH += $(TARGET_DIR)
|
||||
VPATH += $(TMK_DIR)
|
||||
|
||||
include $(TMK_DIR)/protocol.mk
|
||||
include $(TMK_DIR)/protocol/pjrc.mk
|
||||
include $(TMK_DIR)/common.mk
|
||||
include $(TMK_DIR)/rules.mk
|
||||
18
keyboard/ergodox/addons/bin/install-workman
Executable file
18
keyboard/ergodox/addons/bin/install-workman
Executable file
|
|
@ -0,0 +1,18 @@
|
|||
#!/bin/sh
|
||||
|
||||
if [ "`id -u`" = "0" ]; then
|
||||
[ -d /usr/share/kde4/apps/ktouch/ ] && cp ~/etc/layout/ktouch/workman* /usr/share/kde4/apps/ktouch/
|
||||
cp ~/etc/layout/xkb/workman /usr/share/X11/xkb/symbols/workman
|
||||
cat /usr/share/X11/xkb/symbols.dir | grep -v workman > /usr/share/X11/xkb/symbols.dir.new
|
||||
cat ~/etc/layout/xkb/symbols.dir.workman >> /usr/share/X11/xkb/symbols.dir.new
|
||||
mv /usr/share/X11/xkb/symbols.dir.new /usr/share/X11/xkb/symbols.dir
|
||||
echo "Now you could run these command to set Workman-Dvorak-P, Workman-Cub-P, Dvorak-P or QWERTY layouts:"
|
||||
echo " setxkbmap -layout workman,ru -variant wdp,"
|
||||
echo " setxkbmap -layout workman,ru -variant wcp, # for usual keyboard"
|
||||
echo " setxkbmap -layout workman,ru -variant wce, # for Ergodox keyboard"
|
||||
echo " setxkbmap -layout us,ru -variant dvp,"
|
||||
echo " setxkbmap -layout us,ru -variant ,"
|
||||
else
|
||||
echo "You should run this from root account"
|
||||
exit 1
|
||||
fi
|
||||
26
keyboard/ergodox/addons/bin/set-xkb-map
Executable file
26
keyboard/ergodox/addons/bin/set-xkb-map
Executable file
|
|
@ -0,0 +1,26 @@
|
|||
#!/bin/sh
|
||||
|
||||
xset r rate 350 80
|
||||
|
||||
opts='-model pc104 -option grp:caps_toggle,grp_led:scroll'
|
||||
|
||||
case "$1" in
|
||||
dvorak)
|
||||
setxkbmap $opts -layout us,ru -variant dvp,
|
||||
;;
|
||||
carpalx)
|
||||
setxkbmap $opts -layout carpalx,ru -variant qgmlwb-p,
|
||||
;;
|
||||
workman)
|
||||
variant='wcp,'
|
||||
lsusb | grep -qi FEED:1307 && variant='wce,'
|
||||
[ -e ~/.force_ergodox ] && variant='wce,'
|
||||
[ -e ~/.force_plain ] && variant='wcp,'
|
||||
setxkbmap $opts -layout workman,ru -variant "$variant"
|
||||
;;
|
||||
*)
|
||||
# US or unknown layout - setting US
|
||||
setxkbmap $opts -layout us,ru
|
||||
;;
|
||||
esac
|
||||
|
||||
|
|
@ -0,0 +1,294 @@
|
|||
<KTouchKeyboard>
|
||||
<Title>English Workman layout for programmers from cub@uanic (old)</Title>
|
||||
<Comment>English Workman layout for programmers from cub@uanic (old)</Comment>
|
||||
<Language>en (English)</Language>
|
||||
<Keys>
|
||||
<Key Width="80" X="180" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="65" Position="TopLeft">A</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="280" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="83" Position="TopLeft">S</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="380" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="72" Position="TopLeft">H</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="480" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="84" Position="TopLeft">T</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="780" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="78" Position="TopLeft">N</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="880" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="69" Position="TopLeft">E</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="980" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="79" Position="TopLeft">O</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1080" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="73" Position="TopLeft">I</Char>
|
||||
</Key>
|
||||
<Key Width="130" X="0" Y="100" Height="80" Type="TAB"/>
|
||||
<Key Width="100" X="1380" Y="100" Height="180" Type="ENTER"/>
|
||||
<Key Width="250" X="1230" Y="300" Height="80" Type="SHIFT"/>
|
||||
<Key Width="130" X="1200" KeyText="AltGr" Y="400" Height="80" Type="OTHER"/>
|
||||
<Key Width="130" X="1350" KeyText="Ctrl" Y="400" Height="80" Type="OTHER"/>
|
||||
<Key Width="130" X="150" KeyText="Alt" Y="400" Height="80" Type="OTHER"/>
|
||||
<Key Width="130" X="0" KeyText="Ctrl" Y="400" Height="80" Type="OTHER"/>
|
||||
<Key Width="880" X="300" Y="400" Height="80" Type="SPACE"/>
|
||||
<Key Width="110" X="0" Y="300" Height="80" Type="SHIFT"/>
|
||||
<Key Width="160" X="0" Y="200" Height="80" Type="CAPSLOCK"/>
|
||||
<Key Width="160" X="1310" Y="0" Height="80" Type="BACKSPACE"/>
|
||||
<Key Width="80" X="0" Y="0" Height="80" FingerKeyIndex="0" Type="NORMAL">
|
||||
<Char Unicode="96" Position="TopLeft">`</Char>
|
||||
<Char Unicode="126" Position="BottomLeft">~</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="100" Y="0" Height="80" FingerKeyIndex="0" Type="NORMAL">
|
||||
<Char Unicode="49" Position="TopLeft">1</Char>
|
||||
<Char Unicode="33" Position="BottomLeft">!</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="200" Y="0" Height="80" FingerKeyIndex="1" Type="NORMAL">
|
||||
<Char Unicode="50" Position="TopLeft">2</Char>
|
||||
<Char Unicode="123" Position="BottomLeft">{</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="300" Y="0" Height="80" FingerKeyIndex="2" Type="NORMAL">
|
||||
<Char Unicode="51" Position="TopLeft">3</Char>
|
||||
<Char Unicode="35" Position="BottomLeft">#</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="400" Y="0" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="52" Position="TopLeft">4</Char>
|
||||
<Char Unicode="59" Position="BottomLeft">;</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="500" Y="0" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="53" Position="TopLeft">5</Char>
|
||||
<Char Unicode="125" Position="BottomLeft">}</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="600" Y="0" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="54" Position="TopLeft">6</Char>
|
||||
<Char Unicode="91" Position="BottomLeft">[</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="700" Y="0" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="55" Position="TopLeft">7</Char>
|
||||
<Char Unicode="38" Position="BottomLeft">&</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="800" Y="0" Height="80" FingerKeyIndex="5" Type="NORMAL">
|
||||
<Char Unicode="56" Position="TopLeft">8</Char>
|
||||
<Char Unicode="42" Position="BottomLeft">*</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="900" Y="0" Height="80" FingerKeyIndex="6" Type="NORMAL">
|
||||
<Char Unicode="57" Position="TopLeft">9</Char>
|
||||
<Char Unicode="40" Position="BottomLeft">(</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1000" Y="0" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="48" Position="TopLeft">0</Char>
|
||||
<Char Unicode="41" Position="BottomLeft">)</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1100" Y="0" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="37" Position="TopLeft">%</Char>
|
||||
<Char Unicode="93" Position="BottomLeft">]</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1200" Y="0" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="43" Position="TopLeft">+</Char>
|
||||
<Char Unicode="61" Position="BottomLeft">=</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="150" Y="100" Height="80" FingerKeyIndex="0" Type="NORMAL">
|
||||
<Char Unicode="81" Position="TopLeft">Q</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="250" Y="100" Height="80" FingerKeyIndex="1" Type="NORMAL">
|
||||
<Char Unicode="68" Position="TopLeft">D</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="350" Y="100" Height="80" FingerKeyIndex="2" Type="NORMAL">
|
||||
<Char Unicode="82" Position="TopLeft">R</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="450" Y="100" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="87" Position="TopLeft">W</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="550" Y="100" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="66" Position="TopLeft">B</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="650" Y="100" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="74" Position="TopLeft">J</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="750" Y="100" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="70" Position="TopLeft">F</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="850" Y="100" Height="80" FingerKeyIndex="5" Type="NORMAL">
|
||||
<Char Unicode="85" Position="TopLeft">U</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="950" Y="100" Height="80" FingerKeyIndex="6" Type="NORMAL">
|
||||
<Char Unicode="80" Position="TopLeft">P</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1050" Y="100" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="64" Position="TopLeft">@</Char>
|
||||
<Char Unicode="36" Position="BottomLeft">$</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1150" Y="100" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="94" Position="TopLeft">^</Char>
|
||||
<Char Unicode="58" Position="BottomLeft">:</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1250" Y="100" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="34" Position="TopLeft">"</Char>
|
||||
<Char Unicode="39" Position="BottomLeft">'</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="580" Y="200" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="71" Position="TopLeft">G</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="680" Y="200" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="89" Position="TopLeft">Y</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1180" Y="200" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="95" Position="TopLeft">_</Char>
|
||||
<Char Unicode="45" Position="BottomLeft">-</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1280" Y="200" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="124" Position="TopLeft">|</Char>
|
||||
<Char Unicode="92" Position="BottomLeft">\</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="130" Y="300" Height="80" FingerKeyIndex="0" Type="NORMAL">
|
||||
<Char Unicode="60" Position="TopLeft"><</Char>
|
||||
<Char Unicode="62" Position="BottomLeft">></Char>
|
||||
</Key>
|
||||
<Key Width="80" X="230" Y="300" Height="80" FingerKeyIndex="0" Type="NORMAL">
|
||||
<Char Unicode="90" Position="TopLeft">Z</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="330" Y="300" Height="80" FingerKeyIndex="1" Type="NORMAL">
|
||||
<Char Unicode="88" Position="TopLeft">X</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="430" Y="300" Height="80" FingerKeyIndex="2" Type="NORMAL">
|
||||
<Char Unicode="77" Position="TopLeft">M</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="530" Y="300" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="67" Position="TopLeft">C</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="630" Y="300" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="86" Position="TopLeft">V</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="730" Y="300" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="75" Position="TopLeft">K</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="830" Y="300" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="76" Position="TopLeft">L</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="930" Y="300" Height="80" FingerKeyIndex="5" Type="NORMAL">
|
||||
<Char Unicode="60" Position="TopLeft"><</Char>
|
||||
<Char Unicode="44" Position="BottomLeft">,</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1030" Y="300" Height="80" FingerKeyIndex="6" Type="NORMAL">
|
||||
<Char Unicode="62" Position="TopLeft">></Char>
|
||||
<Char Unicode="46" Position="BottomLeft">.</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1130" Y="300" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="63" Position="TopLeft">?</Char>
|
||||
<Char Unicode="47" Position="BottomLeft">/</Char>
|
||||
</Key>
|
||||
</Keys>
|
||||
<Connections>
|
||||
<KeyConnector TargetKeyIndex="0" KeyUnicode="97" />
|
||||
<KeyConnector TargetKeyIndex="0" KeyUnicode="65" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="1" KeyUnicode="115"/>
|
||||
<KeyConnector TargetKeyIndex="1" KeyUnicode="83" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="2" KeyUnicode="104"/>
|
||||
<KeyConnector TargetKeyIndex="2" KeyUnicode="72" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="3" KeyUnicode="116"/>
|
||||
<KeyConnector TargetKeyIndex="3" KeyUnicode="84" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="4" KeyUnicode="110"/>
|
||||
<KeyConnector TargetKeyIndex="4" KeyUnicode="78" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="5" KeyUnicode="101"/>
|
||||
<KeyConnector TargetKeyIndex="5" KeyUnicode="69" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="6" KeyUnicode="111"/>
|
||||
<KeyConnector TargetKeyIndex="6" KeyUnicode="79" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="7" KeyUnicode="105"/>
|
||||
<KeyConnector TargetKeyIndex="7" KeyUnicode="73" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="8" KeyUnicode="260"/>
|
||||
<KeyConnector TargetKeyIndex="9" KeyUnicode="13" />
|
||||
<KeyConnector TargetKeyIndex="10" KeyUnicode="257"/>
|
||||
<KeyConnector TargetKeyIndex="11" KeyUnicode="264"/>
|
||||
<KeyConnector TargetKeyIndex="12" KeyUnicode="265"/>
|
||||
<KeyConnector TargetKeyIndex="13" KeyUnicode="263"/>
|
||||
<KeyConnector TargetKeyIndex="14" KeyUnicode="262"/>
|
||||
<KeyConnector TargetKeyIndex="15" KeyUnicode="32" />
|
||||
<KeyConnector TargetKeyIndex="16" KeyUnicode="258"/>
|
||||
<KeyConnector TargetKeyIndex="17" KeyUnicode="259"/>
|
||||
<KeyConnector TargetKeyIndex="18" KeyUnicode="8" />
|
||||
<KeyConnector TargetKeyIndex="19" KeyUnicode="126"/>
|
||||
<KeyConnector TargetKeyIndex="19" KeyUnicode="96" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="20" KeyUnicode="33" />
|
||||
<KeyConnector TargetKeyIndex="20" KeyUnicode="49" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="21" KeyUnicode="123"/>
|
||||
<KeyConnector TargetKeyIndex="21" KeyUnicode="50" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="22" KeyUnicode="35" />
|
||||
<KeyConnector TargetKeyIndex="22" KeyUnicode="51" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="23" KeyUnicode="59" />
|
||||
<KeyConnector TargetKeyIndex="23" KeyUnicode="52" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="24" KeyUnicode="125"/>
|
||||
<KeyConnector TargetKeyIndex="24" KeyUnicode="53" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="25" KeyUnicode="91" />
|
||||
<KeyConnector TargetKeyIndex="25" KeyUnicode="54" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="26" KeyUnicode="38" />
|
||||
<KeyConnector TargetKeyIndex="26" KeyUnicode="55" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="27" KeyUnicode="42" />
|
||||
<KeyConnector TargetKeyIndex="27" KeyUnicode="56" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="28" KeyUnicode="40" />
|
||||
<KeyConnector TargetKeyIndex="28" KeyUnicode="57" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="29" KeyUnicode="41" />
|
||||
<KeyConnector TargetKeyIndex="29" KeyUnicode="48" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="30" KeyUnicode="93" />
|
||||
<KeyConnector TargetKeyIndex="30" KeyUnicode="37" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="31" KeyUnicode="61" />
|
||||
<KeyConnector TargetKeyIndex="31" KeyUnicode="43" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="32" KeyUnicode="113"/>
|
||||
<KeyConnector TargetKeyIndex="32" KeyUnicode="81" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="33" KeyUnicode="100"/>
|
||||
<KeyConnector TargetKeyIndex="33" KeyUnicode="68" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="34" KeyUnicode="114"/>
|
||||
<KeyConnector TargetKeyIndex="34" KeyUnicode="82" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="35" KeyUnicode="119"/>
|
||||
<KeyConnector TargetKeyIndex="35" KeyUnicode="87" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="36" KeyUnicode="98" />
|
||||
<KeyConnector TargetKeyIndex="36" KeyUnicode="66" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="37" KeyUnicode="106"/>
|
||||
<KeyConnector TargetKeyIndex="37" KeyUnicode="74" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="38" KeyUnicode="102"/>
|
||||
<KeyConnector TargetKeyIndex="38" KeyUnicode="70" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="39" KeyUnicode="117"/>
|
||||
<KeyConnector TargetKeyIndex="39" KeyUnicode="85" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="40" KeyUnicode="112"/>
|
||||
<KeyConnector TargetKeyIndex="40" KeyUnicode="80" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="41" KeyUnicode="36" />
|
||||
<KeyConnector TargetKeyIndex="41" KeyUnicode="64" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="42" KeyUnicode="58" />
|
||||
<KeyConnector TargetKeyIndex="42" KeyUnicode="94" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="43" KeyUnicode="39" />
|
||||
<KeyConnector TargetKeyIndex="43" KeyUnicode="34" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="44" KeyUnicode="103"/>
|
||||
<KeyConnector TargetKeyIndex="44" KeyUnicode="71" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="45" KeyUnicode="121"/>
|
||||
<KeyConnector TargetKeyIndex="45" KeyUnicode="89" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="46" KeyUnicode="45" />
|
||||
<KeyConnector TargetKeyIndex="46" KeyUnicode="95" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="47" KeyUnicode="92" />
|
||||
<KeyConnector TargetKeyIndex="47" KeyUnicode="124" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="48" KeyUnicode="62" />
|
||||
<KeyConnector TargetKeyIndex="48" KeyUnicode="60" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="49" KeyUnicode="122"/>
|
||||
<KeyConnector TargetKeyIndex="49" KeyUnicode="90" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="50" KeyUnicode="120"/>
|
||||
<KeyConnector TargetKeyIndex="50" KeyUnicode="88" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="51" KeyUnicode="109"/>
|
||||
<KeyConnector TargetKeyIndex="51" KeyUnicode="77" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="52" KeyUnicode="99" />
|
||||
<KeyConnector TargetKeyIndex="52" KeyUnicode="67" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="53" KeyUnicode="118"/>
|
||||
<KeyConnector TargetKeyIndex="53" KeyUnicode="86" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="54" KeyUnicode="107"/>
|
||||
<KeyConnector TargetKeyIndex="54" KeyUnicode="75" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="55" KeyUnicode="108"/>
|
||||
<KeyConnector TargetKeyIndex="55" KeyUnicode="76" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="56" KeyUnicode="44" />
|
||||
<KeyConnector TargetKeyIndex="56" KeyUnicode="60" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="57" KeyUnicode="46" />
|
||||
<KeyConnector TargetKeyIndex="57" KeyUnicode="62" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="58" KeyUnicode="47" />
|
||||
<KeyConnector TargetKeyIndex="58" KeyUnicode="63" ModifierIndex="10"/>
|
||||
</Connections>
|
||||
</KTouchKeyboard>
|
||||
|
||||
|
|
@ -0,0 +1,285 @@
|
|||
<KTouchKeyboard>
|
||||
<Title>English Workman/Ergodox/Cub</Title>
|
||||
<Comment>English Workman/Ergodox/Cub for programmers</Comment>
|
||||
<Language>en (English)</Language>
|
||||
<Keys>
|
||||
<Key Width="80" X="100" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="65" Position="TopLeft">A</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="200" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="83" Position="TopLeft">S</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="300" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="72" Position="TopLeft">H</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="400" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="84" Position="TopLeft">T</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="930" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="78" Position="TopLeft">N</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1030" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="69" Position="TopLeft">E</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1130" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="79" Position="TopLeft">O</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1230" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="73" Position="TopLeft">I</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="0" Y="100" Height="80" Type="TAB"/>
|
||||
<Key Width="130" X="750" Y="480" Height="80" Type="ENTER"/>
|
||||
<Key Width="80" X="750" KeyText="AltGr" Y="570" Height="80" Type="OTHER"/>
|
||||
<Key Width="80" X="580" KeyText="Alt" Y="570" Height="80" Type="OTHER"/>
|
||||
<Key Width="80" X="0" KeyText="Ctrl" Y="300" Height="80" Type="OTHER"/>
|
||||
<Key Width="160" X="750" Y="390" Height="80" Type="SPACE"/>
|
||||
<Key Width="80" X="0" Y="200" Height="80" Type="SHIFT"/>
|
||||
<Key Width="130" X="530" Y="480" Height="80" Type="SHIFT"/>
|
||||
<Key Width="160" X="500" Y="390" Height="80" Type="BACKSPACE"/>
|
||||
<Key Width="80" X="0" Y="0" Height="80" FingerKeyIndex="0" Type="NORMAL">
|
||||
<Char Unicode="126" Position="TopLeft">~</Char>
|
||||
<Char Unicode="96" Position="BottomLeft">`</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="100" Y="0" Height="80" FingerKeyIndex="0" Type="NORMAL">
|
||||
<Char Unicode="59" Position="TopLeft">;</Char>
|
||||
<Char Unicode="49" Position="BottomLeft">1</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="200" Y="0" Height="80" FingerKeyIndex="1" Type="NORMAL">
|
||||
<Char Unicode="33" Position="TopLeft">!</Char>
|
||||
<Char Unicode="50" Position="BottomLeft">2</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="300" Y="0" Height="80" FingerKeyIndex="2" Type="NORMAL">
|
||||
<Char Unicode="35" Position="TopLeft">#</Char>
|
||||
<Char Unicode="51" Position="BottomLeft">3</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="400" Y="0" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="123" Position="TopLeft">{</Char>
|
||||
<Char Unicode="52" Position="BottomLeft">4</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="500" Y="0" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="125" Position="TopLeft">}</Char>
|
||||
<Char Unicode="53" Position="BottomLeft">5</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="830" Y="0" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="91" Position="TopLeft">[</Char>
|
||||
<Char Unicode="54" Position="BottomLeft">6</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="930" Y="0" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="93" Position="TopLeft">]</Char>
|
||||
<Char Unicode="55" Position="BottomLeft">7</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1030" Y="0" Height="80" FingerKeyIndex="5" Type="NORMAL">
|
||||
<Char Unicode="42" Position="TopLeft">*</Char>
|
||||
<Char Unicode="56" Position="BottomLeft">8</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1130" Y="0" Height="80" FingerKeyIndex="6" Type="NORMAL">
|
||||
<Char Unicode="40" Position="TopLeft">(</Char>
|
||||
<Char Unicode="57" Position="BottomLeft">9</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1230" Y="0" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="41" Position="TopLeft">)</Char>
|
||||
<Char Unicode="48" Position="BottomLeft">0</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1330" Y="0" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="61" Position="TopLeft">=</Char>
|
||||
<Char Unicode="43" Position="BottomLeft">+</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="100" Y="100" Height="80" FingerKeyIndex="0" Type="NORMAL">
|
||||
<Char Unicode="81" Position="TopLeft">Q</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="200" Y="100" Height="80" FingerKeyIndex="1" Type="NORMAL">
|
||||
<Char Unicode="68" Position="TopLeft">D</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="300" Y="100" Height="80" FingerKeyIndex="2" Type="NORMAL">
|
||||
<Char Unicode="82" Position="TopLeft">R</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="400" Y="100" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="87" Position="TopLeft">W</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="500" Y="100" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="66" Position="TopLeft">B</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="830" Y="100" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="74" Position="TopLeft">J</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="930" Y="100" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="70" Position="TopLeft">F</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1030" Y="100" Height="80" FingerKeyIndex="5" Type="NORMAL">
|
||||
<Char Unicode="85" Position="TopLeft">U</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1130" Y="100" Height="80" FingerKeyIndex="6" Type="NORMAL">
|
||||
<Char Unicode="80" Position="TopLeft">P</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1230" Y="100" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="36" Position="TopLeft">$</Char>
|
||||
<Char Unicode="64" Position="BottomLeft">@</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1330" Y="100" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="58" Position="TopLeft">:</Char>
|
||||
<Char Unicode="37" Position="BottomLeft">%</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="500" Y="200" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="71" Position="TopLeft">G</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="830" Y="200" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="89" Position="TopLeft">Y</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1330" Y="200" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="45" Position="TopLeft">-</Char>
|
||||
<Char Unicode="95" Position="BottomLeft">_</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1330" Y="300" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="124" Position="TopLeft">|</Char>
|
||||
<Char Unicode="38" Position="BottomLeft">&</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="100" Y="300" Height="80" FingerKeyIndex="0" Type="NORMAL">
|
||||
<Char Unicode="90" Position="TopLeft">Z</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="200" Y="300" Height="80" FingerKeyIndex="1" Type="NORMAL">
|
||||
<Char Unicode="88" Position="TopLeft">X</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="300" Y="300" Height="80" FingerKeyIndex="2" Type="NORMAL">
|
||||
<Char Unicode="77" Position="TopLeft">M</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="400" Y="300" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="67" Position="TopLeft">C</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="500" Y="300" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="86" Position="TopLeft">V</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="830" Y="300" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="75" Position="TopLeft">K</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="930" Y="300" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="76" Position="TopLeft">L</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1030" Y="300" Height="80" FingerKeyIndex="5" Type="NORMAL">
|
||||
<Char Unicode="60" Position="TopLeft"><</Char>
|
||||
<Char Unicode="44" Position="BottomLeft">,</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1130" Y="300" Height="80" FingerKeyIndex="6" Type="NORMAL">
|
||||
<Char Unicode="62" Position="TopLeft">></Char>
|
||||
<Char Unicode="46" Position="BottomLeft">.</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1230" Y="300" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="63" Position="TopLeft">?</Char>
|
||||
<Char Unicode="47" Position="BottomLeft">/</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="590" KeyText="" Y="100" Height="130" Type="OTHER"/>
|
||||
<Key Width="80" X="590" KeyText="" Y="250" Height="130" Type="OTHER"/>
|
||||
<Key Width="80" X="740" KeyText="" Y="100" Height="130" Type="OTHER"/>
|
||||
<Key Width="80" X="740" KeyText="" Y="250" Height="130" Type="OTHER"/>
|
||||
<Key Width="80" X="400" KeyText="ESC" Y="400" Height="80" Type="OTHER"/>
|
||||
<Key Width="80" X="300" Y="400" Height="80" Type="SPACE"/>
|
||||
<Key Width="80" X="100" KeyText="L2" Y="400" Height="80" Type="OTHER"/>
|
||||
<Key Width="80" X="200" KeyText="" Y="400" Height="80" Type="OTHER"/>
|
||||
<Key Width="80" X="0" KeyText="" Y="400" Height="80" Type="OTHER"/>
|
||||
<Key Width="80" X="930" KeyText="" Y="400" Height="80" Type="OTHER"/>
|
||||
<Key Width="80" X="1030" KeyText="" Y="400" Height="80" Type="OTHER"/>
|
||||
<Key Width="80" X="1130" KeyText="" Y="400" Height="80" Type="OTHER"/>
|
||||
<Key Width="80" X="1230" KeyText="" Y="400" Height="80" Type="OTHER"/>
|
||||
<Key Width="80" X="1330" KeyText="" Y="400" Height="80" Type="OTHER"/>
|
||||
</Keys>
|
||||
<Connections>
|
||||
<KeyConnector KeyUnicode="8" TargetKeyIndex="16"/>
|
||||
<KeyConnector KeyUnicode="13" TargetKeyIndex="9"/>
|
||||
<KeyConnector KeyUnicode="32" TargetKeyIndex="13"/>
|
||||
<KeyConnector KeyUnicode="33" TargetKeyIndex="19"/>
|
||||
<KeyConnector KeyUnicode="35" TargetKeyIndex="20"/>
|
||||
<KeyConnector KeyUnicode="36" TargetKeyIndex="38"/>
|
||||
<KeyConnector KeyUnicode="40" TargetKeyIndex="26"/>
|
||||
<KeyConnector KeyUnicode="41" TargetKeyIndex="27"/>
|
||||
<KeyConnector KeyUnicode="42" TargetKeyIndex="25"/>
|
||||
<KeyConnector KeyUnicode="43" TargetKeyIndex="28"/>
|
||||
<KeyConnector KeyUnicode="44" TargetKeyIndex="51"/>
|
||||
<KeyConnector KeyUnicode="45" TargetKeyIndex="42"/>
|
||||
<KeyConnector KeyUnicode="46" TargetKeyIndex="52"/>
|
||||
<KeyConnector KeyUnicode="47" TargetKeyIndex="53"/>
|
||||
<KeyConnector KeyUnicode="48" TargetKeyIndex="27"/>
|
||||
<KeyConnector KeyUnicode="49" TargetKeyIndex="18" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="50" TargetKeyIndex="19" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="51" TargetKeyIndex="20" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="52" TargetKeyIndex="21" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="53" TargetKeyIndex="22" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="54" TargetKeyIndex="23"/>
|
||||
<KeyConnector KeyUnicode="55" TargetKeyIndex="24"/>
|
||||
<KeyConnector KeyUnicode="56" TargetKeyIndex="25"/>
|
||||
<KeyConnector KeyUnicode="57" TargetKeyIndex="26"/>
|
||||
<KeyConnector KeyUnicode="58" TargetKeyIndex="39"/>
|
||||
<KeyConnector KeyUnicode="59" TargetKeyIndex="18"/>
|
||||
<KeyConnector KeyUnicode="60" TargetKeyIndex="51"/>
|
||||
<KeyConnector KeyUnicode="61" TargetKeyIndex="28"/>
|
||||
<KeyConnector KeyUnicode="62" TargetKeyIndex="52"/>
|
||||
<KeyConnector KeyUnicode="63" TargetKeyIndex="53"/>
|
||||
<KeyConnector KeyUnicode="64" TargetKeyIndex="38"/>
|
||||
<KeyConnector KeyUnicode="65" TargetKeyIndex="0" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="66" TargetKeyIndex="33" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="67" TargetKeyIndex="47" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="68" TargetKeyIndex="30" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="69" TargetKeyIndex="5" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="70" TargetKeyIndex="35" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="71" TargetKeyIndex="40" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="72" TargetKeyIndex="2" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="73" TargetKeyIndex="7" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="74" TargetKeyIndex="34" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="75" TargetKeyIndex="49" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="76" TargetKeyIndex="50" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="77" TargetKeyIndex="46" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="78" TargetKeyIndex="4" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="79" TargetKeyIndex="6" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="80" TargetKeyIndex="37" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="81" TargetKeyIndex="29" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="82" TargetKeyIndex="31" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="83" TargetKeyIndex="1" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="84" TargetKeyIndex="3" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="85" TargetKeyIndex="36" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="86" TargetKeyIndex="48" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="87" TargetKeyIndex="32" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="88" TargetKeyIndex="45" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="89" TargetKeyIndex="41" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="90" TargetKeyIndex="44" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="91" TargetKeyIndex="23"/>
|
||||
<KeyConnector KeyUnicode="92" TargetKeyIndex="43"/>
|
||||
<KeyConnector KeyUnicode="93" TargetKeyIndex="24"/>
|
||||
<KeyConnector KeyUnicode="94" TargetKeyIndex="39"/>
|
||||
<KeyConnector KeyUnicode="95" TargetKeyIndex="42"/>
|
||||
<KeyConnector KeyUnicode="96" TargetKeyIndex="17" ModifierIndex="14"/>
|
||||
<KeyConnector KeyUnicode="97" TargetKeyIndex="0"/>
|
||||
<KeyConnector KeyUnicode="98" TargetKeyIndex="33"/>
|
||||
<KeyConnector KeyUnicode="99" TargetKeyIndex="47"/>
|
||||
<KeyConnector KeyUnicode="100" TargetKeyIndex="30"/>
|
||||
<KeyConnector KeyUnicode="101" TargetKeyIndex="5"/>
|
||||
<KeyConnector KeyUnicode="102" TargetKeyIndex="35"/>
|
||||
<KeyConnector KeyUnicode="103" TargetKeyIndex="40"/>
|
||||
<KeyConnector KeyUnicode="104" TargetKeyIndex="2"/>
|
||||
<KeyConnector KeyUnicode="105" TargetKeyIndex="7"/>
|
||||
<KeyConnector KeyUnicode="106" TargetKeyIndex="34"/>
|
||||
<KeyConnector KeyUnicode="107" TargetKeyIndex="49"/>
|
||||
<KeyConnector KeyUnicode="108" TargetKeyIndex="50"/>
|
||||
<KeyConnector KeyUnicode="109" TargetKeyIndex="46"/>
|
||||
<KeyConnector KeyUnicode="110" TargetKeyIndex="4"/>
|
||||
<KeyConnector KeyUnicode="111" TargetKeyIndex="6"/>
|
||||
<KeyConnector KeyUnicode="112" TargetKeyIndex="37"/>
|
||||
<KeyConnector KeyUnicode="113" TargetKeyIndex="29"/>
|
||||
<KeyConnector KeyUnicode="114" TargetKeyIndex="31"/>
|
||||
<KeyConnector KeyUnicode="115" TargetKeyIndex="1"/>
|
||||
<KeyConnector KeyUnicode="116" TargetKeyIndex="3"/>
|
||||
<KeyConnector KeyUnicode="117" TargetKeyIndex="36"/>
|
||||
<KeyConnector KeyUnicode="118" TargetKeyIndex="48"/>
|
||||
<KeyConnector KeyUnicode="119" TargetKeyIndex="32"/>
|
||||
<KeyConnector KeyUnicode="120" TargetKeyIndex="45"/>
|
||||
<KeyConnector KeyUnicode="121" TargetKeyIndex="41"/>
|
||||
<KeyConnector KeyUnicode="122" TargetKeyIndex="44"/>
|
||||
<KeyConnector KeyUnicode="123" TargetKeyIndex="21"/>
|
||||
<KeyConnector KeyUnicode="124" TargetKeyIndex="43"/>
|
||||
<KeyConnector KeyUnicode="125" TargetKeyIndex="22"/>
|
||||
<KeyConnector KeyUnicode="126" TargetKeyIndex="17"/>
|
||||
<KeyConnector KeyUnicode="258" TargetKeyIndex="14"/>
|
||||
<KeyConnector KeyUnicode="259" TargetKeyIndex="15"/>
|
||||
<KeyConnector KeyUnicode="260" TargetKeyIndex="8"/>
|
||||
<KeyConnector KeyUnicode="262" TargetKeyIndex="12"/>
|
||||
<KeyConnector KeyUnicode="263" TargetKeyIndex="11"/>
|
||||
<KeyConnector KeyUnicode="264" TargetKeyIndex="10"/>
|
||||
</Connections>
|
||||
</KTouchKeyboard>
|
||||
|
|
@ -0,0 +1,294 @@
|
|||
<KTouchKeyboard>
|
||||
<Title>English Workman layout for programmers from cub@uanic</Title>
|
||||
<Comment>English Workman layout for programmers from cub@uanic</Comment>
|
||||
<Language>en (English)</Language>
|
||||
<Keys>
|
||||
<Key Width="80" X="180" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="65" Position="TopLeft">A</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="280" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="83" Position="TopLeft">S</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="380" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="72" Position="TopLeft">H</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="480" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="84" Position="TopLeft">T</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="780" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="78" Position="TopLeft">N</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="880" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="69" Position="TopLeft">E</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="980" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="79" Position="TopLeft">O</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1080" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="73" Position="TopLeft">I</Char>
|
||||
</Key>
|
||||
<Key Width="130" X="0" Y="100" Height="80" Type="TAB"/>
|
||||
<Key Width="100" X="1380" Y="100" Height="180" Type="ENTER"/>
|
||||
<Key Width="250" X="1230" Y="300" Height="80" Type="SHIFT"/>
|
||||
<Key Width="130" X="1200" KeyText="AltGr" Y="400" Height="80" Type="OTHER"/>
|
||||
<Key Width="130" X="1350" KeyText="Ctrl" Y="400" Height="80" Type="OTHER"/>
|
||||
<Key Width="130" X="150" KeyText="Alt" Y="400" Height="80" Type="OTHER"/>
|
||||
<Key Width="130" X="0" KeyText="Ctrl" Y="400" Height="80" Type="OTHER"/>
|
||||
<Key Width="880" X="300" Y="400" Height="80" Type="SPACE"/>
|
||||
<Key Width="110" X="0" Y="300" Height="80" Type="SHIFT"/>
|
||||
<Key Width="160" X="0" Y="200" Height="80" Type="CAPSLOCK"/>
|
||||
<Key Width="160" X="1310" Y="0" Height="80" Type="BACKSPACE"/>
|
||||
<Key Width="80" X="0" Y="0" Height="80" FingerKeyIndex="0" Type="NORMAL">
|
||||
<Char Unicode="96" Position="TopLeft">`</Char>
|
||||
<Char Unicode="126" Position="BottomLeft">~</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="100" Y="0" Height="80" FingerKeyIndex="0" Type="NORMAL">
|
||||
<Char Unicode="49" Position="TopLeft">1</Char>
|
||||
<Char Unicode="59" Position="BottomLeft">;</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="200" Y="0" Height="80" FingerKeyIndex="1" Type="NORMAL">
|
||||
<Char Unicode="50" Position="TopLeft">2</Char>
|
||||
<Char Unicode="33" Position="BottomLeft">!</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="300" Y="0" Height="80" FingerKeyIndex="2" Type="NORMAL">
|
||||
<Char Unicode="51" Position="TopLeft">3</Char>
|
||||
<Char Unicode="35" Position="BottomLeft">#</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="400" Y="0" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="52" Position="TopLeft">4</Char>
|
||||
<Char Unicode="123" Position="BottomLeft">{</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="500" Y="0" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="53" Position="TopLeft">5</Char>
|
||||
<Char Unicode="125" Position="BottomLeft">}</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="600" Y="0" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="54" Position="TopLeft">6</Char>
|
||||
<Char Unicode="91" Position="BottomLeft">[</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="700" Y="0" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="55" Position="TopLeft">7</Char>
|
||||
<Char Unicode="93" Position="BottomLeft">]</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="800" Y="0" Height="80" FingerKeyIndex="5" Type="NORMAL">
|
||||
<Char Unicode="56" Position="TopLeft">8</Char>
|
||||
<Char Unicode="42" Position="BottomLeft">*</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="900" Y="0" Height="80" FingerKeyIndex="6" Type="NORMAL">
|
||||
<Char Unicode="57" Position="TopLeft">9</Char>
|
||||
<Char Unicode="40" Position="BottomLeft">(</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1000" Y="0" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="48" Position="TopLeft">0</Char>
|
||||
<Char Unicode="41" Position="BottomLeft">)</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1100" Y="0" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="37" Position="TopLeft">%</Char>
|
||||
<Char Unicode="38" Position="BottomLeft">&</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1200" Y="0" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="43" Position="TopLeft">+</Char>
|
||||
<Char Unicode="61" Position="BottomLeft">=</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="150" Y="100" Height="80" FingerKeyIndex="0" Type="NORMAL">
|
||||
<Char Unicode="81" Position="TopLeft">Q</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="250" Y="100" Height="80" FingerKeyIndex="1" Type="NORMAL">
|
||||
<Char Unicode="68" Position="TopLeft">D</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="350" Y="100" Height="80" FingerKeyIndex="2" Type="NORMAL">
|
||||
<Char Unicode="82" Position="TopLeft">R</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="450" Y="100" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="87" Position="TopLeft">W</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="550" Y="100" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="66" Position="TopLeft">B</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="650" Y="100" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="74" Position="TopLeft">J</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="750" Y="100" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="70" Position="TopLeft">F</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="850" Y="100" Height="80" FingerKeyIndex="5" Type="NORMAL">
|
||||
<Char Unicode="85" Position="TopLeft">U</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="950" Y="100" Height="80" FingerKeyIndex="6" Type="NORMAL">
|
||||
<Char Unicode="80" Position="TopLeft">P</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1050" Y="100" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="64" Position="TopLeft">@</Char>
|
||||
<Char Unicode="36" Position="BottomLeft">$</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1150" Y="100" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="94" Position="TopLeft">^</Char>
|
||||
<Char Unicode="58" Position="BottomLeft">:</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1250" Y="100" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="34" Position="TopLeft">"</Char>
|
||||
<Char Unicode="39" Position="BottomLeft">'</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="580" Y="200" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="71" Position="TopLeft">G</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="680" Y="200" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="89" Position="TopLeft">Y</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1180" Y="200" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="95" Position="TopLeft">_</Char>
|
||||
<Char Unicode="45" Position="BottomLeft">-</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1280" Y="200" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="124" Position="TopLeft">|</Char>
|
||||
<Char Unicode="92" Position="BottomLeft">\</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="130" Y="300" Height="80" FingerKeyIndex="0" Type="NORMAL">
|
||||
<Char Unicode="60" Position="TopLeft"><</Char>
|
||||
<Char Unicode="62" Position="BottomLeft">></Char>
|
||||
</Key>
|
||||
<Key Width="80" X="230" Y="300" Height="80" FingerKeyIndex="0" Type="NORMAL">
|
||||
<Char Unicode="90" Position="TopLeft">Z</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="330" Y="300" Height="80" FingerKeyIndex="1" Type="NORMAL">
|
||||
<Char Unicode="88" Position="TopLeft">X</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="430" Y="300" Height="80" FingerKeyIndex="2" Type="NORMAL">
|
||||
<Char Unicode="77" Position="TopLeft">M</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="530" Y="300" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="67" Position="TopLeft">C</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="630" Y="300" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="86" Position="TopLeft">V</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="730" Y="300" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="75" Position="TopLeft">K</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="830" Y="300" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="76" Position="TopLeft">L</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="930" Y="300" Height="80" FingerKeyIndex="5" Type="NORMAL">
|
||||
<Char Unicode="60" Position="TopLeft"><</Char>
|
||||
<Char Unicode="44" Position="BottomLeft">,</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1030" Y="300" Height="80" FingerKeyIndex="6" Type="NORMAL">
|
||||
<Char Unicode="62" Position="TopLeft">></Char>
|
||||
<Char Unicode="46" Position="BottomLeft">.</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1130" Y="300" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="63" Position="TopLeft">?</Char>
|
||||
<Char Unicode="47" Position="BottomLeft">/</Char>
|
||||
</Key>
|
||||
</Keys>
|
||||
<Connections>
|
||||
<KeyConnector TargetKeyIndex="0" KeyUnicode="97" />
|
||||
<KeyConnector TargetKeyIndex="0" KeyUnicode="65" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="1" KeyUnicode="115"/>
|
||||
<KeyConnector TargetKeyIndex="1" KeyUnicode="83" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="2" KeyUnicode="104"/>
|
||||
<KeyConnector TargetKeyIndex="2" KeyUnicode="72" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="3" KeyUnicode="116"/>
|
||||
<KeyConnector TargetKeyIndex="3" KeyUnicode="84" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="4" KeyUnicode="110"/>
|
||||
<KeyConnector TargetKeyIndex="4" KeyUnicode="78" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="5" KeyUnicode="101"/>
|
||||
<KeyConnector TargetKeyIndex="5" KeyUnicode="69" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="6" KeyUnicode="111"/>
|
||||
<KeyConnector TargetKeyIndex="6" KeyUnicode="79" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="7" KeyUnicode="105"/>
|
||||
<KeyConnector TargetKeyIndex="7" KeyUnicode="73" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="8" KeyUnicode="260"/>
|
||||
<KeyConnector TargetKeyIndex="9" KeyUnicode="13" />
|
||||
<KeyConnector TargetKeyIndex="10" KeyUnicode="257"/>
|
||||
<KeyConnector TargetKeyIndex="11" KeyUnicode="264"/>
|
||||
<KeyConnector TargetKeyIndex="12" KeyUnicode="265"/>
|
||||
<KeyConnector TargetKeyIndex="13" KeyUnicode="263"/>
|
||||
<KeyConnector TargetKeyIndex="14" KeyUnicode="262"/>
|
||||
<KeyConnector TargetKeyIndex="15" KeyUnicode="32" />
|
||||
<KeyConnector TargetKeyIndex="16" KeyUnicode="258"/>
|
||||
<KeyConnector TargetKeyIndex="17" KeyUnicode="259"/>
|
||||
<KeyConnector TargetKeyIndex="18" KeyUnicode="8" />
|
||||
<KeyConnector TargetKeyIndex="19" KeyUnicode="126"/>
|
||||
<KeyConnector TargetKeyIndex="19" KeyUnicode="96" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="20" KeyUnicode="59" />
|
||||
<KeyConnector TargetKeyIndex="20" KeyUnicode="49" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="21" KeyUnicode="33" />
|
||||
<KeyConnector TargetKeyIndex="21" KeyUnicode="50" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="22" KeyUnicode="35" />
|
||||
<KeyConnector TargetKeyIndex="22" KeyUnicode="51" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="23" KeyUnicode="123"/>
|
||||
<KeyConnector TargetKeyIndex="23" KeyUnicode="52" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="24" KeyUnicode="125"/>
|
||||
<KeyConnector TargetKeyIndex="24" KeyUnicode="53" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="25" KeyUnicode="91" />
|
||||
<KeyConnector TargetKeyIndex="25" KeyUnicode="54" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="26" KeyUnicode="93" />
|
||||
<KeyConnector TargetKeyIndex="26" KeyUnicode="55" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="27" KeyUnicode="42" />
|
||||
<KeyConnector TargetKeyIndex="27" KeyUnicode="56" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="28" KeyUnicode="40" />
|
||||
<KeyConnector TargetKeyIndex="28" KeyUnicode="57" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="29" KeyUnicode="41" />
|
||||
<KeyConnector TargetKeyIndex="29" KeyUnicode="48" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="30" KeyUnicode="38" />
|
||||
<KeyConnector TargetKeyIndex="30" KeyUnicode="37" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="31" KeyUnicode="61" />
|
||||
<KeyConnector TargetKeyIndex="31" KeyUnicode="43" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="32" KeyUnicode="113"/>
|
||||
<KeyConnector TargetKeyIndex="32" KeyUnicode="81" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="33" KeyUnicode="100"/>
|
||||
<KeyConnector TargetKeyIndex="33" KeyUnicode="68" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="34" KeyUnicode="114"/>
|
||||
<KeyConnector TargetKeyIndex="34" KeyUnicode="82" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="35" KeyUnicode="119"/>
|
||||
<KeyConnector TargetKeyIndex="35" KeyUnicode="87" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="36" KeyUnicode="98" />
|
||||
<KeyConnector TargetKeyIndex="36" KeyUnicode="66" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="37" KeyUnicode="106"/>
|
||||
<KeyConnector TargetKeyIndex="37" KeyUnicode="74" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="38" KeyUnicode="102"/>
|
||||
<KeyConnector TargetKeyIndex="38" KeyUnicode="70" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="39" KeyUnicode="117"/>
|
||||
<KeyConnector TargetKeyIndex="39" KeyUnicode="85" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="40" KeyUnicode="112"/>
|
||||
<KeyConnector TargetKeyIndex="40" KeyUnicode="80" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="41" KeyUnicode="36" />
|
||||
<KeyConnector TargetKeyIndex="41" KeyUnicode="64" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="42" KeyUnicode="58" />
|
||||
<KeyConnector TargetKeyIndex="42" KeyUnicode="94" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="43" KeyUnicode="39" />
|
||||
<KeyConnector TargetKeyIndex="43" KeyUnicode="34" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="44" KeyUnicode="103"/>
|
||||
<KeyConnector TargetKeyIndex="44" KeyUnicode="71" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="45" KeyUnicode="121"/>
|
||||
<KeyConnector TargetKeyIndex="45" KeyUnicode="89" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="46" KeyUnicode="45" />
|
||||
<KeyConnector TargetKeyIndex="46" KeyUnicode="95" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="47" KeyUnicode="92" />
|
||||
<KeyConnector TargetKeyIndex="47" KeyUnicode="124" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="48" KeyUnicode="62" />
|
||||
<KeyConnector TargetKeyIndex="48" KeyUnicode="60" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="49" KeyUnicode="122"/>
|
||||
<KeyConnector TargetKeyIndex="49" KeyUnicode="90" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="50" KeyUnicode="120"/>
|
||||
<KeyConnector TargetKeyIndex="50" KeyUnicode="88" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="51" KeyUnicode="109"/>
|
||||
<KeyConnector TargetKeyIndex="51" KeyUnicode="77" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="52" KeyUnicode="99" />
|
||||
<KeyConnector TargetKeyIndex="52" KeyUnicode="67" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="53" KeyUnicode="118"/>
|
||||
<KeyConnector TargetKeyIndex="53" KeyUnicode="86" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="54" KeyUnicode="107"/>
|
||||
<KeyConnector TargetKeyIndex="54" KeyUnicode="75" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="55" KeyUnicode="108"/>
|
||||
<KeyConnector TargetKeyIndex="55" KeyUnicode="76" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="56" KeyUnicode="44" />
|
||||
<KeyConnector TargetKeyIndex="56" KeyUnicode="60" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="57" KeyUnicode="46" />
|
||||
<KeyConnector TargetKeyIndex="57" KeyUnicode="62" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="58" KeyUnicode="47" />
|
||||
<KeyConnector TargetKeyIndex="58" KeyUnicode="63" ModifierIndex="10"/>
|
||||
</Connections>
|
||||
</KTouchKeyboard>
|
||||
|
||||
|
|
@ -0,0 +1,585 @@
|
|||
<KTouchLecture>
|
||||
<Title>Fast Workman + symbols from Dvorak for programme</Title>
|
||||
<FontSuggestions>Courier 10 Pitch</FontSuggestions>
|
||||
<Levels>
|
||||
<Level>
|
||||
<NewCharacters>ashtneoi</NewCharacters>
|
||||
<Line>than oath tone tints tees nth hoe hahs tea eat ions</Line>
|
||||
<Line>taint ho ass hoses ash test tan hot toes s ts soot one</Line>
|
||||
<Line>hahs ion sises ash hosts ton hot tee tints taint shies</Line>
|
||||
<Line>hen seas teen he tot hint the hoses son tost sine into</Line>
|
||||
<Line>ho tens the noon sin hes shin shoo soon tins sit</Line>
|
||||
<Line>hoot a ts ah neon tit heat toss sis in s host ions ton</Line>
|
||||
<Line>nests note neat oaten nit sons inti inane shah soot</Line>
|
||||
<Line>h inn is i nit he sets o this note test sans hash ton</Line>
|
||||
<Line>stone neath those oh none sons sit tins tins ha</Line>
|
||||
<Line>oath e sheen hos tee hosts ate neath hint ate h</Line>
|
||||
<Line>snits tans tone h notes tie hes noons note tease shoe</Line>
|
||||
<Line>tots ante thin s tot s tho aeon eon hits shin hat tine</Line>
|
||||
<Line>is satin shoos sits sanes too sine es those shine neat</Line>
|
||||
<Line>inane too thee sh hath the noes sass tee sots test</Line>
|
||||
<Line>shins inns snot onto es an ten then shoo tons tees tine</Line>
|
||||
<Line>tins ions sit ten stone s those son oh hoses on</Line>
|
||||
<Line>tins aha tats state ate i o oaten noons is senna satin</Line>
|
||||
<Line>sises sat tees sit hone teat sat shot neath that</Line>
|
||||
<Line>stone sat tan ate ha tote shoe ton anti hoot shat</Line>
|
||||
<Line>sat tea ani as sh test tea the ate thine sits t too</Line>
|
||||
<Line>ins sises an tots thee shat ion sass nits hoses nose</Line>
|
||||
<Line>hen in ahas the eh shine hens oath at he tine hoses noses</Line>
|
||||
<Line>noon sites aeon eon at tints nits hes shes thine inane</Line>
|
||||
<Line>this hes sate at hit eon tens hoot ion eons hies</Line>
|
||||
<Line>tote ts shit shit ahas seas o non sane ease at not</Line>
|
||||
<Line>sasses shit soon teat ah totes nannies sties sites tho</Line>
|
||||
<Line>notes oats shins ions stats tin tonnes shits stats</Line>
|
||||
<Line>inset sashes shoots host a anion tens hashes tenets</Line>
|
||||
<Line>anoint ohos tee saith shone hats sh hostess ease</Line>
|
||||
<Line>hash hoes hashes neat insist anoints hoists sanest</Line>
|
||||
<Line>es ts anti sea theists asses sateen notion sane hen</Line>
|
||||
<Line>shits shoot aeon nets hats sass hot hit session nests</Line>
|
||||
<Line>attain son hose eats oaten sits seasons otiose sans</Line>
|
||||
<Line>hate nets toes stoats sot settees nits not titan noes</Line>
|
||||
<Line>sonatas toot tost tosses ante tins sons teens hoist</Line>
|
||||
<Line>oh asses season soon antenna sashes steins oath</Line>
|
||||
<Line>hits hoes heat the o toot tinnies sass hoots snoots tat</Line>
|
||||
<Line>tents neat hotshot noshes snot satiate inti stoat</Line>
|
||||
<Line>tie stoats tents sent sonata stones hints hate sises</Line>
|
||||
<Line>sites testate then oat neatest sonnet noshes ohos</Line>
|
||||
<Line>honest teethes soot satiate tattoo titan noses sass</Line>
|
||||
<Line>anoint tans ah not neatest notion onion ass onsets</Line>
|
||||
<Line>tees easies anti he tint nits sit saith anion note</Line>
|
||||
<Line>henna hoists ants snoots tines siestas ten sonata tie</Line>
|
||||
<Line>sites easiest sonnies anons session hoe theist ani</Line>
|
||||
<Line>notions sties sheets ants insane estate hie in</Line>
|
||||
<Line>hos noise teethes assets intense assents sat hoot</Line>
|
||||
<Line>stash thee thee one teethes sheathe so seas tinnies his</Line>
|
||||
<Line>sonata toot oh thin toss tattoos shines sheath nosies</Line>
|
||||
<Line>inti hoists noons shoo toniest tint teats noose anise</Line>
|
||||
</Level>
|
||||
<Level>
|
||||
<NewCharacters>qdrwfup$</NewCharacters>
|
||||
<Line>thrush stride super apt $ups foe hairs trout wrests erupts</Line>
|
||||
<Line>pita $pisses seres dons seeped dread option $feuded thus</Line>
|
||||
<Line>praise pots pupa $pear drones swords runts preps prefer</Line>
|
||||
<Line>snouts added unfit $theft rifted $front info$ winner</Line>
|
||||
<Line>unset porn rosin troth opines swine operas $west rares</Line>
|
||||
<Line>iffier opera heeded ware finest hers arrows atria</Line>
|
||||
<Line>fifes panda quotas were rewire dots sadder aided wins</Line>
|
||||
<Line>thrift nun dun psst queen $sorer piers frets dares</Line>
|
||||
<Line>$ires darned $potato pared$ hue undies duffer errs reused</Line>
|
||||
<Line>sweep earned ended touts poises shorts uteri fainer free</Line>
|
||||
<Line>widows pips hide roared $arson pas doffs frond parent shadow</Line>
|
||||
<Line>dunno purr$ putt west weds$ tauter swaps teed truth</Line>
|
||||
<Line>pupas quip rips strop purse sored sered trod whited</Line>
|
||||
<Line>aria dried $paths shorts did pees $haws whoops hewn</Line>
|
||||
<Line>runt pepper stow wanna woofs hut shined aft rod what</Line>
|
||||
<Line>dense aides air$ $outed $whets pea$ sands herpes$ raped</Line>
|
||||
<Line>dote stows quips pips pets quasar sores twos urea</Line>
|
||||
<Line>upon shiner $spades dotted roofs post $niter $dared darned</Line>
|
||||
<Line>heeded$ $warned sifts twee tared dread$ fond$ apes</Line>
|
||||
<Line>soup puff $troop panda report osiers $puffs eddies redrew</Line>
|
||||
<Line>nutted strap$ weired udder wind fetid fain rapes sear</Line>
|
||||
<Line>swats rotate entrap waders$ or hue nu road eased reran</Line>
|
||||
<Line>feta tutors sander $shows for eddied $hoofs rs herons</Line>
|
||||
<Line>truer theed sowed fores fern dope nadirs fat aerate pis</Line>
|
||||
<Line>few turner purrs darn peers sauted tauter dated$ show</Line>
|
||||
<Line>$warrior airs sprier quitted adepter potter niftier pouted</Line>
|
||||
<Line>wadi rhea$ froth quire sups pet opined firsts redound</Line>
|
||||
<Line>$footed dirties forties arrows$ snorer present fiesta</Line>
|
||||
<Line>appease shape noshed seeded$ winded $urns swoops outs</Line>
|
||||
<Line>rifted outdid perhaps hairpin ratio fended heir$ wrap</Line>
|
||||
<Line>$pundit spade hasp adopts fains suture suers refuted</Line>
|
||||
<Line>dint thrifts $partied $squads renter tied turnout roded</Line>
|
||||
<Line>arid whiffed power$ terrors opinion $poops nippier hearth</Line>
|
||||
<Line>denier fiestas suited nearest waif horses tore</Line>
|
||||
<Line>hairdo frond fades dodo soprano sinew fattier downed</Line>
|
||||
<Line>disused persist pariah roaster arrears $soups owned</Line>
|
||||
<Line>feeders orates errata fear senders snipers hither upped</Line>
|
||||
<Line>waif teethed $shodden sun$ renter sue poises doff dwarfed</Line>
|
||||
<Line>troupes rinds earths append draft rooster peeper</Line>
|
||||
<Line>rereads finner upsets potpies stopped $showers sprites</Line>
|
||||
<Line>teeters radios roofed twits radiant $wears steers fritter</Line>
|
||||
<Line>sworded swap diets$ hosed honors won arouse weirder speed</Line>
|
||||
<Line>dare nerds pendent $protons poohed tardies$ $stripe shade</Line>
|
||||
<Line>outers hooted ids psst hosted sour editors pewters sered</Line>
|
||||
<Line>edition weirs $truer tented unison spriest opus peons</Line>
|
||||
<Line>outwit quiet writhed readies peso swatter tape$ pennon</Line>
|
||||
<Line>$snorts spats ships harpist town $swathes shapes fa</Line>
|
||||
<Line>trotter aspirin odds $iffier howdah sortied pains wand</Line>
|
||||
<Line>$sorts $entwine turrets tartars unstop inner$ inside prior</Line>
|
||||
<Line>who trades starter duh intoned$ artiste sensors fain</Line>
|
||||
</Level>
|
||||
<Level>
|
||||
<NewCharacters>bjgycvkl</NewCharacters>
|
||||
<Line>$creek fjord leans eureka rowel vagued cage pickup holler</Line>
|
||||
<Line>ogre lanced $churls bidets cots glow $chows bean satiny</Line>
|
||||
<Line>bags capons bulbed$ ulcer beech bogey going vials novel</Line>
|
||||
<Line>dusk jabbed $cysts dactyl covert herb forgo belied buffet</Line>
|
||||
<Line>$foray abbeys$ avows lubing tawny chant loudly$ last</Line>
|
||||
<Line>hack stork$ divan cleans sight ebbed venal$ flower pal</Line>
|
||||
<Line>$darken growl vacant ballad cased scab yonder pickup</Line>
|
||||
<Line>beeves $leans hyphen beck scoop chart$ dyer guff beers</Line>
|
||||
<Line>casks lovely piker junta $cannon panel horsy wackos</Line>
|
||||
<Line>convoy dales tank claws lavish subdue birth fluffy jaguar</Line>
|
||||
<Line>alone bonier region lever $cellar paltry kicks hooked ribald</Line>
|
||||
<Line>livens rights$ $boater gouty gooks ballad gosh leans</Line>
|
||||
<Line>$ranks belief ghoul pulls punch cops wry coyote weaver</Line>
|
||||
<Line>loans nil surrey dicks tyrant awoke kabob glided bribe</Line>
|
||||
<Line>surrey $donkey elide$ welds ruby$ pilaf cleat story uncle</Line>
|
||||
<Line>dewlap$ $petrol lushes ceded lush blahs jury$ slob gofers</Line>
|
||||
<Line>above dweeb$ chaste knives rung leggy ploys richer vices</Line>
|
||||
<Line>rakish $hubs treks swirl wall life appal evils$ greys</Line>
|
||||
<Line>arrays $longs cloths squawk viands ironic plows fitful</Line>
|
||||
<Line>flown $bouts relays$ pilaff doled citric trench hailed</Line>
|
||||
<Line>dauber bind $cost avasts $befit petal flea hoagie colic</Line>
|
||||
<Line>edging geckos etcher cyclic$ typed jack splays reckon</Line>
|
||||
<Line>cuss alter you lieges cools wage taco gaping$ dahlia</Line>
|
||||
<Line>juts rabbit panty pinked trowel unsay cubit bounty</Line>
|
||||
<Line>lisp$ knave hanky drub agave$ shrank dodge $baboon jags</Line>
|
||||
<Line>flunked $ogres ravaged $enrols tikes sickles flee parolee</Line>
|
||||
<Line>brain avid legatee$ ethnic nailing blanch cawing$ solve</Line>
|
||||
<Line>nesting fury avenges swanky placers delete berried taller</Line>
|
||||
<Line>sorrels befalls pueblos janitor gnaw bright glueing$ facts</Line>
|
||||
<Line>griped justify bounty sloe$ clatter$ chichi cyanide weedy</Line>
|
||||
<Line>flub scion piggies$ lisped succor shivery $doings charge</Line>
|
||||
<Line>etched opting higher nick advents $chains $equably join</Line>
|
||||
<Line>geodes clarion detects gable $lassie scythes eerily</Line>
|
||||
<Line>says cubs things dowager gaping$ viewing$ scraped wiliest</Line>
|
||||
<Line>fateful scorn brinks collude drills beside ovoid stilt</Line>
|
||||
<Line>$victory glut savvier $leach such$ $rubiest concord jape</Line>
|
||||
<Line>vagary burps rifled barred retract rooting ranks glad</Line>
|
||||
<Line>auburn losing swirly burgles ascends rabbles canine dove</Line>
|
||||
<Line>curing throngs fueling wangles balls relied gas cloths</Line>
|
||||
<Line>repays quoting creates browner carpi nils stooges scuttle</Line>
|
||||
<Line>slakes hibachi $wetland gayer corsage revues clue</Line>
|
||||
<Line>falters staled recur frolic palsied splashy evils geckos</Line>
|
||||
<Line>bloc kisser slued gluts browser$ fluent pullets pile</Line>
|
||||
<Line>caterer $bearish lagoon target chicory wingers ocelots</Line>
|
||||
<Line>serials blob lessor quirked gods $intake coaling kneeing</Line>
|
||||
<Line>unlikes viol winging brogues loving booting bonkers</Line>
|
||||
<Line>socks $slanted $stacks thongs cite $ranking whalers$ unwary</Line>
|
||||
<Line>henpeck chairs foetal$ sausage shyness vegans laciest</Line>
|
||||
<Line>snitch$ $acres lacked sleek $entail ilks budge recoils</Line>
|
||||
<Line>florae aspic deject kookier gain cleanse ingot rising</Line>
|
||||
</Level>
|
||||
<Level>
|
||||
<NewCharacters>zxm,./:'\-</NewCharacters>
|
||||
<Line>clump manges moth raceme tuxes empire ,mashes mowers fixed</Line>
|
||||
<Line>blazes, mid/ -monks fixity chimps hansom \hoaxes merged</Line>
|
||||
<Line>opium .dioxin emir grazes lament, times chomp 'atom sexes</Line>
|
||||
<Line>smit moo gamed zed /jammed stumps monger\ rummy mute</Line>
|
||||
<Line>groom- impede rhombi lumber mores seized omelet moder</Line>
|
||||
<Line>eczema/ mosque' crazy miler/ damp hymn maizes thumbs' mantis</Line>
|
||||
<Line>meeker clime prom' \blintz .molder mapped atom miffs domain</Line>
|
||||
<Line>.zodiac humors/ champ boom$ 'hemmed cameo -dams mimosa</Line>
|
||||
<Line>emirs manics atom caroms pygmy hoaxed. stanza dogmas</Line>
|
||||
<Line>expert- jazzed- macing medics gram' muggy -mull makeup</Line>
|
||||
<Line>mammas:: vamped$ emoted:: merely oxbow sambas, semi</Line>
|
||||
<Line>bums\ bums' thymus barman\ blooms- farm malign smiles</Line>
|
||||
<Line>spumed \rime gambit -scuzzy femur mull/ .scrimp chrome</Line>
|
||||
<Line>swampy \make marshy zinc sums rumble nixed calmed dimes</Line>
|
||||
<Line>smells tumble ,name klutz, jumbos blame\ muting. numbly</Line>
|
||||
<Line>ampuls- disarm stumps ::motor mar. medal 'slalom flaxen</Line>
|
||||
<Line>\ermine -amaze micra cervix -aroma more $mainly disarm</Line>
|
||||
<Line>::morn timbre/ forums manned lump mucks, grime named</Line>
|
||||
<Line>topaz, zeta .dame slum\ hum roomer /limns sizing ritzy</Line>
|
||||
<Line>mashed fluxes ,qualm ,minis humors' ::gyms mussed' misdo</Line>
|
||||
<Line>mutts .demote manner amazes umped minxes manned x</Line>
|
||||
<Line>ampuls -hexing ,exert -crimp muter' amused storm$ bimbo</Line>
|
||||
<Line>bamboo exodus chrome macro remark merger$ monies carom</Line>
|
||||
<Line>scummy. macing ::ms taxies\ smote laxer ::shames murky</Line>
|
||||
<Line>mart' spume mocked/ flux shames hoaxes lambs ohm hammed</Line>
|
||||
<Line>theme. domains. toolbox\ miters ,fizz murk /theism madly</Line>
|
||||
<Line>amends mood flume hoaxes woodmen $musky plumage myopics</Line>
|
||||
<Line>mufti ashram$ eminent ::poxes mangoes tumble ::expound motors</Line>
|
||||
<Line>plazas meeker exit$ /jam airman homier mutter customs vizor</Line>
|
||||
<Line>latex$ $marts myopics cameos anthem mooring lament damper</Line>
|
||||
<Line>,merrier zero $sextant sputum\ ashamed/ animus' emitted</Line>
|
||||
<Line>'makings muffler dualism' symbols froze meaning$ gizmos</Line>
|
||||
<Line>amigos -clomps spumed noncom acme ::drummed misters comedy</Line>
|
||||
<Line>$totemic malign' claimed himself norms. mange' immense</Line>
|
||||
<Line>razzing tumbled dimness rumored slums mains magpies gunman</Line>
|
||||
<Line>mucus dustmen mas- crumbed -hemlock \moulted bombed exacter</Line>
|
||||
<Line>program. dam airmen\ becalm bronze diatom$ masts morsel</Line>
|
||||
<Line>rimed morns 'moister umped rumbles clomps:: .gamin bombed</Line>
|
||||
<Line>menfolk$ citizen midwife\ bramble capsize cameoed\ maze</Line>
|
||||
<Line>mutants regimen temper roam dualism booze zonked, gummy</Line>
|
||||
<Line>jasmine exiles .admiral damping- simile' mattock frogman</Line>
|
||||
<Line>laments- denims zoom ampules mouse maiden:: boozier me</Line>
|
||||
<Line>primed monitor mazes$ rhizome/ sixteen many- mammals mild</Line>
|
||||
<Line>message motley\ purism milch sax barroom anytime romance</Line>
|
||||
<Line>admirer mourned' limed doormat timpani simmer$ game</Line>
|
||||
<Line>phloem womanly amasses merits -lama \limes 'newsmen reforms</Line>
|
||||
<Line>$next midwife ,nomadic wizened vamps matures$ mousse mar</Line>
|
||||
<Line>gourmet azimuth permute movies:: charms:: damp smoke</Line>
|
||||
<Line>mooring similes zed -emerged plumb mummify /midway tamper</Line>
|
||||
<Line>legmen ,waltz hertz, mowed emits waltz amber claims boatman</Line>
|
||||
</Level>
|
||||
<Level>
|
||||
<NewCharacters>~;[{}(=*)+]%!</NewCharacters>
|
||||
<Line>{fudge will cruets copse gash fumes town armies+ tannin</Line>
|
||||
<Line>plunks! mauled. censer ravens .future tripe\ treed mu</Line>
|
||||
<Line>gruels enrol dishes merry% oceans gouge ;while stars</Line>
|
||||
<Line>+ploys edicts limber{ pounce =retain shove heath bonds</Line>
|
||||
<Line>edgy allure clue arc scouts( hones\ bloods )titted purged</Line>
|
||||
<Line>quark vector past; royals flaxen creed rowed [vising notice</Line>
|
||||
<Line>-goose nooned bated whens }turf grub opted pluses iguana</Line>
|
||||
<Line>lumps gnat! hoist ruffle! yore* -turfs gown entice guilt</Line>
|
||||
<Line>aces{ metes sods slyly .easels \peps gamins law whets</Line>
|
||||
<Line>]deeded job pokes cocoas %storey *thighs talker saw</Line>
|
||||
<Line>nixed acrid $swells )hub toggle~ edicts grudge youth} perts</Line>
|
||||
<Line>hid ducts pooh denim shoon wiggle~ stirs /bruins butte</Line>
|
||||
<Line>opens\ !marts bravos discs man whited= taxis manner. mars</Line>
|
||||
<Line>herons\ +tugs berms; lean flawed rifts aster worth outage</Line>
|
||||
<Line>sold- axle liner) bolled blinds welled [enrage thwart boxers</Line>
|
||||
<Line>]bugs =pooh .rheas tack [debts narks) baud %exes chumps</Line>
|
||||
<Line>~fights rivals dines zonked toll stump melon flog gurus</Line>
|
||||
<Line>brandy) divvy mien rosier, jurist quotes quiche stud</Line>
|
||||
<Line>states tryout gobble !torso market tyros} plaque nobles</Line>
|
||||
<Line>.wrong sloes) ports:: types sheave* depend obeys bother</Line>
|
||||
<Line>trench saner pixy feuds deicer\ spud -stanks amiss r</Line>
|
||||
<Line>%grad hexes joys plate crouch] pranks cede hype slink) duel</Line>
|
||||
<Line>snotty- cunt bevel every% videos level- ~envoy seven hilly</Line>
|
||||
<Line>holed{ }vowing humors coccis lilt vex[ ]fuse still rids</Line>
|
||||
<Line>soiled ::shirk heal caplet] pearly) )soppy %outset coat</Line>
|
||||
<Line>lacunae bans mods towered program' visuals whites titted</Line>
|
||||
<Line>coheres- !ageing rent outwit\ largo, gambol bedroll= cagily</Line>
|
||||
<Line>muumuu% tangier amassed leagued weeping- battens! leg</Line>
|
||||
<Line>volley% guitars toying markups cupolas$ rawer ninepin% clique</Line>
|
||||
<Line>rise} begged tramped roused) emblem. !gougers both strafes</Line>
|
||||
<Line>hurrays herself daubing:: volt/ lubbers ,seek dampens reread</Line>
|
||||
<Line>}twilled surname duck% %fulling ravels; outputs) vamps</Line>
|
||||
<Line>satiate bodice /bits ::nighest foolish doffs graving badges</Line>
|
||||
<Line>purveys fretful several shaker +pizzas sellers handle</Line>
|
||||
<Line>+include likable towered ,tic airfare ;painful infidel</Line>
|
||||
<Line>burgs egoists wasps reputed[ rafting (editor %scrams karate</Line>
|
||||
<Line>alluvia bounty coifed }rescued guise( {sects /nomads true</Line>
|
||||
<Line>}craning violet }settee foremen elitist homer jigging laser</Line>
|
||||
<Line>teeter timider vale. spinner~ %holder \swerved rein</Line>
|
||||
<Line>*chirrup excite guffaw wobbly (jetties -awaked waifing</Line>
|
||||
<Line>afloat day% weirds \various ideally depend bosom spiffy</Line>
|
||||
<Line>quarto quavery[ 'revenue )ankh whoops! 'hissing silkier</Line>
|
||||
<Line>exhales/ diorama thins belched wash ionizes! 'woozy paddies</Line>
|
||||
<Line>{bolts germ hammed oaken) imbibed wenches:: juncos decade</Line>
|
||||
<Line>$calked dryly babes elitism[ outlets slave:: scenery fief</Line>
|
||||
<Line>garnish) weeks) deigned tabling ~reduce chived reused</Line>
|
||||
<Line>$impetus dithers+ aspics~ =troths fags gyros vagrant reared</Line>
|
||||
<Line>tunics[ =golfer endure forcing' curd .yuckier }rhizome gazette</Line>
|
||||
<Line>'armorer clicked} siding sinning hernias +munches caudal</Line>
|
||||
<Line>}wiled renewal coffer furled pigskin; !valley pistil</Line>
|
||||
</Level>
|
||||
<Level>
|
||||
<NewCharacters>0123456789</NewCharacters>
|
||||
<Line>(saved moss tint:: tomb )cowers neath gosh; booty+ chive</Line>
|
||||
<Line>pity canes ankhs( ~spoken cabal- moons$ poring laking froze</Line>
|
||||
<Line>plugs toughs dilled [putty email 6vices harks alters% attar</Line>
|
||||
<Line>sells pagers\ habit fest %cars yucked whited canine bahs</Line>
|
||||
<Line>calked rehab hours. paunch sour{ trace, =pate mimosa props</Line>
|
||||
<Line>harass tamer5 fa ::renown !mopes firms6 naive -motive clasp</Line>
|
||||
<Line>dunks cubing found homier troupe blur gnarls drills8 trucks</Line>
|
||||
<Line>sonic raze +rhyme \hymns rank salves boots ate knew clots</Line>
|
||||
<Line>looter5 avasts {amigo stun, voled taut )vanned traces</Line>
|
||||
<Line>1icier comas states/ crown black whams* apse inch/ kicked</Line>
|
||||
<Line>byes. blent, burrs hotbed foist moats. egg neon4 splint</Line>
|
||||
<Line>,cameo .annual raved sludge' {snit thrust foul absurd operas</Line>
|
||||
<Line>amid soul except+ icebox owning single kiddo% socks9 braced</Line>
|
||||
<Line>~hoping ulcers2 quake wades $tan fates 7blabs 5yogurt masks</Line>
|
||||
<Line>rabid clumps (downed coital 3blue avian gotta+ runt cocoas</Line>
|
||||
<Line>nomad %ridges huhs {victim stains9 twee hammed 5corn wish</Line>
|
||||
<Line>cell:: ampuls dammed2 osprey 9moaned latent adorn goo</Line>
|
||||
<Line>sagest 1dammed dim jinnis tents exits5 3ratios 4milieu gains</Line>
|
||||
<Line>lining$ ~pangs knew yawed% pawed join= begs% honey prize</Line>
|
||||
<Line>4erupts lowly= %lids unsaid stymie gaunts depend lousy</Line>
|
||||
<Line>shoon rifest 1unpin sunny! slick wooer writer mail making</Line>
|
||||
<Line>tire mentor* cans) tined brays% germ$ huff2 hymen coded</Line>
|
||||
<Line>flaks ~deck dreary 7stud dizzy menial phone taps of</Line>
|
||||
<Line>flanks:: .scary deeps] 3primp mainly[ 5areas 7hornet cabals</Line>
|
||||
<Line>testes 4inure cheat pecan jest thaws brinks }fill abhor</Line>
|
||||
<Line>'superb tares 7densest 7feign fiats1 ~hardens ::equines bums</Line>
|
||||
<Line>pillbox= doused \pinch sonata pisses supine0 !woolier smears</Line>
|
||||
<Line>petted (toiler wag jackets forgive peeves, pore enthuse</Line>
|
||||
<Line>localed hawser begin excuse cancans celled \runner drags</Line>
|
||||
<Line>lustily$ rottens carboys *livable japes= -framer maw</Line>
|
||||
<Line>link heal touched ingrain attest romaine' gaging bobcat</Line>
|
||||
<Line>oodles nicks tackles throne% z (bosser ashram gluts ringing</Line>
|
||||
<Line>hideous] *bowls nutrias }hid thinly% radiate- bung( balk</Line>
|
||||
<Line>example ::carpet layout 3sonny %read plot contact! fairway</Line>
|
||||
<Line>-hardtop bops+ gruels surety !oddity 4trothed *partner grit</Line>
|
||||
<Line>sulky} -demise gollies =afoot japan jollied elope reputed</Line>
|
||||
<Line>comings lockets jape 7chisel jinxed( vagues \balder giving</Line>
|
||||
<Line>wend groovy airways jinn* preppie ;sicks yogis( needs</Line>
|
||||
<Line>jollies ;wizard [however hiss] }lions bones hollow- shaves</Line>
|
||||
<Line>bun! 7gathers smooth' (eddy arches kopeks casket poured</Line>
|
||||
<Line>dolling$ kidneys4 4bredes smile' infests discos$ sleazy</Line>
|
||||
<Line>}revoked 1barred comic+ 1mutable ]jesters suiting[ rations</Line>
|
||||
<Line>\hotter mu server. cartel salads 7teethed drills reused</Line>
|
||||
<Line>lows hahs scenes satchel moonlit desires %bows inseams chops</Line>
|
||||
<Line>chagrin; brutish{ [hurried cobbler thorn wagoner endowed</Line>
|
||||
<Line>fount fuzes cricks pans studded5 recall woofers cupped</Line>
|
||||
<Line>rack5 clerk chain =bronzes miller *masking 6maids tariffs</Line>
|
||||
<Line>::rumpled sputum blacken (kneecap phonier= midland6 cupolas</Line>
|
||||
<Line>pitches~ avoided 2niggle hitter{ totemic- nobody answers</Line>
|
||||
<Line>meeter9 scarred$ inmates6 /lessees rhymed miser[ tabooed</Line>
|
||||
</Level>
|
||||
<Level>
|
||||
<NewCharacters><>?#@^"|</NewCharacters>
|
||||
<Line>fucker2 whams7 5drum 0wipes rewire ~outwit wander peer</Line>
|
||||
<Line>laced wusses vivas his 7pluses mushes frugal goo bed</Line>
|
||||
<Line>legs shorts 1poor threat fondly oil @basks skeet pimps</Line>
|
||||
<Line>hooped 9brunt throe~ fir @fiver topped:: ages ]scald loaned</Line>
|
||||
<Line>parry feint8 hoed:: hutch hominy mering4 {hydra fiver</Line>
|
||||
<Line>globes >cusps makes jib ,uproar stout" sprig$ spare jives</Line>
|
||||
<Line>grave gybe1 sheiks chile facets( 0ponder )amok enact</Line>
|
||||
<Line>}diva pulsar *finger !laurel noted )pared jilt barren undue</Line>
|
||||
<Line>odd aortae* sang +rest site .singe wile~ musky goof theed</Line>
|
||||
<Line>ground razz <bevels brogue cadre moral) sushi castle/ humbly</Line>
|
||||
<Line>|saber linage 'killed piking baning mufti^ rude mambos</Line>
|
||||
<Line>robing <joked floor ]coccis stoats oaths) pupil pairs</Line>
|
||||
<Line>tunnel 'sinker latent 6bursar 5clones hulks pith auk</Line>
|
||||
<Line>size ?griefs pangs% murk chili cox tore tinges decode( foxes</Line>
|
||||
<Line>0bland fetter taunt{ /ruins wisp= teat waive jinni. faced</Line>
|
||||
<Line>undoes 0rears belie %la drawn. -nodule slime:: eking monks</Line>
|
||||
<Line>;arctic 7slake =bumped ruler8 cabbie .angled 7rattan swipe</Line>
|
||||
<Line>liens eels' 8prying pylon <vanes .flap "funded nubs[ walls</Line>
|
||||
<Line>shouts =poised evokes pied dub yacht:: hep larder{ yessed</Line>
|
||||
<Line>churl payer prank scoff exist2 sulky wines +lid mazes. specs</Line>
|
||||
<Line>under tramp posit drew larva0 4supply skit =common curs</Line>
|
||||
<Line>"tumor flared jurist( pop milky 1glen whewed 3dots imbeds</Line>
|
||||
<Line>rouse whirrs cohort pupil }cachet twill %heresy bogus</Line>
|
||||
<Line>fa moose% bored{ seeks inside} =chinos 1lead slued| shekel</Line>
|
||||
<Line>]smack $mashes ]tests harem layoff> bully ochre sexing</Line>
|
||||
<Line>saucily4 anklet chiles >relapse crack+ sises( 5guyed crumby</Line>
|
||||
<Line>7lees corpses neuron jets [puberty 9wighted baneful daunt</Line>
|
||||
<Line>knack toggled5 bicker muse, caped momma. freeway* preen</Line>
|
||||
<Line>seating, slink. lotus+ %quoits styes7 gel tone mists vagrant</Line>
|
||||
<Line>pompous3 ranches .wimples /hived freak garbing fluent</Line>
|
||||
<Line>mastoid 'recta salvo risky mining rife excites pacific" bulk</Line>
|
||||
<Line>"maestro pundits- wittier. rudder= orbited/ tramped sprig</Line>
|
||||
<Line>rents pains vowel +gill peeking moos| bottoms dubious isobars</Line>
|
||||
<Line>2outrank croaked gabbed circle resume< velvety- taring</Line>
|
||||
<Line>(deputy nasal raffles6 loudest ooze* %chic waspish+ tusks</Line>
|
||||
<Line>~cokes "gimme nobly dulled* #durably serener forums all</Line>
|
||||
<Line>leavens 7settee davit guzzles mud< =travels 'gawky creams</Line>
|
||||
<Line>>imbeds snip bulky gee 4draftee cause meteors6 scone deep</Line>
|
||||
<Line>"waxen 1retypes already- gimlet3 smart {upswing exempts</Line>
|
||||
<Line>fusible 5wiled 8blessed behold manhunt bloomer pastes</Line>
|
||||
<Line>rinsed" +terms gosling> 5sandbox 'stirrer ruddied pileup</Line>
|
||||
<Line>hoot tripod blown{ imagery3 dignity] quaking fez9 slain</Line>
|
||||
<Line>ivies fazed softens# anise mantis maps carver! gear lancers</Line>
|
||||
<Line>imply lids ~gulling phoenix torques crocked coughs- busies</Line>
|
||||
<Line>.finds pet 7fright pokeys layaway| making$ 6weirdos rawest</Line>
|
||||
<Line>1comedic #intuit tumors toddle ,lighter =found paced</Line>
|
||||
<Line>spider [yawing |stamp trusses 5zipper stable excite| maroon</Line>
|
||||
<Line>2kopecks reams pocks lineup carmine wick {sices stank</Line>
|
||||
<Line>|biggie echoes elides pupils; !timbres laundry! outlook</Line>
|
||||
<Line>[grubby wittier punster/ cups pulpit( studio turnkey busses</Line>
|
||||
</Level>
|
||||
<Level>
|
||||
<NewCharacters>Everything</NewCharacters>
|
||||
<Line>bloat Avery cliffs heir's5 whacks onset( }lusty shod</Line>
|
||||
<Line>gorier oboes Lyra's lonely amok/ cs's[ Niobe @odors timid</Line>
|
||||
<Line>matzo Tiber odium koalas body's 1evenly dotes. musing- Han</Line>
|
||||
<Line>Walden% smites Easter- tango <bus's seeded %tinkle savior</Line>
|
||||
<Line>spies emery mutual5 Allan, _hides garble= muffle tackle</Line>
|
||||
<Line>hasps 7Allie massed twang 3racism dress% Hymen Gall</Line>
|
||||
<Line>York deuces ::Eu's Abe's0 Lie hare shunts dyer's half</Line>
|
||||
<Line>shanty3 spicy Zelma entrap .poke /propel loathe| flail</Line>
|
||||
<Line>snob- ant bike/ baton 1roamed ::nickel hazing [toked vs</Line>
|
||||
<Line>Katie )Billie piling. duff lied6 bowel strews sleigh= Andean</Line>
|
||||
<Line>outset root's -Olive 4smoke pool's, shrink Brant jailor</Line>
|
||||
<Line>luaus 2clam 1vend truism befoul[ duct doted known Mouthe</Line>
|
||||
<Line>chic_ %Roxy's @Gd autism< Ladoga 8Willis slunk9 poorer</Line>
|
||||
<Line>Lean] bone's( wroth- nobly' rumple cord's county shock</Line>
|
||||
<Line>eves} =rim (spud's manors+ tramp 2Nieves \fained Josue</Line>
|
||||
<Line>pave' 7sizing feints6 anode socket' 3ruler Aisha1 Yale</Line>
|
||||
<Line>Left 4Tuscon lops= semen weed $Cody's humbly, larynx maizes</Line>
|
||||
<Line>gooey Tagus spoof Nita mailed5 evils_ woo Nile's deigns</Line>
|
||||
<Line>tumble- racers claw >doubt bowl's5 5Sepoy bulb's darn</Line>
|
||||
<Line>lobes Sister+ Lee hawker7 gulag Henson Efren )Gloria grow</Line>
|
||||
<Line>pose gopher. |twang vital. smash deeply blow6 ,Slavs Sung's</Line>
|
||||
<Line>cilia |cons wives Baez 6cowed ragtag =Eula spars Prut's</Line>
|
||||
<Line>sot. {ramps )madras remit $deploy tonal brews 3avians bleach</Line>
|
||||
<Line>F's 9geode kin's perm mole coops Olen ,Gary's lo0 ticks</Line>
|
||||
<Line>vial yolks riots yeti's7 <Sm Gina8 ::world Klimt Subaru</Line>
|
||||
<Line>tattoos burnout/ rid [pilots wingtip Ci. fascism whitest</Line>
|
||||
<Line>wiretap combing rupee grottos8 razing9 Boston\ Nehru's</Line>
|
||||
<Line>bellow propane jetsam fray's sped/ pans flyover reissue</Line>
|
||||
<Line>cycle mutter 'broncos laud sphinx cabal's2 tardier Julies</Line>
|
||||
<Line>sanders Lowe's_ Grimm Kitty pointer pawls ::dowries Huerta</Line>
|
||||
<Line>sting Poles traffic layaway )Rocha's Horatio [vagued scorn's</Line>
|
||||
<Line>fang's riles7 bolero arbiter torched6 ]hamster runt's</Line>
|
||||
<Line>phylae0 sills gazers flambes tanager 6wholes ,Holbein fib</Line>
|
||||
<Line>juice's Freddie< 0dosages cruised necking ::Aron lens</Line>
|
||||
<Line>ampere+ graved torched 5Urdu {unitary Dilbert chill's</Line>
|
||||
<Line>Kinko's] }wieners celli6 _will Helga morgue scores color's</Line>
|
||||
<Line>Burt drover pealed{ blast's- galoshe{ Grafton gasket Niobe</Line>
|
||||
<Line>Jilin Occam wills9 Saran's {hats 5minding infuses foyer's</Line>
|
||||
<Line>::boiled bedtime> carboy {bossy emperor$ unstop Tbilisi</Line>
|
||||
<Line>figures %Owens men 2sops anyone, epic's( dew liar- undo</Line>
|
||||
<Line>%alertly 4goddamn vets 2powwows upset <Terkel Stan's:: gazing</Line>
|
||||
<Line>papery _expects disbars 4malaise donated <balsas cooker</Line>
|
||||
<Line>shamans ]plume Mimosa excepts Zukor's[ ask Cajun penal</Line>
|
||||
<Line>veals fines -loosely ::seven }pummels bills 6majorly chant</Line>
|
||||
<Line>4buckram machine =regions Karin's spikier %autoing planing</Line>
|
||||
<Line>friends facile@ Wotan{ impurer+ @counter narcs@ cattail</Line>
|
||||
<Line>)Jayne \speck genres akin:: hello> 6cocoa's wraiths) loci's</Line>
|
||||
<Line>Muir [dunging Mani\ Cairo's Rita's stages =messy Osbert</Line>
|
||||
<Line>-Douglas Kharkov whiner- slue threw( tempera, axises evading</Line>
|
||||
<Line>brood's coursed 5lea's idea )McKee /horsed Nate pivotal</Line>
|
||||
<Line>milker +Roy's weeded weird vet Elbe's1 3blown 7calves Rome's</Line>
|
||||
<Line>four% [bade razzes vial 6Lawson chalk7 _wholly fluid jostle</Line>
|
||||
<Line>-rind's Dylan agree Kitty bootee2 Ty toasts %mussed ninety</Line>
|
||||
<Line>creep 2final bassi omen's/ |girdle diary9 Shinto Selma</Line>
|
||||
<Line>shiver gait huge} fends genie hump's raze It 3masks vinyls</Line>
|
||||
<Line>arrows turds Hess's( 6muzzle cocky8 chose brandy easies</Line>
|
||||
<Line>laces fuzzes Ike godly@ civic \ebb 4maven herb- notary snare</Line>
|
||||
<Line>Dave junior/ 2furrow trap's +Dick's prior) Juan's pocked</Line>
|
||||
<Line>goofy 'racily élan clever clangs gunny Sean beat lad</Line>
|
||||
<Line>.data's curb\ 7bitmap Haney Lu's] glance arbors Olav's</Line>
|
||||
<Line>|Amalia Millay_ pedals1 9elite gulags husks umbel lithe</Line>
|
||||
<Line>paunch Dorcas oblige% riser) 3moist ,Annam }Oprah bunny</Line>
|
||||
<Line>8Elroy yaws[ pouts| /Tuscan (waging brigs lacks. coax</Line>
|
||||
<Line>foetid\ Trina Eula sued6 slew@ <shahs =Myers echo Euclid</Line>
|
||||
<Line>Dix's) Taiwan batty/ nuke's} $ascots -Keven Kurile Nice</Line>
|
||||
<Line>Sal's[ abject LyX verify) Louis backup:: ruses Leakey yelped</Line>
|
||||
<Line>1yell widest tarpon butte tire Ira's 1sadism pols bay</Line>
|
||||
<Line>bodkin jinnis -dills warden% thud 1wont's jerkin calyx</Line>
|
||||
<Line>{panty 6Marcel larvae weer 0pi /gadget leeks flan[ jest's</Line>
|
||||
<Line>0lynch refuse) Medea( Paul sword6 6rafter divert Aspell</Line>
|
||||
<Line>surtax( Tubman )damped )solo's 8seduce tuxedo wigged0 risks</Line>
|
||||
<Line>7Todd $living lash's eras siesta3 Jeeps kopek> Eva Nb's</Line>
|
||||
<Line>bummed lewdly lamer }hared -Bettye oats Helios |floras weirs</Line>
|
||||
<Line>3Jean facing$ pod Rob 5Siva's Kim's% /slump defers pubbed</Line>
|
||||
<Line>[Nair's Creon_ data's\ orgasm bank's hats realty reef's</Line>
|
||||
<Line>bib's fast }rewires probe, Elsie sitar's] Ypres's infer</Line>
|
||||
<Line>bedded hep culture beacons [stabler 2sanely /Samar's rhea</Line>
|
||||
<Line>seceded removal3 +Malacca eery coolers Miami [Co's nosegay</Line>
|
||||
<Line>zoom Berlin desires_ glacier Betty4 =alright wrist's donors</Line>
|
||||
<Line>8costar poesies:: brimful snowy Brandi 3rounder cult's</Line>
|
||||
<Line>unlike+ heaven Marc's$ ratify5 tearful@ Frankie4 audit</Line>
|
||||
<Line>adviser1 rose's buildup, 9legated spruces primes, Brno</Line>
|
||||
<Line>'N's Wonder} Crystal befalls Ziploc5 elixir amours wrinkle</Line>
|
||||
<Line>2decide gluier snubs Lille's Clare's -wasn't =sincere resend</Line>
|
||||
<Line>Leigh's Brokaw suede- ]pillion 0yoga garages soon supper</Line>
|
||||
<Line>iamb's drooled skirt's' (icing Carey's pinions hotshot</Line>
|
||||
<Line>senders] Fatima fury's Lear's blurry squad carbide/ Erato's</Line>
|
||||
<Line>Ricky Demeter{ tasted5 Jenkins( Lloyd- knitted boldly</Line>
|
||||
<Line>%Arctic passels@ 7expends wives's morgues] dimmers postman</Line>
|
||||
<Line>Murat4 absorb:: Wyeth lance5 fleeced gushed corded triage</Line>
|
||||
<Line>Tarazed 2hernias )hula caroms rubber 3pothook Pl plot's</Line>
|
||||
<Line>dramas) Alps drools Balkan' gos| Lysenko- <pixel spouse</Line>
|
||||
<Line>allayed+ champed rails 0Jimenez dived helps markups+ denims</Line>
|
||||
<Line>6monitor basemen [sledges kabob Tutsi> Ben's <encored Knapp</Line>
|
||||
<Line>spool= absinth {hoard Pooh's hijacks+ collude Z's Midwest</Line>
|
||||
<Line>shocker bright/ mender1 prep:: paces\ lily braids< ridge</Line>
|
||||
<Line>payable Paris's Tojo's jailers booming 'mileage trap's</Line>
|
||||
<Line>Saab's swarms lip's/ okaying8 Ariz's aerials <plume Crimean</Line>
|
||||
<Line>_rum's %enrols hanging hospice< 4urging Gipsy 1roaring bias</Line>
|
||||
<Line>salvo8 schemes 2mien's briny sprites +Park refuges galling</Line>
|
||||
</Level>
|
||||
<Level>
|
||||
<NewCharacters>PERL: {}()[]<>\#</NewCharacters>
|
||||
<Line>if ($line=~/^[^ ]+\s+\(([^)]+)\)\s/) {</Line>
|
||||
<Line>$this->conffiles([map { chomp; $_ } $this->runpipe($zero, "LANG=C rpm -qcp $file")]);</Line>
|
||||
<Line>$this->conffiles([]);</Line>
|
||||
<Line>$this->filelist([map { chomp; $_ } $this->runpipe($zero, "LANG=C rpm -qpl $file")]);</Line>
|
||||
<Line>$this->filelist([]);</Line>
|
||||
<Line>arch group slpkgversion}];</Line>
|
||||
<Line>Label => [],</Line>
|
||||
<Line>Comment => [],</Line>
|
||||
<Line>Attachment => [],</Line>
|
||||
<Line>DependsOn => [],</Line>
|
||||
<Line>Precedes => [],</Line>
|
||||
<Line>my $self = bless [], $class;</Line>
|
||||
<Line>@{ $var->[$zero] || [] }</Line>
|
||||
<Line>@{ defined $var->[$zero] ? $var->[$zero] : [] }</Line>
|
||||
<Line>$fmt =~ s/([^\s\[]*)\[( [^\]]* )\]/\x$n\xt$m\xe/xgo;</Line>
|
||||
<Line>Convert::ASNI::_dec_integer({},[],{},$tmp,$_[$zero],$pos,$len);</Line>
|
||||
<Line>Convert::ASNI::_dec_boolean({},[],{},$tmp,$_[$zero],$pos,$len);</Line>
|
||||
<Line>Convert::ASNI::_dec_string({},[],{},$tmp,$_[$zero],$pos,$len);</Line>
|
||||
<Line>$_[$one]->[cLOOP] && ($_[$three]=[]), #loop</Line>
|
||||
<Line>@{$yyval = []}[cTYPE,cCHILD] = ('COMPONENTS', $yyvs[$yyvsp-$e]);</Line>
|
||||
<Line>@{$yyval = []}[cTYPE,cCHILD,cLOOP,cOPT] = ($yyvs[$yyvsp-$d], [$yyvs[$yyvsp-$h]], $r, $yyvs[$yyvsp-$l]);</Line>
|
||||
<Line>@{$yyval = []}[cTYPE,cCHILD] = ('SEQUENCE', $yyvs[$yyvsp-$c]);</Line>
|
||||
<Line>@{$yyval = []}[cTYPE,cCHILD] = ('SET', $yyvs[$yyvsp-$b]);</Line>
|
||||
<Line>@{$yyval = []}[cTYPE,cCHILD] = ('CHOICE', $yyvs[$yyvsp-$a]);</Line>
|
||||
<Line>@{$yyval = []}[cTYPE] = ('ENUM');</Line>
|
||||
<Line>{ @{$yyval = []}[cTYPE] = $yyvs[$yyvsp-$a];</Line>
|
||||
<Line>{ @{$yyval = []}[cTYPE] = $yyvs[$yyvsp-$b];</Line>
|
||||
<Line>{ @{$yyval = []}[cTYPE] = $yyvs[$yyvsp-$c];</Line>
|
||||
<Line>@{$yyval = []}[cTYPE,cCHILD,cDEFINE] = ('ANY',undef,$yyvs[$yyvsp-$z]);</Line>
|
||||
<Line>{ @{$yyval = []}[cTYPE] = $yyvs[$yyvsp-$d];</Line>
|
||||
<Line>{ $yyval = [];</Line>
|
||||
<Line>([,{}]|::=)</Line>
|
||||
<Line>io => [qw(asn_recv asn_send asn_read asn_write asn_get asn_ready)],</Line>
|
||||
<Line>debug => [qw(asn_dump asn_hexdump)],</Line>
|
||||
<Line>ASN_PRIMITIVE ASN_CONSTRUCTOR ASN_LONG_LEN ASN_EXTENSION_ID ASN_BIT)],</Line>
|
||||
<Line>tag => [qw(asn_tag asn_decode_tag asn_decode_tag asn_encode_tag asn_decode_length asn_encode_length)]</Line>
|
||||
<Line>eval { _encode($self->{options}, $self->{script}, $stash, [], $buf) }</Line>
|
||||
<Line>my $me = ref($pkg) ? $pkg : bless [];</Line>
|
||||
<Line>my $me = ref($pkg) ? $pkg : bless [], $pkg;</Line>
|
||||
<Line>bless [], $type;</Line>
|
||||
<Line>$$self{'data'}{'sections'}{'events'} = [];</Line>
|
||||
<Line>$$self{'data'}{'sections'}{'holidays'} = [];</Line>
|
||||
<Line>$$self{'data'}{'sections'}{$sect} = [];</Line>
|
||||
<Line>'date' => [], # the parsed date split</Line>
|
||||
<Line>'offset' => [], # The offset from GMT</Line>
|
||||
<Line>'gmt' => [], # the date converted to GMT</Line>
|
||||
<Line>'loc' => [], # the date converted to local timezone</Line>
|
||||
<Line>$$dmb{'data'}{'holidays'}{'hols'} = [];</Line>
|
||||
<Line>return [];</Line>
|
||||
</Level>
|
||||
<Level>
|
||||
<NewCharacters>PERL: {}()[]<>\# + 0123456789</NewCharacters>
|
||||
<Line>if ($path !~ m|^/[^;\(\)]+|) {</Line>
|
||||
<Line>if ($line =~ m/^tcp:\s+\[(\S+)\]\s+\S+\s+(\S+)\s*$/) {</Line>
|
||||
<Line>my $storage_list = [];</Line>
|
||||
<Line>my $cmd = ['/sbin/vgchange', '-aln', $scfg->{vgname}];</Line>
|
||||
<Line>my $slist = [];</Line>
|
||||
<Line>my $devlist = [];</Line>
|
||||
<Line>while ($tmpl =~ m/([^{]+)?({([^}]+)})?/g) {</Line>
|
||||
<Line>#'et' => [], # Ethopia or Estonia ??</Line>
|
||||
<Line>#'th' => [],</Line>
|
||||
<Line>my $kvmkeymaparray = [];</Line>
|
||||
<Line>return $str ? [ Text::ParseWords::shellwords($str) ] : [];</Line>
|
||||
<Line>my $lines = [];</Line>
|
||||
<Line>my $cmd = ['lvremove', '-f', $di->{snapdev}];</Line>
|
||||
<Line>return [];</Line>
|
||||
<Line>my $res = [];</Line>
|
||||
<Line>$skiplist = [] if !$skiplist;</Line>
|
||||
<Line>my $bklist = [];</Line>
|
||||
<Line>my $tasklist = [];</Line>
|
||||
<Line>$task->{disks} = [];</Line>
|
||||
<Line>my $vollist = [];</Line>
|
||||
<Line>=item B<shell_quote> [I<string>]...</Line>
|
||||
<Line>=item B<shell_quote_best_effort> [I<string>]...</Line>
|
||||
<Line>=item B<shell_comment_quote> [I<string>]</Line>
|
||||
<Line>RFC2732 => qr/[^A-Za-z0-9\-_.!~*'()]/,</Line>
|
||||
<Line>return $1 if $_[0] =~ s,^\\\\([^\\]+),,; # UNC</Line>
|
||||
<Line>return $1 if $_[0] =~ s,^\\\\([^\\]+),,; # UNC</Line>
|
||||
<Line>return $path =~ m,^[a-zA-Z]:, || $path =~ m,^[/\\],;</Line>
|
||||
<Line># gopher://<host>[:<port>]/<gopher-path></Line>
|
||||
<Line>'us' => [qw(www.ACME.gov www.ACME.mil)],</Line>
|
||||
<Line>'gb' => [qw(www.ACME.co.uk www.ACME.org.uk www.ACME.ac.uk)],</Line>
|
||||
<Line>'au' => [qw(www.ACME.com.au www.ACME.org.au www.ACME.edu.au)],</Line>
|
||||
<Line>'il' => [qw(www.ACME.co.il www.ACME.org.il www.ACME.net.il)],</Line>
|
||||
<Line>m,^[a-zA-Z]:[/\\],) # dosish file name</Line>
|
||||
<Line>$reserved = q(;/?:@&=+$,[]);</Line>
|
||||
<Line>$u->query_param($key, []);</Line>
|
||||
<Line>$key =~ s/([;\/?:@&=+,\$\[\]%])/ URI::Escape::escape_char($1)/eg;</Line>
|
||||
<Line>$val =~ s/([;\/?:@&=+,\$\[\]%])/ URI::Escape::escape_char($1)/eg;</Line>
|
||||
<Line>for (@copy) { s/([;\/?:@&=+,\$\[\]%])/ URI::Escape::escape_char($1)/eg; }</Line>
|
||||
<Line>$old =~ s{^\[(.*)\]$}{$1}; # remove brackets around IPv6 (RFC 3986 3.2.2)</Line>
|
||||
<Line>bless [URI::file->new_abs(shift)], $class;</Line>
|
||||
<Line>return eval { $thingy->can( 'as_string' ) } ? $thingy->as_string([]) : $thingy;</Line>
|
||||
<Line>my $self = bless [], $class;</Line>
|
||||
<Line>return [] if $string eq '[]';</Line>
|
||||
<Line>$hash->{$key} = [];</Line>
|
||||
<Line>$lines[-1] .= ' []';</Line>
|
||||
<Line>$string =~ s/([\x00-\x1f])/\\$UNPRINTABLE[ord($1)]/g;</Line>
|
||||
<Line>$line .= ' []';</Line>
|
||||
<Line>$line .= ' []';</Line>
|
||||
<Line>and mappings, support for the constructs [] (empty sequence) and {}</Line>
|
||||
<Line>--- []</Line>
|
||||
</Level>
|
||||
</Levels>
|
||||
</KTouchLecture>
|
||||
|
|
@ -0,0 +1,294 @@
|
|||
<KTouchKeyboard>
|
||||
<Title>English Workman with Dvorak-for-Programmers</Title>
|
||||
<Comment>English Workman WDP Keyboard Layout</Comment>
|
||||
<Language>en (English)</Language>
|
||||
<Keys>
|
||||
<Key Width="80" X="180" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="65" Position="TopLeft">A</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="280" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="83" Position="TopLeft">S</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="380" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="72" Position="TopLeft">H</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="480" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="84" Position="TopLeft">T</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="780" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="78" Position="TopLeft">N</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="880" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="69" Position="TopLeft">E</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="980" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="79" Position="TopLeft">O</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1080" Y="200" Height="80" Type="FINGER">
|
||||
<Char Unicode="73" Position="TopLeft">I</Char>
|
||||
</Key>
|
||||
<Key Width="130" X="0" Y="100" Height="80" Type="TAB"/>
|
||||
<Key Width="100" X="1380" Y="100" Height="180" Type="ENTER"/>
|
||||
<Key Width="250" X="1230" Y="300" Height="80" Type="SHIFT"/>
|
||||
<Key Width="130" X="1200" KeyText="AltGr" Y="400" Height="80" Type="OTHER"/>
|
||||
<Key Width="130" X="1350" KeyText="Ctrl" Y="400" Height="80" Type="OTHER"/>
|
||||
<Key Width="130" X="150" KeyText="Alt" Y="400" Height="80" Type="OTHER"/>
|
||||
<Key Width="130" X="0" KeyText="Ctrl" Y="400" Height="80" Type="OTHER"/>
|
||||
<Key Width="880" X="300" Y="400" Height="80" Type="SPACE"/>
|
||||
<Key Width="110" X="0" Y="300" Height="80" Type="SHIFT"/>
|
||||
<Key Width="160" X="0" Y="200" Height="80" Type="CAPSLOCK"/>
|
||||
<Key Width="160" X="1310" Y="0" Height="80" Type="BACKSPACE"/>
|
||||
<Key Width="80" X="0" Y="0" Height="80" FingerKeyIndex="0" Type="NORMAL">
|
||||
<Char Unicode="96" Position="TopLeft">`</Char>
|
||||
<Char Unicode="126" Position="BottomLeft">~</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="100" Y="0" Height="80" FingerKeyIndex="0" Type="NORMAL">
|
||||
<Char Unicode="38" Position="TopLeft">&</Char>
|
||||
<Char Unicode="59" Position="BottomLeft">;</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="200" Y="0" Height="80" FingerKeyIndex="1" Type="NORMAL">
|
||||
<Char Unicode="55" Position="TopLeft">7</Char>
|
||||
<Char Unicode="91" Position="BottomLeft">[</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="300" Y="0" Height="80" FingerKeyIndex="2" Type="NORMAL">
|
||||
<Char Unicode="53" Position="TopLeft">5</Char>
|
||||
<Char Unicode="123" Position="BottomLeft">{</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="400" Y="0" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="51" Position="TopLeft">3</Char>
|
||||
<Char Unicode="125" Position="BottomLeft">}</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="500" Y="0" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="49" Position="TopLeft">1</Char>
|
||||
<Char Unicode="40" Position="BottomLeft">(</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="600" Y="0" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="57" Position="TopLeft">9</Char>
|
||||
<Char Unicode="61" Position="BottomLeft">=</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="700" Y="0" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="48" Position="TopLeft">0</Char>
|
||||
<Char Unicode="42" Position="BottomLeft">*</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="800" Y="0" Height="80" FingerKeyIndex="5" Type="NORMAL">
|
||||
<Char Unicode="50" Position="TopLeft">2</Char>
|
||||
<Char Unicode="41" Position="BottomLeft">)</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="900" Y="0" Height="80" FingerKeyIndex="6" Type="NORMAL">
|
||||
<Char Unicode="52" Position="TopLeft">4</Char>
|
||||
<Char Unicode="43" Position="BottomLeft">+</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1000" Y="0" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="54" Position="TopLeft">6</Char>
|
||||
<Char Unicode="93" Position="BottomLeft">]</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1100" Y="0" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="56" Position="TopLeft">8</Char>
|
||||
<Char Unicode="37" Position="BottomLeft">%</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1200" Y="0" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="35" Position="TopLeft">#</Char>
|
||||
<Char Unicode="33" Position="BottomLeft">!</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="150" Y="100" Height="80" FingerKeyIndex="0" Type="NORMAL">
|
||||
<Char Unicode="81" Position="TopLeft">Q</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="250" Y="100" Height="80" FingerKeyIndex="1" Type="NORMAL">
|
||||
<Char Unicode="68" Position="TopLeft">D</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="350" Y="100" Height="80" FingerKeyIndex="2" Type="NORMAL">
|
||||
<Char Unicode="82" Position="TopLeft">R</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="450" Y="100" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="87" Position="TopLeft">W</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="550" Y="100" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="66" Position="TopLeft">B</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="650" Y="100" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="74" Position="TopLeft">J</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="750" Y="100" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="70" Position="TopLeft">F</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="850" Y="100" Height="80" FingerKeyIndex="5" Type="NORMAL">
|
||||
<Char Unicode="85" Position="TopLeft">U</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="950" Y="100" Height="80" FingerKeyIndex="6" Type="NORMAL">
|
||||
<Char Unicode="80" Position="TopLeft">P</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1050" Y="100" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="64" Position="TopLeft">@</Char>
|
||||
<Char Unicode="36" Position="BottomLeft">$</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1150" Y="100" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="94" Position="TopLeft">^</Char>
|
||||
<Char Unicode="58" Position="BottomLeft">:</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1250" Y="100" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="34" Position="TopLeft">"</Char>
|
||||
<Char Unicode="39" Position="BottomLeft">'</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="580" Y="200" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="71" Position="TopLeft">G</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="680" Y="200" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="89" Position="TopLeft">Y</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1180" Y="200" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="95" Position="TopLeft">_</Char>
|
||||
<Char Unicode="45" Position="BottomLeft">-</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1280" Y="200" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="124" Position="TopLeft">|</Char>
|
||||
<Char Unicode="92" Position="BottomLeft">\</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="130" Y="300" Height="80" FingerKeyIndex="0" Type="NORMAL">
|
||||
<Char Unicode="60" Position="TopLeft"><</Char>
|
||||
<Char Unicode="62" Position="BottomLeft">></Char>
|
||||
</Key>
|
||||
<Key Width="80" X="230" Y="300" Height="80" FingerKeyIndex="0" Type="NORMAL">
|
||||
<Char Unicode="90" Position="TopLeft">Z</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="330" Y="300" Height="80" FingerKeyIndex="1" Type="NORMAL">
|
||||
<Char Unicode="88" Position="TopLeft">X</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="430" Y="300" Height="80" FingerKeyIndex="2" Type="NORMAL">
|
||||
<Char Unicode="77" Position="TopLeft">M</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="530" Y="300" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="67" Position="TopLeft">C</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="630" Y="300" Height="80" FingerKeyIndex="3" Type="NORMAL">
|
||||
<Char Unicode="86" Position="TopLeft">V</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="730" Y="300" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="75" Position="TopLeft">K</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="830" Y="300" Height="80" FingerKeyIndex="4" Type="NORMAL">
|
||||
<Char Unicode="76" Position="TopLeft">L</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="930" Y="300" Height="80" FingerKeyIndex="5" Type="NORMAL">
|
||||
<Char Unicode="60" Position="TopLeft"><</Char>
|
||||
<Char Unicode="44" Position="BottomLeft">,</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1030" Y="300" Height="80" FingerKeyIndex="6" Type="NORMAL">
|
||||
<Char Unicode="62" Position="TopLeft">></Char>
|
||||
<Char Unicode="46" Position="BottomLeft">.</Char>
|
||||
</Key>
|
||||
<Key Width="80" X="1130" Y="300" Height="80" FingerKeyIndex="7" Type="NORMAL">
|
||||
<Char Unicode="63" Position="TopLeft">?</Char>
|
||||
<Char Unicode="47" Position="BottomLeft">/</Char>
|
||||
</Key>
|
||||
</Keys>
|
||||
<Connections>
|
||||
<KeyConnector TargetKeyIndex="0" KeyUnicode="97"/>
|
||||
<KeyConnector TargetKeyIndex="0" KeyUnicode="65" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="1" KeyUnicode="115"/>
|
||||
<KeyConnector TargetKeyIndex="1" KeyUnicode="83" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="2" KeyUnicode="104"/>
|
||||
<KeyConnector TargetKeyIndex="2" KeyUnicode="72" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="3" KeyUnicode="116"/>
|
||||
<KeyConnector TargetKeyIndex="3" KeyUnicode="84" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="4" KeyUnicode="110" />
|
||||
<KeyConnector TargetKeyIndex="4" KeyUnicode="78" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="5" KeyUnicode="101"/>
|
||||
<KeyConnector TargetKeyIndex="5" KeyUnicode="69" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="6" KeyUnicode="111"/>
|
||||
<KeyConnector TargetKeyIndex="6" KeyUnicode="79" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="7" KeyUnicode="105"/>
|
||||
<KeyConnector TargetKeyIndex="7" KeyUnicode="73" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="8" KeyUnicode="260"/>
|
||||
<KeyConnector TargetKeyIndex="9" KeyUnicode="13" />
|
||||
<KeyConnector TargetKeyIndex="10" KeyUnicode="257"/>
|
||||
<KeyConnector TargetKeyIndex="11" KeyUnicode="264"/>
|
||||
<KeyConnector TargetKeyIndex="12" KeyUnicode="265"/>
|
||||
<KeyConnector TargetKeyIndex="13" KeyUnicode="263"/>
|
||||
<KeyConnector TargetKeyIndex="14" KeyUnicode="262"/>
|
||||
<KeyConnector TargetKeyIndex="15" KeyUnicode="32" />
|
||||
<KeyConnector TargetKeyIndex="16" KeyUnicode="258"/>
|
||||
<KeyConnector TargetKeyIndex="17" KeyUnicode="259"/>
|
||||
<KeyConnector TargetKeyIndex="18" KeyUnicode="8" />
|
||||
<KeyConnector TargetKeyIndex="19" KeyUnicode="126"/>
|
||||
<KeyConnector TargetKeyIndex="19" KeyUnicode="96" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="20" KeyUnicode="59" />
|
||||
<KeyConnector TargetKeyIndex="20" KeyUnicode="38" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="21" KeyUnicode="91" />
|
||||
<KeyConnector TargetKeyIndex="21" KeyUnicode="55" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="22" KeyUnicode="123"/>
|
||||
<KeyConnector TargetKeyIndex="22" KeyUnicode="53" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="23" KeyUnicode="125"/>
|
||||
<KeyConnector TargetKeyIndex="23" KeyUnicode="51" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="24" KeyUnicode="40" />
|
||||
<KeyConnector TargetKeyIndex="24" KeyUnicode="49" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="25" KeyUnicode="61" />
|
||||
<KeyConnector TargetKeyIndex="25" KeyUnicode="57" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="26" KeyUnicode="42" />
|
||||
<KeyConnector TargetKeyIndex="26" KeyUnicode="48" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="27" KeyUnicode="41" />
|
||||
<KeyConnector TargetKeyIndex="27" KeyUnicode="50" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="28" KeyUnicode="43" />
|
||||
<KeyConnector TargetKeyIndex="28" KeyUnicode="52" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="29" KeyUnicode="93" />
|
||||
<KeyConnector TargetKeyIndex="29" KeyUnicode="54" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="30" KeyUnicode="37" />
|
||||
<KeyConnector TargetKeyIndex="30" KeyUnicode="56" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="31" KeyUnicode="35" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="31" KeyUnicode="33" />
|
||||
<KeyConnector TargetKeyIndex="32" KeyUnicode="113"/>
|
||||
<KeyConnector TargetKeyIndex="32" KeyUnicode="81" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="33" KeyUnicode="100"/>
|
||||
<KeyConnector TargetKeyIndex="33" KeyUnicode="68" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="34" KeyUnicode="114"/>
|
||||
<KeyConnector TargetKeyIndex="34" KeyUnicode="82" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="35" KeyUnicode="119"/>
|
||||
<KeyConnector TargetKeyIndex="35" KeyUnicode="87" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="36" KeyUnicode="98"/>
|
||||
<KeyConnector TargetKeyIndex="36" KeyUnicode="66" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="37" KeyUnicode="106" />
|
||||
<KeyConnector TargetKeyIndex="37" KeyUnicode="74" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="38" KeyUnicode="102"/>
|
||||
<KeyConnector TargetKeyIndex="38" KeyUnicode="70" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="39" KeyUnicode="117"/>
|
||||
<KeyConnector TargetKeyIndex="39" KeyUnicode="85" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="40" KeyUnicode="112"/>
|
||||
<KeyConnector TargetKeyIndex="40" KeyUnicode="80" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="41" KeyUnicode="36" />
|
||||
<KeyConnector TargetKeyIndex="41" KeyUnicode="64" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="42" KeyUnicode="58" />
|
||||
<KeyConnector TargetKeyIndex="42" KeyUnicode="94" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="43" KeyUnicode="39" />
|
||||
<KeyConnector TargetKeyIndex="43" KeyUnicode="34" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="44" KeyUnicode="103"/>
|
||||
<KeyConnector TargetKeyIndex="44" KeyUnicode="71" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="45" KeyUnicode="121"/>
|
||||
<KeyConnector TargetKeyIndex="45" KeyUnicode="89" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="46" KeyUnicode="45" />
|
||||
<KeyConnector TargetKeyIndex="46" KeyUnicode="95" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="47" KeyUnicode="124" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="47" KeyUnicode="92" />
|
||||
<KeyConnector TargetKeyIndex="48" KeyUnicode="60" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="48" KeyUnicode="62" />
|
||||
<KeyConnector TargetKeyIndex="49" KeyUnicode="122"/>
|
||||
<KeyConnector TargetKeyIndex="49" KeyUnicode="90" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="50" KeyUnicode="120"/>
|
||||
<KeyConnector TargetKeyIndex="50" KeyUnicode="88" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="51" KeyUnicode="109" />
|
||||
<KeyConnector TargetKeyIndex="51" KeyUnicode="77" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="52" KeyUnicode="99"/>
|
||||
<KeyConnector TargetKeyIndex="52" KeyUnicode="67" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="53" KeyUnicode="118"/>
|
||||
<KeyConnector TargetKeyIndex="53" KeyUnicode="86" ModifierIndex="16"/>
|
||||
<KeyConnector TargetKeyIndex="54" KeyUnicode="107"/>
|
||||
<KeyConnector TargetKeyIndex="54" KeyUnicode="75" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="55" KeyUnicode="108"/>
|
||||
<KeyConnector TargetKeyIndex="55" KeyUnicode="76" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="56" KeyUnicode="44" />
|
||||
<KeyConnector TargetKeyIndex="56" KeyUnicode="60" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="57" KeyUnicode="46" />
|
||||
<KeyConnector TargetKeyIndex="57" KeyUnicode="62" ModifierIndex="10"/>
|
||||
<KeyConnector TargetKeyIndex="58" KeyUnicode="47" />
|
||||
<KeyConnector TargetKeyIndex="58" KeyUnicode="63" ModifierIndex="10"/>
|
||||
</Connections>
|
||||
</KTouchKeyboard>
|
||||
|
||||
1151
keyboard/ergodox/addons/etc/layout/ktouch/workman-wdp.ktouch.xml
Normal file
1151
keyboard/ergodox/addons/etc/layout/ktouch/workman-wdp.ktouch.xml
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,5 @@
|
|||
-dp----- a------- workman(wkm)
|
||||
--p----- a------- workman(wco)
|
||||
--p----- a------- workman(wcp)
|
||||
--p----- a------- workman(wce)
|
||||
--p----- a------- workman(wdp)
|
||||
180
keyboard/ergodox/addons/etc/layout/xkb/workman
Normal file
180
keyboard/ergodox/addons/etc/layout/xkb/workman
Normal file
|
|
@ -0,0 +1,180 @@
|
|||
// workman layouts
|
||||
// see http://viralintrospection.wordpress.com/2010/09/06/a-different-philosophy-in-designing-keyboard-layouts/
|
||||
|
||||
// xkb keymap prepared by Oleg Kostyuk <cub@cub.org.ua>
|
||||
// copyright 2012, bsd license
|
||||
|
||||
|
||||
// to use, copy to /usr/share/X11/xkb/symbols/workman and add the following
|
||||
// lines to /usr/share/X11/xkb/symbols.dir:
|
||||
//
|
||||
// -dp----- a------- workman(wkm)
|
||||
// --p----- a------- workman(wcp)
|
||||
// --p----- a------- workman(wco)
|
||||
// --p----- a------- workman(wdp)
|
||||
//
|
||||
// then load with, e.g.
|
||||
//
|
||||
// setxkbmap workman # default layout
|
||||
// setxkbmap -layout workman -variant wdp # to select other variants
|
||||
|
||||
|
||||
default
|
||||
partial alphanumeric_keys
|
||||
xkb_symbols "wkm" {
|
||||
|
||||
name[Group1] = "The Workman Keyboard Layout";
|
||||
|
||||
include "latin"
|
||||
include "latin(nodeadkeys)"
|
||||
|
||||
name[Group1] = "QFMLWY - full optimization, QWERTY lettermask";
|
||||
|
||||
// Unmodified Shift AltGr Shift+AltGr
|
||||
key <AD01> { [ q, Q, at, Greek_OMEGA ] };
|
||||
key <AD02> { [ d, D, dstroke, ordfeminine ] };
|
||||
key <AD03> { [ r, R, mu, masculine ] };
|
||||
key <AD04> { [ w, W, lstroke, Lstroke ] };
|
||||
key <AD05> { [ b, B, lstroke, Lstroke ] };
|
||||
key <AD06> { [ j, J, leftarrow, yen ] };
|
||||
key <AD07> { [ f, F, downarrow, uparrow ] };
|
||||
key <AD08> { [ u, U, oslash, Ooblique ] };
|
||||
key <AD09> { [ p, P, rightdoublequotemark, rightsinglequotemark ] };
|
||||
key <AD10> { [ semicolon, colon, rightdoublequotemark, rightsinglequotemark ] };
|
||||
|
||||
// Unmodified Shift AltGr Shift+AltGr
|
||||
key <AC01> { [ a, A, eth, ETH ] };
|
||||
key <AC02> { [ s, S, ssharp, section ] };
|
||||
key <AC03> { [ h, H, tslash, Tslash ] };
|
||||
key <AC04> { [ t, T ] };
|
||||
key <AC05> { [ g, G, paragraph, registered ] };
|
||||
key <AC06> { [ y, Y, rightarrow, idotless ] };
|
||||
key <AC07> { [ n, N, ae, AE ] };
|
||||
key <AC08> { [ e, E, EuroSign ] };
|
||||
key <AC09> { [ o, O, hstroke, Hstroke ] };
|
||||
key <AC10> { [ i, I, hstroke, Hstroke ] };
|
||||
|
||||
// Unmodified Shift AltGr Shift+AltGr
|
||||
key <AB01> { [ z, Z, guillemotleft, less ] };
|
||||
key <AB02> { [ x, X, leftdoublequotemark, leftsinglequotemark ] };
|
||||
key <AB03> { [ m, M, eng, ENG ] };
|
||||
key <AB04> { [ c, C, cent, copyright ] };
|
||||
key <AB05> { [ v, V, guillemotright, greater ] };
|
||||
key <AB06> { [ k, K, thorn, THORN ] };
|
||||
key <AB07> { [ l, L, kra, ampersand ] };
|
||||
|
||||
};
|
||||
|
||||
|
||||
partial alphanumeric_keys
|
||||
xkb_symbols "wco" {
|
||||
|
||||
include "workman(wkm)"
|
||||
|
||||
name[Group1] = "Workman for Programmers, with light modifications from cub@uanic (old)";
|
||||
|
||||
// Unmodified Shift AltGr Shift+AltGr
|
||||
// symbols row, left side
|
||||
key <TLDE> { [ asciitilde, grave, dead_grave ] };
|
||||
key <AE01> { [ exclam, 1, exclamdown ] };
|
||||
key <AE02> { [ braceleft, 2, currency ] };
|
||||
key <AE03> { [ numbersign, 3, cent ] };
|
||||
key <AE04> { [ semicolon, 4, yen ] };
|
||||
key <AE05> { [ braceright, 5, EuroSign ] };
|
||||
key <AE06> { [ bracketleft, 6, sterling ] };
|
||||
|
||||
// symbols row, right side
|
||||
key <AE07> { [ ampersand, 7 ] };
|
||||
key <AE08> { [ asterisk, 8, onehalf ] };
|
||||
key <AE09> { [ parenleft, 9 ] };
|
||||
key <AE10> { [ parenright, 0 ] };
|
||||
key <AE11> { [ bracketright, percent ] };
|
||||
key <AE12> { [ equal, plus ] };
|
||||
key <BKSP> { [ BackSpace ] };
|
||||
|
||||
// upper row, right side
|
||||
key <AD10> { [ dollar, at, dead_acute, dead_doubleacute ] };
|
||||
key <AD11> { [ colon, asciicircum, dead_circumflex, dead_caron ] };
|
||||
key <AD12> { [ apostrophe, quotedbl ] };
|
||||
|
||||
// home row, right side
|
||||
key <AC11> { [ minus, underscore, hyphen ] };
|
||||
|
||||
// lower row, left side
|
||||
key <LSGT> { [ greater, less, bar, brokenbar ] };
|
||||
};
|
||||
|
||||
|
||||
partial alphanumeric_keys
|
||||
xkb_symbols "wcp" {
|
||||
|
||||
include "workman(wco)"
|
||||
|
||||
name[Group1] = "Workman for Programmers, with light modifications from cub@uanic";
|
||||
|
||||
// Unmodified Shift AltGr Shift+AltGr
|
||||
// symbols row, left side
|
||||
key <AE01> { [ semicolon, 1, exclamdown ] };
|
||||
key <AE02> { [ exclam, 2, currency ] };
|
||||
key <AE04> { [ braceleft, 4, yen ] };
|
||||
|
||||
// symbols row, right side
|
||||
key <AE07> { [ bracketright, 7 ] };
|
||||
key <AE11> { [ ampersand, percent ] };
|
||||
};
|
||||
|
||||
|
||||
partial alphanumeric_keys
|
||||
xkb_symbols "wce" {
|
||||
|
||||
include "workman(wcp)"
|
||||
|
||||
name[Group1] = "Workman for Programmers, with light modifications from cub@uanic, for Ergodox";
|
||||
|
||||
// Unmodified Shift AltGr Shift+AltGr
|
||||
key <BKSL> { [ apostrophe, quotedbl ] };
|
||||
key <AE11> { [ asciicircum, backslash ] };
|
||||
key <AD11> { [ colon, percent ] };
|
||||
key <AC11> { [ minus, underscore, hyphen ] };
|
||||
key <AD12> { [ bar, ampersand ] };
|
||||
};
|
||||
|
||||
|
||||
partial alphanumeric_keys
|
||||
xkb_symbols "wdp" {
|
||||
|
||||
include "workman(wkm)"
|
||||
|
||||
name[Group1] = "Workman for Programmers, with modifications from Dvorak for programmers";
|
||||
|
||||
// Unmodified Shift AltGr Shift+AltGr
|
||||
// symbols row, left side
|
||||
key <TLDE> { [ asciitilde, grave, dead_grave ] };
|
||||
key <AE01> { [ semicolon, ampersand ] };
|
||||
key <AE02> { [ bracketleft, 7, currency ] };
|
||||
key <AE03> { [ braceleft, 5, cent ] };
|
||||
key <AE04> { [ braceright, 3, yen ] };
|
||||
key <AE05> { [ parenleft, 1, EuroSign ] };
|
||||
key <AE06> { [ equal, 9, sterling ] };
|
||||
|
||||
// symbols row, right side
|
||||
key <AE07> { [ asterisk, 0 ] };
|
||||
key <AE08> { [ parenright, 2, onehalf ] };
|
||||
key <AE09> { [ plus, 4 ] };
|
||||
key <AE10> { [ bracketright, 6 ] };
|
||||
key <AE11> { [ percent, 8 ] };
|
||||
key <AE12> { [ exclam, numbersign, exclamdown ] };
|
||||
key <BKSP> { [ BackSpace ] };
|
||||
|
||||
// upper row, right side
|
||||
key <AD10> { [ dollar, at, dead_acute, dead_doubleacute ] };
|
||||
key <AD11> { [ colon, asciicircum, dead_circumflex, dead_caron ] };
|
||||
key <AD12> { [ apostrophe, quotedbl ] };
|
||||
|
||||
// home row, right side
|
||||
key <AC11> { [ minus, underscore, hyphen ] };
|
||||
|
||||
// lower row, left side
|
||||
key <LSGT> { [ greater, less, bar, brokenbar ] };
|
||||
};
|
||||
|
||||
93
keyboard/ergodox/config.h
Normal file
93
keyboard/ergodox/config.h
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
This work is heavily based on initial firmware for Ergodox keyboard.
|
||||
Copyright (c) 2012, 2013 Ben Blazak <benblazak.dev@gmail.com>
|
||||
Released under The MIT License (see "doc/licenses/MIT.md")
|
||||
Project located at <https://github.com/benblazak/ergodox-firmware>
|
||||
*/
|
||||
|
||||
#ifndef CONFIG_H
|
||||
#define CONFIG_H
|
||||
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x1307
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER TMK/Cub
|
||||
#define PRODUCT Ergodox
|
||||
#define DESCRIPTION t.m.k. keyboard firmware for Ergodox
|
||||
|
||||
#define MATRIX_ROWS 14
|
||||
#define MATRIX_COLS 6
|
||||
|
||||
#define MOUSEKEY_DELAY 100
|
||||
#define MOUSEKEY_INTERVAL 20
|
||||
#define MOUSEKEY_MAX_SPEED 3
|
||||
#define MOUSEKEY_TIME_TO_MAX 10
|
||||
|
||||
/* define if matrix has ghost */
|
||||
//#define MATRIX_HAS_GHOST
|
||||
|
||||
/* Set 0 if debouncing isn't needed */
|
||||
/*
|
||||
* This constant define not debouncing time in msecs, but amount of matrix
|
||||
* scan loops which should be made to get stable debounced results.
|
||||
*
|
||||
* On Ergodox matrix scan rate is relatively low, because of slow I2C.
|
||||
* Now it's only 317 scans/second, or about 3.15 msec/scan.
|
||||
* According to Cherry specs, debouncing time is 5 msec.
|
||||
*
|
||||
* And so, there is no sense to have DEBOUNCE higher than 2.
|
||||
*/
|
||||
#define DEBOUNCE 2
|
||||
#define TAPPING_TERM 230
|
||||
|
||||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||
#define LOCKING_SUPPORT_ENABLE
|
||||
/* Locking resynchronize hack */
|
||||
#define LOCKING_RESYNC_ENABLE
|
||||
|
||||
/* key combination for command */
|
||||
#define IS_COMMAND() ( \
|
||||
keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \
|
||||
keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \
|
||||
)
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Feature disable options
|
||||
* These options are also useful to firmware size reduction.
|
||||
*/
|
||||
|
||||
/* disable debug print */
|
||||
//#define NO_DEBUG
|
||||
|
||||
/* disable print */
|
||||
//#define NO_PRINT
|
||||
|
||||
/* disable action features */
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
//#define DEBUG_MATRIX_SCAN_RATE
|
||||
|
||||
#endif
|
||||
136
keyboard/ergodox/ergodox.c
Normal file
136
keyboard/ergodox/ergodox.c
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
/*
|
||||
Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
This work is heavily based on initial firmware for Ergodox keyboard.
|
||||
Copyright (c) 2012, 2013 Ben Blazak <benblazak.dev@gmail.com>
|
||||
Released under The MIT License (see "doc/licenses/MIT.md")
|
||||
Project located at <https://github.com/benblazak/ergodox-firmware>
|
||||
|
||||
Most used files are located at
|
||||
<https://github.com/benblazak/ergodox-firmware/tree/partial-rewrite/firmware/keyboard/ergodox/controller>
|
||||
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <avr/io.h>
|
||||
#include <avr/interrupt.h>
|
||||
#include <util/delay.h>
|
||||
#include "action.h"
|
||||
#include "command.h"
|
||||
#include "print.h"
|
||||
#include "debug.h"
|
||||
#include "ergodox.h"
|
||||
#include "i2cmaster.h"
|
||||
|
||||
bool i2c_initialized = 0;
|
||||
uint8_t mcp23018_status = 0x20;
|
||||
|
||||
bool ergodox_left_led_1 = 0; // left top
|
||||
bool ergodox_left_led_2 = 0; // left middle
|
||||
bool ergodox_left_led_3 = 0; // left bottom
|
||||
|
||||
|
||||
void init_ergodox(void)
|
||||
{
|
||||
// keyboard LEDs (see "PWM on ports OC1(A|B|C)" in "teensy-2-0.md")
|
||||
TCCR1A = 0b10101001; // set and configure fast PWM
|
||||
TCCR1B = 0b00001001; // set and configure fast PWM
|
||||
|
||||
// (tied to Vcc for hardware convenience)
|
||||
DDRB &= ~(1<<4); // set B(4) as input
|
||||
PORTB &= ~(1<<4); // set B(4) internal pull-up disabled
|
||||
|
||||
// unused pins - C7, D4, D5, D7, E6
|
||||
// set as input with internal pull-ip enabled
|
||||
DDRC &= ~(1<<7);
|
||||
DDRD &= ~(1<<7 | 1<<5 | 1<<4);
|
||||
DDRE &= ~(1<<6);
|
||||
PORTC |= (1<<7);
|
||||
PORTD |= (1<<7 | 1<<5 | 1<<4);
|
||||
PORTE |= (1<<6);
|
||||
}
|
||||
|
||||
void ergodox_blink_all_leds(void)
|
||||
{
|
||||
ergodox_led_all_off();
|
||||
ergodox_led_all_set(LED_BRIGHTNESS_HI);
|
||||
ergodox_led_all_on();
|
||||
_delay_ms(333);
|
||||
ergodox_led_all_off();
|
||||
}
|
||||
|
||||
uint8_t init_mcp23018(void) {
|
||||
mcp23018_status = 0x20;
|
||||
|
||||
// I2C subsystem
|
||||
if (i2c_initialized == 0) {
|
||||
i2c_init(); // on pins D(1,0)
|
||||
i2c_initialized++;
|
||||
_delay_ms(1000);
|
||||
}
|
||||
|
||||
// set pin direction
|
||||
// - unused : input : 1
|
||||
// - input : input : 1
|
||||
// - driving : output : 0
|
||||
mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(IODIRA); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(0b00111111); if (mcp23018_status) goto out;
|
||||
i2c_stop();
|
||||
|
||||
// set pull-up
|
||||
// - unused : on : 1
|
||||
// - input : on : 1
|
||||
// - driving : off : 0
|
||||
mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(GPPUA); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(0b00111111); if (mcp23018_status) goto out;
|
||||
|
||||
out:
|
||||
i2c_stop();
|
||||
|
||||
if (!mcp23018_status) mcp23018_status = ergodox_left_leds_update();
|
||||
|
||||
return mcp23018_status;
|
||||
}
|
||||
|
||||
uint8_t ergodox_left_leds_update(void) {
|
||||
if (mcp23018_status) { // if there was an error
|
||||
return mcp23018_status;
|
||||
}
|
||||
|
||||
// set logical value (doesn't matter on inputs)
|
||||
// - unused : hi-Z : 1
|
||||
// - input : hi-Z : 1
|
||||
// - driving : hi-Z : 1
|
||||
mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(OLATA); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(0b11111111
|
||||
& ~(ergodox_left_led_3<<LEFT_LED_3_SHIFT)
|
||||
); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(0b11111111
|
||||
& ~(ergodox_left_led_2<<LEFT_LED_2_SHIFT)
|
||||
& ~(ergodox_left_led_1<<LEFT_LED_1_SHIFT)
|
||||
); if (mcp23018_status) goto out;
|
||||
|
||||
out:
|
||||
i2c_stop();
|
||||
return mcp23018_status;
|
||||
}
|
||||
120
keyboard/ergodox/ergodox.h
Normal file
120
keyboard/ergodox/ergodox.h
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
/*
|
||||
Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
Copyright (c) 2012, 2013 Ben Blazak <benblazak.dev@gmail.com>
|
||||
Released under The MIT License (see "doc/licenses/MIT.md")
|
||||
Project located at <https://github.com/benblazak/ergodox-firmware>
|
||||
|
||||
Most used files are located at
|
||||
<https://github.com/benblazak/ergodox-firmware/tree/partial-rewrite/firmware/keyboard/ergodox/controller>
|
||||
|
||||
*/
|
||||
|
||||
#ifndef ERGODOX_H
|
||||
#define ERGODOX_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <avr/io.h>
|
||||
#include "i2cmaster.h"
|
||||
|
||||
#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n))
|
||||
#define CPU_16MHz 0x00
|
||||
|
||||
// I2C aliases and register addresses (see "mcp23018.md")
|
||||
#define I2C_ADDR 0b0100000
|
||||
#define I2C_ADDR_WRITE ( (I2C_ADDR<<1) | I2C_WRITE )
|
||||
#define I2C_ADDR_READ ( (I2C_ADDR<<1) | I2C_READ )
|
||||
#define IODIRA 0x00 // i/o direction register
|
||||
#define IODIRB 0x01
|
||||
#define GPPUA 0x0C // GPIO pull-up resistor register
|
||||
#define GPPUB 0x0D
|
||||
#define GPIOA 0x12 // general purpose i/o port register (write modifies OLAT)
|
||||
#define GPIOB 0x13
|
||||
#define OLATA 0x14 // output latch register
|
||||
#define OLATB 0x15
|
||||
|
||||
extern uint8_t mcp23018_status;
|
||||
|
||||
void init_ergodox(void);
|
||||
void ergodox_blink_all_leds(void);
|
||||
uint8_t init_mcp23018(void);
|
||||
uint8_t ergodox_left_leds_update(void);
|
||||
|
||||
#define LED_BRIGHTNESS_LO 31
|
||||
#define LED_BRIGHTNESS_HI 255
|
||||
|
||||
#define LEFT_LED_1_SHIFT 7 // in MCP23018 port B
|
||||
#define LEFT_LED_2_SHIFT 6 // in MCP23018 port B
|
||||
#define LEFT_LED_3_SHIFT 7 // in MCP23018 port A
|
||||
|
||||
extern bool ergodox_left_led_1; // left top
|
||||
extern bool ergodox_left_led_2; // left middle
|
||||
extern bool ergodox_left_led_3; // left bottom
|
||||
|
||||
static inline void ergodox_board_led_on(void) { DDRD |= (1<<6); PORTD |= (1<<6); }
|
||||
static inline void ergodox_right_led_1_on(void) { DDRB |= (1<<5); PORTB |= (1<<5); }
|
||||
static inline void ergodox_right_led_2_on(void) { DDRB |= (1<<6); PORTB |= (1<<6); }
|
||||
static inline void ergodox_right_led_3_on(void) { DDRB |= (1<<7); PORTB |= (1<<7); }
|
||||
static inline void ergodox_left_led_1_on(void) { ergodox_left_led_1 = 1; }
|
||||
static inline void ergodox_left_led_2_on(void) { ergodox_left_led_2 = 1; }
|
||||
static inline void ergodox_left_led_3_on(void) { ergodox_left_led_3 = 1; }
|
||||
|
||||
static inline void ergodox_board_led_off(void) { DDRD &= ~(1<<6); PORTD &= ~(1<<6); }
|
||||
static inline void ergodox_right_led_1_off(void) { DDRB &= ~(1<<5); PORTB &= ~(1<<5); }
|
||||
static inline void ergodox_right_led_2_off(void) { DDRB &= ~(1<<6); PORTB &= ~(1<<6); }
|
||||
static inline void ergodox_right_led_3_off(void) { DDRB &= ~(1<<7); PORTB &= ~(1<<7); }
|
||||
static inline void ergodox_left_led_1_off(void) { ergodox_left_led_1 = 0; }
|
||||
static inline void ergodox_left_led_2_off(void) { ergodox_left_led_2 = 0; }
|
||||
static inline void ergodox_left_led_3_off(void) { ergodox_left_led_3 = 0; }
|
||||
|
||||
static inline void ergodox_led_all_on(void)
|
||||
{
|
||||
ergodox_board_led_on();
|
||||
ergodox_right_led_1_on();
|
||||
ergodox_right_led_2_on();
|
||||
ergodox_right_led_3_on();
|
||||
ergodox_left_led_1_on();
|
||||
ergodox_left_led_2_on();
|
||||
ergodox_left_led_3_on();
|
||||
ergodox_left_leds_update();
|
||||
}
|
||||
|
||||
static inline void ergodox_led_all_off(void)
|
||||
{
|
||||
ergodox_board_led_off();
|
||||
ergodox_right_led_1_off();
|
||||
ergodox_right_led_2_off();
|
||||
ergodox_right_led_3_off();
|
||||
ergodox_left_led_1_off();
|
||||
ergodox_left_led_2_off();
|
||||
ergodox_left_led_3_off();
|
||||
ergodox_left_leds_update();
|
||||
}
|
||||
|
||||
static inline void ergodox_right_led_1_set(uint8_t n) { OCR1A = n; }
|
||||
static inline void ergodox_right_led_2_set(uint8_t n) { OCR1B = n; }
|
||||
static inline void ergodox_right_led_3_set(uint8_t n) { OCR1C = n; }
|
||||
|
||||
static inline void ergodox_led_all_set(uint8_t n)
|
||||
{
|
||||
ergodox_right_led_1_set(n);
|
||||
ergodox_right_led_2_set(n);
|
||||
ergodox_right_led_3_set(n);
|
||||
}
|
||||
|
||||
#endif
|
||||
178
keyboard/ergodox/i2cmaster.h
Normal file
178
keyboard/ergodox/i2cmaster.h
Normal file
|
|
@ -0,0 +1,178 @@
|
|||
#ifndef _I2CMASTER_H
|
||||
#define _I2CMASTER_H
|
||||
/*************************************************************************
|
||||
* Title: C include file for the I2C master interface
|
||||
* (i2cmaster.S or twimaster.c)
|
||||
* Author: Peter Fleury <pfleury@gmx.ch>
|
||||
* File: $Id: i2cmaster.h,v 1.12 2015/09/16 09:27:58 peter Exp $
|
||||
* Software: AVR-GCC 4.x
|
||||
* Target: any AVR device
|
||||
* Usage: see Doxygen manual
|
||||
**************************************************************************/
|
||||
|
||||
/**
|
||||
@file
|
||||
@defgroup pfleury_ic2master I2C Master library
|
||||
@code #include <i2cmaster.h> @endcode
|
||||
|
||||
@brief I2C (TWI) Master Software Library
|
||||
|
||||
Basic routines for communicating with I2C slave devices. This single master
|
||||
implementation is limited to one bus master on the I2C bus.
|
||||
|
||||
This I2c library is implemented as a compact assembler software implementation of the I2C protocol
|
||||
which runs on any AVR (i2cmaster.S) and as a TWI hardware interface for all AVR with built-in TWI hardware (twimaster.c).
|
||||
Since the API for these two implementations is exactly the same, an application can be linked either against the
|
||||
software I2C implementation or the hardware I2C implementation.
|
||||
|
||||
Use 4.7k pull-up resistor on the SDA and SCL pin.
|
||||
|
||||
Adapt the SCL and SDA port and pin definitions and eventually the delay routine in the module
|
||||
i2cmaster.S to your target when using the software I2C implementation !
|
||||
|
||||
Adjust the CPU clock frequence F_CPU in twimaster.c or in the Makfile when using the TWI hardware implementaion.
|
||||
|
||||
@note
|
||||
The module i2cmaster.S is based on the Atmel Application Note AVR300, corrected and adapted
|
||||
to GNU assembler and AVR-GCC C call interface.
|
||||
Replaced the incorrect quarter period delays found in AVR300 with
|
||||
half period delays.
|
||||
|
||||
@author Peter Fleury pfleury@gmx.ch http://tinyurl.com/peterfleury
|
||||
@copyright (C) 2015 Peter Fleury, GNU General Public License Version 3
|
||||
|
||||
@par API Usage Example
|
||||
The following code shows typical usage of this library, see example test_i2cmaster.c
|
||||
|
||||
@code
|
||||
|
||||
#include <i2cmaster.h>
|
||||
|
||||
|
||||
#define Dev24C02 0xA2 // device address of EEPROM 24C02, see datasheet
|
||||
|
||||
int main(void)
|
||||
{
|
||||
unsigned char ret;
|
||||
|
||||
i2c_init(); // initialize I2C library
|
||||
|
||||
// write 0x75 to EEPROM address 5 (Byte Write)
|
||||
i2c_start_wait(Dev24C02+I2C_WRITE); // set device address and write mode
|
||||
i2c_write(0x05); // write address = 5
|
||||
i2c_write(0x75); // write value 0x75 to EEPROM
|
||||
i2c_stop(); // set stop conditon = release bus
|
||||
|
||||
|
||||
// read previously written value back from EEPROM address 5
|
||||
i2c_start_wait(Dev24C02+I2C_WRITE); // set device address and write mode
|
||||
|
||||
i2c_write(0x05); // write address = 5
|
||||
i2c_rep_start(Dev24C02+I2C_READ); // set device address and read mode
|
||||
|
||||
ret = i2c_readNak(); // read one byte from EEPROM
|
||||
i2c_stop();
|
||||
|
||||
for(;;);
|
||||
}
|
||||
@endcode
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/**@{*/
|
||||
|
||||
#if (__GNUC__ * 100 + __GNUC_MINOR__) < 304
|
||||
#error "This library requires AVR-GCC 3.4 or later, update to newer AVR-GCC compiler !"
|
||||
#endif
|
||||
|
||||
#include <avr/io.h>
|
||||
|
||||
/** defines the data direction (reading from I2C device) in i2c_start(),i2c_rep_start() */
|
||||
#define I2C_READ 1
|
||||
|
||||
/** defines the data direction (writing to I2C device) in i2c_start(),i2c_rep_start() */
|
||||
#define I2C_WRITE 0
|
||||
|
||||
|
||||
/**
|
||||
@brief initialize the I2C master interace. Need to be called only once
|
||||
@return none
|
||||
*/
|
||||
extern void i2c_init(void);
|
||||
|
||||
|
||||
/**
|
||||
@brief Terminates the data transfer and releases the I2C bus
|
||||
@return none
|
||||
*/
|
||||
extern void i2c_stop(void);
|
||||
|
||||
|
||||
/**
|
||||
@brief Issues a start condition and sends address and transfer direction
|
||||
|
||||
@param addr address and transfer direction of I2C device
|
||||
@retval 0 device accessible
|
||||
@retval 1 failed to access device
|
||||
*/
|
||||
extern unsigned char i2c_start(unsigned char addr);
|
||||
|
||||
|
||||
/**
|
||||
@brief Issues a repeated start condition and sends address and transfer direction
|
||||
|
||||
@param addr address and transfer direction of I2C device
|
||||
@retval 0 device accessible
|
||||
@retval 1 failed to access device
|
||||
*/
|
||||
extern unsigned char i2c_rep_start(unsigned char addr);
|
||||
|
||||
|
||||
/**
|
||||
@brief Issues a start condition and sends address and transfer direction
|
||||
|
||||
If device is busy, use ack polling to wait until device ready
|
||||
@param addr address and transfer direction of I2C device
|
||||
@return none
|
||||
*/
|
||||
extern void i2c_start_wait(unsigned char addr);
|
||||
|
||||
|
||||
/**
|
||||
@brief Send one byte to I2C device
|
||||
@param data byte to be transfered
|
||||
@retval 0 write successful
|
||||
@retval 1 write failed
|
||||
*/
|
||||
extern unsigned char i2c_write(unsigned char data);
|
||||
|
||||
|
||||
/**
|
||||
@brief read one byte from the I2C device, request more data from device
|
||||
@return byte read from I2C device
|
||||
*/
|
||||
extern unsigned char i2c_readAck(void);
|
||||
|
||||
/**
|
||||
@brief read one byte from the I2C device, read is followed by a stop condition
|
||||
@return byte read from I2C device
|
||||
*/
|
||||
extern unsigned char i2c_readNak(void);
|
||||
|
||||
/**
|
||||
@brief read one byte from the I2C device
|
||||
|
||||
Implemented as a macro, which calls either @ref i2c_readAck or @ref i2c_readNak
|
||||
|
||||
@param ack 1 send ack, request more data from device<br>
|
||||
0 send nak, read is followed by a stop condition
|
||||
@return byte read from I2C device
|
||||
*/
|
||||
extern unsigned char i2c_read(unsigned char ack);
|
||||
#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak();
|
||||
|
||||
|
||||
|
||||
/**@}*/
|
||||
#endif
|
||||
186
keyboard/ergodox/keymap_blazak.c
Normal file
186
keyboard/ergodox/keymap_blazak.c
Normal file
|
|
@ -0,0 +1,186 @@
|
|||
/*
|
||||
Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include <util/delay.h>
|
||||
#include "bootloader.h"
|
||||
#include "keymap_common.h"
|
||||
|
||||
// Aliases for shifted symbols
|
||||
// Names from QMK
|
||||
#define KC_TILD KC_FN11
|
||||
#define KC_EXLM KC_FN12
|
||||
#define KC_AT KC_FN13
|
||||
#define KC_HASH KC_FN14
|
||||
#define KC_DLR KC_FN15
|
||||
#define KC_PERC KC_FN16
|
||||
#define KC_CIRC KC_FN17
|
||||
#define KC_AMPR KC_FN18
|
||||
#define KC_ASTR KC_FN19
|
||||
#define KC_LPRN KC_FN20
|
||||
#define KC_RPRN KC_FN21
|
||||
#define KC_UNDS KC_FN22
|
||||
#define KC_PLUS KC_FN23
|
||||
#define KC_LCBR KC_FN24
|
||||
#define KC_RCBR KC_FN25
|
||||
#define KC_LABK KC_FN26
|
||||
#define KC_RABK KC_FN27
|
||||
#define KC_COLN KC_FN28
|
||||
#define KC_PIPE KC_FN29
|
||||
#define KC_QUES KC_FN30
|
||||
#define KC_DQT KC_FN31
|
||||
|
||||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KEYMAP( // layer 0 : default
|
||||
// left hand
|
||||
EQL, 1, 2, 3, 4, 5, ESC,
|
||||
BSLS,Q, W, E, R, T, FN2,
|
||||
TAB, A, S, D, F, G,
|
||||
LSFT,Z, X, C, V, B, FN1,
|
||||
LGUI,GRV, BSLS,LEFT,RGHT,
|
||||
LCTL,LALT,
|
||||
HOME,
|
||||
BSPC,DEL, END,
|
||||
// right hand
|
||||
FN3, 6, 7, 8, 9, 0, MINS,
|
||||
LBRC,Y, U, I, O, P, RBRC,
|
||||
H, J, K, L, SCLN,QUOT,
|
||||
FN1, N, M, COMM,DOT, SLSH,RSFT,
|
||||
LEFT,DOWN,UP, RGHT,RGUI,
|
||||
RALT,RCTL,
|
||||
PGUP,
|
||||
PGDN,ENT, SPC
|
||||
),
|
||||
|
||||
KEYMAP( // layer 1 : function and symbol keys
|
||||
// left hand
|
||||
NO, F1, F2, F3, F4, F5, F11,
|
||||
TRNS,LCBR,RCBR,LBRC,RBRC,NO, FN4,
|
||||
TRNS,SCLN,SLSH,MINS,P0, COLN,
|
||||
TRNS,P6, P7, P8, P9, PLUS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS,
|
||||
// right hand
|
||||
F12, F6, F7, F8, F9, F10, PWR,
|
||||
TRNS,NO, MINS,LABK,RABK,DLR ,VOLU,
|
||||
BSLS,P1, LPRN,RPRN,PLUS,VOLD,
|
||||
TRNS,ASTR,P2, P3, P4, P5, MUTE,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS
|
||||
),
|
||||
|
||||
KEYMAP( // layer 2 : keyboard functions
|
||||
// left hand
|
||||
FN0, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS,
|
||||
// right hand
|
||||
FN4, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS
|
||||
),
|
||||
|
||||
KEYMAP( // layer 3: numpad
|
||||
// left hand
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS,
|
||||
// right hand
|
||||
TRNS,NLCK,PSLS,PAST,PAST,PMNS,BSPC,
|
||||
TRNS,NO, P7, P8, P9, PMNS,BSPC,
|
||||
NO, P4, P5, P6, PPLS,PENT,
|
||||
TRNS,NO, P1, P2, P3, PPLS,PENT,
|
||||
P0, PDOT,SLSH,PENT,PENT,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS
|
||||
),
|
||||
|
||||
};
|
||||
|
||||
/* id for user defined functions */
|
||||
enum function_id {
|
||||
TEENSY_KEY,
|
||||
};
|
||||
|
||||
/*
|
||||
* Fn action definition
|
||||
*/
|
||||
const action_t PROGMEM fn_actions[] = {
|
||||
ACTION_FUNCTION(TEENSY_KEY), // FN0 - Teensy key
|
||||
ACTION_LAYER_MOMENTARY(1), // FN1 - switch to Layer1
|
||||
ACTION_LAYER_SET(2, ON_PRESS), // FN2 - set Layer2
|
||||
ACTION_LAYER_TOGGLE(3), // FN3 - toggle Layer3 aka Numpad layer
|
||||
ACTION_LAYER_SET(0, ON_PRESS), // FN4 - set Layer0
|
||||
// Reserved for user actions
|
||||
ACTION_NO,
|
||||
ACTION_NO,
|
||||
ACTION_NO,
|
||||
ACTION_NO,
|
||||
ACTION_NO,
|
||||
ACTION_NO,
|
||||
// Shifted keys
|
||||
ACTION_MODS_KEY(MOD_LSFT, KC_GRV), // FN11 - ~
|
||||
ACTION_MODS_KEY(MOD_LSFT, KC_1), // FN12 - !
|
||||
ACTION_MODS_KEY(MOD_LSFT, KC_2), // FN13 - @
|
||||
ACTION_MODS_KEY(MOD_LSFT, KC_3), // FN14 - #
|
||||
ACTION_MODS_KEY(MOD_LSFT, KC_4), // FN15 - $
|
||||
ACTION_MODS_KEY(MOD_LSFT, KC_5), // FN16 - %
|
||||
ACTION_MODS_KEY(MOD_LSFT, KC_6), // FN17 - ^
|
||||
ACTION_MODS_KEY(MOD_LSFT, KC_7), // FN18 - &
|
||||
ACTION_MODS_KEY(MOD_LSFT, KC_8), // FN19 - *
|
||||
ACTION_MODS_KEY(MOD_LSFT, KC_9), // FN20 - (
|
||||
ACTION_MODS_KEY(MOD_LSFT, KC_0), // FN21 - )
|
||||
ACTION_MODS_KEY(MOD_LSFT, KC_MINS), // FN22 - _
|
||||
ACTION_MODS_KEY(MOD_LSFT, KC_EQL), // FN23 - +
|
||||
ACTION_MODS_KEY(MOD_LSFT, KC_LBRC), // FN24 - {
|
||||
ACTION_MODS_KEY(MOD_LSFT, KC_RBRC), // FN25 - }
|
||||
ACTION_MODS_KEY(MOD_LSFT, KC_COMM), // FN26 - <
|
||||
ACTION_MODS_KEY(MOD_LSFT, KC_DOT), // FN27 - >
|
||||
ACTION_MODS_KEY(MOD_LSFT, KC_SCLN), // FN28 - :
|
||||
ACTION_MODS_KEY(MOD_LSFT, KC_BSLS), // FN29 - |
|
||||
ACTION_MODS_KEY(MOD_LSFT, KC_SLSH), // FN30 - ?
|
||||
ACTION_MODS_KEY(MOD_LSFT, KC_QUOT), // FN31 - "
|
||||
};
|
||||
|
||||
void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
|
||||
{
|
||||
if (id == TEENSY_KEY) {
|
||||
clear_keyboard();
|
||||
print("\n\nJump to bootloader... ");
|
||||
_delay_ms(250);
|
||||
bootloader_jump(); // should not return
|
||||
print("not supported.\n");
|
||||
}
|
||||
}
|
||||
203
keyboard/ergodox/keymap_colemak.c
Normal file
203
keyboard/ergodox/keymap_colemak.c
Normal file
|
|
@ -0,0 +1,203 @@
|
|||
/*
|
||||
Copyright 2016 Paul Williamson <squarefrog@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include <util/delay.h>
|
||||
#include "bootloader.h"
|
||||
#include "keymap_common.h"
|
||||
|
||||
|
||||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
/*
|
||||
* Keymap 0: Default Colemak Layer
|
||||
*
|
||||
* This is a general purpose Colemak layout which should serve as a good
|
||||
* basis for your own custom layout. Mac users may want to swap the
|
||||
* position of the Alt and GUI keys.
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | Esc | 1 | 2 | 3 | 4 | 5 | ~ | | - | 6 | 7 | 8 | 9 | 0 | + |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | Tab | Q | W | F | P | G | [ | | ] | J | L | U | Y | ; | \ |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | CpsLk | A | R | S | T | D |------| |------| H | N | E | I | O | ' |
|
||||
* |--------+------+------+------+------+------| +L2 | | |------+------+------+------+------+--------|
|
||||
* | LShift | Z | X | C | V | B | | | | K | M | , | . | / | RShift |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | LCtrl| LGui | LAlt | Left | Rght | | Up | Dn | RAlt | RGui | RCtrl |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* |CpsLck| Del | | PgUp | PgDn |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | LAlt | | RAlt | | |
|
||||
* | BkSp | ~L1 |------| |------| Enter| Space|
|
||||
* | | | LCtrl| | RCtrl| | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
|
||||
KEYMAP(
|
||||
// left hand
|
||||
ESC, 1, 2, 3, 4, 5, GRV,
|
||||
TAB, Q, W, F, P, G, LBRC,
|
||||
CAPS,A, R, S, T, D,
|
||||
LSFT,Z, X, C, V, B, FN2,
|
||||
LCTL,LGUI,LALT,LEFT,RGHT,
|
||||
CAPS,DEL,
|
||||
LALT,
|
||||
BSPC,FN1, LCTL,
|
||||
// right hand
|
||||
MINS,6, 7, 8, 9, 0, EQL,
|
||||
RBRC,J, L, U, Y, SCLN,BSLS,
|
||||
H, N, E, I, O, QUOT,
|
||||
NO, K, M, COMM,DOT, SLSH,RSFT,
|
||||
UP, DOWN,RALT,RGUI,RCTL,
|
||||
PGUP,PGDN,
|
||||
RALT,
|
||||
RCTL,ENT, SPC
|
||||
),
|
||||
|
||||
/*
|
||||
* Layer 1: Function keys
|
||||
*
|
||||
* This layer contains function keys, and media keys. Additionally, there
|
||||
* are QWERTY-style Vim arrow keys. I could never get used to Colemak's
|
||||
* rearranged Vim arrow placements.
|
||||
*
|
||||
* Most of the non-modifier keys are marked as NO, so it's immediately
|
||||
* obvious if you start typing on a secondary layer.
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | Teensy | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | TRNS |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | TRNS | | | | | | TRNS | | TRNS | | | | | | TRNS |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | TRNS | | | | | |------| |------| Left | Down | Up | Right| | TRNS |
|
||||
* |--------+------+------+------+------+------| +L2 | | |------+------+------+------+------+--------|
|
||||
* | TRNS | | | | | | | | | | | | | | TRNS |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | TRNS | TRNS | Play | RW | FF | | Mute | Vol- | Vol+ | TRNS | TRNS |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | | | | HOME | END |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | TRNS | | TRNS | | |
|
||||
* | TRNS | |------| |------| TRNS | TRNS |
|
||||
* | | | TRNS | | TRNS | | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
|
||||
KEYMAP(
|
||||
// left hand
|
||||
FN31,F1, F2, F3, F4, F5, F11,
|
||||
TRNS,NO, NO, NO, NO, NO, TRNS,
|
||||
TRNS,NO, NO, NO, NO, NO,
|
||||
TRNS,NO, NO, NO, NO, NO, FN2,
|
||||
TRNS,TRNS,MPLY,MPRV,MNXT,
|
||||
NO, NO,
|
||||
TRNS,
|
||||
TRNS,NO, TRNS,
|
||||
// right hand
|
||||
F12, F6, F7, F8, F9, F10, TRNS,
|
||||
TRNS,NO, NO, NO, NO, NO, TRNS,
|
||||
LEFT,DOWN,UP, RGHT,NO, TRNS,
|
||||
NO, NO, NO, NO, NO, NO, TRNS,
|
||||
MUTE,VOLD,VOLU,TRNS,TRNS,
|
||||
HOME,END,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS
|
||||
),
|
||||
|
||||
/*
|
||||
* Layer 2: Number Pad
|
||||
*
|
||||
* This layer has a number pad for quicker number entry. As with layer 1,
|
||||
* most of the non-modifier keys are marked as NO, so it's immediately
|
||||
* obvious if you start typing on a secondary layer.
|
||||
*
|
||||
* Inspired by Ben Blazak QWERTY num pad.
|
||||
* https://git.io/voIeY
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | ESC | | | | | | | | | | NmLk | / | * | - | Bkspc |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | TRNS | | | | | | TRNS | | TRNS | | 7 | 8 | 9 | + | Bkspc |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | TRNS | | | | | |------| |------| | 4 | 5 | 6 | + | Enter |
|
||||
* |--------+------+------+------+------+------| | | -L0 |------+------+------+------+------+--------|
|
||||
* | TRNS | | | | | | | | | | 1 | 2 | 3 | Enter| Enter |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | TRNS | TRNS | LALT | | | | 0 | 0 | . | Enter| Enter|
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | | | | TRNS | TRNS |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | TRNS | | TRNS | | |
|
||||
* | Bkspc| |------| |------| Enter| |
|
||||
* | | | TRNS | | TRNS | | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
|
||||
KEYMAP(
|
||||
// left hand
|
||||
ESC, NO, NO, NO, NO, NO, NO,
|
||||
TRNS,NO, NO, NO, NO, NO, TRNS,
|
||||
TRNS,NO, NO, NO, NO, NO,
|
||||
TRNS,NO, NO, NO, NO, NO, NO,
|
||||
TRNS,TRNS,LALT,NO, NO,
|
||||
NO, NO,
|
||||
TRNS,
|
||||
BSPC,NO, TRNS,
|
||||
// right hand
|
||||
NO, NO, NLCK,SLSH,PAST,PMNS,BSPC,
|
||||
TRNS,NO, P7, P8, P9, PPLS,BSPC,
|
||||
NO, P4, P5, P6, PPLS,PENT,
|
||||
FN0, NO, P1, P2, P3, PENT,PENT,
|
||||
P0, P0, PDOT,PENT,PENT,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,ENT, TRNS
|
||||
),
|
||||
};
|
||||
|
||||
/* id for user defined functions */
|
||||
enum function_id {
|
||||
TEENSY_KEY,
|
||||
};
|
||||
|
||||
/*
|
||||
* Fn action definition
|
||||
*/
|
||||
const action_t PROGMEM fn_actions[] = {
|
||||
// Layer shifting
|
||||
[0] = ACTION_LAYER_SET(0, ON_PRESS), // Switch to Layer 0
|
||||
[1] = ACTION_LAYER_MOMENTARY(1), // Momentarily switch to layer 1
|
||||
[2] = ACTION_LAYER_SET(2, ON_PRESS), // Switch to Layer 2
|
||||
|
||||
// Teensy
|
||||
[31] = ACTION_FUNCTION(TEENSY_KEY),
|
||||
};
|
||||
|
||||
void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
|
||||
{
|
||||
if (id == TEENSY_KEY) {
|
||||
clear_keyboard();
|
||||
print("\n\nJump to bootloader... ");
|
||||
_delay_ms(250);
|
||||
bootloader_jump(); // should not return
|
||||
print("not supported.\n");
|
||||
}
|
||||
}
|
||||
|
||||
33
keyboard/ergodox/keymap_common.c
Normal file
33
keyboard/ergodox/keymap_common.c
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
|
||||
Copyright 2016 Mark Sikora <marknsikora@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "keymap_common.h"
|
||||
|
||||
/* translates key to keycode */
|
||||
__attribute__ ((weak))
|
||||
uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
|
||||
{
|
||||
return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
|
||||
}
|
||||
|
||||
/* translates Fn keycode to action */
|
||||
__attribute__ ((weak))
|
||||
action_t keymap_fn_to_action(uint8_t keycode)
|
||||
{
|
||||
return (action_t){ .code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) };
|
||||
}
|
||||
80
keyboard/ergodox/keymap_common.h
Normal file
80
keyboard/ergodox/keymap_common.h
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
/*
|
||||
Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
|
||||
Copyright 2016 Mark Sikora <marknsikora@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef KEYMAP_COMMON_H
|
||||
#define KEYMAP_COMMON_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <avr/pgmspace.h>
|
||||
#include "keycode.h"
|
||||
#include "action.h"
|
||||
#include "action_macro.h"
|
||||
#include "report.h"
|
||||
#include "host.h"
|
||||
#include "print.h"
|
||||
#include "debug.h"
|
||||
#include "keymap.h"
|
||||
|
||||
|
||||
extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
|
||||
extern const action_t fn_actions[];
|
||||
|
||||
|
||||
/* ErgoDox keymap definition macro */
|
||||
#define KEYMAP( \
|
||||
\
|
||||
/* left hand, spatial positions */ \
|
||||
k00,k01,k02,k03,k04,k05,k06, \
|
||||
k10,k11,k12,k13,k14,k15,k16, \
|
||||
k20,k21,k22,k23,k24,k25, \
|
||||
k30,k31,k32,k33,k34,k35,k36, \
|
||||
k40,k41,k42,k43,k44, \
|
||||
k55,k56, \
|
||||
k54, \
|
||||
k53,k52,k51, \
|
||||
\
|
||||
/* right hand, spatial positions */ \
|
||||
k07,k08,k09,k0A,k0B,k0C,k0D, \
|
||||
k17,k18,k19,k1A,k1B,k1C,k1D, \
|
||||
k28,k29,k2A,k2B,k2C,k2D, \
|
||||
k37,k38,k39,k3A,k3B,k3C,k3D, \
|
||||
k49,k4A,k4B,k4C,k4D, \
|
||||
k57,k58, \
|
||||
k59, \
|
||||
k5C,k5B,k5A ) \
|
||||
\
|
||||
/* matrix positions */ \
|
||||
{ \
|
||||
{ KC_##k00,KC_##k10,KC_##k20,KC_##k30,KC_##k40,KC_NO }, \
|
||||
{ KC_##k01,KC_##k11,KC_##k21,KC_##k31,KC_##k41,KC_##k51}, \
|
||||
{ KC_##k02,KC_##k12,KC_##k22,KC_##k32,KC_##k42,KC_##k52}, \
|
||||
{ KC_##k03,KC_##k13,KC_##k23,KC_##k33,KC_##k43,KC_##k53}, \
|
||||
{ KC_##k04,KC_##k14,KC_##k24,KC_##k34,KC_##k44,KC_##k54}, \
|
||||
{ KC_##k05,KC_##k15,KC_##k25,KC_##k35,KC_NO, KC_##k55}, \
|
||||
{ KC_##k06,KC_##k16,KC_NO, KC_##k36,KC_NO, KC_##k56}, \
|
||||
\
|
||||
{ KC_##k07,KC_##k17,KC_NO, KC_##k37,KC_NO, KC_##k57}, \
|
||||
{ KC_##k08,KC_##k18,KC_##k28,KC_##k38,KC_NO, KC_##k58}, \
|
||||
{ KC_##k09,KC_##k19,KC_##k29,KC_##k39,KC_##k49,KC_##k59}, \
|
||||
{ KC_##k0A,KC_##k1A,KC_##k2A,KC_##k3A,KC_##k4A,KC_##k5A}, \
|
||||
{ KC_##k0B,KC_##k1B,KC_##k2B,KC_##k3B,KC_##k4B,KC_##k5B}, \
|
||||
{ KC_##k0C,KC_##k1C,KC_##k2C,KC_##k3C,KC_##k4C,KC_##k5C}, \
|
||||
{ KC_##k0D,KC_##k1D,KC_##k2D,KC_##k3D,KC_##k4D,KC_NO } \
|
||||
}
|
||||
|
||||
#endif
|
||||
602
keyboard/ergodox/keymap_cub.c
Normal file
602
keyboard/ergodox/keymap_cub.c
Normal file
|
|
@ -0,0 +1,602 @@
|
|||
#include <util/delay.h>
|
||||
#include "action_layer.h"
|
||||
#include "action_util.h"
|
||||
#include "bootloader.h"
|
||||
#include "keymap_common.h"
|
||||
|
||||
|
||||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/*
|
||||
* Keymap: Default Layer in QWERTY
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | ~ | 1 | 2 | 3 | 4 | 5 | \ | | - | 6 | 7 | 8 | 9 | 0 | = |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | Tab | Q | W | E | R | T | ~L5 | | ~L6 | Y | U | I | O | P | [ |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | Tab/Shf| A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
|
||||
* |--------+------+------+------+------+------| L0 | | ~L7 |------+------+------+------+------+--------|
|
||||
* | LCtrl | Z | X | C | V | B | | | | N | M | , | . | / | ] |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | ~L5 | ~L2 | Caps | LAlt | LGui | | Lft | Up | Dn | Rght | ~L6 |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | +L2 | Home | | PgUp | Del |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | End | | PgDn | | |
|
||||
* | BkSp | ESC |------| |------| Enter| Space|
|
||||
* | | | Spc | | Ins | | |
|
||||
* `--------------------' `--------------------'
|
||||
*
|
||||
*
|
||||
*
|
||||
****************************************************************************************************
|
||||
*
|
||||
* Under XOrg, I use my own mapping from QWERTY to "Workman for Programmers"
|
||||
* See XOrg files in ./addons/ subdirectory.
|
||||
*
|
||||
* I have to do so, because of two things:
|
||||
* 1) my native language is Russian, and XOrg keymap for it is based on QWERTY layout
|
||||
* 2) I want to have non-standart shifted keys, like $ (as normal) and @ (as shifted), or _ and -
|
||||
*
|
||||
* And even if (2) could be solved using FN* keys (but there is limit in firmware for only 32 such
|
||||
* keys), then (1) can't be solved at firmware level at all.
|
||||
*
|
||||
* So, I have to stick with QWERTY as my main layout + my own XOrg keyboard layout for English.
|
||||
* But sometimes I have to input something when XOrg is not active - for example, in Linux console,
|
||||
* or in firmware console (while debugging firmware), or when keyboard is connected to not my computer.
|
||||
*
|
||||
* For such cases I have Layer1 :)
|
||||
* // hint: switch to Layer1 is only at Layer6
|
||||
*
|
||||
****************************************************************************************************
|
||||
*
|
||||
*
|
||||
*
|
||||
* Keymap: Default Layer in Workman
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | ~ | ; | ! | # | { | } | ' | | ^ | [ | ] | * | ( | ) | = |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | Tab | Q | D | R | W | B | NO | | ~L7 | J | F | U | P | $ | : |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | Tab/Shf| A | S | H | T | G |------| |------| Y | N | E | O | I | - |
|
||||
* |--------+------+------+------+------+------| Home | | End |------+------+------+------+------+--------|
|
||||
* | LCtrl | Z | X | M | C | V | | | | K | L | , | . | / | | |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | ~L5 | ~L2 | Caps | LAlt | LGui | | Lft | Up | Dn | Rght | ~L6 |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | L0 | +L2 | | PgUp | Del |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | NO | | PgDn | | |
|
||||
* | BkSp | ESC |------| |------| Enter| Space|
|
||||
* | | | Spc | | Ins | | |
|
||||
* `--------------------' `--------------------'
|
||||
*
|
||||
* Keymap: Default Layer in Workman / with Shift
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | ` | 1 | 2 | 3 | 4 | 5 | " | | \ | 6 | 7 | 8 | 9 | 0 | + |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | Tab | Q | D | R | W | B | NO | | ~L7 | J | F | U | P | @ | % |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | Tab/Shf| A | S | H | T | G |------| |------| Y | N | E | O | I | _ |
|
||||
* |--------+------+------+------+------+------| Home | | End |------+------+------+------+------+--------|
|
||||
* | LCtrl | Z | X | M | C | V | | | | K | L | , | . | / | & |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | ~L5 | ~L2 | Caps | LAlt | LGui | | Lft | Up | Dn | Rght | ~L6 |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | L0 | +L2 | | PgUp | Del |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | NO | | PgDn | | |
|
||||
* | BkSp | ESC |------| |------| Enter| Space|
|
||||
* | | | Spc | | Ins | | |
|
||||
* `--------------------' `--------------------'
|
||||
*
|
||||
*/
|
||||
|
||||
KEYMAP( // Layer0: default, leftled:none
|
||||
// left hand
|
||||
GRV, 1, 2, 3, 4, 5, BSLS,
|
||||
FN2, Q, W, E, R, T, FN23,
|
||||
FN11,FN28,FN29,FN30,FN31,G,
|
||||
FN12,FN24,FN25,FN26,FN27,B, HOME,
|
||||
FN21,FN20,CAPS,FN13,FN14,
|
||||
FN17,FN19,
|
||||
NO,
|
||||
FN5, FN6, FN7,
|
||||
// right hand
|
||||
MINS,6, 7, 8, 9, 0, EQL,
|
||||
FN23,Y, U, I, O, P, LBRC,
|
||||
H, J, K, L, SCLN,FN15,
|
||||
END, N, M, COMM,DOT, SLSH,FN16,
|
||||
LEFT,UP, DOWN,RGHT,FN22,
|
||||
PGUP,DEL,
|
||||
PGDN,
|
||||
FN8, FN9, FN10
|
||||
),
|
||||
|
||||
KEYMAP( // Layer1: Workman layout, leftled:all
|
||||
// left hand
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,Q, D, R, W, B, TRNS,
|
||||
TRNS,A, S, H, T, G,
|
||||
TRNS,Z, X, M, C, V, TRNS,
|
||||
TRNS,TRNS,FN17,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS,
|
||||
// right hand
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,J, F, U, P, 4, TRNS,
|
||||
Y, N, E, O, I, TRNS,
|
||||
TRNS,K, L, TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS
|
||||
),
|
||||
|
||||
KEYMAP( // Layer2: numpad, leftled:mid/blue
|
||||
// left hand
|
||||
TRNS,NO, NO, NO, NO, PAUS,PSCR,
|
||||
TRNS,NO, NO, NO, NO, NO, TRNS,
|
||||
TRNS,NO, NO, NO, TRNS,NO,
|
||||
TRNS,NO, NO, NO, TRNS,NO, TRNS,
|
||||
TRNS,TRNS,FN17,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS,
|
||||
// right hand
|
||||
SLCK,NLCK,PSLS,PAST,PAST,PMNS,BSPC,
|
||||
TRNS,NO, P7, P8, P9, PMNS,PGUP,
|
||||
NO, P4, P5, P6, PPLS,PGDN,
|
||||
TRNS,NO, P1, P2, P3, PPLS,PENT,
|
||||
P0, PDOT,SLSH,PENT,PENT,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS
|
||||
),
|
||||
|
||||
KEYMAP( // Layer3: F-keys + PgUp/PgDn on right hand, leftled:bot/green
|
||||
// left hand
|
||||
TRNS,NO, NO, NO, NO, NO, NO,
|
||||
TRNS,NO, NO, NO, NO, NO, TRNS,
|
||||
TRNS,NO, TRNS,NO, NO, NO,
|
||||
TRNS,NO, TRNS,NO, NO, NO, TRNS,
|
||||
TRNS,TRNS,TRNS,LALT,LGUI,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
LCTL,LSFT,TRNS,
|
||||
// right hand
|
||||
NO, NO, NO, NO, NO, NO, TRNS,
|
||||
TRNS,NO, F1, F2, F3, F4, PGUP,
|
||||
NO, F5, F6, F7, F8, PGDN,
|
||||
TRNS,NO, F9, F10, F11, F12, APP,
|
||||
RGUI,RALT,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,RSFT,RCTL
|
||||
),
|
||||
|
||||
KEYMAP( // Layer4: unconvenient keys on right hand, leftled:top/white
|
||||
// left hand
|
||||
TRNS,NO, NO, NO, NO, NO, NO,
|
||||
TRNS,NO, NO, NO, NO, NO, TRNS,
|
||||
TRNS,TRNS,NO, NO, NO, NO,
|
||||
TRNS,TRNS,NO, NO, NO, NO, TRNS,
|
||||
TRNS,TRNS,TRNS,LALT,LGUI,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS,
|
||||
|
||||
/* in Workman right hand will be:
|
||||
{ } ( ) +
|
||||
^ ! ? =
|
||||
' ! $ " ; \
|
||||
# [ < > ] \
|
||||
*/
|
||||
|
||||
// right hand
|
||||
NO, NO, 4, 5, 9, 0, PPLS,
|
||||
TRNS,MINS,2, FN5, 9, 0, EQL,
|
||||
BSLS,2, P, FN1, 1, FN2,
|
||||
TRNS,3, 6, FN3, FN4, 7, FN2,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS
|
||||
),
|
||||
|
||||
KEYMAP( // Layer5: F-keys instead of numbers, leftled:top/white
|
||||
// left hand
|
||||
TRNS,F1, F2, F3, F4, F5, F6,
|
||||
TRNS,P1, P2, P3, P4, P5, TRNS,
|
||||
TRNS,TRNS,TRNS,E, TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS,
|
||||
// right hand
|
||||
F7, F8, F9, F10, F11, F12, TRNS,
|
||||
TRNS,P6, P7, P8, P9, P0, TRNS,
|
||||
TRNS,U, TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS
|
||||
),
|
||||
|
||||
KEYMAP( // Layer6: F-keys + utils(Teensy, Workman-layer switch), leftled:top/white+onboard
|
||||
// left hand
|
||||
FN0, F1, F2, F3, F4, F5, F6,
|
||||
TRNS,P1, P2, P3, P4, P5, TRNS,
|
||||
TRNS,TRNS,TRNS,E, TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
FN18,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS,
|
||||
// right hand
|
||||
F7, F8, F9, F10, F11, F12, FN0,
|
||||
TRNS,P6, P7, P8, P9, P0, TRNS,
|
||||
TRNS,U, TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS
|
||||
),
|
||||
|
||||
//
|
||||
// rarely used
|
||||
//
|
||||
|
||||
KEYMAP( // Layer7: F-keys only, leftled:top/white
|
||||
// left hand
|
||||
FN0, NO, NO, NO, NO, NO, NO,
|
||||
FN1, F13, F14, F15, F16, NO, TRNS,
|
||||
TRNS,F17, F18, F19, F20, NO,
|
||||
TRNS,F21, F22, F23, F24, NO, TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS,
|
||||
// right hand
|
||||
NO, NO, NO, NO, NO, NO, TRNS,
|
||||
TRNS,NO, F1, F2, F3, F4, TRNS,
|
||||
NO, F5, F6, F7, F8, TRNS,
|
||||
TRNS,NO, F9, F10, F11, F12, TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
SLEP,TRNS,TRNS
|
||||
),
|
||||
|
||||
KEYMAP( // Layer8: mouse and navigation, leftled:mid/blue+bot/green
|
||||
// left hand
|
||||
TRNS,NO, NO, NO, NO, NO, NO,
|
||||
TRNS,NO, NO, NO, ACL0,NO, TRNS,
|
||||
TRNS,NO, NO, TRNS,ACL1,NO,
|
||||
TRNS,NO, NO, TRNS,ACL2,NO, TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS,
|
||||
|
||||
// right hand
|
||||
F16, MPLY,MPRV,MNXT,VOLD,VOLU,MUTE,
|
||||
F14, BTN2,WH_L,WH_U,WH_D,WH_R,PGUP,
|
||||
BTN1,MS_L,MS_U,MS_D,MS_R,PGDN,
|
||||
F15, BTN3,HOME,END, DEL, INS, NO,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS
|
||||
),
|
||||
|
||||
KEYMAP( // Layer9: application-specific shortcuts (mostly browser), leftled:top/white+bot/green
|
||||
// left hand
|
||||
TRNS,NO, NO, NO, NO, NO, NO,
|
||||
TRNS,NO, NO, NO, NO, NO, TRNS,
|
||||
TRNS,NO, NO, NO, NO, NO,
|
||||
TRNS,NO, NO, NO, TRNS,NO, TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS,
|
||||
// right hand
|
||||
NO, NO, NO, NO, NO, NO, TRNS,
|
||||
TRNS,NO, FN12,FN13,FN14,FN15,FN10,
|
||||
FN1, FN2, FN3, FN4, FN5, FN11,
|
||||
TRNS,TRNS,FN6, FN7, FN8, FN9, FN0,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS
|
||||
),
|
||||
|
||||
/*
|
||||
// templates to copy from
|
||||
|
||||
KEYMAP( // LayerN: transparent on edges + hard-defined thumb keys, all others are empty
|
||||
// left hand
|
||||
TRNS,NO, NO, NO, NO, NO, NO,
|
||||
TRNS,NO, NO, NO, NO, NO, TRNS,
|
||||
TRNS,NO, NO, NO, NO, NO,
|
||||
TRNS,NO, NO, NO, NO, NO, TRNS,
|
||||
TRNS,TRNS,TRNS,LALT,LGUI,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
LCTL,LSFT,TRNS,
|
||||
// right hand
|
||||
NO, NO, NO, NO, NO, NO, TRNS,
|
||||
TRNS,NO, NO, NO, NO, NO, TRNS,
|
||||
NO, NO, NO, NO, NO, TRNS,
|
||||
TRNS,NO, NO, NO, NO, NO, TRNS,
|
||||
RGUI,RALT,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,RSFT,RCTL
|
||||
),
|
||||
KEYMAP( // LayerN: fully transparent
|
||||
// left hand
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS,
|
||||
// right hand
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS
|
||||
),
|
||||
*/
|
||||
|
||||
};
|
||||
|
||||
/* id for user defined functions & macros */
|
||||
enum function_id {
|
||||
TEENSY_KEY,
|
||||
CUSTOM_KEY,
|
||||
L_CTRL_ALT_ENT,
|
||||
R_CTRL_ALT_ENT,
|
||||
};
|
||||
|
||||
enum macro_id {
|
||||
XMONAD_RESET,
|
||||
PASSWORD1,
|
||||
PASSWORD2,
|
||||
PASSWORD3,
|
||||
};
|
||||
|
||||
/*
|
||||
* Fn action definition
|
||||
*/
|
||||
const action_t PROGMEM fn_actions[] = {
|
||||
[0] = ACTION_FUNCTION(TEENSY_KEY), // FN0 - Teensy key
|
||||
|
||||
[1] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS), // FN1 = Shifted BackSlash // " in Workman
|
||||
[2] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS), // FN2 = Shifted Minus // \ in Workman
|
||||
[3] = ACTION_MODS_KEY(MOD_LSFT, KC_COMM), // FN3 = Shifted comma // < in Workman
|
||||
[4] = ACTION_MODS_KEY(MOD_LSFT, KC_DOT), // FN4 = Shifted dot // > in Workman
|
||||
|
||||
[5] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_BSPC), // FN5 = LShift with tap BackSpace
|
||||
[6] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_DEL), // FN6 = LCtrl with tap Delete
|
||||
[7] = ACTION_MODS_TAP_KEY(MOD_LALT, KC_ESC), // FN7 = LAlt with tap Escape
|
||||
[8] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_INS), // FN8 = RGui with tap Ins
|
||||
[9] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT), // FN9 = RShift with tap Enter
|
||||
[10] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_SPC), // FN10 = RCtrl with tap Space
|
||||
|
||||
[11] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_TAB), // FN11 = LShift with tap Tab
|
||||
[12] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_GRV), // FN12 = LCtrl with tap Tilda
|
||||
[13] = ACTION_MODS_TAP_KEY(MOD_LALT, KC_SPC), // FN13 = LAlt with tap Space
|
||||
[14] = ACTION_MODS_TAP_KEY(MOD_LGUI, KC_ESC), // FN14 = LGui with tap Escape
|
||||
[15] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_QUOT), // FN15 = RShift with tap quotes
|
||||
[16] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RBRC), // FN16 = RCtrl with tap ]
|
||||
|
||||
[17] = ACTION_LAYER_SET(0, ON_BOTH), // FN17 - set Layer0
|
||||
[18] = ACTION_LAYER_SET(1, ON_BOTH), // FN18 - set Layer1, to use Workman layout at firmware level
|
||||
[19] = ACTION_LAYER_SET(2, ON_BOTH), // FN19 - set Layer2, to use with Numpad keys
|
||||
|
||||
[21] = ACTION_FUNCTION_TAP(L_CTRL_ALT_ENT), // FN21 - momentary Layer5+CTRL+ALT on Enter, to use with F* keys on top row
|
||||
[22] = ACTION_FUNCTION_TAP(R_CTRL_ALT_ENT), // FN22 - momentary Layer6+CTRL+ALT on Enter, to use with F* keys on top row + utils
|
||||
|
||||
[28] = ACTION_LAYER_TAP_KEY(4, KC_A), // FN28 = momentary Layer4 on A key, to use with unconvenient keys
|
||||
[29] = ACTION_LAYER_TAP_KEY(3, KC_S), // FN29 = momentary Layer3 on S key, to use with F* keys
|
||||
[30] = ACTION_LAYER_TAP_KEY(8, KC_D), // FN30 = momentary Layer8 on D key, to use with mouse and navigation keys
|
||||
[31] = ACTION_LAYER_TAP_KEY(2, KC_F), // FN31 = momentary Layer2 on F key, to use with Numpad keys
|
||||
|
||||
// i'd like to remove this - will try to get used to live without this and convert them to usual keys
|
||||
[20] = ACTION_LAYER_MOMENTARY(2), // FN20 - momentary Layer2, to use with Numpad keys
|
||||
// or
|
||||
// [20] = ACTION_FUNCTION_TAP(CUSTOM_KEY), // FN20 - use custom key, with tapping support
|
||||
|
||||
[23] = ACTION_LAYER_TAP_KEY(7, KC_BSLS), // FN23 - momentary Layer7 on ' , to use with F* keys (F1-F24)
|
||||
|
||||
[24] = ACTION_LAYER_TAP_KEY(4, KC_Z), // FN24 = momentary Layer4 on Z key, to use with unconvenient keys
|
||||
[25] = ACTION_LAYER_TAP_KEY(3, KC_X), // FN25 = momentary Layer3 on X key, to use with F* keys
|
||||
[26] = ACTION_LAYER_TAP_KEY(8, KC_C), // FN26 = momentary Layer8 on C key, to use with mouse and navigation keys
|
||||
[27] = ACTION_LAYER_TAP_KEY(9, KC_V), // FN27 = momentary Layer9 on V key, to use with application-specific shortcuts
|
||||
};
|
||||
|
||||
const action_t PROGMEM fn_actions_4[] = {
|
||||
[1] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS), // FN1 = Shifted BackSlash // " in Workman
|
||||
[2] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS), // FN2 = Shifted Minus // \ in Workman
|
||||
[3] = ACTION_MODS_KEY(MOD_LSFT, KC_COMM), // FN3 = Shifted comma // < in Workman
|
||||
[4] = ACTION_MODS_KEY(MOD_LSFT, KC_DOT), // FN4 = Shifted dot // > in Workman
|
||||
[5] = ACTION_MODS_KEY(MOD_LSFT, KC_SLSH), // FN5 = Shifted slash // ? in Workman
|
||||
};
|
||||
|
||||
const action_t PROGMEM fn_actions_7[] = {
|
||||
[0] = ACTION_MACRO(XMONAD_RESET), // FN0 = xmonad-reanimator
|
||||
[1] = ACTION_MACRO(PASSWORD1), // FN1 = default password
|
||||
[2] = ACTION_MACRO(PASSWORD1), // FN2 = other password
|
||||
[3] = ACTION_MACRO(PASSWORD1), // FN3 = mega password
|
||||
};
|
||||
|
||||
const action_t PROGMEM fn_actions_9[] = {
|
||||
[0] = ACTION_MODS_KEY(MOD_LCTL, KC_P0), // FN0 = Ctrl+0
|
||||
[1] = ACTION_MODS_KEY(MOD_LALT, KC_P1), // FN1 = Alt+1
|
||||
[2] = ACTION_MODS_KEY(MOD_LALT, KC_P2), // FN2 = Alt+2
|
||||
[3] = ACTION_MODS_KEY(MOD_LALT, KC_P3), // FN3 = Alt+3
|
||||
[4] = ACTION_MODS_KEY(MOD_LALT, KC_P4), // FN4 = Alt+4
|
||||
[5] = ACTION_MODS_KEY(MOD_LALT, KC_P5), // FN5 = Alt+5
|
||||
[6] = ACTION_MODS_KEY(MOD_LALT, KC_P6), // FN6 = Alt+6
|
||||
[7] = ACTION_MODS_KEY(MOD_LALT, KC_P7), // FN7 = Alt+7
|
||||
[8] = ACTION_MODS_KEY(MOD_LALT, KC_P8), // FN8 = Alt+8
|
||||
[9] = ACTION_MODS_KEY(MOD_LALT, KC_P9), // FN9 = Alt+9
|
||||
[10] = ACTION_MODS_KEY(MOD_LCTL|MOD_LSFT, KC_TAB), // FN10 = Ctrl+Shift+Tab
|
||||
[11] = ACTION_MODS_KEY(MOD_LCTL, KC_TAB), // FN11 = Ctrl+Tab
|
||||
[12] = ACTION_MODS_KEY(MOD_LCTL|MOD_LSFT, KC_PGUP), // FN12 = Ctrl+Shift+PgUp
|
||||
[13] = ACTION_MODS_KEY(MOD_LCTL|MOD_LSFT, KC_PGDN), // FN13 = Ctrl+Shift+PgDn
|
||||
[14] = ACTION_MODS_KEY(MOD_LCTL, KC_PMNS), // FN14 = Ctrl+Pad Minus
|
||||
[15] = ACTION_MODS_KEY(MOD_LCTL, KC_PPLS), // FN15 = Ctrl+Pad Plus
|
||||
};
|
||||
|
||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
{
|
||||
// print("action_function called\n");
|
||||
// print("id = "); phex(id); print("\n");
|
||||
// print("opt = "); phex(opt); print("\n");
|
||||
|
||||
if (id == TEENSY_KEY) {
|
||||
clear_keyboard();
|
||||
print("\n\nJump to bootloader... ");
|
||||
_delay_ms(50);
|
||||
bootloader_jump(); // should not return
|
||||
print("not supported.\n");
|
||||
}
|
||||
|
||||
if (id == L_CTRL_ALT_ENT || id == R_CTRL_ALT_ENT) {
|
||||
if (record->tap.count == 0 || record->tap.interrupted) {
|
||||
uint8_t weak_mods;
|
||||
uint8_t layer;
|
||||
|
||||
if (id == L_CTRL_ALT_ENT) {
|
||||
weak_mods = MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT);
|
||||
layer = 5;
|
||||
} else {
|
||||
weak_mods = MOD_BIT(KC_RCTL) | MOD_BIT(KC_RALT);
|
||||
layer = 6;
|
||||
}
|
||||
|
||||
if (record->event.pressed) {
|
||||
layer_on(layer);
|
||||
add_weak_mods(weak_mods);
|
||||
} else {
|
||||
del_weak_mods(weak_mods);
|
||||
layer_off(layer);
|
||||
}
|
||||
} else {
|
||||
if (record->event.pressed) {
|
||||
add_key(KC_ENT);
|
||||
send_keyboard_report();
|
||||
} else {
|
||||
del_key(KC_ENT);
|
||||
send_keyboard_report();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* just an example of custom key implementation
|
||||
* not really needed with custom keymap_fn_to_action(),
|
||||
* because it will allow you to have 32 FN** keys on EACH layer
|
||||
*/
|
||||
|
||||
/*
|
||||
keyevent_t event = record->event;
|
||||
|
||||
if (id == CUSTOM_KEY) {
|
||||
uint8_t layer = biton32(layer_state);
|
||||
uint8_t col = event.key.col;
|
||||
uint8_t row = event.key.row;
|
||||
uint8_t handled = 0;
|
||||
|
||||
if (event.pressed) {
|
||||
if (layer == XXX && col == XXX && row == XXX) {
|
||||
action_macro_play(
|
||||
MACRO(
|
||||
...........
|
||||
END)
|
||||
);
|
||||
handled++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!handled) {
|
||||
print("custom key not handled");
|
||||
print(": layer "); pdec(layer);
|
||||
print(", col "); pdec(col);
|
||||
print(", row "); pdec(row);
|
||||
print("\n");
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
#include "keymap_passwords.h"
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||
if (record->event.pressed) {
|
||||
switch (id) {
|
||||
case XMONAD_RESET: return MACRO_XMONAD_RESET;
|
||||
case PASSWORD1: return MACRO_PASSWORD1;
|
||||
}
|
||||
}
|
||||
return MACRO_NONE;
|
||||
}
|
||||
|
||||
#define FN_ACTIONS_SIZE (sizeof(fn_actions) / sizeof(fn_actions[0]))
|
||||
#define FN_ACTIONS_4_SIZE (sizeof(fn_actions_4) / sizeof(fn_actions_4[0]))
|
||||
#define FN_ACTIONS_7_SIZE (sizeof(fn_actions_7) / sizeof(fn_actions_7[0]))
|
||||
#define FN_ACTIONS_9_SIZE (sizeof(fn_actions_9) / sizeof(fn_actions_9[0]))
|
||||
|
||||
/*
|
||||
* translates Fn keycode to action
|
||||
* for some layers, use different translation table
|
||||
*/
|
||||
action_t keymap_fn_to_action(uint8_t keycode)
|
||||
{
|
||||
uint8_t layer = biton32(layer_state);
|
||||
|
||||
action_t action;
|
||||
action.code = ACTION_NO;
|
||||
|
||||
if (layer == 4 && FN_INDEX(keycode) < FN_ACTIONS_4_SIZE) {
|
||||
action.code = pgm_read_word(&fn_actions_4[FN_INDEX(keycode)]);
|
||||
}
|
||||
|
||||
if (layer == 7 && FN_INDEX(keycode) < FN_ACTIONS_7_SIZE) {
|
||||
action.code = pgm_read_word(&fn_actions_7[FN_INDEX(keycode)]);
|
||||
}
|
||||
|
||||
if (layer == 9 && FN_INDEX(keycode) < FN_ACTIONS_9_SIZE) {
|
||||
action.code = pgm_read_word(&fn_actions_9[FN_INDEX(keycode)]);
|
||||
}
|
||||
|
||||
// by default, use fn_actions from default layer 0
|
||||
// this is needed to get mapping for same key, that was used switch to some layer,
|
||||
// to have possibility to switch layers back
|
||||
if (action.code == ACTION_NO && FN_INDEX(keycode) < FN_ACTIONS_SIZE) {
|
||||
action.code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]);
|
||||
}
|
||||
|
||||
return action;
|
||||
}
|
||||
|
||||
232
keyboard/ergodox/keymap_dvorak.c
Normal file
232
keyboard/ergodox/keymap_dvorak.c
Normal file
|
|
@ -0,0 +1,232 @@
|
|||
#include "bootloader.h"
|
||||
#include "keymap_common.h"
|
||||
|
||||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/*
|
||||
* Keymap: Default Layer in Dvorak (Layer 0)
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | + | 1 | 2 | 3 | 4 | 5 | Esc | | ESC | 6 | 7 | 8 | 9 | 0 | - |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | Tab | ' | , | . | Y | Y |(Null)| |(Null)| F | G | C | R | L | / |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | CapsLk | A | O | E | U | I |------| |------| D | H | T | N | S | \ |
|
||||
* |--------+------+------+------+------+------| FN1 | | FN2 |------+------+------+------+------+--------|
|
||||
* | LShift | Z | X | C | V | X | | | | B | M | W | V | Z | RShift |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | LGUI | ` | INS | Left | Rght | | Up | Dn | [ | ] | RGUI |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | LCtr | LAlt | | Ralt | RCtr |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | Home | | PgUp | | |
|
||||
* | BkSp | Del |------| |------| Enter| Space|
|
||||
* | | | End | | PgDn | | |
|
||||
* `--------------------' `--------------------'
|
||||
*
|
||||
*
|
||||
*****************************************************************************************************
|
||||
* This Dvorak keyboard layout stems from my early Kinesis years, using the Contour PS/2 with a Dvorak
|
||||
* software layout. Because of this, the RBRC and LBRC were on opposite sides of the board in the cor-
|
||||
* ner keys. I've decided to continue using this layout with my ErgoDox.
|
||||
*/
|
||||
|
||||
KEYMAP( // layer 0 : default
|
||||
// left hand
|
||||
EQL, 1, 2, 3, 4, 5, ESC,
|
||||
TAB, QUOT, COMM, DOT, P, Y, NO,
|
||||
CAPS, A, O, E, U, I,
|
||||
LSFT, SCLN, Q, J, K, X, FN1,
|
||||
LGUI, GRV, INS,LEFT,RGHT,
|
||||
LCTL,LALT,
|
||||
HOME,
|
||||
BSPC,DEL, END,
|
||||
// right hand
|
||||
ESC, 6, 7, 8, 9, 0, MINS,
|
||||
NO, F, G, C, R, L, SLSH,
|
||||
D, H, T, N, S, BSLS,
|
||||
FN2, B, M, W, V, Z, RSFT,
|
||||
UP,DOWN,RBRC,LBRC, RGUI,
|
||||
RALT,RCTL,
|
||||
PGUP,
|
||||
PGDN,ENT, SPC
|
||||
),
|
||||
|
||||
|
||||
/*
|
||||
* Keymap: Function and Media Keys Layer (Layer 1)
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | TEENSY | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | Mute |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | | | | | | | FN4 | | FN6 | | PrSc | ScLk | Paus | | Vol Up |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | | | | | | |------| |------| Stop | Prev | Play | Next | Sel | Vol Dn |
|
||||
* |--------+------+------+------+------+------| FN4 | | FN7 |------+------+------+------+------+--------|
|
||||
* | | | | | | | | | | | | | | | |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | | | | | | | | | | | |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | | | | | |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | | | | | |
|
||||
* | | |------| |------| | |
|
||||
* | | | | | | | |
|
||||
* `--------------------' `--------------------'
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
KEYMAP( // layer 1 : function and media keys
|
||||
// left hand
|
||||
FN0, F1, F2, F3, F4, F5, F11,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,FN4,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,FN4,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS,
|
||||
// right hand
|
||||
F12, F6, F7, F8, F9, F10, MUTE,
|
||||
FN6, TRNS,PSCR,SLCK,PAUS,TRNS,VOLU,
|
||||
MSTP,MPRV,MPLY,MNXT,MSEL,VOLD,
|
||||
FN7, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS
|
||||
),
|
||||
|
||||
|
||||
/*
|
||||
* Keymap: Numpad Layer (Layer 2)
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | Power | | | | | | | | | | NmLk | KP / | KP * | KP - | |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | Sleep | | | | | | FN5 | | FN4 | | KP 7 | KP 8 | KP 9 | KP + | |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | Wake | | | | | |------| |------| | KP 4 | KP 5 | KP 6 | KP + | |
|
||||
* |--------+------+------+------+------+------| FN7 | | FN4 |------+------+------+------+------+--------|
|
||||
* | | | | | | | | | | | KP 1 | KP 2 | KP 3 |KP Ent| |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | | | | | | | KP 0 | | KP . |KP Ent| |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | | | | | |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | | | | | |
|
||||
* | | |------| |------| | |
|
||||
* | | | | | | | |
|
||||
* `--------------------' `--------------------'
|
||||
*
|
||||
*/
|
||||
|
||||
KEYMAP( // layer 2: numpad
|
||||
// left hand
|
||||
PWR, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
SLEP,TRNS,TRNS,TRNS,TRNS,TRNS, FN5,
|
||||
WAKE,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, FN7,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS,
|
||||
// right hand
|
||||
TRNS,TRNS,NLCK,PSLS,PAST,PMNS,TRNS,
|
||||
FN4,NO, P7, P8, P9, PPLS,TRNS,
|
||||
NO, P4, P5, P6, PPLS,TRNS,
|
||||
FN4,NO, P1, P2, P3, PENT,TRNS,
|
||||
P0, TRNS,PDOT,PENT,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS
|
||||
),
|
||||
|
||||
|
||||
/*
|
||||
* Keymap: QWERTY Gaming Layer (Layer 3)
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | Tab | Q | W | E | R | T | Fn4 | | Fn4 | Y | U | I | O | P | [ |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | CapsLk | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
|
||||
* |--------+------+------+------+------+------| Fn1 | | Fn2 |------+------+------+------+------+--------|
|
||||
* | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | LGUI | ` | INS | Left | Rght | | Up | Dn | [ | ] | RGUI |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | LCtr | LAlt | | Ralt | RCtr |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | Home | | PgUp | | |
|
||||
* | BkSp | Del |------| |------| Enter| Space|
|
||||
* | | | End | | PgDn | | |
|
||||
* `--------------------' `--------------------'
|
||||
*
|
||||
*/
|
||||
|
||||
KEYMAP( // layer 3 : QWERTY Gaming
|
||||
// left hand
|
||||
EQL, 1, 2, 3, 4, 5, ESC,
|
||||
TAB, Q, W, E, R, T, FN4,
|
||||
CAPS,A, S, D, F, G,
|
||||
LSFT,Z, X, C, V, B, FN1,
|
||||
LGUI,GRV, INS,LEFT,RGHT,
|
||||
LCTL,LALT,
|
||||
HOME,
|
||||
BSPC,DEL, END,
|
||||
// right hand
|
||||
ESC, 6, 7, 8, 9, 0, MINS,
|
||||
FN4, Y, U, I, O, P, BSLS,
|
||||
H, J, K, L, SCLN,QUOT,
|
||||
FN2, N, M, COMM,DOT, SLSH,RSFT,
|
||||
UP,DOWN,LBRC,RBRC,RGUI,
|
||||
RALT,RCTL,
|
||||
PGUP,
|
||||
PGDN,ENT, SPC
|
||||
),
|
||||
|
||||
};
|
||||
|
||||
/* id for user defined functions & macros */
|
||||
enum function_id {
|
||||
TEENSY_KEY,
|
||||
};
|
||||
|
||||
/*
|
||||
* Fn action definition
|
||||
*/
|
||||
const action_t PROGMEM fn_actions[] = {
|
||||
ACTION_FUNCTION(TEENSY_KEY), // FN0 - Teensy key
|
||||
ACTION_LAYER_MOMENTARY(1), // FN1 - switch to Layer1
|
||||
ACTION_LAYER_MOMENTARY(2), // FN2 - switch to Layer2
|
||||
ACTION_LAYER_MOMENTARY(3), // FN3 - switch to Layer3
|
||||
ACTION_LAYER_SET_CLEAR(0), // FN4 - set Layer0
|
||||
ACTION_LAYER_SET(1, ON_PRESS), // FN5 - set Layer1
|
||||
ACTION_LAYER_SET(2, ON_PRESS), // FN6 - set Layer2
|
||||
ACTION_LAYER_SET(3, ON_PRESS), // FN7 - set Layer3
|
||||
};
|
||||
|
||||
/*
|
||||
* Defining the Teensy Key action_function
|
||||
*/
|
||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
{
|
||||
// print("action_function called\n");
|
||||
// print("id = "); phex(id); print("\n");
|
||||
// print("opt = "); phex(opt); print("\n");
|
||||
|
||||
if (id == TEENSY_KEY) {
|
||||
clear_keyboard();
|
||||
print("\n\nJump to bootloader... ");
|
||||
_delay_ms(50);
|
||||
bootloader_jump(); // should not return
|
||||
print("not supported.\n");
|
||||
}
|
||||
|
||||
}
|
||||
199
keyboard/ergodox/keymap_max.c
Normal file
199
keyboard/ergodox/keymap_max.c
Normal file
|
|
@ -0,0 +1,199 @@
|
|||
/*
|
||||
Copyright 2016 Paul Williamson <squarefrog@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include <util/delay.h>
|
||||
#include "bootloader.h"
|
||||
#include "keymap_common.h"
|
||||
|
||||
|
||||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
/*
|
||||
* Keymap 0: Default Colemak Layer
|
||||
*
|
||||
* This is a general purpose Colemak layout which should serve as a good
|
||||
* basis for your own custom layout. Mac users may want to swap the
|
||||
* position of the Alt and GUI keys.
|
||||
*
|
||||
* ,--------------------------------------------------. ,-------------------------------------------------.
|
||||
* | Esc | 1 | 2 | 3 | 4 | 5 | ~# | | | 6 | 7 | 8 | 9 | 0 | - |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | Tab | Q | W | F | P | G | [ | | ] | J | L | U | Y | ; | + |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | LShift | A | R | S | T | D |------| |------| H | N | E | I | O | ' |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | \ | Z | X | C | V | B | | | | K | M | , | . | / | RShift |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | PScrn| | LAlt | Home | BkSp | | Del | End | RAlt | | RCtrl |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | | L1 | | PgUp | PgDn |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | | | RAlt | | |
|
||||
* |Space | LCtrl|------| |------| LAlt | Enter|
|
||||
* | | | LGui | | ~L2 | | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
|
||||
KEYMAP(
|
||||
// left hand
|
||||
ESC, 1, 2, 3, 4, 5, NUHS,
|
||||
TAB, Q, W, F, P, G, LBRC,
|
||||
LSFT,A, R, S, T, D,
|
||||
NUBS,Z, X, C, V, B, NO,
|
||||
PSCREEN, NO, LALT, HOME ,BSPC,
|
||||
NO, FN1,
|
||||
NO,
|
||||
SPC,LCTL, LGUI,
|
||||
// right hand
|
||||
NO,6, 7, 8, 9, 0, MINS,
|
||||
RBRC,J, L, U, Y, SCLN,EQL,
|
||||
H, N, E, I, O, QUOT,
|
||||
NO, K, M, COMM,DOT, SLSH,RSFT,
|
||||
DEL, END, RALT,NO, RCTL,
|
||||
PGUP,PGDN,
|
||||
RALT,
|
||||
FN2,LALT, ENT
|
||||
),
|
||||
|
||||
/*
|
||||
* Keymap 1: Default qwerty Layer
|
||||
*
|
||||
* This is a general purpose Colemak layout which should serve as a good
|
||||
* basis for your own custom layout. Mac users may want to swap the
|
||||
* position of the Alt and GUI keys.
|
||||
*
|
||||
* ,--------------------------------------------------. ,-------------------------------------------------.
|
||||
* | Esc | 1 | 2 | 3 | 4 | 5 | ~# | | | 6 | 7 | 8 | 9 | 0 | - |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | + |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | LShift | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | \ | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | | | LAlt | Home | BkSp | | Del | End | RAlt | | RCtrl |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | | L0 | | PgUp | PgDn |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | | | RAlt | | |
|
||||
* |Space | LCtrl|------| |------| LAlt | Enter|
|
||||
* | | | LGui | | ~L2 | | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
|
||||
KEYMAP(
|
||||
// left hand
|
||||
ESC, 1, 2, 3, 4, 5, NUHS,
|
||||
TAB, Q, W, E, R, T, LBRC,
|
||||
LSFT,A, S, D, F, G,
|
||||
NUBS,Z, X, C, V, B, NO,
|
||||
NO, NO, LALT, HOME ,BSPC,
|
||||
NO, FN0,
|
||||
NO,
|
||||
SPC,LCTL, LGUI,
|
||||
// right hand
|
||||
NO, 6, 7, 8, 9, 0, MINS,
|
||||
RBRC,Y, U, I, O, P, EQL,
|
||||
H, J, K, L, SCLN,QUOT,
|
||||
NO, N, M, COMM,DOT, SLSH,RSFT,
|
||||
DEL, END, RALT,NO, RCTL,
|
||||
PGUP,PGDN,
|
||||
RALT,
|
||||
FN2,LALT, ENT
|
||||
),
|
||||
|
||||
|
||||
/*
|
||||
* Layer 2: Function keys
|
||||
*
|
||||
* This layer contains function keys, and media keys. *
|
||||
* Most of the non-modifier keys are marked as NO, so it's immediately
|
||||
* obvious if you start typing on a secondary layer.
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | ` | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | TRNS |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | TRNS | | UP | | | | TRNS | | TRNS | | | | | | TRNS |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | TRNS | LEFT | DOWN |RIGHT | | |------| |------| | | | | | TRNS |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | TRNS | | | | | | | | | | | | | | TRNS |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | TRNS | TRNS | Play | RW | FF | | Mute | Vol- | Vol+ | TRNS | TRNS |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | | | | HOME | END |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | TRNS | | TRNS | | |
|
||||
* | TRNS | |------| |------| TRNS | TRNS |
|
||||
* | | | TRNS | | TRNS | | |
|
||||
* `--------------------' `--------------------'
|
||||
*/
|
||||
|
||||
KEYMAP(
|
||||
// left hand
|
||||
GRV ,F1, F2, F3, F4, F5, F11,
|
||||
TRNS,NO, UP, NO, NO, NO, TRNS,
|
||||
TRNS,LEFT,DOWN,RIGHT,NO, NO,
|
||||
TRNS,NO, NO, NO, NO, NO, NO,
|
||||
TRNS,TRNS,MPLY,MPRV,MNXT,
|
||||
NO, NO,
|
||||
TRNS,
|
||||
TRNS,NO, TRNS,
|
||||
// right hand
|
||||
F12, F6, F7, F8, F9, F10, TRNS,
|
||||
TRNS,NO, NO, NO, NO, NO, TRNS,
|
||||
NO,NO,NO, NO,NO, TRNS,
|
||||
NO, NO, NO, NO, NO, NO, TRNS,
|
||||
MUTE,VOLD,VOLU,TRNS,TRNS,
|
||||
HOME,END,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS
|
||||
)
|
||||
|
||||
};
|
||||
|
||||
/* id for user defined functions */
|
||||
enum function_id {
|
||||
TEENSY_KEY,
|
||||
};
|
||||
|
||||
/*
|
||||
* Fn action definition
|
||||
*/
|
||||
const action_t PROGMEM fn_actions[] = {
|
||||
// Layer shifting
|
||||
[0] = ACTION_LAYER_SET(0, ON_PRESS), // Switch to Layer 0
|
||||
[1] = ACTION_LAYER_SET(1, ON_PRESS), // Switch to Layer 1
|
||||
[2] = ACTION_LAYER_MOMENTARY(2), // Momentarily switch to layer 2
|
||||
|
||||
// Teensy
|
||||
[31] = ACTION_FUNCTION(TEENSY_KEY),
|
||||
};
|
||||
|
||||
void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
|
||||
{
|
||||
if (id == TEENSY_KEY) {
|
||||
clear_keyboard();
|
||||
print("\n\nJump to bootloader... ");
|
||||
_delay_ms(250);
|
||||
bootloader_jump(); // should not return
|
||||
print("not supported.\n");
|
||||
}
|
||||
}
|
||||
|
||||
428
keyboard/ergodox/keymap_micro.c
Normal file
428
keyboard/ergodox/keymap_micro.c
Normal file
|
|
@ -0,0 +1,428 @@
|
|||
//
|
||||
// Inspired by MicroDox:
|
||||
// http://geekhack.org/index.php?topic=42231.msg1062851#msg1062851
|
||||
// https://www.massdrop.com/ext/ergodox/?referer=CTL63V&hash=9ff8ddbb75e03e517aaa39acabc81669
|
||||
//
|
||||
#include <util/delay.h>
|
||||
#include "bootloader.h"
|
||||
#include "keymap_common.h"
|
||||
|
||||
|
||||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/*
|
||||
* Keymap: Default Layer in QWERTY
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | | | | | | | | | | | | | | | |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | Tab | Q | W | E | R | T | | | | Y | U | I | O | P | [ |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | Tab/Shf| A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | LCtrl/~| Z | X | C | V | B | | | | N | M | , | . | / | ] |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | | | Caps | LAlt | LGui | | RGui | | | | |
|
||||
* | | | | Spc | Esc | | | | | | |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | | | | | |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | | | | | |
|
||||
* | BkSp | Del |------| |------| Enter| Space|
|
||||
* | | | Esc | | Ins | | |
|
||||
* | LCtl | LSft | LAlt | | RAlt | RSft | RCtl |
|
||||
* `--------------------' `--------------------'
|
||||
*
|
||||
*
|
||||
*
|
||||
****************************************************************************************************
|
||||
*
|
||||
* Under XOrg, I use my own mapping from QWERTY to "Workman for Programmers"
|
||||
* See XOrg files in ./addons/ subdirectory.
|
||||
*
|
||||
* I have to do so, because of two things:
|
||||
* 1) my native language is Russian, and XOrg keymap for it is based on QWERTY layout
|
||||
* 2) I want to have non-standart shifted keys, like $ (as normal) and @ (as shifted), or _ and -
|
||||
*
|
||||
* And even if (2) could be solved using FN* keys (but there is limit in firmware for only 32 such
|
||||
* keys), then (1) can't be solved at firmware level at all.
|
||||
*
|
||||
* So, I have to stick with QWERTY as my main layout + my own XOrg keyboard layout for English.
|
||||
* But sometimes I have to input something when XOrg is not active - for example, in Linux console,
|
||||
* or in firmware console (while debugging firmware), or when keyboard is connected to not my computer.
|
||||
*
|
||||
* For such cases I have Layer1 :)
|
||||
* // hint: switch to Layer1 is only at Layer6
|
||||
*
|
||||
****************************************************************************************************
|
||||
*
|
||||
*
|
||||
*
|
||||
* Keymap: Default Layer in Workman
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | | | | | | | | | | | | | | | |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | Tab | Q | D | R | W | B | | | | J | F | U | P | $ | : |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | Tab/Shf| A | S | H | T | G |------| |------| Y | N | E | O | I | - |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | LCtrl | Z | X | M | C | V | | | | K | L | , | . | / | | |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | | | Caps | LAlt | LGui | | RGui | | | | |
|
||||
* | | | | Spc | Esc | | | | | | |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | | | | | |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | | | | | |
|
||||
* | BkSp | Del |------| |------| Enter| Space|
|
||||
* | | | Esc | | Ins | | |
|
||||
* | LCtl | LSft | LAlt | | RAlt | RSft | RCtl |
|
||||
* `--------------------' `--------------------'
|
||||
*
|
||||
* Keymap: Default Layer in Workman / with Shift
|
||||
*
|
||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||
* | | | | | | | | | | | | | | | |
|
||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||
* | Tab | Q | D | R | W | B | | | | J | F | U | P | @ | % |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | Tab/Shf| A | S | H | T | G |------| |------| Y | N | E | O | I | _ |
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | LCtrl | Z | X | M | C | V | | | | K | L | , | . | / | & |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | | | Caps | LAlt | LGui | | RGui | | | | |
|
||||
* | | | | Spc | Esc | | | | | | |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | | | | | |
|
||||
* ,------|------|------| |------+------+------.
|
||||
* | | | | | | | |
|
||||
* | BkSp | Del |------| |------| Enter| Space|
|
||||
* | | | Esc | | Ins | | |
|
||||
* | LCtl | LSft | LAlt | | RAlt | RSft | RCtl |
|
||||
* `--------------------' `--------------------'
|
||||
*
|
||||
* | ~ | ; | ! | # | { | } | ' | | ^ | [ | ] | * | ( | ) | = |
|
||||
* | ` | 1 | 2 | 3 | 4 | 5 | " | | \ | 6 | 7 | 8 | 9 | 0 | + |
|
||||
*/
|
||||
|
||||
KEYMAP( // Layer0: default, leftled:none
|
||||
// left hand
|
||||
NO, NO, NO, NO, NO, NO, NO,
|
||||
TAB, Q, W, E, R, T, NO,
|
||||
FN11,FN28,FN29,FN30,FN21,G,
|
||||
FN12,FN24,FN25,FN26,FN27,B, NO,
|
||||
NO, NO, CAPS,FN13,FN14,
|
||||
NO, NO,
|
||||
NO,
|
||||
FN5, FN6, FN7,
|
||||
// right hand
|
||||
NO, NO, NO, NO, NO, NO, NO,
|
||||
NO, Y, U, I, O, P, LBRC,
|
||||
H, J, K, L, FN22,FN15,
|
||||
NO, N, M, COMM,DOT, SLSH,FN16,
|
||||
RGUI,FN17,NO, NO, NO,
|
||||
NO, NO,
|
||||
NO,
|
||||
FN8, FN9, FN10
|
||||
),
|
||||
|
||||
KEYMAP( // Layer1: Workman layout, leftled:all
|
||||
// left hand
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,Q, D, R, W, B, TRNS,
|
||||
TRNS,A, S, H, T, G,
|
||||
TRNS,Z, X, M, C, V, TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS,
|
||||
// right hand
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,J, F, U, P, 4, TRNS,
|
||||
Y, N, E, O, I, TRNS,
|
||||
TRNS,K, L, TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS
|
||||
),
|
||||
|
||||
KEYMAP( // Layer2: numpad, leftled:blue
|
||||
// left hand
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,NO, NO, NO, NO, NO, TRNS,
|
||||
TRNS,NO, NO, NO, TRNS,NO,
|
||||
TRNS,NO, NO, NO, TRNS,NO, TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS,
|
||||
// right hand
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,NLCK,P7, P8, P9, PMNS,PGUP,
|
||||
PAST,P4, P5, P6, PPLS,PGDN,
|
||||
TRNS,FN17,P1, P2, P3, PSLS,PENT,
|
||||
P0, PDOT,SLSH,NO, NO,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS
|
||||
),
|
||||
|
||||
KEYMAP( // Layer3: F-keys + PgUp/PgDn on right hand, leftled:green
|
||||
// left hand
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,NO, NO, NO, NO, NO, TRNS,
|
||||
TRNS,NO, TRNS,NO, NO, NO,
|
||||
TRNS,NO, TRNS,NO, NO, NO, TRNS,
|
||||
TRNS,TRNS,TRNS,LALT,LGUI,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
LCTL,LSFT,LALT,
|
||||
// right hand
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,PSCR,F1, F2, F3, F4, PGUP,
|
||||
SLCK,F5, F6, F7, F8, PGDN,
|
||||
TRNS,PAUS,F9, F10, F11, F12, APP,
|
||||
RGUI,RALT,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
RALT,RSFT,RCTL
|
||||
),
|
||||
|
||||
KEYMAP( // Layer4: unconvenient keys on right hand, leftled:red
|
||||
// left hand
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,NO, NO, NO, NO, NO, TRNS,
|
||||
TRNS,TRNS,NO, NO, NO, NO,
|
||||
TRNS,TRNS,NO, NO, NO, NO, TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS,
|
||||
|
||||
/* in Workman right hand will be:
|
||||
*
|
||||
* ^ { } ( ) +
|
||||
* ' ! $ " ; =
|
||||
* # [ < > ] \
|
||||
*/
|
||||
|
||||
// right hand
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,MINS,4, 5, 9, 0, PPLS,
|
||||
BSLS,2, P, FN1, 1, EQL,
|
||||
TRNS,3, 6, FN3, FN4, 7, FN2,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS
|
||||
),
|
||||
|
||||
KEYMAP( // Layer5: cursor, leftled:red
|
||||
// left hand
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,NO, NO, NO, NO, NO, TRNS,
|
||||
TRNS,NO, NO, NO, TRNS,NO,
|
||||
TRNS,NO, NO, NO, NO, NO, TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS,
|
||||
// right hand
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,PGUP,HOME,END, DEL, INS, PGUP,
|
||||
PGDN,LEFT,UP, DOWN,RGHT,PGDN,
|
||||
TRNS,NO, HOME,END, DEL, INS, TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS
|
||||
),
|
||||
|
||||
KEYMAP( // Layer6: F1-F10, Workman-layer switch, Teensy, layer switches, leftled:red+onboard
|
||||
// left hand
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
FN0, F1, F2, F3, F4, F5, TRNS,
|
||||
TRNS,FN18,NO, NO, FN19,NO,
|
||||
TRNS,NO, NO, NO, FN19,NO, TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS,
|
||||
// right hand
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,F6, F7, F8, F9, F10, FN0,
|
||||
FN0, NO, NO, NO, TRNS,TRNS,
|
||||
TRNS,NO, NO, NO, NO, NO, TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS
|
||||
),
|
||||
|
||||
//
|
||||
// rarely used
|
||||
//
|
||||
|
||||
KEYMAP( // Layer7: F-keys only, leftled:red
|
||||
// left hand
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,F13, F14, F15, F16, NO, TRNS,
|
||||
TRNS,F17, F18, F19, F20, NO,
|
||||
TRNS,F21, F22, F23, F24, NO, TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS,
|
||||
// right hand
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,NO, F1, F2, F3, F4, TRNS,
|
||||
NO, F5, F6, F7, F8, TRNS,
|
||||
TRNS,NO, F9, F10, F11, F12, TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS
|
||||
),
|
||||
|
||||
KEYMAP( // Layer8: mouse and navigation, leftled:blue and green
|
||||
// left hand
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,NO, NO, NO, NO, NO, TRNS,
|
||||
TRNS,NO, NO, TRNS,NO, NO,
|
||||
TRNS,NO, NO, TRNS,NO, NO, TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS,
|
||||
|
||||
// right hand
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,BTN2,WH_L,WH_U,WH_D,WH_R,PGUP,
|
||||
BTN1,MS_L,MS_U,MS_D,MS_R,PGDN,
|
||||
TRNS,BTN3,HOME,END, DEL, INS, NO,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS
|
||||
),
|
||||
|
||||
/*
|
||||
// templates to copy from
|
||||
|
||||
KEYMAP( // LayerN: transparent on edges + hard-defined thumb keys, all others are empty
|
||||
// left hand
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,NO, NO, NO, NO, NO, TRNS,
|
||||
TRNS,NO, NO, NO, NO, NO,
|
||||
TRNS,NO, NO, NO, NO, NO, TRNS,
|
||||
TRNS,TRNS,TRNS,LALT,LGUI,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
LCTL,LSFT,TRNS,
|
||||
// right hand
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,NO, NO, NO, NO, NO, TRNS,
|
||||
NO, NO, NO, NO, NO, TRNS,
|
||||
TRNS,NO, NO, NO, NO, NO, TRNS,
|
||||
RGUI,RALT,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,RSFT,RCTL
|
||||
),
|
||||
KEYMAP( // LayerN: fully transparent
|
||||
// left hand
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS,
|
||||
// right hand
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,TRNS,TRNS,TRNS,
|
||||
TRNS,TRNS,
|
||||
TRNS,
|
||||
TRNS,TRNS,TRNS
|
||||
),
|
||||
*/
|
||||
|
||||
};
|
||||
|
||||
/* id for user defined functions */
|
||||
enum function_id {
|
||||
TEENSY_KEY,
|
||||
};
|
||||
|
||||
/*
|
||||
* Fn action definition
|
||||
*/
|
||||
const action_t PROGMEM fn_actions[] = {
|
||||
ACTION_FUNCTION(TEENSY_KEY), // FN0 - Teensy key
|
||||
|
||||
// Layer4: unconvenient keys on right hand
|
||||
ACTION_MODS_KEY(MOD_LSFT, KC_BSLS), // FN1 = Shifted BackSlash // " in Workman
|
||||
ACTION_MODS_KEY(MOD_LSFT, KC_MINS), // FN2 = Shifted Minus // \ in Workman
|
||||
ACTION_MODS_KEY(MOD_LSFT, KC_COMM), // FN3 = Shifted comma // < in Workman
|
||||
ACTION_MODS_KEY(MOD_LSFT, KC_DOT), // FN4 = Shifted dot // > in Workman
|
||||
|
||||
// Dual-role keys on thumbs
|
||||
ACTION_MODS_TAP_KEY(MOD_LCTL, KC_BSPC), // FN5 = LShift with tap BackSpace
|
||||
ACTION_MODS_TAP_KEY(MOD_LSFT, KC_DEL), // FN6 = LCtrl with tap Delete
|
||||
ACTION_MODS_TAP_KEY(MOD_LALT, KC_ESC), // FN7 = LAlt with tap Escape
|
||||
ACTION_MODS_TAP_KEY(MOD_RALT, KC_INS), // FN8 = RAlt with tap Ins
|
||||
ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT), // FN9 = RShift with tap Enter
|
||||
ACTION_MODS_TAP_KEY(MOD_RCTL, KC_SPC), // FN10 = RCtrl with tap Space
|
||||
|
||||
// Dual-role keys on pinkies
|
||||
ACTION_MODS_TAP_KEY(MOD_LSFT, KC_TAB), // FN11 = LShift with tap Tab
|
||||
ACTION_MODS_TAP_KEY(MOD_LCTL, KC_GRV), // FN12 = LCtrl with tap Tilda
|
||||
ACTION_MODS_TAP_KEY(MOD_LALT, KC_SPC), // FN13 = LAlt with tap Space
|
||||
ACTION_MODS_TAP_KEY(MOD_LGUI, KC_ESC), // FN14 = LGui with tap Escape
|
||||
ACTION_MODS_TAP_KEY(MOD_RSFT, KC_QUOT), // FN15 = RShift with tap quotes
|
||||
ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RBRC), // FN16 = RCtrl with tap ]
|
||||
|
||||
// Layers switching
|
||||
ACTION_LAYER_SET(0, ON_BOTH), // FN17 - set Layer0
|
||||
ACTION_LAYER_SET(1, ON_BOTH), // FN18 - set Layer1, to use Workman layout at firmware level
|
||||
ACTION_LAYER_SET(2, ON_BOTH), // FN19 - set Layer2, to use with Numpad keys
|
||||
|
||||
ACTION_LAYER_MOMENTARY(2), // UNUSED: FN20 - momentary Layer2, to use with Numpad keys
|
||||
ACTION_LAYER_TAP_KEY(5, KC_F), // FN21 - momentary Layer5, to use with cursor
|
||||
ACTION_LAYER_TAP_KEY(6, KC_SCLN), // FN22 - tapping ; Layer6, to use with F1-F10, Workman-layer switch, Teensy, layer switches
|
||||
ACTION_LAYER_MOMENTARY(7), // UNUSED: FN23 - momentary Layer7, to use with F* keys (F1-F24)
|
||||
|
||||
ACTION_LAYER_TAP_KEY(4, KC_Z), // FN24 = momentary Layer4 on Z key, to use with unconvenient keys
|
||||
ACTION_LAYER_TAP_KEY(3, KC_X), // FN25 = momentary Layer3 on X key, to use with F* keys
|
||||
ACTION_LAYER_TAP_KEY(8, KC_C), // FN26 = momentary Layer8 on C key, to use with mouse and navigation keys
|
||||
ACTION_LAYER_TAP_KEY(2, KC_V), // FN27 = momentary Layer2 on V key, to use with Numpad keys
|
||||
|
||||
// i'd like to remove this - will try to get used to live without this and convert them to usual keys
|
||||
ACTION_LAYER_TAP_KEY(4, KC_A), // FN28 = momentary Layer4 on A key, to use with unconvenient keys
|
||||
ACTION_LAYER_TAP_KEY(3, KC_S), // FN29 = momentary Layer3 on S key, to use with F* keys
|
||||
ACTION_LAYER_TAP_KEY(8, KC_D), // FN30 = momentary Layer8 on D key, to use with mouse and navigation keys
|
||||
ACTION_LAYER_TAP_KEY(2, KC_F), // UNUSED: FN31 = momentary Layer2 on F key, to use with Numpad keys
|
||||
};
|
||||
|
||||
void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
|
||||
{
|
||||
print("action_function called\n");
|
||||
print("id = "); phex(id); print("\n");
|
||||
print("opt = "); phex(opt); print("\n");
|
||||
if (id == TEENSY_KEY) {
|
||||
clear_keyboard();
|
||||
print("\n\nJump to bootloader... ");
|
||||
_delay_ms(250);
|
||||
bootloader_jump(); // should not return
|
||||
print("not supported.\n");
|
||||
}
|
||||
}
|
||||
|
||||
21
keyboard/ergodox/keymap_passwords_example.h
Normal file
21
keyboard/ergodox/keymap_passwords_example.h
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
#define MACRO_XMONAD_RESET MACRO( \
|
||||
I(15), \
|
||||
D(LCTL), D(LALT), T(F2), W(255), U(LALT), U(LCTL), W(255), \
|
||||
T(X), T(M), T(O), T(N), T(UP), T(ENT), W(255), \
|
||||
D(LCTL), D(LALT), T(F5), W(255), U(LALT), U(LCTL), W(255), \
|
||||
END) \
|
||||
|
||||
#define MACRO_PASSWORD1 MACRO( \
|
||||
I(15), \
|
||||
T(E), T(X), T(A), T(M), T(P), T(L), T(E), \
|
||||
END) \
|
||||
|
||||
#define MACRO_PASSWORD2 MACRO( \
|
||||
I(15), \
|
||||
T(E), T(X), T(A), T(M), T(P), T(L), T(E), \
|
||||
END) \
|
||||
|
||||
#define MACRO_PASSWORD2 MACRO( \
|
||||
I(15), \
|
||||
T(E), T(X), T(A), T(M), T(P), T(L), T(E), \
|
||||
END) \
|
||||
56
keyboard/ergodox/led.c
Normal file
56
keyboard/ergodox/led.c
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include <avr/io.h>
|
||||
#include "print.h"
|
||||
#include "debug.h"
|
||||
#include "led.h"
|
||||
#include "ergodox.h"
|
||||
|
||||
|
||||
void led_set(uint8_t usb_led)
|
||||
{
|
||||
// topmost - NumLock
|
||||
#ifndef INVERT_NUMLOCK
|
||||
if (usb_led & (1<<USB_LED_NUM_LOCK)) {
|
||||
ergodox_right_led_1_on();
|
||||
} else {
|
||||
ergodox_right_led_1_off();
|
||||
}
|
||||
#else
|
||||
if (usb_led & (1<<USB_LED_NUM_LOCK)) {
|
||||
ergodox_right_led_1_off();
|
||||
} else {
|
||||
ergodox_right_led_1_on();
|
||||
}
|
||||
#endif
|
||||
|
||||
// middle - CapsLock
|
||||
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
|
||||
ergodox_right_led_2_on();
|
||||
} else {
|
||||
ergodox_right_led_2_off();
|
||||
}
|
||||
|
||||
// bottommost - ScrollLock
|
||||
if (usb_led & (1<<USB_LED_SCROLL_LOCK)) {
|
||||
ergodox_right_led_3_on();
|
||||
} else {
|
||||
ergodox_right_led_3_off();
|
||||
}
|
||||
}
|
||||
369
keyboard/ergodox/matrix.c
Normal file
369
keyboard/ergodox/matrix.c
Normal file
|
|
@ -0,0 +1,369 @@
|
|||
/*
|
||||
Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* scan matrix
|
||||
*/
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <avr/io.h>
|
||||
#include <util/delay.h>
|
||||
#include "action_layer.h"
|
||||
#include "print.h"
|
||||
#include "debug.h"
|
||||
#include "util.h"
|
||||
#include "matrix.h"
|
||||
#include "ergodox.h"
|
||||
#include "i2cmaster.h"
|
||||
#ifdef DEBUG_MATRIX_SCAN_RATE
|
||||
#include "timer.h"
|
||||
#endif
|
||||
|
||||
#ifndef DEBOUNCE
|
||||
# define DEBOUNCE 5
|
||||
#endif
|
||||
static uint8_t debouncing = DEBOUNCE;
|
||||
|
||||
/* matrix state(1:on, 0:off) */
|
||||
static matrix_row_t matrix[MATRIX_ROWS];
|
||||
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
|
||||
|
||||
static matrix_row_t read_cols(uint8_t row);
|
||||
static void init_cols(void);
|
||||
static void unselect_rows(void);
|
||||
static void select_row(uint8_t row);
|
||||
|
||||
static uint8_t mcp23018_reset_loop;
|
||||
|
||||
#ifdef DEBUG_MATRIX_SCAN_RATE
|
||||
uint32_t matrix_timer;
|
||||
uint32_t matrix_scan_count;
|
||||
#endif
|
||||
|
||||
inline
|
||||
uint8_t matrix_rows(void)
|
||||
{
|
||||
return MATRIX_ROWS;
|
||||
}
|
||||
|
||||
inline
|
||||
uint8_t matrix_cols(void)
|
||||
{
|
||||
return MATRIX_COLS;
|
||||
}
|
||||
|
||||
void matrix_init(void)
|
||||
{
|
||||
// initialize row and col
|
||||
init_ergodox();
|
||||
mcp23018_status = init_mcp23018();
|
||||
ergodox_blink_all_leds();
|
||||
unselect_rows();
|
||||
init_cols();
|
||||
|
||||
// initialize matrix state: all keys off
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||
matrix[i] = 0;
|
||||
matrix_debouncing[i] = 0;
|
||||
}
|
||||
|
||||
#ifdef DEBUG_MATRIX_SCAN_RATE
|
||||
matrix_timer = timer_read32();
|
||||
matrix_scan_count = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
uint8_t matrix_scan(void)
|
||||
{
|
||||
if (mcp23018_status) { // if there was an error
|
||||
if (++mcp23018_reset_loop == 0) {
|
||||
// since mcp23018_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans
|
||||
// this will be approx bit more frequent than once per second
|
||||
print("trying to reset mcp23018\n");
|
||||
mcp23018_status = init_mcp23018();
|
||||
if (mcp23018_status) {
|
||||
print("left side not responding\n");
|
||||
} else {
|
||||
print("left side attached\n");
|
||||
ergodox_blink_all_leds();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef DEBUG_MATRIX_SCAN_RATE
|
||||
matrix_scan_count++;
|
||||
|
||||
uint32_t timer_now = timer_read32();
|
||||
if (TIMER_DIFF_32(timer_now, matrix_timer)>1000) {
|
||||
print("matrix scan frequency: ");
|
||||
pdec(matrix_scan_count);
|
||||
print("\n");
|
||||
|
||||
matrix_timer = timer_now;
|
||||
matrix_scan_count = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef KEYMAP_CUB
|
||||
uint8_t layer = biton32(layer_state);
|
||||
|
||||
ergodox_board_led_off();
|
||||
ergodox_left_led_1_off();
|
||||
ergodox_left_led_2_off();
|
||||
ergodox_left_led_3_off();
|
||||
switch (layer) {
|
||||
case 1:
|
||||
// all
|
||||
ergodox_left_led_1_on();
|
||||
ergodox_left_led_2_on();
|
||||
ergodox_left_led_3_on();
|
||||
break;
|
||||
case 2:
|
||||
// blue
|
||||
ergodox_left_led_2_on();
|
||||
break;
|
||||
case 8:
|
||||
// blue and green
|
||||
ergodox_left_led_2_on();
|
||||
// break missed intentionally
|
||||
case 3:
|
||||
// green
|
||||
ergodox_left_led_3_on();
|
||||
break;
|
||||
case 6:
|
||||
ergodox_board_led_on();
|
||||
// break missed intentionally
|
||||
case 4:
|
||||
case 5:
|
||||
case 7:
|
||||
// white
|
||||
ergodox_left_led_1_on();
|
||||
break;
|
||||
case 9:
|
||||
// white+green
|
||||
ergodox_left_led_1_on();
|
||||
ergodox_left_led_3_on();
|
||||
break;
|
||||
default:
|
||||
// none
|
||||
break;
|
||||
}
|
||||
|
||||
mcp23018_status = ergodox_left_leds_update();
|
||||
#endif
|
||||
|
||||
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
|
||||
select_row(i);
|
||||
matrix_row_t cols = read_cols(i);
|
||||
if (matrix_debouncing[i] != cols) {
|
||||
matrix_debouncing[i] = cols;
|
||||
if (debouncing) {
|
||||
debug("bounce!: "); debug_hex(debouncing); debug("\n");
|
||||
}
|
||||
debouncing = DEBOUNCE;
|
||||
}
|
||||
unselect_rows();
|
||||
}
|
||||
|
||||
if (debouncing) {
|
||||
if (--debouncing) {
|
||||
_delay_ms(1);
|
||||
} else {
|
||||
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
|
||||
matrix[i] = matrix_debouncing[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
bool matrix_is_modified(void)
|
||||
{
|
||||
if (debouncing) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
inline
|
||||
bool matrix_is_on(uint8_t row, uint8_t col)
|
||||
{
|
||||
return (matrix[row] & ((matrix_row_t)1<<col));
|
||||
}
|
||||
|
||||
inline
|
||||
matrix_row_t matrix_get_row(uint8_t row)
|
||||
{
|
||||
return matrix[row];
|
||||
}
|
||||
|
||||
void matrix_print(void)
|
||||
{
|
||||
print("\nr/c 0123456789ABCDEF\n");
|
||||
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
|
||||
phex(row); print(": ");
|
||||
pbin_reverse16(matrix_get_row(row));
|
||||
print("\n");
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t matrix_key_count(void)
|
||||
{
|
||||
uint8_t count = 0;
|
||||
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
|
||||
count += bitpop16(matrix[i]);
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
/* Column pin configuration
|
||||
*
|
||||
* Teensy
|
||||
* col: 0 1 2 3 4 5
|
||||
* pin: F0 F1 F4 F5 F6 F7
|
||||
*
|
||||
* MCP23018
|
||||
* col: 0 1 2 3 4 5
|
||||
* pin: B5 B4 B3 B2 B1 B0
|
||||
*/
|
||||
static void init_cols(void)
|
||||
{
|
||||
// init on mcp23018
|
||||
// not needed, already done as part of init_mcp23018()
|
||||
|
||||
// init on teensy
|
||||
// Input with pull-up(DDR:0, PORT:1)
|
||||
DDRF &= ~(1<<7 | 1<<6 | 1<<5 | 1<<4 | 1<<1 | 1<<0);
|
||||
PORTF |= (1<<7 | 1<<6 | 1<<5 | 1<<4 | 1<<1 | 1<<0);
|
||||
}
|
||||
|
||||
static matrix_row_t read_cols(uint8_t row)
|
||||
{
|
||||
if (row < 7) {
|
||||
if (mcp23018_status) { // if there was an error
|
||||
return 0;
|
||||
} else {
|
||||
uint8_t data = 0;
|
||||
mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(GPIOB); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_start(I2C_ADDR_READ); if (mcp23018_status) goto out;
|
||||
data = i2c_readNak();
|
||||
data = ~data;
|
||||
out:
|
||||
i2c_stop();
|
||||
return data;
|
||||
}
|
||||
} else {
|
||||
_delay_us(30); // without this wait read unstable value.
|
||||
// read from teensy
|
||||
return
|
||||
(PINF&(1<<0) ? 0 : (1<<0)) |
|
||||
(PINF&(1<<1) ? 0 : (1<<1)) |
|
||||
(PINF&(1<<4) ? 0 : (1<<2)) |
|
||||
(PINF&(1<<5) ? 0 : (1<<3)) |
|
||||
(PINF&(1<<6) ? 0 : (1<<4)) |
|
||||
(PINF&(1<<7) ? 0 : (1<<5)) ;
|
||||
}
|
||||
}
|
||||
|
||||
/* Row pin configuration
|
||||
*
|
||||
* Teensy
|
||||
* row: 7 8 9 10 11 12 13
|
||||
* pin: B0 B1 B2 B3 D2 D3 C6
|
||||
*
|
||||
* MCP23018
|
||||
* row: 0 1 2 3 4 5 6
|
||||
* pin: A0 A1 A2 A3 A4 A5 A6
|
||||
*/
|
||||
static void unselect_rows(void)
|
||||
{
|
||||
// unselect on mcp23018
|
||||
if (mcp23018_status) { // if there was an error
|
||||
// do nothing
|
||||
} else {
|
||||
// set all rows hi-Z : 1
|
||||
mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(GPIOA); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write( 0xFF
|
||||
& ~(ergodox_left_led_3<<LEFT_LED_3_SHIFT)
|
||||
); if (mcp23018_status) goto out;
|
||||
out:
|
||||
i2c_stop();
|
||||
}
|
||||
|
||||
// unselect on teensy
|
||||
// Hi-Z(DDR:0, PORT:0) to unselect
|
||||
DDRB &= ~(1<<0 | 1<<1 | 1<<2 | 1<<3);
|
||||
PORTB &= ~(1<<0 | 1<<1 | 1<<2 | 1<<3);
|
||||
DDRD &= ~(1<<2 | 1<<3);
|
||||
PORTD &= ~(1<<2 | 1<<3);
|
||||
DDRC &= ~(1<<6);
|
||||
PORTC &= ~(1<<6);
|
||||
}
|
||||
|
||||
static void select_row(uint8_t row)
|
||||
{
|
||||
if (row < 7) {
|
||||
// select on mcp23018
|
||||
if (mcp23018_status) { // if there was an error
|
||||
// do nothing
|
||||
} else {
|
||||
// set active row low : 0
|
||||
// set other rows hi-Z : 1
|
||||
mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write(GPIOA); if (mcp23018_status) goto out;
|
||||
mcp23018_status = i2c_write( 0xFF & ~(1<<row)
|
||||
& ~(ergodox_left_led_3<<LEFT_LED_3_SHIFT)
|
||||
); if (mcp23018_status) goto out;
|
||||
out:
|
||||
i2c_stop();
|
||||
}
|
||||
} else {
|
||||
// select on teensy
|
||||
// Output low(DDR:1, PORT:0) to select
|
||||
switch (row) {
|
||||
case 7:
|
||||
DDRB |= (1<<0);
|
||||
PORTB &= ~(1<<0);
|
||||
break;
|
||||
case 8:
|
||||
DDRB |= (1<<1);
|
||||
PORTB &= ~(1<<1);
|
||||
break;
|
||||
case 9:
|
||||
DDRB |= (1<<2);
|
||||
PORTB &= ~(1<<2);
|
||||
break;
|
||||
case 10:
|
||||
DDRB |= (1<<3);
|
||||
PORTB &= ~(1<<3);
|
||||
break;
|
||||
case 11:
|
||||
DDRD |= (1<<2);
|
||||
PORTD &= ~(1<<3);
|
||||
break;
|
||||
case 12:
|
||||
DDRD |= (1<<3);
|
||||
PORTD &= ~(1<<3);
|
||||
break;
|
||||
case 13:
|
||||
DDRC |= (1<<6);
|
||||
PORTC &= ~(1<<6);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
202
keyboard/ergodox/twimaster.c
Normal file
202
keyboard/ergodox/twimaster.c
Normal file
|
|
@ -0,0 +1,202 @@
|
|||
/*************************************************************************
|
||||
* Title: I2C master library using hardware TWI interface
|
||||
* Author: Peter Fleury <pfleury@gmx.ch> http://jump.to/fleury
|
||||
* File: $Id: twimaster.c,v 1.4 2015/01/17 12:16:05 peter Exp $
|
||||
* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3
|
||||
* Target: any AVR device with hardware TWI
|
||||
* Usage: API compatible with I2C Software Library i2cmaster.h
|
||||
**************************************************************************/
|
||||
#include <inttypes.h>
|
||||
#include <compat/twi.h>
|
||||
|
||||
#include <i2cmaster.h>
|
||||
|
||||
|
||||
/* define CPU frequency in hz here if not defined in Makefile */
|
||||
#ifndef F_CPU
|
||||
#define F_CPU 4000000UL
|
||||
#endif
|
||||
|
||||
/* I2C clock in Hz */
|
||||
#define SCL_CLOCK 100000L
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Initialization of the I2C bus interface. Need to be called only once
|
||||
*************************************************************************/
|
||||
void i2c_init(void)
|
||||
{
|
||||
/* initialize TWI clock: 100 kHz clock, TWPS = 0 => prescaler = 1 */
|
||||
|
||||
TWSR = 0; /* no prescaler */
|
||||
TWBR = ((F_CPU/SCL_CLOCK)-16)/2; /* must be > 10 for stable operation */
|
||||
|
||||
}/* i2c_init */
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Issues a start condition and sends address and transfer direction.
|
||||
return 0 = device accessible, 1= failed to access device
|
||||
*************************************************************************/
|
||||
unsigned char i2c_start(unsigned char address)
|
||||
{
|
||||
uint8_t twst;
|
||||
|
||||
// send START condition
|
||||
TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
|
||||
|
||||
// wait until transmission completed
|
||||
while(!(TWCR & (1<<TWINT)));
|
||||
|
||||
// check value of TWI Status Register. Mask prescaler bits.
|
||||
twst = TW_STATUS & 0xF8;
|
||||
if ( (twst != TW_START) && (twst != TW_REP_START)) return 1;
|
||||
|
||||
// send device address
|
||||
TWDR = address;
|
||||
TWCR = (1<<TWINT) | (1<<TWEN);
|
||||
|
||||
// wail until transmission completed and ACK/NACK has been received
|
||||
while(!(TWCR & (1<<TWINT)));
|
||||
|
||||
// check value of TWI Status Register. Mask prescaler bits.
|
||||
twst = TW_STATUS & 0xF8;
|
||||
if ( (twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK) ) return 1;
|
||||
|
||||
return 0;
|
||||
|
||||
}/* i2c_start */
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Issues a start condition and sends address and transfer direction.
|
||||
If device is busy, use ack polling to wait until device is ready
|
||||
|
||||
Input: address and transfer direction of I2C device
|
||||
*************************************************************************/
|
||||
void i2c_start_wait(unsigned char address)
|
||||
{
|
||||
uint8_t twst;
|
||||
|
||||
|
||||
while ( 1 )
|
||||
{
|
||||
// send START condition
|
||||
TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
|
||||
|
||||
// wait until transmission completed
|
||||
while(!(TWCR & (1<<TWINT)));
|
||||
|
||||
// check value of TWI Status Register. Mask prescaler bits.
|
||||
twst = TW_STATUS & 0xF8;
|
||||
if ( (twst != TW_START) && (twst != TW_REP_START)) continue;
|
||||
|
||||
// send device address
|
||||
TWDR = address;
|
||||
TWCR = (1<<TWINT) | (1<<TWEN);
|
||||
|
||||
// wail until transmission completed
|
||||
while(!(TWCR & (1<<TWINT)));
|
||||
|
||||
// check value of TWI Status Register. Mask prescaler bits.
|
||||
twst = TW_STATUS & 0xF8;
|
||||
if ( (twst == TW_MT_SLA_NACK )||(twst ==TW_MR_DATA_NACK) )
|
||||
{
|
||||
/* device busy, send stop condition to terminate write operation */
|
||||
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
|
||||
|
||||
// wait until stop condition is executed and bus released
|
||||
while(TWCR & (1<<TWSTO));
|
||||
|
||||
continue;
|
||||
}
|
||||
//if( twst != TW_MT_SLA_ACK) return 1;
|
||||
break;
|
||||
}
|
||||
|
||||
}/* i2c_start_wait */
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Issues a repeated start condition and sends address and transfer direction
|
||||
|
||||
Input: address and transfer direction of I2C device
|
||||
|
||||
Return: 0 device accessible
|
||||
1 failed to access device
|
||||
*************************************************************************/
|
||||
unsigned char i2c_rep_start(unsigned char address)
|
||||
{
|
||||
return i2c_start( address );
|
||||
|
||||
}/* i2c_rep_start */
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Terminates the data transfer and releases the I2C bus
|
||||
*************************************************************************/
|
||||
void i2c_stop(void)
|
||||
{
|
||||
/* send stop condition */
|
||||
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
|
||||
|
||||
// wait until stop condition is executed and bus released
|
||||
while(TWCR & (1<<TWSTO));
|
||||
|
||||
}/* i2c_stop */
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Send one byte to I2C device
|
||||
|
||||
Input: byte to be transfered
|
||||
Return: 0 write successful
|
||||
1 write failed
|
||||
*************************************************************************/
|
||||
unsigned char i2c_write( unsigned char data )
|
||||
{
|
||||
uint8_t twst;
|
||||
|
||||
// send data to the previously addressed device
|
||||
TWDR = data;
|
||||
TWCR = (1<<TWINT) | (1<<TWEN);
|
||||
|
||||
// wait until transmission completed
|
||||
while(!(TWCR & (1<<TWINT)));
|
||||
|
||||
// check value of TWI Status Register. Mask prescaler bits
|
||||
twst = TW_STATUS & 0xF8;
|
||||
if( twst != TW_MT_DATA_ACK) return 1;
|
||||
return 0;
|
||||
|
||||
}/* i2c_write */
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Read one byte from the I2C device, request more data from device
|
||||
|
||||
Return: byte read from I2C device
|
||||
*************************************************************************/
|
||||
unsigned char i2c_readAck(void)
|
||||
{
|
||||
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWEA);
|
||||
while(!(TWCR & (1<<TWINT)));
|
||||
|
||||
return TWDR;
|
||||
|
||||
}/* i2c_readAck */
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Read one byte from the I2C device, read is followed by a stop condition
|
||||
|
||||
Return: byte read from I2C device
|
||||
*************************************************************************/
|
||||
unsigned char i2c_readNak(void)
|
||||
{
|
||||
TWCR = (1<<TWINT) | (1<<TWEN);
|
||||
while(!(TWCR & (1<<TWINT)));
|
||||
|
||||
return TWDR;
|
||||
|
||||
}/* i2c_readNak */
|
||||
|
|
@ -36,6 +36,7 @@
|
|||
#include "suspend.h"
|
||||
#include "host.h"
|
||||
#include "pjrc.h"
|
||||
#include "sleep_led.h"
|
||||
|
||||
|
||||
#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue