GNU Emacs
GNU Emacs(や他のGNUパッケージ一般)ではコピーレフトの強制を容易にするため、すなわちFSFが係争に入ったときに法廷でソフトウェアを守れるようにするため、著しい量のコード寄贈は著作権者が自身の著作権を適切に放棄またはフリーソフトウェア財団に委譲したときだけ受理する方針になっている。 この方針の唯一の例外はMule(MULtilingual Extension、Unicodeや、他の言語の用字系を処理する高度なメソッドがある)のコードで、著作権者が日本国政府で著作権の委譲が不可能であった 。 些細なコード寄贈やバグ修正には、この方針は適用されない。 些細かどうかの厳密な定義はないが、指針として10行未満のコードは些細とみなされている。
2011年、GPLにより意図された精神に反して、該当するソースコードが存在しないバイナリを2年間に渡りリリースしていたことが発覚した。ストールマンは「大変重大な誤り」としてこの事件について述べ、この誤りはすぐに修正された。当然のことだが、下流の再頒布者が技術的にGPL違反をしたのは彼ら自身の過ちではないため、FSFは誰も訴えなかった。
Exwm : X11アプリをEmacsウィンドウで起動できるXウィンドウマネージャ
Gnus : フル装備のニュースクライアント兼電子メールクライアントで、Zawinskiの法則に対する初期の証拠
howm : メモ取り環境兼ToDo管理
JDE: Java統合開発環境
Magit : バージョン制御システムであるgitと連携を可能にする
Mediawiki-mode : MediaWikiプロジェクトのページ編集モード
Mew, mh-e, Wanderlust: 電子メールクライアント
MULtilingual Enhancement to Emacs (MULE) : Unicodeにやや類似した方法で多言語のテキストを編集できる拡張
Org-mode : 要約を維持しながら、様々なタイプのリストを整理し、プロジェクトを見積もり、そして(PDF、HTML、OpenDocumentなどの)多数のフォーマットのドキュメントを組み合わせる。Org-modeを使う静的サイトジェネレータだけではなく、文芸的プログラミングのために利用できるBabelが存在する
Planner(英語版) : Emacsを使ったPersonal Information Manager
Pong : ポン
Simple Emacs Spreadsheet (SES) : スプレッドシート
SKK : かな漢字変換
GNU Emacsは後にUNIXへと移植され、Gosling Emacsよりも多くの機能を提供した。その中でも特に代表的な機能は、GNU Emacsの拡張言語としてフル機能搭載LISPである。それから瞬く間にGNU EmacsはGosling Emacsに取って代わり、UNIX Emacsエディタのデファクトスタンダードとなった。Markus Hess(英語版)は彼の1986 cracking spreeで、GNU Emacs電子メールサブシステムのセキュリティ上の弱点を悪用し、UNIXコンピュータ上でスーパーユーザーアクセス権を取得した。
1999年まで、ユーザーがパッチやElispコードをnet.emacsニュースグループに提出することが多かったが、現在と比べGNU Emacs開発への参加は制限されており、『伽藍とバザール』において「伽藍」開発スタイルの例として挙げられた。それ以降、GNU Emacsプロジェクトは公開された開発メーリングリストと、匿名CVSアクセスを採用した。開発は2008年まで単一のCVSトランクで行われていたが、現在では分散型バージョン管理システムであるgitが使われている。
リチャード・ストールマンはGNU Emacsの主要なメンテナのままだったが、時代が進むにつれ役割から後退していった。2008年以降はStefan MonnierとChong Yidongがメンテナンスを監督するようになった。2015年9月21日にMonnierはEmacs 25の機能凍結をもって事実上のメンテナのまま辞任することをアナウンスした。2015年11月5日、長期に渡り貢献してきたJohn Wiegleyが新しいメンテナとなることがアナウンスされた。
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に結果を表示することで、機能している。
Emacsはバッファと呼ばれるデータ構造でテキストを保持する。バッファは画面に表示することも非表示にすることもでき、さらにEmacs Lispプログラムやユーザインタフェースから全てのバッファ機能にアクセスできる。ユーザーは新しいバッファを作成したり不要なバッファを消去することができ、複数のバッファを同時に存在させることもできる。Emacsが使えるバッファ数はハードウェアメモリが許す限り増やすことができる。上級ユーザーは自身の作業と関係のある様々なタイプの開かれたバッファを数百個蓄えることもある。
バッファの中にはテキストファイルから読み込まれたテキストバッファなどのように、ユーザーが編集したり永続ストレージに保存することができるものもある。このようなバッファを、ファイルを「訪問している」バッファと呼ぶ。バッファはこれ以外にも、Emacsコマンドの出力、Diredディレクトリ一覧表示、「ヘルプ」ライブラリが表示するドキュメントの文字列、およびEmacs以外のエディタではダイアログボックスに表示される通知メッセージなどのデータを表示する役割も果たす。GNU Emacsはこれらの通知をミニバッファへ簡潔に表示し、さらにそれら通知の最新履歴を保持するために*Messages*バッファを提供する。バッファはシェルやREPLなどの外部プロセスに対する入出力エリアとしての役割も果たす。ユーザーバッファと区別するため、Emacsが独自に作成するバッファ名には最初と最後にアスタリスクが付くことが多い。開かれているバッファの一覧は、それ自体がこのタイプのバッファに表示される。
XEmacsほど有名ではないGNU Emacsのフォークには、以下のものがある:
Meadow - Microsoft Windows用の日本語バージョン。
SXEmacs(英語版) - Steve YoungsによるXEmacsのフォーク。
Aquamacs - GNU Emacsをベースとし、Macintoshユーザインタフェースと統合することに焦点を当てている。
Remacs - Rustプログラミング言語によるGNU Emacsの移植。