ふと疑問に思ったのが、こういうことやる時ってcursesってヤツがいるんじゃないの?ってこと。ソース見てみたら、CRで行頭復帰してるだけだった。ウロコー!
こんな感じ。
#!/usr/local/bin/gosh
(use srfi-1)
(for-each (^i (format (current-output-port) "~a\r" i)
(flush)
(sys-select #f #f #f 50000))
(iota 256))
Gauche-cursesとかGauche-ncursesはないかとググったら、メンテされてなさそうなのがひっかかった。ついでにChicken Schemeのeggを調べたらncursesがあった。あとで試してみよう。
で、curses拡張がないならどうしたらいいのか?調べてみたらtputなんてものがあるんですね。
試しにやってみたらこんな感じ。topコマンドを実行したときみたいな。
!/usr/local/bin/gosh
(use gauche.process)
(dynamic-wind
(^ _ (run-process '(tput "civis"))
(run-process '(tput "clear")))
(^ _(do ((i 0 (+ i 1)))
((= i 256))
(format (current-output-port) "~a\r" (make-list 100 i))
(sys-nanosleep 10000000)
(run-process '(tput "cup" 0 0))
(flush)
(sys-select #f #f #f 50000)))
(^ _ (run-process '(tput "cnorm"))))
こりゃ便利だなーということで、以前作ったライフゲームをコマンドにしてみた。
$ ./lifegame2.scm -s 100 -w 30
0 件のコメント:
コメントを投稿