GH60 macro 教學 by Mac - 鍵鼠
By Kelly
at 2016-01-14T22:43
at 2016-01-14T22:43
Table of Contents
在打這篇文章之前,首先要先看過以下文章,確保該裝的東西都裝好後再開始出發
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)會如何呢?
讓各位來玩玩看吧!
--
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)會如何呢?
讓各位來玩玩看吧!
--
Tags:
鍵鼠
All Comments
By Joe
at 2016-01-15T14:18
at 2016-01-15T14:18
By David
at 2016-01-18T17:12
at 2016-01-18T17:12
By Olga
at 2016-01-22T16:17
at 2016-01-22T16:17
By Anonymous
at 2016-01-23T02:25
at 2016-01-23T02:25
By John
at 2016-01-24T08:59
at 2016-01-24T08:59
By Emily
at 2016-01-24T23:19
at 2016-01-24T23:19
By Zenobia
at 2016-01-26T15:00
at 2016-01-26T15:00
By Skylar DavisLinda
at 2016-01-28T21:09
at 2016-01-28T21:09
By Connor
at 2016-01-30T08:29
at 2016-01-30T08:29
By Connor
at 2016-01-30T17:37
at 2016-01-30T17:37
By Rosalind
at 2016-01-31T23:38
at 2016-01-31T23:38
By Eden
at 2016-02-04T03:41
at 2016-02-04T03:41
By Hedy
at 2016-02-08T12:23
at 2016-02-08T12:23
By Skylar DavisLinda
at 2016-02-11T17:46
at 2016-02-11T17:46
By Bennie
at 2016-02-12T15:02
at 2016-02-12T15:02
Related Posts
K70 RGB 空白鍵連點
By Margaret
at 2016-01-14T15:38
at 2016-01-14T15:38
Ducky One 80%
By Daph Bay
at 2016-01-14T14:24
at 2016-01-14T14:24
請大家幫我看看這是什麼鍵盤
By John
at 2016-01-14T13:58
at 2016-01-14T13:58
這款剛剛在FB看到的,有人推嗎?
By Valerie
at 2016-01-14T00:52
at 2016-01-14T00:52
關於蛇蛇下殺5折的活動
By Christine
at 2016-01-14T00:16
at 2016-01-14T00:16