4 : 16 JPG Cleanerの使い方

← 4 - 15 p↑ もくじ i 4 - 17 n →

基礎からわかる Emacs

2002年 1月13日
記事ID d20113

xyzzyからSSTP

Lisp仕掛けのマリーベル

この記事は、新しいことを試してみたい Windows ユーザや、UNIX入門者、入門予定者(技術系の学部に進学なさるかたなど)を主対象にした Emacs(イーマクス)の紹介です。思想的な面にも触れます。「Windowsでできる初めての vi」の続編ですが、今回は Windowsユーザだけを念頭に書いてるわけじゃないです。またここでいう Unix は、もちろんLinux等も含みます。

Unix上で使えるエディタには、vi(ブイアイ)とEmacs(イーマクス)がある。 vi は、設定ファイルをちょっと書き換えたり、主に読む目的でファイルを開くのにべんりな軽いエディタ(初めての vi)。Emacs は日常のメモから、長文のレポート、各種言語のプログラムを作成、推敲すいこうするのに向いた本格的な(重い)エディタ。理数系の大学などでは(研究室の端末がUnix系なので) Emacs を使えることは大前提、ということも多いと思う。

Emacs は単なるエディタでなく「人工知能言語」 Lisp処理系である点が魅力だ。xyzzy(ズィズィー)を起動して、
(+ 1/3 1/5)
とタイプし、[Ctrl] を押し下げたまま [X] [E] と弾いてみよう。ステータスバーに
8/15
と表示される。xyzzyのLisp系は分数を認識し、ちゃんと通分して計算ができる(Emacs Lisp では動作しません)。五目並べの相手もしてくれる。澄ました調子で「わたしが先手でよろしいですか」と尋ねてくるところなんて、気分はHAL……? なんなら、GNU Emacs の「精神分析医」を呼び出して悩みを聞いてもらってもいい。

I am the psychotherapist.  Please, describe your problems.  Each time you are finished talking, type RET twice.

「どのような問題を感じておられるのか話してください」
精神分析までしてくれるエディタはemacsだけかも

Unixをメインに使うユーザにとって、Windows上で動く Emacs は一種のオアシスだろう。Unixからみると分かりにくい Windowsのキーバインドに悩まされず、いつもの調子でタイプできるからだ。逆に言えば、Windowsをメインに使うユーザにとって、Emacsのキー操作は慣れるまで分かりにくい。けれど使ってみれば、Windows標準、Vi、Emacs ――どのキーバインドにも独特の良さがあると感じるだろう。

ただ、日本語エディタとしては、まだ vi も Emacs も未完成だということを指摘しておかなければならない。表示されている一行下にカーソルを動かす、という日本語ワープロにとって大前提となる動作が実装されていないからだ。この問題は最後に述べる。

Mule を弾こう

「ハ長調の主和音を弾くにはドとミを押さえながらソを弾きます」などという説明を読んで、その説明をいくら記憶しても、ピアノを弾けるようには、ならない。実際に指を動かしてみなければ始まらない。

現在、本家Emacs(バージョン21)もいちおう日本語を扱えるが、まだ実用にならない。日本語が使えるEmacs for Windows としてはバージョン19をベースにしたMule(ミュール)と、バージョン20をベースにしたMeadow(メドウ)があって、本格的に使うなら新しい Meadow が良い。一般の Windowsユーザが日本語エディタとして使うなら xyzzy(ズィズィー)を選択すべきだが、xyzzy は完全なEmacs互換ではないので「Emacsの勉強」(将来、サーバや学校や自室でUnixを使うことを見越しての)には理想的と言えない。

以下では説明用に Mule を使う。Meadow のほうが使いやすく見栄えも良いが(Muleの後継として改善されたのだから当然)、純粋にEmacsの基礎的な操作を練習するだけならどちらでも変わらないし、Mule のほうが動作も軽く、ダウンロードサイズも小さい。しかも設定が簡単だ。

Muleサムネイル Meadowサムネイル

Mule(左)と Meadow: クリックすると原寸大(19KB, 24KB)

2002.01.15追記 「試してみたいが Mule でも大きすぎる」というかたがおられるようです(実は、これがいちばん心配した点。ブロードバンドが多数派になってしまって我々ナロウバンドが何で困っているか理解されにくくなっている)。その場合、Windowsなら、いっそのこと、初めからxyzzyをどうぞ(1497KB)。基本操作は、ほぼ同じなので、記事の説明がだいたいそのまま当てはまります。が、完全互換じゃないです。アンドゥーとかはデフォで違うキーだったりします。ですので、UNIX上でEmacsを使うのがメインという予定のかたは、xyzzy の操作に慣れてしまうとあとで混乱するかもしれません。さしあたって Windows だけ使うユーザなら、Emacsのことは忘れて xyzzy を使って良いかもしれませんが、今回は xyzzy の紹介じゃなく、あくまで(Windowsユーザでもテルネットとかで)Emacsを使う場合の話なので、そういう組み立てにはなってません。以下お読みになれば分かるように、実際にソフトにさわりながら指を動かして覚えよう(そのために何か教材を手元に用意する)という趣旨ですから、すでに使える環境があるかたは、もちろんそのままでOKです。UNIXを使ってるなら、すでにインストールされてるでしょう。(追記おわり)

ダウンロード

本来は Vector のMule for Win32 のページにある Mule2.3Win32-W122-i386.tar.gz を使えば良いわけだが、Meadowより小さいと言ってもこの書庫は約8MBある。

