端末の幅が知りたい
例えばOCamlのFormatモジュールを使うとき,幅が80だと仮定されてるから,ちょっと大きなデータを出力すると,右端がかわいそうなことになる.
こんな感じ.
#include <sys/ioctl.h> #include <unistd.h> #include <caml/mlvalues.h> value getcol() { struct winsize winsz; if (ioctl(1, TIOCGSIZE, &winsz) == -1) { return Val_int(-1); } return Val_int(winsz.ws_col); }
ML側は,
external getcol : unit -> int = "getcol" let () = Printf.printf "%d\n" (getcol())
% ocamlc -custom column.c main.ml
これがポータブルな方法かどうかは知らん.