メモ帳を作ろう

コンピュータの軽い使い方の一つにメモ帳があります。思い付いたアイディアをコンピュータに書き付けてテキストファイルとして保存しておくと、検索や再利用が簡単にできます。テキストファイルはどんなプログラムからも読み出すことができるので、プログラムが使われなくなってデータが読み出せなくなることもありません。UNIXでは複数のファイルを検索することが簡単にできるので、検索性も十分です。

スクリプト作成の方針を次のようにします。

  1. memoスクリプトでメモファイルを~/memo/ディレクトリー内に作成し、同時にエディターを立ち上げる。
  2. membスクリプトでブラウザーを立ち上げ、~/memo/ディレクトリー内のファイルのリストを表示する。
  3. memsスクリプトで~/memo/ディレクトリー内の全てのファイルを全文検索する。結果はHTML形式の検索結果ファイルとして保存し、ブラウザーを立ち上げる。

スクリプト作成準備

まず、メモ帳をいれる~/memoディレクトリーと、スクリプトをいれる~/binディレクトリーを作成します。~/binディレクトリーは環境変数PATHに登録します。コンソールからのパスの登録は1回限りなので、.bash_profileなどのドットファイルに登録しておく必要があります。詳しくはUNIXの教科書を読んでください。

$ cd
$ mkdir memo
$ mkdir bin
$ PATH=$PATH:~/bin

メモ帳ファイル作成スクリプトmemo

~/binディレクトリーにmemoと言う名前で次のperlスクリプトを作成します。

#!/usr/bin/perl
$file='~/memo/' . `date +%y%m%d_%H%M`;
exec "emacs $file";

パーミッションを実行可能にして

$ chmod 755 memo

memoとタイプすると自動的にファイル名を設定してエディターが立ち上がります。

$ memo

ブラウザースクリプトmemb

~/binにメモ帳のブラウザー用のスクリプトも作ります。スクリプトの名前はmembとします。

#!/bin/sh
lynx ~/memo/

パーミッションを実行可能にします。

$ chmod 755 memb

membと入力するとブラウザーlynxが立ち上がります。ファイルの選択を変えるときは上下の矢印を用います。右矢印でファイルの内容を表示し、左矢印でリスト表示に戻ります。ブラウザーを終了するときはqを押して、確認のメッセージがでたらyを押します。

$ memb

メモ帳の検索スクリプトmems

ディレクトリー内の複数ファイルの検索は

$ grep <キーワード> *

でできますが、ファイル名とキーワードが表示されるだけで、目的のファイルを開いたり、また、リストに戻ったりできないので不便です。複数ファイルのgrepの出力は先頭にファイル名が、つぎに、コロンで区切られてキーワードを含む行が表示されます。

filename:キーワードを含む行

そこでこれをHTMLのリンクをはるためのタグに変換するフィルターを考えてみます。フィルター名をlinkfilter.plとして、次のようなperlスクリプトを作成します。

#!/usr/bin/perl
while (<>) {
	/^(.*?):(.*)/;
	print "<A HREF=\"$1\">$1</A><BR>\n$2<BR><BR>\n";
}

テストしてみます。

$ chmod 755 linkfilter.pl
$ echo file:data | linkfilter.pl
<A HREF="file">file</A><BR>
data<BR><BR>

うまくいきました。

Lynxは.htmlの拡張子がついたファイルはHTML文書として扱うので、検索結果の出力を、.search.htmlというファイルにして、~/ディレクトリーに作成します。つぎにLynxを呼び出してsearch.htmlを表示させることにします。次のようなシェルスクリプトを作成し、ファイル名をmemsとします。

#!/bin/sh
grep $1 ~/memo/* | linkfilter.pl > ~/.search.html
lynx ~/.search.html

memsを実行可能にして、mems <検索語句>と入力して検索結果が表示されれば成功です。

$ chmod 755 mems
$ mems keyword

ブラウズの方法はmembのときと一緒です。

w3m を使った memb, mems スクリプト

memb と mems は、lynx の代わりに w3m を使うこともできます。標準入力からhtml文書を読むことができるので、中間ファイルが要りません。

ファイル名:memb
スクリプト:
#!/bin/sh
w3m ~/memo/

ファイル名:mems
スクリプト:
#!/bin/sh
grep $1 ~/memo/* | linkfilter.pl | w3m -T text/html

目次へ戻る