はじめに RustでCLIツールを作る際にターミナル等のwindow size変更に応じて表示を変更したい場合がある。 その際に画面サイズの取得について調査したログ。 はじめに 画面サイズの取得 調査ログ 画面サイズの取得 画面サイズの取得には、libcのioctlを利用し、TIOCGWINSZをシステムコールする。 Cargo.tomlにはlibcを追記する。 [dependencies] libc = "0.2" ioctlにはファイルディスクリプタを渡す必要があり、libc::STDOUT_FILENOが使えるが、アプリケーション側にSIGWINCHが上手く送られない場合(CLIツール等を作成している場合)に、Terminalを制御するウィンドウのサイズ変更に動的に対応できない。そのため"/dev/tty"を読む方法も用意する。 use libc::{ioctl, winsize,
![Rustでterminalのwindow sizeを取得する - Stimulator](https://cdn-ak-scissors.b.st-hatena.com/image/square/816a038354b05055db1e6941ab1f1017d47bc022/height=288;version=1;width=512/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fv%2Fvaaaaaanquish%2F20200323%2F20200323000859.gif)