そこで、このアーカイブのざっと半分の4.92MB の mule-lite という書庫を用意した。ダイヤルアップ回線の接続でも10~20分程度でダウンロードできると思う。この書庫はダウンロードしたらWクリックするだけで、勝手に c:¥mule2 というフォルダを作って自己解凍する(もっとも、いまどきのWindows用解凍ツールは、.tar.gz もクリックするだけで当たり前に解凍できるが)。

ブロードバンドで、tar.gz書庫も問題なければ、初めから Vector にある8MBの書庫をダウンロードしたほうが確実です。

解凍が済んだら新規作成された mule2フォルダを開いて、そこにある install.exe をWクリック。いわゆるDOS窓(どすまど)がひらいて、「ディフォルトのホームディレクトリを入力してください。何も設定しないとこの場所からMuleは.emacsを読みます。c:¥mule2」などと言われるが、「何も設定しないと……」とあるように何も設定しなくてもそれなりに動作するので、何も入力せず単に [Enter] としよう。しばらく待つとインストール終了して、スタートメニューに Mule 32 が追加されるので、さっそく起動してみよう。

Meadow の場合、一般に .emacs で環境設定をしないと日本語が使えないが、いま使おうとしている Mule はデフォルトが「日本語環境」なので、ただちにIMEをオンにして日本語を入力できるはずだ。

なお、Windows 95系のOSの場合、上記「クリックしてリターンキー」の安易なインストールで、すでに「.emacs」(ドット・イーマクス=設定ファイル)がたぶん有効になっている。上で紹介した書庫内にこのファイルを含めておいたからだ。起動したエディタの画面背景色がパパイヤ・ホイップ(あわいオレンジがかったクリーム色)になっていたら、.emacs が読み込まれている。背景が白のままだったり、Windows 2000 の場合は、.emacs が読み込まれていないが、気にせず先に進もう。

ピアノでもそうだけど

間違えてもかまわない。間違えたところは弾き直す。それを繰り返すうちに、だんだん弾けるようになる。新しい曲を初めからリラックスしてすらすら弾けるわけない。Emacs では、まず、
[Ctrl]+[G]
を覚えてほしい。これはコマンド中断(キャンセル、取り消し)を意味する。多くのソフトでは、[Esc] でキャンセルできるが、Emacs では [Esc] は特別なコマンドキーでキャンセルキーでない。すなわち、Windows で言うところの [Alt] のかわりに使うキーなのだ。例えば、一画面前に戻るとき [Alt]+[V] を使うが、 これは、[Esc]→[V] でも同じ意味になる。 ここで [Alt]+[V] とは [Alt] を押しながら [V] を押すこと(和音)、[Esc]→[V] とは [Esc] を押してそこから手を離してから次に[V] を叩くこと(メロディー)。Emacs では、3つのキーを同時に押さえたり、和音を含む3~4ストロークのメロディーがひとつの「キー操作コマンド」になることが珍しくない。Unix使いのことを Unix Player というのは理由のあることだ。

話を戻すが、変な画面が出たり、知っているはずのキー操作が使えなかったり、とにかくなんか変なことになったら、迷わず [Ctrl]+[G]。ウィンドウの下部(Windows標準のレイアウトならステータスバーがあるあたり)に Quit と出たら、キャンセルされている。

取り消しの仕方を覚えたら、あとは、ひたすら使うのみ。ウェブページを持ってるかたは、ページをEmacs(この場合Mule)でタイプしてみてください。

カーソルの移動

とりあえず矢印キーを使ってもいいし、イージーな手段としてはカーソルを移動させたい先をマウスでクリックしても良い(Emacs はカーソルを使えることが多い)。矢印キーを使わずキーボードから操作するには、[Ctrl]+[F] で一文字、前へ(フォワード)、[Ctrl]+[B] で一文字、後ろへ(バック)。vi の場合と同じキーで意味が違うので注意(vi と Emacs を同時に覚えようとしては、いけない。まずどちらかをいちおう使えるようになってから、他方を覚えよう)。

一行下は [Ctrl]+[N](ネクスト・ライン)、一行上は [Ctrl]+[P](プリビアス・ライン)。vi の hjkl に比べると何とも重たいが、そのかわり(Windowsの通常のエディタと同様)モードを意識しなくて良い。

一画面下に移動するには [Ctrl]+[V] ――Vというのは、たぶん下向き矢印の形から来ているのだろう。[PageDown]、[PageUp] まで手を動かさないで済むので慣れるとべんりなのだが、Windows のユーザにとってはペーストのとき身にしみこんだクセで [Ctrl]+[V] を叩いてしまうという罠 がある。Emacs のペーストはデフォルトでは [Ctrl]+[Y] なのだ。

[Ctrl]+[V] の反対、つまり一画面上へ行くのには [Alt]+[V] とする。ペーストと間違えて [Ctrl]+[V] を押してしまったら、[Alt]+[V] で戻ればいい。

Emacs特有の移動系コマンド [Ctrl]+[L] は、いまカーソルがある行が画面の中央に来るようにするもの。例えば、カーソルが画面の下のほうまで来ているときに [Ctrl]+[L] を叩くと、半画面ほど下に移動する。言葉ではピンと来ないかもしれないが、使ってみればすぐ分かる。[L] は the Line(その行)の L と思えば、覚えるのもカンタン。ときどきすごくべんりなので試してみよう。

