New Immissions/Updates:
boundless - educate - edutalab - empatico - es-ebooks - es16 - fr16 - fsfiles - hesperian - solidaria - wikipediaforschools
- wikipediaforschoolses - wikipediaforschoolsfr - wikipediaforschoolspt - worldmap -

See also: Liber Liber - Libro Parlato - Liber Musica  - Manuzio -  Liber Liber ISO Files - Alphabetical Order - Multivolume ZIP Complete Archive - PDF Files - OGG Music Files -

PROJECT GUTENBERG HTML: Volume I - Volume II - Volume III - Volume IV - Volume V - Volume VI - Volume VII - Volume VIII - Volume IX

Ascolta ""Volevo solo fare un audiolibro"" su Spreaker.
CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Emacs - Wikipedia

Emacs

出典: フリー百科事典『ウィキペディア(Wikipedia)』

GUI環境でのGNU Emacs起動時画面
GUI環境でのGNU Emacs起動時画面

Emacsイーマックス)とは、テキストエディタの種類の1つである。 vi と並び、UNIX のプログラマを中心としたコンピュータ技術者に人気のある、高機能でカスタマイズ性の高いプログラマ向けスクリーン・エディタの種類の名前である。

GNUプロジェクトの一部であるGNU Emacsは活発に開発中で、もっとも人気のあるバージョンだ。 The GNU Emacs Manualは、Emacs自身を「the extensible, customizable, self-documenting, real-time display editor. (拡張可能でカスタマイズ可能で、自己説明的で、リアルタイム表示を行うエディタだ。)」と説明している。 これはまた、もっとも移植性に富み、移植のされたEmacsエディタの実装だ。 2006年時点で、GNU Emacsの最新リリースは、21.4版だ。

TECO エディタのエディタ・マクロ (Editor MACroS) 一式であるオリジナルのEMACSは、1975年に リチャード・ストールマン が、初めは ガイ・スティール とともに書いた。 ガイ・スティール、Dave Moon、Richard Greenblatt、Charles Frankstonらの書いた1組のTECOマクロ・エディタであるTECMACとTMACSのアイデアに触発されている。 何年もの間に多くの版のEmacsが現れた。 しかし、今日よく使われるのは、1984年にリチャード・ストールマンが始めいまだに管理しているGNU Emacs、1991年に始まったGNU Emacsの 分岐 でありいまだにほぼ互換の XEmacs だ。 どちらも強力な拡張言語である Emacs Lisp を使うので、コンピュータ・プログラム編集コンパイル から、ウェブの閲覧にいたる仕事をこなせる。

大文字で始まる「Emacs」と、小文字の「emacs」を区別する人もいる。 大文字で始まる「Emacs」は、リチャード・ストールマンの作ったエディタから派生したエディタ (特に GNU Emacs、XEmacs) を指し、小文字の「emacs」は、たくさんある個別のemacs実装を指す。 英語の"oxen"からの類推で、"emacs"という英語の複数形はemacsenとつづられる。 たとえば、Debian の互換Emacsパッケージは、emacsen-commonという。 Collins English Dictionaryには、emacsenという複数形だけが掲出されている 。

Unix 文化で、Emacsは、vi と並ぶ、伝統的 エディタ戦争 における双璧だ。

Emacs はエディタの範疇を超え、テキスト処理のための包括的ワークベンチ、あるいはアプリケーションソフトウェア実行環境であるといえる。Emacs は長い歴史を持っており、ゼロからの書き直しを含む改良を重ね、多くの派生エディタを生み、現在に至っている。現在主流の GNU Emacs の開発はもともとは UNIX 環境と VAX/VMS を主なターゲットとしていたが、各種の OS への移植もなされてきており、Mac OS XWindows など多くの環境で利用することができる。

目次

[編集] 歴史

Emacsは、1970年代の MIT AI研 で産声をあげた。 AI研の PDP-6PDP-10オペレーティング・システムだった Incompatible Timesharing System (ITS) への導入前の既定エディタは、TECO という 行エディタ だった。 今のテキストエディタと違い、TECOには (後のviのように) 入力・編集・表示用の別々のモードがあった。 TECOで文字を入力しても、文書に即座に出てくるわけではなかった。 編集されたテキストが画面に表示されてないとき、必要とされた文字が挿入されるようTECOのコマンド言語で一連の命令を書かなければならなかった。 この振舞は、今も使われている ed プログラムと同じだ。

リチャード・ストールマンは、1974年か1972年に スタンフォード人工知能研究所 を訪れ、ラボの「E」エディタを見た。 このエディタの振舞は、今のエディタのほとんどで使われている直感的な WYSIWYG であり、彼はその機能に触発されてMITに戻った。 AI研 ハッカー の一人、Carl Mikkelsenは、利用者がキー操作するたびに画面表示を更新する「Control-R」というリアルタイム表示・編集モードをTECOに追加していた。 ストールマンは、この更新が効率的にうごくよう書き直し、任意のキー操作でTECOプログラムがうごくように利用者が再定義できる マクロ 機能をTECOの表示・編集モードに追加した。

