funcmap 改造。
unknown: html => {"type":"html","value":"<!-- truncate -->","position":{"start":{"line":4,"column":1,"offset":14},"end":{"line":4,"column":18,"offset":31}}}
まず簡単化
escmap, escbmap, multimap を削除。 単純なキーボード入力のディスパッチだけにする。
lua 導入
getch, http get を lua の coroutine で中断 / 再開させることで、 async / await 風に動作させたい。
第1段階として、keyboard 入力のディスパッチを lua でやる。
FuncList w3mFuncList[] = {
/*0*/ {"@@@", nulcmd},
/*1*/ {"ABORT", quitfm},
/*2*/ {"ACCESSKEY", accessKey},
};
unsigned char GlobalKeymap[128] = {
/* C-@ C-a C-b C-c C-d C-e C-f C-g */
_mark, linbeg, movL, nulcmd, nulcmd, linend, movR, curlno,
};
static void keyPressEventProc(int c) {
CurrentKey = c;
w3mFuncList[(int)GlobalKeymap[c]].func();
}C では keycode から enum を得て、enum から関数ポインタを得る仕組みになっている。 とりあえず w3mFuncList と GlobalKeymap を lua 界に送りこむ。 こいつを lua で実行する。
function keyPressEventProc(c)
local key = w3m.keymap[c]
local func = w3m.funcList[key]
func()
end2024
0218