看板 Key_Mou_Pad 關於我們 聯絡資訊
在打這篇文章之前,首先要先看過以下文章,確保該裝的東西都裝好後再開始出發 https://www.ptt.cc/bbs/Key_Mou_Pad/M.1430970988.A.4D9.html 好的,這次我為各位版友帶來了GH60的巨集做法 手邊沒有蔡新或是BLE60等擁有專有的編輯器,怎麼辦才能寫巨集呢? TKG跟KLE等工具也沒辦法支援呀QQ 沒錯,這很困難,同時,也十分的簡單 首先,先到KLE編輯想要的layout 注意,記得把想要做成巨集鍵的鍵設為fn 我設定了三個macro分別為fn0、fn1、fn2 接下來把RAW data複製到TKG上 http://imgur.com/bqYQzLL fn的選項都選Other>Built-in macro 00 像我有三個巨集鍵,如上圖所示 好的接下來請選Download .c file 把keymap下載下來 接下來用寫程式的東西打開來(無論要用vim xcode sublime text都可以) 我用sublime text做示範 http://imgur.com/REVBBm4 可以看到程式碼長這樣 比對一下已經有巨集功能的keymap http://imgur.com/WLYD1m2 http://imgur.com/LVfToHj 簡單來看一下可以發現多了什麼? 第一個 enum macro_id { HELLO, VOLUP, ALT_TAB, }; 這裡是定義你的巨集叫什麼名字 也就是 [0] = ACTION_MACRO(), [1] = ACTION_MACRO(), [2] = ACTION_MACRO(), 的小掛號裡面要放的 [0] = ACTION_MACRO(HELLO), [1] = ACTION_MACRO(VOLUP), [2] = ACTION_MACRO(ALT_TAB), 以上我們把巨集的名字寫好了 接下來我們要開始讓他知道巨集該如何動作 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { switch (id) { case HELLO: return (record->event.pressed ? MACRO( I(0), T(H), T(E), T(L), T(L), W(255), T(O), END ) : MACRO_NONE ); case VOLUP: return (record->event.pressed ? MACRO( D(VOLU), U(VOLU), END ) : MACRO_NONE ); case ALT_TAB: return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); } return MACRO_NONE; } 上面有一個const macro_t *action_get_macro的小程式 裡面有一個switch看不懂沒關係,照打就好了 看一下這裡 MACRO( I(0), T(H), T(E), T(L), T(L), W(255), T(O), END ) 要輸入HELLO需要按H->E->L->L->O 然後結束END 各位會問說:奇怪,裡面的I() T() W() U() D()是什麼意思? 他們分別指的是 I() change interval of stroke. 「改變macro內每個指令的時間間隔」 D() press key  「壓下按鍵」 U() release key 「放開按鍵」 T() type key(press and release) 「打字(壓下及放開)」 W() wait 「等待時間」 END end mark 「結束符號」 瞭解之後就把上述的程式加入keymap.c後就可以完成巨集了 以下小範例 enum macro_id { PTT, }; #ifdef KEYMAP_SECTION_ENABLE const uint16_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = { #else const uint16_t fn_actions[] PROGMEM = { #endif [0] = ACTION_MACRO(PTT), }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { switch (id) { case PTT: return (record->event.pressed ? MACRO( I(30), T(P), T(T), T(T), END ) : MACRO_NONE); } return MACRO_NONE; } 加入原本的keymap後再修改一下 [0] = ACTION_MACRO(), 就可以做成每30ms為間隔輸入的PTT 如果在“MACRO( I(30), T(P), T(T), T(T), END ) :” 的T(T), T(T)放入一個W(100)會如何呢? 讓各位來玩玩看吧! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.238.108.38 ※ 文章網址: https://www.ptt.cc/bbs/Key_Mou_Pad/M.1452782619.A.1DB.html
agong8664: K壕必推 01/14 22:45
哈哈!我希望能幫助到想用macro的人 對了,如果是要玩AMJ也是可以喔! 把這個AMJ60的包下載下來 https://github.com/AMJKeyboard/AMJ60 在下載https://github.com/kairyu/tmk_core_custom 取代AMJ60內的tmk_core_custom/ 然後修改一下AMJ60/src裡面的config.h 在 #ifndef CONFIG_H #define CONFIG_H 下方加入#define GH60_REV_CHN 之後再照著make KEYMAP=XXX(你的keymap名字) dfu 就可以了 ※ 編輯: kira3628800 (36.238.108.38), 01/14/2016 22:51:22
kivx: 屌屌屌 01/14 22:48
afuu: 讚! 推一個 01/14 22:49
joiedevivre: 太狂了吧 01/14 23:08
Stamatios: 太神啦!!! 01/14 23:52
tycg: 看不懂但太強了只好推XD 01/15 00:21
ywt0fc: 推推!! 01/15 00:28
benwu95: 推教學文 01/15 00:43
oldguy2: 優質好文 01/15 00:48
kenlee168: 推,普洛 01/15 01:21
wensety2007: 推技術文章 01/15 01:56
www54500: 推,也來研究研究 01/15 02:08
aa89028500: 看到k壕先推~ 01/15 02:18
wenyonba: 先教會printf("Hello world!");再教這個啦~~ 01/15 08:40
stationtw: 跪了 壕猛 01/15 09:52