新版のTECOは、またたく間にAI研で評判となり、マクロを意味する「MAC」や「MACS」で終わる名前のカスタム・マクロの巨大なコレクションが、じきにたまった。 2年後、どんどんばらけるキーボード・コマンド・セットを1つに統合するプロジェクトを ガイ・スティール がひきうけた。 スティールとハックしたある夜の後、ストールマンは、新しいマクロ・セットの文書化や拡張の機能を含んだ実装を完成させた。 できあがったシステムは、"Editing MACroS" を意味するEMACSと呼ばれることになる。 ストールマンによると、Emacsとしたのは、「当時ITSで<E>が略称に使われてなかったから」。 また、ボストン の人気アイスクリーム屋「Emack & Bolio's」の店がMITから徒歩圏内にあった、とも言われている。 その店によく通っていた Dave Moon はその後、ITSで使われたテキスト整形プログラムをBOLIOと名づけた。 だが、ストールマンはアイスクリームを好きではなく、「Emacs」という名を選んだとき、それを知ってさえいなかった。 この無知は、ハッカー公案 (Hacker koan) のEmacs and Bolio の素となっている。

過度のカスタム化や事実上の分裂の危険に気づいたストールマンは、とある使用上の条件をつけた。 以下のように彼が後に書いたとおり。

「EMACSは、共同参加を基として頒布される。つまり、改良点はすべて、組み入れて頒布するために、私のところへ戻ってこなければならない」

オリジナルのEmacsは、TECO同様、PDPだけでうごいた。 そのうごきは、まぎれもないテキストエディタと考えられるくらい、TECOと異なっていた。 そして、急激にITS上の標準編集プログラムとなった。 当初、Michael McMahonによりITSから、Unixにではなく、TenexTOPS-20 オペレーティング・システムに移植された。 初期のEmacsへの貢献者には、このほか Kent Pitman、Earl Killian、Eugene Ciccarelli らがいる。

[編集] 他のemacsたち

その後、他のコンピュータ・システム用に、多くのEmacs風エディタが書かれた。 Michael McMahonとDaniel Weinrebらが、 SINE ("Sine Is Not Emacs")、 EINE ("Eine Is Not Emacs")、 ZWEI ("Zwei Was Eine Initally"、Lispマシン 用) を書いた (後者2つはドイツ語で、それぞれ1と2の意味。 正しいつづりはEINS。 ストールマンの呼ぶEINEは「アイン」のように聞こえるが、ドイツ語の発音は「アイネ」に近い)。 1978年、Bernard Greenberg は、ハネウェル のケンブリッジ情報システム研で、Multics Emacs を書いた。

Unix でうごいた最初のEmacs風エディタは、後に Javaプログラミング言語 の開発で知られることになる ジェームス・ゴスリング が1981年に書いたGosling Emacs だった。 これは C で書いてあり、Mocklisp なるLisp風構文の拡張言語を使っていた。 Mocklispにはシンボルさえなく[要出典]、構文がLisp風なだけで、本当のLispではない。 1984年、これは独占ソフトウェアだった

[編集] GNU Emacs

1984年、Gosling Emacsの フリーソフトウェア 版をつくるべく、ストールマンはGNU Emacsに取り組み始めた。 当初は、Gosling Emacsを基にしていたのだが、ストールマンはMocklispインタープリタを本物のLispインタープリタに入れ替えてしまい、ほぼすべてのコードが入れ替わった。 これは、揺籃期の GNUプロジェクト がリリースした初のプログラムとなった。 GNU Emacsは、Cで書いてあり、(Cで実装した) Emacs Lisp を拡張言語としている。 最初にひろく頒布されたGNU Emacsの版は、1985年に登場した15.34だった (2版から12版まではない。 初期のGNU Emacsは、「1.x.x」のように採番されていたが、1.12版の出た後、メジャー番号が変わりそうにないため、先頭の1をなくすことにした。 最初の公開リリース13版は、1985年3月にできた)。

Gosling Emacs同様、GNU EmacsもUnixでうごく。 だが、GNU Emacsには、拡張言語としてフル装備のLispなどの機能があった。 そのため、すぐGosling Emacsと入れ替わり、Unixでうごく事実上のEmacsエディタとなった。

伽藍とバザール で「伽藍」式開発の例にあげられていたように、GNU Emacsの開発は、1999年まで比較的閉鎖的だった。 それ以降、公開の開発メーリング・リストと匿名 CVS アクセスを採用している。 開発は、単一のCVSトランクである22.0.90版で進んでいる。 現在の管理者は、リチャード・ストールマン

[編集] XEmacs

1991年初頭、GNU Emacs 19の初期α版を基に、Lucid Emacsが、Jamie Zawinski とLucid Inc.の人たちにより開発された。 コードベースは、すぐに分割し、開発チームは、単一プログラムとして併合しようとするのをあきらめた[1]。 これは、分岐 した フリーソフトウェア・プログラムのうち初期の最も有名な例だ。 Lucid Emacsは、XEmacs と名前を変えた。 これとGNU Emacsが、人気では双璧となっている。 XEmacs の「X」は、グラフィカルユーザインターフェース としての X Window System に当てた初期の中心点からか、XEmacs開発者たちの妥協の産物として「大賛成というほどではない」(less than favorable) 名前からきている [1]。 GNU EmacsとXEmacsの両方とも、テキスト端末同様、グラフィカル・インターフェースをサポートしている。

