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()
end