자유게시판
안녕하세요.
한때 만화가를 지망 하기도 했었던.. 개발자입니다.
만화창작전공해놓고 코딩 하고 있어요. 어째서 일까요.
연휴에 회사에서 사용하던 PLANCK키보드를 집에 가져와서 또 키보드의 매핑 을 이리저리 바꿔보고 있는데...
(코딩으로 밥벌어먹고 있는데. 취미도 코딩...)
찬찬히 살펴보니 역시 여러가지가 가능 하더군요. 이야. 이거 재미있습니다. 시간가는줄 모르겠어요.
종전의 왼쪽 펀션과 오른쪽 펀션을 사용해서
왼쪽 펀션 누르고 있을때 0번레이어 -> 1번 레이어
오른쪽 펀션 누르고 있을때 0번레이어 -> 2번레이어
이렇게 사용하고 있었는데..
거기에
왼쪽 펀션 누른다음 오른쪽 펀션 누르고 있을때 -> 3번레이어
오른쪽 펀션 누른다음 왼쪽 펀션 누르고 있을때 -> 4번레이어
이렇게 전환이 가능하게 하고 레이어 2개를 추가.
무려 5개의 레이어를 전환하면서 사용하는 키보드를 만들었습니다.
레이어가 충분히 많아지니까... 한정된 키보드 공간에 어떻게든 쑤셔넣다보니... 어떻게 해야하나 고민하고 고민하면서 여러모로 현실과 타협 했던 이전 배열의 여러가지 문제점이 해결 될수 있겠다 싶은... 그런 기분이 듭니다.
일단 4번레이어에 탠키도 만들어보고. (직업 특성상 잘 쓸것 같지는 않습니다만...)
메크로 도 10가지정도 정의해보고.
뭐 그러고 있네요.
혹시 AVR프로세서 사용하는 커스텀 키보드의 리매핑에 관심 있으신 분이 참고가 될까 싶어서...
제가 꾸며본 키맵의 소스코드 올려봅니다.
#include "extended_keymap_common.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = {
{KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
{KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_LSFT},
{FUNC(3), KC_LCTL,KC_LALT,KC_LGUI,FUNC(2),KC_SPC, KC_SPC, FUNC(1),KC_LEFT,KC_DOWN,KC_UP, KC_RGHT}
},//통상 모드
[1] = {
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, S(KC_BSLS)},
{KC_TAB, KC_4, KC_5, KC_6, KC_TRNS,KC_TRNS,KC_BSPC,KC_TRNS,KC_MINS,KC_EQL, KC_LBRC, KC_RBRC},
{KC_LSFT, KC_7, KC_8, KC_9, KC_TRNS,KC_TRNS,KC_ENT, KC_TRNS,KC_COMM,KC_DOT, KC_SLSH, KC_LSFT},
{BL_TOGG, KC_0, M(20), KC_TRNS,FUNC(3),KC_ENT, KC_ENT, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS}
},//숫자키 입력
[2] = {
{S(KC_GRV), S(KC_1),S(KC_2),S(KC_3),S(KC_4),S(KC_5),S(KC_6),S(KC_7),S(KC_8), S(KC_9), S(KC_0), KC_BSLS},
{KC_TAB, S(KC_4),S(KC_5),S(KC_6),KC_TRNS,KC_TRNS,KC_BSPC,KC_TRNS,S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC)},
{KC_LSFT, S(KC_7),S(KC_8),S(KC_9),KC_TRNS,KC_TRNS,KC_ENT, KC_TRNS,S(KC_COMM), S(KC_DOT), S(KC_SLSH), KC_ENT},
{BL_DEC, BL_INC, KC_TRNS,KC_TRNS,KC_TRNS,KC_BSPC,KC_BSPC,FUNC(4), KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU}
},//특수문자 입력
[3] = {
{KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS},
{KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRNS},
{KC_TRNS, M(0), M(1), M(2), M(3), M(4), M(5), M(6), M(7), M(8), M(9), KC_TRNS},
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
},//F키입력 메크로 입력
[4] = {
{KC_PWR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_7, KC_8, KC_9},
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_4, KC_5, KC_6},
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_1, KC_2, KC_3},
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, M(20),KC_DOT}
}//만들어보긴 했는데 딱히 쓸대가 생각안나서 텐키 추가해봄.
};
//ACTION_LAYER_MOMENTARY 누르고 있는동안 레이어 변경. 때면 돌아옴.
//ACTION_DEFAULT_LAYER_SET 기본 레이어 변경. 토글방식.
const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_MOMENTARY(1),
[2] = ACTION_LAYER_MOMENTARY(2),
[3] = ACTION_LAYER_MOMENTARY(3),
[4] = ACTION_LAYER_MOMENTARY(4)
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
return MACRODOWN(TYPE(KC_C),TYPE(KC_L),TYPE(KC_A),TYPE(KC_S),TYPE(KC_S),TYPE(KC_SPC), END); // class
case 1:
return MACRODOWN(TYPE(KC_S),TYPE(KC_T),TYPE(KC_R),TYPE(KC_U),TYPE(KC_C),TYPE(KC_T), TYPE(KC_SPC), END); //struct
case 2:
return MACRODOWN(TYPE(KC_S),TYPE(KC_W),TYPE(KC_I),TYPE(KC_T),TYPE(KC_C),TYPE(KC_H), TYPE(KC_SPC), END); //switch
case 3:
return MACRODOWN(TYPE(KC_C),TYPE(KC_A),TYPE(KC_S),TYPE(KC_E),TYPE(KC_SPC),END); //case
case 4:
return MACRODOWN(TYPE(KC_D),TYPE(KC_E),TYPE(KC_F),TYPE(KC_A),TYPE(KC_U),TYPE(KC_L),TYPE(KC_T),END);//default
case 5:
return MACRODOWN(TYPE(KC_R),TYPE(KC_E),TYPE(KC_T),TYPE(KC_U),TYPE(KC_R),TYPE(KC_N),END); //return
case 6:
return MACRODOWN(TYPE(KC_B),TYPE(KC_R),TYPE(KC_E),TYPE(KC_A),TYPE(KC_K),END); //break
case 7:
return MACRODOWN(TYPE(KC_P),TYPE(KC_R),TYPE(KC_I),TYPE(KC_V),TYPE(KC_A),TYPE(KC_T),TYPE(KC_E),END); //private
case 8:
return MACRODOWN(TYPE(KC_L),TYPE(KC_E),TYPE(KC_T),TYPE(KC_SPC),END); //let
case 9:
return MACRODOWN(TYPE(KC_V),TYPE(KC_A),TYPE(KC_R),TYPE(KC_SPC),END); //var
case 20:
return MACRODOWN(TYPE(KC_0),TYPE(KC_0),END);
}
return MACRO_NONE;
};
작성된지 6개월이 지난 글에는 새 코멘트를 달 수 없습니다.
레이어는 커스텀의 강력한 기능중 하나지요
오른손이 화살표키까지 가는게 귀찮아서 그냥 펑션으로 제자리에서 모두 처리하게 만드는