[編集] その他の実装

GNU Emacsは当初、当時のハイ・エンドであった、32ビットのフラットアドレス空間、1 MiB のRAMをもつコンピュータを想定していた。 このため、小さな再実装への道がひらかれた。 そのうちきわだつものは、以下のとおり。

  • MicroEMACS: Dave Conroyが初めに書き、後にDaniel Lawrenceが開発した、非常に可搬性のある実装。リーナス・トーバルズの使うエディタ[2]
  • MG: 当初MicroGNUEmacsといわれていて、よりGNU Emacsに似ているMicroEMACSの分岐。OpenBSD では既定でインストールされる
  • JOVE (Jonathan's Own Version of Emacs): Jonathan Payneによる UNIX風 システム用の非プログラマブルなEmacs実装
  • Freemacs: テキスト・マクロ拡張を基本にした拡張言語をもちつつ、オリジナルの64 KiB のべたんメモリー制限に収まる DOS

[編集] Emacsの日本語化と国際化、Windowsへの移植

Emacs の日本語版として Nemacs (Nihongo Emacs) が、多国語対応版として MULE (MULtilingual Enhancement to GNU Emacs) が開発された。もし初めにより正確に表現されていたならば、"MULtiscript Enhancement"、すなわち「多用字系拡張」と呼ばれているべきだったかもしれない。エディターの扱う情報は、言語というより、むしろ文字であるからだ。Nemacs および MULE は電子技術総合研究所(電総研:現在の産業技術総合研究所)の半田剣一らによるものである。MULE はアラビア文字などの右から左へ記述する文字をふくめた複数の文字集合の1ファイル中での混在と編集が可能であり、中国や、タイ等多くの国や地域で規格化された文字集合をサポートするなど、先進的かつ実用的な多用字系処理系であった (しばしば多言語処理系ともいわれる)。MULE は現在では本家の Emacs に統合され(完全ではないという人もいる)、Emacs の一機能という位置づけになっている。

GNU Emacs (Nemacs) は東京大学の平野聡と大阪大学の東田学によって、フリーな DOS Extender、go32/djgpp により MS-DOS 上に移植され(後に emx にも対応)、demacs と呼ばれた。

Windows 上では、宮下尚 (himi) により Win32 アプリケーションとして Mule 2.3 をベースにした Mule for Win32、そして Emacs 20.X をベースにした Meadow(メドゥ)が移植・開発され、広く使われている。2004年7月7日には GNU Emacs 21.x をベースにした Meadow2 がリリースされた。GNU Emacs 自体も Windows 上でコンパイル(Visual C++ でコンパイルする方法と cygwin でコンパイルする方法がある)・実行が可能になってきてもおり、一時はそのバージョンを NTEmacs とよぶことがあった。日本ではフォントの扱いや IME の扱いが優れていること、日本語の情報が豊富なことから Meadow が良く使われている。

[編集] GUIへの対応

Emacs はもとは文字端末での利用を前提に設計されていたものであるが、少なくとも GNU Emacsバージョン18 では X Window System アプリケーションとしてコンパイルすることもできた。しかし、その実装方法は、自前の端末エミュレータを立ち上げ、その中で動くというものであり、ウィンドウシステムの持つ機能を十分に発揮するには至っていなかった。

Epoch はこの GNU Emacsバージョン18 を基にして X Window Systemマウスや複数ウィンドウ(フレーム)機能に拡張を施したものである。Lucid 社によって開発されたLucid Emacs は、Emacsバージョン19 をベースにしてさらに高度に GUI への対応が行われた。GNU Emacs も徐々に GUI には対応していったが、その開発スピードの遅さに不満をもったチームによって Lucid Emacs をベースにXEmacs のプロジェクトが開始された(加えて、由来がはっきりせずライセンス上 GNU Emacs に取り込めないコードの存在があったことも両者が分かれた理由の一つのようである)。XEmacs に対して、元の GNU Emacs を FSF Emacs と呼ぶこともある(XEmacs も GPL に従い、ある意味で GNU Emacs であるため)。

Emacsバージョン21 および XEmacs ではグラフィックス機能が強化されており、1バッファ中で複数のサイズやスタイルのフォントを混在させることもできる。

[編集] Emacs の仲間たち

Emacs の親戚を複数形で Emacsen とよぶことがある。Emacsen の公式の定義があるわけではないが、GNU Emacs を中心とした主なバリエーションには以下のようなものがある : Nemacs、Epoch、Nepoch、Mule、FSF Emacs (GNU Emacs)、XEmacs、Lucid Emacs、Meadow、NTEmacs

また、Emacsに似た機能を有するエディタとして Micro Emacs, Mg (Micro GNU Emacs), Ng (Nihongo Micro GNU Emacs) などがあるがこれらは一般に Emacsen には含めない。Emacs ライク (Emacs風) なエディタとなるとさらに多いが、マクロ言語として Common Lisp を採用した xyzzy などがある。

[編集] 受諾方針

GNU Emacs (や他のGNUパッケージ一般) では、著しい量のコード寄贈は、著作権 者が自身の著作権を適切に放棄または委譲したときだけ受理する方針になっている。 この方針の唯一の例外は MULE (MULtilingual Extension, Unicode や、他の言語の用字系を処理する高度なメソッドがある) のコードで、著作権者が日本国政府で著作権の委譲が不可能であった [2] 。 些細なコード寄贈やバグ修正には、この方針は適用されない。 些細かどうかの厳密な定義はないが、指針として10行未満のコードは些細とみなされる。 コピーレフト の強制を容易にするため、すなわちFSFが係争に入ったときに法廷でソフトウェアを守れるようにするため、そういう方針にしてあるのだ。 GNU Emacsの管理者によるこの要件は、寄贈分にも影響が出ることを想定している。 一部の人たちは、効率にまで影響が出ると言っている。 まじめな開発者を寄せ付けないこの要件により、GNU Emacsに大きなファイルを処理する力がない、という点で非難しているのだ。 だがストールマンによれば、機能面でどんなに良好であることよりも、プログラムが「自由」であることの方が、もっと重要であるのだ。 GNU Emacsの フリーソフトウェア・ライセンス 、つまり GNU General Public License と、多くの著作者と寄贈者による知的著作物であるフリーソフトウェア自体に、法的な信頼性をあたえているのが、この強制というわけだ。

[編集] 機能

本項の残りでは、今日ひろく使われているEmacs実装である最近のEmacs、すなわちGNU EmacsとXEmacsについて記述する。 「Emacs」という用語は、互いによく似かよっている両方のプログラムを指すのに使う。 GNU Emacsからの分岐として始まったXEmacsとその後継版は、GNU Emacsとおおかた互換性がある。

その神々しい背景にもかかわらず (というより、だからこそ)、Emacsは、実在する最高に強力な多目的テキストエディタだ。 ここで、これがテキストエディタであって、ワードプロセッサ ではないことを指摘しておかねばなるまい。 その莫大な機能一式は、文字の 書体 や文書の印刷より (それもEmacsで可能だが)、利用者のテキスト操作を支援するようあつらえられている。 一見単純に思えるテキスト編集、段落 の操作 (削除したり動かしたり、あるいはその中で動き回ったり) に始まり、ソースコード を読み易くする 構文の強調 や、利用者の定義する一括編集コマンドをうごかす「キーボード・マクロ」の実行にいたる能力をもたらす多数の機能が、Emacsにはある。

Emacsのこの豊かな機能は、その並外れた設計のたまものだ。 文書に文字を挿入するような基本編集操作から、ユーザー・インターフェースの構成にいたる、エディタのほぼすべての機能が、Emacs Lisp という Lispプログラミング言語 の方言で制御されている。 このLisp環境の中で 変数関数 までもが、再コンパイルどころか、エディタの再起動さえせずに、その場で修正できる。 その結果、Emacsの挙動は、直接利用者によって、または、(こちらのほうがふつうだが)「ライブラリー」「パッケージ」「拡張」ともいうEmacs Lispの本体を読み込むことにより、ほぼ無制限に変更できる。

Emacsには、多量のEmacs Lispライブラリーがあり、インターネット では「第三者」のライブラリーがもっとある。 プログラマ人気を反映して、多くのライブラリーは、コンピュータ・プログラミングの補助を実装している。 Emacsは、プログラマが単一インターフェースでコードを編集、コンパイルデバッグ するような 統合開発環境 (IDE) としても使える。 他のライブラリーは、さらに並外れた機能をもつ。 例のいくつかを以下に掲げる。

  • Calc: 強力な数値 計算機
  • Calendar-mode: 予定表と日記
  • Doctor: Rogerian psychotherapy 基本的な Rogerian 精神療法 を行なう ELISA の実装
  • Dunnet: テキスト・アドベンチャー
  • Ediff: 差分 ファイルを渡り歩く
  • Emerge: ファイルの比較と結合
  • Emacs/W3: ウェブブラウザ
  • ERC: IRC クライアント
  • Gnus: フル装備の ニュースリーダー 兼 電子メール・クライアント
  • MULE: Unicodeのような多言語で書かれたテキストの編集ができる
  • Info: オンラインヘルプ
  • Emacs-wiki: Emacsを使ったLispベースのwikiソフトウェア
  • Planner: Emacsを使った 個人情報管理
  • Tetris: テトリス
  • Pong: ポン

EmacsのLispベースの設計の欠点は、Lispコードの読込み、解釈 に伴う性能への負荷だ。 Emacsが最初に実装されたシステムではたいてい、競合するテキストエディタよりかなり遅かった。ジョークの頭字語がいくつかある。 Eight Megabyte And Constantly Swapping (8MBのメモリーが広かった時代の話。訳: 8MBでちょくちょくスワップ)、 Emacs Makes A Computer Slow (Emacsはコンピュータを遅くする)、 Eventually Mallocs All Computer Storage (結局コンピュータの全記憶装置をmallocする)、 Eventually Makes All Computers Sick (結局全コンピュータをビョーキにする)。 しかし、最近のコンピュータは十分速くなり、Emacsが遅く思うことはめったになくなった。 Emacsは実際、最近のワードプロセッサよりも素速く立ち上がる。 ほかに、ユーザー・インターフェースをネタにしたジョークの頭字語 (Escape Meta Alt Control Shift) がある。

[編集] プラットホーム

Emacsは、世界でもっとも多く 移植 された、自明でないコンピュータ・プログラムの1つだ。 Unix 風システム (GNU/Linux、各種 BSDSolarisAIXIRIXMac OS Xなど)、MS-DOS、Microsoft Windows、OpenVMS を含む、幅広い オペレーティング・システム でうごく。Unixシステムでは、フリーであれ独占的であれ、オペレーティング・システム にEmacsを同梱していることがよくある。

Emacsは、文字端末 でも、グラフィカル・ユーザー・インターフェース (GUI) 環境でもうごく。 GUIを構成するため、Unix 風システムでEmacsは、直接、あるいは、Motif、LessTif、GTK+ といった「ウイジット・ツールキット」をとおして、Xウインドー・システム を使う。 (Carbon インターフェースをとおして) Mac OS X [3][4] etc.), MS-DOS, Microsoft Windows[5][6][7]Microsoft Windows に固有のグラフィカル・システムを使うこともできる。 グラフィカル・インターフェースは、メニューバー、ツールバー、スクロールバー、コンテクストメニュー を提供する。

