tal - テキスト端揃えコマンド

http://ThomasJensen.com/software/tal/

d:id:rubikitch:20071012#boxes で紹介したboxesと同じ作者によるtalというプログラム。tal - Examplesによると、たとえば、

#define HANDLE_KEYSTROKE                \
    kp = readcmd();                               \
    if ( kp.action == cmAnimInc              \
      || kp.action == cmAnimDec) {                     \
        step = ani_adjust_speed (kp.action); \
    } \
    else { \
      if (kp.action == cmAnimSwDir) { \
        dir_up = !dir_up; \
        turning = TRUE; \
        goto dir_change; \
      } \
      else {                \
        if (!dir_up)                \
          view->vmove(1);                      \
        DELAYSYNC;                            \
        V_Pan (0);             \
        view->display(); \
        writestatusline(); \
        return kp; \
      }     \
    }

のように右端が不揃いなテキストをtalにかけると

#define HANDLE_KEYSTROKE                     \
    kp = readcmd();                          \
    if ( kp.action == cmAnimInc              \
      || kp.action == cmAnimDec) {           \
        step = ani_adjust_speed (kp.action); \
    }                                        \
    else {                                   \
      if (kp.action == cmAnimSwDir) {        \
        dir_up = !dir_up;                    \
        turning = TRUE;                      \
        goto dir_change;                     \
      }                                      \
      else {                                 \
        if (!dir_up)                         \
          view->vmove(1);                    \
        DELAYSYNC;                           \
        V_Pan (0);                           \
        view->display();                     \
        writestatusline();                   \
        return kp;                           \
      }                                      \
    }

のように整形される。ほかにもいろいろ。

インストールは簡単でmake一発。ただし、プラットフォーム名を指定する必要がある。aix41, hpux9, hpux10, irix5, linux, osf1, sunos4, sunos5のうちのどれかだ。俺はGNU/Linux使いなので make linux でおしまい。windoze用バイナリ・ソースも用意されている。

1999年以降更新されていないが、こういうシンプルなフィルタは時代に関係なく必要とされるだろう。なんといってもエディタ非依存だもん!

行末にコメント文字を配置する

端を揃えるだけなのであまり使い道がなさそうに思えたが、ひとつだけ実用的な利用法が思い付いたので紹介する。 それは、行末にコメントをつけることだ。
talは通常、最後の文字を一番長い行にあわせるコマンドだ。そこでrubyでコメント文字をくっつけてtalをかけると、行末にコメント文字を揃えることができる。

$ cat tal1.txt 
int = 1
float = 2.0
string = "abracadabra"
$ ruby -pe '$_.chomp! << "# \n"' tal1.txt | tal
int = 1                #
float = 2.0            #
string = "abracadabra" #

フィールドを揃えることができないから、あまり用途が思い付かない…