この項目では、Emacsエディタ全般について説明しています。GNUプロジェクトによるEmacsについては「GNU Emacs 」をご覧ください。
Emacs (イーマックス、)は、その拡張性 を特徴としたテキストエディタ のファミリーである[ 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] 。
歴史
GNU Emacs におけるC ソースコード の編集
GNU Emacs からC++ コードを編集してコンパイル
Emacsのインタフェースはシンボリックス のスペースカデットキーボード の設計の影響を受けた[ 17] 。
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
テキスト端末 で動く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
GNU/Linux 上のXEmacs 21.5
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のフォークには以下のものがある:
様々なEmacsエディタ
Ruby のソースコードを編集中の、OpenBSD 5.3のタイニーEmacs風エディタmg (英語版 )
LISPマシン 用のEmacsであるZmacs (英語版 )
過去においては、各Emacsプロジェクトの目的は肥大化したEmacsの小規模なバージョン作成であった。GNU Emacsは当初、当時のハイエンドであった32ビット フラットアドレス空間と少なくとも1MiB のRAMを搭載するコンピュータを想定していたが、1980年代ではそのようなコンピュータはハイエンドなワークステーション やミニコンピュータ であったので、一般的なパーソナルコンピュータ のハードウェアで動作するようより小規模に再実装する必要があった。近年では小規模なEmacsクローンはソフトウェアインストールディスクに収まるよう設計されている[要出典 ] 。
小規模バージョン作成以外のプロジェクトの目的は、Emacs Lisp以外のLISP方言やLISPとは全く異なるプログラミング言語によるEmacsの実装である。Emacsクローンを以下に示す。ただし現在その全てが保守されているわけではない:
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 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教会 の聖人、St IGNUcius としてのリチャード・ストールマン
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] 。
問題点
この節には独自研究 が含まれているおそれがあります。 問題箇所を検証 し出典を追加 して、記事の改善にご協力ください。議論はノート を参照してください。(2011年5月 )
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 . https://www.gnu.org/software/emacs/manual/
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 . https://www.gnu.org/software/emacs/emacs-lisp-intro/
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 . http://www.oreilly.com/catalog/gnu3/
Finseth, Craig A. (1991). The Craft of Text Editing -or- Emacs for the Modern World . Springer-Verlag & Co. ISBN 978-1-4116-8297-9 . http://www.finseth.com/craft/
Thompson, Adrienne G. (2009年). “MACSimizing TECO ”. 2012年2月26日 閲覧。
脚注
注釈
出典
^ “/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 . http://www.multicians.org/mepap.html 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 . https://books.google.com/books?id=a_lea3-w-1kC&pg=PA408&dq=bucky+keyboard#PPA408,M1
^ 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. http://www.lysator.liu.se/history/garb/txt/87-1-emacs.txt 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 . http://pogue.blogs.nytimes.com/2007/08/29/be-careful-what-you-joke-about/ 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 Wiki Archived 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 閲覧。
外部リンク
ウィキメディア・コモンズには、
Emacs に関連するカテゴリがあります。
ウィキブックスに
Emacs 関連の解説書・教科書があります。