[編集] 編集モード

「主モード」という編集モードにEmacsが入ることで、編集するテキストの種類におうじて振舞を適応させる。 ふつうのテキスト・ファイル、多くの プログラミング言語ソースコードHTML 文書、TeXLaTeX の文書や、多くの他種のテキスト用に主モードが定義されている。 各主モードでは、一部のEmacs Lisp変数を調節したり、固有の型のテキスト用に都合よく振る舞うようにしてある。 特に、キーワード や コメント などの表示にさまざまな書体や色を用いた 構文の強調 をしばしば実装する。 主モードは、専用の編集コマンドも提供する。たとえばプログラミング言語用の主モードはしばしば、関数の先頭や末尾へ飛ぶコマンドを定義する。

「副モード」でEmacsの振舞をもっとカスタム化することもできる。 ある時点では、バッファにたいして紐づけできる主モードは1つだけだが、副モードは同時に複数を有効にできる。 たとえば、Cプログラミング言語の主モードは、人気の 字下げスタイル それぞれにさまざまな副モードを定義している。

[編集] カスタム化

Emacsの利用者の多くは、自分のニーズに合わせるためにエディタをカスタム化する。 Emacsをカスタム化する方法は大きく3つある。 第一は、customize拡張で、グラフィカル・インターフェースを使った色彩設計のような、通常のカスタム化変数を利用者が設定できる。 これは、Emacs Lispコードに取り組みたいと思わないEmacs初心者を想定している。