行頭への移動は [Ctrl]+[A] 、行末は [Ctrl]+[E] 。Aは「最初の」文字だし、E は End の E だから覚えるのもカンタンと思う。

ファイル全体の最初と最後に飛ぶには、<> を使う。早送りと巻き戻しの記号と覚えれば良いだろう。文頭へは [Ctrl]+[Shift]+[<]、文末へは [Ctrl]+[Shift]+[>]。

文字の削除、アンドゥ

いま注目している場所(I型のカーソルならカーソルの右、■型のカーソルならカーソルの下)の文字を削除したいとき、無意識のように[Del] に手が行くかもしれない。[Del] は、あなたの意図通りに機能することもあるし、しないこともある。Emacs本来のデフォルトでは [Del] は [BackSpace]の動作になる(Iカーソルでもブロックカーソルでも、カーソルの左=いま注目している場所のひとつ手前の文字を削除)。もっとも、Windows の[Del]と同じように機能することもある。

そんなわけで、知らない環境の Emacs では [Del] に触らないほうがぶなん。文字を削除するには、かわりに [Ctrl]+[D] を使おう。もし [Del] が意図と違う働きをして消したくない文字を消してしまった場合は、[Ctrl]+[Shift]+[ろ] でアンドゥできる。[Shift]+[ろ] は、もちろんアンダースコア _ のことだから、このキーバインドは、論理的には [Ctrl] + _ だ。[Ctrl] + [/] でもアンドゥできることがある。どんなときでも確実にアンドゥできるキー操作は、[Ctrl]+[X] → [U] 。これは [Ctrl]+[X] の直後に単体で [U] を叩くことを意味する。[Ctrl] + [X→U] ないし(同じことだが)[Ctrl]+[X] → [Ctrl]+[U] だとべつのメロディーになるので注意。

いーまくす、リドゥがちょっとおもしろく

リドゥ専用のキー操作は無い(xyzzyでは、あるけど)。アンドゥ [Ctrl] + _ というコマンドは、あらゆるコマンドをアンドゥできるので、アンドゥそのものをアンドゥすることも可能で、そうすればリドゥになる……。ただし、連続してアンドゥを行っているときは、2回めのアンドゥは1回めのアンドゥのアンドゥでなく、連続して元に戻しているのだ(当たり前)。でなければ、胃液が胃をとかすみたいになって(2回アンドゥするとリドゥになって)1回しかアンドゥできないことになってしまう。

こんがらがってきたかな?

操作A、操作B、操作C、アンドゥ1、アンドゥ2

ここで操作A、B、Cはアンドゥ以外の何かとする。カーソル移動以外の実質的な操作だ(文字入力や削除、貼り付けなど)。で、この場合は説明するまでもないでしょう。アンドゥ1は操作Cを取り消し、操作Bが終わった時点まで戻す。同様、アンドゥ2は操作Bを取り消す。全体として操作Aをした直後の状態に戻り、操作BとCは無かったことになる。ここまでは常識的なことですよね……。

ところが! 2回めのアンドゥはアンドゥのやりすぎだったとしよう。例えば操作Bは、なにかの参考文書からコピーペーストしてきた貴重なペースト操作で、これをアンドゥしてしまったのは失敗だった(コピー元の参考文献のほうは、もう閉じてしまってまたひらくのは面倒)。だから操作Bをリドゥしたい。

操作A、操作B、操作C、アンドゥ1、アンドゥ2[Ctrl]+[F]、アンドゥ3

操作Bをリドゥしたいとは、すなわちアンドゥ2を取り消したいことで、アンドゥ2をアンドゥすれば良い。けれど、アンドゥ2に直接つづけて、もう一度アンドゥしたら、そのアンドゥは操作Aを取り消してしまう。これは常識的に分かることでしょう。すでにアンドゥをしすぎて困ってるのにますますアンドゥで元に戻しては、わやになってしまう。で、アンドゥ以外の何かをすれば、このような「アンドゥ連鎖」を断ち切れる。[Ctrl]+[F] は既に説明したようにカーソルを1文字ぶん前へ進めるキーで、ここでは単にアンドゥ以外の何かをするという目的のダミーコマンド([Ctrl]+[L]とかでもOK)。で、ここでアンドゥ3を入れればアンドゥ3は(カーソル移動系コマンドはアンドゥの対象外なので)直前のアンドゥ2を取り消して、結果として操作Bがリドゥされる――。

飛躍するようだが、Lisp(EmacsはLisp言語による処理系)は、こういった再帰的、自己言及的な記述が得意。アンドゥでアンドゥを取り消すのも……。しろうと考えかもしれないけど、こんなふうに「自分を参照できる」「自己言及できる」という能力の柔軟さ、大きさが人工知能研究にLispが用いられたこととつながってくるのかも。Lisp処理系は「汝自身を知る」「自分が誰だか知る」「自己=人格を持つ」ことができるようになるのでは、という発想というか。アンドゥがアンドゥをアンドゥできるのは無化が無化を無化するようで、うつくしい。

余談はともかく、次の例で試そう。

  1. 「あいう」とタイプ
  2. 3回アンドゥして「あいう」のタイプを取り消す
  3. [Ctrl]+[F]
  4. ここで、アンドゥすると「あ」が復活(リドゥ)
  5. さらにアンドゥして「あい」を復活(リドゥ)

重要: ここに書いてあることを繰り返し熟読してもそれだけじゃ当たり前ですが覚えれません。必ず Mule か Meadow を実際にダウンロードしてインストールして、手元で操作しながら覚えてください。

