LoginSignup
1
1

More than 3 years have passed since last update.

ウィンドウサイズ変えた後に stty を設定する

Last updated at Posted at 2019-10-27

シリアル (UART等でも) 接続した場合、SIGWINCH が届かないのでウィンドウサイズを変更したときに画面がおかしくなることがある。それを直すための bash スクリプト。
手動で stty cols ${COL} rows ${ROW} と叩くのと一緒。
xterm が入っていると reset コマンドで済むらしいですが。

winch_
#!/bin/bash

# カーソル位置を保存
echo -ne '\e7'

SAVE_STTY=$(stty -g)
stty raw -echo min 0

# (x,y)=(999,999) へカーソルを移動、現在位置を表示する
echo -ne '\e[999;999H\e[6n'
IFS=';' read -rd R -a POSITION
stty ${SAVE_STTY}

# 出力をパース
ROW=${POSITION[0]:2}
COL=${POSITION[1]}

# カーソル位置を復旧
echo -ne '\e8'

# 端末を設定して表示する
stty cols ${COL} rows ${ROW}
stty size

エスケープシーケンスを出力してる echo 文 3つは一度に出力しても変わりません。
read をなんとかしたら sh で動きそうなんだけどなぁ。

putty で UART 接続すると速度を手打ちしないといけないので、カンニング用に。
110, 300, 600, 1200, 2400, 4800, 9600,
14400, 19200, 38400,
57600, 115200, 230400,
460800, 921600
stty 1200 で速度を設定、stty speed で現在の速度を表示。

参照:
Arch Linux/シリアルコンソール
ANSIエスケープコード

おまけ:ウィンドウタイトルを変更するには
printf "\033P\033]0;`uname -n`:`tty`\007\033\\"
こんな感じ。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1