第二は、キー操作を マクロ にして、入り組んだ繰返しの仕事を自動化するよう再生することだ。 マクロは、保存して必要時に呼び出すこともできるのだが、たいていその場限りの使い捨てだ。

第三は、Emacs Lispを使ったEmacsのカスタム化だ。 利用者用のEmacs Lispコードは、Emacsの立上げ時に読み込まれる.emacsというファイルに保存する。 .emacsファイルは、変数や既定とは違う キーの結び付き を設定したり、利用者が便利と思ったコマンドを新しく定義したりするのに用いる。 大勢の上級利用者では、Emacsの既定の振舞からずいぶんかけ離れた風変わりなカスタム化のため、数百行にもおよぶ。

もしEmacs Lispコード本体が一般的に便利ならば、しばしばライブラリーとしてパッケージにされ、他の利用者に頒布される。 そういった第三者のライブラリーは、インターネットでたくさん見つかる。たとえば、Wikipediaの記事 を編集する wikipedia-mode というライブラリーがある。 新しいライブラリーを投稿するための Usenet ニュースグループ gnu.emacs.sources まである。一部のライブラリーは、最終的にEmacsに取り込まれて、「標準」ライブラリーとなる。

[編集] 説明文字列

Emacsには最初から、各個別のコマンド、変数、内部関数の説明文字列を表示する強力なhelpライブラリーがついてきた。 (これがもとになったのであろうか) この機能のため、Emacsは「自己説明的」といわれる (この用語は、説明文字列をEmacsで書いて編集できるという意味ではなく、Emacs自身が説明文字列を利用者に表示できるという意味で用いる)。 この機能のため、Emacsの説明文字列はアクセスしやすい。 たとえば、describe-keyコマンドをうごかすC-h kの後に単にキー操作を入力すると、そのキー操作に結び付いたコマンドを利用者に教えてくれる。 各関数には、説明文字列が含まれていて、具体的には必要におうじ利用者に表示するのに用いられる。 その後、関数に説明文字列をつける習慣は、LispJava といったさまざまなプログラミング言語に広まった。

