Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

私生活が忙しくあまり 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を切ってリリースしました。

https://github.com/c-bata/go-prompt/blob/master/CHANGELOG.md#v021-20180214

動的プレフィックス

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をくれて修正されています。

https://github.com/c-bata/go-prompt/pull/32

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日の変更でかなりよくなったので、引き続き改善していきたい。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away