* various edits and minor additions
* updates
* updates
* updates
* lets_split LEDs off instructions
* lets_split LEDs off instructions
* turn off lets_split LEDs in userspace
* one-hand setup for right side
* add process_terminal() and update links to other functions
* convert links to permalinks and add a few missing process_* functions
* update links in main text as well
* Massdrop keyboards readme update
Massdrop keyboards readme update for flashing instructions
* ctrl and alt keyboard readme update
Updating make command in Massdrop CTRL and ALT keyboard readme files to reflect directory change
This is the simplest, most efficient way I could come up with to silence
the "Failed to start write 60" error that occurs when QMK tries to talk
to a screen that doesn't exist.
iota_gfx_init passes a success boolean. We catch that into a global bool
(we could rewrite multiple functions to pass this as an argument, but
given the number of keyboards using this code it seemed less disruptive
this way) and then use that as a conditional on running the
iota_gfx_task in matrix_scan_user.
Tl;dr: if the screen doesn't init, the screen write code doesn't run.
* STM32 EEPROM Emulation
- Added EEPROM emulation libaries from libmaple and Arduino_STM32. https://github.com/rogerclarkmelbourne/Arduino_STM32 and https://github.com/leaflabs/libmaple.
- Renamed teensy EEPROM library and added conditional selection of library.
- Remapped EEPROM memory map for 16 byte blocks (as is with STM32f3xx MCUs).
- Added EEPROM initialization in main.c of Chibios.
- Added EEPROM format to clear the emulated pages when EEPROM is marked as invalid.
* Fixed ifdef
* Massdrop SAMD51
Massdrop SAMD51 keyboards initial project upload
* Removing relocated files
Removing files that were relocated and not deleted from previous location
* LED queue fix and cleaning
Cleaned some white space or comments.
Fix for LED I2C command queue.
Cleaned up interrupts.
Added debug function for printing numbers to scope through m15 line.
* Factory programmed serial usage
Ability to use factory programmed serial in hub and keyboard usb descriptors
* USB serial number and bugfix
Added support for factory programmed serial and usage.
Incorporated bootloader's conditional compiling to align project closer.
Fixed issue when USB device attempted to send before enabled.
General white space and comment cleanup.
* Project cleanup
Cleaned up project in terms of white space, commented code, and unecessary files.
NKRO keyboard is now using correct setreport although KBD was fine to use.
Fixed broken linkage to __xprintf for serial debug statements.
* Fix for extra keys
Fixed possible USB hang on extra keys report set missing
* I2C cleanup
I2C cleanup and file renames necessary for master branch merge
* Boot tracing and clocks cleanup
Added optional boot debug trace mode through debug LED codes.
General clock code cleanup.
* Relocate ARM/Atmel headers
Moved ARM/Atmel header folder from drivers to lib and made necessary makefile changes.
* Pull request changes
Pull request changes
* Keymap and compile flag fix
Keymap fix for momentary layer.
Potential compile flag fix for Travis CI failure.
* va_list include fix
Fix for va_list compile failure
* Include file case fixes
Fixes for include files with incorrect case
* ctrl and alt67 keyboard readme
Added ctrl and alt67 keyboard readme files
* Add german layout for redox keyboard
A german layout for the redox keyboard which tries
to stay close to the default english redox layout
while acommodating the umlauts at their usual position.
* Fix keycodes in german redox keymap
The keycode for Y was wrong.
* Minor changes
* Remove #ifdef include guard by #pragma once
* Remove unnecessary include from rules.mk
* Review changes
Remove unnecessary code fragments that
were pointed out in the review
of PR #3695 by @drashna.
* Adding the AT101 PCB firmware
* Fixed AT101 keymap error
* Fixing AT101 firmware
* More Fixes for AT101 firmware
* Rename AT101_Blackheart.c to at101_blackheart.c
* Rename AT101_Blackheart.h to at101_blackheart.h
* Update readme.md
* Renaming AT101 folder pt1
* Renaming AT101 folder pt2
* Fixing AT101 LED function name
* Redoing AT101 folder naming pt2
Last round had issues, should be the last rename.
* Fixing missing comma in at101_blackheart.h
* template.h file cleanup
Reformatted the pre-macro comments as block comments.
Updated the ps2avrgb template comment to match the avr template's comment, which was more informative.
Deleted the line about the macro representing the Planck MIT layout, because the macro doesn't represent that layout anymore.
* base template keymap.c refactor
Deleted the deprecated TMK macro functions.
Defined two custom keycodes for use as macros by process_record_user.
process_record_user is now after the keymap and before matrix_init_user, where the deleted TMK functions were.
* Removed an extra " from macro command per @drashna
* Added BOOTLOADER rule to avr/rules.mk per @drashna
* Updated Bootloader sections per @drashna
* Updated links to docs at the bottom of both avr and ps2avrgb template readme.md files
Corrected the links to the Build Environment Setup and the Make Instructions docs.
Added direct link to the QMK Complete Newbs Guide.
* Make tap function inline
* Use better makefile keyboard detection
* Remove Copy-Paste macro
* Add F11/F12 to Iris
* Minor tweaks to userspace config
* Set audio clicky randomness to 1.5
* Set NO_DEBUG to only be set if console is not enabled
* Move NO_MUSIC_MODE to userspace config.h
* Reduce Ergodox Debounce
* Add Planck Light config
* Use OSM for ortho 4x12
* Music Mode changes for planck light
* Cleanup do to shutdown user and other fixes in Master
* Add and use 'shutdown_user' fzunction
* Remove global NO_MUSIC_MODE define
* Add NO_MUSIC_MODE to individual keymaps
* Change layer colors
* Remove NO_PRINT and NO_DEBUG from userspace config.h
Since these are automatically disabled if the console isn't enabled.
* Remove backlight code if backlight isn't enabled
* Remove Twinkle from Ergodox
* Disable RGB twinkling and enable PSM
* Clean up RGB matrix code
* Clean up planck light indicators
* Clean up tap code
* Rules cleanup for ortho 4x12
* Fix up userspace template
* Revert "Clean up tap code"
This reverts commit 09f64d6d67aa021c3b5ac86a9a739a5ca2b9c1ec.
* Organize includes
* userspace cleanup
* Fix modifier spelling error
* Fix userspace rules
* Disable Permissive Hold again
* Minor clean up
* Fix Tap stuff
* Viterbi Updates for file size
* fixed arrow keys and left control
* added right shift
* latest version
* reverted arrow keys
* edited readme
* added osu layer
* updated osu layout
* updated osu layout
* added full arrow keys to osu layout
* in case i mess up creating macros
* added the best meme key in the world
* added plover steno layer
* updated boy314 layout
* removed unused layers
* added boy314 xd75 layout, inspired by preonic layout
* added boy314 xd75 layout, inspired by preonic layout
* version 2 of boy314's xd75 layout
* added readme notes
* updated readme for boy314 xd75 layout
* qwerty support, brackets on bottom row, caps lock underglow
* fixed readme/
* small changes to allow merging
* minor changes to format
* fixed up default readme
When moving my planck layout to my let's split, I ran into this issue
because I had copied my planck layout from the default layout which just
used the `{}` array form for the keymap layers. I checked the docs, but
this bit wasn't clear to me. I'm sure @ishtob or @drashna helped me on
discord, but this seemed to be the logical place to add a helpful hint.
* Keyboard: HandWired/XeaL60
* Updated rules.mk
* Mapping for layout was flipped
* Figured out how to re-map bad pins.
* Updated Keymap
* Enabled audio, Forced NKRO
* Added QMK_KEYS_PER_SCAN
* Removed more unnecessary files, since split_keyboards are in main QMK branch already.
* Simplified rules.mk in rev1
* Removed i2c from matrix.c
* Re-formatted to 4 spaces per tab,
* Changed note for NUMPAD
* Added I2C support back!
* Fixed keyboard mappings. Both sides work
* Moved i2c configuration from keymaps/default/config.h to config.h
* Changed SCL_CLOCK to 400000L
* Added DEBUG_MATRIX_SCAN_RATE for future optimization efforts
* Removed row2col code to clean up matrix.c
* Scan rate from 2100 -> 4200 by using Nop instead of waiting 30us between columns.
* Further optimized column reading via optimized_col_reader.
* Immediate key-recognition
* Switched back to own implementation of SPLIT_KEYBOARD. Will optimize so that slave interrupts master.
* Moved scanrate debug messages to another file.
* Made matrix_scanrate.c compile if CONSOLE_ENABLE is off. Updated to latest i2c.c
* Latest i2c uses a few bytes for lighting information
* Optimizations in i2c.h to determine buffer size.
* Disabled a whole bunch of features. TODO: Test that keyboard still works fine.
* Minimum #define NO_ACTION's with still working keyboard
* Fixed matrix not working due to offsets not being respected
* Added numlock button for keymap.
* Use I2C_KEYMAP_START offset
* Removed serial, Backlight and RGB support
* Removed need for split_flags.
* Added audio on and off for numlock.
* Renamed from xeal60 to xealous, simplified build system.
* Used more shared split_common code.
* Updated audio code.
* moved tone_qwerty and tone_numpad to config.h. Removed keymaps/default/config.h
* Added more shortcut keys in _FN layer. Increased debounce to 6ms due to fencepost error.
* DF used with incorrect argument. Custom_keycodes no longer required.
* Fixed bug in update_debounce_counters which was resulting in no debouncing!
* Removed unnecessary #include
This small change prevents an unused variable from being initialized, throwing a warning during compilation, thus ending fatally.
[07:47:10] [Daniels-MacBook-Pro-3] [dburkhol] [ /Users/dburkhol/git/qmk_firmware ] [develop ]
: make handwired/dactyl:default
QMK Firmware 0.6.97
Making handwired/dactyl with keymap default
avr-gcc (GCC) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Size before:
text data bss dec hex filename
0 19972 0 19972 4e04 .build/handwired_dactyl_default.hex
Compiling: keyboards/handwired/dactyl/twimaster.c [OK]
Compiling: keyboards/handwired/dactyl/matrix.c keyboards/handwired/dactyl/matrix.c:52:22: error: 'expander_col_pins' defined but not used [-Werror=unused-const-variable=]
static const uint8_t expander_col_pins[MATRIX_COLS] = MATRIX_EXPANDER_COL_PINS;
^~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
[ERRORS]
|
|
|
make[1]: *** [.build/obj_handwired_dactyl_default/matrix.o] Error 1
make: *** [handwired/dactyl:default] Error 1
Make finished with errors
* Move octagon directory into duck diretory and fix as many compile issues as I can
* fix formatting
* fix layout75 matrix
* edit readme for build instructions
* Bocaj Layout Revamp
* Pull in Upstream (#1)
* Various tweaks for some Input:Club build processes
* change KEYMAP to LAYOUT for all new keyboards made using this script
* Add support for rev3 of the Atom47 (#2672)
* Added support for rev3 of the Atom47
* Updated Atom47 readme's
* Fix redefine error on rev2 and add maartenwut's keymap
* Fix redefine error on LEdiodes keymap
* Add Nyquist keymap (#2692)
* nyquist
* danielhklein nyquist setup
* shift left controls
* remove readme
* cleanup before pr
* ready for pr
* Adds Phantom TKL support (#2696)
* Add an info.json to phantom keyboard
* Add layouts
- KEYMAP_WINKEYLESS
- KEYMAP_7BIT
- KEYMAP_ISO
- KEYMAP_ISO_WINKEYLESS
* Add key_counts
* Add 2 missing F-Row keys
* Add TKC1800 info.json
Created an info.json for the tkc1800.
* Clueboard 60 info.json
- adds
- LAYOUT_60_ansi
- LAYOUT_60_iso
- KEYMAP_AEK
- KEYMAP
- LAYOUT_60_ansi_split_bs_rshift
* Add the Speedo keyboard
* Fix KC60 info.json file (#2707)
* change KEYMAP to LAYOUT in all the KC60 files
* Redo the info.json file
* Small fixes to TKC1800
- adjust F-row to use 0.25 spacing
- split left shift
- add key_count
* Fix some Configurator Warnings regarding LAYOUT vs KEYMAP (#2708)
* change diverge 3 KC_KEYMAP to LAYOUT
* Change KEYMAP to LAYOUT for handwired arrow pad
* change M10A to LAYOUT for m10-a
* Change KC_KEYMAP to LAYOUT_kc and KEYMAP to LAYOUT for mf68
* change KC_KEYMAP to LAYOUT for nano
* Refactor to LAYOUT
* refactor to LAYOUT-ansi and LAYOUT_iso for s65
* LAYOUT conversions for lfkkeyboards
* missed a few renames
* mini1800 for lfkeyobards support of LAYOUT
* Improve state/chord handling and clean up namespace
Some values that can never, ever, change were held in local
variables, rather than in PROGMEM. Fixed.
Change "pressed" to a signed int so the test for < 0 makes
sense, and to avoid possible weird failure modes in the
case where a key release comes in when pressed is already
zero. (Shouldn't happen, sure, but computers are weird.)
A lot of things in process_steno had external linkage for no
particular reason. They've been marked static. Stuff still
builds.
Distinguish between currently-held keys and keys that have
been held, and expose these values through a nicely-named API
so other code could, say, check on the current set of steno
chording in order to make displays. Also in passing fix up the
"state" value having external linkage so it could clash with
other people's variable declarations.
The API also provides hooks for key processing and steno chord
events, so you can monitor those events without having to
run in matrix_scan_user and recheck the values directly. Also
document these.
There is no path through processing a key that doesn't
end with a return false, so the nested return foo() are
gone and we just return false.
* Pull information from config.h and rules.mk (#2711)
* Pull information from config.h and rules.mk
* Readd the kbd75 maintainer
* Remove obsolete info.json entries (#2712)
* Clean up some long-standing errors when populating the API (#2715)
* More Configurator Warning Fixes (#2716)
* mf68_ble did not have the correct .c and .h files
* Fix JC65 KEYMAP to LAYOUT
* Change KEYMAP to LAYOUT for s60_x
* Convert KEYMAP to LAYOUT for lets_split boards
* Convert KEYMAP to LAYOUT
* more fixes to keymap for iris
* convert KEYMAP to LAYOUT for levinson keyboard
* change losinggeneration's KEYMAP to LAYOUT
* convert KEYMAP to LAYOUT
* convert KEYMAP to LAYOUT for nyquist
* convert KEYMAP to LAYOUT
* convert KEYMAP to LAYOUT for viterbi
* convert KEYMAP to LAYOUT
* convert KEYMAP and its subsidiries to the LAYOUT standard
* convert KEYMAP and its subsidiries to the new LAYOUT standard
* Normacos keymap for let's split keyboard (#2691)
* Cheers let's split keymap
* fixed typo on norman layer of cheers keymap for let's split
* fixed right handed mappings for home row
* cheers keymap for let's split redefinition
* updated Cheers keymap for let's split
* cheers keymap for let's split updated with some terminal macros
* renamed cheers let's split keymap to a more appropriate normacos
* updated normacos keymap doc / removed non functional keys
* reset let's split rules to default values
* added more spotlight search macros
* normalized keymap comments
* Moved numpad on lower layer
* hhkb jp personal keymap (#2698)
* Add JJ40 Cockpit personal keymap (#2713)
* Add JJ40 Cockpit keymap
* Fix lower layer symbols
* Add readme for "major" keyboards to eliminate more QMK Configurator errors (#2718)
* add readme to ktype keyboard
* add readme to m10a
* add readme to mini1800
* add readme to parent directory
* Revert "Pull in Upstream (#1)"
This reverts commit eeba0cec17.
* Updates to Bocaj Files
- Gave up on Tap Dance for ' -> '
+ Added another 'Secret'
+ Add ' -> ' to the Swap Hands key
+ Add Swap Hands to the ' -> ' key
+ Made Hand Swapping a momentary toggle
- Removed Auto Shift
+ Added Layer Toggle to KC_QUOTE for the _TOOLS layer
- Disabled Tap Dance
* Merge remote-tracking branch 'upstream/master'
* Updates to Bocaj
Added Game Layers, Removed Unused Macros
* Removed 'secrets.h'
* Updates to Bocaj
Remove 'secrets'.
Remove 'sendstring_workman.h' and set related layer back to qwerty due to macro compatibility issues
* Total revisioning of keymap and layout structure
* Missed readme.md file
* Bocaj - Permissive Hold setting enabled
* Switching from ErgoDox EZ centric configuration to the layout/user approach
* Bocaj - Create Userspace and Ergodox layout
* Update settings.json
* ISSI31FL3733 driver
- Addapted IS31 driver for the above driver
* fix my branch
* ISSI31FL3733 driver
- Inclusion of above ISSI led driver
* IS31fl3733 driver
- Added correct function for control registers
* Finalized support for ISSI31fl3733 led driver
- Finalized and tested driver.
- Modified i2c_master for arm due to declaration mistake.
- Fixed spaces/tabs in quantum.h file.
- Fixed spaces/tabs in common_features.mk file.
- Removed unnecessary includes from rgb_matrix.c file.
- Added local definitions for MIN and MAX macros in rgb_matrix.c file.
- Adjusted chevron effect.
- Added necessary define (RGB_3733_MATRIX_ENABLE) for makefile.
- Added necessary C define (ISSI3733) to aid with inclusion of the correct header file.
- Added documentation for the new driver.
* Driver structure update
- Changed rule includes to be more condensed (RGB_MATRIX_ENABLE = IS31FL3731) and (RGB_MATRIX_ENABLE = IS31FL3733)
- Updated documentation
- Reverted to the use of differently named functions for each driver and selecting the needed ones within rgb_matrix.c
* ISSI Drivers refractoring
- Moved issi drivers in a dedicated folder
- Updated documentation
* I2C library fix
I released the special pins incorrectly before. It is now fixed.
* Adding my personal planck keymap
* Adding readme.md to my keymap
* Create my userspace
add users/ishtob/
* Moved macros off keymap
macros now exsists in my userspace, moved them off keyboard specific keymaps
* Create my userspace
add users/ishtob/
* rebase from main QMK repo
* fixed compile error with planck rev6 keymap
* fixed compile error with planck rev6 keymap
* Revert "Merge branch 'master' of https://github.com/ishtob/qmk_firmware"
This reverts commit 6c8a9a6eec, reversing
changes made to 5c598d9a53.
* fixed issue where compile errors if private macro file is not present
* Revert "fixed issue where compile errors if private macro file is not present"
This reverts commit e0035df48f.
* Fixed STM32 timer issue with Planck Rev6 with tap mods
* Revert "fixed compile error with planck rev6 keymap"
This reverts commit 5c598d9a53.
* Revert "Revert "fixed compile error with planck rev6 keymap""
This reverts commit c36896ca71.
* Fixed compile issues with my personal userspace and keymap utilizing the userspace
* Added buswerks keymap
* cleaned up comments on buswerks keymap
* Added buswerks keymap readme.md
* Fixed spelling in buswerks readme.md
* Removed unnecessary includes, changed process_record_user to now use set_single_persistent_default_layer(), removed deprecated functions, and moved the audio ifdef block to config.h
* Changed buswerks ortho_4x12 layout to accommodate 'MIT' layout
* Updated README.md to reflect layout changes
* Initial Commit
Port from xauser's jetfire code. Does not compile yet
* fix up keymap from uint8 to uin16
* update rules file to contain custom matrix
* Good stopping point
Still lots of compile errors but I'm getting there.
* fix a few more compile errors
* move a few functions around to help with compiling
* Finally got it all to compile
* Get rid of that old KEYMAP macro
* edit readme
* Put my name everywhere and some minor code clean ups
* start to remove that kc nonsense
* fix keymap compilation issues
* add reset key info
* better human readable formatting
* match the duck default layout
* add confgurator support
* clarify reset key
* might be a good idea to use the correct pin
* get the riight keycode for RGB
* include an ALL layout
* I tried to fix the formatting....sigh
* add functons to ensure Configurator compile-ability
* move jetfire to duck directory
* Moved and renamed things as per Drashna's PR comments as his back was hurting as he reviewed this
Special thanks to Drashna for teaching me how to implement myFNX command. This allows a user to hold Fn for regular Fn and
tap to toggle another layer.
For now this will stay within my community layout as this is the
only layout that I will be using this in. This may change in the future.
* Add svorak a5
* Update Svorak A5 keymap
* Fix issue with special characters
The initial keymap did not account for non US software layout. Hence, the
special characters were incorrect. Since this layout is aimed towards Swedish
writing people the presumption is that whoever uses it will have Swedish as
their OS language.
Includes:
- Special character issue fixed
- QWERTY layer that can be toggled if requiered (also presumes Swedish software
layout)
* Add special characters and media keys
* Add ctrl, alt, etc. to functional layer
* AMJ96 Refactor
LAYOUT matrix and default keymap refactored to use full-length keycodes (instead of shorthand).
* Configurator update
Minor physical layout update and made the labels more sensible.
* Readme update
White space correction.
* Default keymap update: #include QMK_KEYBOARD_H
* rules.mk update
Disabled the following options as my local test compile's .hex ended up too big to fit in the available flash space:
MOUSEKEY_ENABLE
EXTRAKEY_ENABLE
BACKLIGHT_ENABLE
RGBLIGHT_ENABLE
If this is undesirable, suggestions are welcome.
* Config/rules update
Re-enabled MOUSEKEY_ENABLE, EXTRAKEY_ENABLE, BACKLIGHT_ENABLE, and RGBLIGHT_ENABLE and disabled COMMAND_ENABLE in rules.mk; enabled NO_ACTION_MACRO and NO_ACTION_FUNCTION per @drashna
* Swapped `___` for `XXX` in amj96.h per @mechmerlin
* add configurator support
* update bface code to more modern QMK standards
* update readme
* update readme
* Make changes thanks to noroadsleft's PR comments
* first verion of skug
* zudvp layer added and new thumb cluster
* move del to arrw cluster and switch places of algr and no_circ
* first verion of skug
* zudvp layer added and new thumb cluster
* move del to arrw cluster and switch places of algr and no_circ
* rework layouts
* Adds SYMB layer toggle to 'ä'
Closes#2
Also moves ctrl away from '-' and 'z' to the outer bottom corners
and removes redundant SYMB layer binds from there
* Adds mouse movement to right hand on ARRW layer
Closes#3
* Fix typoed keycodes
* planck qwerty nordic
* Update README.md
* Update README.md
* Implemented changes to planck layout requested by drashna
* Implemented changes to ergodox layout requested by drashna
NOTE: `version.h` is still required.
* Added support for the b.face keyboard
This commit adds support for the 60% keyboard from winkeyless, the
b.face. The basic keyboard layout as well as the RGB backlighting
works as expected; the per-key LEDs can be turned on or off but not
yet dimmed. A default 60% US-layout is included.
* Added link to the bface in the ps2avrGB README
* add my config
* fix backlight, clean up that code
* group background code, restore static var
* qwerty is supposed to be in the middle
* wrap layer change backlight in ifdef
* backlight levels and some more 'emojis'.
* Restructure to make it possible to press cmd ent on the right side of the board with one hand.
* Expose the period through the number layer. Add Hyper keys to mouse layer
* reduce mouse speed
* add a : -P key
* Thumbs up and down, remove some keys that are duplicated via function keys, clean up
* fix build issues
* add various emoji
* duplicate default Meira keymaps
* Miera updates
* add documented but unmapped emoji
* Sound for the Meira, was stumped by a file size! Thanks drashna!
* add docs
* docs
* revert lib changes...
* clean up
* clean up
* remove make file
* Fixes missing key
* clean up
* add my lets split
* add more emoji
* add the telophase board (unofficially, I guess...)
* add missing files
* add/reset files
* Review feedback implementation: Not needed. Add #define FLIP_HALF to your config.h file instead.
* Review feedback implementation: All of these includes should be replaced with #include QMK_KEYBOARD_H.
* Review feedback implementation: [FAILING] You may want to use LAYOUT_ortho_4x12 instead, and move this to /layouts/community/ortho_4x12/ instead. That way, you can use the same keymap for all of the boards.
* clean up
* add a key for command tilde (osx loves it)
* at least its building again
* remove adjusts and migrate layer switching to MO(_LAYER)
* update the telophase readme
* update the telophase readme
* grahampheaths -> grahampheath
* ONEHAND_ENABLE -> SWAP_HANDS_ENABLE
* convert lets split to use ortho_4x12
* Move lets split keyboard layout into community/ortho_4x12
* make telophase use LAYOUT()
* I did it?!
* Add clap and grin
* swap tabs and back and forward
* whitespace
* initial commit
* update readme
* enable/disable some keyboard features and add 60_ansi community layout support
* put my name everywhere
* can't use numbers for defines
* enable lighting
* put in a default keymap, use the correct pins, and put in a switch matrix
* update switch matrix to use KXY hex notation
* add QMK Configurator support
* add the rest of my name
* update where to get this keyboard
* Implement magic 8-ball mode for big series switch
* LED Testing
* Add Ctrl+Alt+Del key mapping
* Add Windows lock (win+L) layout.
* Add Big Series 3-key
* Add Big Series 4-key
* Add Big Series 2-key
* Fix layout mapping for Big Series 3u
* Fix merge-conflict.
* Refactor bigseries boards into a single folder
* Add biacco-biacco keymap
* Change P position
* Update biacco-biacco map y position
* Revert y position...
* Refactor needless lines
* Fix some review commentted
* Obelus Refactor: LAYOUT to LAYOUT_ortho_4x4
- Keymap also now uses #include QMK_KEYBOARD_H
- Readability and white space changes
- rules.mk now has LAYOUTS = ortho_4x4
- added info.json
* naKey Refactor: LAYOUT to LAYOUT_numpad_5x4
- Matrix LAYOUT renamed to LAYOUT_numpad_5x4
- Now supports community layout numpad_5x4
- White space changes
* naKey Configurator update
Updated order of JSON objects to match new matrix order.
* initial commit and get pins correct
* get the switch matrix done
* Add Configurator support
* update LED numbering
* enable lighting options
* add a default-ish keymap
* turn off mouse keys as the file gets too large
* put my name everywhere
* update Alf names
* update keymap to match whats on qmkeyboard.cn
* Matrix refactor: eagle_viper/v2 LAYOUT_all
- Deleted K0L (research indicates no switch position at this location)
- Renamed K0J to K0I (spacebar key; on 9th column instead of 10th)
- Updated info.json and default keymap to match
- readability updates
* Keymap refactor
readability update
* Revamp replicaJunction keymaps
Updates both the replicaJunction Ergodox and Atreus keymaps and moves
most of the logic into a new user directory.
* Cleanup as requested in #3589
* Slightly increased TAPPING_TERM
* Fixed typo in #pragma once
* Fix TAPPING_TERM redefined in config.h
* Add include of replicaJunction.h
Due to the tap dance references, without this include, I was getting
compiler errors about both internal QMK items like
`qk_tap_dance_state_t` and constants defined in my replicaJunction.h
file like TD_LAYER_TOGGLE.
Also remove some commented-out code that defined an enum which has since
moved to replicaJunction.h.
* Addition of I2C master driver for STM32, Generalization of ISSI3731 driver
- Addition of an i2c_master driver for STM32 to replicate expectations of AVR driver.
- Moved ISSI3731 driver one level up to make it accesible by both architectures.
- Renamed ISSI3731 functions to a more general name for preparation of other ISSI drivers.
- Added compiler directives where necessary to differenciate each architecture.
* converted tabs to spaces
* Added buswerks keymap
* cleaned up comments on buswerks keymap
* Added buswerks keymap readme.md
* Fixed spelling in buswerks readme.md
* Removed unnecessary includes, changed process_record_user to now use set_single_persistent_default_layer(), removed deprecated functions, and moved the audio ifdef block to config.h
* Created base sixshooter configuration
* Added SixShooter basic LED on/off support.
* Updated LED identifier numbers to align with layout identifiers (and IDs on PCB).
* Minor sixshooter documentation cleanup.
* Added sixshooter info.json file.
* Moved sixshooter custom keycodes out of keymaps and into base keyboard files, small documentation tweaks.
* Removed unnecessary boot section size definition.
* Removing CONFIG_H if/define and replacing with #pragma once.
* Adding my personal planck keymap
* Adding readme.md to my keymap
* Create my userspace
add users/ishtob/
* Moved macros off keymap
macros now exsists in my userspace, moved them off keyboard specific keymaps
* Create my userspace
add users/ishtob/
* rebase from main QMK repo
* add change_reciver2sender()/change_sender2reciver()
This is a change to improve readability.
* txled, rxled off in matrix_init()
* add serial_send_packet() / serial_recive_packet()
This is a change to reduce object size.
* add serial_low() at ISR() top
* add __attribute__((always_inline)) to some functions
* modify serial_send_packet()/serial_recive_packet()
A little, object size reduction.
A little, speedup.
* add debug code to helix/serial.c
* Adjust sampling timing of serial signal being received
* add split_scomm.c/split_scomm.h and change serial.c/serial.h
serial.c was divided into 2 layers, split_scom.c and serial.c.
The upper layer split_scomm.c is called from matrix.c.
The lower layer serial.c accesses the hardware.
* add split_scomm.c/split_scomm.h into helix/rev1
* reduce object size helix/rev2/matrix.c
* remove checksum check, add parity check
* force occur parity error for test
* parity test ok. remove test code
* change some comment & add skip code when buffer_size == 0
* serial.c: multiple types of transaction support
Add 4 bits transaction-type field at packet top.
Select Transaction Descriptor Table entry by transaction-type.
* helix serial master-slave transaction optimize
Using multi-type transaction feature of serial.c, communication contents between master slaves were optimized.
* add debug code for retry
* add comment into each config.h
* fix ISR status drop
* add a debug macro 'debug_retry_chg()'
* reduce led_test size
* remove debug code from helix/serial.c and etc.
* helix:five_rows change TAPPING_TERM value 140
* Improved compatibility with let's split of serial.c. Finish helix/serial.c improvement.
- The difference with the original let's split's serial.c
- It's high-speed about 4 times.
- Stable bi-directional data transfer. (Helix need master to slave transfer)
- serial.h was divided 2 files, serial_config.h and sereial.h
- With multiple types of transaction support, communication contents can be optimized. (NEW flexible API)
- USE OLD Simple APIs (compatible with let's split serial.c)
- files :
- serial_config.h -- hardware configuration (need include by config.h)
- serial.c/serial.h -- serial communication
- USE NEW flexible APIs. (Support multi-type transaction function.)
serial.c was divided into 2 layers, split_scom.c and serial.c.
The upper layer split_scomm.c is called from matrix.c.
The lower layer serial.c accesses the hardware.
- files
- split_scomm.c -- communication buffer is defined in here. call by matrix.c.
- split_scomm.h -- buffer size is defined in here. include by matrix.c, split_util.c
- serial_config.h -- hardware configuration (need include by config.h)
To use the NEW API, specify #define SERIAL_USE_MULTI_TRANSACTION
- serial.c/serial.h -- serial communication lower layer
- NEW APIs for serial.c / serial.h (The lower layer)
// Soft Serial Transaction Descriptor
typedef struct _SSTD_t {
uint8_t *status;
uint8_t initiator2target_buffer_size;
uint8_t *initiator2target_buffer;
uint8_t target2initiator_buffer_size;
uint8_t *target2initiator_buffer;
} SSTD_t;
// initiator is transaction start side
void soft_serial_initiator_init(SSTD_t *sstd_table);
// target is interrupt accept side
void soft_serial_target_init(SSTD_t *sstd_table);
int soft_serial_transaction(int sstd_index);
int soft_serial_get_and_clean_target_status(int sstd_index);
- NEW APIs for split_scomm.c / split_scomm.h (The upper layer)
move from old serial.c the following buffer and functions
serial_slave_buffer[]
serial_master_buffer[]
void serial_master_init(void)
void serial_slave_init(void)
int serial_update_buffers(void)
define SERIAL_xxxxx_BUFFER_LENGTH move from serial_config.h to split_scomm.h

<!-- http://www.keyboard-layout-editor.com/#/gists/c1e8a15c68e4c52eed84653f21ae2d29 -->
Designed specifically to make switching back-n-forth with the Apple's MacBook Pro keyboard intuitive. Has a slight tendency toward readline/vim keybindings.
Caps locks becomes an `Esc` when pressed alone, or a `Ctrl` when pressed with another key.
Base Layer
----------
As simalar to the Apple keyboard as possible. Notiable exception is `Caps Lock`:
- `Esc` when pressed alone
- `Ctrl` when pressed with another key
Control+ Layer
--------------
Left `Ctrl` key switches to the "Control+ Layer". This layer mostly acts like a control key in most cases, with a few exceptions:
- `Ctl+` + `hjkl` are vim-style motion keys
- `Ctl+` + `p` and `Ctl+` + `n` are page up and down
- `Ctl+` + `Backspace` is forward delete
Fn Layer
--------
Audio Controls:
- `Fn` + `a` Volume Down
- `Fn` + `s` Volume Up
- `Fn` + `d` Mute
To flash this layout you need to press `Fn+Backspace`

Designed specifically to make switching back-n-forth with the Apple's
MacBook Pro keyboard intuitive. Has a slight tendency toward
readline/vim keybindings.
Caps locks becomes an `Esc` when pressed alone, or a `Ctrl` when pressed
with another key.
Base Layer
----------
As simalar to the Apple keyboard as possible. Notiable exception is
`Caps Lock`:
- `Esc` when pressed alone
- `Ctrl` when pressed with another key
Control+ Layer
--------------
Left Ctrl key switches to the "Control+ Layer". This layer mostly acts
like a control key in most cases, with a few exceptions:
- `Ctl+` + `hjkl` are vim-style motion keys
- `Ctl+` + `p` and `Ctl+` + `n` are page up and down
- `Ctl+` + `Backspace` is forward delete
Fn Layer
--------
Audio Controls:
- `Fn` + `a` Volume Down
- `Fn` + `s` Volume Up
- `Fn` + `d` Mute
To flash this layout you need to press `Fn+Backspace`
* Adds Fleuron keyboard directory and default layout
* Adds Fleuron keyboard directory and default layout
* adds double zero macro, and updates to the new macro methodology
* adds raise and lower layers
* removes makefile from default layout, turns off mousekey, console, and command in rules.mk
* makes upper right key a bksp in default layout, adds .json layout file
* updates to default layout
* tweak default layout jusabit
* fix raise and lower switch case, and scoot a few keycodes around
* make changes for PR #3571
* fixing erros for PR #3571
* adds Dollartacos first custom keymap
* fixes for PR #3571
* Initial Commit of catch22 macropad by rockydbull
* Add configurator info.json
* Use macros
* Use pragma once
* Use CA22 as product id
* Clean up readme
* Use the layer define value
* Feedback from @drashna
* initial commit
* get the matrix correct
* make my name be known
* add rgblight enable
* add a default keymap
* Add QMK Configurator support for the base layout
* add name here too
* fix up readme
* remove set user from keymap
* use led_set_kb as per drashna's comments on PR
* cloned colinta as base
* switched to default base. started customising
* minor changes to layout
* added mouse keys
* minor tweaks to layout and mouse speed
* updated readme
* tweaked layout
- added middle fn keys
- moved rgb controls to fn layer middle
- added special keys to fn layer right
* moved scroll buttons as to not interfere with lshift
* turned on backlight
* fixed backlight
* changed user keycodes to differentiate
* changed folder name to lowercase
* updated readme
* stop processing after custom keycode
* edits to suit new standards
* added layer indicator using gp100 and gp103
* Rules for vitamins_included
Added a section to disable RGB underglow for the Let's Split
Vitamins Included board.
* fixing ortho_4x12 configs
* Using upstream/master version instead
* Additions and Corrections
Corrected the Kinesis/Stapelberg's .c file to allow LEDs to work
Removed excess cruft from my Kinesis keymap to reflect this change
Other minor tweaks and adjustments to my ortho_4x12 and 5x12 layouts
* Updated readme
* dz60/macos_arrow: move the eject key on esc to leave right cmd+bksp for move to trash
* dz60/macos_arrow: move the reset key on the media layer
This avoids accidental activation.
* dz60/macos_arrow: disable LEDs
* Fix some minor errors in tap dance example
Fix for #3529
Fix minor errors in the code examples for __Example 4: 'Quad Function Tap-Dance'__ and relevant documentation.
Clarified the need to include the header file in `keymap.c`.
* Use #pragma once in header guard
Fix for #3529
Implement change requested in #3530
* Make Bootmagic and Command docs a little easier to read
* Sometimes Bootmagic/Command is default on
* "Escape" pipe character so it renders correctly
* jennetters fourier keymap, tapdance declarations and reformatted keymap file for readbility
* Update rules and keymap to follow new makefile setup.
* Add #pragma once to config.h
* add SCREEN_NAV layer for copy/pasting within screen
* working readreg/paste macros
* working read reg / paste macros
* write log and tran patterns, and expand
* add ls -la shortcut, add tab on combined layer
* put delete word on the right pinky key on shell_nav layer
* add TAB on the right side, add reset key
* added Cloud9 macros
* add cloud9 shortcuts to atreus layout
* added BROWSER_CONTROL layer
* finalized browser control layer
* adding comment
* add browser control layer to atreus
* add flashing command line
* remove the tab on combined layer
* remove the tomouse
* remove mouse layer, change log/tran expand patterns, cleanups
* add dumptlog macro
* add "delete to home" shortcut
* fix conflict
* remove unneeded mouse layer
* add meh shortcuts on the browser_control layer
* add/modify some macros
* explain the various layers
* Add files via upload
Added a nordic layout for UT47
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Add files via upload
* Update to readme and keymap files
* Update readme.md
Changed cover image
* Update readme.md
typo fix
* Delete config.h
* Delete keymap.c
* Delete readme.md
* Delete rules.mk
* Updated cover image in readme.md
Fixed typo in image of keymaps
* Update keymap.c
Changed backslash to forward slash in first function layer.
* Add files via upload
* Delete config.h
deleting files so I can upload to a folder with lower case name
* Delete keymap.c
deleting file so I can change to lower case name
* Delete readme.md
deleting file so I can change to lower case name
* Add files via upload
* Update keymap.c
Cleaned up definitions in beginning of file.
* Update keymap.c
forgot an include
* Update keymap.c
* Update readme.md
Updated picture of layout, link was wrong and pointed to an old/removed image.
* Update readme.md
Fixed error in link to keyboard layout editor
* Update keymap.c
More cleanup of the includes at beginning of file
* Update config.h
* Update keymap.c
Fixed typo: Volume Down and Volume Up on the Tab layer were switched.
* Update keymap.c
* Added a macro on the Tab layer for <kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>Del</kbd>
* Added a macro on the Gaming layer for <kbd>Alt</kbd>+<kbd>Tab</kbd> (replaces prebious Backspace key)
* Update readme.md
Updated readme.md file to reflect changes to keymap.c in cover photo and KLE link.
(added short cuts for Ctr Alt Del and Alt Tab)
* fix for that stupid LED
* formatting changes and add firmware flashing warning to readmes
* update readme with more info
* add LAYOUT_60_ansi thanks to help from phlop
* add configurator support for 60_ansi
* add 60_ansi for community layout support
* Bocaj Layout Revamp
* Pull in Upstream (#1)
* Various tweaks for some Input:Club build processes
* change KEYMAP to LAYOUT for all new keyboards made using this script
* Add support for rev3 of the Atom47 (#2672)
* Added support for rev3 of the Atom47
* Updated Atom47 readme's
* Fix redefine error on rev2 and add maartenwut's keymap
* Fix redefine error on LEdiodes keymap
* Add Nyquist keymap (#2692)
* nyquist
* danielhklein nyquist setup
* shift left controls
* remove readme
* cleanup before pr
* ready for pr
* Adds Phantom TKL support (#2696)
* Add an info.json to phantom keyboard
* Add layouts
- KEYMAP_WINKEYLESS
- KEYMAP_7BIT
- KEYMAP_ISO
- KEYMAP_ISO_WINKEYLESS
* Add key_counts
* Add 2 missing F-Row keys
* Add TKC1800 info.json
Created an info.json for the tkc1800.
* Clueboard 60 info.json
- adds
- LAYOUT_60_ansi
- LAYOUT_60_iso
- KEYMAP_AEK
- KEYMAP
- LAYOUT_60_ansi_split_bs_rshift
* Add the Speedo keyboard
* Fix KC60 info.json file (#2707)
* change KEYMAP to LAYOUT in all the KC60 files
* Redo the info.json file
* Small fixes to TKC1800
- adjust F-row to use 0.25 spacing
- split left shift
- add key_count
* Fix some Configurator Warnings regarding LAYOUT vs KEYMAP (#2708)
* change diverge 3 KC_KEYMAP to LAYOUT
* Change KEYMAP to LAYOUT for handwired arrow pad
* change M10A to LAYOUT for m10-a
* Change KC_KEYMAP to LAYOUT_kc and KEYMAP to LAYOUT for mf68
* change KC_KEYMAP to LAYOUT for nano
* Refactor to LAYOUT
* refactor to LAYOUT-ansi and LAYOUT_iso for s65
* LAYOUT conversions for lfkkeyboards
* missed a few renames
* mini1800 for lfkeyobards support of LAYOUT
* Improve state/chord handling and clean up namespace
Some values that can never, ever, change were held in local
variables, rather than in PROGMEM. Fixed.
Change "pressed" to a signed int so the test for < 0 makes
sense, and to avoid possible weird failure modes in the
case where a key release comes in when pressed is already
zero. (Shouldn't happen, sure, but computers are weird.)
A lot of things in process_steno had external linkage for no
particular reason. They've been marked static. Stuff still
builds.
Distinguish between currently-held keys and keys that have
been held, and expose these values through a nicely-named API
so other code could, say, check on the current set of steno
chording in order to make displays. Also in passing fix up the
"state" value having external linkage so it could clash with
other people's variable declarations.
The API also provides hooks for key processing and steno chord
events, so you can monitor those events without having to
run in matrix_scan_user and recheck the values directly. Also
document these.
There is no path through processing a key that doesn't
end with a return false, so the nested return foo() are
gone and we just return false.
* Pull information from config.h and rules.mk (#2711)
* Pull information from config.h and rules.mk
* Readd the kbd75 maintainer
* Remove obsolete info.json entries (#2712)
* Clean up some long-standing errors when populating the API (#2715)
* More Configurator Warning Fixes (#2716)
* mf68_ble did not have the correct .c and .h files
* Fix JC65 KEYMAP to LAYOUT
* Change KEYMAP to LAYOUT for s60_x
* Convert KEYMAP to LAYOUT for lets_split boards
* Convert KEYMAP to LAYOUT
* more fixes to keymap for iris
* convert KEYMAP to LAYOUT for levinson keyboard
* change losinggeneration's KEYMAP to LAYOUT
* convert KEYMAP to LAYOUT
* convert KEYMAP to LAYOUT for nyquist
* convert KEYMAP to LAYOUT
* convert KEYMAP to LAYOUT for viterbi
* convert KEYMAP to LAYOUT
* convert KEYMAP and its subsidiries to the LAYOUT standard
* convert KEYMAP and its subsidiries to the new LAYOUT standard
* Normacos keymap for let's split keyboard (#2691)
* Cheers let's split keymap
* fixed typo on norman layer of cheers keymap for let's split
* fixed right handed mappings for home row
* cheers keymap for let's split redefinition
* updated Cheers keymap for let's split
* cheers keymap for let's split updated with some terminal macros
* renamed cheers let's split keymap to a more appropriate normacos
* updated normacos keymap doc / removed non functional keys
* reset let's split rules to default values
* added more spotlight search macros
* normalized keymap comments
* Moved numpad on lower layer
* hhkb jp personal keymap (#2698)
* Add JJ40 Cockpit personal keymap (#2713)
* Add JJ40 Cockpit keymap
* Fix lower layer symbols
* Add readme for "major" keyboards to eliminate more QMK Configurator errors (#2718)
* add readme to ktype keyboard
* add readme to m10a
* add readme to mini1800
* add readme to parent directory
* Revert "Pull in Upstream (#1)"
This reverts commit eeba0cec17.
* Updates to Bocaj Files
- Gave up on Tap Dance for ' -> '
+ Added another 'Secret'
+ Add ' -> ' to the Swap Hands key
+ Add Swap Hands to the ' -> ' key
+ Made Hand Swapping a momentary toggle
- Removed Auto Shift
+ Added Layer Toggle to KC_QUOTE for the _TOOLS layer
- Disabled Tap Dance
* Merge remote-tracking branch 'upstream/master'
* Updates to Bocaj
Added Game Layers, Removed Unused Macros
* Removed 'secrets.h'
* Updates to Bocaj
Remove 'secrets'.
Remove 'sendstring_workman.h' and set related layer back to qwerty due to macro compatibility issues
* Total revisioning of keymap and layout structure
* Missed readme.md file
* Bocaj - Permissive Hold setting enabled
* Fix the SLC_CLOCK setting for the Split Common code
Make the SCL_CLOCK setting configurable per board, since some use different settings
And change the Iris to use 100000L instead of 400000L
* Add SCL_CLOCK variable to documentation
* Change SCL_CLOCK default to 100000L
* Add files via upload
Added a nordic layout for UT47
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Add files via upload
* Update to readme and keymap files
* Update readme.md
Changed cover image
* Update readme.md
typo fix
* Delete config.h
* Delete keymap.c
* Delete readme.md
* Delete rules.mk
* Updated cover image in readme.md
Fixed typo in image of keymaps
* Update keymap.c
Changed backslash to forward slash in first function layer.
* Add files via upload
* Delete config.h
deleting files so I can upload to a folder with lower case name
* Delete keymap.c
deleting file so I can change to lower case name
* Delete readme.md
deleting file so I can change to lower case name
* Add files via upload
* Update keymap.c
Cleaned up definitions in beginning of file.
* Update keymap.c
forgot an include
* Update keymap.c
* Update readme.md
Updated picture of layout, link was wrong and pointed to an old/removed image.
* Update readme.md
Fixed error in link to keyboard layout editor
* Update keymap.c
More cleanup of the includes at beginning of file
* Update config.h
* Update keymap.c
Fixed typo: Volume Down and Volume Up on the Tab layer were switched.
* Added initial files for QC60 prototype
* renamed all 'keymap' to 'layout'
* renamed layout macros to suggested naming convention of LAYOUT_macro_description
* replaced boilerplate
* removed rules.mk from keymap folders
* replaced 'qc60/rev1' with 'qc60/proto'
* replaced more boilerplate
* renamed DEFAULT_FOLDER to point at the correct folder
* updated readme
* Add files via upload
Added a nordic layout for UT47
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Add files via upload
* Update to readme and keymap files
* Update readme.md
Changed cover image
* Update readme.md
typo fix
* Delete config.h
* Delete keymap.c
* Delete readme.md
* Delete rules.mk
* Updated cover image in readme.md
Fixed typo in image of keymaps
* Update keymap.c
Changed backslash to forward slash in first function layer.
* Add files via upload
* Delete config.h
deleting files so I can upload to a folder with lower case name
* Delete keymap.c
deleting file so I can change to lower case name
* Delete readme.md
deleting file so I can change to lower case name
* Add files via upload
* Update keymap.c
Cleaned up definitions in beginning of file.
* Update keymap.c
forgot an include
* Update keymap.c
* Update readme.md
Updated picture of layout, link was wrong and pointed to an old/removed image.
* Update readme.md
Fixed error in link to keyboard layout editor
* Update keymap.c
More cleanup of the includes at beginning of file
* Update config.h
* fabian layout
* added MOUSECURSOR layer that gets activated by holding space
* cleanup, meh and tilde and grave as separate keys, toggle switch for mousecursor layer
* merged default
* #pragma once
* including QMK_KEYBOARD_H instead of various imports
* using layer toggle instead of a function
* deleted obsolete rules.mk (was part of the old makefile system)
* #pragma once
* including QMK_KEYBOARD_H instead of various imports
* use ifndef KEYBOARD_planck_rev6 instead of ifdef KEYBOARD_planck_rev5
* Temporary work around for CB60 sound issues
Discussed this with @fredizzimo, upping the system ticks to 100K fixes
the sound issues I was having with the CB60; speaker would fail to shut
off after playing music, sometimes at startup. This changes the matrix
scan time from it's default of every 2ms to once ever 200us.
Fred has a more extensive change to the way matrices are scanned which
will require less clock cycles and we can then revert this change at
that time.
* Remove keymap dir from clueboard root
* Arrow: matrix and keymap refactor
* Left: matrix and keymap refactor
* Numpad: matrix macro correction
* Numpad: add support for community layouts numpad_5x4 and ortho_5x4
* Right: matrix and keymap refactor
* DC01 global readme cleanup (minor grammar)
* DC01 global Configurator support
* Right: bugfixes for HHKB-style keymaps
* Replace KC_NO with ___ in matrices for readability
* Add K49 to LAYOUT matrix
K49 was previously was stated to be padless, but it's actually the right-hand half of a split Backspace.
* Switched positions of K3C and K3D in LAYOUT matrix
When using a split right Shift, K3D is to the left of K3C.
* Insert KC_NO (___) element into bottom row of LAYOUT_60_ansi matrix
Reported by @NimMooMoo on QMK Discord
Right-hand modifiers on bottom row were shifted one key to the right. After debugging, discovered that the "electrical matrix" (the part of the matrix macro that determines which row and column a key uses) was one element short on the last row at K49, causing the rest of the row to be offset by one column.
This commit corrects that issue.
* Added a missing comma in the LAYOUT matrix
* Moved F row to raise
* Moved mouse keys over one space and removed unneccessary code
* Moved delete on lower
* Added CTRL functions
* Added Print Screen
* Added README.md file
* Updated CTRL
* Updated readme to current CTRL
* Minor Changes
* Updated mouse speeds
* Unknown changes
* Updated README and keymaps
* Removed caps from number row and put it in special
* Moved around equals sign again
* Updated mouse key speed
* Pull Request Updates
* Put in my keymaps
* Fixed all but weird lets split issue
* Organized and tried to trobleshoot lets split
* Organized and tried to trobleshoot lets split
* Added bbaserdem keymaps
* Added bbaserdem keymaps
* Fixed stuff
* FIxed a filename error
* Lets split eh
* Finalized things regarding keymap
* LFKPad: matrix refactor
* LFKPad: keymap refactor (QMK_KEYBOARD_H; matrix update)
* LFKPad: Configurator support
* LFKPad: added community layout numpad_6x4 to rules.mk
* LFKPad: Update rgb_sequence to match new matrix
* LFKPad: delete deprecated makefile include block from rules.mk
* DC01 initial commit
- Addition of directories
- Left readme
* Initial commit of left half
* Initial files for right half
* arrow
* i2c adjustments
* I2C slave and DC01 refractoring
- Cleaned up state machine of I2C slave driver
- Modified DC01 left to use already pressent I2C master driver
- Modified DC01 matrixes
* Fixed tabs to spaces
* Addition of Numpad
* Add keymaps
- Orthopad keymap for numpad module
- Numpad keymap for numpad module
- ISO, ANSI and HHKB version of keymap for right module
* Minor matrix.c fixes
* Update Readmes
* Add support for LFK65-HS - a hotswap 65%
* Add info.json for LFK65-HS
* Clean up for new build system, remove uneeded code.
* LFK65-HS cleanup. Fixed LAYOUT macros, etc
* Line ending stuff again
* Added Let's Split Eh? Files and updated #USE_IC2 checks to also include th EH revision (can only be used in I2C)
* Added personal keymap, updated some of the EH files
* Created new keyboard file for testing "lets_split_eh" will merge into lets_split once fully functional
* Added split code from lets_split, removed pro micro imports and LED code
THIS IS WORKING CODE, WITHOUT RGB AND BACKLIGHT
* Took back original Lets Slit files for the lets_split keyboard, working in the lets_split_eh folder for now
* Updated eh.c
* More rework of the I2C code, added global flags for split boards.
* Introduced RGB over I2C, having weird edge case issues at the moment though
* Fixed weird I2C edgecase with RGB, although still would like to track down route cause..
* Changed RGB keycodes (static ones) to activate on key-up instead of key-down to elimate weird ghosting issue over I2C
* Lots of changes, mainly externalized the Split keyboard code and added logic for only including when needed.
- Added makefile option "SPLIT_KEYBOARD" that when = yes will include the split keyboard files and custom matrix
- Split keyboard files placed into quantum/split_common/
- Added define option for config files "SPLIT_HAND_PIN" FOr using high/low pin to determine handedness, low = right hand, high = left hand
- Cleaned up split logic for RGB and Backlight so it is only exectuted / included when needed
* Updated documentation for the new makefile options and #defines specific to split keyboards
* Added a bit more info to docs, so people aren't confused
* Modifed Let's Split to use externalized code, also added left and right hand eeprom files to the split_common folder
* Removed some debugging from eh.c
* Small changes to keyboard configs. Also added a default keymap (just a copy of my that_canadian keymap).
* Added a README file to the Let's Split Eh?
* Changed it so RGB static updates are done on key-up ONLY for split boards rather than all boards. Also fixed leftover un-used variable in rgblight.c
* Updated default keymap and my keymap for Let's Split Eh? Updated the comments so it reflects RGB control, and removed audio functions.
* Fixed lets_split_eh not having a default version
* Removed "eh" references from lets_split folder for now
* Took lets_split folder from master to fix travis build errors, weird my local was overriding.
* Changed LAYOUT_ortho_4x12_kc -> LAYOUT_kc_ortho_4x12 to match bakingpy and others
* Removed rules.mk from my lets_split keymap, not needed
* Updated the config_options doc to better explain the usage of "#define SPLIT_HAND_PIN"
* Fixed split_common assuming I2C for RGB and Backlight. Added serial backlight support (stole from bakingpy's Levinson code ;) ) Serial RGB not implemented yet. Also Added "USE_IC2" to the lets_split_eh/eh as that was looked over.
* Fixed stupid mistake, forgot to set BACKLIT_DIRTY to false after setting slave backlit settings for serial
* Updated backlight data block to be cleaner (thanks drashna ;) )
* Add files via upload
Added a nordic layout for UT47
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Add files via upload
* Update to readme and keymap files
* Update readme.md
Changed cover image
* Update readme.md
typo fix
* Delete config.h
* Delete keymap.c
* Delete readme.md
* Delete rules.mk
* Updated cover image in readme.md
Fixed typo in image of keymaps
* Update keymap.c
Changed backslash to forward slash in first function layer.
* Add files via upload
* Delete config.h
deleting files so I can upload to a folder with lower case name
* Delete keymap.c
deleting file so I can change to lower case name
* Delete readme.md
deleting file so I can change to lower case name
* Add files via upload
* Update keymap.c
Cleaned up definitions in beginning of file.
Previously, when looking for rules.mk files, we'd parse the individual
folders (A/B/C/D/E) into 5 variables, (A/B/C/D/E, A/B/C/D, A/B/C, A/B,
and A). Then, we'd get the final directory names and store _those_ in 5
new variables (A, B, C, D, and E). Then, when looking for the rules.mk,
we'd look in root_dir/keyboards/(A|B|C|D|E)/rules.mk, instead of looking
in root_dir/keyboards(A|A/B|A/B/C|A/B/C/D|A/B/C/D/E)/rules.mk. This
commit changes that logic from the former to the latter.
* Line ending stuff again
* Added Let's Split Eh? Files and updated #USE_IC2 checks to also include th EH revision (can only be used in I2C)
* Added personal keymap, updated some of the EH files
* Created new keyboard file for testing "lets_split_eh" will merge into lets_split once fully functional
* Added split code from lets_split, removed pro micro imports and LED code
THIS IS WORKING CODE, WITHOUT RGB AND BACKLIGHT
* Took back original Lets Slit files for the lets_split keyboard, working in the lets_split_eh folder for now
* Updated eh.c
* More rework of the I2C code, added global flags for split boards.
* Introduced RGB over I2C, having weird edge case issues at the moment though
* Fixed weird I2C edgecase with RGB, although still would like to track down route cause..
* Changed RGB keycodes (static ones) to activate on key-up instead of key-down to elimate weird ghosting issue over I2C
* Lots of changes, mainly externalized the Split keyboard code and added logic for only including when needed.
- Added makefile option "SPLIT_KEYBOARD" that when = yes will include the split keyboard files and custom matrix
- Split keyboard files placed into quantum/split_common/
- Added define option for config files "SPLIT_HAND_PIN" FOr using high/low pin to determine handedness, low = right hand, high = left hand
- Cleaned up split logic for RGB and Backlight so it is only exectuted / included when needed
* Updated documentation for the new makefile options and #defines specific to split keyboards
* Added a bit more info to docs, so people aren't confused
* Modifed Let's Split to use externalized code, also added left and right hand eeprom files to the split_common folder
* Removed some debugging from eh.c
* Small changes to keyboard configs. Also added a default keymap (just a copy of my that_canadian keymap).
* Added a README file to the Let's Split Eh?
* Changed it so RGB static updates are done on key-up ONLY for split boards rather than all boards. Also fixed leftover un-used variable in rgblight.c
* Updated default keymap and my keymap for Let's Split Eh? Updated the comments so it reflects RGB control, and removed audio functions.
* Fixed lets_split_eh not having a default version
* Removed "eh" references from lets_split folder for now
* Took lets_split folder from master to fix travis build errors, weird my local was overriding.
* Changed LAYOUT_ortho_4x12_kc -> LAYOUT_kc_ortho_4x12 to match bakingpy and others
* Removed rules.mk from my lets_split keymap, not needed
* Updated the config_options doc to better explain the usage of "#define SPLIT_HAND_PIN"
* Use string with delay
* Add skipped region to ergodox
* Add send string config
* Use default_layer_state instead of function
* Fully generalize keyboards
* old iris cleanup
* Fix Drashna keymap compile issues
By checking to see if secret.c exists before actually trying to add it
* Remove unnecessary references
* Add 4x12 ortho board
* Update userspace readme for secrets
* Make RGB more modular
* Fix iris keymap, since we don't need the lower left (Function keys)
* Fix includes
* Add Blanks
* Fix Ergodox lower layer
* Add suspend commands
* Add Maltron Layout
* Add additional layouts
* Finish adding gamepad to Iris
* Tweaks to iris gamepag layer
* make gaming layers more friendly
* minor gaming layer tweak
* Add Carplax
* Add modded key timer function
* Cleanup and macro documentation
* Add QMK DFU info
* Add 'old' keymap for 12 LED spare
* Update Pro Micro documentation
* Disable twinkling so it fits in firmware space
* Switch to QMK DFU bootloader, since it's better anyhow
* Write default layer state colors to EEPROM
Since we are writing to EEPROM anyways, and this way, it sticks on reboot
* Fix QMK DFU bootloader options
* More updates for QMK DFU support
* Use matrix scanning hack for startup_user until #3113 gets merged
* Fix indicator light consistency issue
* Add/readd ifdefs to indicators
* Add/readd alt indicator
* Remove RGB Twinkling from Viterbi macro pad
* Fix default layer color detection
* Fix rebase and detection issues
* Cleanup code so it will compile if RGBLIGHT is disabled
* Revert vsode settings
* Use Pragma Once instead of boilerplate code
* initial files for rev 6 with encoder
* music map init, dip scan added
* adds ws2812 driver for arm
* flesh out dip and encoder support
* adds default encoder res
* adds default encoder res
* start muse implementation
* muse working with encoder as control
* flip direction
* try mouse wheel again
* dont break other revs
* dont break other revs
* conditional autio
* pwm ws driver (not working)
* update build includes for chibios
* update ws2812 driver/config
* last commit for glasser code
* working example
* remove rgb for now
* finish up rev6
* working encoder keycodes
* add warnings to planck keymaps about the LAYOUT
* - Fixed DK60 version in config.h
* - Updated dk60 readme with new QMK rules
* - Fixed wording in readme
* Added dbroqua layout for DZ60
I've also updated dz60.h to add "true HHKD" keymap definition (6U
spacebar).
With the default HHKB definition r_alt was not mapped and when I pressed
r_menu it was r_alt.
Regards
* Updated dbroqua layout for HHKB keyboard
Added default configuration and alternate (swap gui/alt keys).
Save user choice in keyboard memory (like plank, thanks for this
feature!).
* Added dbroqua layout for Iris keyboard
* Updated layout and fixed includes
* Turn backlight support on by default
* Correct error on LED backlight support
Turns out, it doesn't work if you don't enable it in rules.mk. Who knew?
* Adds Audio Keycodes to both the feature page and master list
* Re-orders the keycode list, so it's alphabetical (mostly)
* Add additional (missing) sections to the keycode list
* Add and update links in the keycode page
* Add and reorder links in sidebar's keycode section
* integrated Peter Fleury's LCD library for HD44780 LCDs
* fixed typo
* cleanup finished
* add documentation
* added HD44780 documentation
* removed keyboard from .gitmodules
* resolved merge conflict
* removed edit of kira75s rules.mk made by merge
* moved hd44780 to drivers/avr
* Added licence info to hd44780 files
* Added link to hd44780 docs.
@drashna mentioned it'd be good to have a mention of the userspace in
the QMK structure section. Rather than rewrite the docs on userspace, I
chose to link to the existing documentation.
QMK strives to be an inclusive and tolerant community. We welcome participation from anyone regardless of age, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, political belief, race, religion, or sexual identity and orientation.
QMK strives to be an inclusive, tolerant, and welcoming community. We encourage participation from anyone regardless of age, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, political belief, race, religion, or sexual identity and orientation.
> “A gentle word turns away wrath, but a harsh word stirs up anger.”
> “A gentle word turns away wrath, but a harsh word stirs up anger."
Our users, contributors, and collaborators are expected to treat each other with respect, to assume good intentions, and to gently correct, where possible, rather than react with escalation. Some examples of behavior we will not tolerate include, but is not limited to:
Our users, contributors, and collaborators are expected to treat each other with kindness and respect, to assume good intentions, and to gently correct, where possible, rather than react with escalation. While our goal is to be as accurate as possible, kindness and understanding are more valuable than correctness. Some examples of behavior we will not tolerate include, but is not limited to:
A QMK collaborator is a keyboard maker/designer that is interested in helping QMK grow and fully support their keyboard(s), and encouraging their users/customers to submit features, ideas, and keymaps. We're always looking to add more keyboards and collaborators, but we ask that they fulfill these requirements:
# Becoming a QMK Collaborator
* **Have a PCB available for sale** - unfortunately there's just too much variation and complications with handwired keyboards.
* **Maintain the your keyboard's directory** - this may just require an initial setup to get your keyboard working, but it could also include accommodating changes made to QMK's core.
* **Approve and merge your keyboard's keymap pull requests** - we like to encourage users to contribute their keymaps for others to see and work from when creating their own.
A QMK collaborator is a keyboard maker or designer that is interested in helping QMK grow and fully support their keyboard(s), and encouraging their users and customers to submit features, ideas, and keymaps. We're always looking to add more keyboards and collaborators, but we ask that they fulfill these requirements:
* **Have a PCB available for sale.** Unfortunately there's just too much variation and complications with handwired keyboards.
* **Maintain your keyboard in QMK.** This may just require an initial setup to get your keyboard working, but it could also include accommodating changes made to QMK's core that might break or render any custom code redundant.
* **Approve and merge keymap pull requests for your keyboard.** We like to encourage users to contribute their keymaps for others to see and work from when creating their own.
If you feel you meet these requirements, shoot us an email at hello@qmk.fm with an introduction and some links to your keyboard!
@@ -91,6 +91,8 @@ This is a C header file that is one of the first things included, and will persi
* key combination that allows the use of magic commands (useful for debugging)
*`#define USB_MAX_POWER_CONSUMPTION`
* sets the maximum power (in mA) over USB for the device (default: 500)
*`#define SCL_CLOCK 100000L`
* sets the SCL_CLOCK speed for split keyboards. The default is `100000L` but some boards can be set to `400000L`.
## Features That Can Be Disabled
@@ -126,14 +128,18 @@ If you define these options you will enable the associated feature, which may in
* how long before a tap becomes a hold, if set above 500, a key tapped during the tapping term will turn it into a hold too
*`#define RETRO_TAPPING`
* tap anyway, even after TAPPING_TERM, if there was no other key interruption between press and release
* See [Retro Tapping](feature_advanced_keycodes.md#retro-tapping) for details
*`#define TAPPING_TOGGLE 2`
* how many taps before triggering the toggle
*`#define PERMISSIVE_HOLD`
* makes tap and hold keys work better for fast typers who don't want tapping term set above 500
* See [Permissive Hold](feature_advanced_keycodes.md#permissive-hold) for details
*`#define IGNORE_MOD_TAP_INTERRUPT`
* makes it possible to do rolling combos (zx) with keys that convert to other keys on hold
* See [Mod tap interrupt](feature_advanced_keycodes.md#mod-tap-interrupt) for details
*`#define TAPPING_FORCE_HOLD`
* makes it possible to use a dual role key as modifier shortly after having been tapped
* See [Hold after tap](feature_advanced_keycodes.md#hold-after-tap)
*`#define LEADER_TIMEOUT 300`
* how long before the leader key times out
*`#define ONESHOT_TIMEOUT 300`
@@ -175,6 +181,16 @@ If you define these options you will enable the associated feature, which may in
*`#define MOUSEKEY_MAX_SPEED 7`
*`#define MOUSEKEY_WHEEL_DELAY 0`
## Split Keyboard Options
Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk
*`#define SPLIT_HAND_PIN B7`
* For using high/low pin to determine handedness, low = right hand, high = left hand. Replace 'B7' with the pin you are using. This is optional and you can still use the EEHANDS method or MASTER_LEFT / MASTER_RIGHT defines like the stock Let's Split uses.
*`#define USE_I2C`
* For using I2C instead of Serial (defaults to serial)
# The `rules.mk` File
This is a [make](https://www.gnu.org/software/make/manual/make.html) file that is included by the top-level `Makefile`. It is used to set some information about the MCU that we will be compiling for as well as enabling and disabling certain features.
@@ -183,6 +199,8 @@ This is a [make](https://www.gnu.org/software/make/manual/make.html) file that i
*`DEFAULT_FOLDER`
* Used to specify a default folder when a keyboard has more than one sub-folder.
*`FIRMWARE_FORMAT`
* Defines which format (bin, hex) is copied to the root `qmk_firmware` folder after building.
*`SRC`
* Used to add files to the compilation/linking list.
*`LAYOUTS`
@@ -228,3 +246,5 @@ Use these to enable or disable building certain features. The more you have enab
* Unicode
*`BLUETOOTH_ENABLE`
* Enable Bluetooth with the Adafruit EZ-Key HID
*`SPLIT_KEYBOARD`
* Enables split keyboard support (dual MCU like the let's split and bakingpy's boards) and includes all necessary files located at quantum/split_common
@@ -11,8 +11,8 @@ Keycodes are actually defined in [common/keycode.h](https://github.com/qmk/qmk_f
There are 3 standard keyboard layouts in use around the world- ANSI, ISO, and JIS. North America primarily uses ANSI, Europe and Africa primarily use ISO, and Japan uses JIS. Regions not mentioned typically use either ANSI or ISO. The keycodes corresponding to these layouts are shown here:
<!-- Source for this image: http://www.keyboard-layout-editor.com/#/gists/9ce023dc6caadc0cf11c88c782350a8c -->
@@ -34,12 +34,11 @@ See [issue #168](https://github.com/tmk/tmk_keyboard/issues/168) and
* http://en.wikipedia.org/wiki/Magic_SysRq_key
* http://en.wikipedia.org/wiki/System_request
## Power Key Doesn't Work
Use `KC_PWR` instead of `KC_POWER` or vice versa.
*`KC_PWR` works with Windows and Linux, not with OSX.
*`KC_POWER` works with OSX and Linux, not with Windows.
## Power Keys Aren't Working
More info: http://geekhack.org/index.php?topic=14290.msg1327264#msg1327264
Somewhat confusingly, there are two "Power" keycodes in QMK: `KC_POWER` in the Keyboard/Keypad HID usage page, and `KC_SYSTEM_POWER` (or `KC_PWR`) in the Consumer page.
The former is only recognized on macOS, while the latter, `KC_SLEP` and `KC_WAKE` are supported by all three major operating systems, so it is recommended to use those instead. Under Windows, these keys take effect immediately, however on macOS they must be held down until a dialog appears.
## One Shot Modifier
Solves my personal 'the' problem. I often got 'the' or 'THe' wrongly instead of 'The'. One Shot Shift mitigates this for me.
@@ -87,14 +86,14 @@ On **Xorg** you can use `compose` key, instead.
And see this for **Unicode** input.
* http://en.wikipedia.org/wiki/Unicode_input
## `Fn` Key on macOS
## Apple/Mac Keyboard `Fn`
Not supported.
Unlike most Fn keys, the one on Apple keyboards actually has its own keycode... sort of. It takes the place of the sixth keycode in a basic 6KRO HID report -- so an Apple keyboard is in fact only 5KRO.
Apple/Mac keyboard sends keycode for Fn unlike most of other keyboards.
I think you can send Apple Fn key using Apple venter specific Page 0xff01 and usage 0x0003. But you have to change HID Report Descriptor for this, of course.
It is technically possible to get QMK to send this key. However, doing so requires modification of the report format to add the state of the Fn key.
Even worse, it is not recognized unless the keyboard's VID and PID match that of a real Apple keyboard. The legal issues that official QMK support for this feature may create mean it is unlikely to happen.
Your keymap can include keycodes that are more advanced than normal, for example shifted keys. This page documents the functions that are available to you.
Your keymap can include keycodes that are more advanced than normal, for example keys that switch layers or send modifiers when held, but send regular keycodes when tapped. This page documents the functions that are available to you.
### Assigning Custom Names
@@ -13,9 +13,11 @@ People often define custom names using `#define`. For example:
This will allow you to use `FN_CAPS` and `ALT_TAB` in your `KEYMAP()`, keeping it more readable.
### Limits of These Aliases
### Caveats
Currently, the keycodes able to used with these functions are limited to the [Basic Keycodes](keycodes_basic.md), meaning you can't use keycodes like `KC_TILD`, or anything greater than 0xFF. For a full list of the keycodes able to be used see [Basic Keycodes](keycodes_basic.md).
Currently, `LT()` and `MT()` are limited to the [Basic Keycode set](keycodes_basic.md), meaning you can't use keycodes like `LCTL()`, `KC_TILD`, or anything greater than `0xFF`. Modifiers specified as part of a Layer Tap or Mod Tap's keycode will be ignored.
Additionally, if at least one right-handed modifier is specified in a Mod Tap or Layer Tap, it will cause all modifiers specified to become right-handed, so it is not possible to mix and match the two.
# Switching and Toggling Layers
@@ -55,85 +57,73 @@ Sometimes, you might want to switch between layers in a macro or as part of a ta
# Modifier Keys
These functions allow you to combine a mod with a keycode. When pressed the keydown for the mod will be sent first, and then *kc* will be sent. When released the keyup for *kc* will be sent and then the mod will be sent.
These allow you to combine a modifier with a keycode. When pressed, the keydown event for the modifier, then `kc` will be sent. On release, the keyup event for `kc`, then the modifier will be sent.
*`LSFT(kc)` or `S(kc)` - applies left Shift to *kc* (keycode)
*`RSFT(kc)` - applies right Shift to *kc*
*`LCTL(kc)` - applies left Control to *kc*
*`RCTL(kc)` - applies right Control to *kc*
*`LALT(kc)` - applies left Alt to *kc*
*`RALT(kc)` - applies right Alt to *kc*
*`LGUI(kc)` - applies left GUI (command/win) to *kc*
*`RGUI(kc)` - applies right GUI (command/win) to *kc*
*`HYPR(kc)` - applies Hyper (all modifiers) to *kc*
*`MEH(kc)` - applies Meh (all modifiers except Win/Cmd) to *kc*
|`LSFT(kc)`|`S(kc)` |Hold Left Shift and press `kc` |
|`LALT(kc)`| |Hold Left Alt and press `kc` |
|`LGUI(kc)`|`LCMD(kc)`, `LWIN(kc)`|Hold Left GUI and press `kc` |
|`RCTL(kc)`| |Hold Right Control and press `kc` |
|`RSFT(kc)`| |Hold Right Shift and press `kc` |
|`RALT(kc)`| |Hold Right Alt and press `kc` |
|`RGUI(kc)`|`RCMD(kc)`, `LWIN(kc)`|Hold Right GUI and press `kc` |
|`HYPR(kc)`| |Hold Left Control, Shift, Alt and GUI and press `kc`|
|`MEH(kc)` | |Hold Left Control, Shift and Alt and press `kc` |
|`LCAG(kc)`| |Hold Left Control, Alt and GUI and press `kc` |
|`ALTG(kc)`| |Hold Right Control and Alt and press `kc` |
|`SGUI(kc)`|`SCMD(kc)`, `SWIN(kc)`|Hold Left Shift and GUI and press `kc` |
|`LCA(kc)` | |Hold Left Control and Alt and press `kc` |
You can also chain these, like this:
You can also chain them, for example `LCTL(LALT(KC_DEL))` makes a key that sends Control+Alt+Delete with a single keypress.
LALT(LCTL(KC_DEL)) -- this makes a key that sends Alt, Control, and Delete in a single keypress.
# Mod-Tap
# Shifted Keycodes
The Mod-Tap key `MT(mod, kc)` acts like a modifier when held, and a regular keycode when tapped. In other words, you can have a key that sends Escape when you tap it, but functions as a Control or Shift key when you hold it down.
The following shortcuts automatically add `LSFT()`to keycodes to get commonly used symbols.
The modifiers this keycode and `OSM()`accept are prefixed with `MOD_`, not `KC_`:
|`MOD_HYPR`|Hyper (Left Control, Shift, Alt and GUI)|
|`MOD_MEH` |Meh (Left Control, Shift, and Alt) |
# Mod Tap
You can combine these by ORing them together like so:
`MT(mod, kc)` - is *mod* (modifier key - MOD_LCTL, MOD_LSFT) when held, and *kc* when tapped. In other words, you can have a key that sends Esc (or the letter O or whatever) when you tap it, but works as a Control key or a Shift key when you hold it down.
```c
MT(MOD_LCTL|MOD_LSFT,KC_ESC)
```
These are the values you can use for the `mod` in `MT()` and `OSM()`:
This key would activate Left Control and Left Shift when held, and send Escape when tapped.
* MOD_LCTL
* MOD_LSFT
* MOD_LALT
* MOD_LGUI
* MOD_RCTL
* MOD_RSFT
* MOD_RALT
* MOD_RGUI
* MOD_HYPR
* MOD_MEH
For convenience, QMK includes some Mod-Tap shortcuts to make common combinations more compact in your keymap:
These can also be combined like `MOD_LCTL | MOD_LSFT` e.g. `MT(MOD_LCTL | MOD_LSFT, KC_ESC)` which would activate Control and Shift when held, and send Escape when tapped.
We've added shortcuts to make common modifier/tap (mod-tap) mappings more compact:
*`CTL_T(kc)` - is LCTL when held and *kc* when tapped
*`SFT_T(kc)` - is LSFT when held and *kc* when tapped
*`ALT_T(kc)` - is LALT when held and *kc* when tapped
*`ALGR_T(kc)` - is AltGr when held and *kc* when tapped
*`GUI_T(kc)` - is LGUI when held and *kc* when tapped
*`ALL_T(kc)` - is Hyper (all mods) when held and *kc* when tapped. To read more about what you can do with a Hyper key, see [this blog post by Brett Terpstra](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)
*`LCAG_T(kc)` - is CtrlAltGui when held and *kc* when tapped
*`MEH_T(kc)`- is like Hyper, but not as cool -- does not include the Cmd/Win key, so just sends Alt+Ctrl+Shift.
?> Due to the way that keycodes are structured, any modifiers specified as part of `kc`, such as `LCTL()` or `KC_LPRN`, will only activate when held instead of tapped.
?> Additionally, if there is at least one right modifier, any other modifiers will turn into their right equivalents, so it is not possible to "mix and match" the two.
|`LCTL_T(kc)`|`CTL_T(kc)` |Left Control when held, `kc` when tapped |
|`RCTL_T(kc)`| |Right Control when held, `kc` when tapped |
|`LSFT_T(kc)`|`SFT_T(kc)` |Left Shift when held, `kc` when tapped |
|`RSFT_T(kc)`| |Right Shift when held, `kc` when tapped |
|`LALT_T(kc)`|`ALT_T(kc)` |Left Alt when held, `kc` when tapped |
|`RALT_T(kc)`|`ALGR_T(kc)` |Right Alt when held, `kc` when tapped |
|`LGUI_T(kc)`|`LCMD_T(kc)`, `RWIN_T(kc)`,`GUI_T(kc)`|Left GUI when held, `kc` when tapped |
|`RGUI_T(kc)`|`RCMD_T(kc)`, `RWIN_T(kc)` |Right GUI when held, `kc` when tapped |
|`C_S_T(kc)` | |Left Control and Shift when held, `kc` when tapped |
|`MEH_T(kc)`| |Left Control, Shift and Alt when held, `kc` when tapped|
|`LCAG_T(kc)`| |Left Control, Alt and GUI when held, `kc` when tapped |
|`RCAG_T(kc)`| |Right Control, Alt and GUI when held, `kc` when tapped |
|`ALL_T(kc)` | |Left Control, Shift, Alt and GUI when held, `kc` when tapped - more info [here](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)|
|`SGUI_T(kc)`|`SCMD_T(kc)`, `SWIN_T(kc)` |Left Shift and GUI when held, `kc` when tapped |
|`LCA_T(kc)` | |Left Control and Alt when held, `kc` when tapped |
# One Shot Keys
@@ -203,3 +193,9 @@ With default settings, `a` will be sent on the first release, then `a` will be s
With `TAPPING_FORCE_HOLD`, the second press will be interpreted as a Shift, allowing to use it as a modifier shortly after having used it as a tap.
!> `TAPPING_FORCE_HOLD` will break anything that uses tapping toggles (Such as the `TT` layer keycode, and the One Shot Tapping Toggle).
# Retro Tapping
When you hold a dual function key, and haven't pressed anything when you release the key, normally nothing happens. However, if you enable this, if you release the key without pressing another key, it will send the original key, even if it is outside of the tapping term.
For instance, if you're using `LT(2, KC_SPACE)`, if you hold the key, don't hit anything else and then release it, normally, nothing happens. But with `RETRO_TAPPING` defined in your `config.h`, it will send `KC_SPACE`.
Your keyboard can make sounds! If you've got a Planck, Preonic, or basically any AVR keyboard that allows access to certain PWM-capable pins, you can hook up a simple speaker and make it beep. You can use those beeps to indicate layer transitions, modifiers, special keys, or just to play some funky 8bit tunes.
Up to two simultaneous audio voices are supported, one driven by timer 1 and another driven by timer 3. The following pins can be defined as audio outputs in config.h:
Timer 1:
`#define B5_AUDIO`
`#define B6_AUDIO`
@@ -58,6 +59,13 @@ PLAY_LOOP(my_song);
It's advised that you wrap all audio features in `#ifdef AUDIO_ENABLE` / `#endif` to avoid causing problems when audio isn't built into the keyboard.
The available keycodes for audio are:
*`AU_ON` - Turn audio mode on
*`AU_OFF` - Turn audio mode off
*`AU_TOG` - Toggle audio mode
## Music Mode
The music mode maps your columns to a chromatic scale, and your rows to octaves. This works best with ortholinear keyboards, but can be made to work with others. All keycodes less than `0xFF` get blocked, so you won't type while playing notes - if you have special keys/mods, those will still work. A work-around for this is to jump to a different layer with KC_NOs before (or after) enabling music mode.
@@ -145,6 +153,23 @@ You can configure the default, min and max frequencies, the stepping and built i
This is still a WIP, but check out `quantum/keymap_midi.c` to see what's happening. Enable from the Makefile.
<!-- FIXME: Describe how backlighting works in QMK -->
Many keyboards support backlit keys by way of individual LEDs placed through or underneath the keyswitches. QMK is able to control the brightness of these LEDs by switching them on and off rapidly in a certain ratio, a technique known as *Pulse Width Modulation*, or PWM. By altering the duty cycle of the PWM signal, it creates the illusion of dimming.
## Backlight Keycodes
The MCU can only supply so much current to its GPIO pins. Instead of powering the backlight directly from the MCU, the backlight pin is connected to a transistor or MOSFET that switches the power to the LEDs.
These keycodes control the backlight. Most keyboards use this for single color in-switch lighting.
## Usage
Most keyboards have backlighting enabled by default if they support it, but if it is not working for you, check that your `rules.mk` includes the following:
```make
BACKLIGHT_ENABLE= yes
```
You should then be able to use the keycodes below to change the backlight level.
@@ -16,24 +26,47 @@ These keycodes control the backlight. Most keyboards use this for single color i
|`BL_DEC` |Decrease the backlight level |
|`BL_BRTG`|Toggle backlight breathing |
Note that for backlight breathing, you need to have `#define BACKLIGHT_BREATHING` in your config.h.
## Caveats
## Configuration Options in `config.h`
This feature is distinct from both the [RGB underglow](feature_rgblight.md) and [RGB matrix](feature_rgb_matrix.md) features as it usually allows for only a single colour per switch, though you can obviously use multiple different coloured LEDs on a keyboard.
*`BACKLIGHT_PIN B7` defines the pin that controlls the LEDs. Unless you design your own keyboard, you don't need to set this.
*`BACKLIGHT_LEVELS 3` defines the number of brightness levels (maximum 15 excluding off).
*`BACKLIGHT_BREATHING` if defined, enables backlight breathing. Note that this is only available if `BACKLIGHT_PIN` is B5, B6 or B7.
*`BREATHING_PERIOD 6` defines the length of one backlight "breath" in seconds.
Hardware PWM is only supported on certain pins of the MCU, so if the backlighting is not connected to one of them, a software implementation will be used, and backlight breathing will not be available. Currently the supported pins are `B5`, `B6`, `B7`, and `C6`.
## Notes on Implementation
## Configuration
To change the brightness when using pins B5, B6 or B7, the PWM (Pulse Width Modulation) functionality of the on-chip timer is used.
The timer is a counter that counts up to a certain TOP value (`0xFFFF` set in ICR1) before resetting to 0.
We also set an OCR1x register.
When the counter reaches the value stored in that register, the PWM pin drops to low.
The PWM pin is pulled high again when the counter resets to 0.
Therefore, OCR1x basically sets the duty cycle of the LEDs and as such the brightness where `0` is the darkest and `0xFFFF` the brightest setting.
To change the behaviour of the backlighting, `#define` these in your `config.h`:
To enable the breathing effect, we register an interrupt handler to be called whenever the counter resets (with `ISR(TIMER1_OVF_vect)`).
In this handler, which gets called roughly 244 times per second, we compute the desired brightness using a precomputed brightness curve.
To disable breathing, we can just disable the respective interrupt vector and reset the brightness to the desired level.
|`BACKLIGHT_PIN` |`B7` |The pin that controls the LEDs. Unless you are designing your own keyboard, you shouldn't need to change this|
|`BACKLIGHT_LEVELS` |`3` |The number of brightness levels (maximum 15 excluding off) |
|`BACKLIGHT_BREATHING`|*Not defined*|Enable backlight breathing, if hardware PWM is used |
|`BREATHING_PERIOD` |`6` |The length of one backlight "breath" in seconds |
## Hardware PWM Implementation
When using the supported pins for backlighting, QMK will use a hardware timer configured to output a PWM signal. This timer will count up to `ICRx` (by default `0xFFFF`) before resetting to 0.
The desired brightness is calculated and stored in the `OCRxx` register. When the counter reaches this value, the backlight pin will go low, and is pulled high again when the counter resets.
In this way `OCRxx` essentially controls the duty cycle of the LEDs, and thus the brightness, where `0x0000` is completely off and `0xFFFF` is completely on.
The breathing effect is achieved by registering an interrupt handler for `TIMER1_OVF_vect` that is called whenever the counter resets, roughly 244 times per second.
In this handler, the value of an incrementing counter is mapped onto a precomputed brightness curve. To turn off breathing, the interrupt handler is simply disabled, and the brightness reset to the level stored in EEPROM.
There are 3 separate but related features that allow you to change the behavior of your keyboard without reflashing. While each of them have similar functionality you access that functionality in different ways depending on how your keyboard is configured.
There are three separate but related features that allow you to change the behavior of your keyboard without reflashing. While each of them have similar functionality, it is accessed in different ways depending on how your keyboard is configured.
Bootmagic is a system for configuring your keyboard while it initializes. To trigger a Bootmagic command you hold down the bootmagic key (`KC_SPACE` on most keyboards) and one or more command keys.
**Bootmagic** is a system for configuring your keyboard while it initializes. To trigger a Bootmagic command, hold down the Bootmagic key and one or more command keys.
Bootmagic Keycodes allow you to access the Bootmagic functionality after your keyboard has initialized. To use Bootmagic Keycodes you assign keycodes starting with `MAGIC_`, much in the same way you define any other key.
**Bootmagic Keycodes** are prefixed with `MAGIC_`, and allow you to access the Bootmagic functionality *after* your keyboard has initialized. To use the keycodes, assign them to your keymap as you would any other keycode.
Command is a feature that allows you to control different aspects of your keyboard. Command used to be called Magic. Command is typically accessed by holding Left and Right Shift at the same time, although that can be customized. While it shares some functionality with Bootmagic it also allows you to access functionality that Bootmagic does not. For more information see the [Command](feature_command.md) documentation page.
**Command**, formerly known as **Magic**, is another feature that allows you to control different aspects of your keyboard. While it shares some functionality with Bootmagic, it also allows you to do things that Bootmagic does not, such as printing version information to the console. For more information, see [Command](feature_command.md).
## Enabling Bootmagic
On some keyboards Bootmagic is disabled by default. If this is the case, it must be explicitly enabled in your `rules.mk` with:
Bootmagic is disabled by default. To use Bootmagic you need to enable it in your `rules.mk` file:
```make
BOOTMAGIC_ENABLE= yes
```
BOOTMAGIC_ENABLE = yes
## Hotkeys
## Bootmagic Hotkeys and Keycodes
Hold down the Bootmagic key (Space by default) and the desired hotkey while plugging in your keyboard. For example, holding Space+`B` should cause it to enter the bootloader.
This table describes the default Hotkeys for Bootmagic and the Keycodes for Magic. These may be overriden at the Keyboard or Keymap level. Some functionality is not available in both methods.
|Escape |Ignore Bootmagic configuration in EEPROM |
|`B` |Enter the bootloader |
|`D` |Toggle debugging over serial |
|`X` |Toggle key matrix debugging |
|`K` |Toggle keyboard debugging |
|`M` |Toggle mouse debugging |
|Backspace |Clear the EEPROM |
|Caps Lock |Toggle treating Caps Lock as Left Control |
|Left Control |Toggle swapping Caps Lock and Left Control |
|Left Alt |Toggle swapping Left Alt and Left GUI |
|Right Alt |Toggle swapping Right Alt and Right GUI |
|Left GUI |Toggle the GUI keys (useful when gaming) |
|<code>`</code>|Toggle swapping <code>`</code> and Escape|
|`\` |Toggle swapping `\` and Backspace |
|`N` |Toggle N-Key Rollover (NKRO) |
|`0` |Make layer 0 the default layer |
|`1` |Make layer 1 the default layer |
|`2` |Make layer 2 the default layer |
|`3` |Make layer 3 the default layer |
|`4` |Make layer 4 the default layer |
|`5` |Make layer 5 the default layer |
|`6` |Make layer 6 the default layer |
|`7` |Make layer 7 the default layer |
To use the Hotkey hold down `BOOTMAGIC_KEY_SALT` (`KC_SPACE` by default) and the Hotkey while plugging in your keyboard. To use the Keycode assign that keycode to a layer. For example, if you hold down Space+B while plugging in most keyboards, you will enter bootloader mode.
|`MAGIC_CAPSLOCK_TO_CONTROL`| |Treat Caps Lock as Left Control |
|`MAGIC_UNCAPSLOCK_TO_CONTROL` | |Stop treating Caps Lock as Left Control |
|`MAGIC_HOST_NKRO`| |Force N-Key Rollover (NKRO) on |
|`MAGIC_UNHOST_NKRO`| |Force NKRO off |
|`MAGIC_TOGGLE_NKRO`| |Turn NKRO on or off |
|`MAGIC_NO_GUI`||Disable the GUI keys (useful when gaming) |
|`MAGIC_UNNO_GUI`||Enable the GUI keys |
|`MAGIC_SWAP_ALT_GUI` |`AG_SWAP`|Swap Alt and GUI on both sides (for macOS)|
|`MAGIC_UNSWAP_ALT_GUI` |`AG_NORM`|Unswap Left Alt and Left GUI |
|`MAGIC_SWAP_BACKSLASH_BACKSPACE` | |Swap `\` and Backspace |
|`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`| |Unswap `\` and Backspace |
|`MAGIC_SWAP_CONTROL_CAPSLOCK`| |Swap Left Control and Caps Lock |
|`MAGIC_UNSWAP_CONTROL_CAPSLOCK`| |Unswap Left Control and Caps Lock |
|`MAGIC_SWAP_GRAVE_ESC` | |Swap <code>`</code> and Escape |
|`MAGIC_UNSWAP_GRAVE_ESC` | |Unswap <code>`</code> and Escape |
|`MAGIC_SWAP_LALT_LGUI` | |Swap Left Alt and Left GUI |
|`MAGIC_UNSWAP_LALT_LGUI` | |Unswap Left Alt and Left GUI |
|`MAGIC_SWAP_RALT_RGUI` | |Swap Right Alt and Right GUI |
|`MAGIC_UNSWAP_RALT_RGUI` | |Unswap Right Alt and Right GUI |
## Bootmagic Configuration
## Configuration
When setting up your keyboard and/or keymap there are a number of `#define`s that control the behavior of Bootmagic. To use these put them in your `config.h`, either at the keyboard or keymap level.
If you would like to change the hotkey assignments for Bootmagic, `#define` these in your `config.h` at either the keyboard or keymap level.
|Define |Default|Description |
|-------|-------|------------|
|`BOOTMAGIC_KEY_SALT`|`KC_SPACE`|The key to hold down to trigger Bootmagic during initialization.|
|`BOOTMAGIC_KEY_SKIP`|`KC_ESC`|The Hotkey to ignore saved eeprom configuration.|
|`BOOTMAGIC_KEY_EEPROM_CLEAR`|`KC_BSPACE`|The hotkey to clear the saved eeprom configuration.|
|`BOOTMAGIC_KEY_BOOTLOADER`|`KC_B`|The hotkey to enter the bootloader.|
|`BOOTMAGIC_KEY_DEBUG_ENABLE`|`KC_D`|The hotkey to enable debug mode.|
|`BOOTMAGIC_KEY_DEBUG_MATRIX`|`KC_X`|The hotkey to enable matrix debugging mode.|
|`BOOTMAGIC_KEY_DEBUG_KEYBOARD`|`KC_K`|The hotkey to enable keyboard debugging mode.|
|`BOOTMAGIC_KEY_DEBUG_MOUSE`|`KC_M`|The hotkey to enable mouse debugging mode.|
Command is a way to change your keyboard's behavior without having to flash or unplug it to use [Bootmagic](feature_bootmagic.md). There is a lot of overlap between this functionality and the [Bootmagic Keycodes](feature_bootmagic.md). Whenever possible we encourage you to use that functionality instead of Command.
Command, formerly known as Magic, is a way to change your keyboard's behavior without having to flash or unplug it to use [Bootmagic](feature_bootmagic.md). There is a lot of overlap between this functionality and the [Bootmagic Keycodes](feature_bootmagic.md#keycodes). Wherever possible we encourage you to use that feature instead of Command.
## Enabling Command
On some keyboards Command is disabled by default. If this is the case, it must be explicitly enabled in your `rules.mk`:
By default Command is disabled. You can enable it in your `rules.mk` file:
COMMAND_ENABLE = yes
```make
COMMAND_ENABLE= yes
```
## Usage
To use Command you hold down the key combination defined by `IS_COMMAND`. By default that combination is both shift keys. While holding the key combination press the key corresponding to the command you want.
For example, to write the current QMK version to the QMK Toolbox console, you can press `Left Shift`+`Right Shift`+`V`.
To use Command, hold down the key combination defined by the `IS_COMMAND()` macro. By default this is Left Shift+Right Shift. Then, press the key corresponding to the command you want. For example, to output the current QMK version to the QMK Toolbox console, press Left Shift+Right Shift+`V`.
## Configuration
The following values can be defined in `config.h` to control the behavior of Command.
If you would like to change the key assignments for Command, `#define` these in your `config.h` at either the keyboard or keymap level. All keycode assignments here must omit the `KC_` prefix.
|Define |Default | Description |
|-------|--------|-------------|
|`IS_COMMAND()` |`(keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))`|Key combination to activate Command|
|`MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS` |`true`|Do layer switching with Function row|
|`MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS` |`true`|Do layer switching with number keys.|
|`MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM`|`false`|Do layer switching with custom keys (`MAGIC_KEY_LAYER0..9`below.)|
|`MAGIC_KEY_HELP1` |`H`|Show help.|
|`MAGIC_KEY_HELP2` |`SLASH`|Show help.|
|`MAGIC_KEY_DEBUG` |`D` |Turn on debug mode.|
|`MAGIC_KEY_DEBUG_MATRIX` |`X` |Turn on matrix debugging.|
|`MAGIC_KEY_DEBUG_KBD` |`K`|Turn on keyboard debugging.|
|`MAGIC_KEY_DEBUG_MOUSE` |`M`|Turn on mouse debugging.|
|`MAGIC_KEY_VERSION` |`V` |Write the QMK version to the console|
|`MAGIC_KEY_STATUS` |`S`|Show the current keyboard status|
|`MAGIC_KEY_CONSOLE` |`C`|Enable the Command Console|
|`MAGIC_KEY_LAYER0_ALT1` |`ESC`|Alternate access to layer 0|
|`MAGIC_KEY_LAYER0_ALT2` |`GRAVE`|Alternate access to layer 0|
|`MAGIC_KEY_LAYER0` |`0`|Change default layer to 0|
|`MAGIC_KEY_LAYER1` |`1`|Change default layer to 1|
|`MAGIC_KEY_LAYER2` |`2`|Change default layer to 2|
|`MAGIC_KEY_LAYER3` |`3`|Change default layer to 3|
|`MAGIC_KEY_LAYER4` |`4`|Change default layer to 4|
|`MAGIC_KEY_LAYER5` |`5`|Change default layer to 5|
|`MAGIC_KEY_LAYER6` |`6`|Change default layer to 6|
|`MAGIC_KEY_LAYER7` |`7`|Change default layer to 7|
|`MAGIC_KEY_LAYER8` |`8`|Change default layer to 8|
|`MAGIC_KEY_LAYER9` |`9`|Change default layer to 9|
|`MAGIC_KEY_BOOTLOADER` |`PAUSE`|Exit keyboard and enter bootloader|
|`MAGIC_KEY_LOCK` |`CAPS` |Lock the keyboard so nothing can be typed|
|`MAGIC_KEY_EEPROM` |`E`|Erase EEPROM settings|
|`MAGIC_KEY_NKRO` |`N`|Toggle NKRO on/off|
|`MAGIC_KEY_SLEEP_LED` |`Z` |Toggle LED when computer is sleeping on/off|
@@ -4,10 +4,10 @@ QMK supports temporary macros created on the fly. We call these Dynamic Macros.
You can store one or two macros and they may have a combined total of 128 keypresses. You can increase this size at the cost of RAM.
To enable them, first add a new element to the `planck_keycodes` enum — `DYNAMIC_MACRO_RANGE`:
To enable them, first add a new element to the end of your `keycodes` enum — `DYNAMIC_MACRO_RANGE`:
```c
enumplanck_keycodes{
enumkeycodes{
QWERTY=SAFE_RANGE,
COLEMAK,
DVORAK,
@@ -20,7 +20,7 @@ enum planck_keycodes {
};
```
It must be the last element because `dynamic_macros.h` will add some more keycodes after it.
Your `keycodes` enum may have a slightly different name. You must add `DYNAMIC_MACRO_RANGE` as the last element because `dynamic_macros.h` will add some more keycodes after it.
Grave Escape is a feature that allows you to share the grave key (<code>`</code> and `~`) on the same key as Escape. When `KC_GESC` is used it will act as `KC_ESC`, unless Shift or GUI is pressed, in which case it will act as `KC_GRAVE`.
If you're using a 60% keyboard, or any other layout with no F-row, you will have noticed that there is no dedicated Escape key. Grave Escape is a feature that allows you to share the grave key (<code>`</code> and `~`) with Escape.
## Usage
Replace the `KC_GRAVE` key in your keymap (usually to the left of the `1` key) with `KC_GESC`. When pressed it will behave like `KC_ESC`, but with Shift or GUI held it will send `KC_GRAVE`.
|`KC_GESC`|`GRAVE_ESC`|Escape when pressed, <code>`</code> when Shift or GUI are held|
There are several possible key combinations this will break, among them Ctrl+Shift+Esc on Windows and Cmd+Opt+Esc on macOS. You can use these options in your `config.h` to work around this:
## Configuration
| Option | Description |
|--------|-------------|
|`GRAVE_ESC_ALT_OVERRIDE` | Always send Escape if Alt is pressed. |
|`GRAVE_ESC_CTRL_OVERRIDE` | Always send Escape if Ctrl is pressed. |
|`GRAVE_ESC_GUI_OVERRIDE`| Always send Escape if GUI is pressed. |
|`GRAVE_ESC_SHIFT_OVERRIDE` |Always send Escape if SHIFT is pressed. |
There are several possible key combinations this will break, among them Control+Shift+Escape on Windows and Command+Option+Escape on macOS. To work around this, you can `#define` these options in your `config.h`:
This is an integration of Peter Fleury's LCD library. This page will explain the basics. [For in depth documentation visit his page.](http://homepage.hispeed.ch/peterfleury/doxygen/avr-gcc-libraries/group__pfleury__lcd.html)
You can enable support for HD44780 Displays by setting the `HD44780_ENABLE` flag in your keyboards `rules.mk` to yes. This will use about 400 KB of extra space.
## Configuration
You will need to configure the pins used by your display and its number of lines and collumn in your keyboards `config.h`.
Uncomment the section labled HD44780 and change the parameters as needed.
````
/*
* HD44780 LCD Display Configuration
*/
#define LCD_LINES 2 //< number of visible lines of the display
#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
#define LCD_RS_PORT LCD_PORT //< port for RS line
#define LCD_RS_PIN 3 //< pin for RS line
#define LCD_RW_PORT LCD_PORT //< port for RW line
#define LCD_RW_PIN 2 //< pin for RW line
#define LCD_E_PORT LCD_PORT //< port for Enable line
#define LCD_E_PIN 1 //< pin for Enable line
#endif
````
Should you need to configure other properties you can copy them from `quantum/hd44780.h` and set them in your `config.h`
## Usage
To initialize your display call lcd_init() with one of these parameters:
````
LCD_DISP_OFF : display off
LCD_DISP_ON : display on, cursor off
LCD_DISP_ON_CURSOR : display on, cursor on
LCD_DISP_ON_CURSOR_BLINK : display on, cursor on flashing
````
This is best done in your keyboards `matrix_init_kb` or your keymaps `matrix_init_user`.
It is advised to clear the display before use.
To do so call `lcd_clrsrc()`.
To now print something to your Display you first call `lcd_gotoxy(column, line)`. To go to the start of the first line you would call `lcd_gotoxy(0, 0)` and then print a string with `lcd_puts("example string")`.
There are more posible methods to control the display. [For in depth documentation please visit the linked page.](http://homepage.hispeed.ch/peterfleury/doxygen/avr-gcc-libraries/group__pfleury__lcd.html)
Sometimes, you need to hold down a specific key for a long period of time. Whether this is while typing in ALL CAPS, or playing a video game that hasn't implemented auto-run, Key Lock is here to help. Key Lock adds a new keycode, `KC_LOCK`, that will hold down the next key you hit for you. The key is released when you hit it again. Here's an example: let's say you need to type in all caps for a few sentences. You hit KC_LOCK, and then shift. Now, shift will be considered held until you hit it again. You can think of key lock as caps lock, but supercharged.
Sometimes you may find yourself needing to hold down a specific key for a long period of time. Key Lock holds down the next key you press for you. Press it again, and it will be released.
Here's how to use it:
Let's say you need to type in ALL CAPS for a few sentences. Hit `KC_LOCK`, and then Shift. Now, Shift will be considered held until you tap it again. You can think of Key Lock as Caps Lock, but supercharged.
1. Pick a key on your keyboard. This will be the key lock key. Assign it the keycode `KC_LOCK`. This will be a single-action key: you won't be able to use it for anything else.
2. Enable key lock by including `KEY_LOCK_ENABLE = yes` in your Makefile.
3. That's it!
## Usage
Important: switching layers does not cancel the key lock. Additionally, key lock is only able to hold standard action keys and One Shot modifier keys (for example, if you have your shift defined as `OSM(KC_LSFT)`; see [One Shot Keys](quantum_keycodes.md#one-shot-keys)). This does not include any of the QMK special functions (except One Shot modifiers), or shifted versions of keys such as KC_LPRN. If it's in the [Basic Keycodes](keycodes_basic.md) list, it can be held. If it's not, then it can't be.
First, enable Key Lock by setting `KEY_LOCK_ENABLE = yes` in your `rules.mk`. Then pick a key in your keymap and assign it the keycode `KC_LOCK`.
|`KC_LOCK`|Hold down the next key pressed, until the key is pressed again|
## Caveats
Key Lock is only able to hold standard action keys and [One Shot modifier](quantum_keycodes.md#one-shot-keys) keys (for example, if you have your Shift defined as `OSM(KC_LSFT)`).
This does not include any of the QMK special functions (except One Shot modifiers), or shifted versions of keys such as `KC_LPRN`. If it's in the [Basic Keycodes](keycodes_basic.md) list, it can be held.
@@ -53,6 +53,8 @@ but the `LAYOUT_<layout>` variable must be defined in `<folder>.h` as well.
## Tips for Making Layouts Keyboard-Agnostic
### Includes
Instead of using `#include "planck.h"`, you can use this line to include whatever `<keyboard>.h` (`<folder>.h` should not be included here) file that is being compiled:
#include QMK_KEYBOARD_H
@@ -72,3 +74,7 @@ For example:
```
Note that the names are lowercase and match the folder/file names for the keyboard/revision exactly.
### Keymaps
In order to support both split and non-split keyboards with the same layout, you need to use the keyboard agnostic `LAYOUT_<layout name>` macro in your keymap. For instance, in order for a Let's Split and Planck to share the same layout file, you need to use `LAYOUT_ortho_4x12` instead of `LAYOUT_planck_grid` or just `{}` for a C array.
There is basic support for addressable RGB matrix lighting with the I2C IS31FL3731 RGB controller. To enable it, add this to your `rules.mk`:
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_ENABLE = IS31FL3731
Configure the hardware via your `config.h`:
@@ -36,7 +40,51 @@ Define these arrays listing all the LEDs in your `<keyboard>.c`:
....
}
Where `Cx_y` is the location of the LED in the matrix defined by [the datasheet](http://www.issi.com/WW/pdf/31FL3731.pdf). The `driver` is the index of the driver you defined in your `config.h` (`0` or `1` right now).
Where `Cx_y` is the location of the LED in the matrix defined by [the datasheet](http://www.issi.com/WW/pdf/31FL3731.pdf) and the header file `drivers/issi/is31fl3731.h`. The `driver` is the index of the driver you defined in your `config.h` (`0` or `1` right now).
### IS31FL3733
There is basic support for addressable RGB matrix lighting with the I2C IS31FL3733 RGB controller. To enable it, add this to your `rules.mk`:
RGB_MATRIX_ENABLE = IS31FL3733
Configure the hardware via your `config.h`:
// This is a 7-bit address, that gets left-shifted and bit 0
// set to 0 for write, 1 for read (as per I2C protocol)
// The address will vary depending on your wiring:
// 00 <-> GND
// 01 <-> SCL
// 10 <-> SDA
// 11 <-> VCC
// ADDR1 represents A1:A0 of the 7-bit address.
// ADDR2 represents A3:A2 of the 7-bit address.
// The result is: 0b101(ADDR2)(ADDR1)
#define DRIVER_ADDR_1 0b1010000
#define DRIVER_ADDR_2 0b1010000 // this is here for compliancy reasons.
#define DRIVER_COUNT 1
#define DRIVER_1_LED_TOTAL 64
#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
Currently only a single drivers is supported, but it would be trivial to support all 4 combinations. For now define `DRIVER_ADDR_2` as `DRIVER_ADDR_1`
Define these arrays listing all the LEDs in your `<keyboard>.c`:
const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
/* Refer to IS31 manual for these locations
* driver
* | R location
* | | G location
* | | | B location
* | | | | */
{0, B_1, A_1, C_1},
....
}
Where `X_Y` is the location of the LED in the matrix defined by [the datasheet](http://www.issi.com/WW/pdf/31FL3733.pdf) and the header file `drivers/issi/is31fl3733.h`. The `driver` is the index of the driver you defined in your `config.h` (Only `0` right now).
From this point forward the configuration is the same for all the drivers.
const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
/* {row | col <<4}
@@ -80,7 +128,7 @@ All RGB keycodes are currently shared with the RGBLIGHT system:
Thesearetheeffectsthatarecurrentlyavailable:
enumrgb_matrix_effects{
RGB_MATRIX_SOLID_COLOR =1,
RGB_MATRIX_SOLID_COLOR =1,
RGB_MATRIX_ALPHAS_MODS,
RGB_MATRIX_DUAL_BEACON,
RGB_MATRIX_GRADIENT_UP_DOWN,
@@ -93,7 +141,7 @@ These are the effects that are currently available:
RGB_MATRIX_RAINBOW_MOVING_CHEVRON,
RGB_MATRIX_JELLYBEAN_RAINDROPS,
#ifdefRGB_MATRIX_KEYPRESSES
RGB_MATRIX_SOLID_REACTIVE,
RGB_MATRIX_SOLID_REACTIVE,
RGB_MATRIX_SPLASH,
RGB_MATRIX_MULTISPLASH,
RGB_MATRIX_SOLID_SPLASH,
@@ -107,7 +155,7 @@ These are the effects that are currently available:
If you've installed addressable RGB lights on your keyboard you can control them with QMK. Currently we support the following addressable LEDs on Atmel AVR processors:
QMK has the ability to control RGB LEDs attached to your keyboard. This is commonly called *underglow*, due to the LEDs often being mounted on the bottom of the keyboard, producing a nice diffused effect when combined with a translucent case.
* WS2811 and variants (WS2812, WS2812B, WS2812C, etc)
* SK6812RGBW

Some keyboards come with RGB LEDs pre-installed. Others have to have LEDs installed after the fact. See below for information on modifying your keyboard.
Some keyboards come with RGB LEDs preinstalled. Others must have them installed after the fact. See the [Hardware Modification](#hardware-modification) section for information on adding RGB lighting to your keyboard.
## Selecting Colors
Currently QMK supports the following addressable LEDs on AVR microcontrollers (however, the white LED in RGBW variants is not supported):
QMK uses Hue, Saturation, and Value to set color rather than using RGB. You can use the color wheel below to see how this works. Changing the Hue will cycle around the circle. Saturation will affect the intensity of the color, which you can see as you move from the inner part to the outer part of the wheel. Value sets the overall brightness.
* WS2811, WS2812, WS2812B, WS2812C, etc.
* SK6812, SK6812MINI, SK6805
<imgsrc="gitbook/images/color-wheel.svg"alt="HSV Color Wheel"width="250">
These LEDs are called "addressable" because instead of using a wire per color, each LED contains a small microchip that understands a special protocol sent over a single wire. The chip passes on the remaining data to the next LED, allowing them to be chained together. In this way, you can easily control the color of the individual LEDs.
If you would like to learn more about HSV you can start with the [Wikipedia article](https://en.wikipedia.org/wiki/HSL_and_HSV).
## Usage
## Configuration
On keyboards with onboard RGB LEDs, it is usually enabled by default. If it is not working for you, check that your `rules.mk` includes the following:
Before RGB Lighting can be used you have to enable it in `rules.mk`:
RGBLIGHT_ENABLE = yes
You can configure the behavior of the RGB lighting by defining values inside `config.h`.
### Required Configuration
At minimum you have to define the pin your LED strip is connected to and the number of LEDs connected.
```c
#define RGB_DI_PIN D7 // The pin the LED strip is connected to
#define RGBLED_NUM 14 // Number of LEDs in your strip
```make
RGBLIGHT_ENABLE= yes
```
### Optional Configuration
At minimum you must define the data pin your LED strip is connected to, and the number of LEDs in the strip, in your `config.h`. If your keyboard has onboard RGB LEDs, and you are simply creating a keymap, you usually won't need to modify these.
You can change the behavior of the RGB Lighting by setting these configuration values. Use `#define <Option> <Value>` in a `config.h` at the keyboard, revision, or keymap level.
|`RGB_DI_PIN`|The pin connected to the data pin of the LEDs|
|`RGBLED_NUM`|The number of LEDs connected |
| Option | Default Value | Description |
|--------|---------------|-------------|
| `RGBLIGHT_HUE_STEP` | 10 | How many hues you want to have available. |
| `RGBLIGHT_SAT_STEP` | 17 | How many steps of saturation you'd like. |
| `RGBLIGHT_VAL_STEP` | 17 | The number of levels of brightness you want. |
| `RGBLIGHT_LIMIT_VAL` | 255 | Limit the val of HSV to limit the maximum brightness simply. |
| `RGBLIGHT_SLEEP` | | `#define` this will shut off the lights when the host goes to sleep |
Then you should be able to use the keycodes below to change the RGB lighting to your liking.
### Color Selection
### Animations
QMK uses [Hue, Saturation, and Value](https://en.wikipedia.org/wiki/HSL_and_HSV) to select colors rather than RGB. The color wheel below demonstrates how this works.
If you have `#define RGBLIGHT_ANIMATIONS` in your `config.h` you will have a number of animation modes you can cycle through using the `RGB_MOD` key. You can also `#define` other options to tweak certain animations.
<imgsrc="gitbook/images/color-wheel.svg"alt="HSV Color Wheel"width="250"/>
| Option | Default Value | Description |
|--------|---------------|-------------|
| `RGBLIGHT_ANIMATIONS` | | `#define` this to enable animation modes. |
| `RGBLIGHT_EFFECT_BREATHE_CENTER` | 1.85 | Used to calculate the curve for the breathing animation. Valid values 1.0-2.7. |
| `RGBLIGHT_EFFECT_BREATHE_MAX` | 255 | The maximum brightness for the breathing mode. Valid values 1-255. |
| `RGBLIGHT_EFFECT_SNAKE_LENGTH` | 4 | The number of LEDs to light up for the "snake" animation. |
| `RGBLIGHT_EFFECT_KNIGHT_LENGTH` | 3 | The number of LEDs to light up for the "knight" animation. |
| `RGBLIGHT_EFFECT_KNIGHT_OFFSET` | 0 | Start the knight animation this many LEDs from the start of the strip. |
| `RGBLIGHT_EFFECT_KNIGHT_LED_NUM` | RGBLED_NUM | The number of LEDs to have the "knight" animation travel. |
| `RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL` | 1000 | How long to wait between light changes for the "christmas" animation. Specified in ms. |
| `RGBLIGHT_EFFECT_CHRISTMAS_STEP` | 2 | How many LED's to group the red/green colors by for the christmas mode. |
Changing the **Hue** cycles around the circle.
Changing the **Saturation** moves between the inner and outer sections of the wheel, affecting the intensity of the color.
Changing the **Value** sets the overall brightness.
You can also tweak the behavior of the animations by defining these consts in your `keymap.c`. These mostly affect the speed different modes animate at.
```c
// How long (in ms) to wait between animation steps for the breathing mode
Look in `rgblights.h` for all available functions, but if you want to control all or some LEDs your goto functions are:
```c
// turn all lights off (stored in EEPROM)
rgblight_disable();
// turn lights on, based on their previous state (stored in EEPROM)
rgblight_enable();
// turn all lights off (not stored in EEPROM)
rgblight_disable_noeeprom();
// turn lights on, based on their previous state (not stored in EEPROM)
rgblight_enable_noeeprom();
// where r/g/b is a number from 0..255. Turns all the LEDs to this color (ignores mode, not stored in EEPROM).
rgblight_setrgb(r,g,b);
// HSV color control - h is a value from 0..360 and s/v is a value from 0..255 (stored in EEPROM)
rgblight_sethsv(h,s,v);
// HSV color control - h is a value from 0..360 and s/v is a value from 0..255 (not stored in EEPROM)
rgblight_sethsv_noeeprom(h,s,v);
// Sets the mode, if rgb animations are enabled (stored in eeprom)
rgblight_mode(x);
// Sets the mode, if rgb animations are enabled (not stored in eeprom)
rgblight_mode_noeeprom(x);
// MODE 1, solid color
// MODE 2-5, breathing
// MODE 6-8, rainbow mood
// MODE 9-14, rainbow swirl
// MODE 15-20, snake
// MODE 21-23, knight
// MODE 24, xmas
// MODE 25-34, static rainbow
rgblight_setrgb_at(r,g,b,LED);// control a single LED. 0 <= LED < RGBLED_NUM
rgblight_sethsv_at(h,s,v,LED);// control a single LED. 0 <= LED < RGBLED_NUM
```
You can find a list of predefined colors at [`quantum/rgblight_list.h`](https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h). Free to add to this list!
|`RGBLIGHT_HUE_STEP` |`10` |The number of steps to cycle through the hue by |
|`RGBLIGHT_SAT_STEP` |`17` |The number of steps to increment the saturation by |
|`RGBLIGHT_VAL_STEP` |`17` |The number of steps to increment the brightness by |
|`RGBLIGHT_LIMIT_VAL` |`255` |The maximum brightness level |
|`RGBLIGHT_SLEEP` |*Not defined*|If defined, the RGB lighting will be switched off when the host goes to sleep|
## Animations
Not only can this lighting be whatever color you want, if `RGBLIGHT_ANIMATIONS` is defined, you also have a number of animation modes at your disposal:
|Mode |Description |
|-----|---------------------|
|1 |Solid color |
|2-5 |Solid color breathing|
|6-8 |Cycling rainbow |
|9-14 |Swirling rainbow |
|15-20|Snake |
|21-23|Knight |
|24 |Christmas |
|25-34|Static gradient |
|35 |RGB Test |
|36 |Alternating |
Check out [this video](https://youtube.com/watch?v=VKrpPAHlisY) for a demonstration.
The following options can be used to tweak the various animations:
If you need to change your RGB lighting in code, for example in a macro to change the color whenever you switch layers, QMK provides a set of functions to assist you. See [`rgblight.h`](https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight.h) for the full list, but the most commonly used functions include:
|`rgblight_enable()` |Turn LEDs on, based on their previous state |
|`rgblight_enable_noeeprom()` |Turn LEDs on, based on their previous state (not written to EEPROM) |
|`rgblight_disable()` |Turn LEDs off |
|`rgblight_disable_noeeprom()` |Turn LEDs off (not written to EEPROM) |
|`rgblight_mode(x)` |Set the mode, if RGB animations are enabled |
|`rgblight_mode_noeeprom(x)` |Set the mode, if RGB animations are enabled (not written to EEPROM) |
|`rgblight_setrgb(r, g, b)` |Set all LEDs to the given RGB value where `r`/`g`/`b` are between 0 and 255 (not written to EEPROM) |
|`rgblight_setrgb_at(r, g, b, led)` |Set a single LED to the given RGB value, where `r`/`g`/`b` are between 0 and 255 and `led` is between 0 and `RGBLED_NUM` (not written to EEPROM) |
|`rgblight_sethsv(h, s, v)` |Set all LEDs to the given HSV value where `h` is between 0 and 360 and `s`/`v` are between 0 and 255 |
|`rgblight_sethsv_noeeprom(h, s, v)`|Set all LEDs to the given HSV value where `h` is between 0 and 360 and `s`/`v` are between 0 and 255 (not written to EEPROM) |
|`rgblight_sethsv_at(h, s, v, led)` |Set a single LED to the given HSV value, where `h` is between 0 and 360, `s`/`v` are between 0 and 255, and `led` is between 0 and `RGBLED_NUM` (not written to EEPROM)|
Additionally, [`rgblight_list.h`](https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h) defines several predefined shortcuts for various colors. Feel free to add to this list!
## Hardware Modification

Here is a quick demo on Youtube (with NPKC KC60) (https://www.youtube.com/watch?v=VKrpPAHlisY).
For this mod, you need an unused pin wiring to DI of WS2812 strip. After wiring the VCC, GND, and DI, you can enable the underglow in your Makefile.
RGBLIGHT_ENABLE = yes
In order to use the underglow animation functions, you need to have `#define RGBLIGHT_ANIMATIONS` in your `config.h`.
Please add the following options into your config.h, and set them up according your hardware configuration. These settings are for the `F4` pin by default:
#define RGB_DI_PIN F4 // The pin your RGB strip is wired to
#define RGBLED_NUM 14 // Number of LEDs
You'll need to edit `RGB_DI_PIN` to the pin you have your `DI` on your RGB strip wired to.
If your keyboard lacks onboard underglow LEDs, you may often be able to solder on an RGB LED strip yourself. You will need to find an unused pin to wire to the data pin of your LED strip. Some keyboards may break out unused pins from the MCU to make soldering easier. The other two pins, VCC and GND, must also be connected to the appropriate power pins.
Steve Losh [described](http://stevelosh.com/blog/2012/10/a-modern-space-cadet/) the Space Cadet Shift quite well. Essentially, you hit the left Shift on its own, and you get an opening parenthesis; hit the right Shift on its own, and you get the closing one. When hit with other keys, the Shift key keeps working as it always does. Yes, it's as cool as it sounds.
To use it, use `KC_LSPO` (Left Shift, Parenthesis Open) for your left Shift on your keymap, and `KC_RSPC` (Right Shift, Parenthesis Close) for your right Shift.
It's defaulted to work on US keyboards, but if your layout uses different keys for parenthesis, you can define those in your `config.h` like this:
#define LSPO_KEY KC_9
#define RSPC_KEY KC_0
You can also choose between different rollover behaviors of the shift keys by defining:
#define DISABLE_SPACE_CADET_ROLLOVER
in your `config.h`. Disabling rollover allows you to use the opposite shift key to cancel the space cadet state in the event of an erroneous press instead of emitting a pair of parentheses when the keys are released.
The only other thing you're going to want to do is create a `Makefile` in your keymap directory and set the following:
```
COMMAND_ENABLE = no # Commands for debug and configuration
```
This is just to keep the keyboard from going into command mode when you hold both Shift keys at the same time.
Steve Losh described the [Space Cadet Shift](http://stevelosh.com/blog/2012/10/a-modern-space-cadet/) quite well. Essentially, when you tap Left Shift on its own, you get an opening parenthesis; tap Right Shift on its own and you get the closing one. When held, the Shift keys function as normal. Yes, it's as cool as it sounds.
## Usage
Replace the Left Shift key in your keymap with `KC_LSPO` (Left Shift, Parenthesis Open), and Right Shift with `KC_RSPC` (Right Shift, Parenthesis Close).
|`KC_LSPO`|Left Shift when held, `(` when tapped |
|`KC_RSPC`|Right Shift when held, `)` when tapped|
## Caveats
Space Cadet's functionality can conflict with the default Command functionality when both Shift keys are held at the same time. Make sure that Command is disabled in your `rules.mk` with:
```make
COMMAND_ENABLE= no
```
## Configuration
By default Space Cadet assumes a US ANSI layout, but if your layout uses different keys for parentheses, you can redefine them in your `config.h`.
You can also disable the rollover, allowing you to use the opposite Shift key to cancel the Space Cadet state in the event of an erroneous press, instead of emitting a pair of parentheses when the keys are released.
Based on the [Space Cadet Shift](feature_space_cadet_shift.md) feature. Tap the Shift key on its own, and it behaves like Enter. When held, the Shift functions as normal.
## Usage
Replace any Shift key in your keymap with `KC_SFTENT` (Shift, Enter), and you're done.
Based on the Space Cadet Shift by Steve Losh [described](http://stevelosh.com/blog/2012/10/a-modern-space-cadet/)
Essentially, you hit the Shift on its own, and it acts as the enter key. When hit with other keys, the Shift key keeps working as it always does. Yes, it's as cool as it sounds. This solution works better than using a macro since the timers defined in quantum allow us to tell when another key is pressed, rather than just having a janky timer than results in accidental endlines.
To use it, use `KC_SFTENT` (Shift, Enter) for any Shift on your keymap.
It's defaulted to work on US keyboards, but if you'd like to use a different key for Enter, you can define those in your `config.h` like this:
#define SFTENT_KEY KC_ENT
The only other thing you're going to want to do is create a `rules.mk` in your keymap directory and set the following:
```
COMMAND_ENABLE = no # Commands for debug and configuration
```
This is just to keep the keyboard from going into command mode when you hold both Shift keys at the same time.
PLEASE NOTE: this feature uses the same timers as the Space Cadet Shift feature, so using them in tandem may produce unwanted results.
@@ -31,6 +31,20 @@ The reason for this, is that `<name>.h` won't be added in time to add settings (
So you should use the `config.h` for QMK settings, and the `<name>.h` file for user or keymap specific settings.
`/users/<name>/rules.mk` will be included in the build _after_ the `rules.mk` from your keymap. This allows you to have features in your userspace `rules.mk` that depend on individual QMK features that may or may not be available on a specific keyboard. For example, if you have RGB control features shared between all your keyboards that support RGB lighting, you can `define RGB_ENABLE` in your keymap `rules.mk` and then check for the variable in your userspace `rules.mk` like this:
```make
ifdefRGB_ENABLE
# Include my fancy rgb functions source here
endif
```
Because of this, any time you turn on QMK features in your `users/<name>/rules.mk`, you should conditionally enable them only if the flag isn't already defined, like this:
```make
ifndefTAP_DANCE_ENABLE
TAP_DANCE_ENABLE= yes
endif
```
This will ensure that you can explicitly turn off features for an individual keymap.
## Readme
Please include authorship (your name, github username, email), and optionally [a license that's GPL compatible](https://www.gnu.org/licenses/license-list.html#GPLCompatibleLicenses).
@@ -122,4 +136,4 @@ By default the userspace used will be the same as the keymap name. In some situa
QMK has a staggering number of features for building your keyboard. It can take some time to understand all of them and determine which one will achieve your goal.
* [Advanced Keycodes](feature_advanced_keycodes.md) - Change layers, type shifted keys, and more. Go beyond typing simple characters.
* [Advanced Keycodes](feature_advanced_keycodes.md) - Change layers, dual-action keys, and more. Go beyond typing simple characters.
* [Audio](feature_audio.md) - Connect a speaker to your keyboard for audio feedback, midi support, and music mode.
* [Auto Shift](feature_auto_shift.md) - Tap for the normal key, hold slightly longer for its shifted state.
* [Backlight](feature_backlight.md) - LED lighting support for your keyboard.
* [Bootmagic](feature_bootmagic.md) - Adjust the behavior of your keyboard using hotkeys.
* [Dynamic Macros](feature_dynamic_macros.md) - Record and playback macros from the keyboard itself.
* [HD44780 LCD Display](feature_hd44780.md) - Support for LCD character displays using the HD44780 standard.
* [Key Lock](feature_key_lock.md) - Lock a key in the "down" state.
* [Layouts](feature_layouts.md) - Use one keymap with any keyboard that supports your layout.
* [Leader Key](feature_leader_key.md) - Tap the leader key followed by a sequence to trigger custom behavior.
@@ -18,7 +19,7 @@ QMK has a staggering number of features for building your keyboard. It can take
* [PS2 Mouse](feature_ps2_mouse.md) - Driver for connecting a PS/2 mouse directly to your keyboard.
* [RGB Light](feature_rgblight.md) - RGB lighting for your keyboard.
* [RGB Matrix](feature_rgb_matrix.md) - RGB Matrix lights for per key lighting.
* [Space Cadet](feature_space_cadet.md) - Use your left/right shift keys to type parenthesis and brackets.
* [Space Cadet](feature_space_cadet_shift.md) - Use your left/right shift keys to type parenthesis and brackets.
* [Stenography](feature_stenography.md) - Put your keyboard into Plover mode for stenography use.
* [Swap Hands](feature_swap_hands.md) - Mirror your keyboard for one handed usage.
* [Tap Dance](feature_tap_dance.md) - Make a single key do as many things as you want.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.