メインコンテンツまでスキップ

funcmap

funcmap 改造。

まず簡単化

escmap, escbmap, multimap を削除。 単純なキーボード入力のディスパッチだけにする。

lua 導入

getch, http get を lua の coroutine で中断 / 再開させることで、 async / await 風に動作させたい。

第1段階として、keyboard 入力のディスパッチを lua でやる。

c の keyboard ディスパッチ関連
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()
end