2024
0218
tab と buffer
データ構造
unknown: html => {"type":"html","value":"<!-- truncate -->","position":{"start":{"line":4,"column":1,"offset":8},"end":{"line":4,"column":18,"offset":25}}}
TabBuffer
link list。たぶん左から順番。
first current last
| | |
V v v
+TabBuffer+ +TabBuffer+ +TabBuffer+
|next |->|next |->|next |--> nullptr
+---------+ +---------+ +---------+Buffer
TabBuffer 毎。 link list。
TabBuffer TabBuffer TabBuffer
first current last
| | |
V v v
+Buffer+ +Buffer+ +Buffer+
|next |->|next |->|next |--> nullptr
+------+ +------+ +------+
next を辿るのが browser の backこれがひとつの WebBrowser を表している。 cmd_loadURL 関数が url を load して buffer を history に追加する基本型。
わりと難解
TabBuffer と Buffer のリンクリストの取り回しが、w3m でも屈指の 難解さです。 buffer を作って目的地に link を追加するという動作なのだけど、 link list を足したり引いたり、あと端と中間の場合分けや、 Current の調整が入り乱れていてよく分からない。
標準の動作で buffer / tab を変化させてから、 後で不要なものを削除する場合なども動作がよくわかりません。 local CGI の履歴操作も難解です。
難解な操作の何割かがコマンドライン引き数で、 複数タブを操作するなど変ったことをするときに起きます。 コマンドライン引数を削除して楽をすることにしました。 第1引数を URL open するだけにシンプル化。
auto res = loadGeneralFile(argv[1], {}, {.referer = NO_REFERER}, {});
if (!res) {
return 2;
}
// main looptab
tab で開くときに、tab を開く、 失敗したら tab を消す。 という挙動がわかりにくさの原因のひとつだった。 成功したら tab を作るという挙動に変えるとシンプルになる。
2024
0217