저는 애플 스탠다드 키보드(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 누르면 }


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