あ、間違えた、アンドゥ! というとき、Windows のユーザは反射的に[Ctrl]+[Z] を叩いてしまうかもしれない。Mule や Emacs では [Ctrl]+[Z] は最小化のコマンドなんで(Windows標準なら [Alt]+[Space]→[N])間違えて叩いても無害ですが、編集中の画面がとつぜんパッと見えなくなるのでびっくりするかも。最小化なんて Windows 環境では、わざわざこんなショートカットキーを与えるまでもないので、Windows で使うときは [Ctrl]+[Z] に他のコマンド(それこそアンドゥとか)をリバインドするのがお得。

Unixで [Ctrl]+[Z] は今のジョブを中断するけど終了しないという基本キー操作。例えば、シェルから Emacs を立ち上げた場合、Emacsを終了しないで編集状態を維持したまま、いったんシェルに戻る。

ジャズのリズムで

[Ctrl]+[K] は Kill 、カーソル位置から行末までを一気に削除。この場合の「行」は、表示行でなく論理行、つまり次の改行文字まで。リターンキーで改行せずにどんどんタイプすると、画面の右端で自動的に折り返されるが、それはホンモノの改行でない表示上の改行(この場合、末尾に ¥ または \ がつく。日本語文字では半角全角の関係で ¥ または \ が1個つく行と2個つく行があるが気にする必要なし)。

[Ctrl]+[A] で行頭に飛ぶので、[Ctrl]+[A], [Ctrl]+[K] でその行削除(vi の dd にほぼ等価)。なお、こういう場合、和音のベースにある [Ctrl] はタイでつなげてかまわない:

[Ctrl]+[A] の和音 → [Ctrl]+[K] の和音 というキー・コード進行は、
[Ctrl] をおさえたままで[A]→[K] とソプラノだけ演奏すれば同じ。

キーのみならずキーコードもオートリピートされるので、[Ctrl]+[K] の連続押しなら行単位の連続削除になる。

次に、任意の点から任意の点までカットする方法――Windows なら「選択」して [Ctrl]+[X] ってやつだが、Emacs では、どーやって範囲を「選択」するのか? というと、いちばんお気楽な答はマウスでドラッグ。これが Windows と同じでとりあえず分かりやすい。Mule, Meadow とも選択範囲が反転。ただし、Mule では、選択範囲を選択してるときは反転するが、選択完了するとすぐ反転解除してしまうので、ちと分かりにくい。反転しないが選択されてますのでご安心を。どこからどこまで選択されてるのか?というと、一方の境界は、今カーソルがある位置。他方の境界を再確認するには、[Ctrl] を押したまま[X][X]を叩くべし。左手の小指で白鍵のドを押さえたまま、人差し指でファ#を二連打というか……。すると他方の選択地点にカーソルが飛ぶ。もういちど[Ctrl]+[X→X]するともう一方の選択地点に戻る。この二点間が選択されてる。

[Ctrl]+[W] で選択範囲がカット(削除)。Width (この長さの範囲内)の W だとでも覚えておけば良いかも。

初めからマウスを使わない方法もあって、こちらのほうが実はべんり。どうやって範囲を選択するかというと、「ここから選択」という点にカーソルを移動し、[Ctrl]+[Space] これで選択開始。あとは他方の地点にカーソルを移動し、[Ctrl]+[W] を押せば、開始点から今のカーソル点まで削除。開始点と他方の端点は画面上でどちが上でどっちが下でもOK。この場合も選択開始点を再確認するには[Ctrl]+[XX]。

Windowsに比べるとひどく原始的で洗練されていない範囲選択だと思われるだろうが、これもEmacsの味のうちだし、なにより、原始的な方法には原始的な方法の良さがある。Telnetの文字だけ端末エミュレータでマウスが使えなくても「範囲選択」してカット&ペーストなどできる。

なお[Ctrl]+[Space]で開始点を選択したら、他方の端点へのカーソル移動はマウスクリックでもかまわない(キーボードとマウスを併用してもOKということ)。

カーソルは「どこ」を指しているか?

例えば、「あいうえお」の「い」の字の上にブロックカーソルがある状態 で[Ctrl]+[Space]を押すと、どこから選択されるのだろうか?「い」自身は選択範囲に入るか?

結論から言うと入るときも入らないときもある。「あいうえお」の「い」にカーソルがある状態で「け」とタイプするとカーソル位置に「け」が挿入されて「あけいうえお」になる。つまり、カーソルは「あ」と「い」のあいだ(文字と文字のあいだ)をポイントしていて、タイプした文字が「あ」と「い」のあいだに入力されたのだ。

ということは、上記の状態で[Ctrl]+[Space]を叩くと、「あ」と「い」の間が選択開始点になることを意味する。

だから、選択終了点が「い」よりも後方なら「い」も選択範囲に含まれ、選択終了点が「あ」よりも前方なら「い」は含まれない。

Windows でふつうに用いられるI字型のカーソル を使えば、いっそう分かりやすい。Meadow では、簡単にこの型のカーソルを選択できるが、I字型カーソルは、ともするとカーソルがどこにあるのか見失いやすい点、ブロックカーソルより不利だし、端末エミュレータではブロックカーソルしか使えないこともある。いずれにせよブロックカーソルの左側の辺がある文字間が真のカーソル位置と知っている必要がある。

コピー&ペースト

