ふと疑問に思ったのが、こういうことやる時って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 件のコメント:
コメントを投稿