Mastodon
Zdjęcie okładkowe wpisu Konfigurowanie Tap Dance w QMK

Konfigurowanie Tap Dance w QMK

13
Dodane: 6 lat temu

Wczoraj opisałem trochę podstaw QMK, służącego do konfigurowania programowalnych klawiatur mechanicznych. Przy okazji zwróciłem uwagę na fakt, że mam problem z funkcją Tap Dance. Dzisiaj udało mi się ją uruchomić…

Funkcja Tap Dance polega na tym, że klawisz zachowuje się inaczej, zależnie od tego, czy naciśniemy go raz, czy dwukrotnie, trochę na wzór podwójnego klika myszką. To oznacza, że jeden klawisz może pełnić więcej niż jedną funkcję. Sam zdecydowałem się, na razie, na dodanie dwóch funkcji do swojej klawiatury:

  1. Uruchomienie Mission Control – ta funkcja schowana jest pod klawiszem F3, ale jako że nie mam tego klawisza na swojej Doro67, to muszę wciskać Fn + 3. To jest niewygodne, jeśli jedną rękę mam na myszce. Postanowiłem więc, że dodam tę funkcję pod klawisz Home.
  2. Uruchomienie funkcji Show Desktop, która jest częścią Mission Control – jej wywołanie wymaga skrótu ⌘F3, czyli + Fn + 3 u mnie. Schowałem ją pod klawiszem PgUP, zaraz pod Home.

Aby uruchomić poprawnie Tap Dance, należy:

  1. Upewnić się, że macie folder ze swoim layoutem w odpowiednim miejscu. W moim przypadku to qmk_firmware/keyboards/doro67/regular/keymaps/moridin.
  2. W powyższym folderze należy utworzyć pusty plik rules.mk i dopisać do niego jedną linijkę: TAP_DANCE_ENABLE = yes. Oczywiście trzeba go zapisać.
  3. Następnie musimy otworzyć plik config.h z folderu /qmk_firmware/keyboards/doro67/regular/keymaps/moridin do edycji. Pod #pragma once należy dodać jedną linijkę, definiującą maksymalny czas trwania podwójnego kliknięcia: #define TAPPING_TERM 200. Ta wartość jest określona w ms.
  4. Na deser otwieramy plik keymap.c z mapą naszej klawiatury.
#include QMK_KEYBOARD_H

//Tap Dance Declarations
enum {
    TD_MC = 0,
    TD_SD
};

//Tap Dance Definitions
qk_tap_dance_action_t tap_dance_actions[] = {
    [TD_MC] = ACTION_TAP_DANCE_DOUBLE(KC_HOME, KC_F3),
    [TD_SD] = ACTION_TAP_DANCE_DOUBLE(KC_PGUP, LGUI(KC_F3)),
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [0] = LAYOUT( \
    KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC, TD(TD_MC),  \
    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS, TD(TD_SD),  \
    KC_GRV,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_ENT,  KC_PGDN,  \
    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT, KC_UP,   KC_END,  \
    KC_LCTL, KC_LALT, KC_LGUI, KC_SPC,  KC_RALT, MO(1),   KC_LEFT, KC_DOWN, KC_RGHT  \
  ),
  [1] = LAYOUT( \
    KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_DEL, 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, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  \
    KC_TRNS, RESET,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS,  \
    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END  \
  ),
};

Należy dodać sekcję //Tap Dance Declarations, w której określamy nazwy naszych klawiszy. W moim przypadku są to TD_MC (od Mission Control) i TD_SD (od Show Desktop). Poniżej trzeba dodać //Tap Dance Definitions. W moim przypadku do TD_MC przypisałem klawisz KC_HOME (klawisz wywoływany po jednym naciśnięciu klawisza Home) oraz KC_F3 (klawisz wywoływany po podwójnym naciśnięciu). Analogicznie postąpiłem z TD_SD, ale tutaj wykorzystałem KC_PGUP oraz LGUI(KC_F3). LGUI to w tym wypadku klawisz . Na koniec pozostaje dodanie TD(TD_MC)TD(TD_SD) w odpowiednim miejscu na mapie klawiszy.

Teraz pozostało jedynie skompilowanie firmware’u i wgrania go do klawiatury.

Wszystko działa dokładnie tak, jak chciałem i teraz kwestią pozostanie jedynie umiejscowienie tych dodatkowych funkcji w odpowiednim miejscu na klawiaturze. Jak wspominałem, umieściłem je pod klawiszami HomePgUp, ale nie wykluczam przeniesienia ich w inne miejsce.

Wojtek Pietrusiewicz

Wydawca, fotograf, podróżnik, podcaster – niekoniecznie w tej kolejności. Lubię espresso, mechaniczne zegarki, mechaniczne klawiatury i zwinne samochody.

Zapraszamy do dalszej dyskusji na Mastodonie lub Twitterze .

Komentarze: 13

Czego konkretnie? Masz wszystko w keymap.c powyżej…

Chodziło mi o to czy wystarczy dodać do pliku keymap.c poniższe wpisy: “Należy dodać sekcję //Tap Dance Declarations, w której określamy nazwy naszych klawiszy. W moim przypadku są to TD_MC (od Mission Control) i TD_SD (od Show Desktop). Poniżej trzeba dodać //Tap Dance Definitions.” czy trzeba coś jeszcze potem dodać?

Zerknij na kod pod punktem 4. To jest cały mój plik keymap.c.

Oczywiście, co jest w dokumentacji. Chyba nigdzie nie pisałem o ręcznym kopiowaniu. Helper nie tworzy rules.mk.

Czego konkretnie? Masz wszystko w keymap.c powyżej…

Chodziło mi o to czy wystarczy dodać do pliku keymap.c poniższe wpisy: “Należy dodać sekcję //Tap Dance Declarations, w której określamy nazwy naszych klawiszy. W moim przypadku są to TD_MC (od Mission Control) i TD_SD (od Show Desktop). Poniżej trzeba dodać //Tap Dance Definitions.” czy trzeba coś jeszcze potem dodać?

Zerknij na kod pod punktem 4. To jest cały mój plik keymap.c.

Oczywiście, co jest w dokumentacji. Chyba nigdzie nie pisałem o ręcznym kopiowaniu. Helper nie tworzy rules.mk.