選択範囲をコピーするには、[Ctrl]+[W] (=切り取り)のかわりに [Alt]+[W] とする。貼り付けのほうは、yank と称して [Ctrl]+[Y] を使う。

この文章を読んで操作を頭で暗記するのでなく、必ず試して運動神経で学習すること。

行単位の kill ([Ctrl]+[K])でも削除したものはクリップボードにあるので、別の場所にカーソルを移動して [Ctrl]+[Y] で yank できる。

Windows のほかのソフト(メモ帳ほか無数)とのあいだでコピー&ペーストする場合、Emacs 側では [Alt]+[W] でコピーし[Ctrl]+[Y]でペーストだが、Emacs以外の「ふつう」の Windows の世界では、[Ctrl]+[C] と [Ctrl]+[V] を使う。 もちろん、これは混乱の原因になる。 [Ctrl]+[X], [Ctrl]+[C], [Ctrl]+[V] でソフトの違いを意識せずに同じ感覚でソフトからソフトへ情報を交換できるのが Windows OS のすぐれた特徴のひとつだが(DDE: ダイナミック・データ・エクスチェンジ)、Windows上でEmacsを使うのは、実際には Windows上で(TeraTerm経由で)リモートのUnixを遠隔操作する場合とか、逆にUnixに慣れたユーザがEmacs for Windowsというレイヤを通してWindowsにアクセスする場合が多く、 Emacs は異なる2層の界面なので、境界上でこのような「バイリンガルめいたストレス」が生じるのは、やむを得ない。Windowsソフトとして馴化じゅんかするなら、すべてのキーバインドを Windows ふうにリバインドすれば良いが、一般の Windowsユーザがエディタとして使うかぎりにおいて、そうまでして無理に Meadow を使うこともない。「日本語エディタ for Windows」ならもっと良いものがあるし、ましてユニコード・エディタ for Windows としては(多言語対応とうたっているものの)現状、Meadow は全く使い物にならないからだ。Meadow には独自の存在価値があるが、現状では xyzzy, Mint, K2, TeraPad のような「ホンモノの日本語エディタ for Windows」を期待しては、いけない。(Emacsは、ただのエディタでなく極論すれば小さなOSですらあり、Lisp処理系であり、Emacs Lisp統合開発環境であり、したがって「ブーツストラップ可能な自己開発環境」であって、そういった点に興味と利便の核心がある。単なるプレインエディタとしてだけ比較するなら――特に無数のエディタが存在するWindowsの世界では――それに特化したツールのほうが小回りがきいて軽快だ。)

(load-library "Gates") は「悪」か

Emacs(ないし xyzzy)のキーバインドを Windows風に変えてしまうことについて、 「ビル・ゲイツのイヌである、MS-DOGである」といった否定的な見方もあるようだ。

第一に、Emacs は、そもそもどのキーとどのコマンドをバインドするのもユーザの自由、 というカスタマイザブル性、さらにはキーに割り当てるコマンドを自分でプログラムして良い、 というプログラマブル性が大きな長所なのであるから、 ユーザ自身が自分でいちばん使いやすいように設定するのをとやかく言うのは、 Emacs の思想そのものを否定することにつながる。

単に「Windowsユーザむけ」というだけのキーバインドだと、[Alt] はともかくも、[Ctrl]+[X] で始まるEmacs既定のキーコードがすべて使えなくなるけれど、使いたいコマンドは、今度は Windows風のほうで空いた場所にリバインドすれば良いだけの話だ。

第二に、同じキー操作でソフトからソフトへコピーペーストができるのは、 明らかに Windows の良い点であって、欠点では、ない。 たとえあなたが、あなたより稼いでいる大企業に複雑な感情をいだいているにせよ、いないにせよ、 またその会社を象徴する個人をあなたが愛しているにせよ憎んでいるにせよ、 良い機能は良い機能なのだ。(悪いことがあるとしたら、良い機能が独占されていることだ。悪い機能であればべつに独占されても困らない。Windows の悪いところは、良い機能――それも本当にオリジナルかどうか疑わしいような――が独占されていることであって、機能が悪いのでは、ない。)

Emacs を Windows 上で使うときに仮に Windowsふうのキー・リバインドをしたとして、 それを(あたかもFSFがMSに敗れたかのように)屈辱的だと感じるとしたら、 その感じ方こそが敗北だ。 源泉が「敵」であれ「仲間」であれ、良い機能は良い機能だから等しく取り入れるのが「フリー」なソフトウェアのあり方だろう。

ただ、思想的なことはともかく、Emacs を Windows 上で使うときのキーバインドは、現実的には悩ましい問題でもある。Emacs の基本的なキー操作は一通り知っていたほうが良いので、Meadow (Mule) のキーバインドは、あまりいじらず、実際に「Windows用エディタ」として使うには xyzzy をおすすめする(詳細は、また改めて……)

上書き保存

「まとも」な Windows ユーザなら、[Ctrl]+[S] が手癖になっているはずだ。ちょっとタイプするごとに上書き保存しないと不安……。Emacsでは、[Ctrl]+[X→S] なので、Windowsとほぼ同じ感覚だ。これもマニュアルなどには、[Ctrl]+[X] → [Ctrl]+[S] というコード進行で書かれているが、実際には、[Ctrl] をおさえっぱなしで、[X]→[S] とすれば良い。

Emacs は、一般に、黙っていても定期的に自動セーブを行うので、万一OSがハングしてもかなり直前の状態を自動的に復元できる。

名前をつけて保存

