#:g1: text.progressの紹介

Posted 2014-04-14 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の105日目です。

text.progressとはなにか

 text.progressは、Gaucheでコンソールにプログレスバーを表示するためのライブラリです。

パッケージ情報

パッケージ名text.progress
GaucheマニュアルGauche ユーザリファレンス: 11.43 text.progress - テキスト端末上でプログレスを表示する

インストール方法

(use text.progress)

試してみる

 詳しくドキュメントが書かれているので眺めるだけで使い方は分かると思いますが、(make-text-progress-bar)が関数を生成するようになっていて、生成された関数を実行することでプログレスバーが描画されます。

(let ((bar (make-text-progress-bar)))
  (dotimes (i 100)
    (sys-nanosleep 10000000)
    (bar 'inc 1))
  (newline))

;>> progress |########################################| 100/100 00:00 ETA ;=> #<undef>

描画の仕組みですが、バーを描画して復帰してまた描画して、の繰り返しで、

(begin 
  (dotimes (i 100)
    (sys-nanosleep 100000000)
    (display (make-string i #\#))
    (display (make-string (- 100 i) #space))
    (display ": ")
    (display i)
    (display "\r")
    (flush))
  (newline))

;>> ################################################################################################### : 99 ;=> #<undef>

のようなものが骨子です。

 バーの生成については、オプションが色々と取れるようになっていて、カスタマイズが簡単にできるようになっています。

(let ((bar (make-text-progress-bar :header "試験"
                                   :header-width 2
                                   :bar-char #\o
                                   :num-width 13
                                   :max-value 256)))
  (dotimes (i 256)
    (sys-nanosleep 10000000)
    (bar 'inc 1))
  (newline))

;>> 試験|oooooooooooooooooooooooooooooooooooooooo| 256/256 00:00 ETA ;=> #<undef>

まとめ

 今回は、text.progressを紹介してみました。
ちょっとしたスクリプトの作成でこういうのが欲しいことがありますが、手軽に利用できて良いですね。

comments powered by Disqus