私生活が忙しくあまり go-prompt のメンテナンスの時間がとれていませんでしたが、contributeしようとしてくれている知り合いが居たので、少人数で開発スプリントを実施しました。結果的にはかなりうまくいって、参加者3名全員がPRを送ってマージ、issueは8個減りました。
基本的な使い方は go-promptを使ったリッチなコマンドラインツールの作り方 で紹介したので、今回は昨晩 v0.2.0 としてリリースした修正点を紹介します (CHANGELOGはこちら)。
追加した機能
ページネーション
補完の候補が非常に多い場合でも、go-promptはこれまで画面に一度に表示可能な数しか選べませんでした。
今回のページネーションの実装により、狭い画面の中でも沢山の候補を選択可能になります。
Windowsサポート
go-prompt を公開してすぐ、mattnさんがPRをくれていたのですが、いくつかのバグ修正とリファクタリングをいれてマージしました。
ただいくつかうまくいかない挙動も残っているので、こちらを利用する際は注意してください。確認している範囲だと
-
Shift+Tab が効かない詳しい原因がわかってないですが、Windowsでも shift+tab押された時に VK_OEM_BACKTAB が発火するなら go-ttyはそれをハンドリングするコードが入ってないから処理できなさそう (by orisano)
-
矢印キーが効かないWindowsで渡ってくる矢印キーのバイト列が違うのかハンドリングに失敗しています。こちらは実際に送られてくるバイト列を調べれば修正できそう
追記
mattnさんからのPRで修正されました。現状だとちらつきが多いとか細かい課題は残ってますが、一通り動作するようになったかと思います。v0.2.1としてtagを切ってリリースしました。
動的プレフィックス
go-prompt/_example/live-prefix/main.go
過去に一度PRをもらっていたのですがあまり分かりやすいインターフェイスではなかったので、マージせずにクローズしていました。
ただ issue を見ているとかなり要望が多く、 ktr0731/evans などは少し凝った実装が必要になっていたので正式にサポートしました。
開発スプリント以降の修正
Dockerコンテナ内でpanicするバグ
pseudo ttyがallocateされるまで、ioctlシステムコールで画面幅を取得するために TIOCGWINSZ を渡すと (0, 0) が帰ってくるらしく、特定の計算部分で 0除算が起きてpanicしていました。ctopの開発者がPRをくれて修正されています。
2行以上入力した後に端末ウィンドウをめっちゃ小さくするとpanicする現象
色んな端末での表示崩れ
Terminal UIの一番むずかしい部分なのですが、特定の端末エミュレーターでしか起きない表示崩れが結構あります。
端末エミュレーター | 様子 | 現象 |
---|---|---|
iTerm2 | 画面の右端で補完をしようすると、ドロップダウンが次の行で表示される | |
Terminal.app | 2行目以降でバックスペースを打つと、1文字ずつずれていく | |
Goland | 行をまたぐぐらい長い入力をするとGolandのterminalのみ壊れる | |
GNU Terminal | iTerm2 の現象と一緒 |
これらは一通り修正されました。
おわりに
今回スプリントに参加してくれたメンバーはコア開発者として、collaboratorに追加しました。
ここ2日の変更でかなりよくなったので、引き続き改善していきたい。