Emacs
GNU Emacsにおける複数のDiredバッファの編集 | |
開発元 | デイヴィッド・A・ムーン、ガイ・スティール・ジュニア |
---|---|
初版 | 1976年[1][2] |
プログラミング 言語 | LISP, C |
対応OS | TECO、クロスプラットフォーム、Unix系 |
種別 | テキストエディタ |
Emacs(イーマックス、[ˈiːmæks])は、その拡張性を特徴としたテキストエディタのファミリーである[3]。Emacsの中で最も広く使われている派生物であるGNU Emacs[4]の作者、リチャード・ストールマンは、自身の声明[5][6]において「たくさん模倣されたオリジナルのEMACSエディタの発明者 (inventor of the original much-imitated EMACS editor)」を自称し、GNU EmacsのマニュアルではEmacsを「the extensible, customizable, self-documenting, real-time display editor」(拡張およびカスタマイズが可能で、自己文書化を行い、リアルタイム表示を行うエディタ)であると説明している[7]。最初のEmacs開発が1970年代中盤に開始されてから、その直系の子孫であるGNU Emacsが製作され、その開発が2023年現在[update]も続いている。
Emacsはユーザインタフェースと10,000を超える組み込みコマンドを持ち、ユーザーは作業自動化のためにこれらのコマンドをマクロと組み合わせることができる。さらに深い拡張性を提供するLISPプログラミング言語の方言であるEmacs Lisp (ELispまたElispとも) はEmacs実装の主な特徴であり、Emacs Lispでユーザーや開発者はEmacs用の新しいコマンドやアプリケーションを書くことができる。Emacsの拡張機能として電子メール、ファイル、アウトライン、およびRSSフィードが書かれており[8]、それ以外にもELIZA、ポン、ライフゲーム、ヘビゲーム、およびテトリスのクローンもある[9]。ユーザーの中にはEmacs内部からテキスト編集だけでなくほとんど全ての作業を行うことができることに気づいた者もいる[10]。
原典であるEMACSは1972年にCarl Mikkelson、デイヴィッド・A・ムーン、およびガイ・L・スティール・ジュニアらによりTECOエディタ用のEditor MACroSのセットとして書かれたものであり[2][11][12][13][注 1]、TECOマクロエディタの概念に触発されている[14]。
最も有名かつ最も移植されたEmacsは、ストールマンによってGNUプロジェクトのために作成されたGNU Emacsである[15]。XEmacsは1991年にGNU Emacsからフォークされた派生物である。GNU EmacsとXEmacsは類似のLISP方言を使い、互いに互換性のある部分が大半である。
Emacsはvi (Vim) と並びUNIX文化における伝統的なエディタ戦争の主要な当事者である。Emacsは開発中であるオープンソースプロジェクトの中で最古のものである[16]。
歴史
[編集]Emacsは1970年代のMIT人工知能研究所(MIT AI研)で産声をあげた。 AI研で使われていたPDP-6やPDP-10のオペレーティングシステムはIncompatible Timesharing System (ITS) であり、そのデフォルトエディタはTECOというラインエディタであった。TECOは現在の一般的なテキストエディタとは違い、追加・編集・表示用にそれぞれ別々のモードが存在していた。そのため文字を入力しても即座に反映されるわけではなく、代わりにTECOコマンド言語の i 文字を入力して入力モードに切り替えてから必要な文字を入力し、最後に ESC 文字を入力してエディタをコマンドモードに再度切り替える必要があり(上書きが可能なため、同様のテクニックが使われた)、しかも入力モードで編集中の文字は画面に表示されなかった。なお、この振る舞いは現在も使われているedやviと同じである。
リチャード・ストールマンは、1972年と1974年にスタンフォード人工知能研究所を訪れ、Fred Wrightにより書かれたその研究所の「E」エディタを目にした[18]。Eの振る舞いは今のエディタの大半で使われている直感的なWYSIWYGであり、ストールマンはその機能に触発されてMITに戻った。 AI研ハッカーの一人であるCarl Mikkelsenは、利用者がキー操作するたびに画面表示を更新するControl-Rという表示・編集を組み合わせたモードをTECOに追加していた。ストールマンは、この更新が効率的に動くよう書き直し、任意のキー操作でTECOプログラムが動くように利用者が再定義できるマクロ機能をTECOの表示・編集モードに追加した[13]。
EにはTECOに不足していたランダムアクセス編集機能が搭載されていた。TECOはPDP-1の紙テープを編集するために設計されたページシーケンシャルエディタであるため、一度に1つの紙テープしか編集することしかできず、さらに紙テープのファイルに存在するページの順に編集しなければならなかった。Eはディスク上のページランダムアクセスを可能にするため、ファイルを構造化するというアプローチを採用していたが、ストールマンはTECOを修正してさらに巨大なバッファを効率的に処理できるようにするというアプローチを採用し、ファイル全体を単一バッファとして読み込み、編集し、書き込めるようにファイル管理方法を変更した。現在ではほとんどのエディタがこのアプローチを用いている。
新しいバージョンのTECOはまたたく間にAI研で評判となり、マクロを意味する「MAC」や「MACS」が語尾に付いた名前のカスタム・マクロの巨大なコレクションが溜まった。さらにその2年後、どんどんばらばらになっていくキーボード・コマンド・セットを1つに統合するプロジェクトをガイ・スティールが引き受けた[19]。ストールマンはスティールとハックしたある夜の後、新しいマクロ・セットの文書化や拡張の機能を含む実装を完成させた[13]。こうしてできあがったシステムはEditing MACroSやE with MACroSを意味するEMACSと呼ばれることになる。ストールマンによると、Emacsとしたのは「当時ITSで<E>が略称に使われていなかったから」である[20]。作り話であるHacker koanではケンブリッジの人気アイスクリーム店「Emack & Bolio's」にちなんで名付けられたとしている[21]。操作可能な最初のEMACSシステムは1976年後半に姿を現した[22]。
ストールマンはEMACSの過度のカスタム化や事実上の分裂の危険に気づいたため、ある使用上の条件をつけた[要出典]。彼は後に次のような文章を残している[22]:
- 「EMACSは、共同参加を基として頒布される。つまり改良点は全て、組み入れて頒布するために、私のところへ戻ってこなければならない」
原典であるEmacsはTECO同様にPDP-10上だけで動作した。Emacsの振る舞いはTECOのそれとは大きく異なっていてTECOとは独立した別のエディタとみなせるようになり、さらにEmacsは急激にITS上の標準編集プログラムとなった。Mike McMahonはEmacsをITSからTENEXやTOPS-20オペレーティングシステムに移植した。 初期のEmacsへの貢献者には、このほかKent Pitman、Earl Killian、Eugene Ciccarelliらがいる。1979年までに、EmacsはMIT人工知能研究所やMITコンピュータ科学研究所で使われる主要エディタとなった[23]。
その他の初期実装
[編集]その後、他のコンピュータシステム用に多くのEmacs風エディタが書かれた。これらにはMichael McMahonとDaniel WeinrebらがLISPマシン用に書いた EINE (Eine Is Not Emacs) とZWEI (Zwei Was Eine Initally)[24](なお、ZWEIはドイツ語で「2」の意味でもある。EINEが「1つの」(女性形)にあたるためのもじり。ストールマンの呼ぶEINEは「アイン」のように聞こえるが、ドイツ語の発音は「アイネ」に近い)、そしてOwen Theodore Andersonによって書かれたSINE (Sine Is Not Emacs) がある。WeinrebのEINEはLISPで書かれた最初のEmacsである。1978年にはハネウェルケンブリッジ情報システム研究所でBernard GreenbergによりMultics Emacsがほぼ全てをMultics MACLISPを用いて書かれ、その後Richard SoleyとBarry Margolinによりメンテナンスされた。GNU Emacsを含むEmacsのバージョンの多くは後に拡張言語としてLISPを採用することになる。UNIXで動作する最初のEmacs風エディタは、後にNeWSやJavaの開発で知られることになるジェームス・ゴスリングが1981年に書いたGosling Emacsであった。 これはCで書かれ、MocklispというLISP風構文の拡張言語を使っていた。Mocklispにはシンボルもリストもなく[25]、構文がLISP風なだけで本当のLISPではない。Gosling Emacsは、現在広く使われているフリーソフトウェアのGNU EmacsやMeadowとは異なりプロプライエタリソフトウェアであった[26]。
GNU Emacs
[編集]1984年、リチャード・ストールマンはプロプライエタリソフトウェアであったGosling Emacsのフリーソフトウェアによる代替物を作るべく、GNU Emacsに取り組み始めた。当初GNU EmacsはGosling Emacsをベースとしていたが、ストールマンはMocklispインタプリタを本物のLISPインタプリタに入れ替えてしまい、ほぼすべてのコードが入れ替わった。GNU Emacsは揺籃期のGNUプロジェクトがリリースした最初のプログラムとなった。GNU EmacsはCで書かれており、Cで実装されたEmacs Lisp (ELisp) を拡張言語として提供する。最初に広く頒布されたGNU Emacsのバージョンは1985年に登場した15.34だった。初期のGNU Emacsのバージョン番号は1.x.xのように最初の桁にCコアのバージョンを表すよう採番されていたが、バージョン1.12が出た後にメジャー番号が変わりそうにないため先頭の1をなくすことにしたので、バージョン番号は1から13にスキップした[27]。最初の公開リリースであるバージョン13は1985年3月に完成した。2014年9月にGNU emacs-develメーリングリストで、GNU Emacsにラピッドリリース戦略を採用し、将来的にバージョン番号をより迅速に増やしていくことが発表された[28]。
GNU Emacsは後にUNIXへ移植され、Gosling Emacsよりも多くの機能を提供した。それらの機能の中で代表的な物は、拡張言語であるフル機能を持ったLISPである。それから瞬く間にGNU EmacsはGosling Emacsに取って代わりUNIXのEmacsエディタのデファクトスタンダードとなった。Markus Hessは彼の1986 cracking spreeで、GNU Emacs電子メールサブシステムのセキュリティ上の弱点を悪用し、UNIXコンピュータ上でスーパーユーザーアクセス権を取得した[29]。
Emacsは、チューリング完全な言語を小さい中央コアの頂点で起動する階層型アーキテクチャを使用する。ストックされたEmacs頒布の約3/4(24.4現在では1611kLOCのうち1266)がEmacs Lisp拡張言語で書かれており[1]、一度Cによる中核部分(Emacs Lispインタプリタを実装し、24.4現在では247kLOCを占める)を移植すればEmacs Lispコードに実装された機能のセットは存在することになるので、Emacsを新しいプラットフォームに移植することはネイティブコードのみから成る同等のプロジェクトを移植するよりはるかに簡単である。Emacsの移植は理論上中核部のみを新しいプラットフォームへ移植すればよい。このため一度中核部が移植されれば、Cよりも高級な言語で実装された部分は最小限度の作業で済む。
GNU Emacsの開発は伽藍とバザールで伽藍式開発の例にあげられていたように、1999年まで比較的閉鎖的だったが、それ以降は公開された開発メーリングリストと匿名CVSアクセスを採用するようになった。GNU Emacsの開発は2008年までは単一のCVSトランクで行われていたが2009年末より分散型バージョン管理システムであるBazaarに切り替えられ、さらに2014年11月11日にGitへと移行した[30]。
ストールマンは長らくGNU Emacsの主要な管理者を務めていたが、時代と共にその役目から退いていった。2008年から2015年まで管理はStephan MonnierとChong Yidongに引き継がれている[31]。2015年にMITにおけるストールマンとの会合の後、John Wiegleyがメンテナとして指名された[32]。2014年の時点で、GNU Emacsはその歴史を通じて579人によりコミットされてきた[33]。
GNU Emacs のバージョンは 1985年のうちに 17 まであがったが、それ以降は更新は落ち着いた速度で行われている。
XEmacs
[編集]1991年初頭、GNU Emacs 19の初期α版をベースとしてJamie ZawinskiとLucid社の人たちによりLucid Emacsが開発された。コードベースはすぐに2つに分割され、開発チームは単一プログラムとして併合しようとすることをあきらめた[34] 。これはフォークしたフリーソフトウェアのうち初期の最も有名な例の1つである。Lucid EmacsはXEmacsと名前を変え、Emacsの中でGNU Emacsに次いで2番目に有名な派生となった[要出典]。XEmacsの開発は2009年1月に最新の安定版であるバージョン21.4.22がリリースされてから遅くなっていき、その一方でGNU Emacsは以前はXEmacsにしかなかった機能の多くを実装していった。このため一部のユーザーはXEmacsの死を宣言するようになった[35]。
その他のGNU Emacsのフォーク
[編集]XEmacsほど有名ではないGNU Emacsのフォークには以下のものがある:
- Meadow - Microsoft Windows用の日本語バージョン[36]
- SXEmacs - Steve YoungsによるXEmacsのフォーク[37]
- Aquamacs - GNU Emacsをベースとし、Macintoshユーザインタフェースと統合することに焦点を当てている(Aquamacs 3.2はGNU Emacsバージョン24をベースとし、Aquamacs 3.3はGNU Emacsバージョン25をベースとしている)。
様々なEmacsエディタ
[編集]過去においては、各Emacsプロジェクトの目的は肥大化したEmacsの小規模なバージョン作成であった。GNU Emacsは当初、当時のハイエンドであった32ビットフラットアドレス空間と少なくとも1MiBのRAMを搭載するコンピュータを想定していたが、1980年代ではそのようなコンピュータはハイエンドなワークステーションやミニコンピュータであったので、一般的なパーソナルコンピュータのハードウェアで動作するようより小規模に再実装する必要があった。近年では小規模なEmacsクローンはソフトウェアインストールディスクに収まるよう設計されている[要出典]。
小規模バージョン作成以外のプロジェクトの目的は、Emacs Lisp以外のLISP方言やLISPとは全く異なるプログラミング言語によるEmacsの実装である。Emacsクローンを以下に示す。ただし現在その全てが管理されているわけではない:
- MicroEMACS - Dave Conroyが初めに書き、後にDaniel Lawrenceが開発した、非常に可搬性のある実装である。リーナス・トーバルズの使うエディタでもある[38]。
- mg - 当初はMicroGNUEmacsといわれていたが後にmg2aといわれるようになった。MicroEMACSのパブリックドメインなフォークでありより密接にGNU Emacsを似ていることを意図された。OpenBSDでは既定でインストールされる。また、macOSにプリインストールされていたEmacsは、2018年にリリースされたmacOS Mojave (v10.14)の時点でさえ11年も前にリリースされたemacs22であったが、macOS Catalina (v10.15)よりmgに変更されている。
- NotGNU[39] - Julie Melbinにより書かれた小さくて高速なプロプライエタリなフリーウェア。MS-DOS、Win16、Win32、Linux版がある。
- JOVE (Jonathan's Own Version of Emacs) - Jonathan PayneによるUnix系システム用の非プログラマブルなEmacs実装である。
- MINCE (MINCE Is Not Complete Emacs) - Mark of the Unicorn製のCP/M用のバージョンで後にDOSにも移植された。MINCEはFinal Wordへと進化し、さらにFinal WordはボーランドのSprint (ソフトウェア)となった。
- Perfect Writer - CP/M実装であり、Kaypro IIおよびKaypro IVの最初期のリリースに付属のデフォルトワードプロセッサであるcirca 1982を含んだMINCEが由来。後にWordStarの代替品としてKaypro 10に提供された。
- Freemacs - テキストマクロ拡張ベースの拡張言語を使うDOSバージョンであり、DOSの64KiBフラットメモリ限界に収まる。
- GNU Zile - ZileはZile Is Lossy Emacsの再帰的頭字語であった[40]が、Luaで再度書き直されてZile Implements Lua Editorsとして拡張機能を提供する。新しいZileには未だにZemacsと呼ばれるLuaによるEmacs実装が含まれている。Ziと呼ばれるvi実装も含まれる。
- Zmacs - MIT LISPマシンとその子孫用で、ZetaLispで実装されている。
- Climacs - Zmacsに影響された派生で、Common Lispで実装されている。
- QEmacs - Fabrice Bellardによる、何千MiBものサイズになる巨大なファイルを迅速に編集可能でUTF-8が使用可能な小規模エディタ[41]。
- Epsilon - Lugaru SoftwareによるEmacsクローン。リリースにはDOS、Windows、Linux、FreeBSD、macOS、およびOS/2用のバージョンがバンドルされる。EpsilonはCの構文を持つLISPではない拡張言語を使用し、シングルタスクであるMS-DOSにおいて非常に高速な同時コマンドシェルバッファ実装を使っていた。
- PceEmacs - SWI-Prolog用のEmacsベースエディタ。
- EmACT - 1986年のChristian JullienによるMicroEmacsのフォーク。EmACTのソースコードはSourceForgeから利用できる[42]。
- Amacs - EmacsのApple II ProDOSバージョン。Brian Foxにより6502アセンブラで実装された[43][44]。
- Hemlock - 元々Spice Lispで書かれていたが、後にCommon Lispとなった。CMU Common Lispの一部。Zmacsに影響された。後に(Helixとして)Lucid Common Lisp、LispWorksおよびClozure CLプロジェクトによりフォークされた。Hemlockを提供することを狙いとした、Portable Hemlockプロジェクトも存在する。HemlockはいくつかのCommon Lisp実装で動作する。
Emacsエミュレーションを使うエディタ
[編集]- Yi - Haskellで書かれHaskellで拡張可能なエディタで、Emacsのエミュレーションモードがある。
- Joe's Own Editor - jmacsと呼ばれるEmacsキーバインディングをエミュレートする。
- JED - Emacsのエミュレーションモードがある。
- Eclipse - Emacsキーバインディングのセットを提供する。
- IntelliJ IDEA - Emacsキーバインディングのセットを提供する。
- Epsilon - Emacsエミュレーションをデフォルトとし、viモードをサポートする。
- Cocoa text system - Emacsと同じ用語を使用し、Emacs操作バインディングを多数理解する。これはネイティブユーザインタフェースがコントロールキーの代わりに(Superキーと等価な)コマンドキーを使うためである[45]。
- Sublime Text - SublemacsProプラグインによりEmacsの振る舞いをいくつかエミュレートできる[46]。
- Visual Studio Emacs Keys - Visual StudioユーザーにEmacsキーキーバインディングのセットを提供する。
- GNU Readline - 標準的なEmacs操作のキーバインディングを理解するラインエディタで、viエミュレーションモードも存在する。
- GNOME Builder - Emacs用エミュレーションモードを搭載している。
機能
[編集]Emacsは主にテキストエディタでありテキスト要素を操作するよう設計されているが、LaTeX、Ghostscript、ウェブブラウザといった外部のプログラムと通信することで、ワードプロセッサのように文書を整形したり印刷することができる。Emacsは語、文、そして段落といった異なるセマンティック要素や、関数のようなソースコードの構成要素を処理したり様々な色を付けるためのコマンドを提供する。さらにEmacsは編集コマンドのユーザー定義バッチ用にキーボードマクロも提供する。
GNU Emacsはリアルタイム表示エディタであるので、編集する度にその編集がオンスクリーンで表示される。これは現在のテキストエディタの標準的振る舞いであるが、EMACSは初期の段階でこの機能を実装していたため、viのように既存のテキストに新しい編集を挿入するために個別のコマンドを実行する必要がなかった。
viが編集のための基本的な機能のみを搭載していたのに対し、Emacsはインクリメンタルサーチ・無制限のアンドゥ・ヤンク(ペースト)用のスタック・複数のバッファ・バッファ上でシェルを実行・補完・言語ごとのモードなど、エディタとして考えられる限りの機能を詰め込んでいる。VimではEmacsと同等のことができるようになっているが、バッファの使い方はEmacsより控えめである。
一般的アーキテクチャ
[編集]文書への文字列挿入などの基本的な編集操作を含むEmacsの機能はほとんど全て、LISPの方言で書かれた関数で行える。GNU Emacsで使われるLISP方言はEmacs Lispとして知られている。Emacs Lisp層はCで書かれた基本的なサービスとプラットフォームを抽象化した概念の、安定したコアの頂点に位置している。LISP環境の変数と関数は、Emacsのリコンパイルや再起動をせずとも一時的に修正できる。
Emacsは追加属性を持つテキストを含んだバッファと呼ばれるデータ構造上で動作する。全てのバッファはその固有のポイント(カーソル位置)とマーク(ポイントと併せて、選択されたリージョンを区切るためのもう1つの位置)、(適用可能な場合)バッファが訪問しているファイル名、そして変数で編集や振る舞いを制御する現在のモードのセット(正確には1つの「主モード」[要説明]と複数の「副モード」[要説明]からなる)を保存している。対話的に実行可能なEmacs Lispコードをコマンドという。コマンドはキープレスなどのイベントにバインドでき、さらに名前でアクセスすることもできる。コマンドの中にはバッファから任意のEmacs Lispコードを評価するもの(例としてはeval-region
やeval-buffer
など)もある。
バッファはウィンドウ内に表示される。ウィンドウは端末画面やGUIウィンドウのタイリングされた部分である(その部分はEmacs用語でフレームと呼ばれ、複数のフレームが可能)。特に設定されていない場合、ウィンドウにはスクロールバー、行番号、一番上にあるヘッダ行(通常この行にはバッファタイトルやファイル名が表示される)、そして一番下にあるモード行(通常この行には現在のモードとバッファにおけるポイントの位置のリストが表示される)が含まれる。
同じバッファ上で複数ウィンドウを開くことができるため、例えば1つの長いテキストから異なるパートを見ることができる。さらに複数バッファで同じテキストを共有できるので、例えば言語が混在したファイルで異なる主モードを利用することができる。M-x <mode name>
により必要に応じてモードを手動で変更することもできる。
ふつう最下行にあるミニバッファは、Emacsが情報を受け取る場所である。検索対象のテキストや読んだり保存したりするファイルの名前などの情報をミニバッファに入力する。一部の入力ではタブキーを用いて入力を補完することができる。ミニバッファは通常1行しかないが、ここでも通常のバッファと同じ移動・編集コマンドを使うことができる。
カスタマイズ
[編集]- キーストロークをマクロに記録し、複雑な反復タスクを自動で再現できる。これは使用後に廃棄される各マクロによりアドホックベースに行われることが多い。ただしマクロを保存したり、後で呼び出すこともできる。
- 起動時にEmacsは
~/.emacs
と名付けられたEmacs Lispスクリプト(近年のバージョンでは~/.emacs.el
や~/.emacs.d/init.el
でもよい[47]。Emacsは最初に見つけたスクリプトを実行し、それ以外のスクリプトは無視する)を実行する。個人的なカスタマイズファイルは任意の長さや組み合わせでよいが、通常は以下のものが含まれる:- Emacsの振る舞いをカスタマイズするための、グローバル変数や関数呼び出しの設定。例としては
(set-default-coding-systems 'utf-8)
など。 - 標準的なキーバインディングを上書きしたり、ユーザーにとって便利なのにデフォルトでバインドされていないキーを持つコマンド用ショートカットを追加するためのキーバインディング。例 :
(global-set-key (kbd "C-x C-b") 'ibuffer)
- Emacsの拡張の読み込み、有効化、および初期化(Emacsには多くの拡張が付属しているが、デフォルトでは極少数しか読み込まれない)。
- 指定された時間に任意のコードを実行するイベントフックの設定。例としてはバッファの保存後に自動でソースコードをリコンパイルする
after-save-hook
など。 - 任意の複数ファイル実行。通常は長すぎる設定ファイルを管理できるように均等な部分に分割するためのもの(これらの個人的スクリプト用の伝統的な場所は
~/.emacs.d/
と~/elisp/
である)。
- Emacsの振る舞いをカスタマイズするための、グローバル変数や関数呼び出しの設定。例としては
- 「カスタマイズ」拡張により、ユーザーは
~/.emacs
に変数を設定するよりもユーザーフレンドリーな方法で、Emacs内部からインタラクティブなカラースキームのような設定プロパティを設定できる。これは検索、説明やヘルプ文、複数選択の入力、デフォルトへのリバート、再起動を必要としない起動中のEmacsインスタンス修正や、他のプログラムにおける好みの機能と類似した他の機能を提供する。カスタマイズされた値は~/.emacs
(または他の指定ファイル)に自動で保存される。 - テーマはフォントや色の選択に影響を与え、Emacs Lispファイルで定義されカスタマイズ拡張で選択される。
Emacsは、プログラマが単一インターフェースでコードを編集、コンパイル、デバッグするような統合開発環境 (IDE) としても使うことができる。
このような編集機能にとどまらず、Emacs LispはTCP/IP通信や外部プロセスの起動などの機能を持っており、テキストエディタとしては一般的でない機能も多くEmacs Lispで記述されている。これらの機能を利用した様々なアプリケーションソフトウェアが書かれてきた。Emacsはこれらのアプリケーションソフトウェアを動作させる実行環境となっている。外部プロセスとして、UNIXのプロセスを起動する場合、Emacs はプロセスのフロントエンドプロセッサとして動作する。例えば、LISP を Emacs から起動すると、閉じカッコ")"がキーボードから入力された時それに対応する開きカッコ"("をハイライトするようなマクロを組んでおくことで、カッコの確認をしながら入力が可能である[48]。
ライブラリーは、インターネットで見付けることができる。 新しいライブラリーを投稿するためのUsenetニュースグループgnu.emacs.sourcesまである。一部のライブラリーは、最終的にEmacsに取り込まれて、「標準」ライブラリーとなる。
GNU Emacs 24では、パッケージマネージャが内蔵された。公式のパッケージアーカイブであるGNU ELPA(Emacs Lisp Package Archive)[49]のほか、いくつかのアーカイブを扱うことができる。
自己文書化
[編集]Emacsには最初から各個別のコマンド、変数、内部関数の説明文字列を表示する、強力なhelpライブラリが付属していた。このため通常の機能や現在の状態の情報をユーザーに提供するので、Emacsは自己説明的だと評される。各関数には説明文字列が含まれていて、要求に応じてユーザーに表示される。その後関数に説明文字列をつける習慣は、LISP、Java、Perl、およびPythonといったさまざまなプログラミング言語に広まった。このヘルプシステムにより、ユーザーは組込みのライブラリや追加されたサードパーティーのライブラリのどちらからも各関数用の実際のヘルプコードを取得できる。
Emacsには組み込みのチュートリアルもある。編集ファイルを指定せずEmacsを起動すると、簡単な編集コマンドの実行方法とチュートリアルを呼出す方法についての説明が表示される。このチュートリアルはStuart Cracraftとストールマンによって作られたものである。
GNU Emacsには組込みの説明文字列のほかにも、ストールマンの執筆したGNU Emacs Manualの電子コピーがついており、組込みのInfoブラウザで閲覧することができる。電子版のほかに、3種のマニュアルがフリーソフトウェア財団から書籍のかたちで刊行されている。
XEmacsの場合、ソフトウェア本体と同時にGNU Emacs Manualからフォークした同様のマニュアルがある他、Bill Lewis、ストールマン、Dan Laliberte共著のEmacs Lisp Reference Manual、Robert Chassel著のProgramming in Emacs Lispも含まれている。
- texinfoはGNU Emacsの標準ドキュメントシステムであり、Emacsのマニュアルはtexinfoでドキュメント化されている。texinfoはTeXをベースにしたマークアップ言語を使って記述し、ハイパーテキスト的なブラウジング・検索が可能なオンラインドキュメントinfoとして使用することも、TeXを経由して組版されたペーパドキュメントとしても利用することができる。
文化
[編集]Emacs教会
[編集]Emacs教会 (英語: Church of Emacs) とはEmacsユーザーによって作られたパロディ宗教である[50]。Emacs教会はviを「獣の数字」である(ローマ数字ではvi-vi-viは666を表すため)としているが、viのユーザーに反対しているわけではない。むしろプロプライエタリソフトウェアをアナテマと呼んでいる(「viのフリーソフトウェア版を使うことは罪というより苦行である[51]」)。このパロディ宗教をサポートするためのEmacs教会のニュースグループとしてalt.religion.emacs,[52]が存在する。Emacsユーザーの中には「よりよいものを真似る」ことを試みたとして、viの支持者は対抗としてviカルト (英語: Cult of vi) を作成した。
ストールマンは冗談で自身をEmacs教会の聖人 (英語: saint) であるSt IGNUciusとしている[53]。
Emacs小指
[編集]Emacsの修飾キーへの強い依存が反復性過労障害となるというフォークロアはEmacs小指 (英語: Emacs pinky) と呼ばれる[54]。
ユーザーは様々なアプローチでEmacs小指に対処してきた。ソフトウェア側の手段には以下のようなものがある[55]:
- CapsLockキーをコントロールキーの代わりにするようにキーレイアウトをカスタマイズする[56]。類似のテクニックにはCapsLockキーを追加のコントロールキーに定義したり、コントロールキーとメタキーを代わりにする。このテクニックもEmacs小指に対して特に推奨されている。
- EmacsにXwritsや組み込みの
type-break-mode
といった、ユーザーに定期的に休息を取らせるようなソフトウェアを入れる。 - 最初に文字を尋ねてから、カーソルの動きに対応したアクセスキーでその文字が出現するようにする、
ace-jump-mode
[57]のようなパッケージや、類似の階層ナビゲーションを提供するelisp拡張を使う。 - 先進的なVimエミュレーション層の
evil-mode
。 - Vimのように修飾キーなしでEmacsコマンドを入力するためのモードによるアプローチを提供する
god-mode
。 - Spacemacsが提供するカスタマイズされたキーレイアウトの使用。
spacemacs
は制御シーケンス用の主要なキーとしてスペースキーを使うプロジェクトであり、evil-mode
とgod-mode
も二つとも重点的に組み込んでいる[58]。 - キーの組み合わせのキーシーケンスを変えるスティッキーキーの使用[59]。
- 基本的なテキスト編集や、さらに進んだ機能のためのEmacsスキーム用にviキーレイアウトを使えるようにする、Emacsの組み込み
viper-mode
の使用[60]。 - スペースキーのようなより快適にアクセスできるキーへのもう1つの役割の付与。もう1つの役割を割り当てられたキーは、他のキーと組み合わせて押すことでコントロールキーとして機能する。エルゴノミクスキーボードや、日本語キーボードのようにスペースキーに隣接するより多くのキーを持つキーボードを使う。日本語キーボードはメタキーやシフトキー以外の修飾キーの親指操作が可能である[61]。
- 制限されたキーバインディングの人間工学サブセットを使ったり、
M-x <command-name>
をタイプして他の機能にアクセスする。M-x自体もリバウンドできる。 - 音声入力によるEmacs操作。
- Emacsと相互作用せずに毎日のタスクを行うために十分なElispを書く。
ハードウェアによる解決法としては、修飾キーを親指で簡単に操作できるKinesis Contoured Keyboardや、手の平で押せるようキーボードの両側に対称的に手の平で押すことができる巨大な修飾キーを配置したMicrosoft Natural keyboardがある[54]。フットペダルも利用できる。
Emacsが開発されたスペースカデットキーボードは、スペースキーに隣接したコントロールキーが巨大で親指が届き易かった[62]。
用語
[編集]英語においてboxenやVAXenのように、emacsという単語の複数形をemacsenと綴ることもある[63]。
問題点
[編集]この節には独自研究が含まれているおそれがあります。 |
- viなどにくらべて起動が遅い。ただし、Emacsは立ちあげっぱなしにしておく使い方をすることが可能であり、長い起動時間は問題にならないという反論もある。
- Emacsではファイラもオプションの設定画面も通常のエディタ画面と同じ操作が可能であるという特徴があるが、ダイアログボックスなどを使ったGUIに慣れたユーザーにとって、このようなUIはなじみにくい。
- カスタマイズ可能な機能の数が極端に多く、何を設定したらいいのかわかりづらい。
- Emacs Lisp により拡張機能が作りやすいため、類似した機能を実現した多数の実装が乱立しやすい。
起動の遅さ
[編集]EmacsのLispベースの設計の欠点は、Lispコードの読込み、解釈 に伴う性能への負荷である。 Emacsが最初に実装されたシステムでは大抵、競合するテキストエディタよりかなり遅かった。このことをジョークにした、頭文字による略語がEMACSになる文がいくつか存在する(このようなジョークは他にも存在し、例えばユーザー・インターフェースをネタにした (Escape Meta Alt Control Shift) などがある)。
- Eight Megabytes And Constantly Swapping[64][65](8MBでちょくちょくスワップ - 8MBのメモリーが広かった時代の話)
- Emacs Makes A Computer Slow(Emacsはコンピュータを遅くする)
- Eventually Mallocs All Computer Storage(結局コンピュータの全記憶装置をmallocする)
- Eventually Makes All Computers Sick(結局全コンピュータをビョーキにする)
ただし、最近のコンピュータは十分速くなり、以前言われていたほどEmacsを遅いと感じることはめったになくなった。実際、Emacsは最近のワードプロセッサよりも素速く立ち上がる。
さらに、GNU Emacs 23以降はEmacsをサーバープログラムとして立ち上げておくデーモンモードが追加された。この場合、Emacs本体はOS起動時に自動的に一度起動するだけなので、速度は問題にならない。
関連項目
[編集]注釈
[編集]- Ciccarelli, Eugene (1978). An Introduction to the Emacs Editor. Cambridge, Massachusetts: MIT Artificial Intelligence Laboratory. AIM-447 PDF
- Stallman, Richard M. (1981) [1979]. EMACS: The Extensible, Customizable, Self-Documenting Display Editor. Cambridge Massachusetts: MIT Artificial Intelligence Laboratory. AIM-519A PDF HTML
- Stallman, Richard M. (2002). GNU Emacs Manual (15th ed.). GNU Press. ISBN 1-882114-85-X
- Stallman, Richard M. (2002年). “My Lisp Experiences and the Development of GNU Emacs”. 2007年2月1日閲覧。
- Chassel, Robert J. (2004). An Introduction to Programming in Emacs Lisp. GNU Press. ISBN 1-882114-56-6
- Glickstein, Bob (April 1997). Writing GNU Emacs Extensions. O'Reilly & Associates. ISBN 1-56592-261-1
- Cameron, Debra; Elliott, James; Loy, Marc; Raymond, Eric; Rosenblatt, Bill (December 2004). Learning GNU Emacs, 3rd Edition. O'Reilly & Associates. ISBN 0-596-00648-9
- Finseth, Craig A. (1991). The Craft of Text Editing -or- Emacs for the Modern World. Springer-Verlag & Co. ISBN 978-1-4116-8297-9
- Thompson, Adrienne G. (2009年). “MACSimizing TECO”. 2012年2月26日閲覧。
脚注
[編集]注釈
[編集]- ^ 他の共同制作者としてリチャード・ストールマンがクレジットされることが多いが、ダニエル・ウェインレブは「(TECOベースである)オリジナルのEmacsはガイ・L・スティール・ジュニアとデイヴィッド・ムーンが開発・設計した。彼らがEmacsを動くようにした後で、MIT AI研における標準テキストエディタとして確立されていき、ストールマンがそのメンテナンスを引き継いだ」と記している。ムーン自身は「私が覚えている限り、それは全て真実だ。しかし公正を期して言えば、ストールマンがガイと私からEmacsを『解放した』後、ストールマンがEmacsを大幅に改善したと言わなければならない」と応えた。以下を参照 : ウェインレブ, ダニエル (November 11, 2007), “Rebuttal to Stallman’s Story About The Formation of Symbolics and LMI”, Dan Weinreb's blog: software and innovation, オリジナルのJanuary 1, 2009時点におけるアーカイブ。
出典
[編集]- ^ “/EmacsReleaseDates”. 2017年11月1日閲覧。
- ^ a b Zawinski, Jamie (2005年6月21日). “Emacs Timeline”. 11 August 2015閲覧。
- ^ “A Tutorial Introduction to GNU Emacs”. 2017年5月15日閲覧。 “For an editor to be called "emacs" the main requirement is that it be fully extensible with a real programming language, not just a macro language.”
- ^ “GNU Emacs Pocket Reference”. 2017年11月1日閲覧。 “GNU Emacs is the most popular and widespread of the Emacs family of editors.”
- ^ “最初の声明”. FSF. 2023年9月27日閲覧。
- ^ “Initial Announcement”. FSF. 2023年9月27日閲覧。
- ^ “GNU Emacs Manual”. GNU Emacs Manual. FSF. 24 November 2012閲覧。
- ^ “Introducing Elfeed, an Emacs Web Feed Reader”. 2016年6月12日閲覧。
- ^ “Amusements”. 2017年11月1日閲覧。 “Finally, if you find yourself frustrated, try describing your problems to the famous psychotherapist Eliza. Just do M-x doctor.”
- ^ “A Guided Tour of Emacs”. 2016年6月12日閲覧。 “Some users find that they can do almost all of their work from within Emacs.”
- ^ Greenberg, Bernard S. (1979). Multics Emacs: The History, Design and Implementation 2016年6月12日閲覧。
- ^ “GNU Emacs FAQ”. 2016年6月12日閲覧。
- ^ a b c Adrienne G. Thompson. “MACSimizing TECO”. 2016年6月12日閲覧。
- ^ “A history of Emacs”. XEmacs Internals Manual (2006年12月11日). 2007年8月22日閲覧。
- ^ Allombert, Bill. “Debian Popularity Contest”. Editors report. Debian. 22 November 2011閲覧。
- ^ “The 10 oldest, significant open-source programs”. 2017年11月1日閲覧。
- ^ Raymond, Eric S.; Cameron, Debra; Rosenblatt, Bill (1996). Learning GNU Emacs, 2nd Edition. Sebastopol, CA: O'Reilly. pp. 408–409. ISBN 1-56592-152-6
- ^ Arthur Samuel (March 1980). “Essential E”. 2011年8月1日閲覧。[リンク切れ]
- ^ “EMACS vs. vi: The endless geek 'holy war'”. 2016年6月12日閲覧。 “"EMACS as such actually started out as a standards project," emails Guy Steele”
- ^ Stallman, Richard M. (1987年). “The EMACS Full-Screen Editor”. GARB (Lysator, Linköping University) (Maj 1987): pp. 8–11 2007年9月14日閲覧。.
- ^ “The Emac Bolio Name Koan”. David G. Wiseman: Stories of Computer Folklore (1992年2月10日). 2016年6月12日閲覧。 “A cocky novice once said to Stallman: 'I can guess why the editor is called Emacs, but why is the justifier called Bolio?'. Stallman replied forcefully, Names are but names, Emack & Bolio's is the name of a popular ice cream shop in Boston town. Neither of these men had anything to do with the software.' His question answered, yet unanswered, the novice turned to go, but Stallman called to him, 'Neither Emacs nor Bolio had anything to do with the ice cream shop, either.'”[リンク切れ]
- ^ a b Stallman, Richard (26 March 1981). EMACS: The Extensible, Customizable, Self-Documenting, Display Editor (Technical report). MIT AI Lab. AI Memo 519a. 2022年6月7日閲覧。
- ^ Leigh Klotz (2007年8月29日). “email quoted in "Be Careful What You Joke About"”. The New York Times 2010年5月1日閲覧。
- ^ “Comment by ZWEI's author Dan Weinreb”. 2016年6月12日閲覧。 “I wrote the second Emacs ever: the Lisp machine implementation, whose spec was "do what Stallman's PDP-10 (original) Emacs does", and then progressed from there. There's just a whole LOT of it. It took me and Mike McMahon endless hours to implement so many commands to make ZWEI/Zmacs.”
- ^ RMS Lecture at KTH: Japanese
- ^ プロプライエタリソフトウェアとは、ソースコードが公開されていないソフトウェアで、プログラムを自由に配布や改変、逆コンパイルをすることができないものを指す用語である。
- ^ “A History of Emacs”. 2016年6月12日閲覧。
- ^ “emacs-devel msg 00872 (2014-09-29)”. 2016年6月12日閲覧。 “In retrospect 24.3 should have been named 25.1 and 24.4 should have been named 26.1. The .N thingy should really be kept only for bug-fix releases and neither of 24.3, 24.4, nor the previously planned 24.5 are bug-fix releases.”
- ^ Stoll, Clifford (1988). “Stalking the wily hacker”. Communications of the ACM 31 (5): 484?497. doi:10.1145/42411.42412
- ^ “New Git repository is up.”. 2016年6月12日閲覧。
- ^ “Re: Looking for a new Emacs maintainer or team”. gnu.org Mailing List. 2008年2月23日閲覧。; see also "Stallman on handing over GNU Emacs, its future and the importance of nomenclature"
- ^ “Emacs gets new maintainer as Richard Stallman signs off”. 2017年11月1日閲覧。
- ^ “Ugliest…repository…conversion…ever”. 2016年6月12日閲覧。 “twenty-nine years of continuous development by no fewer than 579 people”
- ^ Stephen J., Turnbull. “XEmacs vs. GNU Emacs”. 2012年10月2日閲覧。
- ^ “XEmacs is Dead. Long Live XEmacs!”. 2016年6月12日閲覧。
- ^ FrontPage - Meadow WikiArchived 2012-02-16 at the Wayback Machine.
- ^ “SXEmacs Website”. Sxemacs.org (2009年10月11日). 2009年11月8日閲覧。
- ^ http://www.stifflog.com/2006/10/16/stiff-asks-great-programmers-answer/
- ^ “NotGNU Emacs Editor (Author's Official Download Site)”. Notgnu.org (2004年1月15日). 2009年11月8日閲覧。
- ^ “Zile home page”. 2016年6月20日閲覧。
- ^ “QEmacs Homepage”. Fabrice.bellard.free.fr. 2009年11月8日閲覧。
- ^ Christian Jullien. (1986年). “EmACT on sourceforge”. Christian Jullien. 31 December 2011閲覧。
- ^ “AMACS source”. 2016年6月12日閲覧。
- ^ “apple2.org”. 2016年6月12日閲覧。
- ^ “Cocoa text system”. 2016年6月12日閲覧。
- ^ “SublemacsPro plugin for Sublime Text”. 2016年6月12日閲覧。
- ^ “Init file”. 2016年6月20日閲覧。
- ^ 村井純、井上尚司、砂原秀樹『プロフェッショナルUNIX』株式会社アスキー、1986年1月15日、243頁。ISBN 4-87148-184-0。
- ^ https://elpa.gnu.org/packages/
- ^ “Saint IGNUcius - Richard Stallman”. 29 January 2015閲覧。
- ^ “The unabridged selective transcript of Richard M Stallman's talk at the ANU”. 29 January 2015閲覧。
- ^ alt.religion.emacs newsgroup
- ^ Saint IGNUcius - Richard Stallman
- ^ a b “How To Avoid The Emacs Pinky Problem”. Xahlee.org. 2009年11月8日閲覧。
- ^ “EmacsWiki: Repeated Strain Injury”. 29 January 2015閲覧。
- ^ “Moving The Ctrl Key”. EmacsWiki. 2009年11月8日閲覧。
- ^ “EmacsWiki: Ace Jump”. 29 January 2015閲覧。
- ^ “Spacemacs”. 2015年4月20日閲覧。
- ^ BayleShanks (2009年10月7日). “Sticky Modifiers”. EmacsWiki. 2009年11月8日閲覧。
- ^ “Viper Mode”. EmacsWiki. 2009年11月8日閲覧。
- ^ “At Home Modifier by Evdev”. 2015年4月14日閲覧。
- ^ “Why Emacs's Keyboard Shortcuts are Painful”. 2016年6月12日閲覧。
- ^ “VAXen”. Catb.org. 2009年11月8日閲覧。
- ^ GLYN MOODY 小山祐司監訳『ソースコードの反逆』株式会社アスキー、2002年6月11日、288頁。
- ^ “Some funny acronym expansions of Emacs”. 7 Nov 2021閲覧。
外部リンク
[編集]- 公式ウェブサイト
- Reviewed entry in the Free Software Directory.
- Wikemacs
- EmacsWiki
- EmacsFamily
- List of Emacs implementations
- Architectural overview
- Famous Emacs users
- One of the Oldest Rivalries in Computing: Emacs vs Vi
- emacs GNU Savannah(サバンナ)
- 井田昌之によるBIT誌上の連載「Emacs解剖学」(Internet Archiveのキャッシュ)
- EmacsWiki – Emacsの文書化や議論専用のコミュニティー・サイト
- Emacsの実装一覧(Emacs Implementation)