数年前、私はUNIXでプログラミング環境を構築し始めました。しかしまだ終わっていません !この記事で私が紹介しているのは私の環境の スナップショットですが、環境の構築はまだ完了していませんし、完全でもないということをご理解ください。コンピューティング環境の向上・改善に終わりはありません。修正を重ねていくことは面白く、そのプロセスのなかで何か新しいことが 発見できる可能性もあります。
すべてのエラーは私の責任ですが、長年にわたって私を助けてくれた多くの方々に感謝しています。(あまり多くて名前を挙げられません。) 個人的な支援、またニュースグループでの彼らの助けがなかったら、以下の記事は書けなかったと思います。
この記事は、中級から上級のLinuxユーザーを対象としています。ここで示す例のいくつかは、実行するのに、Perl 5.6.0、または最低でも5.005がインストールされていなければなりません。Emacsエディターについて言及している個所がありますが、Emacsの例を試す場合は、Emacsエディターをインストールしておく必要があります。Enlightenmentウィンドウ・マネージャーにも言及していますが、これもEterm端末エミュレーターと一緒にインストールすることが必要になります。ただし、最近のウィンドウ・マネージャーおよび端末エミュレーターには、この記事の中でEnlightenmentおよびEtermが提供しているものと 類似した機能があります。
ファイルの編集、システム修正、ソースからのLinuxパッケージのインストール などを問題なく行え、Linuxを楽しんでいることが前提となります。これらの作業に慣れていない方は、この記事で説明している事柄すべてに十分注意し、すべてをバックアップするようにしてください。(これは、どのような場合にも当てはまることです。)ソースからLinuxパッケージを インストールする場合の参考として、developerWorks チュートリアル Compiling and installing software from sources をチェックしてください。
私は、基本ログイン・シェルとしてtcshを使用しています。以下の例を、bash、zsh、または別のシェルで使用するために変換することは簡単です。tcshシェルは、私が何年も使用してきたものですが、このシェルが誰にとっても完全というわけではありません。
tcshシェルでは、いくつかの初期設定 (rc) ファイルを使用します。UNIXにおいては、rc (「アール・シー」と発音します) ファイルは、初期化のときにプログラムが読み取る ファイルです。rcという名称は、ファイル名に付く共通の接尾部 "rc" から採られています (たとえば、tcshシェルの "tcshrc"、または古典的なviエディターの "exrc")。rcファイルは「ドット」ファイルと呼ばれることもあります。これは、rcファイルは、通常のディレクトリー・リスト表示から隠れるように、ドットから始まっているからです。
私のtcshシェル・カスタマイズは、.cshrc、.login、および .logoutファイル にあります。人によっては .cshrcの代わりに .tcshrcを使用すると思いますが、読者がC (csh) シェルも使用するのでない限り、違いは関係ありません (cshシェルは使用しないことをお勧めします。tcshの方が優れています)。
.loginファイルは、ログイン・シェルにおいて最初に実行されるものです。
リスト1: 私の .loginファイル
stty erase \^?
echo TERM = $TERM
switch ($HOST)
case "workmachine":
fetchmail
breaksw
case "homemachine":
fortune
echo "---"
from |
tail
mesg y
echo "---"
breaksw
default:
breaksw
endsw
|
"stty erase" 行は、消去文字をDelete (削除) キーにするように設定します。私がこの設定を好むのは、私が逆方向に消去するDelete (削除) キーに慣れているからですが、デフォルトの方が適していると思われるなら、この行は設定しなくてもかまいません。
echoステートメントは、現行の端末を表示します。xterm機能がサポートされている場合にそれが分かるので私はこれを指定していますが、もちろんそれほど重要なステートメントではありません。
次にswitchステートメントがあります。この形式は、C switch() ステートメントに類似しています (これが、結局、C [csh] シェル、さらには後でtcshシェルがC言語の伝統を受け継いでいる点です)。ホスト名に応じて、fetchmailを実行するか (私の作業用マシンのすべてのログイン・シェルでこれを実行しています。fetchmailの複数コピーがあっても互いに邪魔しないからです)、またはホームで各種のコマンドを実行します。
homemachine (ホーム・マシン) のコマンドでは、まずfortuneを表示し (面白いのでお試しください !)、次は次区切り線 ("---")、次に自分のメールボックス中の最新のメッセージのいくつか、そしてページング許可をオンにしてから、もう一度区切り線を表示します。
すべてのホストで実行する必要のあるコマンドには、デフォルトcaseを使用できます。私の環境では使用していません。
tcshシェルは、.loginファイルの後、.cshrcファイルに 進みます (tcshシェルは .tcshrcファイルを優先しますが、.cshrcしか使用可能でなければ .cshrcを実行します)。
リスト2: 私の .cshrcファイル、第1部: シェル固有の設定
リスト2 のコードは、シェル固有のコードであり、つまり、他のシェルに対して直接適用できる ものではありません。一般に、環境設定値が "setenv" コマンドで設定されるのに対し、シェル特定の設定値は "set" コマンドで設定します。パスはこの例外であり、tcshシェルでは $PATHと $pathの同期を維持するので、パスの設定に、setまたはsetenvのいずれを使用してもかまいません。これは個人的な好みです。
setおよびsetenvの逆の働きをするコマンドはunsetとunsetenvです。シェルおよび環境の設定のリストを表示するのは、setまたはsetenvのみです。
私の個人的な意見では、環境設定とシェル設定を区別することが、tcshのもっとも好ましくない性質だと思います。私ならどちらか一方を使用し、両方ともは使用しないでしょう。しかし、現在の設計では両方を使用せざるを得ません。
リスト3: 私の .cshrcファイル、第2部: 環境
# another switch statement
switch ($HOST)
case "homemachine":
# from home, I use my work machine's external network interface
setenv
CVSROOT tzz@workmachine-external:/cvsroot
# of course, ssh is the only protocol allowed. rsh is insecure.
setenv
CVS_RSH ssh
# my NNTP server at home
setenv NNTPSERVER nntp
# give Emacs a name, for Enlightenment positioning
alias emacs
emacs -name workmachine-emacs
breaksw
case "homemachine-2":
# same as homemachine
setenv CVSROOT tzz@workmachine-external:/cvsroot
setenv
CVS_RSH ssh
# but this is a Solaris machine, so use mailx (I
could have used
# OSTYPE instead of $HOST for generality)
alias mail
mailx
breaksw
default:
# default CVS root for all
machine at work. Leave rsh as the
# default transport.
setenv CVSROOT
tzz@workmachine:/cvsroot
breaksw
endsw
|
リスト3 の環境設定は主に、CVSリポジトリー・ルートを正しく設定するための設定です。これは、CVSを使用する場合、すべてのCVSコマンドがどのマシンからでも動作するように自動的にすべてを セットアップする便利な方法です。また、メインのEmacsウィンドウの名前を指定して、Enlightenmentが正しくそのウィンドウを配置できるようにしています。
$HOSTではなく $OSTYPEを使用して、Solarisを扱うために別のswitch() ステートメントをセットアップすることも できます。ただし、mailをmailxに別名割り当てすることを目的にそうするのは過剰なので、私は行っていません。
リスト4: 私の .cshrcファイル、第3部: 別名
以下に定義する別名を試すには、プロンプトでそれらを入力するだけです。別名 "abc" は、"foreach?"と一行にそれだけを表示して、ユーザーの入力を待ちます。たとえば "echo $a" と入力してから、次のプロンプトで "end" と入力すると、"echo" コマンドは $aの部分に、1?9、次にA?Z、次にa?zを表示するように実行されます。
私の .logoutはかなり単純です。これは、ログインtcshシェルが終了するときに、私のホーム・マシンでのみ実行されるコマンドのリストです。このリストは、すべての他のマシンでは何も行いません。
リスト5: 私の .logoutファイル
switch ($HOST)
case "homemachine":
# save the list of
subscribed newsgroups, just in case:
# save only the first 2000
characters of each lines (the
# .newsrc file can have very long lines),
then filter out the
# unsubscribed newsgroups, and save the output in
~/.subbed
cut -c 1-2000 ~/.newsrc | egrep -v "!" > ~/.subbed
# remove any dead letter files (/bin/mail generates them)
rm
~/dead.letter
breaksw
default:
breaksw
endsw
|
私が好きなウィンドウ・マネージャーはEnlightenmentです。これが好きなので使いますが、Enlightenment (これ以降は "E" とします) を好まない方もいらっしゃるでしょう。いずれにしろ、読者がご使用のウィンドウ・マネージャーで、私がEで気に入っている機能の大半がおそらくサポートされると思います。atermプログラムは目的も効果もEtermと同様ですが、Etermの機能性を再現するのは困難です。
EとEtermは両方ともテーマを使用します。テーマは、目を引くものではありますが、実用的な意味はほとんどありません。Etermについてはそれも役立つと思いますが、私はEについては、プログラミング・サポートのためにテーマを使用することはしません。
Eに対して私が加えた修正で最も重要なのは、e16keyeditプログラムでデフォルトのキー設定を変更したことです。私はAlt-F1?Alt-F12を、デスク1?12に行くようにマップしたので、別のタスクへの切り替えが素早くできます。別名を割り当てた いくつかのデスクトップには、キーの割り当てを追加しています。たとえば、Alt-Shift-Mを押すと、私のメール・デスクトップに行けます。
また、Ctrl-Alt-Mでメール・ウィンドウを始動するようにしました (実際には、"emacs -name gnus -f gnus"。メールの読むのに私はGnusを使用するため)。同様に、Alt-Shift-Letterによってある特定のデスクトップへ進めるようにし、Ctrl-Alt-Letterは、そのデスクトップ上にあると記憶されている プログラムを始動するようにしました。
Eは、プログラムの場所とコマンド行呼び出しを記憶できます。つまり、プログラムが固有な名前を持っていれば、Eは、次回のログイン時にそのプログラムを再始動するか、あるいは次回の始動のためにその場所を記憶だけしておくことができます。名前は、ウィンドウのX名であり、通常はプログラムに -nameパラメーターで指定します。
Etermは、テーマを使用して、動作のカスタマイズを指定します。Etermと一緒に配布されたデフォルトのテーマを試してください。(たとえば、mutt指向の端末には "Eterm -t mutt"、透過的Etermには "Eterm -t trans" など)。他のすべてのウィンドウの下の層に位置するように設定された透過的Etermは、日常の作業でとても役に立つと思います。ウィンドウの下の層に存在してるので、いつでも使用でき、他のウィンドウをおおい隠すこともありません。白黒の表示よりもっと良い表示も用意されています。
読者が独自にEtermのテーマを作成することも可能です。詳細については、Etermの資料を参照してください。
Emacsは、単なるエディターではなく、完全な編集環境、ファイル・マネージャー、Lispコンパイラーおよび仮想計算機など多彩な機能を備えています。私はEmacsで提供されるプログラミング・サポートを好んでいます。
リスト6とリスト7はかなり複雑です。Lispコードをたくさん使用しているので、読者がそれぞれ独自の必要に合わせて変更を試みるには、Lispについて理解しておく必要があります。( 参考文献 で、Lispのヘルプを参照してください。)
リスト6: .emacs.gun.customファイル
emacs.gnu.customファイルのいずれかの設定値について、ヘルプが必要なときは、Emacsヘルプ機能を使用してください。Emacsの中で、C-h vと押してから、調べたい変数の名前を入力します。表示されたウィンドウから、変数の値をさらにカスタマイズすることもできます。
.emacsファイルによってカスタム・ファイルが呼び出されます。.emacsファイルはかなり大きく複雑であり、Emacsに組み込まれて いないLispモジュールを多数使用しています ( 参考文献 で検索できます)。大部分は、「参考文献」に含まれていますが、eshellなどの大きいパッケージを入手するには、Web上での検索が必要になる場合もあります。
リスト7: .emacsファイル
.emacsファイルの全体にコメントを付けたので、各行で何を行っているか理解してください。ヘルプが必要な場合は、Emacsヘルプ機能を使用してください。C-h aを使うと、aproposコマンドが呼び出され、これにより、キーワードを基にしてヘルプを検索できます。また、詳細およびEmacsについてのヘルプが必要なときは、 参考文献 を参照してください。
もっとも重要なのは、自分が好きな部分だけを利用することです。footnotesやfoldingのモードを使用しないのなら、それでかまいません。代わりにcycle-bufferおよびalignを使用する場合や、emacs.gnu.customファイルの中に何か興味を引く場合もあるでしょう。 参考文献 のセクションにさらに詳しいガイドがあります。
私は、viに、そっくりで非常に強力なvimを使用しています。私のvimrcファイルは 次のとおりです (vimおよびvimrcファイルについて詳しくは、 参考文献 を参照してください)。
リスト8: .vimrcファイル
新しいEmacsウィンドウの始動に使用するスクリプトは以下のとおりです。これを他の使用法に応用することもできますが、私がこれを必要とするのは、EmacsにUSR1シグナルを送信したり、Emacsが 実行されていない場合に新しいEmacsを始動したりする場合だけです。このスクリプトを使用するには、CPAN Proc::ProcessTableモジュールが必要です。このスクリプトは、"./getem.pl emacs" として呼び出してください。
リスト9: getem.pl
#!/usr/bin/perl -w
use Proc::ProcessTable;
use strict;
# get the process name
my $name = shift @ARGV or die "You must provide a
process name";
# get the PID to process
my $pid = get_pid ($name);
# if we got a PID...
if (defined $pid)
{
kill 'USR1', $pid or die "$pid - $!\n";
}
else # start a new process
{
system("$name &");
}
# find the PID from a process table, based on a name
sub get_pid
{
my $name = shift @_;
my $table = new Proc::ProcessTable;
foreach my $p
(@{$table->table})
{
# this filters out getem.pl itself
return $p->pid if (defined
$p->cmndline &
$p->cmndline !~ /perl/ &
$p->cmndline =~ /^$name/);
}
return undef;
}
|
私のXFree構成では、2つのビデオ・カードを持つxineramaを使用します。xineramaは、マルチ・モニター機能を提供する、XFreeサーバー用のモジュールです。これは、コンピューターが、2つのモニターを1つのディスプレイとして使用できるということです。Enlightenmentはxineramaをサポートしています。たとえば、ウィンドウを最大化すると、ウィンドウはディスプレイ全体ではなく、モニターの大きさまで最大化され、それが複数のモニターになるということです。残念ながら、XFree構成ファイルは、移植可能でないため、私の構成ファイルを皆さんが使用することはできません。XFree用の資料を読んで、各自のマシンに合うように構成ファイルを作成する必要があります。
この記事で提示した私のセットアップが、読者それぞれの環境を改善する一助となることを願っています。さまざまな実験を繰り返してこそ正しい環境を見出すことができるのであり、私が常に述べてきたように、実験に終わりはないのです。
この記事から新しいプログラムについて読者の方が学ぶところ があれば幸いです。そうでなかったとしても、 参考文献 の内容を検討していただければ、なにか新しい情報が得られるはずです。
この記事で示したセットアップに関してヘルプが必要なときや、一般的な援助が必要なときも、 参考文献 が役立ちます。読者が求める答えは、ほぼ確実にどこかにすでに書かれていますから、あとはそれを見つけるだけです、問題解決に行き詰まった場合は、Usenetニュースグループ、Webフォーラム、問題になっているプログラムの資料などを参考にしてください。
-
Linux (および一般的なUNIX) rcファイルについては、
Dotfiles.com
が参考になります。
-
読者の質問に対する過去になされた解答をUsenetで検索する には、
Deja.com
を使用するのがもっとも良い方法です。
-
多くのプログラムおよびプログラム言語の無料のリファレンス・カードが必要なときは、
Refcards.com
を参考にしてください。
-
Internet FAQ archives
には、ほぼすべてのUsenetニュースグループについての、よくある質問 (とその答え)
が提供されています。ご利用を強くお勧めします。
-
Perlのニュースおよびその他の参考情報は、
Use Perl
、
Perl User Groups
、
Perl.org page
のメイン・ページ、および
CPAN
などで検索できます。
Perl Monks
では、さらに詳しい知識が得られます。
-
CVSについて詳しくは、
cvshome.org
のCVS資料を参照してください。この資料を最初に読むことをお勧めします。
-
Emacsについては、以下のとおりです。
- 最初に、 gnu.org をお勧めします。
- xemacs.org で、オリジナルのEmacsとほぼ互換性のある代替のEmacsをチェックします。
- Emacsパッケージを見つけられる場所としては他に、 archive.cis.ohio-state.edu、 hjem.get2net.dk/storm/emacs/ 、および anc.ed.ac.uk があります。
- 他のユーザーの .emacsファイルについては、 www.dotemacs.de/ をチェックします。
- EmacsおよびLisp言語の解説は、 delorie.com で検索できます。
-
Gnus newsreader
は、Emacs用の優れたニュース・リーダー・パッケージです。
-
Free Software Foundation
(Emacsの作成元) は、多くのEmacsマニュアルおよびリファレンスを発表しています。
-
O'Reilly and Associates
は、この記事で扱ったトピックの大半についてのマニュアルとリファレンス・ガイドを発表しています。
-
Jargon file
は、まじめなプログラマーにはなくてはならないリソースです。
-
一般的なLinux情報は、
Linux.org
で検索できます。
-
Enlightenmentのホーム・ページは、
Enlightenment.org
です。
-
Etermのホーム・ページは、
Eterm.org
です。
-
XFreeのホーム・ページは、
XFree86.org
です。
-
VIMのホーム・ページは、
VIM.org
です。