Emacs ( / ˈ iː m æ k s / )は、元々EMACS(「Editor Macros」の頭字語)[1][2][3]テキストエディタのファミリーであり拡張性が特徴となっている。[4][5] GNU Emacs のマニュアルでは、「拡張可能でカスタマイズ可能、自己文書化型のリアルタイム表示エディタ」と説明されている。[6]最初のEmacsの開発は1970年代半ばに始まり、[7][8]オリジナルから直接派生したGNU Emacsの開発が進行中であり、最新バージョンは29.4で、2024年6月にリリースされた。[9]
Emacsには10,000以上の組み込みコマンドがあり、そのユーザーインターフェースにより、ユーザーはこれらのコマンドをマクロに組み合わせて作業を自動化できます。Emacsの実装は通常、Lispプログラミング言語の方言を特徴としており、ユーザーと開発者はエディター用の新しいコマンドとアプリケーションを作成できます。拡張機能は、ファイル管理、リモートアクセス、[10]電子メール、アウトライン、マルチメディア、Git統合、RSSフィード、[11]共同編集、[12]などの機能のほか、ELIZA、Pong、Conway's Life、Snake、Dunnet、Tetrisの実装などのために作成されています。[13]
オリジナルのEMACSは、1976年にDavid A. MoonとGuy L. Steele Jr.によってTECOエディタ用のマクロセットとして書かれました。[14] [1] [2] [3] [15]これは、TECOマクロエディタTECMACとTMACSのアイデアに触発されました。[16]
Emacsの最も人気があり、最も移植されているバージョンはGNU Emacsで、リチャード・ストールマンがGNUプロジェクトのために作成したものです。[17] XEmacsは1991年にGNU Emacsから分岐した変種です。GNU EmacsとXEmacsは同様のLisp方言を使用しており、大部分で互換性があります。XEmacsの開発は非アクティブです。
GNU Emacsは、 viとともに、 Unix文化の伝統的なエディタ戦争における2大候補の1つです。GNU Emacsは、現在も開発が進められている最も古いフリーでオープンソースのプロジェクトの一つです。[18]
歴史



Emacs の開発は 1970 年代にMIT AI ラボで始まりました。MIT AI ラボのPDP-6およびPDP-10コンピュータは、Tape Editor and Corrector (TECO)と呼ばれるデフォルトの行エディタを備えたIncompatible Timesharing System (ITS)オペレーティングシステムを使用していました。ほとんどの現代のテキストエディタとは異なり、TECO は、ユーザーがテキストを追加したり、既存のテキストを編集したり、ドキュメントを表示したりするための別々のモードを使用していました。TECO に入力してドキュメントに直接文字を配置することはできませんでしたが、代わりに TECO コマンド言語で文字 ('i') を入力して入力モードに切り替え、必要な文字を入力します。その間、編集されたテキストは画面に表示されません。最後に文字 (<esc>) を入力してエディタをコマンドモードに戻しました。(同様の手法が、上書きを可能にするために使用されました。) この動作は、プログラムedの動作に似ています。
1970年代までに、TECOはすでに古いプログラムとなり、最初にリリースされたのは1962年でした。リチャード・ストールマンは1976年にスタンフォードAIラボを訪れ[20] 、フレッド・ライトが書いたラボのEエディタを見ました。 [21]彼はエディタの直感的なWYSIWYG(What You See Is What You Get)動作に感銘を受けました。これはその後、ほとんどの現代のテキストエディタのデフォルトの動作になりました。彼はMITに戻り、AIラボのハッカーであるカール・ミケルセンがTECOにControl-Rと呼ばれる表示/編集モードを追加し、ユーザーがキー入力するたびに画面表示を更新できるようにしました。ストールマンはこのモードを効率的に実行できるように再実装し、 TECOの表示編集モードにマクロ機能を追加しました。これにより、ユーザーは任意のキー入力を再定義してTECOプログラムを実行できるようになりました。[3]
E には、TECO にはないもう 1 つの機能がありました。ランダム アクセス編集です。TECO は、コストの問題でコンピュータ メモリが一般に小さかった時代に、 PDP-1で紙テープ編集用に設計されたページ シーケンシャル エディタで、ファイル内のページ順に 1 ページずつしか編集できないのが TECO の機能でした。ディスク上でページ ランダム アクセス用にファイルを構成する E のアプローチを採用する代わりに、ストールマンは TECO を修正して大きなバッファをより効率的に処理し、ファイル管理方法を変更してファイル全体を 1 つのバッファとして読み取り、編集、書き込みできるようにしました。現代のエディタのほとんどすべてがこのアプローチを使用しています。
TECO の新バージョンは AI ラボで急速に人気を博し、マクロを表すMACまたはMACSで終わる名前のカスタム マクロが大量に蓄積されました。2 年後、Guy Steele は多様なマクロを 1 つのセットに統合するプロジェクトを引き受けました。[22] Steele と Stallman の完成した実装には、新しいマクロ セットを拡張および文書化する機能が含まれていました。[3]結果として得られたシステムは EMACS と呼ばれ、これはEditing MACroSまたはE with MACroS の略です。Stallman が Emacs という名前を選んだのは、「当時、ITS では <E> が略語として使用されていなかったため」です。[23]伝説のハッカー公案によると、このプログラムはボストンの人気アイスクリーム店Emack & Bolio'sにちなんで名付けられたとのことです。 [24]最初の運用可能な EMACS システムは 1976 年後半に存在しました。[25]
ストールマンは、カスタマイズや事実上のフォークが多すぎることに問題を感じ、使用に際して一定の条件を設けた。[要出典]彼は後に次のように書いている: [25]
EMACS は共同共有を基本として配布されました。つまり、すべての改善点は私に返され、組み込まれて配布される必要があります。
オリジナルのEmacsは、TECOと同様に、ITSが動作するPDP-10でのみ動作した。その動作はTECOとは大きく異なっていたため、それ自体がテキストエディタとみなすことができ、すぐにITSの標準編集プログラムとなった。Mike McMahonは、ITSからTENEXおよびTOPS -20オペレーティングシステムにEmacsを移植した。Emacsの初期バージョンに貢献した他の人物には、Kent Pitman、Earl Killian、Eugene Ciccarelliがいる。1979年までに、EmacsはMITのAIラボとコンピュータサイエンス研究所で使用される主要なエディタとなった。[26]
実装
初期の実装