Emacsのhelp体系は、初心者だけでなく、Emacs Lispコードを書く上級利用者にとっても役に立つ。 もし関数や変数の説明文字列が不十分ならば、組込みのライブラリーやインストールされた第三者のライブラリーのEmacs Lispソースコードの閲覧に、help体系を使うことができる。 それゆえ、Emacs自身でEmacs Lispをプログラムするのは、とても便利なのだ。

組込みの説明文字列のほかにも、Emacsには並外れた長く詳しくちゃんと書かれた マニュアル がある。 リチャード・ストールマンの執筆したGNU Emacs Manualの電子コピーが、GNU Emacsについてきて、組込みの Info ブラウザで閲覧できる。 XEmacsのばあい、ソフトウェア本体と同時にGNU Emacs Manualから分岐した同様のマニュアルがある。このほか、Bill Lewis、リチャード・ストールマン、Dan Laliberte共著のEmacs Lisp Reference Manual、Robert Chassel著のProgramming in Emacs Lispも入っている。 電子版のほかに、3種のマニュアルが、フリーソフトウェア財団 から書籍のかたちで刊行されている。

Emacsには、組込みの チュートリアル もある。 編集するファイルぬきでEmacsを立上げると、簡単な編集コマンドとチュートリアルの呼出し方の説明が、表示される。

[編集] 国際化

Emacsは、多数の 自然言語 で書いてあるテキストの編集をサポートしている。多種のアルファベット、用字系 (script)、書写体系 (writing system)、文化慣習のサポートがある。 ispell といった外部プログラムを呼び出すことで、多数の言語のつづりをチェックできる。 UTF-8 を含む多数の 符号化体系 をサポートしている。 XEmacs 21.5版には、部分的な ユニコード のサポートがある。 Emacs 21.4も同様だ。 Emacs 22ではもっとよくなることだろう。 これらの奮闘は、内部的にEmacs固有の符号化を用いていて、読出しと書込みに変換が必要になる。 XEmacs 21.5よりいくつか後の版や、たぶんEmacs 23では、Emacs内部の符号化は、UTF-8 になることだろう。

しかし、Emacsのユーザー・インターフェースは英語で、初心者用チュートリアルを除き、他の言語に翻訳されたことはない。

視力障害や全盲の利用者のため、音声フィードバックだけでエディタを使えるようになる Emacspeak という下位システムがある。

[編集] ライセンス

CとEmacs Lisp両方を含むソースコードは、GNU General Public License (GPL) 規約の下で調査、修正、再頒布のため自由に入手できる。 古い版のGNU Emacsの文献は、修正版の複製にあるテキストの挿入を要件とする個別のライセンスの下でリリースされた。 たとえば、GNU Emacs user's manualは、GNU Emacsの入手方法と、リチャード・ストールマンの政治的エッセー「GNU宣言」を含んでいた。 分岐時に古いGNU Emacsのマニュアルを継承したXEmacsのマニュアルも、同じライセンスだ。 一方、新しい版のGNU Emacsの文献は、GNU Free Documentation License を用い「不変部分」を利用して、同じ文書の包含を要求しつつ、マニュアルがGNU Manualsであることの宣言もしている。

[編集] 操作

Emacs のキー操作は、機能の名称をベースにした割り当てを行っており、キーボード上の文字の配置とは関係ない。たとえば、カーソルを上下左右に移動させる操作はそれぞれ C-p, C-n, C-b, C-f に割り当てられている(ここで C-? は Emacs で使われるキー操作の表記で、コントロールキーを押しながら別のキーを押すことをあらわす)が、それぞれ Previous, Next, Back, Forward という英単語の頭文字からきている(キー操作の説明は、C-h t(英語)あるいは C-h T(日本語)で表示させることができそのまま操作方法を学習することができる)。また、vi にある編集モード、カーソル移動モードなどのモードを持たないモードレスな操作モデルを持つ。

これらのすべてのキー操作は前述の Emacs Lisp を使ってカスタマイズ可能である。Emacs 上で vi の操作をエミュレートするエミュレータもいくつかある (vi-mode, viper-mode)。

[編集] コマンド

Unixのシェルから「emacs [ファイル名]」と打つことで、編集用にファイルを開くことができる。 もし入れた名前のファイルがなければ、その名前になるようにされる。 たとえば、「emacs xorg.conf」なら、現在ディレクトリーのxorg.confファイルを (もしあれば) 編集する。 しかし、Emacsの文献では、編集するファイルごとに別々のEmacsを立ち上げるという悪癖がつかないよう、ファイル名ぬきでEmacsを立ち上げることを推奨している。 単一のEmacsプロセスですべてのファイルに立ち寄る、というのが、Emacsの力を引き出す方法だ。

ふつうの編集モードでは、Emacsはまさに他のテキストエディタのように振る舞う。 (abc123など) 文字のキーは、対応する文字を挿入し、矢印キーで編集ポイントが動き、バックスペース で文字を削除する、などなど。 他のコマンドは、ControlキーMetaキー/Altキー を押しながらふつうのキーを入れる、修飾したキー 操作で呼び出す。 全編集コマンドは、実際はEmacs Lisp環境の関数を呼び出す。 文字aを挿入するコマンドのaをたたいただけでも、関数を (このばあいself-insert-commandを) 呼び出す。

