Commit Graph

312 Commits

Author SHA1 Message Date
Sergey Vlasov ca0c12847a
Fix layer switching from tap dances by redoing the keymap lookup (#17935) 2022-10-03 20:48:16 +11:00
Jason Ken Adhinarta c0e6a28bc6
Prevent tap dance from wiping dynamic macros (#17880) 2022-10-03 18:26:47 +11:00
Ryan be8907d634
Further refactoring of joystick feature (#18437) 2022-09-27 18:37:13 +10:00
Drashna Jaelre fb29c0ae53
[Core] Add getreuer's Autocorrect feature to core (#15699)
Co-authored-by: Albert Y <76888457+filterpaper@users.noreply.github.com>
2022-09-17 17:50:54 +10:00
Ryan 3d667f0970
Refactor Unicode feature (#18333) 2022-09-12 08:49:04 -07:00
Ryan 8833b28361
Remove `UNICODE_KEY_OSX` and `UC_OSX` (#18290) 2022-09-06 18:07:08 +01:00
QMK Bot 165c15e250 Merge remote-tracking branch 'origin/master' into develop 2022-09-06 04:26:03 +00:00
Joel Challis 0306bdf7fd
Remove use of legacy keycode (#18281) 2022-09-06 05:25:32 +01:00
Joshua Diamond e4bf832368
Add unicode mode change callbacks (#18235) 2022-08-31 16:39:16 -07:00
Jeff Epler 9632360caa
Use a macro to compute the size of arrays at compile time (#18044)
* Add ARRAY_SIZE and CEILING utility macros

* Apply a coccinelle patch to use ARRAY_SIZE

* fix up some straggling items

* Fix 'make test:secure'

* Enhance ARRAY_SIZE macro to reject acting on pointers

The previous definition would not produce a diagnostic for
```
int *p;
size_t num_elem = ARRAY_SIZE(p)
```
but the new one will.

* explicitly get definition of ARRAY_SIZE

* Convert to ARRAY_SIZE when const is involved

The following spatch finds additional instances where the array is
const and the division is by the size of the type, not the size of
the first element:
```
@ rule5a using "empty.iso" @
type T;
const T[] E;
@@

- (sizeof(E)/sizeof(T))
+ ARRAY_SIZE(E)

@ rule6a using "empty.iso" @
type T;
const T[] E;
@@

- sizeof(E)/sizeof(T)
+ ARRAY_SIZE(E)
```

* New instances of ARRAY_SIZE added since initial spatch run

* Use `ARRAY_SIZE` in docs (found by grep)

* Manually use ARRAY_SIZE

hs_set is expected to be the same size as uint16_t, though it's made
of two 8-bit integers

* Just like char, sizeof(uint8_t) is guaranteed to be 1

This is at least true on any plausible system where qmk is actually used.

Per my understanding it's universally true, assuming that uint8_t exists:
https://stackoverflow.com/questions/48655310/can-i-assume-that-sizeofuint8-t-1

* Run qmk-format on core C files touched in this branch

Co-authored-by: Stefan Kerkmann <karlk90@pm.me>
2022-08-30 10:20:04 +02:00
Pascal Getreuer 95c43a2759
Fix Caps Word to treat mod-taps more consistently. (#17463)
* Fix Caps Word to treat mod-taps more consistently.

Previously, holding any mod-tap key while Caps Word is active stops Caps
Word, and this happens regardless of `caps_word_press_user()`. Yet for
regular mod keys, AltGr (KC_RALT) is ignored, Shift keys are passed to
`caps_word_press_user()` to determine whether to continue, and
similarly, a key `RSFT(KC_RALT)` representing Right Shift + Alt is
passed to `caps_word_press_user()` to determine whether to continue.

This commit makes held mod-tap keys consistent with regular mod keys:

* Holding a `RALT_T` mod-tap is ignored.
* When holding a shift mod-tap key, `KC_LSFT` or `KC_RSFT` is passed to
  `caps_word_press_user()` to determine whether to continue.
* When holding a Right Shift + Alt (`RSA_T`) mod-tap, `RSFT(KC_RALT)` is
  passed to `caps_word_press_user()`.

Particularly, with this fix a user may choose to continue Caps Word when
a shift mod-tap key is held by adding `KC_LSFT` and `KC_RSFT` cases in
`caps_word_press_user()`. For instance as

```
bool caps_word_press_user(uint16_t keycode) {
  switch (keycode) {
    // Keycodes that continue Caps Word, with shift applied.
    case KC_A ... KC_Z:
    case KC_MINS:
      add_weak_mods(MOD_BIT(KC_LSFT));  // Apply shift to the next key.
      return true;

    // Keycodes that continue Caps Word, without shifting.
    case KC_1 ... KC_0:
    case KC_BSPC:
    case KC_DEL:
    case KC_UNDS:
    case KC_LSFT:  // <<< Added here.
    case KC_RSFT:
      return true;

    default:
      return false;  // Deactivate Caps Word.
  }
}
```

* Fix Caps Word to treat mod-taps more consistently.

Previously, holding any mod-tap key while Caps Word is active stops Caps
Word, and this happens regardless of `caps_word_press_user()`. Yet for
regular mod keys, AltGr (KC_RALT) is ignored, Shift keys are passed to
`caps_word_press_user()` to determine whether to continue, and
similarly, a key `RSFT(KC_RALT)` representing Right Shift + Alt is
passed to `caps_word_press_user()` to determine whether to continue.

This commit makes held mod-tap keys consistent with regular mod keys:

* Holding a `RALT_T` mod-tap is ignored.
* When holding a shift mod-tap key, `KC_LSFT` or `KC_RSFT` is passed to
  `caps_word_press_user()` to determine whether to continue.
* When holding a Right Shift + Alt (`RSA_T`) mod-tap, `RSFT(KC_RALT)` is
  passed to `caps_word_press_user()`.

Particularly, with this fix a user may choose to continue Caps Word when
a shift mod-tap key is held by adding `KC_LSFT` and `KC_RSFT` cases in
`caps_word_press_user()`. For instance as

```
bool caps_word_press_user(uint16_t keycode) {
  switch (keycode) {
    // Keycodes that continue Caps Word, with shift applied.
    case KC_A ... KC_Z:
    case KC_MINS:
      add_weak_mods(MOD_BIT(KC_LSFT));  // Apply shift to the next key.
      return true;

    // Keycodes that continue Caps Word, without shifting.
    case KC_1 ... KC_0:
    case KC_BSPC:
    case KC_DEL:
    case KC_UNDS:
    case KC_LSFT:  // <<< Added here.
    case KC_RSFT:
      return true;

    default:
      return false;  // Deactivate Caps Word.
  }
}
```

* Update quantum/process_keycode/process_caps_word.c

Co-authored-by: Joel Challis <git@zvecr.com>
2022-08-14 20:25:32 +01:00
Chewxy 6fc7c03e95
Added emacs as an "operating system" for input mode. (#16949) 2022-08-14 20:24:52 +01:00
Pascal Getreuer 6a0d90f81a
Fix Caps Word capitalization when used with Combos + Auto Shift. (#17549) 2022-08-13 23:48:51 +10:00
QMK Bot 0c487cbeba Merge remote-tracking branch 'origin/master' into develop 2022-07-30 00:32:42 +00:00
Drashna Jaelre d93dfbff3c
Fix check when compiling HID Joystick with digital driver (#17844) 2022-07-30 01:32:06 +01:00
precondition 95c1cc425e
Rename postprocess_steno_user → post_process_steno_user (#17823) 2022-07-28 21:51:01 -07:00
QMK Bot a6faf3bc9e Merge remote-tracking branch 'origin/master' into develop 2022-07-02 12:49:52 +00:00
CoffeeIsLife 0365f640af
Allow for RGB actions to take place on Keydown instead of Keyup (#16886)
* Allow for switch on keydown

* add docs
2022-07-02 22:49:49 +10:00
Ryan 3ecb0a80af
Feature-ify Send String (#17275) 2022-07-02 22:10:08 +10:00
Osamu Aoki 871eeae4ea
PoC: Swap Escape and Caps (#16336) 2022-07-02 22:08:48 +10:00
torkel104 8b78fac451
Fix keys being discarded after using the leader key (#17287) 2022-07-02 22:03:40 +10:00
FREEWING.JP 9dc7b9d40c
Added Wait time to sending each Keys for Dynamic Macros function (#16800)
Co-authored-by: Joel Challis <git@zvecr.com>
2022-07-02 21:48:26 +10:00
precondition 7060cb7b26
Refactor steno and add `STENO_PROTOCOL = [all|txbolt|geminipr]` (#17065)
* Refactor steno into STENO_ENABLE_[ALL|GEMINI|BOLT]

* Update stenography documentation

* STENO_ENABLE_TXBOLT → STENO_ENABLE_BOLT

TXBOLT is a better name but BOLT is more consistent with the
pre-existing TX Bolt related constants, which all drop the "TX " prefix

* Comments

* STENO_ENABLE_[GEMINI|BOLT|ALL] → STENO_PROTOCOL = [geminipr|txbolt|all]

* Add note on lacking V-USB support

* Clear chord at the end of the switch(mode){send_steno_chord} block

* Return true if NOEVENT

* update_chord_xxx → add_xxx_key_to_chord

* Enable the defines for all the protocols if STENO_PROTOCOL = all

* Mention how to use `steno_set_mode`

* Set the default steno protocol to "all"

This is done so that existing keymaps invoking `steno_set_mode` don't
all suddenly break

* Add data driver equivalents for stenography feature

* Document format of serial steno packets

(Thanks dnaq)

* Add missing comma
2022-06-23 20:43:24 +02:00
Jouke Witteveen 1706da9054
tap-dance: Restructure code and document in more detail (#16394) 2022-06-13 22:12:55 +02:00
QMK Bot d6402fe9fb Merge remote-tracking branch 'origin/master' into develop 2022-06-05 11:15:11 +02:00
Pascal Getreuer 95d20e6d8b
Fix and add unit tests for Caps Word to work with Unicode Map, Auto Shift, Retro Shift. (#17284)
* Fix Caps Word and Unicode Map

* Tests for Caps Word + Auto Shift and Unicode Map.

* Fix formatting

* Add additional keyboard report expectation macros

This commit defines five test utilities, EXPECT_REPORT, EXPECT_UNICODE,
EXPECT_EMPTY_REPORT, EXPECT_ANY_REPORT and EXPECT_NO_REPORT for use with
TestDriver.

EXPECT_REPORT sets a gmock expectation that a given keyboard report will
be sent. For instance,

  EXPECT_REPORT(driver, (KC_LSFT, KC_A));

is shorthand for

  EXPECT_CALL(driver,
      send_keyboard_mock(KeyboardReport(KC_LSFT, KC_A)));

EXPECT_UNICODE sets a gmock expectation that a given Unicode code point
will be sent using UC_LNX input mode. For instance for U+2013,

  EXPECT_UNICODE(driver, 0x2013);

expects the sequence of keys:

  "Ctrl+Shift+U, 2, 0, 1, 3, space".

EXPECT_EMPTY_REPORT sets a gmock expectation that a given keyboard
report will be sent. For instance

  EXPECT_EMPTY_REPORT(driver);

expects a single report without keypresses or modifiers.

EXPECT_ANY_REPORT sets a gmock expectation that a arbitrary keyboard
report will be sent, without matching its contents. For instance

  EXPECT_ANY_REPORT(driver).Times(1);

expects a single arbitrary keyboard report will be sent.

EXPECT_NO_REPORT sets a gmock expectation that no keyboard report will
be sent at all.

* Add tap_key() and tap_keys() to TestFixture.

This commit adds a `tap_key(key)` method to TestFixture that taps a
given KeymapKey, optionally with a specified delay between press and
release.

Similarly, the method `tap_keys(key_a, key_b, key_c)` taps a sequence of
KeymapKeys.

* Use EXPECT_REPORT, tap_keys, etc. in most tests.

This commit uses EXPECT_REPORT, EXPECT_UNICODE, EXPECT_EMPTY_REPORT,
EXPECT_NO_REPORT, tap_key() and tap_keys() test utilities from the
previous two commits in most tests. Particularly the EXPECT_REPORT
macro is frequently useful and makes a nice reduction in boilerplate
needed to express many tests.

Co-authored-by: David Kosorin <david@kosorin.net>
2022-06-05 09:14:02 +02:00
Nick Brassel 8545473307
Removes terminal from QMK. (#17258) 2022-05-30 22:38:08 -07:00
Pascal Getreuer b5608cbb6d
Continue Caps Word when AltGr (right Alt) is held. (#17156)
This is a minor bug fix for Caps Word. Currently, Caps Word turns off
whenever a non-shift mod becomes active. This is done to avoid
interfering with hotkeys.

This commit makes an exception to continue Caps Word when AltGr (right
Alt) is held. Outside the US, the AltGr key is used to type additional
symbols (https://en.wikipedia.org/wiki/AltGr_key). Depending on the
language, these may include symbols used within words like accented
letters where it would be desirable to continue Caps Word.
2022-05-20 01:39:00 +01:00
Drashna Jaelre db887e63d7
Enhancement and fixes of "Secure" feature (#16958) 2022-05-14 23:07:08 +01:00
Pascal Getreuer 68b16bba68
[Core] Add Caps Word feature to core (#16588)
Co-authored-by: precondition <57645186+precondition@users.noreply.github.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2022-05-14 16:00:32 +10:00
Jouke Witteveen 8f585153c4
Add GET_TAPPING_TERM macro to reduce duplicate code (#16681)
* Add GET_TAPPING_TERM macro to reduce duplicate code

The macro gives the right tapping term depending on whether per-key
tapping terms and/or dynamic tapping terms are enabled. Unnecessary
function calls and variable resolution are avoided.

Fixes #16472.

* Use GET_TAPPING_TERM for Cirque trackpads

Co-authored-by: Stefan Kerkmann <karlk90@pm.me>
2022-04-16 11:24:09 -07:00
Joel Challis 92a61aa0cd
Implement XAP 'secure' core requirements (#16843)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Stefan Kerkmann <karlk90@pm.me>
2022-04-16 11:13:05 -07:00
Nick Brassel 1f2b1dedcc
Quantum Painter (#10174)
* Install dependencies before executing unit tests.

* Split out UTF-8 decoder.

* Fixup python formatting rules.

* Add documentation for QGF/QFF and the RLE format used.

* Add CLI commands for converting images and fonts.

* Add stub rules.mk for QP.

* Add stream type.

* Add base driver and comms interfaces.

* Add support for SPI, SPI+D/C comms drivers.

* Include <qp.h> when enabled.

* Add base support for SPI+D/C+RST panels, as well as concrete implementation of ST7789.

* Add support for GC9A01.

* Add support for ILI9341.

* Add support for ILI9163.

* Add support for SSD1351.

* Implement qp_setpixel, including pixdata buffer management.

* Implement qp_line.

* Implement qp_rect.

* Implement qp_circle.

* Implement qp_ellipse.

* Implement palette interpolation.

* Allow for streams to work with either flash or RAM.

* Image loading.

* Font loading.

* QGF palette loading.

* Progressive decoder of pixel data supporting Raw+RLE, 1-,2-,4-,8-bpp monochrome and palette-based images.

* Image drawing.

* Animations.

* Font rendering.

* Check against 256 colours, dump out the loaded palette if debugging enabled.

* Fix build.

* AVR is not the intended audience.

* `qmk format-c`

* Generation fix.

* First batch of docs.

* More docs and examples.

* Review comments.

* Public API documentation.
2022-04-13 18:00:18 +10:00
Ryan c05e8afe45
Joystick feature updates (#16732)
* Joystick feature updates

* Move new functions to joystick.h

* Docs
2022-03-26 18:38:09 +00:00
Nick Brassel 8d5eacb7dd
Add support for encoder mapping. (#13286) 2022-03-09 19:29:00 +11:00
Ryan f634fddd34
Remove `send_unicode_hex_string()` (#16518) 2022-03-04 11:04:45 +00:00
QMK Bot 63646e8906
Format code according to conventions (#16322) 2022-02-12 18:29:31 +00:00
precondition 7148a69d5e
Pass in the keyrecord_t of the dual-role/tapping key when calling per-key tap hold functions (#15938)
* Replace keyp by &tapping_key in the record arg of per-key tap hold funcs

* Replace NULL by &(keyrecord_t){} in 2nd arg of get_tapping_term
2022-02-11 19:53:26 +00:00
Desprez Jean-Marc 5a0e129f11
[Bug] Fix layer_state restoration at end of dynamic macro feature (#16230) 2022-02-06 08:55:16 -08:00
Pete Sevander d700447dda
Combo `TAP_CODE_DELAY` and `clear_weak_mods` (#15866) 2022-01-28 23:19:36 -08:00
QMK Bot efbfd30318 Merge remote-tracking branch 'origin/master' into develop 2022-01-25 13:41:28 +00:00
Ryan 3e0ee6fb74
Fix joystick button off-by-one error (#16037) 2022-01-25 13:40:55 +00:00
Ryan 1d11ae3087
Rip out old macro and action_function system (#16025)
* Rip out old macro and action_function system

* Update quantum/action_util.c

Co-authored-by: Joel Challis <git@zvecr.com>
2022-01-24 21:22:20 +00:00
Ryan b45a037c7e
Rename some Quantum keycodes (#15968)
* Rename some Quantum keycodes

* Tweak EEPROM clear and debug keycode short aliases
2022-01-22 03:34:15 +00:00
Pete Sevander 21958a9343
New combo configuration options (#15083)
Co-authored-by: precondition <57645186+precondition@users.noreply.github.com>
2022-01-09 12:02:25 -08:00
Joel Challis 8dbc8a802c
Unify the key up/down behaviour of RGB keycodes (#15730) 2022-01-06 18:52:32 +11:00
Ryan c12268807d
Migrate serial_uart usages to UART driver (#15479)
* Migrate Thermal Printer feature to UART driver

* Migrate 40percentclub UT47 to UART driver

* Migrate Centromere to UART driver

* Migrate Chimera Ergo to UART driver

* Migrate Chimera Let's Split to UART driver

* Migrate Chimera Ortho to UART driver

* Migrate Chimera Ortho Plus to UART driver

* Migrate Comet46 to UART driver

* Migrate Palm USB converter to UART driver

* Migrate Sun USB converter to UART driver

* Migrate Dichotomy to UART driver

* Migrate Honeycomb to UART driver

* Migrate Mitosis to UART driver

* Migrate Redox W to UART driver

* Migrate Uni660 to UART driver

* Migrate Telophase to UART driver
2021-12-15 11:00:39 +00:00
Dipl.-Ing. Raoul Rubien, BSc 415faebd65
added missing audio_off_user() callback (#15457)
Co-authored-by: Raoul Rubien <raoul.rubienr@gmail.com>
2021-12-11 16:58:25 -08:00
Joel Challis 2726856cde
Implement MAGIC_TOGGLE_CONTROL_CAPSLOCK (#15368) 2021-11-30 17:34:08 -08:00
wheredoesyourmindgo 7f67504993
Added cancel_key_lock function (#15321) 2021-11-29 00:17:07 -08:00