その後の数年間で、プログラマーたちは他のコンピュータシステム向けに様々なEmacs風エディタを書いた。これらには、マイク・マクマホンとダニエル・ウェインレブがLispマシン向けに書いたEINE ( EINE Is Not EMACS ) とZWEI [27] ( ZWEI Was EINE Initially )、およびオーウェン・セオドア・アンダーソンが書いたSine ( Sine Is Not Eine ) [28]などがある。ウェインレブのEINEはLispで書かれた最初のEmacsだった。1978年、バーナード・グリーンバーグはハネウェルのケンブリッジ情報システム研究所で、ほぼ完全にMultics LispでMultics Emacsを書いた。Multics Emacsは後にリチャード・ソーリー( NILプロジェクト向けにNILE Emacs風エディタを開発した)とバリー・マーゴリンによって保守された。GNU Emacsを含む多くのバージョンのEmacsは、後に拡張言語としてLispを採用することになる。
後にNeWSとJava プログラミング言語を発明することになるJames Gosling は、1981 年にGosling Emacs を作成しました。Unix上で動作する最初の Emacs ライクなエディタであるGosling EmacsはCで書かれており、Lisp ライクな構文を持つ言語であるMocklisp を拡張言語として 使用していました。
コンピュータ・コーポレーション・オブ・アメリカのCCA EMACS(スティーブ・ジマーマン)の初期の広告[29]は1984年に登場した。 [30] 1985年にGNU Emacsが発売されたときの比較では、無料対2,400ドルと言及されていた。[31] [無関係な引用]
GNU エマック


リチャード・ストールマンは、プロプライエタリな Gosling Emacs に代わるフリーソフトウェアの代替品を作るため、1984 年に GNU Emacs の開発に着手した。GNU Emacs は当初 Gosling Emacs をベースにしていたが、ストールマンが Mocklisp インタープリタを真の Lisp インタープリタに置き換えたため、ほぼすべてのコードを書き直す必要が生じた。これが、初期の GNU プロジェクトによってリリースされた最初のプログラムとなった。GNU Emacs はCで書かれており、同じく C で実装されたEmacs Lisp を拡張言語として提供する。最初の公開リリースであるバージョン 13 は、1985 年 3 月 20 日に作成された。GNU Emacs の最初の広く配布されたバージョンは、1985 年後半にリリースされたバージョン 15.34 であった。GNU Emacs の初期のバージョンは1.xxと番号が付けられ、最初の数字は C コアのバージョンを表していた。バージョン1.12以降ではメジャー番号は変更されないと考えられたため1は削除され、番号は1から13にスキップされました。[32] 2014年9月、GNU emacs-develメーリングリストで、GNU Emacsは迅速なリリース戦略を採用し、バージョン番号は将来より速く増加すると発表されました。[33]
GNU EmacsはGosling Emacsよりも多くの機能を提供し、特に拡張言語としてフル機能のLispを提供し、すぐにGosling Emacsに取って代わり、事実上のUnix Emacsエディタとなった。Markus Hessは1986年のクラッキングでGNU Emacsの電子メールサブシステムのセキュリティ上の欠陥を悪用し、 Unixコンピュータのスーパーユーザーアクセスを獲得した。[34]
GNU Emacsの機能のほとんどは、Emacs Lispと呼ばれるスクリプト言語で実装されています。GNU Emacsの約70%はEmacs Lisp拡張言語で書かれているため、[35] Emacs Lispインタープリタを実装するCコアを移植するだけで済みます。これにより、Emacsを新しいプラットフォームに移植することは、ネイティブコードのみで構成された同等のプロジェクトを移植するよりもかなり簡単になります。
GNU Emacsの開発は1999年まで比較的閉鎖的で、 The Cathedral and the BazaarではCathedral開発スタイルの例として使われていました。このプロジェクトはそれ以来、公開開発メーリングリストと匿名CVSアクセスを採用しています。開発は2008年まで単一のCVSトランクで行われ、その後Bazaar DVCSに切り替えられました。2014年11月11日、開発はGitに移行されました。[36]

リチャード・ストールマンはGNU Emacsの主要なメンテナーであり続けているが、時々その役割から退いている。ステファン・モニエとチョン・イードンは2008年から2015年までメンテナーを務めた。[37] [38]ジョン・ウィーグリーは2015年にMITでストールマンと会った後、メンテナーに任命された。[39] 2014年初頭の時点で、GNU Emacsにはその歴史を通じて579人のコミッターがいた。 [40]
エマック

Lucid Emacsは、GNU Emacs 19の初期のアルファ版をベースに、1991年にLucid Inc.のJamie Zawinskiらによって開発が始まりました。フリーソフトウェア開発における初期のフォークとして最もよく知られているのは、2つのEmacsバージョンのコードベースが分岐し、別々の開発チームがそれらを1つのプログラムに統合する努力をやめたときに起こりました。[41] Lucid Emacsはその後、 XEmacsに改名されました。その開発は現在非アクティブで、最新の安定バージョン21.4.22は2009年1月にリリースされました(ベータ版は2013年にリリースされました)。一方、GNU Emacsは以前はXEmacsのみだった多くの機能を実装しています。[42] [より良いソースが必要]
GNU Emacsの他のフォーク
その他の注目すべきフォークは次のとおりです。
- Aquamacs – GNU Emacs をベースにしており (Aquamacs 3.2 は GNU Emacs バージョン 24 をベースにしており、Aquamacs 3.3 は GNU Emacs バージョン 25 をベースにしています)、Apple Macintosh ユーザー インターフェイスとの統合に重点を置いています。
- Meadow – Microsoft Windows用の日本語版[43]
さまざまなEmacsエディタ



