mirror of
				https://github.com/qmk/qmk_userspace.git
				synced 2025-11-04 02:40:06 -05:00 
			
		
		
		
	OS4A refactor
This commit is contained in:
		
					parent
					
						
							
								0568104b4b
							
						
					
				
			
			
				commit
				
					
						ba9cec3eb6
					
				
			
		
					 7 changed files with 25 additions and 22 deletions
				
			
		| 
						 | 
					@ -160,8 +160,8 @@ void replace_ongoing_key(uint16_t clever_keycode, uint16_t* ongoing_keycode, key
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void process_word(uint16_t keycodes[], uint8_t num_keycodes, keyrecord_t* record) {
 | 
					void process_word(uint16_t keycodes[], uint8_t num_keycodes, keyrecord_t* record) {
 | 
				
			||||||
  for (int i = 0; i < num_keycodes; ++i) {
 | 
					  for (int i = 0; i < num_keycodes; ++i) {
 | 
				
			||||||
    process_key(keycodes[i], record);   // Better solution, if there is enought space in the chip.
 | 
					    //process_key(keycodes[i], record);   // Better solution, if there is enought space in the chip.
 | 
				
			||||||
    //tap_code(keycodes[i]);
 | 
					    tap_code(keycodes[i]);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  bkspc_countdown = num_keycodes;
 | 
					  bkspc_countdown = num_keycodes;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -113,10 +113,10 @@ bool process_numword(uint16_t keycode, const keyrecord_t *record) {
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                break; */
 | 
					                break; */
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					 | 
				
			||||||
        exit_num_word = should_exit_num_word(keycode, record);
 | 
					        exit_num_word = should_exit_num_word(keycode, record);
 | 
				
			||||||
    } else {
 | 
					
 | 
				
			||||||
        if (exit_num_word) { disable_num_word(); }
 | 
					    } else if (exit_num_word) {
 | 
				
			||||||
 | 
					        disable_num_word();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,6 @@ oneshot_state os_win_state = os_up_unqueued;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint8_t os4a_layer = 0;
 | 
					uint8_t os4a_layer = 0;
 | 
				
			||||||
static bool exit_os4a_layer = false;
 | 
					static bool exit_os4a_layer = false;
 | 
				
			||||||
static bool pending_OSL = false;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
void os4a_layer_on(uint8_t layer) {
 | 
					void os4a_layer_on(uint8_t layer) {
 | 
				
			||||||
  layer_on(layer);
 | 
					  layer_on(layer);
 | 
				
			||||||
| 
						 | 
					@ -61,13 +60,14 @@ bool process_os4a_keys(uint16_t keycode, keyrecord_t *record) {
 | 
				
			||||||
bool process_os4a_layers(uint16_t keycode, keyrecord_t *record) {
 | 
					bool process_os4a_layers(uint16_t keycode, keyrecord_t *record) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Should keycode exit the OS4A layer ?
 | 
					    // Should keycode exit the OS4A layer ?
 | 
				
			||||||
 | 
					    if (os4a_layer_changer(keycode)) { return true; }
 | 
				
			||||||
    if (is_oneshot_ignored_key(keycode)) { return false; }
 | 
					    if (is_oneshot_ignored_key(keycode)) { return false; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Add OS Shift when no other mods are active.
 | 
					    // Add OS Shift when no other mods are active.
 | 
				
			||||||
    // Testing exit_os4a_layer is necessary to prevent OS shift to be added when other features create keyrecords
 | 
					    // Testing exit_os4a_layer is necessary to prevent OS shift to be added when other features create keyrecords
 | 
				
			||||||
    // to be processed (ex: custom altgr, clever keys).
 | 
					    // to be processed (ex: custom altgr, clever keys).
 | 
				
			||||||
    uint8_t mods = get_mods() | get_oneshot_mods();
 | 
					    uint8_t mods = get_mods() | get_oneshot_mods();
 | 
				
			||||||
    if (!exit_os4a_layer && !pending_OSL && to_be_shifted(keycode, record) && mods == 0) {
 | 
					    if (!exit_os4a_layer && to_be_shifted(keycode, record) && mods == 0) {
 | 
				
			||||||
      // Don't use weak mods, it interferes with Capsword.
 | 
					      // Don't use weak mods, it interferes with Capsword.
 | 
				
			||||||
      set_oneshot_mods(MOD_BIT(KC_LSFT));
 | 
					      set_oneshot_mods(MOD_BIT(KC_LSFT));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -101,12 +101,12 @@ bool process_mods(uint16_t keycode, keyrecord_t *record) {
 | 
				
			||||||
  // Behaviour of the OS4A layers
 | 
					  // Behaviour of the OS4A layers
 | 
				
			||||||
  if (os4a_layer != 0) { exit_os4a_layer = process_os4a_layers(keycode, record); }
 | 
					  if (os4a_layer != 0) { exit_os4a_layer = process_os4a_layers(keycode, record); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Updating OSL status on OS4A layers
 | 
					 | 
				
			||||||
  pending_OSL = os4a_layer_changer(keycode);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // When Ctrl or Shift are released, for mouse use.
 | 
					  // When Ctrl or Shift are released, for mouse use.
 | 
				
			||||||
  //if (mods_for_mouse(keycode)) { mouse_mods_key_up(keycode, record); }
 | 
					  //if (mods_for_mouse(keycode)) { mouse_mods_key_up(keycode, record); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (!record->event.pressed) {
 | 
				
			||||||
 | 
					    if (os4a_layer != 0 && exit_os4a_layer) { os4a_layer_off(os4a_layer); }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
  return true;
 | 
					  return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -262,8 +262,7 @@ bool is_oneshot_ignored_key(uint16_t keycode) {
 | 
				
			||||||
    case OS_FA:
 | 
					    case OS_FA:
 | 
				
			||||||
    case NUMWORD:
 | 
					    case NUMWORD:
 | 
				
			||||||
    case TT_FA:
 | 
					    case TT_FA:
 | 
				
			||||||
    //case NUM_ODK:
 | 
					    //case NUM_ODK:  // Ne sert à rien, car NUM_ODK est un vrai one-shot : les mods sont transmis même sans paramétrage.
 | 
				
			||||||
    //case PG_ODK:
 | 
					 | 
				
			||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -46,7 +46,10 @@ bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if (forbidden_chord(keycode, record, next_keycode, &next_record)) {
 | 
					      if (forbidden_chord(keycode, record, next_keycode, &next_record)) {
 | 
				
			||||||
          // When a layer-tap key overlaps with another key on the same hand, send its base keycode.
 | 
					          // When a layer-tap key overlaps with another key on the same hand, send its base keycode.
 | 
				
			||||||
          tap_converter(keycode, record);
 | 
					          //tap_converter(keycode, record);
 | 
				
			||||||
 | 
					          record->tap.interrupted = false;
 | 
				
			||||||
 | 
					          record->tap.count       = 1;
 | 
				
			||||||
 | 
					          return true;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return false;
 | 
					    return false;
 | 
				
			||||||
| 
						 | 
					@ -115,7 +118,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void post_process_record_user(uint16_t keycode, keyrecord_t* record) {
 | 
					void post_process_record_user(uint16_t keycode, keyrecord_t* record) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  os4a_layer_exit_check();
 | 
					  //os4a_layer_exit_check();
 | 
				
			||||||
  //numword_exit_check();
 | 
					  //numword_exit_check();
 | 
				
			||||||
  end_CK(record);
 | 
					  end_CK(record);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -141,8 +144,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
    [_BASE] = LAYOUT(
 | 
					    [_BASE] = LAYOUT(
 | 
				
			||||||
      KC_NO, PG_VIRG, PG_EACU, PG_U,  PG_P,   PG_TIRE,                                 PG_V,   PG_M,  PG_C, PG_J, PG_X,   KC_NO,
 | 
					      KC_NO, PG_VIRG, PG_EACU, PG_U,  PG_P,   PG_TIRE,                                 PG_V,   PG_M,  PG_C, PG_J, PG_X,   KC_NO,
 | 
				
			||||||
      KC_NO, PG_O,    PG_A,    PG_I,  PG_N,   PG_POIN,                                 PG_G,   PG_T,  PG_S, PG_R, PG_L,   KC_NO,
 | 
					      KC_NO, PG_O,    PG_A,    PG_I,  PG_N,   PG_POIN,                                 PG_G,   PG_T,  PG_S, PG_R, PG_L,   KC_NO,
 | 
				
			||||||
      KC_NO, PG_Q,    PG_Z,    PG_Y,  PG_H,   CAPSLIST,   KC_NO, KC_NO,  KC_NO,   KC_NO,  KC_NO,  PG_D,    PG_F, PG_W, OS_ODK, KC_NO,
 | 
					      KC_NO, PG_Q,    PG_Z,    PG_Y,  PG_H,   KC_NO,   KC_NO, KC_NO,  KC_NO,   KC_NO,  KC_NO,  PG_D,  PG_F, PG_W, OS_ODK, KC_NO,
 | 
				
			||||||
                               KC_NO, KC_SPC, L_OS4A,  LT_E,  LT_MGC, LT_REPT, LT_SPC, R_OS4A, KC_RGUI, KC_NO
 | 
					                               KC_NO, KC_SPC, L_OS4A,  LT_E,  LT_MGC, LT_REPT, LT_SPC, R_OS4A, KC_NO, KC_NO
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,7 @@ oneshot_state os_win_state = os_up_unqueued;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint8_t os4a_layer = 0;
 | 
					uint8_t os4a_layer = 0;
 | 
				
			||||||
static bool exit_os4a_layer = false;
 | 
					static bool exit_os4a_layer = false;
 | 
				
			||||||
static bool pending_OSL = false;
 | 
					//static bool pending_OSL = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void os4a_layer_on(uint8_t layer) {
 | 
					void os4a_layer_on(uint8_t layer) {
 | 
				
			||||||
  layer_on(layer);
 | 
					  layer_on(layer);
 | 
				
			||||||
| 
						 | 
					@ -61,13 +61,14 @@ bool process_os4a_keys(uint16_t keycode, keyrecord_t *record) {
 | 
				
			||||||
bool process_os4a_layers(uint16_t keycode, keyrecord_t *record) {
 | 
					bool process_os4a_layers(uint16_t keycode, keyrecord_t *record) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Should keycode exit the OS4A layer ?
 | 
					    // Should keycode exit the OS4A layer ?
 | 
				
			||||||
 | 
					    if (os4a_layer_changer(keycode)) { return true; }
 | 
				
			||||||
    if (is_oneshot_ignored_key(keycode)) { return false; }
 | 
					    if (is_oneshot_ignored_key(keycode)) { return false; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Add OS Shift when no other mods are active.
 | 
					    // Add OS Shift when no other mods are active.
 | 
				
			||||||
    // Testing exit_os4a_layer is necessary to prevent OS shift to be added when other features create keyrecords
 | 
					    // Testing exit_os4a_layer is necessary to prevent OS shift to be added when other features create keyrecords
 | 
				
			||||||
    // to be processed (ex: custom altgr, clever keys).
 | 
					    // to be processed (ex: custom altgr, clever keys).
 | 
				
			||||||
    uint8_t mods = get_mods() | get_oneshot_mods();
 | 
					    uint8_t mods = get_mods() | get_oneshot_mods();
 | 
				
			||||||
    if (!exit_os4a_layer && !pending_OSL && to_be_shifted(keycode, record) && mods == 0) {
 | 
					    if (!exit_os4a_layer && to_be_shifted(keycode, record) && mods == 0) {
 | 
				
			||||||
      set_oneshot_mods(MOD_BIT(KC_LSFT));
 | 
					      set_oneshot_mods(MOD_BIT(KC_LSFT));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
| 
						 | 
					@ -101,7 +102,7 @@ bool process_mods(uint16_t keycode, keyrecord_t *record) {
 | 
				
			||||||
  if (os4a_layer != 0) { exit_os4a_layer = process_os4a_layers(keycode, record); }
 | 
					  if (os4a_layer != 0) { exit_os4a_layer = process_os4a_layers(keycode, record); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Updating OSL status on OS4A layers
 | 
					  // Updating OSL status on OS4A layers
 | 
				
			||||||
  pending_OSL = os4a_layer_changer(keycode);
 | 
					  //pending_OSL = os4a_layer_changer(keycode);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // When Ctrl or Shift are released, for mouse use.
 | 
					  // When Ctrl or Shift are released, for mouse use.
 | 
				
			||||||
  //if (mods_for_mouse(keycode)) { mouse_mods_key_up(keycode, record); }
 | 
					  //if (mods_for_mouse(keycode)) { mouse_mods_key_up(keycode, record); }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -196,7 +196,7 @@ bool is_oneshot_ignored_key(uint16_t keycode) {
 | 
				
			||||||
    case OS_FA:
 | 
					    case OS_FA:
 | 
				
			||||||
    case NUMWORD:
 | 
					    case NUMWORD:
 | 
				
			||||||
    case TT_FA:
 | 
					    case TT_FA:
 | 
				
			||||||
    case PG_ODK:
 | 
					    //case PG_ODK:
 | 
				
			||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue