You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Pete Sevander 7e983796e1
Process combos earlier & overlapping combos (#8591)
* Combo processing improvements.

Now it is possible to use ModTap and LayerTap keys as part of combos.
Overlapping combos also don't trigger all the combos, just exactly the
one that you press.

New settings:
- COMBO_MUST_HOLD_MODS
- COMBO_MOD_TERM
- COMBO_TERM_PER_COMBO
- COMBO_MUST_HOLD_PER_COMBO
- COMBO_STRICT_TIMER
- COMBO_NO_TIMER

* Remove the size flags from combo_t struct boolean members.

This in the end actually saves space as the members are accessed so many
times. The amount of operations needed to access the bits uses more
memory than setting the size saves.

* Fix `process_combo_key_release` not called correctly with tap-only combos

* Fix not passing a pointer when NO_ACTION_TAPPING is defined.

* Docs for `COMBO_ONLY_FROM_LAYER`

* Update docs/feature_combo.md

Co-authored-by: precondition <57645186+precondition@users.noreply.github.com>

* Update quantum/process_keycode/process_combo.c

Co-authored-by: precondition <57645186+precondition@users.noreply.github.com>

* Add `EXTRA_SHORT_COMBOS` option.

Stuff combo's `disabled` and `active` flags into `state`. Possibly can
save some space.

* Add more examples and clarify things with dict management system.

- Simple examples now has a combo that has modifiers included.
- The slightly more advanced examples now are actually more advanced
  instead of just `tap_code16(<modded-keycode>)`.
- Added a note that `COMBO_ACTION`s are not needed anymore as you can
  just use custom keycodes.
- Added a note that the `g/keymap_combo.h` macros use the
  `process_combo_event` function and that it is not usable in one's
  keymap afterwards.

* Update docs/feature_combo.md

Co-authored-by: precondition <57645186+precondition@users.noreply.github.com>

* Update docs/feature_combo.md

Co-authored-by: precondition <57645186+precondition@users.noreply.github.com>

* Update docs/feature_combo.md

Co-authored-by: precondition <57645186+precondition@users.noreply.github.com>

* Update docs/feature_combo.md

Co-authored-by: precondition <57645186+precondition@users.noreply.github.com>

* Update docs/feature_combo.md

Co-authored-by: precondition <57645186+precondition@users.noreply.github.com>

* Change "the" combo action example to "email" example.

* Update docs/feature_combo.md

Co-authored-by: precondition <57645186+precondition@users.noreply.github.com>

* Fix sneaky infinite loop with `combo_disable()`

No need to call `dump_key_buffer` when disabling combos because the
buffer is either being dumped if a combo-key was pressed, or the buffer is empty
if a non-combo-key is pressed.

* Update docs/feature_combo.md

Co-authored-by: precondition <57645186+precondition@users.noreply.github.com>

* Update docs/feature_combo.md

Co-authored-by: precondition <57645186+precondition@users.noreply.github.com>

Co-authored-by: precondition <57645186+precondition@users.noreply.github.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
4 years ago
..
ChangeLog 2021 May 29 Breaking Changes Update (#13034) 5 years ago
de CLI/Docs: Fix the format commands' name (#13668) 4 years ago
es Port new_keyboard.sh to CLI (#13706) 4 years ago
fr-fr CLI/Docs: Fix the format commands' name (#13668) 4 years ago
gitbook/images
he-il [Docs] Use HTTPS for images and links where possible (#11695) 5 years ago
ja __flash? (#13799) 4 years ago
ko-kr [Docs] Use HTTPS for images and links where possible (#11695) 5 years ago
pt-br [Docs] Use HTTPS for images and links where possible (#11695) 5 years ago
ru-ru [Docs] Use HTTPS for images and links where possible (#11695) 5 years ago
zh-cn [Bug] Develop - Change uint32_t to layer_state_t (#13596) 4 years ago
.nojekyll
CNAME
README.md Small tweaks to docs to make them more user friendly (#11518) 5 years ago
_langs.md
_summary.md [Feature] Key Overrides (#11422) 4 years ago
adc_driver.md 2021 May 29 Breaking Changes Update (#13034) 5 years ago
api_development_environment.md
api_development_overview.md
api_docs.md [Docs] Use HTTPS for images and links where possible (#11695) 5 years ago
api_overview.md [Docs] Use HTTPS for images and links where possible (#11695) 5 years ago
arm_debugging.md
audio_driver.md Audio system overhaul (#11820) 5 years ago
breaking_changes.md Merge remote-tracking branch 'upstream/master' into develop 5 years ago
breaking_changes_history.md 2021 May 29 Breaking Changes Update (#13034) 5 years ago
breaking_changes_instructions.md
chibios_upgrade_instructions.md Update ChibiOS, ChibiOS-Contrib. (#13056) 5 years ago
cli.md
cli_commands.md Port new_keyboard.sh to CLI (#13706) 4 years ago
cli_configuration.md
cli_development.md CLI/Docs: Fix the format commands' name (#13668) 4 years ago
cli_tab_complete.md Add support for tab completion (#12411) 5 years ago
coding_conventions_c.md [Docs] Use HTTPS for images and links where possible (#11695) 5 years ago
coding_conventions_python.md
compatible_microcontrollers.md Adds support for STM32L412xB, STM32L422xB. (#13383) 5 years ago
config_options.md Process combos earlier & overlapping combos (#8591) 4 years ago
configurator_default_keymaps.md [Docs] add "Adding Default Keymaps to QMK Configurator" doc (#10049) 5 years ago
configurator_step_by_step.md
configurator_troubleshooting.md
contributing.md [Docs] Use HTTPS for images and links where possible (#11695) 5 years ago
custom_matrix.md
custom_quantum_functions.md Use single memcmp to determine if matrix changed. (#13064) 5 years ago
data_driven_config.md Create a system to map between info.json and config.h/rules.mk (#11548) 5 years ago
documentation_best_practices.md
documentation_templates.md [Docs] Use HTTPS for images and links where possible (#11695) 5 years ago
driver_installation_zadig.md Update LUFA (18-07-2021) and add QMK-HID Bootloader support (#13588) 4 years ago
eeprom_driver.md eeprom_i2c driver: added EXTERNAL_EEPROM_WP_PIN configuration option. (#12617) 5 years ago
faq_build.md [Docs] Use HTTPS for images and links where possible (#11695) 5 years ago
faq_debug.md Allow output of logging when running unit tests (#13556) 4 years ago
faq_general.md Fix typos and reword some sentences in FAQs (#11546) 5 years ago
faq_keymap.md [Docs] Use HTTPS for images and links where possible (#11695) 5 years ago
faq_misc.md [Docs] Use HTTPS for images and links where possible (#11695) 5 years ago
feature_advanced_keycodes.md Additional documentation for GUI mod combo (#13266) 5 years ago
feature_audio.md Document user song list file (#13101) 5 years ago
feature_auto_shift.md 2021 May 29 Breaking Changes Update (#13034) 5 years ago
feature_backlight.md 2021 May 29 Breaking Changes Update (#13034) 5 years ago
feature_bluetooth.md
feature_bootmagic.md [Docs] Remove extra word it bootmagic page (#13855) 4 years ago
feature_combo.md Process combos earlier & overlapping combos (#8591) 4 years ago
feature_command.md
feature_debounce_type.md Add asym_eager_defer_pk debounce type (#12689) 5 years ago
feature_dip_switch.md [Docs] Fix typo in dip switch example (#13688) 4 years ago
feature_dynamic_macros.md
feature_encoders.md 2021 May 29 Breaking Changes Update (#13034) 5 years ago
feature_grave_esc.md
feature_haptic_feedback.md Add Per Key exclusions for Haptic Feedback (#12386) 5 years ago
feature_hd44780.md
feature_joystick.md 2020 November 28 Breaking Changes Update (#11053) 5 years ago
feature_key_lock.md
feature_key_overrides.md [Feature] Key Overrides (#11422) 4 years ago
feature_layers.md Improve upon the 'Caveats' section of the Layers and Mod-Tap documentation (#12306) 5 years ago
feature_layouts.md
feature_leader_key.md 2021 May 29 Breaking Changes Update (#13034) 5 years ago
feature_led_indicators.md [Docs] Added note about no split support (#12512) 4 years ago
feature_led_matrix.md __flash? (#13799) 4 years ago
feature_macros.md [Docs] New section to modifier docs: Checking Modifier State (#10550) 5 years ago
feature_midi.md [Docs] added basic midi documention of common features (#13113) 5 years ago
feature_mouse_keys.md Add support for 8 buttons to mouse report (#10807) 5 years ago
feature_oled_driver.md Add oled_invert (#13172) 5 years ago
feature_pointing_device.md Merge remote-tracking branch 'origin/master' into develop 5 years ago
feature_ps2_mouse.md [Feature] Swap buttons on PS2 Mouse/Trackball (#9205) 4 years ago
feature_rawhid.md Updated Raw HID docs to clarify packet/report length (#11211) 5 years ago
feature_rgb_matrix.md __flash? (#13799) 4 years ago
feature_rgblight.md Retain brightness with lighting layers (#13025) 4 years ago
feature_sequencer.md Ensure single newline at EOF for core files (#11310) 5 years ago
feature_space_cadet.md [Docs] Use HTTPS for images and links where possible (#11695) 5 years ago
feature_split_keyboard.md Allow invert of SPLIT_HAND_PIN logic (#13433) 4 years ago
feature_st7565.md ST7565 invert (#13237) 5 years ago
feature_stenography.md [Docs] Use HTTPS for images and links where possible (#11695) 5 years ago
feature_swap_hands.md 2021 May 29 Breaking Changes Update (#13034) 5 years ago
feature_tap_dance.md matrix_scan_x -> x_task (#13748) 4 years ago
feature_terminal.md
feature_thermal_printer.md
feature_unicode.md 2021 May 29 Breaking Changes Update (#13034) 5 years ago
feature_userspace.md Normalise include statements in core code (#11153) 5 years ago
feature_velocikey.md
feature_wpm.md 2021 May 29 Breaking Changes Update (#13034) 5 years ago
flashing.md Update LUFA (18-07-2021) and add QMK-HID Bootloader support (#13588) 4 years ago
flashing_bootloadhid.md
fuse.txt Ensure single newline at EOF for core files (#11310) 5 years ago
getting_started_docker.md Add support for using podman to util/docker_build.sh (#10819) 5 years ago
getting_started_github.md [Docs] Use HTTPS for images and links where possible (#11695) 5 years ago
getting_started_introduction.md
getting_started_make_guide.md Documentation update (#12484) 5 years ago
getting_started_vagrant.md [Docs] Use HTTPS for images and links where possible (#11695) 5 years ago
hand_wire.md [Docs] Added information on soldering diodes in parallel (#13117) 4 years ago
hardware_avr.md Port new_keyboard.sh to CLI (#13706) 4 years ago
hardware_drivers.md
hardware_keyboard_guidelines.md [Docs] Use HTTPS for images and links where possible (#11695) 5 years ago
how_a_matrix_works.md [Docs] Use HTTPS for images and links where possible (#11695) 5 years ago
how_keyboards_work.md
i2c_driver.md Rework I2C driver docs (#11658) 5 years ago
index.html Simplify the visual flow of the getting started page (#11316) 5 years ago
internals_defines.md
internals_gpio_control.md [Docs] Use HTTPS for images and links where possible (#11695) 5 years ago
internals_input_callback_reg.md
internals_midi_device.md
internals_midi_device_setup_process.md
internals_midi_util.md
internals_send_functions.md
internals_sysex_tools.md
isp_flashing_guide.md [Docs] Update isp_flashing_guide.md (#11777) 5 years ago
keycodes.md [Docs] added list of MIDI keycodes (#13159) 4 years ago
keycodes_basic.md Update keycode docs (#11343) 5 years ago
keycodes_us_ansi_shifted.md
keymap.md
mod_tap.md Add Mac centric Shift and Alt + GUI Macros (#13107) 5 years ago
newbs.md [Docs] Use HTTPS for images and links where possible (#11695) 5 years ago
newbs_building_firmware.md
newbs_building_firmware_configurator.md Small tweaks to docs to make them more user friendly (#11518) 5 years ago
newbs_flashing.md A few small typo fixes in docs (#12524) 5 years ago
newbs_getting_started.md Update FreeBSD install method (#12815) 5 years ago
newbs_git_best_practices.md
newbs_git_resolving_merge_conflicts.md
newbs_git_resynchronize_a_branch.md
newbs_git_using_your_master_branch.md
newbs_learn_more_resources.md Small tweaks to docs to make them more user friendly (#11518) 5 years ago
newbs_testing_debugging.md Small tweaks to docs to make them more user friendly (#11518) 5 years ago
one_shot_keys.md fix: Fix typo in documentation for one shot keys. ON_TOGG -> OS_TOGG (#13754) 4 years ago
other_eclipse.md eclipse: recommend changing the default project make target (#12447) 5 years ago
other_vscode.md Updated settings.json file to fit VSC's docs (#13829) 4 years ago
platformdev_chibios_earlyinit.md Ensure single newline at EOF for core files (#11310) 5 years ago
platformdev_selecting_arm_mcu.md
power.txt
pr_checklist.md Explicitly state that VIA should not be enabled in the default keymap. (#13803) 4 years ago
proton_c_conversion.md Add board specific to Proton-C, with usual defaults turned on. (#10976) 5 years ago
qmk.css
qmk_custom_dark.css Small tweaks to docs to make them more user friendly (#11518) 5 years ago
qmk_custom_light.css Small tweaks to docs to make them more user friendly (#11518) 5 years ago
quantum_keycodes.md
redirects.json
ref_functions.md [Docs] Add EEP_RST keycode to "Wiping the EEPROM" section (#11830) 5 years ago
reference_configurator_support.md Remove references to info.json `width` and `height` in CLI (#13728) 4 years ago
reference_glossary.md [Docs] Use HTTPS for images and links where possible (#11695) 5 years ago
reference_info_json.md Remove references to info.json `width` and `height` in CLI (#13728) 4 years ago
reference_keymap_extras.md Improved Language Specific Keycodes for US International and Extended Layouts (#11307) 5 years ago
serial_driver.md [Core] Unite half-duplex and full-duplex serial drivers (#13081) 5 years ago
spi_driver.md Merge remote-tracking branch 'upstream/master' into develop 5 years ago
support.md
sw.js
syllabus.md [Feature] Key Overrides (#11422) 4 years ago
tap_hold.md Update IGNORE_MOD_TAP_INTERRUPT (#11452) 5 years ago
translating.md
uart_driver.md UART driver refactor (#11637) 5 years ago
understanding_qmk.md [Feature] Key Overrides (#11422) 4 years ago
unit_testing.md Allow output of logging when running unit tests (#13556) 4 years ago
usb_nkro.txt
ws2812_driver.md Fix up WS2812 SPI driver on F072. (#13022) 5 years ago

README.md

Quantum Mechanical Keyboard Firmware

What is QMK Firmware?

QMK (Quantum Mechanical Keyboard) is an open source community centered around developing computer input devices. The community encompasses all sorts of input devices, such as keyboards, mice, and MIDI devices. A core group of collaborators maintains QMK Firmware, QMK Configurator, QMK Toolbox, qmk.fm, and this documentation with the help of community members like you.

Get Started

?> Basic QMK Configurator
User friendly graphical interfaces, no programming knowledge required.

?> Advanced Use The Source
More powerful, but harder to use.

Make It Yours

QMK has lots of features to explore, and a good deal of reference documentation to dig through. Most features are taken advantage of by modifying your keymap, and changing the keycodes.

Need help?

Check out the support page to see how you can get help using QMK.

Give Back

There are a lot of ways you can contribute to the QMK Community. The easiest way to get started is to use it and spread the word to your friends.