定規のようなもの
30分プログラム、その734。http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_260にインスパイアされて、バールのようなもの、もとい定規のようなものを作ってみました。
stty -aで画面の幅を取得してるんですが、そのためには標準入力が端末につながっている必要があります。最終的に/dev/ttyに辿りつくまで、けっこうな試行錯誤がありました。
- process-output->stringの:outputに(standard-input-port)を指定しようとする。が、文字列でないとダメと言われて挫折する
- sys-pipe/sys-fork-and-execを使おうとする。とりあえず動くようになるが、結構複雑。
- /dev/ttyでよくね!
使い方
$ gosh ruler.scm ---------+---------+---
ソースコード
#! /opt/local/bin/gosh ;; -*- mode:scheme; coding:utf-8 -*- ;; ;; ruler.scm - ;; ;; Copyright(C) 2010 by mzp ;; Author: MIZUNO Hiroki / mzpppp at gmail dot com ;; http://howdyworld.org ;; ;; Timestamp: 2010/02/09 20:15:55 ;; ;; This program is free software; you can redistribute it and/or ;; modify it under MIT Lincence. ;; (use srfi-1) (use gauche.process) (define regexp #/(\d+) columns/) (define (column) (string->number (rxmatch-substring (rxmatch regexp (process-output->string '(stty -a) :input "/dev/tty")) 1))) (define (ruler n) (map (lambda (n s) (if (= (modulo n 10) 0) "+" s)) (iota n 1) (take (circular-list "-") n))) (print (apply string-append (ruler (column))))