[Ctrl]+[X→W] で「ステータスバー」が1行エディットボックスになるので、つけたい名前と保存するフォルダのパスを指定する。キャラクターベースなので、(特にWindowsユーザには)使いにくいが、内容的には別に難しいことじゃなく、やってれば自然と理解できるだろう。xyzzy なら「名前をつけて保存」のおなじみコモンダイアログが使える。

Emacs では名前をつけて保存をすると、以降、その編集中のものは、その名前のファイルということになる。要するに通常の Windowsソフトと同じだ。vi に慣れてるかたは勘違いしないようにしよう。

ファイルを開く

[Ctrl]+[X→F]で上と同様に開くファイルを指定。スペースバーを押すとファイル名は次のように補完される:

例: c:/home/faireal/public_html/index.php を開く。

  1. c:/home/faireal/
    と始めに表示されたとする。この /faireal/ フォルダに p から始まるファイルorフォルダは public_html しかないなら、
    c:/home/faireal/p
    のように p だけ入力して、スペースバーを1回押すと、
    c:/home/faireal/public_
    と補完され、もう1回スペースバーを押すと、
    c:/home/faireal/public_html/
    まで補完される。
  2. 上記の public_html フォルダに i から始まるファイルorフォルダは index.php と image/ があるとすると、
    c:/home/faireal/public_html/i
    と i だけ入れてスペースバーを押すと、ウィンドウが上下に分かれて、下側のウィンドウに index.php と image/ という候補が示される。この場合、in まで入れれば一意に確定するので、
    c:/home/faireal/public_html/in
    までタイプしてスペースバーを2回押すと、開きたいファイルがフルパスで表示される。あとは[Enter]を叩けば良い。

この自動補完機能は非常にべんりなので、ぜひ覚えておこう。

存在しないファイルを開こうとすると、その名前で自動的に新規作成される。

Emacsの終了

