2018/09/08 builderscon tokyo 2018 の LT スライドです。 Elixir の `|>` 演算子を1キー押すだけで入力できるようにする話です。
ΩʔϘʔυΛΧελϜͯ͠ϓϩάϥϛϯάڥΛྑͨ͘͠builderscon tokyo 2018 @ma2ge
View Slide
PowerAssertEx ⭐ 160+github.com/ma2gedev/power_assert_ex
! Elixir
|> ύΠϓԋࢉࢠhttps://elixir-lang.org/getting-started/enumerables-and-streams.html#the-pipe-operator
ύΠϓԋࢉࢠͷΘΕํ# without pipeEnum.sum(Enum.map(1..100_000, &(&1 * 3)))# with pipe1..100_000|> Enum.map(&(&1 * 3))|> Enum.sum
͔͍͍ͬ͜ɻɻɻ͕ͩ |> ࠷ߴʹଧͪʹ͍͘
3
3 to 1
!
QMKhttps://github.com/qmk/qmk_firmware
ࣄલʹඞཁͳFirmware Λॻ͖ࠐΊΔΩʔϘʔυ
۩ମతʹ ErgoDox EZ, InfinityErgoDox, Planck, Helix ͳͲͷࣗ࡞ΩʔϘʔυք۾ͰΑ͘ݟΔΩʔϘʔυhttps://github.com/qmk/qmk_firmware/blob/master/keyboards/readme.md
! ͜ΕΒΛপ1ʹམͪͳ͍Α͏ʹؾΛ͚ͭͭͭखʹೖΕ·͢(ࣗݾ)1 ΩʔΩϟοϓ͔Β࢝·ΓɺΩʔεΠονέʔεΛม͑ͨ͘ͳͬͨΓɺଞͷΩʔϘʔυཉ͘͠ͳͬͨΓɻ͔ͳΓͷপͰ͢ɻ
QMK ͰಠࣗΩʔϚοϓ࡞Δ४උ# fork ͨ͠ͷΛ clone ͢Δͷ͕ΦεεϝͰ͢$ git clone [email protected]:qmk/qmk_firmware.git$ cd qmk_firmware# ରԠ͢ΔΩʔϘʔυͷ keymap.c Λมߋ͢Δײ͡ɻ# ҎԼ Infinity ErgoDox ͷྫ$ cp -r keyboards/ergodox_infinity/keymaps/{default,your_own}$ vi keyboards/ergodox_infinity/keymaps/your_own/keymap.c
QMK Λ͏͜ͱͰΩʔϚοϓม͑ΒΕΔconst uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {/* Keymap 0: Basic layer** ,--------------------------------------------------. ,--------------------------------------------------.* | Esc | 1 | 2 | 3 | 4 | 5 | Del | | |> | 6 | 7 | 8 | 9 | 0 | - |* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|* | Tab | Q | W | E | R | T | ` | | ' | Y | U | I | O | P | BkSp |* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|* | LCtrl | A | S | D | F | G |------| |------| H | J | K | L |; / L1| Enter |* |--------+------+------+------+------+------| Hyper| | B |------+------+------+------+------+--------|* | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'* |Grv/L1| Meh |AltShf| LALT | LGui| | \ | = | [ | ] | ~L1 |* `----------------------------------' `----------------------------------'* ,-------------. ,-------------.* | Up | Down | | Left | Right |* ,------|------|------| |------+--------+------.* | | | Home | | PgUp | | |* | Space| LANG1|------| |------| LANG2 |Enter |* | | | End | | PgDn | | /L2 |* `--------------------' `----------------------'*/https://github.com/ma2gedev/qmk_firmware/blob/ma2gedev/keyboards/ergodox/keymaps/ma2gedev/keymap.c
͞ΒʹϚΫϩͷػೳ͕͋Γ·͢const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt){switch(id) {case 0:if (record->event.pressed) {SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);}break;/* লུ */}return MACRO_NONE;};
keycode ͷΘΓʹϚΫϩΛݺͼग़͢/* ௨ৗΩʔίʔυΛॻ͘ͱ͜Ζ */KEYMAP(..., KC_1, ...)/* action_get_macro Λݺͼग़ͨ͢Ίͷ M ϚΫϩΛઃఆ͢Δ */KEYMAP(..., M(0), ...)
ϚΫϩΛՃ͢Δ͜ͱͰύΠϓԋࢉࢠΛ࣮ݱͯ͠Έ·͠ΐ͏/* @action_get_macro ʹҎԼΛՃ */case 2:if (record->event.pressed) { // For Elixir pipe operatorSEND_STRING ("|>");}break;/* keymaps ͷྻͰΧελϚΠζ͍ͨ͠ΩʔͷϚοϐϯάΛҎԼʹมߋ */KEYMAP(..., M(2), ...)
ϑΝʔϜΣΞͷॻ͖ࠐΈํ๏# ҎԼͷΩʔϘʔυ͝ͱͷσΟϨΫτϦʹ readme.md ͕͍͍ͩͨೖ͍ͬͯΔͷͰͦΕݟΔhttps://github.com/qmk/qmk_firmware/tree/master/keyboards/# Infinity ErgoDox ͷ߹https://github.com/qmk/qmk_firmware/blob/master/keyboards/ergodox_infinity/readme.md
!!!
twitter: @ma2geM3, Inc. / ΤϜεϦʔגࣜձࣾhttps://www.m3tech.blog