Konfigurowanie Tap Dance w QMK
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:
- 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 klawiszHome
. - 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 klawiszemPgUP
, zaraz podHome
.
Aby uruchomić poprawnie Tap Dance, należy:
- Upewnić się, że macie folder ze swoim layoutem w odpowiednim miejscu. W moim przypadku to
qmk_firmware/keyboards/doro67/regular/keymaps/moridin
. - 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ć. - 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. - 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)
i 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 Home
i PgUp
, ale nie wykluczam przeniesienia ich w inne miejsce.
Komentarze: 13
“Na koniec pozostaje dodanie TD(TD_MC) i TD(TD_SD) w odpowiednim miejscu na mapie klawiszy.” Czy mógłbyś zrobić też zrzut ekranu?
Pozdrawiam
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.
Zamiast ręcznie kopiować pliki do własnego schematu, można skorzystać z helpera znajdującego się w repo z QMK :)
./util/new_keymap.sh 1upkeyboards/1up60hse john
Oczywiście, co jest w dokumentacji. Chyba nigdzie nie pisałem o ręcznym kopiowaniu. Helper nie tworzy rules.mk.
“Na koniec pozostaje dodanie TD(TD_MC) i TD(TD_SD) w odpowiednim miejscu na mapie klawiszy.” Czy mógłbyś zrobić też zrzut ekranu?
Pozdrawiam
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.
Zamiast ręcznie kopiować pliki do własnego schematu, można skorzystać z helpera znajdującego się w repo z QMK :)
./util/new_keymap.sh 1upkeyboards/1up60hse john
Oczywiście, co jest w dokumentacji. Chyba nigdzie nie pisałem o ręcznym kopiowaniu. Helper nie tworzy rules.mk.
https://klawiatura.wordpress.com/wersja-mini/ wolałbym taka wersję.
ale niestety niegdzie nie ma potencjometrów.
.