過去には、Emacs の小型版を製作するプロジェクトが急増した。GNU Emacs は当初、32 ビットのフラット アドレス空間と少なくとも 1 MiBの RAM を搭載したコンピュータを対象としていた。[44]このようなコンピュータは 1980 年代のハイエンドワークステーションやミニコンピュータであり、一般的なパーソナル コンピュータハードウェアで動作する小型の再実装が必要であった。今日のコンピュータはこれらの制限を排除するのに十分なパワーと容量を備えているが、最近では小型のクローンがソフトウェア インストール ディスクに収まるように、または性能の低いハードウェアで使用できるように設計されている。[45]
他のプロジェクトは、Lisp の別の方言やまったく別のプログラミング言語で Emacs を実装することを目指しています。すべてが現在も積極的に保守されているわけではありませんが、これらのクローンには次のものがあります。
- MicroEMACS は、もともと Dave Conroy によって書かれ、Daniel Lawrence によってさらに開発され、多くのバリエーションが存在します。
- mg は、元々は MicroGNUEmacs と呼ばれ、後に mg2a と呼ばれました。これは、GNU Emacs にさらに近づけることを目的として MicroEMACS から派生したパブリック ドメインのプログラムです。現在はOpenBSDにデフォルトでインストールされています。
- 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 に進化し、最終的には Borland Sprintワード プロセッサになりました。
- Perfect Writer は、 MINCE から派生したCP/M実装で、1982 年頃に Kaypro II および Kaypro IV の非常に初期のリリースにデフォルトのワード プロセッサとして組み込まれました。後に、 WordStarの代替として Kaypro 10 に提供されました。
- Freemacs は、テキスト マクロ拡張に基づく拡張言語を使用し、元の 64 KiBのフラット メモリ制限内に収まるDOSバージョンです。
- Zmacs は、 MIT Lisp Machineおよびその派生製品用で、 ZetaLispで実装されています。
- Epsilon [46]は、Lugaru SoftwareによるEmacsクローンです。DOS、Windows、Linux、FreeBSD、Mac OS X、OS/2のバージョンがリリースにバンドルされています。C構文の非Lisp拡張言語を使用し、シングルタスクMS-DOSでの非常に初期の並行コマンドシェルバッファ実装を使用しています。
- PceEmacs は、SWI-Prolog用の Emacs ベースのエディタです。
- Hemlock は、もともとSpice Lispで書かれ、その後Common Lispになりました。CMU Common Lispの一部です。Zmacsの影響を受けています。後に Lucid Common Lisp (Helix として)、 LispWorks、Clozure CLプロジェクトによってフォークされました。また、Portable Hemlock プロジェクトもあり、これは複数の Common Lisp 実装で実行される Hemlock を提供することを目指しています。
- edwin は、MIT/GNU Scheme に含まれている Emacs のようなテキスト エディターです。
Emacs エミュレーションを備えたエディタ
- Cocoaテキストシステムは、同じ用語をいくつか使用し、多くのEmacsナビゲーションバインディングを理解します。これは、ネイティブUIがControlキーの代わりにCommandキー(Superに相当)を使用するため可能です。[47]
- Eclipse (IDE) は、 Emacs キーバインディングのセットを提供します。
- Epsilon (テキスト エディター)デフォルトでは Emacs エミュレーションに設定され、vi モードをサポートします。
- GNOME Builder には Emacs のエミュレーション モードがあります。
- GNU Readline は、標準の Emacs ナビゲーション キーバインディングを理解する行エディタです。vi エミュレーション モードも備えています。
- IntelliJ IDEA はEmacs キーバインディングのセットを提供します。
- JED にはEmacs のエミュレーション モードがあります。
- Joe's Own Editor は、jmacsとして呼び出されると、Emacs キーバインディングをエミュレートします。
- MATLABはエディタ用にEmacsのキーバインディングを提供しています。[48]
- Multi-Edit は、エディターに Emacs キーバインディングを提供します。
- KornShellには、 Gnu Readlineより古いEmacs行編集モードがあります。[49]
- Visual Studio Code には、 Emacs キーバインディングをエミュレートできる拡張機能が複数あります。
- Oracle SQL Developer では、代替キーボード ショートカット レイアウトを保存および読み込むことができます。組み込みレイアウトの 1 つは、異なるコマンドを使用してより近い動作を実現するなど、Emacs のようなキーバインディングを提供します。
特徴
Emacs は主にテキスト エディターであり、テキストを操作するために設計されていますが、LaTeX、Ghostscript 、Web ブラウザーなどの外部プログラムとインターフェイスすることで、ワード プロセッサのように文書をフォーマットして印刷することもできます。Emacs には、単語、文、段落などのテキストの意味単位や関数などのソース コード構成要素を操作して差別化表示するためのコマンドが用意されています。また、ユーザー定義の編集コマンドのバッチを実行するための キーボード マクロも備えています。
GNU Emacs はリアルタイム表示エディタで、編集内容は画面上にリアルタイムで表示されます。これは現代のテキストエディタの標準的な動作ですが、EMACS はこれを実装した最初のエディタの 1 つです。代替案としては、テキストを表示するために別のコマンドを発行する必要があります (たとえば、テキストを変更する前または変更した後)。これは、QED (BTS、CTSS、Multics)、ed (Unix)、ED (CP/M)、Edlin (DOS) などの以前の (または単に単純な) 行エディタとコンテキスト エディタでは一般的でした。
一般的なアーキテクチャ
ファイルへの文字の挿入などの基本的な編集操作を含む、Emacs のほぼすべての機能は、Lisp プログラミング言語の方言で記述された関数によって実現されます。GNU Emacs で使用される方言はEmacs Lisp (Elisp)として知られており、Emacs をGNUおよびUnixに移植するために特別に開発されました。Emacs Lisp レイヤーは、 C プログラミング言語で記述された基本サービスとプラットフォーム抽象化の安定したコアの上に位置し、これにより、ほとんどのエディターが動作する Lisp システムの実装セマンティクスを変更することなく、GNU Emacs をさまざまなオペレーティング システムとアーキテクチャに移植できます。この Lisp 環境では、変数と関数を変更しても Emacs を再構築または再起動する必要はありません。また、コア エディター機能の新しく再定義されたバージョンであっても、非同期でコンパイルされ、ライブ環境にロードされて既存の定義が置き換えられます。最新の GNU Emacs は、 Emacs Lisp のバイトコードとネイティブ コードの両方のコンパイルを備えています。
すべての設定は変数、クラス、データ構造に保存され、これらをライブで更新するだけで変更できます。この場合、Lisp 方言を使用することが重要な利点となります。Lisp 構文は、いわゆるシンボリック式(または sexpr) で構成されており、評価可能なコード式としても、XML、JSON、YAMLなどのよく知られている形式に似ているが、より単純で汎用的なデータシリアル化形式としても機能できるためです。このように、既存の機能をカスタマイズすることと新しい機能を作成することの間には、実際にはほとんど違いはありません。どちらも同じ基本的な方法で実行されます。これは、たとえばVS Codeなどのほとんどの最新の拡張可能なエディターとは操作上異なります。VS Codeでは、エディターのインターフェイスと機能を実装し、ユーザー定義の設定とオプションをエンコードするために別の言語が使用されます。 Emacs のオープン デザインの目標は、Emacs 開発者がgit ツリーで作業するのと同じように、Emacs の内部を通常の使用時に Emacs ユーザーに透過的に公開し、Emacs の使用と Emacs のプログラミングの区別を可能な限りなくしながら、初心者ユーザーに安定した実用的で応答性の高い編集環境を提供することです。
インタラクティブデータ
テキスト編集の主なデータ構造はバッファです。バッファは、関連付けられた属性を持つデータ (通常はテキスト) を含むメモリ領域です。最も重要なものは次のとおりです。
- ポイント:編集カーソル;
- マーク:ポイントとともに設定可能な場所であり、選択できる
- 領域: 編集コマンドが適用される概念的に連続したテキストのコレクション。
- バッファがアクセスしているファイルの名前とinode (存在する場合)。
- デフォルトのディレクトリ。OSレベルのコマンドはデフォルトでここから実行されます。
- バッファのモード。メジャーモードと複数のマイナーモードが含まれる場合があります。
- バッファエンコーディング、Emacs がバッファ データをユーザーに対して表現する方法。
- さまざまなバッファローカル変数と Emacs Lisp の状態。
特に、モードはEmacs の重要な概念であり、Emacs の機能を特定のバッファのデータに関連する動作とキーバインドのセットに分解するメカニズムを提供します。メジャーモードは、バッファのデータとユーザーがバッファを操作する方法 (特定の言語でのソースコードの編集、hex の編集、ファイルシステムの表示、gitの操作など) に関連する関数とコマンドの一般的なパッケージを提供し、マイナーモードは多くのメジャーモード (などauto-save-mode) に適用可能な補助的な機能のコレクションを定義します。マイナーモードは、各バッファに対してローカルに、またはすべてのバッファに対してグローバルにオンまたはオフに切り替えることができますが、メジャーモードはバッファごとにのみ切り替えることができます。バッファに関連するがモードにバンドルされていないその他のデータは、そのバッファにフォーカスし、関連するデータを直接変更するだけで処理できます。
エディタとのあらゆるインタラクション(キーの押下やマウスボタンのクリックなど)は、Emacs Lisp コード(通常はコマンド )を評価することによって実現されます。これは、明示的に対話型で使用するために設計された関数です。キーは任意に再定義でき、コマンドには名前でアクセスすることもできます。一部のコマンドは、さまざまな方法でユーザーが提供した任意の Emacs Lisp コード(たとえば、、、または個々eval-の を操作する関数のファミリ)を評価します。最も単純なユーザー入力(印刷可能な文字など)でさえ、 などの Emacs Lisp 関数として実行されます。これは、一般的なテキスト編集バッファー内のほとんどのキーボード キーにデフォルトでバインドされており、呼び出しに使用されたキーに関連付けられた
locale定義の文字でパラメーター化されます。bufferregionexpressionself-insert-command
たとえば、fテキスト入力を受け入れるバッファで キーを押すと、コード が評価され、ポイント に文字定数のコピーが 1 つ挿入されます。この場合、 は、Emacs がユニバーサル引数と呼ぶものによって決定されます。すべての Emacs コマンド コードは数値を受け入れます。数値は、最も単純な使用法ではアクションの繰り返しを示しますが、より複雑な場合 (繰り返しが意味をなさない) では他の動作を引き起こすことがあります。これらの引数は、コマンドのプレフィックス ( + 、またはより簡潔な+など) を介して提供され、 に展開されます。プレフィックスが指定されていない場合、ユニバーサル引数は です。すべてのコマンドは暗黙的に 1 回実行されますが、このようなプレフィックスが指定されている場合は、複数回、または別の方法で呼び出されることがあります。このような引数は、そうすることが理にかなっている場合は、正でない値になることもあります。引数を受け入れる関数が、その関数自身のセマンティクスに従って、特定の数値が何を意味するかを決定する必要があります。一般的な使用法の 1 つは、関数がユニバーサル引数の符号をチェックするだけで逆のアクションを実行することです。たとえば、デフォルトでは逆順にソートし、負の引数で呼び出された場合は引数の絶対値をソート キーとして使用して逆順にソートする sort コマンド (列インデックス (または区切り文字) 7 で逆順にソートするなど)、または単純に互いの否定である undo/redo (一度にいくつかのステップで diff の再帰履歴を前後に移動します) などです。
(self-insert-command 1 ?f)?f 1Controlu 7 fMeta7 f(self-insert-command 7 ?f)1-7
コマンド言語
Emacs はコマンドの語彙が比較的豊富であるため、アクションを実行するために必要なキーストロークを簡潔に表現するために、長年定着しているコマンド言語を備えています。このコマンド言語は、、、、、のシフトキーと修飾キーを認識します。IBM スタイルのキーボードにはこれらのキーがすべてあるわけではありませんが、通常は必要に応じて構成できます。これらは、コマンド言語では、それぞれ接頭辞、、、、、で表されます。名前が 2 文字以上でのみ印刷可能なキーは、山括弧で囲みます。したがって、+ + + (従属数式をチェックし、 Excelで開いているすべてのブックのすべてのセルを計算する) などのキーボードショートカットは、Emacs コマンド言語では と表現され、 + + + (ファイル名に一致する正規表現による増分ファイル検索)などの Emacs コマンドはと表現されます。コマンド言語は、ショートカットが割り当てられていないコマンドを呼び出すために必要なアクションを表現するためにも使用されます。たとえば、コマンド(一時的なテキストの保存と操作のためにメモリ内のバッファを初期化する) は、ユーザーが呼び出すと として報告され、Emacs はコンテキストで使用可能なコマンドの名前空間をスキャンして、それを一意に語彙化する最短のキーストロークのシーケンスを返します。
CtrlAlt⇧ ShiftMetaSuperHyperC-A-S-M-s-H-CtrlAlt⇧ ShiftF9C-A-S-<f9>Metas f CtrlMetasM-s f C-M-sscratch-bufferM-x scra <return>
ダイナミックディスプレイ
Emacs はグラフィカル ユーザー インターフェイスの現代の標準用語よりも古いため、よく知られているインターフェイス要素に多少異なる名前を使用しています。Emacs ユーザーが対話するデータであるバッファは、ターミナル画面または GUI ウィンドウのタイル状の部分であるウィンドウ内でユーザーに表示されます。Emacs ではこれをフレームと呼びます。現代の用語では、Emacsフレームはウィンドウ、Emacsウィンドウは分割された部分になります。設定に応じて、ウィンドウには独自のスクロール バー、行番号、通常はナビゲーションを容易にするための「ヘッダー行」、および下部のモード行(通常はバッファ名、アクティブ モード、バッファのポイント位置などが表示されます) を含めることができます。各フレームの下部は、出力メッセージ (当時は「エコー領域」と呼ばれていました) とコマンドのテキスト入力 (当時は「ミニバッファ」と呼ばれていました) に使用されます。
一般に、Emacs の表示要素 (ウィンドウ、フレームなど) は、特定のデータやプロセスに属していません。バッファはウィンドウに関連付けられておらず、同じバッファに複数のウィンドウを開くことができます。たとえば、長いテキストのさまざまな部分を前後にスクロールせずに並べて追跡したり、複数のバッファで同じテキストを共有したりすることができます。たとえば、混合言語ファイルで異なるメジャーモードを利用したりすることができます。同様に、Emacs インスタンスは特定のフレームに関連付けられておらず、実行中の 1 つの Emacs プロセスを表示する複数のフレームを開くことができます。たとえば、マルチモニター設定で画面ごとに 1 つのフレーム、またはリモート システムからssh経由で接続されたターミナル フレームと、ローカル システムのモニターを介して同じ Emacs プロセスを表示するグラフィカル フレームなどです。
バッファにウィンドウが必要ないのと同様に、Emacs プロセスの実行にはフレームは不要です。一般的な使用パターンの 1 つは、Emacs を編集サーバーとして展開することです。つまり、ヘッドレス デーモンとして実行し、フレームを生成するクライアントを介して接続します。このサーバーは、クライアント プログラムをユーザーのプログラムEDITORまたは変数として宣言するだけで、エディターが必要なあらゆる状況で使用できるようになりますVISUAL。このようなサーバーはバックグラウンドで実行され続け、子プロセスを管理し、開いているパイプ、ポート、または FIFO から標準入力を蓄積し、定期的なアクションまたは事前にプログラムされたアクションを実行し、編集セッション間のバッファの元に戻す履歴、保存されたテキスト スニペット、コマンド履歴、およびその他のユーザー状態を記憶します。この動作モードでは、Emacs はscreenやtmuxなどのプログラムの機能をオーバーラップします。
Emacs は、表示機能と編集機能を分離しているため、ダム端末よりも複雑なデバイスでもほぼ同様に表示できます。これには、十分な機能を備えたテキスト端末で一般的なグラフィカルWIMP要素を提供することも含まれます。ただし、グラフィカル フレームは、テキスト端末フレームの機能の厳密なスーパーセットを提供する、推奨される表示モードです。
カスタマイズ性と拡張性
- ユーザーの操作をマクロに記録して再生することで、複雑で反復的なタスクを自動化できます。マクロは保存して後で呼び出すこともできますが、多くの場合はアドホックに実行され、使用後は各マクロが破棄されます。
- Emacs の機能の定義は Emacs Lisp に基づいて統一されているため、マクロ自動化の目的において「ユーザー アクション」と見なされるものは柔軟です。マクロには、たとえば、キーの押下、コマンド、マウスのクリック、他のマクロ、およびこれらを介して実行できるものすべてを含めることができます。したがって、マクロは再帰的であり、マクロ内で定義および呼び出すことができます。
- 起動時に、Emacsは~/.emacsというEmacs Lispスクリプトを実行します(最近のバージョンでは、~/emacs.el、~/.emacs.d/init.el、~/.config/emacs/init.el [ 50]や、~/.config/emacs/early-init.elの類似のバリエーションも検索します) 。[51] Emacsは、early-init.elが存在する場合は最初にそれを読み取り、これを使用して、グラフィカル表示システムやパッケージマネージャなどのEmacsのコア機能をロード前に構成または短絡させることができます。次に、見つかった最初のバージョンの.emacsまたはinit.elを実行し、残りは無視します。この個人用カスタマイズファイルは任意の長さと複雑さになる可能性がありますが、典型的な内容は次のとおりです。
- グローバル変数を設定したり、関数を呼び出してEmacsの動作をカスタマイズする、例えば
(set-default-coding-systems 'utf-8) - 標準のキー バインディングをオーバーライドし、ユーザーにとって便利だがデフォルトではキー バインディングがないコマンドのショートカットを追加します。例:
(global-set-key (kbd "C-x C-b") 'ibuffer) - 拡張機能の読み込み、有効化、初期化 (Emacs には多くの拡張機能が付属していますが、デフォルトで読み込まれるのは少数のみです。)
- 特定の時間に任意のコードを実行するようにイベントフックを構成する(たとえば、バッファを保存した後にソースコードを自動的に再コンパイルする
after-save-hook) - 任意のファイルを実行します。通常は、長すぎる設定ファイルを管理しやすく均一な部分に分割します ( ~/.emacs.d/と~/elisp/は、これらの個人用スクリプトの従来の場所です)
- グローバル変数を設定したり、関数を呼び出してEmacsの動作をカスタマイズする、例えば
- カスタマイズ拡張機能を使用すると、ユーザーは、 .emacsで変数を設定するよりもユーザーフレンドリーな方法で、Emacs 内からカラースキームなどの構成プロパティを対話的に設定できます。検索、説明、ヘルプ テキスト、複数選択入力、デフォルトへの復元、リロードせずに実行中の Emacs インスタンスを変更する機能、および他のプログラムの設定機能に似たその他の便利な機能が提供されます。カスタマイズされた値は、 .emacs (または別の指定されたファイル)に自動的に保存されます。
- フォントや色の選択に影響するテーマは、Emacs Lisp ファイルとして定義され、カスタマイズ拡張機能を通じて選択されます。
- モードでは、フォントを変更してコードを強調表示したり、キーバインディングを変更したり (foreword-function と forward-page) することで、さまざまなプログラミング言語 (emacs-lisp-mode、c-mode、java-mode、R の ESS など) の編集をサポートします。その他のモードには、スプレッドシート (dismal) や構造化テキストの編集をサポートするモードがあります。
自己文書化
最初の Emacs には、すべてのコマンド、変数、内部関数のドキュメントを含むヘルプライブラリが含まれていました。このため、Emacs の支持者は、このソフトウェアが通常の機能と現在の状態に関する情報をユーザーに提供するという点で自己ドキュメント化されていると説明しました。各関数には、ユーザーの要求に応じて表示されるドキュメント文字列が含まれており、この慣行はその後、Lisp、Java、Perl、Pythonなどのプログラミング言語に広まりました。このヘルプ システムにより、組み込みライブラリまたは追加されたサードパーティ ライブラリから、各関数の実際のコードにユーザーを誘導できます。
Emacs にはチュートリアルも組み込まれています。Emacs は、編集するファイルがない状態で起動すると、簡単な編集コマンドを実行するための手順とチュートリアルを呼び出すための手順を表示します。このチュートリアルは、Stuart Cracraft と Richard Stallman によるものです。
文化
Emacs教会
リチャード・ストールマンが結成したEmacs教会は、Emacsユーザーのために作られたパロディ宗教である。 [52] viを獣のエディタと呼んでいるが(vi-vi-viはローマ数字で6-6-6)、viの使用に反対しているわけではなく、むしろプロプライエタリソフトウェアの忌み嫌う対象と呼んでいる(「 viの無料版を使うのは罪ではなく苦行である」[53])。Emacs教会には独自のニュースグループalt.religion.emacs [54]があり、このパロディ宗教を支持すると称する投稿がある。viの支持者はこれに対抗するvi教団を結成している。
ストールマンは冗談で自分自身をEmacs教会の聖人であるSt IGNU ciusと呼んでいます。 [55]これはキリスト教で崇拝されている初期の教父、 アンティオキアのイグナチオに言及したものです。
Emacsの小指
俗に「Emacs小指」と呼ばれる反復運動性運動障害は、Emacs が修飾キーに大きく依存していることに起因するという言い伝えがあるが、キーボードを多用する他のコンピュータ プログラムよりも Emacs がそのような問題を引き起こすことを示す研究は行われていない。
ユーザーはさまざまな方法でこの問題に対処してきました。タッチタイピング中に左手の小指に過度の負担がかからないように、一般的なPCキーボードのShiftキーなどの2つのコントロールキーを使用するだけでよいと推奨するユーザーもいます。キーボードを適切に使用すればRSIは軽減されます。[56]
- ErgoEmacsのキーバインディングを使用する(マイナーモードを使用
ergoemacs-mode)。[57] - キーボードレイアウト全体をカスタマイズして、統計的に頻繁に使用されるEmacsキーをより適切な場所に移動します。[58]
evil-mode高度なVimエミュレーション レイヤー。god-modeは、修飾キーなしで Emacs コマンドを入力するモードを備えた vim と同様のアプローチを提供します。- SpacemacsとDoom Emacsが提供するカスタマイズされたキーレイアウトを使用して、キーを制御シーケンスを開始するためのメインキーとして使用するプロジェクト。これらのプロジェクトでは、と後者の両方を多用しています。[59]space bar
evil-modegod-mode - スペースバーなどのより快適にアクセスできるキーに二重の役割を与え、他のキーと組み合わせて押すとコントロールキーとして機能するようにします。人間工学に基づいたキーボードや、日本語キーボードのようにスペースバーの隣にキーが多数あるキーボードでは、MetaやShiftなどの他の修飾キーも親指で操作できます。[60]
- 人間工学に基づいた限定されたキーバインドのサブセットを使用し、 と入力して他の機能にアクセスします
M-x <command-name>。Mx 自体も再バインドできます。
ハードウェアソリューションには、親指で簡単に操作できる位置に修飾キーを配置したKinesis の Contoured Keyboardや、大きな修飾キーがキーボードの両側に対称的に配置され、手のひらで押せる Microsoft Natural Keyboardなどの特殊なキーボードがあります。フットペダルも使用できます。
Emacsの小指は比較的最近開発されたものです。Emacsが開発されたSpace-cadet キーボードには、スペース バーに隣接した特大のコントロール キーがあり、親指で簡単に届きました。
用語
emacsという単語は、boxenやVAXenとの音声的な類推から、emacsの異なる種類を指すために、emacsenと複数形になることがあります。 [61]
参照
参考文献
- ^ ab Greenberg, Bernard S. (1979). Multics Emacs: 歴史、設計、実装。
- ^ abc 「GNU Emacs FAQ」.
- ^ abcd Adrienne G. Thompson. 「MACSimizing TECO」。2013年10月24日時点のオリジナルよりアーカイブ。2012年2月26日閲覧。
- ^ 「GNU Emacs 入門チュートリアル」。
エディタが「emacs」と呼ばれるためには、マクロ言語だけでなく、実際のプログラミング言語で完全に拡張可能であることが主な要件です。
- ^ 「GNU Emacs Pocket Reference」。GNU
Emacs は、Emacs ファミリーのエディタの中で最も人気があり、広く普及しています。
- ^ 「GNU Emacsマニュアル」。FSF 。 2012年11月24日閲覧。
- ^ Zawinski, Jamie (2007-10-29). 「Emacs Timeline」. www.jwz.org . 2023年7月31日閲覧。
- ^ 「1976年のEmacsの起源について(Emacsブログ記事)」。onlisp.co.uk 。 2024年7月24日閲覧。
- ^ Kangas, Stefan (2024年6月22日). 「Emacs 29.4 リリース」. lists.gnu.org . 2024年4月29日閲覧。
- ^ 「Tramp ユーザーマニュアル」。フリーソフトウェア財団。2009 年 4 月 4 日閲覧。
- ^ 「Emacs Web フィード リーダー Elfeed の紹介」。
- ^ 「競合のない複製されたデータ型を使用した共同編集」。
- ^ 「娯楽」。
最後に、もしあなたがイライラしているのに気づいたら、有名な心理療法士のエリザにあなたの問題を説明してみてください。Mx ドクターにお願いしてください。
- ^ Zawinski, Jamie (2005-06-21) [1999]. 「Emacs Timeline」 . 2015年8月11日閲覧。
- ^ リチャード・ストールマンはしばしばもう一人の共同作成者としてクレジットされているが、ダニエル・ウェインレブは次のように書いている。「オリジナルの (TECO ベースの) Emacs は、ガイ・L・スティール・ジュニアとデビッド・ムーンによって作成および設計された。彼らが Emacs を動作させ、AI ラボの標準テキスト エディターとして定着した後、ストールマンがメンテナンスを引き継いだ。」 ムーン自身は次のように答えている。「私が覚えている限り、すべて本当だ。しかし公平に言えば、ストールマンはガイと私から Emacs を「解放」した後、Emacs を大幅に改良したと言わざるを得ない。」 参照: ダン・ウェインレブ(2007 年 11 月 11 日)、「ストールマンのシンボリックと LMI の形成に関する話に対する反論」、ダン・ウェインレブのブログ: ソフトウェアとイノベーション、2009 年 1 月 1 日のオリジナルからアーカイブ
{{citation}}: CS1 メンテナンス: 不適切 URL (リンク)。 - ^ 「Emacs の歴史」XEmacs 内部マニュアル2006-12-11 . 2007-08-22閲覧。
- ^ Allombert, Bill. 「Debian 人気コンテスト」。編集者レポート。Debian。2011年11 月 22 日閲覧。
- ^ 「最も古く重要なオープンソース プログラム 10 選」ZDNet。
- ^ レイモンド、エリック S.、キャメロン、デブラ、ローゼンブラット、ビル (1996)。Learning GNU Emacs、第 2 版。セバストポル、カリフォルニア州: オライリー。pp. 408–409。ISBN 1-56592-152-6。
- ^ ウィリアムズ、サム(2002)。『フリーダムの自由: リチャード・ストールマンのフリーソフトウェアへの闘い』セバストポル、カリフォルニア州: オライリーメディア、p. 82。ISBN 0-596-00287-4。
- ^ Arthur Samuel (1980年3月). 「Essential E」(PDF) . 2020年4月19日閲覧。
- ^ 「EMACS vs. vi: 終わりなきオタクの『聖戦』」。2014年11月26日時点のオリジナルよりアーカイブ。2014年5月30日閲覧。
「EMACSは実際には標準化プロジェクトとして始まった」とガイ・スティールは電子メールで述べている。
- ^ Stallman, Richard M. (1987). 「EMACS フルスクリーンエディタ」. GARB . No. Maj 1987. Lysator, Linköping University. pp. 8–11 . 2007-09-14閲覧。
- ^ Reynolds, Craig (1992-02-10). Wiseman, David G. (ed.). "The Emac Bolio Name Koan". David G. Wiseman: Stories of Computer Folklore . 2003年1月16日時点のオリジナルよりアーカイブ。
かつて、ある生意気な初心者がストールマンにこう言った。「エディタがEmacsと呼ばれる理由は分かるが、なぜジャスティファイアがBolioと呼ばれるのか?」。ストールマンは力強くこう答えた。「名前は名前に過ぎない。Emack & Bolio'sはボストンの町で人気のアイスクリームショップの名前だ。この2人はどちらもそのソフトウェアとは何の関係もない。」彼の質問は答えられたが、まだ答えられていないので、初心者は立ち去ろうとしたが、ストールマンは彼を呼び止めた。「EmacsもBolioもアイスクリームショップとは何の関係もない。」
- ^ ab Stallman, Richard (1981 年 3 月 26 日). EMACS: 拡張可能でカスタマイズ可能な自己文書化ディスプレイ エディタ(PDF) (技術レポート). MIT AI ラボ AI メモ 519a . 2011 年 1 月 7 日閲覧。
- ^ Leigh Klotz (2007-08-29). 「『冗談には気をつけろ』で引用された電子メール」ニューヨーク・タイムズ。 2010年5月1日閲覧。
- ^ 「ZWEI の作者 Dan Weinreb のコメント」。
私は 2 番目の Emacs を書きました。Lisp マシン実装です。その仕様は「Stallman の PDP-10 (オリジナル) Emacs と同じことを行う」というもので、そこから発展していきました。とにかく量が多いのです。私と Mike McMahon は、ZWEI/Zmacs を作成するために非常に多くのコマンドを実装するのに、膨大な時間を費やしました。
- ^ Owen Theodore Anderson (1979 年 1 月)。「ディスプレイ指向のエディター ライティング システムの設計と実装」(PDF) 。2012 年 9 月 9 日閲覧。
- ^ クリストファー・ケルティ、マリオ・ビアジョーリ、ピーター・ジャジ、マーサ・ウッドマンシー(2015年)。知的財産の創造と破壊。
コンピュータ・コーポレーション・オブ・アメリカ(CCA)
EMACS、スティーブ・ジマーマン著
- ^ “Emacs”. 2017年12月17日.
- ^ 「GNU Emacs と CCA Emacs の違い」。
- ^ 「Emacsの歴史」。
- ^ "emacs-devel msg 00872 (2014-09-29)"。
振り返ってみると、24.3 は 25.1、24.4 は 26.1 と名付けられるべきでした。.N は
バグ
修正リリースにのみ使用すべきであり、24.3、24.4、および以前に計画されていた 24.5 はいずれもバグ修正リリースではありません。
- ^ ストール、クリフォード(1988)。「狡猾なハッカーを追跡する」。Communications of the ACM。31 ( 5 ): 484–497。doi : 10.1145/42411.42412。S2CID 6956966 。
- ^ 「GNU Emacs」。Open Hub 。2017年11月25日閲覧。
- ^ Raymond, Eric (2014-11-12). 「新しい Git リポジトリが起動しました」。2017 年 11 月 25 日閲覧。
- ^ Stallman, Richard (2008-02-22). 「Re: 新しい Emacs メンテナーまたはチームを探しています」. gnu.org メーリングリスト. 2017-11-25閲覧。
- ^ McNamara, Paul (2008-02-25). 「Stallman 氏、GNU Emacs の引き渡し、その将来、そして命名法の重要性について」Network World。 2008-05-23 時点のオリジナルよりアーカイブ。2017-11-25閲覧。
- ^ Chirgwin, Richard (2015-11-05). 「リチャード・ストールマンが退任し、Emacs に新しいメンテナーが就任」The Register . 2017-11-25閲覧。
- ^ Raymond, Eric (2014-03-29). 「史上最も醜いリポジトリ変換」. 2017-11-25閲覧。
29 年間にわたり 579 人以上の人々が開発に携わってきました。
- ^ Stephen J.、Turnbull。「XEmacs vs. GNU Emacs」。2012年10月2日閲覧。
- ^ 「XEmacs は死んだ。XEmacs 万歳!」
- ^ フロントページ - Meadow Wiki 2012-02-16 にWayback Machineでアーカイブ
- ^ 「私の Lisp 体験と GNU Emacs の開発」。1985
年当時、仮想メモリのない 1 メガバイトのマシンを持っている人がいました。彼らは GNU Emacs を使いたいと考えていました。つまり、プログラムをできるだけ小さくする必要がありました。
- ^ 「GNU Zile (Zile は Lossy Emacs) - 概要」。
現代のコンピュータには、ほんの一瞬で完全な Emacs を起動して実行するのに十分なリソースがあり、おそらく Emacs があなたに必要なものです。Zile は、小型で高速、かつ強力な Emacs クローンです。フットプリントの小さいインストール (フロッピー ディスクなど)、メモリの少ないマシン、または特にリモート マシン上または別のユーザー (例: root) での素早い編集セッションに役立ちます。
- ^ 「Lugaru Software ホームページ」.
- ^ 「Cocoa テキスト システム」。
- ^ 「コマンド ウィンドウとエディターのキーバインドを設定する」。Mathworks ブログ。2007 年 5 月 11 日。2019 年 8 月 18 日に取得。
- ^ Bolsky, Morris I.; Korn, David G. (1989). 「謝辞」。KornShell コマンドおよびプログラミング言語。ニュージャージー州エングルウッドクリフス: Prentice Hall。pp. xii. ISBN 0-13-516972-0。
- ^ 「Init ファイル」。
- ^ 「初期のInitファイル」。
- ^ 「Saint IGNUcius - Richard Stallman」 。 2015年1月29日閲覧。
- ^ 「ANUでのリチャード・M・ストールマンの講演の抜粋トランスクリプト」。2011年10月4日時点のオリジナルよりアーカイブ。2015年1月29日閲覧。
- ^ alt.religion.emacs ニュースグループ
- ^ 「Saint IGNUcius - Richard Stallman」www.stallman.org . 2018年3月27日閲覧。
- ^ 「Emacs: {Caps Lock、Control} キーを入れ替えるべきではない理由」。
タッチタイピングでは、修飾キーは ⇧ Shift キーのようにペアで使用されます。修飾キーの組み合わせを押す人間工学的に認められた方法は、片方の手で修飾キーを押し、もう一方の手で文字キーを押すことです。両手を使うことで、片方の手の筋肉に負担がかかりません。
- ^ 「ErgoEmacs ホームページ」 。2018年 9 月 1 日閲覧。
- ^ 「Keymacsレイアウト」。GitHub 。 2022年9月15日。
- ^ 「Spacemacs」。GitHub 。 2015年4月20日閲覧。
- ^ 「At Home Modifier by Evdev」。2015年4月14日閲覧。
- ^ 「VAXen」. Catb.org . 2009年11月8日閲覧。
文献
- Ciccarelli, Eugene (1978). Emacs エディタ入門. マサチューセッツ州ケンブリッジ: MIT 人工知能研究所. AIM-447.PDF
- Stallman, Richard M. (1981) [1979]. EMACS: 拡張可能でカスタマイズ可能な自己文書化ディスプレイエディタ. マサチューセッツ州ケンブリッジ: MIT人工知能研究所. AIM-519A.PDF HTML
- ストールマン、リチャード M. (2002)。GNU Emacs マニュアル (第 15 版)。GNU プレス。ISBN 1-882114-85-X。
- Stallman, Richard M. (2002) 「私の Lisp 経験と GNU Emacs の開発」2007 年 2 月 1 日閲覧。
- シャッセル、ロバート J. (2004)。Emacs Lisp プログラミング入門。GNU プレス。ISBN 1-882114-56-6。
- ボブ・グリックスタイン(1997年4月)。『GNU Emacs 拡張機能の書き方』O'Reilly & Associates。ISBN 1-56592-261-1。
- Cameron, Debra; Elliott, James; Loy, Marc; Raymond, Eric; Rosenblatt, Bill (2004 年 12 月)。Learning GNU Emacs、第 3 版。O'Reilly & Associates。ISBN 0-596-00648-9。
- Finseth, Craig A. (1991)。テキスト編集の技術 - または - 現代世界のための Emacs。Springer-Verlag & Co. ISBN 978-1-4116-8297-9。
- Thompson, Adrienne G. (2009). 「MACSimizing TECO」 . 2012-02-26閲覧。
外部リンク
- 公式サイト
- Emacs実装の一覧
- アーキテクチャの概要
