benblazak / ergodox-firmware Goto Github PK
View Code? Open in Web Editor NEWfirmware for the ergoDOX keyboard
License: Other
firmware for the ergoDOX keyboard
License: Other
In the _kb_layout hashes, what do you use to push and pop layers? I can't see this documented anywhere, and the numerals that are in there don't seem to do anything. Can anyone point me in the right direction? Or is this quite undocumented?
Thanks!!
I can compile from 'src' directory but not the top level
I'm getting errors, just trying to compile the master branch: error message
where do I get 'gdate' ?
Because it seems like it'd be nice at this point (taking all i've learned) to rewrite it. We shall see.
Hello Ben,
Here is just a message that you may use whenever you get questions from people wanting macros for Copy/Cut/Paste.
I used your macro function (code copied and adapted from example given by Frew).
I added one "usb__kb__send_report();" to avoid a problem when my host OS (Win7) was remote connecting to another Windows host using Remote Desktop.
Without this additional "send_report", the remote host was printing "V" instead of pasting which is probably because he got the event wrongly sequenced somehow.
I hope it may help others:
void keys__press__m_cut(void) { // Send a ^X
usb__kb__set_key(true, KEYBOARD__LeftControl);
usb__kb__send_report();
usb__kb__set_key(true, KEYBOARD__x_X);
usb__kb__send_report();
usb__kb__set_key(false, KEYBOARD__x_X);
usb__kb__set_key(false, KEYBOARD__LeftControl);
}
void R(m_cut)(void) {}
void keys__press__m_copy(void) { // Send a ^C
usb__kb__set_key(true, KEYBOARD__LeftControl);
usb__kb__send_report();
usb__kb__set_key(true, KEYBOARD__c_C);
usb__kb__send_report();
usb__kb__set_key(false, KEYBOARD__c_C);
usb__kb__set_key(false, KEYBOARD__LeftControl);
}
void R(m_copy)(void) {}
void keys__press__m_paste(void) { // Send a ^V
usb__kb__set_key(true, KEYBOARD__LeftControl);
usb__kb__send_report();
//_delay_ms(333);
usb__kb__set_key(true, KEYBOARD__v_V);
usb__kb__send_report();
usb__kb__set_key(false, KEYBOARD__v_V);
usb__kb__set_key(false, KEYBOARD__LeftControl);
}
void R(m_paste)(void) {}
Best regards,
Pierre
I'd like to get this done, but I've never done anything with USB before, so I can only promise to try.
I'm considering to buy the ergodox this year. I just want to know something beforehand.
I use space as [space and shift].
If i press space quickly (the key press lasts less then 260 ms) only then its a space.
If i hold it then its shift.
My question: Is it possible to write "macros" in the firmware that are timebased?
On the ergodox i want to have the thumb keys as:
Space as [Space and shift]
Ctrl as [Ctrl and enter]
Alt as [Alt and backspace]
...
My current Autohotkey macro:
; == space/shift ==
$space::
send {LShift down}
Spacedown := A_TickCount
Return
$+space up::
; The space-down set the shift-key, so the space-up event is now shift+space-up
send {LShift up}
if (A_TickCount - Spacedown <260)
; If short time between space-down and space-up...
Send {Space}
Return
I'm trying to use build-script/gen-layout.py
to generate a visual representation of the generated firmware but I can't get it to work. If I do a make
and watch the output I see no errors but the firmware--ui-info.json
files in build/*
are empty.
If I run the generated command by make by hand:
./'build-scripts/gen-ui-info.py' \
--current-date '2014-06-09 22:35:15+02:00' \
--git-commit-date '2012-12-20 16:34:08 -0800' \
--git-commit-id '43ee200b2b6e2e234ee8d13d8824e1d5068ba7d0' \
--map-file-path 'build/ergodox-firmware--master--20121221T013408--43ee200--qwerty-kinesis-mod/firmware.map' \
--source-code-path 'src' \
--matrix-file-path 'src/keyboard/ergodox/matrix.h' \
--layout-file-path \
'src/keyboard/ergodox/layout/qwerty-kinesis-mod.c'
I get the following error:
Traceback (most recent call last):
File "./build-scripts/gen-ui-info.py", line 474, in <module>
main()
File "./build-scripts/gen-ui-info.py", line 463, in main
dict_merge(output, parse_mapfile(args.map_file_path))
File "./build-scripts/gen-ui-info.py", line 206, in parse_mapfile
raise ValueError("invalid 'map_file_path' given")
ValueError: invalid 'map_file_path' given
because build/ergodox-firmware--master--20121221T013408--43ee200--qwerty-kinesis-mod/firmware.map
doesn't exist.
Is the generation of html/svg files of a layout broken or am I missing something?
Hi there,
I'm attempting to get this working on my ergodox and I'm having problems with layers that shouldn't be happening. I can't seem to push anything besides layer 1 onto the stack; neither layer 2 or 3 work (all from layer 0), while layer 1 works fine. Furthermore on layer 1 I must press shift first if I want to get shifted keys; pressing shift after I press my layer key results in only lowercase keypresses.
I'm on master right now but this didn't work on partial-rewrite either. I'm on Ubuntu 13.10. My make output looks like this:
--- making keyboard/ergodox/layout/qwerty-kinesis-mod.o ---
avr-gcc -c -mmcu=atmega32u4 -DF_CPU=16000000 -DMAKEFILE_BOARD='teensy-2-0' -DMAKEFILE_KEYBOARD='ergodox' -DMAKEFILE_KEYBOARD_LAYOUT='qwerty-kinesis-mod' -DMAKEFILE_DEBOUNCE_TIME='5' -DMAKEFILE_LED_BRIGHTNESS='0.5' -std=gnu99 -Os -Wall -Wstrict-prototypes -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -MMD -MP -MF keyboard/ergodox/layout/qwerty-kinesis-mod.o.dep keyboard/ergodox/layout/qwerty-kinesis-mod.c -o keyboard/ergodox/layout/qwerty-kinesis-mod.o
--- making firmware.elf ---
avr-gcc -mmcu=atmega32u4 -DF_CPU=16000000 -DMAKEFILE_BOARD='teensy-2-0' -DMAKEFILE_KEYBOARD='ergodox' -DMAKEFILE_KEYBOARD_LAYOUT='qwerty-kinesis-mod' -DMAKEFILE_DEBOUNCE_TIME='5' -DMAKEFILE_LED_BRIGHTNESS='0.5' -std=gnu99 -Os -Wall -Wstrict-prototypes -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -Wl,-Map=firmware.map,--cref -Wl,--relax -Wl,--gc-sections main.o keyboard/ergodox/controller.o keyboard/ergodox/controller/mcp23018.o keyboard/ergodox/controller/teensy-2-0.o keyboard/ergodox/layout/qwerty-kinesis-mod.o lib/key-functions/private.o lib/twi/teensy-2-0.o lib/usb/TODO.o lib/key-functions/public/basic.o lib/key-functions/public/device.o lib/key-functions/public/special.o lib-other/pjrc/usb_keyboard/usb_keyboard.o --output firmware.elf
--- making firmware.hex ---
\# from the WinAVR makefile template (modified)
avr-objcopy -O ihex \
-R .eeprom -R .fuse -R .lock -R .signature \
firmware.elf firmware.hex
--- making firmware.eep ---
\# from the WinAVR makefile template (modified)
avr-objcopy -O ihex \
-j .eeprom \
--set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 \
--no-change-warnings \
firmware.elf firmware.eep || exit 0
------- done --------------------------------------------------
avr-size --target=ihex firmware.hex
text data bss dec hex filename
0 9744 0 9744 2610 firmware.hex
avr-size --target=ihex firmware.eep
text data bss dec hex filename
0 0 0 0 0 firmware.eep
you can load "firmware.hex" and "firmware.eep" onto the
Teensy using the Teensy loader
---------------------------------------------------------------
and my layout.c, for brevity, is posted on pastebin here: http://pastebin.com/v9VV8B06
is there anything crazy I'm doing wrong? Is this done another way in the Massdrop Configurator? My layers used to work fine on that, but sadly the configurator isn't working right now and I didn't save any of the source code from the layouts I generated with multiple layers.
Thank you
EDIT: Tried again and it seems to work. Maybe I didn't give it enough time before resetting or something? I don't know.
ORIGINAL (Ignore now):
Using the massdrop configurator I tried to make a configuration with a "windows" key, but in linux showkey and xev don't receive a keycode. I use these keys all the time (I use i3 and use win as my command for moving around), so how can I make this work?
tentative, based on time and interest.
whether only available on specific keys, of fixed or variable length, assignable on the keyboard (record -> playback) or only through reflashing, etc., etc., i do not know. but i can see how they'd be useful at times.
Disclaimer: I was not able to test this, because I don't have my ErgoDox yet.
My plan is to connect my ErgoDox and another standard keyboard to my PC. The OS will be configured to use querz (German layout), because people coming to my desktop shall be able to type. The ErgoDox should allow me to type in my layout of choice (http://neo-layout.org).
If I understand correctly from inspecting the source code, there are some issues when the keyboard is connected to a PC using a non-US layout:
First of all, the neo layout does support some chars, that are not available on the standard querz keyboard. Therefore I would use the key_function type_string. This method tries to send key codes for all the chars available on a standard ansi keyboard. But that will result in wrong keycodes being send for these chars: "[Groovy, Baby]" with the keyboard attached to a German PC will send "üGroovz, Babz+". Workaround: Only use that method for chars that are not on a US keyboard.
Second: I need to define the layout using the US layout in mind, to get the correct char when pressing a particular key. E.g. when pressing the key where there would be a "z" on a German keyboard ("y" on a US keyboard), I really want it to be an "ü". To get an "ü" when the OS thinks the keyboard uses the German layout, it has to send the keycode for "[" on a US keyboard.
It should be easy to define the desired outcome without having to think in respect to the US layout. There should be some #define
statement to set the target language code, and then I want to be able to just type what each key should produce.
I have plans to use the LEDs to indicate the active layer.
I'm thinking about making them work as a binary number:
Or maybe if there are only 3 layers programmed, each LED is used for 1 layer each.
I might implement this myself, but maybe someone already did. So you can let me know in the comments.
The german char ß has the Keycode
keycode 34 (keysym 0xdf, ssharp)
If i had a look inside of _ergodox_firmware/lib/usb/usage-page/keyboard.h there is a row (258) like this:
// (Reserved) 0xDE..0xDF // - - - -
Why this Keycode is reserved? How can i got the ß to work.
BTW: On the Massdrop Configurator there am i able to add "Teensy" as key. I think this is to simulate the Button Press to reflash teensy. Which keycode can i use to have this on a Key of my Keyboard.
I looked through the keyboard.h and I can they're not supported on any platform. Why is that? I looked through the rewrites' equivalent and they're absent entirely. Will they never be supported? If so I'm curious for the technical reason. I'd hoped my layout could e.g. always send an ' @ ' rather than a ' " ' regardless of the OS's regional layout.
Somewhat related to issue #35: If I understand correctly, it is supported to move every key to every place. But the default for all keys is to keep their meaning, i.e. 2 becomes @ when shift is pressed on a US keyboard, and " on a German keyboard.
But is it possible to use shift for the normal keys (a-z), but define the shifted meaning exactly for the other keys? --> Shift+2 with the neo layout should become §.
One workaround I see would be to define the first layer without shift and use use a layer switch instead, defining a-z on the first layer and A-Z and all the other keys explicitly on the second layer. Problem: Shortcuts with shift will not work any more.
In development. Definitely a need, but we got this!
Cheers,
OJ
unless nobody wants one
Tentative, based on time and interest.
This would be implemented per keymap, the goal being to have something like the Kinesis.
Also, the UI being written by OrangeJewce and effh should (for windows people at least) make it much easier to do firmware remapping on the computer than it would be to do it on the keyboard alone. For the rest of us (and any power remappers), I plan to include a nice howto in the final documentation about modifying keymaps in the source code.
Is there a picture of the default keymap floating around somewhere?
It would be closer to the layout of the physical keyboard if they were rotated like this:
// Left
_ctrlL, _altL,
0, 0, _home,
_space, _del, _bs,
// Right
_altR, _ctrlR,
_pageU, 0, 0,
_pageD, _enter, _end,
no, really, I'd love to buy (at least) one of these.
I even have my own (kinesis) keycap design that I'd like to use for this: https://github.com/fommil/kinesis-dvorak
Am curious about using a layout such as workman-p. Where the number row is the symbols (shifted numbers), and then you have to shift to get the numbers. What would be required for that?
A key combo that jumps to the bootloader can be useful to flash the teensy without opening the keyboard.
I'd really like to give this layout a shot, and this keyboard will be my first real chance to do so, so I'll do my best to implement this one.
I was trying to configure the layout and I have just encountered a very annoying issue: it makes other keys to be wrongly typed, like:
I have set the "<" and ">" to unique/single keys, because they are very used, specially for xml or just write a small html chunk, I had always difficulties to type those chars in other layouts because they are not very friendly and so slow to type a small chunk of html content
Then i tried to play with some <ul><li>
in my ergodox to see if they are friendly to type, and then I noticed something: I got things like:
<Li>
and <Ul>
Why this happened? because seems like the < and > chars are in the code a hack that makes use of the shift key, so a normal person when types fastly in the keyboard (and not so fast, just normal typing), most of the times you don't finish to release the key before to press the next one, and this will generate a "not yet released shift" when you have pressed the next one (note: I'm mostly speculating what the code does)
Then I said "oh my god, again this annoying issue" (I had a similar problem typing ":wq" on vim with my os-modified layout: https://github.com/Elive/programmerskblayout , i was so much annoyed by it that I have even needed to write a map in my vim conf to correct it), anyways...
The first thing that come to my head: we need a generic-for-everybody driver to install in the OS where it is assigned an "ergodox layout", country/language-agnostic, where the ppl can configure his layout in any language - too much painful, difficult, time and work.
Then I realized another solution:
So let's think the idea about something like this:
<
, and before to have released it you press another normal key, the dispatcher makes sure to first release it before to mark as pressed the next one(And then an universe of new ideas blinked in front of my eyes)...
So what about new horizon of possibilities ? See those nice ideas:
Note that these are just ideas of possibilities, I don't mean that we should have all those features but making the keys work on a queue/dispatcher way can allow all those possibilities to exist, and with a few entries (or just a copypaste of these ideas) in the documentation there would be eventually people that would write nice features like these listed ideas :)
Hey there!
I'm trying to use the firmware with a non-ergodox keyboard, and i'm trying to diagnose if i've got everything hooked up right. Any tips for troubleshooting/dev mode/getting any kind of debug info from the teensy that might indicate what i've screwed up?
Thanks much for consideration
For example if I press a certain key (only one) in the ergodox, the computer receives it as cmd+shift+d or control+tab+z
Is it possible to implement this on the current state of ergodox-firmware? What files should I be looking at to achieve this?
I have a key in each hand to push to the layer 2, this layer contains special programming chars, so i use it most of the times, because it is so many used I press the key to push to this layer from one hand to another constantly, and there is where starts the problem, example:
What happens here?
Seems like the cause is that the function to push/pop the layers don't remember them by identifiers or stacks or something like that, so in a natural typing when you switch to the other hand to press this layer key most of the times you release the first one after to have pressed the second one, which pushes you "out" of the layer 2, no matter if you still having the second key pressed or not.
Hello Ben,
Thank you for your great work. We love it.
This is not really a bug report but I fill it here to maybe help people facing the same issue than me.
I sometimes had my Ergodox randomly sending some of the keys twice and that was pretty annoying.
I changed the following value from 5 to 15 in the firmware\keyboard\ergodox\options.h
// in milliseconds
Since then, I never had the problem.
I read some reports from people that were bored by the 5ms and lowed it to 2 because it was not fast enough for them ??? I'm not so fast so 15ms is ok for me.
Best regards,
Pierre
Wished for features include:
I might attempt this by merging / porting hasu's version the the PJRC USB stack, or possibly by rewriting the whole thing (or most of it) myself. Neither option (for me, right now) would be trivial, and depending on interest, etc., there's a chance it won't get done... but it'd be really nice if it did. We'll see how it works out.
Has anyone implemented a multi key output already?
For an example, when I'm pressing a single key I would like the output to be =>
or <%=
.
I'm basing my firmware off the partial-rewrite branch, if you don't recall. This is where I'm at right now: https://github.com/frioux/ergodox-firmware/commits/frew
The 10-key commit is: frioux@6b89f23
The main issue is that even though I use numPush instead of lpu3l3, the number keys are still in arrow mode or non numlock. If that were fixed I'd just move on. There are a couple other strange issues as well that I figure I might as well mention.
If I use the numPush on my Z key in layer 1, it correctly pushes the numpad onto the stack (albeit still not in numlock mode.) If I use the numPush mode on the key underneath V it doesn't push onto the stack. It does something else, but I can't quite tell what, maybe esc then some keys.
Lastly, if you are interested, your commit called "(planning)" made the code no longer compile.
My wife grew up learning to type on Japanese thumb-shift keyboards, which are difficult to find out here. I've wondered if I could reasonably expect to write a layout for her that would approximate that old style, and if this would be the right place to start?
The best way available might be to implement a macro that expands, for unicode character 0x****, into "alt + * * * *" (which should work for most, but not all, programs on both Windows and OS X, but only after enabling it in the OS).
This has certain problems though, obviously, and I'm hoping (against probability) to ultimately get this feature some other way.
It would be nice to have an embedded numpad that is activated with the num-lock (similar to the realforce 87u and IBM SSK).
Build from master branch and encounter error in last step.
------- done --------------------------------------------------
avr-size --target=ihex firmware.hex
text data bss dec hex filename
0 9582 0 9582 256e firmware.hex
avr-size --target=ihex firmware.eep
text data bss dec hex filename
0 0 0 0 0 firmware.eep
you can load "firmware.hex" and "firmware.eep" onto the
Teensy using the Teensy loader
make[1]: Leaving directory `/home/khl/Downloads/ErgoDox/new/ergodox-firmware/src'
cp 'src/firmware.hex' 'build/ergodox-firmware--master--20130818T220607--8e7ab89--colemak-symbol-mod/firmware.hex'
cp 'src/firmware.eep' 'build/ergodox-firmware--master--20130818T220607--8e7ab89--colemak-symbol-mod/firmware.eep'
cp 'src/firmware.map' 'build/ergodox-firmware--master--20130818T220607--8e7ab89--colemak-symbol-mod/firmware.map'
( ./'build-scripts/gen-ui-info.py'
--current-date '2013-08-18 22:41:07+08:00'
--git-commit-date '2013-08-18 22:06:07 +0800'
--git-commit-id '8e7ab89466ffa958d0e46ae37ef3582d37744ea0'
--map-file-path 'build/ergodox-firmware--master--20130818T220607--8e7ab89--colemak-symbol-mod/firmware.map'
--source-code-path 'src'
--matrix-file-path 'src/keyboard/ergodox/matrix.h'
--layout-file-path
'src/keyboard/ergodox/layout/colemak-symbol-mod.c'
) > 'build/ergodox-firmware--master--20130818T220607--8e7ab89--colemak-symbol-mod/firmware--ui-info.json'
Traceback (most recent call last):
File "./build-scripts/gen-ui-info.py", line 475, in
main()
File "./build-scripts/gen-ui-info.py", line 467, in main
args.layout_file_path ))
File "./build-scripts/gen-ui-info.py", line 396, in gen_mappings
parse_layout_file(layout_file_path) )
File "./build-scripts/gen-ui-info.py", line 375, in parse_layout_file
[[eval(el) for el in layer] for layer in layout['_kb_layout']]
KeyError: '_kb_layout'
make: *** [build/ergodox-firmware--master--20130818T220607--8e7ab89--colemak-symbol-mod/firmware--ui-info.json] Error 1
This applies to the partial rewrite branch. I recently got the zodiac set (http://www.pimpmykeyboard.com/marketplace.php) and thought it would be kinda fun to have a layer that would literally type those keys. Here is the patch I wrote to do that:
diff --git a/firmware/keyboard/ergodox/layout/qwerty-kinesis-mod.c b/firmware/keyboard/ergodox/layout/qwerty-kinesis-mod.c
index 3418ab1..e56cb05 100644
--- a/firmware/keyboard/ergodox/layout/qwerty-kinesis-mod.c
+++ b/firmware/keyboard/ergodox/layout/qwerty-kinesis-mod.c
@@ -102,6 +102,8 @@ void keys__press__m_undo(void) {
usb__kb__set_key(false, KEYBOARD__z_Z);
}
void R(m_undo)(void) {}
+void P(m_aries)(void) { KF(type_string)( PSTR("♈") ); }
+void R(m_aries)(void) {}
// ----------------------------------------------------------------------------
// layout
@@ -145,7 +147,7 @@ static _layout_t _layout = {
btldr, F1, F2, F3, F4, F5, F6,
transp, transp, m_word, transp, transp, transp, transp,
transp, transp, transp, transp, transp, transp,
- transp, transp, del, transp, transp, m_bword, transp,
+ transp, lpupo2l2, del, transp, transp, m_bword, transp,
transp, transp, transp, transp, transp,
transp, transp,
transp, transp, transp,
@@ -166,7 +168,7 @@ static _layout_t _layout = {
// macro, unused,
K, nop,
// left hand ...... ......... ......... ......... ......... ......... .........
- btldr, nop, nop, nop, nop, nop, nop,
+ nop, m_aries, nop, nop, nop, nop, nop,
nop, nop, nop, nop, nop, nop, nop,
nop, nop, nop, nop, nop, nop,
nop, nop, nop, nop, nop, nop, nop,
When I do hit the Aries key with the appropriate push keys held down it sends a set of control characters that interact poorly with pretty much every application.
Clearly this isn't super important but I figure that if it doesn't work here there may be real applications that it doesn't work for.
Question Ben: When I push a layer (say layer 4) and then I push another layer (say layer 3), when I then pop layer 3, shouldn't it go back to layer 4? In the partial-rewrite, this is currently not working for me (toggling of layers works fine though).
Hello!
I have followed the steps in the docs to load the firmware to my Ergodox. The problem is that the keyboard does not show up as a registered usb device, which also means that nothing happens when I press any buttons.
I expect to see something like this in /var/log/kern.log
:
Oct 3 19:47:45 shinji kernel: [10114.648568] usb 8-2: new full-speed USB device number 42 using uhci_hcd
Oct 3 19:47:45 shinji kernel: [10114.833354] usb 8-2: New USB device found, idVendor=046d, idProduct=c52b
Oct 3 19:47:45 shinji kernel: [10114.833361] usb 8-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Oct 3 19:47:45 shinji kernel: [10114.833364] usb 8-2: Product: USB Receiver
Oct 3 19:47:45 shinji kernel: [10114.833368] usb 8-2: Manufacturer: Logitech
Oct 3 19:47:45 shinji kernel: [10114.849787] logitech-djreceiver 0003:046D:C52B.0034: hiddev0,hidraw1: USB HID v1.11 Device [Logitech USB Receiver] on usb-0000:00:1d.2-2/input2
But nothing shows up.
However, when I press the reset button the Teensy to activate Halfkay the device shows up as expected:
Oct 3 19:58:10 shinji kernel: [10740.252579] usb 8-2: new full-speed USB device number 55 using uhci_hcd
Oct 3 19:58:11 shinji kernel: [10740.403434] usb 8-2: New USB device found, idVendor=16c0, idProduct=0478
Oct 3 19:58:11 shinji kernel: [10740.403440] usb 8-2: New USB device strings: Mfr=0, Product=0, SerialNumber=0
Oct 3 19:58:11 shinji kernel: [10740.407815] hid-generic 0003:16C0:0478.0048: hidraw4: USB HID v1.11 Device [HID 16c0:0478] on usb-0000:00:1d.2-2/input0
Any advice on what my next steps would be to solve this problem?
I figured this would be software related to the Teensy since the keyboard doesn't even show up as a registered device.
Many thanks in advance!
Edit:
I forgot to mention that a simple blink demo works as expected and non of the problems in the PJRC Troubleshooting guide applies to this problem.
I have tried the firmware from the v1 release, I have tried firmware downloaded from Massdrops confiugrator and I have tried the firmware built from master.
Hi, I have some problems with this firmware.
To refer to the Keys, I use this chart: https://imgur.com/23oq21M
How do I add a Key that activates a layer? What I did so far:
Also kbfun_transparent seems to get in my way. I do not see why one would want such a function, but fine, I replaced it with kbfun_press_release. Yet, some strange things happen I suspect to be related with that.
K0A and K39 on layer 1 are mapped to backspace. However, only K39 actually produces a backspace. K0A produces Spaces, as on layer 0. I can't figure out why.
On Layer 1 The left half is a flipped version of the right half. That works for most keys just fine. However key k42, that should produce a "o", does produce a "shiftL + o" and so a captial "o", and I don't know why.
keys K20 and KD2 do behave like shift keys, and this is intended behavior. However that does not make sense to me, as they are mapped to kbfun_2_keys_capslock_press_release rather than to kbfun_shift_press_release. I'd like to map key K2D on layer 2 to shift lock, how do I do this?
Here is my C-Source code: https://gist.github.com/Miko4/974c2ecc5bda0becb5bd
( ./'build-scripts/gen-ui-info.py' \
--current-date '2014-03-03 19:37:55-08:00' \
--git-commit-date '2014-03-03 19:31:45 -0800' \
--git-commit-id 'c87e2824d6fad4e3d38a85651b864ac281c59f14' \
--map-file-path 'build/ergodox-firmware--master--20140303T193145--c87e282--qwerty-kinesis-mod/firmware.map' \
--source-code-path 'src' \
--matrix-file-path 'src/keyboard/ergodox/matrix.h' \
--layout-file-path \
'src/keyboard/ergodox/layout/qwerty-kinesis-mod.c' \
) > 'build/ergodox-firmware--master--20140303T193145--c87e282--qwerty-kinesis-mod/firmware--ui-info.json'
Traceback (most recent call last):
File "./build-scripts/gen-ui-info.py", line 476, in <module>
main()
File "./build-scripts/gen-ui-info.py", line 465, in main
dict_merge(output, parse_mapfile(args.map_file_path))
File "./build-scripts/gen-ui-info.py", line 218, in parse_mapfile
dict_merge(output, parse_layout_matrices(f, line))
File "./build-scripts/gen-ui-info.py", line 186, in parse_layout_matrices
name = re.search(r'.progmem.data.(_kb_layout\S*)', line).group(1)
AttributeError: 'NoneType' object has no attribute 'group'
make: *** [build/ergodox-firmware--master--20140303T193145--c87e282--qwerty-kinesis-mod/firmware--ui-info.json] Error 1
Note that this is not the same error as #30
unless nobody wants one
is it possible to add a feature or function so that dead-key is handled by keyboard rather than OS?
This can be useful for non-English languages that use accents (like Ě)
as well as other usages.
So basically by pressing a key, a layer is pushed to the top of stack. the next key that's pressed when this special layer is active will produce the desired code and immediately pop the layer out of stack, eliminating the need to remove the layer manually.
I just check out master and tried to compile (On Mac OS X) and I get this error:
cp 'src/firmware.map' 'build/ergodox-firmware--master--20140731T155009--e330dbd--qwerty-kinesis-mod/firmware.map'
( ./'build-scripts/gen-ui-info.py' \
--current-date '2014-07-31 15:50:31-04:00' \
--git-commit-date '2014-07-31 15:50:09 -0400' \
--git-commit-id 'e330dbdd97a45391bb50dc067589aeccc7533caf' \
--map-file-path 'build/ergodox-firmware--master--20140731T155009--e330dbd--qwerty-kinesis-mod/firmware.map' \
--source-code-path 'src' \
--matrix-file-path 'src/keyboard/ergodox/matrix.h' \
--layout-file-path \
'src/keyboard/ergodox/layout/qwerty-kinesis-mod.c' \
) > 'build/ergodox-firmware--master--20140731T155009--e330dbd--qwerty-kinesis-mod/firmware--ui-info.json'
Traceback (most recent call last):
File "./build-scripts/gen-ui-info.py", line 474, in <module>
main()
File "./build-scripts/gen-ui-info.py", line 463, in main
dict_merge(output, parse_mapfile(args.map_file_path))
File "./build-scripts/gen-ui-info.py", line 214, in parse_mapfile
dict_merge(output, parse_keyboard_function(f, line))
File "./build-scripts/gen-ui-info.py", line 171, in parse_keyboard_function
name = search.group(1)
AttributeError: 'NoneType' object has no attribute 'group'
make: *** [build/ergodox-firmware--master--20140731T155009--e330dbd--qwerty-kinesis-mod/firmware--ui-info.json] Error 1
I'm new to compiling the project, so I'm not really sure what that means.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.