GNU Emacs (グヌー・イーマックス)は最も有名で、かつ最も多く移植されているEmacs テキストエディタ であり、GNUプロジェクト 創設者のリチャード・ストールマン により作成された。GNU Emacsは他のEmacs系エディタと同様に、チューリング完全 なプログラミング言語 で拡張可能である。GNU Emacsは「今日利用できる最もパワフルなテキストエディタ」と称されている[ 2] 。GNU Emacsは基盤となるシステムからの適切なサポートにより、複数の文字集合 を含むファイル を表示することが可能だが、1999年の時点で既にほとんどの人間言語を同時に表示することが可能であった[ 3] 。GNU Emacsはその歴史を通じてGNU プロジェクトの中心となるコンポーネントであり、さらにフリーソフトウェア運動 のフラグシップ である[ 4] [ 5] 。GNU Emacsは、他のEMACS派生と区別する場合にGNUMACS と略されることがある[ 6] 。GNU Emacsのうたい文句は「拡張可能で自己説明的なテキストエディタ」である[ 7] 。
歴史
GNUプロジェクト の創設者であり、GNU Emacsの作者であるリチャード・ストールマン
リチャード・ストールマンは1976年に初代のEmacs ("Editor MACroS") を書き、1984年にプロプライエタリ であるGosling Emacs のフリーソフトウェア による代替物を作成するため、GNU Emacsの作業を開始した。GNU Emacsは当初Gosling Emacsをベースとしていたが、ストールマンがGosling EmacsのMocklispインタプリタ を本物のLISP インタプリタへと置き換えようとしたところ、Gosling Emacsのコードの大半を書き換える必要があった。GNU Emacsは創生期のGNUプロジェクトがリリースした最初のプログラム となった。GNU EmacsはC言語 で書かれており、拡張用言語としてEmacs Lisp (ELisp) を提供する。Emacs LispもまたC言語で実装されている。最初の公式リリースであるバージョン13は1985年3月20日に発表された。最初に広く頒布されたGNU Emacsのバージョンは1985年に登場した15.34であった。GNU Emacsのバージョン番号は"1.x.x"のように、最初の桁がC coreのバージョンを表すよう採番されていたが、バージョン1.12が出された後でもC coreのメジャー番号が変わりそうにないため、先頭の1をなくすことにした。このため、バージョン番号は1から13にスキップした。そしてユーザーサイトによる変更を表すため、3番目のバージョン番号が新規に追加された[ 8] 。現在の採番スキームでは、2番目の数はリリースバージョンを表し、3つ目の数は開発バージョンを表している[ 9] 。
GNU Emacsは後にUNIX へと移植され、Gosling Emacsよりも多くの機能を提供した。その中でも特に代表的な機能は、GNU Emacsの拡張言語としてフル機能搭載LISPである。それから瞬く間にGNU EmacsはGosling Emacsに取って代わり、UNIX Emacsエディタのデファクトスタンダードとなった。Markus Hess (英語版 ) は彼の1986 cracking spreeで、GNU Emacs電子メールサブシステムのセキュリティ上の弱点を悪用し、UNIXコンピュータ上でスーパーユーザーアクセス権を取得した[ 10] 。
1999年まで、ユーザーがパッチやElispコードをnet.emacsニュースグループ に提出することが多かったが、現在と比べGNU Emacs開発への参加は制限されており、『伽藍とバザール 』において「伽藍」開発スタイルの例として挙げられた。それ以降、GNU Emacsプロジェクトは公開された開発メーリングリストと、匿名CVS アクセスを採用した。開発は2008年まで単一のCVSトランクで行われていたが、現在では分散型バージョン管理システム であるgit が使われている[ 11] 。
リチャード・ストールマンはGNU Emacsの主要なメンテナのままだったが、時代が進むにつれ役割から後退していった。2008年以降はStefan MonnierとChong Yidongがメンテナンスを監督するようになった[ 12] 。2015年9月21日にMonnierはEmacs 25の機能凍結をもって事実上のメンテナのまま辞任することをアナウンスした[ 13] 。2015年11月5日、長期に渡り貢献してきたJohn Wiegleyが新しいメンテナとなることがアナウンスされた[ 14] 。
ライセンス
CとEmacs Lispから成るGNU Emacsのソースコード は、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 であることも宣言している。
GNU Emacs(や他のGNUパッケージ一般)ではコピーレフト の強制を容易にするため、すなわちFSFが係争に入ったときに法廷でソフトウェアを守れるようにするため、著しい量のコード寄贈は著作権者が自身の著作権 を適切に放棄またはフリーソフトウェア財団に委譲したときだけ受理する方針になっている。 この方針の唯一の例外はMule(MULtilingual Extension、Unicodeや、他の言語の用字系を処理する高度なメソッドがある)のコードで、著作権者が日本国政府で著作権の委譲が不可能であった[ 15] 。 些細なコード寄贈やバグ修正には、この方針は適用されない。 些細かどうかの厳密な定義はないが、指針として10行未満のコードは些細とみなされている。
2011年、GPLにより意図された精神に反して、該当するソースコードが存在しないバイナリを2年間に渡りリリースしていたことが発覚した[ 16] [ 17] [ 18] 。ストールマンは「大変重大な誤り」 としてこの事件について述べ[ 19] 、この誤りはすぐに修正された。当然のことだが、下流の再頒布者が技術的にGPL違反をしたのは彼ら自身の過ちではないため、FSFは誰も訴えなかった。
使用法
GNU Emacsによる複数のDired バッファの編集
GNU EmacsによるC ソースコード の編集
GNU EmacsによるC++ コードの編集とコンパイル
基本的な操作
基本的な操作は、GNU Emacsからのフォークとして始まったXEmacsとその後継版は、GNU Emacsとおおむね互換性がある。
カーソル移動などは矢印キーをつかって行うこともできるが、主要な大部分の操作は、コントロールキー ・メタキー (Windowsでは通常Altキー を使用する)・スーパーキー などを押し下げたまま別のキーを打鍵することで行うことができる。vi と比較した場合、viが編集モード、カーソル移動モードの2つのモードを持つのに対し、Emacsはそのようなモードを持たない。ただしEmacs上でviの操作をエミュレートするエミュレータもいくつかある (vip-mode, viper-mode) 。
なお、Emacsではコントロールキーを押しながら「a」を押す事を「C-a」と表記し、メタキーを押しながら「a」を押す事を「M-a」と表記する。本稿でも以下この表記を用いる。
キーの多くは英語の頭文字にしたがって割り振られているので、どのキーがどの操作に対応しているのかを比較的簡単に覚えることができる。たとえばカーソルを右、左、上、下に動かす操作はそれぞれC-f、C-b、C-p、C-nであるが、これはそれぞれforward、backward、previous、nextの略である。
Emacsでは、2ストローク以上のキー操作も多数用意している。たとえば「C-xC-s」(=コントロールキーを押し下げたままx、sと打鍵する)でファイルを保存する。キーの割り当てられていないコマンドも多くあり、それらは M-x を押してからコマンドを入力することで実行する。
なお、C-h t(英語)あるいはC-h T(翻訳)でチュートリアルを表示させることができ、そのまま操作方法を学習することができる。
GUI でEmacsを使っているとき、キーボードの代わりにメニューバーやツールバーからもコマンドを呼び出せる。しかし、経験豊富なEmacsの利用者には、必要なキー操作をいったん記憶してしまえばより速く操作でき便利なキーボードからのコマンド呼び出しのほうが好まれている。
全ての編集コマンドは、実際はEmacs Lisp環境の関数を呼び出す。文字a を挿入するコマンドのa
をたたいただけでも、関数を(この場合self-insert-command
を)呼び出す。一部のEmacsコマンドは、外部プログラム(つづりのチェックにispell や、プログラムのコンパイルにgcc )を呼び出し、プログラムの出力を解析し、Emacsに結果を表示することで、機能している。
コマンド
GNU Emacsは、通常の編集モードにおいては他のテキストエディタと同じように振る舞うため、ユーザーは対応するキー で文字を挿入でき、さらに矢印キーで編集場所を移動できる。エスケープキー シーケンスを入力するか、またはコントロールキー、メタキー、Altキー、スーパーキーのうち1つ以上のキーを通常キーと同時に押すことにより、修飾キーストローク を発生させてEmacs Lisp環境から関数を呼び出す。save-buffer
やsave-buffers-kill-emacs
などのコマンドでは、複数の修飾キーストロークを組み合わせる。
GNU Emacsのコマンドの中には、スペルチェック 用のIspell やプログラムコンパイル 用のgcc などのように外部プログラムを呼び出して処理を行うものも存在する。GNU Emacsはこれら外部プログラムの出力をパース して、GNU Emacsに結果を出力する。Emacsは「下位プロセス」もサポートする。下位プロセスとは、Emacsバッファと相互に影響しあう長寿命なプロセス であり、shell-mode の実装に使われる。このモードでは各種プログラミング言語用のRead–eval–print loop モードやUnixシェル を、下位プロセスで起動する。GNU Emacsは外部プロセスをサポートしているため、Interlisp やSmallTalk の行に沿った対話型プログラミング用環境としてGNU Emacsは魅力的なものである[ 20] 。
IBM Common User Access スタイルのキーを好むユーザーはcua-mode を使うことができる。このモードは元々サードパーティー のアドオン であったが、バージョン22以降のGNU Emacsに含まれるようになったパッケージである。
ミニバッファ
Emacsは状態を表したり情報を要求するために「ミニバッファ」を利用する。通常、ミニバッファは一番下の行に存在する。ミニバッファが果たす機能は、ほとんどのGUIでは一般的にダイアログボックス が果たす機能である。ミニバッファは、検索対象となるテキストや、読み込みや保存を行うファイル名などの情報を保持している。該当する場合、タブキー やスペースキー でコマンドライン補完 (英語版 ) ができる。
ファイル管理と表示
Emacsはバッファ と呼ばれるデータ構造 でテキストを保持する。バッファは画面に表示することも非表示にすることもでき、さらにEmacs Lispプログラムやユーザインタフェース から全てのバッファ機能にアクセスできる[ 21] 。ユーザーは新しいバッファを作成したり不要なバッファを消去することができ、複数のバッファを同時に存在させることもできる。Emacsが使えるバッファ数はハードウェアメモリが許す限り増やすことができる。上級ユーザーは自身の作業と関係のある様々なタイプの開かれたバッファを数百個蓄えることもある[ 22] 。
バッファの中にはテキストファイル から読み込まれたテキストバッファなどのように、ユーザーが編集したり永続ストレージに保存することができるものもある。このようなバッファを、ファイルを「訪問している」バッファと呼ぶ。バッファはこれ以外にも、Emacsコマンドの出力、Dired ディレクトリ 一覧表示、「ヘルプ」ライブラリが表示するドキュメントの文字列、およびEmacs以外のエディタではダイアログボックスに表示される通知メッセージなどのデータを表示する役割も果たす。GNU Emacsはこれらの通知をミニバッファへ簡潔に表示し、さらにそれら通知の最新履歴を保持するために*Messages* バッファを提供する。バッファはシェル やREPLなどの外部プロセスに対する入出力エリアとしての役割も果たす。ユーザーバッファと区別するため、Emacsが独自に作成するバッファ名には最初と最後にアスタリスク が付くことが多い。開かれているバッファの一覧は、それ自体がこのタイプのバッファに表示される。
Emacsキーシーケンスのほとんどは、どのバッファでも機能する。例えば、標準Ctrl-s isearch
機能はDiredバッファでファイル検索のために使うことができ、さらにそのファイル一覧を他の全てのバッファと同様にテキストファイルへと保存することもできる。Diredバッファを書き込み可能モードに切り替えると、ファイル名や属性をテキストベースで編集することができ、さらにその場合にDiredバッファを保存すると変更した箇所がファイルシステムに書き込まれる。これにより、Emacsの検索および置換機能を利用して複数のファイルを改名することができる。さらに装備すると、GNU Emacsはバッファに画像ファイルを表示する。GNU Emacsはバイナリセーフで8ビットクリーンである[ 23] 。
Emacsは編集領域を「ウィンドウ」と呼ばれるエリアに分割できる。EmacsではGUIが普及するよりも前の1975年から、既にウィンドウ機能を使えるようになっていた。Emacs用語における「ウィンドウ」とは、他のシステムでは「フレーム (英語版 ) 」や「ペイン 」と呼ばれるものと類似している。ウィンドウは独自に更新や対話ができる、プログラムによる表示の矩形部分である。Emacsでは各ウィンドウにそれぞれ「モードライン」と呼ばれるステータスバーが存在し、デフォルトではウィンドウの最下端に表示される。Emacsウィンドウはテキスト端末でもグラフィカルモードでも使うことができ、さらにウィンドウにより複数のバッファや、1つのバッファにおける複数の部分を同時に見ることが可能となる。一般的なウィンドウの応用例としては、カレントディレクトリ のファイル一覧に加えてDired バッファを表示したり(ファイルバッファをDiredでハイライトされたファイルに従わせる特殊なモードが存在する)、あるウィンドウでプログラムのソースコード を表示しながら別のウィンドウにプログラムをコンパイルした結果のシェル バッファを表示してプログラムを起動しているシェルバッファと一緒にデバッガを起動したり、manページ や(Emacsのビルトインウェブブラウザの一種を使ってWorld Wide Web 全体からロードされたものなどの)他のドキュメントを表示しながらコードを処理したり、Cベースの言語用ヘッダ とその実装ファイルなどを同時に編集するため複数のファイルを表示したりなどができる。加えて、バッファの重複しない部分を表示するようウィンドウを連鎖させるfollow-mode が存在する。follow-mode を使うと、1つのファイルをスクロール 時に適切に更新される複数の並列ウィンドウに表示する。Emacsウィンドウはタイル型 であるため、ウィンドウが「前面」や「背面」になることはない。Emacsは複数の「フレーム」を起動することができる。フレームはグラフィカル環境で個々のウィンドウ を表示するためのものである。テキスト端末上で複数のフレームを作ることができる。テキスト端末において、複数フレームは端末全体を満たすよう積み重ねられて表示され、標準Emacsコマンドを使うことでフレームを切り替えることが可能である[ 24] 。
主モード
GNU Emacsは様々な異なるタイプのテキストを編集でき、「主モード(メジャーモード、major-mode)」と呼ばれるアドオン モードに入ることで、編集するテキストの種類に応じて振舞いを適用させる。普通のテキストファイル、多くのプログラミング言語のソースコード、HTML ドキュメント、TeX やLaTeX ドキュメントや、多くの他種のファイルタイプ 用に主モードが定義されている。各主モードはEmacs Lisp変数を調節するなどして固有の型のテキストに都合よく振る舞うように作られている。 主モードは通常、以下のような共通機能の一部または全てを提供する:
シンタックス強調表示(「フォントロック」):「フェイス」と呼ばれる、キーワード やコメント といったドキュメント要素の差異を示す、フォントと色の組み合わせ[ 25]
ファイル内で一貫した書式設定を維持するための自動インデント
空白、新しい行、および括弧のようなドキュメントの構造に必要な要素の自動挿入
プログラミングファイルの編集中に関数の先頭や末尾へ飛ぶコマンドや、XML のようなマークアップ言語 の作業中にドキュメントを検証したり終了タグを挿入するコマンドのような特殊編集コマンド
副モード
「副モード(マイナーモード、minor-mode)」でGNU Emacsの振る舞いをさらにカスタム化することもできる。バッファを編集するGNU Emacsは1つの主モードしか使えないが、副モードは複数同時に操作できる。C言語用の主モードへ人気のある字下げスタイル 毎に個別の副モードを定義するなどのような方法により、副モードをドキュメント上で直接操作したり、副モードで編集環境を変更することができる。後者の例としてはウィンドウ構成の変更をアンドゥする能力を追加するモードや、オンザフライなシンタックスチェックを実行するモードなどが挙げられる。複数のプログラミング言語が埋め込まれたドキュメントを編集する際に便利なため、複数の主モードを単一のファイルで使えるようにする副モードもある。
「バッチモード」
GNU Emacsは、テキストエディタユーザインタフェースを表示しないElisp言語用インタープリタとしての使用もサポートしている。バッチモードではユーザー設定はロードされず、端末割り込み 文字のC-cとC-zは、Emacsのキーバインディングを呼び出す効果ではなく、プログラム終了や実行中断をする通常の効果をもたらす。GNU Emacsは、ロードおよび実行するためのファイルや、コマンドラインから渡せるEmacs Lisp関数を指定するためのコマンドラインオプション を持つ。Emacsが開始されると渡されたファイルや関数を実行し、結果を出力してから終了する[ 26] 。#!/usr/bin/emacs --script
というシバン の行でEmacs Lispのスタンドアロンスクリプトを作成できる[ 27] 。バッチモードはEmacsのモード「そのもの」ではないが、Emacsプログラムの代替実行モードとして説明される。
マニュアル
ビルトインドキュメントとは別に、GNU Emacsには非常に長くて詳細なマニュアル がある[要出典 ] 。リチャード・ストールマンによって書かれたGNU Emacs Manual の電子コピーはGNU Emacsにバンドルされ、ビルトインinfo (英語版 ) ブラウザで閲覧できる。Bil Lewis、リチャード・ストールマンそしてDan LaliberteによるEmacs Lisp Reference Manual とRobert Chassell (英語版 ) によるAn Introduction to Programming in Emacs Lisp の2つの追加マニュアルも含まれる。これらのマニュアルは全てフリーソフトウェア財団により書籍形式でも発行されている。XEmacsのマニュアルはGNU Emacs Manual と類似しているが、XEmacsのソフトウェアはGNU Emacsからフォークされたと同時にマニュアルもフォークされたからである。
国際化
GNU Emacsは多種のアルファベット、文字体系 、表記体系 および文化的慣習をサポートしており、Ispell のような外部プログラムを呼ぶことで多数の言語のスペルチェック を提供している。バージョン24にはアラビア語、ペルシア語、そしてヘブライ語といった言語のため、横書き において左横書きと右横書きとを混在して書く機能のサポートが追加された。
UTF-8 を含む多数の文字コード をサポートしている。GNU Emacsはバージョン23から文字コードにUTF-8を使うが、それ以前のバージョンでは固有の内部文字コードを使い、読み書き時に変換していた。XEmacsが使う内部文字コードは以前のバージョンのGNU Emacsのものと類似しているが、詳細は異なる。
GNU Emacsユーザインタフェースはビギナーのチュートリアルを除き英語で開始され、それ以外の言語には翻訳されていない。
Emacspeak (英語版 ) と呼ばれるサブシステムにより、視覚障害のあるユーザーや盲目のユーザーがオーディオフィードバックを通じてエディタをコントロールできる。
日本語化
GNU Emacsの日本語 版としてNemacs (Nihongo Emacs) が、多国語対応版としてMule (MULtilingual Enhancement to GNU Emacs) が開発された。NemacsおよびMuleは電子技術総合研究所(電総研:現在の産業技術総合研究所 )の半田剣一 らによるものである。
Mule
Muleはアラビア文字 などの右から左へ記述する文字をふくめた複数の文字集合の1ファイル中での混在と編集が可能であり、中国や、タイ等多くの国や地域で規格化された文字集合をサポートするなど、先進的かつ実用的な多用字系処理系であった(しばしば多言語 処理系ともいわれる)。
日本語 GNU Emacs
日本語 GNU Emacs (Nemacs:Nihongo Emacs) は東京大学 の平野聡 と大阪大学 の東田学 によって、フリーなDOSエクステンダ のgo32/djgppを用いてMS-DOS 上に移植され(後にemxにも対応)、demacsと呼ばれた。
拡張性
AUCTeX を利用しているGNU Emacs。AUCTeXはTeX やLaTeX ドキュメントを編集するツールのセットである。
GNU Emacsの振る舞いは、新しいコマンド、新しいバッファモード、新しいキーマップなどを定義したり、コマンドラインオプション[ 28] を追加するための組み込みEmacs Lispプログラムにより、ほぼ制限なく修正したり拡張することができる。ユーザー向け機能を提供する拡張の多くは主モードを定義する(新しいファイルタイプ用の主モードか、テキスト編集させないユーザインタフェースを構築する主モードのどちらかとなる)。その他の拡張には、コマンドや副モードのみを定義するものや、別の拡張を補強する機能を提供するものなどがある。
GNU Emacsのインストールには多くの拡張がバンドルされている。バンドルされていない拡張はルーズファイル(Usenet newsgroup gnu.emacs.sourcesが伝統的なソースであった)として、ダウンロードされ使用されていたが、バージョン24より管理されたパッケージやパッケージダウンロードサイトが発展してきている。これらのパッケージは、拡張をダウンロードしてインストールし、さらに最新の状態に維持するためのビルトインパッケージマネージャ(これ自体が拡張である)を利用する。
以下に主な拡張の例を示す:
パフォーマンス
GNU EmacsはLispベースのコードをロードし解釈 することによるパフォーマンスのオーバーヘッドが発生するため、初期の実装時点では競合するテキストエディタよりもシステム上における実行が著しく遅かった。現在のコンピュータはスローダウンせずにGNU Emacsを起動するほどパワフルであるが、19.29以前のバージョンでは8MB以上のファイルを編集できなかった。このファイルサイズ制限はバージョンを通じて存在したが、GNU Emacs 23.2以降の32ビット バージョンでは512MBまでのサイズのファイルを編集できる。64ビット マシンでコンパイルされたEmacsではさらに大きいバッファを処理できる[ 38] 。
GNU Emacsは大部分がEmacs Lispで書かれているが、C言語でネイティブコンパイルされたコードを利用することによりパフォーマンスの改善を望むことができる。さらに、XML やJSON のパースにおいて、Libxml2 (英語版 ) やJanssonのようなC言語の外部ライブラリを利用することも可能である[ 39] 。
GNU Emacs 28.1以降において、GNU Emacsはlibgccjit
を利用してEmacs Lispファイルそのものをネイティブコンパイルして利用できるようになった[ 40] 。
プラットフォーム
GNU Emacsは最も移植 された非商用コンピュータプログラムの1つであり、DOS 、Microsoft Windows そしてOpenVMS を含む様々なオペレーティングシステム 上で動作する[ 41] [ 42] [ 43] 。Emacs 23.1でサポートが削除された時代遅れのプラットフォームの中には、VMSや(Linuxベースのもを除く)大半のUnix派生など、既に開発が終了していたものもある[ 44] 。GNU EmacsはLinux 、BSD 派生、Solaris 、AIX 、HP-UX およびmacOS などのほとんどのUnix系 オペレーティングシステムで利用可能であり[ 45] [ 46] 、システムインストールパッケージに含まれていることが多い。Android [ 47] [信頼性要検証 ] やノキアのMaemo 用[ 48] [信頼性要検証 ] のGNU Emacsネイティブ移植が存在する。
GNU Emacsはテキスト端末 とGUI環境の両方で動作する。GNU EmacsはUnix系オペレーティングシステム上でX Window System を利用できるため、Athena Widgets (英語版 ) を直接利用したり、Motif 、LessTif 、またはGTK などの「ウィジットツールキット」を利用することでGUIを作成することができる。GNU EmacsはmacOSやWindowsといった各プラットフォームのルック・アンド・フィール に、より密接に適合したメニューバー 、ツールバー 、スクロールバー およびコンテキストメニュー を提供するため、macOSやWindowsのネイティブなグラフィックスシステムを利用することもできる。
GUIへの対応
Emacsはもとは文字端末での利用を前提に設計されていたものであるが、少なくともGNU Emacsバージョン18ではX Window System アプリケーションとしてコンパイルすることもできた。しかし、その実装方法は、自前の端末エミュレータ を立ち上げ、その中で動くというものであり、ウィンドウシステムの持つ機能を十分に発揮するには至っていなかった。このためXEmacsなどのプロジェクトが生まれたが、GNU Emacs自身も徐々にGUIに対応していった。
Emacsバージョン21およびXEmacsではグラフィックス機能が強化されており、1バッファ中で複数のサイズやスタイルのフォントを混在させることもできる。また、画像を表示させることもでき、ImageMagick と連携してさまざまな画像ファイルを開くことができるようになった。
2009年のGNU Emacs 23ではフォントの扱いが大きく変わり、TrueType フォントが自由に使えるようになった。
Windows
現在はGNU Emacs自体をVisual C++ またはCygwin でコンパイルすることが可能である[ 49] 。バイナリ形式でも配布されているので、zipを展開するだけでWindows上でEmacsが使用可能である[ 50] 。
日本では、かつて宮下尚によりWin32アプリケーションとしてMule 2.3をベースにしたMule for Win32 、そしてGNU Emacs 20をベースにしたMeadow がWindows上に移植・開発され、広く使われていた。2004年7月7日にはGNU Emacs 21をベースにしたMeadow2がリリースされたが、GNU Emacs 22以降には対応していない。一方、上記のバイナリは日本語IME からの入力に問題があるため、パッチをあててCygwinでビルドしたgnupack[ 51] が使われるようになってきている。
SKK のようなGNU Emacs上の入力システムを使い、Windows上の日本語IMEを使用しない場合は、公式のバイナリをそのまま使えばよい。
Win32で動くEmacsをNTEmacsとよぶこともある。
macOS
macOS は最初からGNU Emacsがインストール済みだが、標準ではGUIが使えない。銭谷誠司がGNU Emacs 22をmacOSのCarbon APIを使ってGUI対応したCarbon Emacsが使われてきたが、GNU Emacs 23からはGNU EmacsそのものがCocoa APIを使ったGUIで動くようになり、configureに --with-ns
(nsはNEXTSTEP )オプションをつけるだけでGUIで動くEmacsをソースからビルドすることもできる。そのほか、GUIをAqua としたAquamacsなど、多数のバリエーションが存在する。
macOSでは、コントロールキーのほかにコマンドキー とオプションキー が用意されており、そのどちらかをMetaキー・もう片方をSuperキーとして使うことができる。Superキーの割り当ての一部はmacOSの標準のキー割り当てとよく似ている(s-x でカット・s-c でコピー・s-n で新しいフレームが開くなど)。ただし、その副作用として本来のオプションキーとしての機能は使えなくなってしまう。たとえば日本語キーボードではバックスラッシュ をオプション+円記号で入力する必要があるので、特別な対応が必要となる。
フォーク
XEmacs
GNU/Linux 上のXEmacs 21.5
1991年初頭、GNU Emacs 19の初期α版をベースとしてJamie Zawinski (英語版 ) とLucid (英語版 ) 社の人達によりLucid Emacsが開発された。コードベースはすぐに2つに分割され、開発チームは単一プログラムとして併合しようとすることをあきらめた[ 52] 。これはフォークしたフリーソフトウェアのうち初期の最も有名な例の1つである。Lucid EmacsはXEmacsと名前を変え、Emacsの中でGNU Emacsに次いで2番目に有名な派生となった[要出典 ] 。XEmacsの開発は2009年1月 に最新の安定版であるバージョン21.4.22がリリースされてから遅くなっていき、その一方でGNU Emacsは以前はXEmacsにしかなかった機能の多くを実装していった。このため一部のユーザーはXEmacsの死を宣言するようになった[ 53] 。
その他のGNU Emacsのフォーク
XEmacsほど有名ではないGNU Emacsのフォークには、以下のものがある:
リリース履歴
Emacsを新しいリリースに「アップグレード 」して得られる変更は、Emacsと一緒に配布されるNEWSファイルにリストされる[ 57] 。以前のリリースへ「ダウングレード 」して得られる変更は、Antinews ファイルにリストされる[ 58] 。
バージョン
リリース日
大幅な変更[ 59]
29.1
2023年7月30日
"pure GTK"ビルドのサポート。一部のプログラミング言語におけるtree-sitterのサポート。language server protocol (英語版 ) クライアントのEglot、パッケージマネージャのuse-packageのデフォルトサポート。sqlite3を利用したSQLite データベースアクセス機能、libwebpを利用したWebP 画像表示機能のサポート。Unicode 15.0のサポート[ 60] 。
28.2
2022年9月12日
メンテナンスリリース[ 61] 。
28.1
2022年4月4日
Lispファイルのネイティブコンパイル機能をサポート。プロセスを分離して安全性を担保するSecure Computing filterのサポート。絵文字と絵文字シーケンスの表示の改善。context-menu-modeのサポート。対応する括弧の強調がデフォルト化[ 62] 。
27.2
2021年3月25日
主にバグ修正のリリース[ 63] 。
27.1
2020年8月10日
任意サイズの整数のサポート。HarfBuzz によるテキストのシェーピング。JSON パースのネイティブサポート。cairo 描画サポートの強化。init.elよりも前に読み込むearly-init.elのサポート。ImageMagick なしで画像のリサイズと回転をサポート[ 64] 。
26.3
2019年8月28日
GNU Emacs Lisp Package Archive (ELPA) パッケージ検証に利用するGPGキーの更新[ 65] 。
26.2
2019年4月12日
Unicode 11.0のサポート[ 66] 。
26.1
2018年5月28日
スレッドの部分的サポート。Emacsバッファ内の行番号表示機能の刷新。TrampモードにおけるGoogle Drive対応。systemd ユニットファイル提供。テキスト端末の24ビットカラー対応[ 67] 。
25.3
2017年9月11日
脆弱性修正のためのリリース[ 68] 。
25.2
2017年4月21日
主にバグ修正のリリース[ 69] 。
25.1
2016年9月17日
共有・動的ライブラリ(モジュール)のロード、TLS/SSL証明書の検証のサポート。曲線型引用符のための新規 'electric-quote-mode' 副モードの追加。isearch.elにおける文字折り畳みのサポート。Emacsバッファ内にネイティブウイジェットを組み込む機能のサポート。Unicode文字の挿入における新規機能の追加および機能の改善[ 70] 。
24.5
2015年8月10日
主にバグ修正のリリース[ 71] [ 72] 。
24.4
2014年10月20日
Emacs LispパッケージのACL(アクセスコントロールリスト)とデジタル署名のサポート、フルスクリーンとマルチモニターサポートの改善、フレームとウインドウの状態の保存と復元のサポート、テキスト端末上のメニューサポートの改善、別のビルトインウェブブラウザ (M-x eww )、新しい長方形のマークモード (C-x SPC )、ファイル通知サポート[ 73] 。
24.3
2013年3月10日
コアEmacs Lisp内、Common Lispエミュレーションライブラリの更新、Python用の新しいメジャーモードにおける一般変数[ 74] 。
24.2
2012年8月27日
バグ修正のリリース[ 75]
24.1
2012年6月10日
Emacs Lisp Package Archive、ネイティブ、オプションでGTK+ 3のカラーテーマ、双方向入力のサポート、emacs lispのレキシカルスコープのサポート[ 76] 。
23.4
2012年1月29日
セキュリティフローの修正[ 77] 。
23.3
2011年3月10日
バージョン管理システムでEmacsを使う機能の改善。
23.2
2010年5月8日
IDE としてEmacsを使うための新しいツール、JavaScriptソース編集用の新しい主モード、GUIでユーザーがタイプしている間に隠れるカーソル。
23.1
2009年7月29日
Xft を通じたX上のアンチエイリアスフォントのサポート[ 78] 、さらなるUnicode のサポート、PDF とPostScript ファイル閲覧用のDoc-viewモードと新しいパッケージ、D-Bus 経由のプロセス接続 (dbus)、GNU Privacy Guard による接続 (EasyPG)、XML ドキュメント編集用nXMLモード、Ruby プログラム編集用Rubyモードなど。Mac OS X上のCarbon GUIライブラリの利用をより近代的なCocoa GUIライブラリ利用に置き換え。
22.3
2008年9月5日
GTK+ツールキットサポート、強化マウスサポート、新しいキーボードマクロシステム、改善されたUnicodeサポート、X上のドラッグアンドドロップ操作、GDBへのグラフィカルユーザーインタフェースを含む多くの新しいモードとパッケージ、Pythonモード、数学ツールCalc、リモートファイル編集システムTramp ("Transparent Remote (file) Access, Multiple Protocol")[ 79]
22.2
2008年3月26日
Bazaar、Mercurial、MonotoneおよびGitバージョン管理システム の新しいサポート、CSS、Verilog、およびBibTeX編集用の新しい主モード、Imageモードのスクロールサポートの改善
22.1
2007年6月2日
GTK+グラフィカルツールキットのサポート、X上のドラッグアンドドロップのサポート、Mac OS X Carbon UIのサポート、org-modeバージョン4.67d[ 80]
21.1
2001年10月20日
端末上のカラー表示およびそれ以外の属性のサポート、ビルトイン水平方向スクロール、サウンドサポート、ホイールマウスサポート、改善されたメニューバーレイアウト、画像、ツールバー、ツールチップのサポート、Unicodeサポート
20.1
1997年9月17日
多言語サポート
19.34
1996年8月22日
ユーザーには見えない変更を伴うバグ修正リリース[ 81]
19.31
1996年5月25日[ 82]
EmacsがデフォルトでX11 フレームをオープンする。Windows 95 およびNT 上のスクロールバー、Windows 95上でのサブプロセス、クラッシュ後の複数ファイル回復のためのrecover-session 、米国通信品位法 準拠のためいくつかのdoctor.el機能の削除[ 81]
19.30
1995年11月24日
MS Windows上の複数フレームのサポート、テキスト端末上でメニューバーが利用可能に、 WindowsとMacintoshで共通なキーバインディングをエミュレートするためのpc-select パッケージ[ 81]
19.29
1995年6月19日[ 83]
19.28
1994年11月1日
最初の公式v19リリース。X Window Systemと利用した複数フレームのサポート。バージョン管理システム用の新しいインタフェースであるVC、font-lockモード、バイナリ 編集用のhexlモード
19.7
1993年5月22日
18.59
1992年10月31日
18.53
1989年2月23日
18.52
1988年8月17日
いくつかの「NSA をそらす」キーワードを送信する各メッセージに追加するためのspook.el ライブラリ[ 84]
RL counter terrorism Red Cross TWA Human to Human CIA al-Qaida Smuggling sneakers Ansar al-Islam Burst Morwenstow Sears Tower Sick HRT
18.24
1986年10月2日
サーバーモード[ 85] 、M-x disassemble 、EmacsはTCP接続をオープン可能に、xterm のコンソールモード内でEmacsをオープンするためのemacs -nw
17.36
1985年12月20日
Backup file version numbers
16.56
1985年7月15日
最初のEmacs 16リリース。Emacs-lisp-modeがlisp-modeから分離[ 86] 、著作権問題のためGosling Emacs 由来のコードを全て除去[ 87]
15.10
1985年8月11日
13.0?
1985年3月20日
出典
^ ステファン・カンガス; "Emacs 29.4 released" ; 作品または名前の言語: 英語; 出版日: 2024年6月22日; 閲覧日: 2024年6月22日.
^ “"Learning GNU Emacs, Third Edition": A Guide to the World's Most Extensible, Customizable Editor ”. 2017年7月12日 閲覧。
^ “Alphabet Soup: The Internationalization of Linux, Part 1 Linux Journal March 1999 ”. 2017年7月12日 閲覧。 “With the availability of fonts and, where necessary, internationalized terminal emulators, Emacs can simultaneously handle most of the world's languages.”
^ “The Linux Programmer's Toolbox ”. 2017年7月12日 閲覧。
^ “Learning GNU Emacs ”. 2017年7月12日 閲覧。
^ “GNUMACS ”. 2017年7月12日 閲覧。
^ “Debian -- stretch の emacs パッケージに関する詳細 ”. 2017年7月12日 閲覧。
^ “NEWS.1-17 ”. 2017年7月12日 閲覧。 “There is a new version numbering scheme. What used to be the first version number, which was 1, has been discarded since it does not seem that I need three levels of version number. However, a new third version number has been added to represent changes by user sites. This number will always be zero in Emacs when I distribute it; it will be incremented each time Emacs is built at another site.”
^ “GNU Emacs FAQ ”. 2017年7月12日 閲覧。 “A version number with two components (e.g., ‘22.1’) indicates a released version; three components indicate a development version (e.g., ‘23.0.50’ is what will eventually become ‘23.1’).”
^ Clifford Stoll (1988). “Stalking the wily hacker”. Communications of the ACM (英語版 ) 31 (5): 484–497. doi :10.1145/42411.42412
^ “Re: GNU EMACS ”. GNU. 2014年11月16日 閲覧。 ]
^ “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"
^ https://lists.gnu.org/archive/html/emacs-devel/2015-09/msg00849.html
^ “Emacs gets new maintainer as Richard Stallman signs off ”. 2017年7月12日 閲覧。
^ http://mail.gnu.org/archive/html/bug-gnu-emacs/2000-09/msg00065.html
^ Brockmeier, Joe (Jul 29, 2011). “Say what? GNU Emacs violates the GPL ”. Network World (英語版 ) . 2016年1月19日 閲覧。
^ License revoked: Applying Section 4 of the GPL and the lessons of Best Buy to Google’s Android by Edward J. Naughton (Aug 8, 2011)
^ スラッシュドット におけるEmacs-Has-Been-Violating-the-GPL-Since-2009 (2011)
^ Re: Compiled files without sources???? Richard Stallman (28 Jul 2011)
^ “GNU Emacs as a dynamically extensible programming environment ”. 2017年7月12日 閲覧。
^ “Beautiful Architecture: Leading Thinkers Reveal the Hidden Beauty in Software Design ”. 2017年7月12日 閲覧。
^ “Statistical Analysis and Data Display: An Intermediate Course with Examples in R ”. 2017年7月12日 閲覧。
^ “A Tutorial Introduction to GNU Emacs ”. 2017年7月12日 閲覧。
^ “Frames - GNU Emacs Manual ”. 2017年7月12日 閲覧。 “However, it is still possible to create multiple “frames” on text terminals; such frames are displayed one at a time, filling the entire terminal screen”
^
Cameron, Debra; Rosenblatt, Bill; Raymond, Eric S. (1996). Learning GNU Emacs . In a Nutshell Series (2 ed.). O'Reilly Media, Inc.. p. 533. ISBN 978-1-56592-152-8 . https://books.google.com/books?id=-RtYk55cqfgC 2010年11月2日 閲覧 . "A face is a font and colour combination."
^ “Initial Options ”. 2017年7月12日 閲覧。 “In batch mode, Emacs does not display the text being edited, and the standard terminal interrupt characters such as C-z and C-c have their usual effect. Emacs functions that normally print a message in the echo area will print to either the standard output stream (stdout) or the standard error stream (stderr) instead. (To be precise, functions like prin1, princ and print print to stdout, while message and error print to stderr.) Functions that normally read keyboard input from the minibuffer take their input from the terminal’s standard input stream (stdin) instead.”
^ “BatchMode ”. 2017年7月12日 閲覧。
^ “Command Line Arguments ”. 2017年7月12日 閲覧。
^ Connolly, Dan (28 September 1999). “HTML 2.0 Materials ”. World Wide Web Consortium . 16 November 2010 閲覧。
^ Stallman, Richard (3 June 2007). "Emacs 22.1 released" . info-gnu-emacs (Mailing list). 2011年7月31日閲覧 。
^ https://github.com/ch11ng/exwm/wiki
^ Jonas Bernoulli. “It's Magit! A Git Porcelain inside Emacs ”. February 8, 2017 閲覧。
^ Petersen, Mickey. “An introduction to Magit, an Emacs mode for Git” . Mastering Emacs . https://www.masteringemacs.org/article/introduction-magit-emacs-mode-git February 8, 2017 閲覧。
^ “Babel: Introduction ”. 2017年7月12日 閲覧。
^ SLIME: The Superior Lisp Interaction Mode for Emacs , http://www.common-lisp.net/project/slime/
^ Kifer, Michael. “Emacs packages: Viper and Ediff ”. Michael Kifer's website . 2012年11月15日 閲覧。
^ “Home ”. Evil wiki . Gitorious. 2012年11月15日 閲覧。
^ “6.1 Does Emacs have problems with files larger than 8 megabytes? ”. 2017年7月12日 閲覧。
^ “Emacs Dynamic Modules ”. GNU Emacs Lisp Reference Manual . 2024年1月11日 閲覧。
^ “Compilation of Lisp to Native Code ”. GNU Emacs Lisp Reference Manual . 2024年1月11日 閲覧。
^ B, Ramprasad (2005年6月24日). “GNU Emacs FAQ For Windows 95/98/ME/NT/XP and 2000 ”. 2006年9月27日 閲覧。
^ Borgman, Lennart (2006年). “EmacsW32 Home Page ”. 2006年9月27日 閲覧。
^ “GNU Emacs on Windows ”. Franz Inc. (2006年). 2006年9月27日 閲覧。
^ https://www.gnu.org/software/emacs/MACHINES
^ “Carbon Emacs Package ”. 2012年6月10日 閲覧。
^ “Aquamacs is an easy-to-use, Mac-style Emacs for Mac OS X ”. 2006年9月27日 閲覧。
^ “Emacs on Android ”. EmacsWiki. 2017年7月12日 閲覧。
^ “CategoryPorts ”. EmacsWiki. 2017年7月12日 閲覧。
^ GNU Emacs FAQ for MS Windows
^ http://ftp.gnu.org/gnu/emacs/windows/
^ http://en.sourceforge.jp/projects/gnupack/
^ Stephen J., Turnbull. “XEmacs vs. GNU Emacs ”. 2012年10月2日 閲覧。
^ “XEmacs is Dead. Long Live XEmacs! ”. 2016年6月12日 閲覧。
^ FrontPage - Meadow Wiki
^ “SXEmacs Website ”. Sxemacs.org (2009年10月11日). 2009年11月8日 閲覧。
^ “Remacs ”. The Remacs github repository . 22 February 2017 閲覧。
^ “NEWS.24.5 ”. 2017年7月12日 閲覧。 “GNU Emacs NEWS -- history of user-visible changes.”
^ “Antinews ”. 2017年7月12日 閲覧。 “For those users who live backwards in time, here is information about downgrading to Emacs version 23.4. We hope you will enjoy the greater simplicity that results from the absence of many Emacs 24.5 features.”
^ Emacs Timeline . Jwz.org. Retrieved on 2013-07-17.
^ “Changes in Emacs 29.1 ”. 2024年1月11日 閲覧。
^ “Changes in Emacs 28.2 ”. 2024年1月11日 閲覧。
^ “Changes in Emacs 28.1 ”. 2024年1月11日 閲覧。
^ “Changes in Emacs 27.2 ”. 2024年1月11日 閲覧。
^ “Changes in Emacs 27.1 ”. 2024年1月11日 閲覧。
^ “Changes in Emacs 26.3 ”. 2024年1月11日 閲覧。
^ “Changes in Emacs 26.2 ”. 2024年1月11日 閲覧。
^ “Changes in Emacs 26.1 ”. 2024年1月11日 閲覧。
^ “Changes in Emacs 25.3 ”. 2024年1月11日 閲覧。
^ “Changes in Emacs 25.2 ”. 2024年1月11日 閲覧。
^ “Emacs 25.1 released ”. lists.gnu.org . 2016年9月17日 閲覧。
^ “GNU Emacs NEWS -- history of user-visible changes. ” (2015年4月10日). 2015年4月11日 閲覧。
^ Petton, Nicolas (2015年4月10日). “Emacs 24.5 released ”. 2015年4月11日 閲覧。
^ Morris, Glenn (2014年10月20日). “Emacs 24.4 released ”. 2014年10月22日 閲覧。
^ Morris, Glenn (2013年3月10日). “Emacs 24.3 released ”. 2013年3月16日 閲覧。
^ Yidong, Chong (2012年8月27日). “Emacs release candidate 24.2 ”. 2012年11月11日 閲覧。
^ Yidong, Chong (2012年6月1日). “Emacs release candidate 24.1 ”. 2012年6月1日 閲覧。
^ Yidong, Chong (2012年1月9日). “Security flaw in EDE; new release plans ”. 2012年2月23日 閲覧。
^ “emacs-fu: emacs 23 has been released! ”. Emacs-fu.blogspot.com (2009年7月28日). 2009年11月8日 閲覧。
^ Zawodny, Jeremy (2003年12月15日). “Emacs Remote Editing with Tramp ”. Linux Magazine . 2010年2月1日 閲覧。 “Tramp [...] stands for "Transparent Remote (file) Access, Multiple Protocol."”
^ Free Software Foundation Inc (2007年). “Emacs News version 22.1 ”. 2013年12月29日 閲覧。
^ a b c “NEWS.19 ”. 2017年7月12日 閲覧。
^ “Emacs Timeline ”. 2017年7月12日 閲覧。
^ “GNUs Flashes ”. 2017年7月12日 閲覧。
^ “NEWS.18 ”. 2017年7月12日 閲覧。
^ “NEWS.18 ”. 2017年7月12日 閲覧。 “Programs such as mailers that invoke "the editor" as an inferior to edit some text can now be told to use an existing Emacs process instead of creating a new editor.”
^ “NEWS.1-17 ”. 2017年7月12日 閲覧。
^ “Xemacs Internals ”. 2017年7月12日 閲覧。
参考文献
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/
外部リンク