MacOS와 Windows에서 친밀하게 지내기 위해 설정된 도면층

13871 단어 ergodox
이 투고는 ErgoDox Advent Calendar 2016의 12일째 글이다.
과제.
  • 맥OSCmdキー윈도라면Winキー
  • 같은 느낌Cmd을 쓰기 위해 WindowsCtrl를 사용하고 싶습니다.
  • 그럼 OS별 레이어를 만들어서 설정해 주세요
  • Linux 가 사용되지 않아 유감스럽지만...
  • 단순한 도면층 설정일 경우DFTO면 된다. 이번에는 스피커 코드를 사용하는 방법
  • 을 적어보자.
    방법
    1. OS당 차등 레이어 만들기
    MacOS용
           ,-------------.       ,---------------.
           |ctl F2|      |       |ctl sp| ctl F3 |
    ,------|------|------|       |------+--------+------.
    |      |      |      |       |      |        |      |
    | Space| LAlt |------|       |------|        |      |
    |  Cmd |      | LCtrl|       |      |        |      |
    `--------------------'       `----------------------'
    
    Windows
           ,-------------.       ,-------------.
           |Alt F4|      |       |      |      |
    ,------|------|------|       |------+------+------.
    |      |      |      |       |      |      |      |
    | Space| LAlt |------|       |------|      |      |
    | LCtrl|      | Win  |       |      |      |      |
    `--------------------'       `--------------------'
    
    예를 들어 이번 운영체제를 통해 변경하고 싶은 부분의 도면층만 준비해 맥에 있을 때Cmd, 윈도에 있을 때Ctrl 설정을 바꾸자는 취지다.
    2. 케이크 코드 만들기
    레이어 전환 키를 설정합니다.
    keymap.c
    enum custom_keycodes {
      //--layers--
      // layouts
      QWERTY = SAFE_RANGE,
      QWDR,
      GAME,
    
      // momentary layer
      NAV,
      CONF,
      GAME2,
    
      // os
      MAC,
      WIN,
    };
    
    최근ErgoDox의 기본 버튼 차트에도 추가됐지만, 스피커 키 코드를 설정해 사용했다.enum의 시작 줄에 지정된 SAFE_RANGE키 코드 정의 이기 때문에 사용 후의 키 코드는 사용자 정의 전용 입력을 할 수 있습니다.
    ※ 단, 이 키 코드의 주의점은 일반 키0x0000-0x00FF의 범위에 있지 않으므로CTL_T(keycode) 등의 동작 설정은 직접 사용할 수 없습니다.
    3. 레이어에 캐스터보드 키 코드 지정
    keymap.c
      RESET,      MAC,        WIN,        _______,    _______,    _______,    _______,
      _______,    _______,    _______,    _______,    _______,    QWERTY,     _______,
      _______,    _______,    _______,    _______,    _______,    QWDR,       _______,
                  _______,    _______,    _______,    _______,    GAME,       _______,
    
    마음에 드는 곳에 두세요.
    자신의 상황에서 시스템의 입력을 설정하는 것은 2층 구조로 층으로 이동한 후의 구조용 층에 분배된다.
    4. 사용자 정의 키 입력 프로세서
    스피커 키 코드의 입력을 어디서 처리하는지 말하면process_record_user.
    keymap.c
    bool process_record_user(uint16_t keycode, keyrecord_t *record) {
      switch (keycode) {
        //--layers--
    
        //os
        case MAC:
          if (record->event.pressed) {
            persistant_default_layer_set(1UL<<L_MAC);
          }
          return false;
          break;
        case WIN:
          if (record->event.pressed) {
            persistant_default_layer_set(1UL<<L_WIN);
          }
          return false;
          break
    
        //layout
        case QWERTY:
          if (record->event.pressed) {
            layer_move(L_QWERTY);
          }
          return false;
          break;
        case QWDR:
          if (record->event.pressed) {
            layer_move(L_QWDR);
          }
          return false;
          break;
        case GAME:
          if (record->event.pressed) {
            layer_move(L_GAME);
          }
          return false;
          break;
    
        //momentary layer
        case GAME2:
          switch_layer(L_GAME2, record->event.pressed);
          return false;
          break;
        case NAV:
          switch_layer(L_NAV, record->event.pressed);
          return false;
          break;
        case CONF:
          switch_layer(L_CONF, record->event.pressed);
          return false;
          break;
      }
      return true;
    }
    
    소스 전체 텍스트
    이곳에서 하는 것은 주로 세 가지가 있다.
  • OS용 도면층은default로 설정layer로 지정
  • layer 문자 정렬move를 통해 지정
  • layer를 켜거나 끄면 유지되는 임시 도면층을 설정합니다
  • 5. 도면층 정보
    도면층공식 문서에 대해 설명했습니다.
    keymap.md
        Overlay feature layer
        ---------------------      bit|status
               ____________        ---+------
          31  /           /        31 |   0
          30 /___________// -----> 30 |   1
          29 /___________/  -----> 29 |   1
           :                        : |   :
           :   ____________         : |   :
           2  /           /         2 |   0
        ,->1 /___________/  ----->  1 |   1
        |  0                        0 |   0
        |                                 +
        `--- default_layer = 1            |
             layer_state   = 0x60000002 <-'
    
    도면층 설정은 32비트의 정보로 관리되며 각 층은 켜지고 닫힌 상태이며 좋아하는 도면층을 유효하게 설정하여 위층부터 중첩할 수 있다.
  • default_layer_state
  • layer_state
  • 도면층 설정은 상기 두 가지 상태,defaultlayer에서 지정한 도면층을 항상 엽니다.
    이번에는 default OS용 레이어입니다.layer로 지정하고 텍스트 배열의 레이어를 layer로 설정합니다move에서 배타적으로 선택하여 각각 OS와 텍스트 배열층을 선택하여 곱한다.
    도면층 설정을 변경하는 동작은 이 일대에 정의되어 있습니다.
    6. 초기 도면층 설정
    keymap.c
    void matrix_init_user(void) {
      persistant_default_layer_set(1UL<<L_MAC);
      layer_move(L_QWDR);
    };
    
    키보드 연결 시 호출 matrix_init_user 되며, 여기에서 임의의 초기 도층을 설정할 수 있습니다.
    7. 요약
    처음에도 썼는데 층만 바꾸면DF 또는TO이면 돼요.다만, 캐스터네츠 키코드를 사용했다면 다른 처리도 다양하게 할 수 있어 총결산했다.
    기타: 레이어 변경 방지 수정자 키 스태킹
    도면층 설정과 다르니 겸사겸사 쓰세요.
    레이어 전환 및 코스메틱 키를 사용하면 유지를 복원할 수 없는 경우가 있으며 코스메틱 키 입력이 스택됩니다.
    스택 예
  • Shift
  • 를 도면층 0에 할당
  • 레이어 1에 동일한 키 A 할당
  • Shift
  • 유지
  • 레이어 1
  • 로 직접 이동
  • Shift 키 놓기
  • 도면층 0
  • 으로 반환
    이렇게 되면 Shift 키가 해제되지 않고 계속 누르는 상태가 됩니다.왜 그렇게 말했을까, 층 1에서 헤어질 때 시프트가 아닌 A버튼이 풀리기 때문에 해제되지 않는다.
    해결책
    이거 config.h에 있어요.
    #define PREVENT_STUCK_MODIFIERS
    
    이런 옵션은 방지할 수 있다.
    이 방면아까 readme.에는 쓰여 있지만 최근 비대해졌다docWiki가 재정리된 것 같다여기.에 이동이 기록되어 있다.

    좋은 웹페이지 즐겨찾기