以下にコマンドのいくつかを示す。 Emacsのコマンド一覧 にもっと示してある。 Controlキー [Ctrl] は大文字のC、MetaやAlt [Alt] キーは大文字のMで示す。

コマンド キー操作 説明
forward-word M-f 1語前に移る
search-word C-s バッファ内で語を探す
undo C-/ 最後の (または、重ね押しでもっと前の) 変更を取り消す
keyboard-quit C-g 今のコマンドを取りやめる
fill-paragraph M-q 段落のテキストを 追い込んで 「詰め」る
find-file C-x C-f エディタ・バッファの中で、(指定した名前の) ファイルに立ち寄る
save-buffer C-x C-s 現在のエディタ・バッファを立ち寄ったファイルに保存する
save-with-newname C-x C-w 現在のエディタ・バッファを指定した名前のファイルに保存する
save-buffers-kill-emacs C-x C-c 変更を保存して、Emacsを抜ける
set-marker C-[space]/C-@ 切取りやコピーする場所のマーカーを設定する
cut C-w マーカーとポイントの間のテキストを切り取る
copy M-w マーカーとポイントの間のテキストをコピーする
paste C-y Emacsのクリップボードからのテキストを張り付ける
kill buffer C-x k 現在のバッファを削除する

save-buffersave-buffers-kill-emacsなどのコマンドは、複数の修飾キー操作を使っていることに注意。 たとえば、C-x C-cは、Controlキーを押したままxを押し、その後、Controlキーを押したままcを押す。 単一のキー操作より多くのコマンドを結び付けることのできるこの手法は、Emacsによって普及した。 これは、Emacs直前のTECOマクロ・コレクションの1つであるTECMACからとられている。 これは、Visual Studioのような最近のコード・エディタに道をひらいた。

グラフィカル・インターフェースでEmacsを使っているとき、キーボードの代わりにメニューバーやツールバーからコマンドを呼び出せる。しかし、経験豊富なEmacsの利用者には、必要なキー操作をいったん記憶してしまえばより速く便利なキーボードのほうが、好まれている。

一部のEmacsコマンドは、外部プログラム (つづりのチェックに ispell や、プログラムのコンパイルにgcc) を呼び出し、プログラムの出力を解析し、Emacsに結果を表示することで、機能している。

[編集] ミニバッファ

ふつう最下行にあるミニバッファは、Emacsが情報を受け取る場所だ。検索対象のテキスト、読んだり保存したりするファイルの名前などの情報が、ミニバッファから入れられる。可能であれば、たいてい タブで補完 できる。

[編集] ファイルの管理と表示

Emacsは、バッファといういれものにテキストを維持している。 利用者は新しいバッファを作ったり、いらないものを消したりできるし、同時に複数のバッファが存在しうる。 ほとんどのバッファには、テキスト・ファイル から読み込んだテキストを置いてあり、利用者は、編集したり、ディスクに書き戻したりできる。 バッファは、helpライブラリーで表示される説明文字列のように、一時的なテキストを置くのにも使える。

文字端末とグラフィカル・モードの両方で,Emacsは、複数のバッファを同時に表示できるよう、編集領域を分割した区域 (これを1975年から「ウィンドウ」といっているのだが、別な「ウィンドウ」のあるシステムではややこしい) に分けることができる。 これにはいろいろと使いでがある。 たとえば、片方でプログラムの ソースコード を表示しつつ、もう片方でそのプログラムのコンパイル結果を表示できる。 グラフィカルな環境では,Emacsは、複数の グラフィカル環境のウィンドウ を開くことができるが、Emacsの用語ではこれを「フレーム」と呼ぶ。

[編集] Emacs小指

Emacsは、修飾キー、特に 小指 で押されるControlキーに依存しているため、重度のEmacs利用者は、小指に痛みをおぼえることがある (cf repetitive strain injury, fat-finger)。 これは俗に「Emacs小指」と称され、vi の主唱者がviに切り替えた理由としてしばしば引合いに出される。 これを緩和するため、多くのEmacs利用者は、左のControlキーとCapsLockキーを交換したり、両方をControlキーに定義したりする。修飾キーを 親指 で簡単に押せる位置に移動して痛みをやわらげる KinesisのContoured Keyboard や、手の平で押せるようキーボードの両側に大きな修飾キーを移動した Microsoft Natualキーボード がある。

[編集] アプリケーション実行環境としてのEmacs

Emacs Lisp はカスタマイズ言語にとどまらず、フル機能のプログラミング言語である。Emacs の機能の多くは Emacs Lisp で書かれている。つまり、Emacs の構造は、Emacs Lisp の実行機能(と基本的な編集機能)を持った Emacs Lisp インタプリタを中心に、Lisp で書かれた多くのコードによって実現されている。たとえば、Emacs は多くのプログラミング言語ごとの編集モードを持っており、自動的に段付けしたり、予約語やコメントに色をつけて表示してくれたり、しかるべく入力を補完してくれたりするのだが、これらの機能はすべて Emacs Lisp で書かれている。

