やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Panelのクセ

 cursesのpanelには独特のクセがある。window/padには謎のクセがあるにつづいて。

成果物

情報源

Panel

 panelはwindowを複数扱うとき、そのZ軸について管理する。

 [newwin]は重ね合わせるとき[overlay]せねばならない。[subwin][]はそれを自動化してくれる。ただしZ軸の順序は管理できず、描画した順で上書きされる。panelはその順序を管理してくれる。コードを分離する観点から、panelを使ったほうがよい。

 なお、panelはwindowでのみ使える。padは使えない。new_panelにpadを渡すとエラーになる。

API

update_panels

 パネルを操作したらとにかくupdate_panelsすること。さもなくば描画されない。

move

 キー入力に応じてパネルを1ずつ移動させたい。このときパネル(ウインドウ)の現在位置を知りたい。それらしきAPIはつぎのとおり。

 結論からいうとgetbegyxがそれである。

 APIのうちmoveについて。これはwindow.mvwinのラッパーである。情報源

 window.mvwinはウィンドウの左上角を移動させる。そしてgetbegyxはウインドウの左上角を取得する。

 それぞれ座標取得系のちがいは以下のとおり。

API 概要
getbegyx ウィンドウの左上角の座標を返す。
getyx ウィンドウの左上角からの相対座標を返す。
getparyx 親ウィンドウを基準にした左上角の座標を返す。親なしなら(-1,-1)
getmaxyx ウィンドウの高さ,幅を返す。
getsyx 仮想画面カーソルの現在座標を返す。leaveok=Trueなら(-1,-1)

所感

 クラス設計がわかりにくい。各クラスやメソッドの関係性がわかりにくい。1つずつメソッドを使って確認せねばならない。つらい。もっと簡潔にまとめてくれ。

対象環境

$ uname -a
Linux raspberrypi 5.4.83-v7l+ #1379 SMP Mon Dec 14 13:11:54 GMT 2020 armv7l GNU/Linux