みなさん、こんにちは。

もう、11月。東京は冷たい雨が降っています。風邪などひかないようにしてください。今回は、前回の予告どおり、fl マクロの話に戻って、表示の成型方法について、説明しましょう。

現時点の fl マクロは、実行すると次のように結果を出力しています。

これを目に美しく成型したいと思います。とにかく、日付と時間なのだから最低でもこんな風にしたいですよね。

2016/9/8 16:31:27.808120

そこで、ソースを改造します。

load して実行してみると、

うまくいっていますね。解説しましょう。

#setmany は前回説明した通り。先頭の 2457640 は読み飛ばして、その後ろの 2016 9 8 16 31 27 808 120 をそれぞれ yyyy mm dd hh mmm ss ms us に代入しています。#output は画面に出力する built-in function です。#setmany で代入したvariable[ ] で展開して表示しています。[ ] が大事なところで、

ではダメです。これはもう理解していますよね?判らない人は実際にこのように書いてみて、出力結果を確認してみてください。とりあえず日付らしくはなりましたが、fileinfo の出力と比べても味気ない表示です。何が足りないでしょうか。ファイル名が出ていませんよね。出してみましょう。[fn1] をそのまま出すのではなく、少し捻ります。

実行してみましょう。

vol/subvol がタイトル風に表示され、ファイル名と最終オープン時刻が表示されました。今回は次のような行を追加しました。

ここに2点のポイントがあります。1点目は [ ] のネストです。二重の [ ] が使われているのが分かりますか?ネストは内側から展開していきますので

は、まず最初に

と、展開されます。fn1 variable にはマクロのパラメータが代入されていることに注意してください。次に外側の [ ] が展開されて

と、なります。これで fn2 variablemacsrc という値が代入されました。ネストは何重になってもOKです。ネストが使いこなせるようになればもうプロですね。

ポイントの2点目は #fileinfo built-in function の使い方です。今までは #fileinfo#fileinfo/LASTOPEN_GMT/ として使ってきましたが、これとは違う使い方ですね。// で挟まれた LASTOPEN_GMTfile#fileinfo のオプションの1つで、他にも色々なオプションがあります。今回追加した file オプションはファイル名 $vol.subvol.filefile 部分のみを取りだすオプションです。次の行の

では、volume オプションと subvol オプションを使っています。それぞれ、$volsubvol の部分を取りだします。オプションの一覧は

とすることで表示されます。

これまでの説明では、マクロのパラメータは volume 名称から指定する full qualified 形式で記述してきました。そのため fn1 variable にも volume 名から全部入っていますが、#fileinfo に与えるファイル名は部分的でも受け付けます。やってみましょう。

カレントの volume 名が表示されたと思います。また、ファイル名のルールに沿っている限り、存在しないファイル名でもエラーにはなりません。ファイル存在しているかどうかのチェックには EXISTENCE オプションを使って

ファイルが存在していれば -1 を、存在していなければ 0 を返して正常終了します。オプションは複数同時に指定することもできます。#fileinfo は時刻に関するオプションが3種類あります。それらを全部出してみましょう。

何やら数字が3つ並びました。これらのオプションは後日、この講座に再登場の予定です。詳しくはその時に説明しましょう。

次回も引き続き出力結果を「美しくする」ことを追求していきます。Au revoir!