diff options
| author | tmk <nobody@nowhere> | 2013-02-20 15:52:32 +0900 |
|---|---|---|
| committer | tmk <nobody@nowhere> | 2013-02-20 15:52:32 +0900 |
| commit | c3d57b69e02fce40455c96f4a9ac6b68b89ce027 (patch) | |
| tree | cafa784fcc2c8ba91827d2417d57c740570b8ac4 | |
| parent | e0f960a576e090808e5cc25c5368441c11f36ea6 (diff) | |
| download | qmk_firmware-c3d57b69e02fce40455c96f4a9ac6b68b89ce027.tar.gz qmk_firmware-c3d57b69e02fce40455c96f4a9ac6b68b89ce027.zip | |
Add keymap clear/reset action
| -rw-r--r-- | common/action.c | 34 | ||||
| -rw-r--r-- | common/action.h | 23 | ||||
| -rw-r--r-- | common/keymap.c | 4 |
3 files changed, 44 insertions, 17 deletions
diff --git a/common/action.c b/common/action.c index 3703b4e8c..844a35b3e 100644 --- a/common/action.c +++ b/common/action.c | |||
| @@ -355,26 +355,50 @@ static void process_action(keyrecord_t *record) | |||
| 355 | 355 | ||
| 356 | case ACT_KEYMAP: | 356 | case ACT_KEYMAP: |
| 357 | switch (action.layer.code) { | 357 | switch (action.layer.code) { |
| 358 | /* Keymap Reset */ | 358 | /* Keymap clear */ |
| 359 | case OP_RESET: | 359 | case OP_RESET: |
| 360 | default_layer_set(action.layer.val); | 360 | switch (action.layer.val & 0x03) { |
| 361 | case 0: | ||
| 362 | overlay_clear(); | ||
| 363 | keymap_clear(); | ||
| 364 | break; | ||
| 365 | case ON_PRESS: | ||
| 366 | if (event.pressed) { | ||
| 367 | overlay_clear(); | ||
| 368 | keymap_clear(); | ||
| 369 | } | ||
| 370 | break; | ||
| 371 | case ON_RELEASE: | ||
| 372 | if (!event.pressed) { | ||
| 373 | overlay_clear(); | ||
| 374 | keymap_clear(); | ||
| 375 | } | ||
| 376 | break; | ||
| 377 | case ON_BOTH: | ||
| 378 | overlay_clear(); | ||
| 379 | keymap_clear(); | ||
| 380 | break; | ||
| 381 | } | ||
| 361 | break; | 382 | break; |
| 362 | /* Keymap Reset default layer */ | 383 | /* Keymap Reset default layer */ |
| 363 | case (OP_RESET | ON_PRESS): | 384 | case (OP_RESET | ON_PRESS): |
| 364 | if (event.pressed) { | 385 | if (event.pressed) { |
| 365 | default_layer_set(action.layer.val); | ||
| 366 | overlay_clear(); | 386 | overlay_clear(); |
| 387 | keymap_clear(); | ||
| 388 | default_layer_set(action.layer.val); | ||
| 367 | } | 389 | } |
| 368 | break; | 390 | break; |
| 369 | case (OP_RESET | ON_RELEASE): | 391 | case (OP_RESET | ON_RELEASE): |
| 370 | if (!event.pressed) { | 392 | if (!event.pressed) { |
| 371 | default_layer_set(action.layer.val); | ||
| 372 | overlay_clear(); | 393 | overlay_clear(); |
| 394 | keymap_clear(); | ||
| 395 | default_layer_set(action.layer.val); | ||
| 373 | } | 396 | } |
| 374 | break; | 397 | break; |
| 375 | case (OP_RESET | ON_BOTH): | 398 | case (OP_RESET | ON_BOTH): |
| 376 | default_layer_set(action.layer.val); | ||
| 377 | overlay_clear(); | 399 | overlay_clear(); |
| 400 | keymap_clear(); | ||
| 401 | default_layer_set(action.layer.val); | ||
| 378 | break; | 402 | break; |
| 379 | 403 | ||
| 380 | /* Keymap Bit invert */ | 404 | /* Keymap Bit invert */ |
diff --git a/common/action.h b/common/action.h index c02a2e71f..611490ebf 100644 --- a/common/action.h +++ b/common/action.h | |||
| @@ -157,8 +157,8 @@ bool waiting_buffer_has_anykey_pressed(void); | |||
| 157 | * Layer Actions | 157 | * Layer Actions |
| 158 | * ------------- | 158 | * ------------- |
| 159 | * ACT_KEYMAP: | 159 | * ACT_KEYMAP: |
| 160 | * 1000|LLLL|0000 0000 Reset default layer | 160 | * 1000|--xx|0000 0000 Clear keyamp and overlay |
| 161 | * 1000|LLLL|0000 00xx Reset default layer and clear overlay | 161 | * 1000|LLLL|0000 00xx Reset default layer and clear keymap and overlay |
| 162 | * 1000|LLLL| keycode Invert with tap key | 162 | * 1000|LLLL| keycode Invert with tap key |
| 163 | * 1000|LLLL|1111 0000 Invert with tap toggle | 163 | * 1000|LLLL|1111 0000 Invert with tap toggle |
| 164 | * 1000|LLLL|1111 00xx Invert[^= L] | 164 | * 1000|LLLL|1111 00xx Invert[^= L] |
| @@ -274,22 +274,25 @@ enum layer_params { | |||
| 274 | OP_SET = 0xFC, | 274 | OP_SET = 0xFC, |
| 275 | }; | 275 | }; |
| 276 | 276 | ||
| 277 | /* | 277 | /* |
| 278 | * Default Layer | 278 | * Default Layer |
| 279 | */ | 279 | */ |
| 280 | #define ACTION_KEYMAP(layer) ACTION_KEYMAP_MOMENTARY(layer) | 280 | #define ACTION_DEFAULT_LAYER ACTION(ACT_KEYMAP, 0<<8 | OP_RESET | 0) |
| 281 | #define ACTION_KEYMAP_MOMENTARY(layer) ACTION_KEYMAP_INV_B(layer) | ||
| 282 | #define ACTION_KEYMAP_TOGGLE(layer) ACTION_KEYMAP_INV_R(layer) | ||
| 283 | /* Set default layer */ | ||
| 284 | #define ACTION_SET_DEFAULT_LAYER(layer) ACTION_KEYMAP_RESET(layer) | 281 | #define ACTION_SET_DEFAULT_LAYER(layer) ACTION_KEYMAP_RESET(layer) |
| 285 | #define ACTION_SET_DEFAULT_LAYER_P(layer) ACTION_KEYMAP_RESET_P(layer) | 282 | #define ACTION_SET_DEFAULT_LAYER_P(layer) ACTION_KEYMAP_RESET_P(layer) |
| 286 | #define ACTION_SET_DEFAULT_LAYER_R(layer) ACTION_KEYMAP_RESET_R(layer) | 283 | #define ACTION_SET_DEFAULT_LAYER_R(layer) ACTION_KEYMAP_RESET_R(layer) |
| 287 | #define ACTION_SET_DEFAULT_LAYER_B(layer) ACTION_KEYMAP_RESET_B(layer) | 284 | #define ACTION_SET_DEFAULT_LAYER_B(layer) ACTION_KEYMAP_RESET_B(layer) |
| 285 | /* | ||
| 286 | * Keymap Layer | ||
| 287 | */ | ||
| 288 | #define ACTION_KEYMAP(layer) ACTION_KEYMAP_MOMENTARY(layer) | ||
| 289 | #define ACTION_KEYMAP_MOMENTARY(layer) ACTION_KEYMAP_ON_OFF(layer) | ||
| 290 | #define ACTION_KEYMAP_TOGGLE(layer) ACTION_KEYMAP_INV_R(layer) | ||
| 288 | /* Keymap Set and clear overaly */ | 291 | /* Keymap Set and clear overaly */ |
| 289 | #define ACTION_KEYMAP_RESET(layer) ACTION(ACT_KEYMAP, (layer)<<8 | OP_RESET | 0) | 292 | #define ACTION_KEYMAP_RESET(layer) ACTION_KEYMAP_RESET_R(layer) |
| 290 | #define ACTION_KEYMAP_RESET_P(layer) ACTION(ACT_KEYMAP, (layer)<<8 | OP_RESET | ON_PRESS) | 293 | #define ACTION_KEYMAP_RESET_P(layer) ACTION(ACT_KEYMAP, (layer)<<8 | OP_RESET | ON_PRESS) |
| 291 | #define ACTION_KEYMAP_RESET_R(layer) ACTION(ACT_KEYMAP, (layer)<<8 | OP_RESET | ON_PRESS) | 294 | #define ACTION_KEYMAP_RESET_R(layer) ACTION(ACT_KEYMAP, (layer)<<8 | OP_RESET | ON_RELEASE) |
| 292 | #define ACTION_KEYMAP_RESET_B(layer) ACTION(ACT_KEYMAP, (layer)<<8 | OP_RESET | ON_PRESS) | 295 | #define ACTION_KEYMAP_RESET_B(layer) ACTION(ACT_KEYMAP, (layer)<<8 | OP_RESET | ON_BOTH) |
| 293 | /* Keymap Invert */ | 296 | /* Keymap Invert */ |
| 294 | #define ACTION_KEYMAP_INV(layer) ACTION_KEYMAP_INV_B(layer) | 297 | #define ACTION_KEYMAP_INV(layer) ACTION_KEYMAP_INV_B(layer) |
| 295 | #define ACTION_KEYMAP_TAP_TOGGLE(layer) ACTION(ACT_KEYMAP, (layer)<<8 | OP_INV | 0) | 298 | #define ACTION_KEYMAP_TAP_TOGGLE(layer) ACTION(ACT_KEYMAP, (layer)<<8 | OP_INV | 0) |
diff --git a/common/keymap.c b/common/keymap.c index 3f13d4497..ddc321052 100644 --- a/common/keymap.c +++ b/common/keymap.c | |||
| @@ -39,7 +39,7 @@ action_t action_for_key(uint8_t layer, key_t key) | |||
| 39 | } | 39 | } |
| 40 | 40 | ||
| 41 | __attribute__ ((weak)) | 41 | __attribute__ ((weak)) |
| 42 | void action_function(keyrecord_t *event, uint8_t id, uint8_t opt) | 42 | void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) |
| 43 | { | 43 | { |
| 44 | } | 44 | } |
| 45 | #else | 45 | #else |
| @@ -70,7 +70,7 @@ action_t action_for_key(uint8_t layer, key_t key) | |||
| 70 | } | 70 | } |
| 71 | } | 71 | } |
| 72 | /* not used for legacy keymap */ | 72 | /* not used for legacy keymap */ |
| 73 | void action_function(keyrecord_t *event, uint8_t id, uint8_t opt) | 73 | void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) |
| 74 | { | 74 | { |
| 75 | } | 75 | } |
| 76 | #endif | 76 | #endif |
