LoginSignup
12
4

More than 5 years have passed since last update.

go-prompt v0.2.0の新機能紹介

Last updated at Posted at 2018-02-14

私生活が忙しくあまり go-prompt のメンテナンスの時間がとれていませんでしたが、contributeしようとしてくれている知り合いが居たので、少人数で開発スプリントを実施しました。結果的にはかなりうまくいって、参加者3名全員がPRを送ってマージ、issueは8個減りました。

基本的な使い方は go-promptを使ったリッチなコマンドラインツールの作り方 で紹介したので、今回は昨晩 v0.2.0 としてリリースした修正点を紹介します (CHANGELOGはこちら)。

追加した機能

ページネーション

pagination.gif

補完の候補が非常に多い場合でも、go-promptはこれまで画面に一度に表示可能な数しか選べませんでした。
今回のページネーションの実装により、狭い画面の中でも沢山の候補を選択可能になります。

Windowsサポート

windows-prompt.gif

go-prompt を公開してすぐ、mattnさんがPRをくれていたのですが、いくつかのバグ修正とリファクタリングをいれてマージしました。
ただいくつかうまくいかない挙動も残っているので、こちらを利用する際は注意してください。確認している範囲だと

  • Shift+Tab が効かない
    • 詳しい原因がわかってないですが、Windowsでも shift+tab押された時に VK_OEM_BACKTAB が発火するなら go-ttyはそれをハンドリングするコードが入ってないから処理できなさそう (by orisano)
  • 矢印キーが効かない
    • Windowsで渡ってくる矢印キーのバイト列が違うのかハンドリングに失敗しています。こちらは実際に送られてくるバイト列を調べれば修正できそう

追記
mattnさんからのPRで修正されました。現状だとちらつきが多いとか細かい課題は残ってますが、一通り動作するようになったかと思います。v0.2.1としてtagを切ってリリースしました。

動的プレフィックス

live-prefix.gif
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する現象

panic-when-window-is-too-small.gif

色んな端末での表示崩れ

Terminal UIの一番むずかしい部分なのですが、特定の端末エミュレーターでしか起きない表示崩れが結構あります。

端末エミュレーター 様子 現象
iTerm2 スクリーンショット 2018-02-13 22.54.44.png 画面の右端で補完をしようすると、ドロップダウンが次の行で表示される
Terminal.app スクリーンショット 2018-02-13 22.49.20.png 2行目以降でバックスペースを打つと、1文字ずつずれていく
Goland スクリーンショット 2018-02-13 22.47.47.png 行をまたぐぐらい長い入力をするとGolandのterminalのみ壊れる
GNU Terminal Screenshot from 2018-02-13 12-15-00.png iTerm2 の現象と一緒

これらは一通り修正されました。

おわりに

今回スプリントに参加してくれたメンバーはコア開発者として、collaboratorに追加しました。
ここ2日の変更でかなりよくなったので、引き続き改善していきたい。

12
4
4

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
12
4