GNU Emacs

GNUプロジェクト創設者のリチャード・ストールマンにより作成されたEmacsテキストエディタ

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 Emacs
Emacsロゴ
GNOME 3上のGNU Emacs 26.2
作者 リチャード・ストールマンガイ・スティール・ジュニア
開発元 GNUプロジェクト
初版 1985年3月20日 (38年前) (1985-03-20)
最新版 29.2[1] ウィキデータを編集 - 2024年1月18日 (54日前) [±]
リポジトリ ウィキデータを編集
プログラミング
言語
C, Emacs Lisp
対応OS GNULinuxWindowsmacOSBSD
対応言語 英語
種別 テキストエディタ
ライセンス GNU GPLv3
公式サイト www.gnu.org/software/emacs/ ウィキデータを編集
テンプレートを表示

歴史 編集

 
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-buffersave-buffers-kill-emacsなどのコマンドでは、複数の修飾キーストロークを組み合わせる。

GNU Emacsのコマンドの中には、スペルチェック用のIspellやプログラムコンパイル用のgccなどのように外部プログラムを呼び出して処理を行うものも存在する。GNU Emacsはこれら外部プログラムの出力をパースして、GNU Emacsに結果を出力する。Emacsは「下位プロセス」もサポートする。下位プロセスとは、Emacsバッファと相互に影響しあう長寿命なプロセスであり、shell-modeの実装に使われる。このモードでは各種プログラミング言語用のRead–eval–print loopモードやUnixシェルを、下位プロセスで起動する。GNU Emacsは外部プロセスをサポートしているため、InterlispSmallTalkの行に沿った対話型プログラミング用環境として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ドキュメント、TeXLaTeXドキュメントや、多くの他種のファイルタイプ用に主モードが定義されている。各主モードは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 ManualRobert 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はTeXLaTeXドキュメントを編集するツールのセットである。

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言語でネイティブコンパイルされたコードを利用することによりパフォーマンスの改善を望むことができる。さらに、XMLJSONのパースにおいて、Libxml2英語版やJanssonのようなC言語の外部ライブラリを利用することも可能である[39]

GNU Emacs 28.1以降において、GNU Emacsはlibgccjitを利用してEmacs Lispファイルそのものをネイティブコンパイルして利用できるようになった[40]

プラットフォーム 編集

GNU Emacsは最も移植された非商用コンピュータプログラムの1つであり、DOSMicrosoft WindowsそしてOpenVMSを含む様々なオペレーティングシステム上で動作する[41][42][43]。Emacs 23.1でサポートが削除された時代遅れのプラットフォームの中には、VMSや(Linuxベースのもを除く)大半のUnix派生など、既に開発が終了していたものもある[44]。GNU EmacsはLinuxBSD派生、SolarisAIXHP-UXおよびmacOSなどのほとんどのUnix系オペレーティングシステムで利用可能であり[45][46]、システムインストールパッケージに含まれていることが多い。Android[47][信頼性要検証]やノキアのMaemo[48][信頼性要検証]のGNU Emacsネイティブ移植が存在する。

GNU Emacsはテキスト端末とGUI環境の両方で動作する。GNU EmacsはUnix系オペレーティングシステム上でX Window Systemを利用できるため、Athena Widgets英語版を直接利用したり、MotifLessTif、または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のサポート、PDFPostScriptファイル閲覧用のDoc-viewモードと新しいパッケージ、D-Bus経由のプロセス接続 (dbus)、GNU Privacy Guardによる接続 (EasyPG)、XMLドキュメント編集用nXMLモード、Rubyプログラム編集用Rubyモードなど。Mac OS X上のCarbonGUIライブラリの利用をより近代的なCocoaGUIライブラリ利用に置き換え。
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日


