(tmk 이용) Shift 키를 누르지 않고 _, {, } 문자 입력하는 키보드 만들기

저는 애플 스탠다드 키보드(m0116) 사용자 입니다


키보드는 ADB 연결되기 때문에 컨버터가 필요 했으며 기계식흑설탕님의 (http://www.kbdmania.net/xe/8860021) 보고 


아두이노를 이용한 ADB-USB 컨버터를 제작하여 사용했었습니다.


제가 오랫동안 키보드를 두들겨 왔지만 -, =, [, ], _(underscore), +, {, } 문자들은 속타를 하는데 항상 방해를 해왔기 때문에


해결책으로 FN 키를 정해두고 q( * ), w( + ), e( - ), r( = ), s( [ ), f( ] ) 정의해서 사용 중 이었지만 


여전히 shift 키와 함께 눌러야 하는 _(underscore), {, } 문자들은 불편했습니다.


그래서 얼마전에 http://www.kbdmania.net/xe/11457355 질문 글을 올렸고 Ley 님의 도움으로 해결해서 방법을 공유하고자 합니다.


아래의 코드는 tmk_keyboard(https://github.com/tmk/tmk_keyboard) 오픈소스를 이용해서 적용하였습니다.


keymap_plain.c 파일(제가 애플 스탠다드 키보드에 적용해서 사용하는 코드입니다)


const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

    

    [0] = KEYMAP(

     GRV,    F1,    F2,    F3,    F4,    F5,    F6,    F7,    F8,    F9,   F10,   F11,   F12,             PSCR, SLCK, PAUS,    VOLD, VOLU, MUTE,  PWR,

     LGUI,    1,     2,     3,     4,     5,     6,     7,     8,     9,     0,  MINS,   EQL, BSPC,        INS, HOME, PGUP,    NLCK,  EQL, PSLS, PAST,

     TAB,     Q,     W,     E,     R,     T,     Y,     U,     I,     O,     P,  LBRC,  RBRC,  FN0,        DEL,  END, PGDN,    HOME,   UP, PGUP, PMNS,

     LCTL,    A,     S,     D,     F,     G,     H,     J,     K,     L,  SCLN,  QUOT,         ENT,                            LEFT, DOWN, RGHT, PPLS,

     LSFT, NUBS,     Z,     X,     C,     V,     B,     N,     M,  COMM,   DOT,  SLSH,        RSFT,              FN1,           END, DOWN, PGDN,

     LCAP, LALT,  LGUI,                              SPC,                           APP, RALT,RCTL,       RGUI, BSLS, RALT,    BSPC,       PDOT, PENT

     ),

    [1] = KEYMAP(

     ESC,    F1,    F2,    F3,    F4,    F5,    F6,    F7,    F8,    F9,   F10,   F11,   F12,             PSCR, SLCK, PAUS,    VOLD, VOLU, MUTE,  PWR,

     LGUI,   F1,    F2,    F3,    F4,    F5,    F6,    F7,    F8,    F9,   F10,   F11,   F12,  DEL,        INS, HOME, PGUP,    NLCK,  EQL, PSLS, PAST,

     TAB,  PAST,  PPLS,  MINS,   EQL,   FN2,    NO,  HOME,    UP,  PGUP,  PSCR,  SLCK,  PAUS,  FN0,        DEL,  END, PGDN,      P7,   P8,   P9, PMNS,

     LCTL,  FN3,  LBRC,    P0,  RBRC,   FN4,   END,  LEFT,  DOWN,  RGHT,  PGDN,    NO,        BSLS,                              P4,   P5,   P6, PPLS,

     LSFT, NUBS,    P1,    P2,    P3,    P4,    P5,    P6,    P7,    P8,    P9,    P0,        RSFT,              FN1,            P1,   P2,   P3,

     LCAP, LALT,  LGUI,                               SPC,                        APP,  RALT, RCTL,       RGUI,  INS, RALT,      P0,       PDOT, PENT

     ),

    [2] = KEYMAP(

     ESC,    F1,    F2,    F3,    F4,    F5,    F6,    F7,    F8,    F9,   F10,   F11,   F12,             PSCR, SLCK, PAUS,    VOLD, VOLU, MUTE,  PWR,

     LGUI,   F1,    F2,    F3,    F4,    F5,    F6,    F7,    F8,    F9,   F10,   F11,   F12, BSPC,        INS, HOME, PGUP,    NLCK,  EQL, PSLS, PAST,

     TAB,    NO,    NO,    UP,    NO,    NO,    NO,    NO,    UP,    NO,  PSCR,  SLCK,  PAUS,  FN0,        DEL,  END, PGDN,      P7,   P8,   P9, PMNS,

     LCTL,   NO,  LEFT,  DOWN,  RGHT,    NO,    NO,  LEFT,  DOWN,  RGHT,    NO,    NO,    NO,                                    P4,   P5,   P6, PPLS,

     LSFT, NUBS,    NO,    NO,    NO,    NO,    NO,    NO,    NO,    NO,    NO,    NO,  RSFT,                    FN1,            P1,   P2,   P3,

     LCAP, LALT,  LGUI,                               SPC,                        APP,  RALT, RCTL,       RGUI,   NO, RALT,      P0,       PDOT, PENT

     ),

};


const action_t PROGMEM fn_actions[] = {

    ACTION_LAYER_MOMENTARY(1),        // FN0

    ACTION_LAYER_MOMENTARY(2),        // FN1

    ACTION_MODS_KEY(MOD_LSFT, KC_MINUS), // FN2 : shift + '-'

    ACTION_MODS_KEY(MOD_LSFT, KC_LBRC), // FN3 : shift + '['

    ACTION_MODS_KEY(MOD_LSFT, KC_RBRC), // FN4 : shift + ']'

};



코드에 보시면 FN2, FN3, FN4 펑션키를 만들어서 펑션키가 눌러지면 shift+’-‘,  shift+’[‘,  shift+’]’


키가 실행되도록 했더니 작동하였습니다.


FN0 + t 누르면 _ (underscore)

FN0 + a 누르면 {

FN0 + g 누르면 }


이제는 문자들이 나와도 껄끄럽지가 않네요. ㅎㅎ

댓글 6
Ley 2018-05-28 23:06
아니 제가 알려드린 방법은 도움이 안 됬는데 도움을 받으셨다니... 뭔가 민망하네요...
문제 해결하신것은 축하드립니다!
stjarna 2018-05-29 01:02

저는 분명 도움을 받았습니다^^

감사합니다. ㅎㅎ

파워댕댕이 2018-10-10 18:19

많은분들이 도움받을 수 있을거같네요. 좋은 글 감사합니다

RogMania 2018-10-11 01:20

좋은 정보 감사합니다

에프키 2018-11-25 13:34

stjarna 님   궁금한 점이 있습니다.


내용을 보면

FN0 + t 누르면 _ (underscore)       FN0 + a 누르면 {       FN0 + g 누르면 }    이  입력된다고 하셨는데


그럼 예를 들어
_ (underscore)  를 입력하려면  
  (FN0   키) 와   (t  키)를 동시에 눌러야 하는건가요?  아니면  하나의 키 만 누르면 되는건가요?



닭치고리얼포스 2020-11-24 02:03
좋은정보 감사합니다.