このような編集機能にとどまらず、Emacs Lisp はTCP/IP通信や外部プロセスの起動などの機能を持っており、テキストエディタとしては一般的でない機能も多く Emacs Lisp で記述されている。これらの機能を利用した様々なアプリケーションソフトウェアが書かれてきた。メーラの Mew、mh-e、Wanderlust, ニュース・メールリーダのGnusWWWブラウザのEmacs W3、IRCチャットクライアント、端末エミュレータ (M-x terminal-emulator)、かな漢字変換SKK、Java統合開発環境JDEなどがそれにあたる。Emacs はこれらのアプリケーションソフトウェアを動作させる実行環境となっている。

[編集] 問題点

Emacs の欠点の一つとして、機能があまりにも多く、対応する Lisp コードを起動時にローディングする必要があるため、起動に時間がかかるという指摘がなされる(基本的な Lisp 関数群は実行バイナリにあらかじめ事前ロードされて組み込まれている)。マシンパワーの向上によって起動時間が短縮される傾向もあるのだが、新たなより高機能なバージョンが利用されるため、起動時間が短くなっているとの実感がないとされる。これらに対する反論の一つとして、Emacs の持つ機能は文書の編集にとどまらずコンピュータで一般的に行われる多くの操作を行うことができるため、Emacs をいったん立ち上げると一切終了しないような使い方が可能であり、長い起動時間は問題にならないと主張する人もいる。

第二に、ハードルが高いという指摘がある。特にかつての Emacs はカーソルキーが使えなかったために初心者は戸惑うことが多かった。メニューやツールバーもあるが、初心者は使いこなすのが非常に難しい。たとえば、Emacs 上のメーラでの検索操作は、Windows 上の一般的な GUI を使ったメーラである Outlook Express での「大文字小文字を区別する」「日付の範囲指定」といった設定ダイアログを伴う検索操作に比べると圧倒的に難しいといえる。それどころか、いきなり「M-x byte-compile-fileして、」などといったヘルプやREADMEが多く、一体なにをすればいいのか、MキーとXキーを同時押ししても起きない、わからん、などといった事態が発生しあきらめてしまう人も多い。さらに、Emacs の設定項目は GUI で設定できる項目もあるが、一般的な Windows 上の GUI アプリケーションである FirefoxInternet Explorer の設定ダイアログとくらべて充実しているとは言いがたく、直感的でもなく、設定ファイルを直接編集しなければならない場合も多い。しかしこの設定ファイルは Emacs Lisp のコードそのものなのである。設定のためだけにプログラミング言語である Emacs Lisp を習得しなければならない、という状況はエディタを使いたいだけのユーザにとっては許容しがたい。

第三に、エディタと Lisp 開発環境が融合していて開発しやすいためか、類似した機能を実現した多数の実装が乱立しやすい。特にメーラについては「自分向けのメーラ」的なバリエーションが乱立しており、混乱を招きやすい。

このような問題もあるが(あるからこそ)、特に Lisp がわかるプログラマにとっては人気が高いエディタである。

[編集] ドキュメントシステム

GNU Emacs のマニュアルは、Emacs 自身を以下のように説明している。

Emacs is the extensible, customizable, self-documenting real-time display editor.(Emacs は拡張可能でカスタマイズ可能で、自己ドキュメントを行うリアルタイム表示を行うエディタである)

self-documenting(自己ドキュメントを行う)とあるように Emacs はそれ自身のドキュメント化に力をおいたエディタである。具体的には以下の特徴を持つ。

  • ドキュメントシステム texinfo をもつ。texinfo は GNU Emacs の標準ドキュメントシステムであり、Emacs のマニュアルは texinfo でドキュメント化されている。texinfo は TeX をベースにしたマークアップ言語を使って記述し、ハイパーテキスト的なブラウジング・検索が可能なオンラインドキュメント info として使用することも、TeX を経由して組版されたペーパドキュメントとしても利用することができる。
  • Emacs のキーに割り当てられているすべての操作は Lisp 関数であるが、その Lisp コードのドキュメントコメントからキー操作の説明ドキュメントが生成される。これらのコメント=マニュアルは細粒度のコマンドごとのドキュメントであり、機能とドキュメントの乖離が起きにくくなっている。

[編集] 脚注

  1. ^ Stephen J., Turnbull. "XEmacs vs. GNU Emacs" .
  2. ^ http://www.stifflog.com/2006/10/16/stiff-asks-great-programmers-answer/
  3. ^ "Carbon Emacs パッケージ" .
  4. ^ "Aquamacs is an easy-to-use, Mac-style Emacs for Mac OS X" .
  5. ^ B, Ramprasad (2005-06-24). "GNU Emacs FAQ For Windows 95/98/ME/NT/XP and 2000" .
  6. ^ Borgman, Lennart (2006). "EmacsW32 Home Page" .
  7. ^ "GNU Emacs on Windows" Franz Inc.: 2006. .

[編集] 外部リンク

Static Wikipedia (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia February 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu