定規のようなもの

時々、画面に定規が欲しくなります。 画面に合わせて折り返したりする時に、自動ではなく自分で折り返すのに便利です。

そこで以下のような仕様で作ります。

  • 端末の横幅いっぱいにスケールを描く
  • 端末の横幅は stty コマンドの出力から取得する (関数化する)
  • 10 文字毎に '+' とし、それ以外は '-' とする
  • get_scale() という名前で関数化する

プログラムにすると以下のような感じでしょうか。

#! /usr/local/bin/nawk -f
# print_scale.awk
# 画面横幅分の定規のようなものを作成
# usage: nawk -f print_scale.awk

BEGIN {
    print get_scale(get_term_cols());
}

# get_term_cols():  stty コマンドの結果から端末の横幅を得る
#   in:     なし
#   out:    端末の横幅
function get_term_cols(    stty_cmd, stty_opt, stty_exe, cols) {
    stty_cmd = "/bin/stty";
    stty_opt = "-a";
    stty_exe = stty_cmd " " stty_opt;

    while ((stty_exe | getline) > 0) {
        if ($6 == "columns") {
            cols = $7;
            sub(/;/, "", cols);
            break;
        }
    }
    close(stty_exe);

    return cols + 0;
}

# get_scale():  定規を文字列で作成して返す
#   in:     定規の長さ num
#   out:    定規の長さ num 分の長さの定規
function get_scale(num,    scale_str, i) {
    scale_str = "";

    for (i = 1; i <= num; i++) {
        if (i % 10 == 0) {
            scale_str = scale_str "+";
        } else {
            scale_str = scale_str "-";
        }
    }

    return scale_str;
}

実際に実行してみるとどういうものか分かります。

$ nawk -f print_scale.awk
---------+---------+---------+---------+---------+---------+---------+---------+

こういうパーツのようなものは作っておくと何かの役に立つことがあります。

例えば、タブストップ毎に区切るようなものがあっても面白いと思います。

tag_nawk.png tag_nawk.png tag_nawk.png tag_nawk.png