出典 編集

  1. ^ "Emacs 29.2 released"; 作品または名前の言語: 英語; 出版日: 2024年1月18日; 閲覧日: 2024年1月18日.
  2. ^ "Learning GNU Emacs, Third Edition": A Guide to the World's Most Extensible, Customizable Editor”. 2017年7月12日閲覧。
  3. ^ 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.”
  4. ^ The Linux Programmer's Toolbox”. 2017年7月12日閲覧。
  5. ^ Learning GNU Emacs”. 2017年7月12日閲覧。
  6. ^ GNUMACS”. 2017年7月12日閲覧。
  7. ^ Debian -- stretch の emacs パッケージに関する詳細”. 2017年7月12日閲覧。
  8. ^ 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.”
  9. ^ 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’).”
  10. ^ Clifford Stoll (1988). “Stalking the wily hacker”. Communications of the ACM英語版 31 (5): 484–497. doi:10.1145/42411.42412 
  11. ^ Re: GNU EMACS”. GNU. 2014年11月16日閲覧。]
  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"
  13. ^ https://lists.gnu.org/archive/html/emacs-devel/2015-09/msg00849.html
  14. ^ Emacs gets new maintainer as Richard Stallman signs off”. 2017年7月12日閲覧。
  15. ^ http://mail.gnu.org/archive/html/bug-gnu-emacs/2000-09/msg00065.html
  16. ^ Brockmeier, Joe (2011年7月29日). “Say what? GNU Emacs violates the GPL”. Network World英語版. 2016年1月19日閲覧。
  17. ^ 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)
  18. ^ スラッシュドットにおけるEmacs-Has-Been-Violating-the-GPL-Since-2009 (2011)
  19. ^ Re: Compiled files without sources???? Richard Stallman (28 Jul 2011)
  20. ^ GNU Emacs as a dynamically extensible programming environment”. 2017年7月12日閲覧。
  21. ^ Beautiful Architecture: Leading Thinkers Reveal the Hidden Beauty in Software Design”. 2017年7月12日閲覧。
  22. ^ Statistical Analysis and Data Display: An Intermediate Course with Examples in R”. 2017年7月12日閲覧。
  23. ^ A Tutorial Introduction to GNU Emacs”. 2017年7月12日閲覧。
  24. ^ 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”
  25. ^ 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." 
  26. ^ 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.”
  27. ^ BatchMode”. 2017年7月12日閲覧。
  28. ^ Command Line Arguments”. 2017年7月12日閲覧。
  29. ^ Connolly, Dan (1999年9月28日). “HTML 2.0 Materials”. World Wide Web Consortium. 2010年11月16日閲覧。
  30. ^ Stallman, Richard (3 June 2007). "Emacs 22.1 released". info-gnu-emacs (Mailing list). 2011年7月31日閲覧
  31. ^ https://github.com/ch11ng/exwm/wiki
  32. ^ Jonas Bernoulli. “It's Magit! A Git Porcelain inside Emacs”. 2017年2月8日閲覧。
  33. ^ Petersen, Mickey. “An introduction to Magit, an Emacs mode for Git”. Mastering Emacs. https://www.masteringemacs.org/article/introduction-magit-emacs-mode-git 2017年2月8日閲覧。 
  34. ^ Babel: Introduction”. 2017年7月12日閲覧。
  35. ^ SLIME: The Superior Lisp Interaction Mode for Emacs, http://www.common-lisp.net/project/slime/ 
  36. ^ Kifer, Michael. “Emacs packages: Viper and Ediff”. Michael Kifer's website. 2012年11月15日閲覧。
  37. ^ Home”. Evil wiki. Gitorious. 2012年11月15日閲覧。
  38. ^ 6.1 Does Emacs have problems with files larger than 8 megabytes?”. 2017年7月12日閲覧。
  39. ^ Emacs Dynamic Modules”. GNU Emacs Lisp Reference Manual. 2024年1月11日閲覧。
  40. ^ Compilation of Lisp to Native Code”. GNU Emacs Lisp Reference Manual. 2024年1月11日閲覧。
  41. ^ B, Ramprasad (2005年6月24日). “GNU Emacs FAQ For Windows 95/98/ME/NT/XP and 2000”. 2006年9月27日閲覧。
  42. ^ Borgman, Lennart (2006年). “EmacsW32 Home Page”. 2006年9月27日閲覧。
  43. ^ GNU Emacs on Windows”. Franz Inc. (2006年). 2006年9月27日閲覧。
  44. ^ https://www.gnu.org/software/emacs/MACHINES
  45. ^ Carbon Emacs Package”. 2012年6月10日閲覧。
  46. ^ Aquamacs is an easy-to-use, Mac-style Emacs for Mac OS X”. 2006年9月27日閲覧。
  47. ^ Emacs on Android”. EmacsWiki. 2017年7月12日閲覧。
  48. ^ CategoryPorts”. EmacsWiki. 2017年7月12日閲覧。
  49. ^ GNU Emacs FAQ for MS Windows
  50. ^ http://ftp.gnu.org/gnu/emacs/windows/
  51. ^ http://en.sourceforge.jp/projects/gnupack/
  52. ^ Stephen J., Turnbull. “XEmacs vs. GNU Emacs”. 2012年10月2日閲覧。
  53. ^ XEmacs is Dead. Long Live XEmacs!”. 2016年6月12日閲覧。
  54. ^ FrontPage - Meadow Wiki
  55. ^ SXEmacs Website”. Sxemacs.org (2009年10月11日). 2009年11月8日閲覧。
  56. ^ Remacs”. The Remacs github repository. 2017年2月22日閲覧。
  57. ^ NEWS.24.5”. 2017年7月12日閲覧。 “GNU Emacs NEWS -- history of user-visible changes.”
  58. ^ 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.”
  59. ^ Emacs Timeline. Jwz.org. Retrieved on 2013-07-17.
  60. ^ Changes in Emacs 29.1”. 2024年1月11日閲覧。
  61. ^ Changes in Emacs 28.2”. 2024年1月11日閲覧。
  62. ^ Changes in Emacs 28.1”. 2024年1月11日閲覧。
  63. ^ Changes in Emacs 27.2”. 2024年1月11日閲覧。
  64. ^ Changes in Emacs 27.1”. 2024年1月11日閲覧。
  65. ^ Changes in Emacs 26.3”. 2024年1月11日閲覧。
  66. ^ Changes in Emacs 26.2”. 2024年1月11日閲覧。
  67. ^ Changes in Emacs 26.1”. 2024年1月11日閲覧。
  68. ^ Changes in Emacs 25.3”. 2024年1月11日閲覧。
  69. ^ Changes in Emacs 25.2”. 2024年1月11日閲覧。
  70. ^ Emacs 25.1 released”. lists.gnu.org. 2016年9月17日閲覧。
  71. ^ GNU Emacs NEWS -- history of user-visible changes.” (2015年4月10日). 2015年4月11日閲覧。
  72. ^ Petton, Nicolas (2015年4月10日). “Emacs 24.5 released”. 2015年4月11日閲覧。
  73. ^ Morris, Glenn (2014年10月20日). “Emacs 24.4 released”. 2014年10月22日閲覧。
  74. ^ Morris, Glenn (2013年3月10日). “Emacs 24.3 released”. 2013年3月16日閲覧。
  75. ^ Yidong, Chong (2012年8月27日). “Emacs release candidate 24.2”. 2012年11月11日閲覧。
  76. ^ Yidong, Chong (2012年6月1日). “Emacs release candidate 24.1”. 2012年6月1日閲覧。
  77. ^ Yidong, Chong (2012年1月9日). “Security flaw in EDE; new release plans”. 2012年2月23日閲覧。
  78. ^ emacs-fu: emacs 23 has been released!”. Emacs-fu.blogspot.com (2009年7月28日). 2009年11月8日閲覧。
  79. ^ Zawodny, Jeremy (2003年12月15日). “Emacs Remote Editing with Tramp”. Linux Magazine. 2010年2月1日閲覧。 “Tramp [...] stands for "Transparent Remote (file) Access, Multiple Protocol."”
  80. ^ Free Software Foundation Inc (2007年). “Emacs News version 22.1”. 2013年12月29日閲覧。
  81. ^ a b c NEWS.19”. 2017年7月12日閲覧。
  82. ^ Emacs Timeline”. 2017年7月12日閲覧。
  83. ^ GNUs Flashes”. 2017年7月12日閲覧。
  84. ^ NEWS.18”. 2017年7月12日閲覧。
  85. ^ 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.”
  86. ^ NEWS.1-17”. 2017年7月12日閲覧。
  87. ^ Xemacs Internals”. 2017年7月12日閲覧。

参考文献 編集

外部リンク 編集