[Ctrl]+[X→C] とする。変更されてまだ保存していないものがなければ、ただちに終了する。変更されているものがあると、「保存するか?」と尋ねてくるので、半角英字で y か n か答えれば良い。n と答えると、「変更されているのですが、それでも保存しないで終了するのですね」と Windowsなみにしつこく(?)尋ねてくる。今度は yes としっかり3文字タイプしないと yes か no かきっちりタイプしれと言われる。親切と言えば親切だが、かなりうっとうしくも感じる。これは save-buffers-kill-emacs という関数が呼び出されているからで、有無を言わさず終了したいときは、純粋に kill-emacs を呼び出せば良い。例えば、.emacs に
(global-set-key "\C-\M-q" 'kill-emacs)
と付け足すと、[Ctrl]+[Alt]+[Q] で有無を言わさずただちに終了となる。これは実際にそうすることをおすすめしてるわけじゃない(というかホントにこんなことして、大事な作業中に間違えてその組み合わせを押したらえらいことになる――自分で押さなくてもネコがキーボードの上で暴れるとかで)。「原則としてどのキーないしキーの組み合わせにでも、どんなコマンドでもバインドできる」というのは、こういう意味だ――ということを理解してもらうための例だ。で、[Ctrl]+[C] がコピーとかになるようにキーバインドを上書きしてしまえば Windowsふうにもなるわけだ。ついでに言えば、自分にべんりな関数を自分で書いてキーにバインドしても良い。これが「プログラマブル」という意味。

こーゆーことができるのが Emacs の真のおもしろさと思う。

結び

以上のことがざっと分かったら、復習と整理もかねて、Muleに付属しているトゥートリアル(独学用の入門教材)を使ってみよう。

ちょっと複雑なメロディー(Mule用): まず [Ctrl]+[H] を弾き、手を離したら、[Shift]+[T] のコードを鳴らすと、下の1行入力エリアに Language: と表示されるので、[Shift]+[J] にて大文字のJ を出してスペースバーを押す。すると Japanese と補完されるので、[Enter] 。これで独学用入門コースがスタートする。

この記事では説明しなかった画面分割系のコマンドを特によく覚えてほしい(べんりなので)。Emacs は文字ベースのコンソール版でも画面分割が使え、GUI版とあまり変わらない。実際、リモートのUnixマシンのEmacsを手元の(キャラクターベースの端末エミュレータ)TeraTermで動かせる。

なお、Emacs は次の図版のようにいちおう多言語混在テキストを扱うことができ、UTF-8や16の文書を閲覧できる。しかし、多言語入力の方法が Windows での標準と異なるなど Windowsソフトとの相互運用性は低い。Windows 2000ではOS自身が(アクセサリーのメモ帳においてさえ)多言語編集をサポートしており、Windows上で動くすぐれた多言語エディタも多いので、Emacsの「多言語パレット」機能は特に貴重でもない。

西欧語にハングル、タイ文字などを混在させたスクリーンショット。

Windows 上では珍しい機能でないが、Unix 上で動く多言語エディタとしては特別な地位にある

細かい補足

とりあえず使ってみるには Mule は軽くてコンパクトだが、本格的に使うなら Meadow のほうが良い。
ftp://ftp.m17n.org/pub/mule/Windows/
などにある Meadow-1.14-i386-base.tar.gz が本体。これには、lisp 部分のソースがついてない。 プログラマのかたは、Meadow-1.14-i386-els.tar.gz もいっしょにダウンロードしておこう。

Meadow は特に日本語を優位とせず、多言語を対等に扱うたてまえなので、設定ファイル .emacs で適切に設定しないと日本語環境にならないかもしれない。付属の dot.emacs.ja という見本をHOMEディレクトリにコピーして .emacs と改名すれば、とりあえず動くと思う。Meadowに付属している dot.emacs.ja はSJISやEUCでなくJISで書かれているので、TeraPad などの適切なエディタで開く必要がある。Mule のほうの .emacs の見本はSJISなので、そのまま Windows 環境でふつうに読める。

.emacs が効いているかの確認をかねて、手始めにエディタ背景色を好みに合わせて変えてみると良い。色の名前は、Meadow の etc/rgb.txt にある。

この記事に合わせて配布する mule-lite.exe は、すでに mule2 用の.emacs が自然と読み込まれる位置に含まれているが、この .emacs は Meadow と共用できない。

ホームディレクトリは、理論的には環境変数HOMEで示されるフォルダで、.emacs は、そこに置かなければならない。 Windows 2000 の場合は、デスクトップのマイコンピュータを右クリック、プロパティ→詳細→環境変数をクリック、システム環境変数の[新規]で、変数名HOME、変数値 c:¥home¥you などとすれば良い。

ホームディレクトリの実質的な意味は、ひとつには、プログラムとデータを分離することだ。例えば、システム(OS)のあるHDとは別のHDにHOMEディレクトリ用のドライブを作れば、システムがクラッシュしたとき、あなたが作ったデータを破壊することなく、プログラムが入っているHDだけ交換できる。なお、よく /usr/local とかやるのは、もともとのOSの付属品でないものをユーザがそのマシンローカルでインストールした、というふうに理解すれば良いだろう。

Windowsソフトのなかには、.emacs のようなドットから始まるファイル名を作成できないものもある。Meadow の場合、_emacs のようにドットのかわりにアンダースコアを使っても良い。Mule の場合、めんどくさければ、mule-lite.exe から出てくる .emacs をコピーして書き直せば良い。DOS窓を使って、
ren _emacs .emacs
のように改名しても良い。

NOTE: 書き手自身が「一年生」に近いので、これから始めるかたと視点を共有しやすいと思います。――Emacsのトゥートリアルは入門自習用のくせに基礎中の基礎であるコピー&ペーストのやり方を説明してません。この記事では、そうした本当の初歩からちゃんと説明しました。――

付記: vi, Emacs, xyzzy など

ふだん TeraPad / xyzzy などをよく使うが、この記事は Mule でタイプしてみた。Mule は meadow より使いにくいが、それでも vi よりは本格的なエディタとしての実用にたえる。アイスクリームで言えばシンプルなバニラの香りのような、vi の軽快なキーバインドも好ましいのだが。

段落の終わりまで改行を入れない「ふつう」の書き方の場合、表示行と論理行という概念を(ユーザが容易にアクセスできる形では)持たない現時点(2002年1月)の Mule/meadow は不自由だ。gVim が使いにくいのも、まさにこの点だ。フリーカーソルまでは必要ないとしても、1行下へ、というときは、画面上で見えている1行下のその位置にカーソルが移動してほしい。Emacsふうでも xyzzy は、そうなっている。もっとも、数十文字程度でこまめに改行しながら書くなら、Muleでも、あまりストレスなくやっていけるだろう(meadowならなおさら)。

プログラミング用と割り切れば1行が長すぎることそれ自体が基本的に良くないスタイルなのだが、一般のレポートや論文のたぐいの「文学的」作業に使うときには本当に改行したいところ以外では改行しないだろう。日本語の場合、単語単位の処理が困難なため、1論理行が多数の表示行にわたって折り返されると、その途中の部分にアクセスする方法が非常に限られてしまい、ひいては自由自在な編集ができなくなる。日本語圏ネイティブのエディタが表示行単位での移動を当然のデフォルトにしていることが多いのもそのためだろう。

xyzzyでは、さらに、SJIS、EUC-JP、UTF-8、UTF-16などのファイルが混在している状態で、文字コードを意識せずに透過的にgrepをかけられる(そこまですごくないけれども近い機能が K2 Editor にもある)。xyzzy を現時点における日本語エディタの最高峰だと思うのは、こうした数々の理由からだ。しかし「高機能」とそれに伴う「重さ」には用途によって損益分岐点がある。xyzzy のほうが高機能だけれど、日常、TeraPad や Mint をよく使うのもそのためだ。Mint については、一般の知名度は高くないかもしれないが、100MBの巨大テキストファイルでも一瞬でオープンできるので、高く評価している。

links

この記事のURL

テキスト版省パケ版XML版


そのJPG、ムダに大きくありません?

2002年 1月 9日
記事ID d20109

JPG、同じ画質で5KB小さく

小粒でもぴりりと辛いツール、今回はスロバキアのフリーウェア、JPG Cleaner。

Jpeg画像の画像部分にはまったく影響を与えず、ファイルサイズを最大7~8KB以上も小さくする、というスグレモノ。例えば、この写真(久保田さん撮影)は82.90KBあります。これは久保田さんから届いたままの状態です。それを JPG Cleaner にかけると――このように 73.67KB になって約9.2KBも軽くなりました。

見比べていただければ分かるように、まったく画質には影響していません。イメージ部分のデータは、バイナリレベルで1バイトも変更されていないのです。んじゃ、なんで9KBも縮んだの?もとのファイルのほうには、どんな「ゴミ」がついてたの?という当然の疑問。――その答は、バイナリエディタで見れば一目瞭然。

@Photoshop 3.0.8BIM... Resolution... 8BIM... FX Global Lighting Angle... x8BIM... FX Global Altitude 8BIM... Print Flags... 8BIM... Copyright Flag... 8BIM... Japanese Print Flags... 8BIM... Color Halftone Settings... 8BIM... Color Transfer Settings... 8BIM... Guides... 8BIM... URL overrides... 8BIM... Slices... 8BIM... ICC Untagged Flag Layer ID Generator Base... 8BIM... New Windows Thumbnail...

どうやら久保田さんは Photoshop で画像を処理したもよう。こんな感じで、レタッチソフトが内部的に使うコメントがえんえん数千文字(バイト)も続いてます。これじゃあファイルサイズが肥大化するのも無理ありません(差は7~8KBを越えることもあります)。これらのフラグ類は制作した側のソフト自身にとってのみ意味を持つもので、画像を表示するブラウザ等にとっては、意味を持ちません。まぁしいて言えば、「その画像はフォトショップで作ったね。キミはライセンスを持った正規のユーザじゃないね」とか問いつめるのに使えますが……。

たかだか4~5KBのゴミヘッダでも、画像が百、二百とあるとばかにできません。5MBしかないウェブスペースの2割がゴミヘッダに消費されていた、といったことも考えうるのです。トラフィックが無駄に増大してネット自体やサーバに負荷がかかるうえ、ナロウバンドのかたにとっては画像がそれぞれ4KB軽くなれば、それだけで、ページの表示がずいぶん軽く(速く)なるでしょう。

といっても、バイナリエディタでマニュアルで編集してゴミヘッダを1バイトも間違わずに除去するのは、たいへん。処理するファイルが百も二百もあればなおさらです。専用ツールにまかせましょう。

使い方

JPG Cleaner を起動し、右上の [Add Files...] をクリック。ファイルを選択するコモンダイアログがでるので処理したいファイルを指定。複数個の指定も可能です。また、ひとつ下の、[Add Folder...] を使えば、特定のフォルダ全体(サブフォルダも含む)の jpg ファイルをまとめて処理できます。環境にもよりますが、数百個のファイルなら、ほんの数秒で処理できるでしょう。左下の [Start] で処理開始です。

ゴミヘッダが含まれていないファイルには、いっさい変更を加えません。ゴミヘッダを発見すると、念のために「同名.BAK」のバックアップファイルにオリジナルを保存してから、ゴミヘッダを除去したファイルを元通りの名前で保存。例えば、test.jpg を処理した場合、もとの test.jpg は test.BAK に名前が変わり、処理後の軽くなった画像が test.jpg という名前になります。(もともと test.bak というファイルがあると上書きされてしまうのでご注意ください。)バックアップしたのを復活させたいときは、拡張子のBAKをjpgに変えるだけです。

オプション設定

Create Backup Files: 上記のバックアップファイルが不要なら、チェックを外す。Keep File Dates and Time: チェックが入っているとファイルのタイムスタンプを元のままにします。同期ミラーリングなどで、ファイルが更新されていることが検出されないと具合が悪いときはチェックを外すと、作成日時は元のままで、ゴミヘッダ除去を行った場合、行った時点が更新日時になります(ゴミヘッダが検出されなかったときは何もしないのでタイムスタンプは変わりません)。設定を保存するには、[Load/Save...] をクリックして、Save Settings を実行します。すると次回以降もその設定が使われます。そうしない場合、設定は一度限りで、次回起動時にはデフォルトに戻ります。

ダウンロード

Rainbow Softwareプログラムのページから。現時点のバージョンは v.2.6。

解凍して出てくる JPGCLN95.EXE がGUI版の本体です。どこにでも好きな場所にコピーしたらそれでインストール完了。すぐに使えます。

アンインストール

いちど起動して [Load/Save...] → Remove Settings とやってから、フォルダごと削除。

参考

巨大なゴミヘッダを吐き出すものの典型は Photoshop のようですが、デジカメなんかもあれこれコメントをつけてそうです。なお、優れたフリーウェア BTJ32 もほんのわずかですが、ヘッダにコメントを埋め込みます。File written by BTJ32 ver 5.2.0. Quality 73 といった約45バイト程度のものです。ヘッダにゴミをつけないツールもありますが、ウェブ用JPGの最終的な保存にはBTJ32がべんりでしょう(スライドバーを動かして画質の変化をにらみながら圧縮率を1%単位で調整できるので)

高価なパッケージソフトより無料のもののほうが鋭かったりするのは、べつに珍しいことじゃありません。

Jpeg-2000 なら JPG と同じサイズで画質がいいか?とかの話もありますが、そんなことより、ゴミヘッダ5KBを含む30KBなら、まずゴミヘッダなしの正味30KBに切り替えたほうが100%確実に「同じサイズで画質が良く」なるでしょう。

ところで、世の中のJPEGには平気で5KBのゴミヘッダがついている……ということは、逆に考えると、ゴミヘッダを除去したクリーンな状態のJPEG画像に改めて5KB程度の「ゴミ」を埋め込んでもぜんっぜんだれも気にとめない、ってことです。JPEGは昔から専用ツールによるインプラントにも使われてきましたが、もっと素朴に、BTJ32のコメントエディタなどでちょっとした秘密のメモを隠す場所としても使えるかもしれません。

リンク

前回の小物

この記事のURL

テキスト版省パケ版XML版



webmaster@faireal.net