自作シェルの端末まわりで困ってる問題についてメモ書き

Thu Feb 6 16:18:07 JST 2025 (modified: Thu Feb 6 17:59:02 JST 2025)
views: 616, keywords:シェル芸勉強会

 最近、自作シェルで端末から字を読む際のバグと格闘しているのでメモして頭を整理します。

経緯

 こんなかんじ

  • 自作シェルにtrapを実装した
  • プロンプトが出ている時にtrapを受信したいが、文字入力を非同期でやっていないので無理
  • termionの非同期入力を使って文字入力の受付を非同期に実装しなおし
  • バグ出た

バグ

  • Linuxの場合
    • Vimを立ち上げると画面がバグったり、「指定の位置にカーソルがありません」と出る。(何かキーを押すと直る)
      • たぶんVimにESC+[+何か文字が飛んでる(参考
  • macOSの場合
    • 何かコマンドを立ち上げるとSIGTTINが飛んできてシェルが終わる
      • 上のESC+[+文字だと思われ(なぜかコマンドにフォアグラウンドを譲ってから飛ぶ)
      • 飛ばしているのはcursor.rsっぽい
    • 端末のサイズを変えるとtermionのcursor.rsでpanicが起こる
      • エラーを見るとカーソルの位置がとれてない
    • 端末にEnterを入力し続けるとcursor.rsでpanicが起こる
      • 同上

対策

 とりあえず非同期入力を当面あきらめるとして、もし粘るなら、

  • なんとかしてESC+[+文字がバックグラウンド中に飛ばないようにする。
  • シェルのプログラムのしょっぱなにSIGTTINを無効に。
  • カーソルの位置をむやみにtermionから取らず、自分で計算する。
  • termionにコントリビューションする。(少なくともパニックにしないことはできる。)

ですかねえ・・・

本業と並行してバグを除去するにはあまりにも辛いんですが、とりあえず現場からは以上です。

ノート   このエントリーをはてなブックマークに追加 
 

prev:2/15(土)にシェル芸勉強会やります(ちょっと内容変えます) next:自作シェルでbash-completionが動き始めた

やり散らかし一覧

記事いろいろ