#:g1: eggs: progress-indicatorsの紹介

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

(LISP Library 365参加エントリ)

 LISP Library 365 の106日目です。

eggs: progress-indicatorsとはなにか

 eggs: progress-indicatorsは、Chickenのターミナル上にプログレスバーを表示するライブラリです。

パッケージ情報

パッケージ名eggs: progress-indicators
ドキュメントprogress-indicators - The Chicken Scheme wiki

インストール方法

 chicken-installを利用して

sudo chicken-install progress-indicators

とでもしてあれば、

(use progress-indicators)

で利用できます。

 どんな関数があるかは、ドキュメントサイトから確認できますが、プログレスバーを表示する関数と、くるくる回転するスピナーを表示する関数の2つが主です。
Gaucheのtext.progressでは、表示用のクロージャーを生成する方式でしたが、eggs: progress-indicatorsでは、プログレスバーのオブジェクト〈構造体〉を表示用の関数が表示する、という作りになっています。

(use progress-indicators)
(use srfi-42)
(use srfi-18)

(let ((bar (make-progress-bar #:max 256))) (do-ec (: i 256) (begin (show-progress-bar bar) (advance-progress-bar! bar) (thread-sleep! 0.1))) (newline)) ;>> [256/256=====================================================>| 100%]

(let ((bar (make-progress-bar #:max 256 #:end-message "完")))
  (do-ec (: i 256)
    (begin
      (show-progress-bar bar)
      (advance-progress-bar! bar)
      (thread-sleep! 0.1)))
  (finish-progress-bar! bar)
  (newline))
;>> [256/256======================================================|完]

finish-progress-bar!を利用すると完了時のメッセージを表示させ終了させます。

 スピナーの方も、


(let ((s (make-spinner)))
  (do-ec (: i 25600)
    (begin
     (advance-spinner! s)
     (thread-sleep! 0.1)))
  (finish-spinner! s)
  (newline))
;>> / 

のようにして利用できます。
また、プログレスバーと組み合わせての利用も可能です。

(let ((s (make-spinner))
      (bar (make-progress-bar #:max 256 #:end-message "完")))
  (do-ec (: i 256)
    (begin
      (show-progress-bar bar)
      (advance-progress-bar! bar)
      (advance-spinner! s)
      (thread-sleep! 0.1)))
  (finish-progress-bar! bar)
  (finish-spinner! s)
  (newline))
;>> [[256/256======================================================|完]100%/

まとめ

 今回は、eggs: progress-indicatorsを紹介してみました。
シェルスクリプトで利用されることが少ない為か、Common Lispではこういうのが少ない気がします。Common Lispでもこういうのがあると良いですね。

comments powered by Disqus