GNU Emacs Manual
(Japanese Translation)





Updated for Emacs Version 27.2





Richard Stallman et al.

This is the GNU Emacs Manual, updated for Emacs version 27.2.

Copyright © 1985–1987, 1993–2021 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being “The GNU Manifesto,” “Distribution” and “GNU GENERAL PUBLIC LICENSE,” with the Front-Cover Texts being “A GNU Manual,” and with the Back-Cover Texts as in (a) below. A copy of the license is included in the section entitled “GNU Free Documentation License.”

(a) The FSF’s Back-Cover Text is: “You have the freedom to copy and modify this GNU manual. Buying copies from the FSF supports it in developing GNU and promoting software freedom.”



Published by the Free Software Foundation
51 Franklin Street, Fifth Floor
Boston, MA 02110-1301 USA
ISBN 978-0-9831592-8-5



Cover art by Etienne Suvasa; cover design by FSF staff.


[ < ] [ > ]   [Contents] [Index] [ ? ]

The Emacs Editor

Emacsは先進的、拡張可能、カスタマイズ可能な、セルフドキュメント方式のエディターです。このinfoファイルでは、Emacsでの編集方法や Emacsのカスタマイズ方法について説明します。GNU Emacs 27.2に対応します。

Emacsの拡張に関しては、Emacs Lisp in The Emacs Lisp Reference Manualを参照してください。

This is the GNU Emacs Manual, updated for Emacs version 27.2.

Copyright © 1985–1987, 1993–2021 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being “The GNU Manifesto,” “Distribution” and “GNU GENERAL PUBLIC LICENSE,” with the Front-Cover Texts being “A GNU Manual,” and with the Back-Cover Texts as in (a) below. A copy of the license is included in the section entitled “GNU Free Documentation License.”

(a) The FSF’s Back-Cover Text is: “You have the freedom to copy and modify this GNU manual. Buying copies from the FSF supports it in developing GNU and promoting software freedom.”


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

ディストリビューション

GNU Emacsはfree software(フリーソフトウェアー、自由なソフトウェアー)です。これはすべての人が自由に使用でき、特定の条件の元に自由に再配布できることを意味します。GNU Emacsはパブリックドメイン(public domain: 特許権の消滅状態)ではありません。copyright(版権)されており、配布については制限があります。しかし、それらの制限は良き共同的な市民(good cooperating citizen)が行ないたいと欲するであろう、すべてのことを許すようデザインされています。なにが許されていないか、それはあなたから取得するかもしれないGNU Emacsの任意のバージョンの更なる共有を妨げる試みです。これの正確な条件はEmacsのGNU General Public Licenseで見ることができ、このマニュアルにも記載されています1GNU GENERAL PUBLIC LICENSEを参照してください。

GNU Emacsのコピーを入手する1つの方法は、それを所有する他の誰かから入手する方法です。これを行なうための許可を求めたり、他の誰かに告げる必要はありません。ただコピーするだけです。インターネットへアクセスできるなら、匿名FTPからGNU NEmacsの最新のディストリビューションバージョンを入手できます。わたしたちのウェブサイトについての詳細は、https://www.gnu.org/software/emacsを参照してください。

コンピューターを購入したときに、GNU Emacsを入手するかもしれません。コンピューター業者は、他のすべての人に適用されるのと同じ条件で、コピーを自由に配布できます。これらの条件は、コンピューター業者がソースにたいして行なった変更を含む完全なソースをあなたに与えることと、General Public Licenseの通常の条件の下に、入手したGNU Emacsをあなたが再配布できることを要求します。言い換えると、そのプログラムはあなたが入手したときはフリーでなければならず、業者にとっては単にフリーという訳ではありません。

GNU Emacsが有用だと思ったら、わたしたちの作業をサポートするために、どうかFree Software Foundationに寄付を送ってください。合衆国ではFree Software Foundationへの寄付は、税金が控除されます。職場でGNU Emacsを使用している場合は、どうかその企業に寄付を行なうよう提案してください。寄付をするには、https://my.fsf.org/donate/を参照してください。あなたが手助けできる他の方法については、https://www.gnu.org/help/help.htmlを参照してください。

わたしたちは、このマニュアルと、Robert J. ChassellによるAn Introduction to Programming in Emacs Lispのハードコピーも販売しています。あなたは、わたしたちのオンラインショップhttps://shop.fsf.org/を訪れることができます。販売による収益は、Free Software Foundationの目的 — すなわち新しいソフトウェアーの開発、GNU Emacsを含む既存のプログラムの改良をサポートします。

Free Software Foundationに連絡する必要がある場合は、https://www.fsf.org/about/contact/を参照するか、下記に手紙を送ってください

Free Software Foundation
51 Franklin Street, Fifth Floor
Boston, MA 02110-1301
USA

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

イントロダクション

あなたはEmacsのマニュアル読んでいるところです。Emacsは、セルフドキュメント方式で、カスタマイズ可能で、拡張可能エディターであり、GNUの先進性を具現化したものです( GNU (GNU’s Not Unix) の‘G’は発音します)。

Emacsは先進的(advanced)であるというのは、単純な挿入と削除だけでなくプロセスの制御、プログラムのインデントの自動化、複数ファイルの同時表示、ローカルファイルと同様なリモートファイルの編集、整形済みテキストの編集、文字、単語、行、文、段落、ページを扱うのと同様に、異なるプログラミム言語の式やコメントを扱う機能なども提供するからです。

セルフドキュメント方式(Self-documenting)とは、いつでもヘルプコマンドとして知られる、特別なコマンドを使うことができることです。これはどのようなオプションがあるのか、コマンドが何をするのかを見つけたり、与えられたトピックと関連するすべてのコマンドを見つけることができるコマンドです。ヘルプを参照してください。

カスタマイズ可能(Customizable)とは、シンプルな方法でEmacsコマンドの動作を簡単に変更できるということです。たとえば、‘<**’で始まり‘**>’で終わるようなコメントのプログラム言語を使っている場合は、Emacsのコメント操作コマンドに、これらの文字列を使うように指示できます(コメントの操作を参照してください)。別の例としては、カーソル動作(上下左右)を再編成して使いやすくカスタマイズできます。カスタマイズを参照してください。

拡張可能(Extensible)とは、単純なカスタマイズではなく、まったく新しいコマンドを作成できるということです。新しいコマンドは、Emacs自身のLisp処理系で動作する、Lisp言語でプログラムを記述されます。既存のコマンドは、編集を行なっている最中でさえ、Emacsを再起動することなく再定義できます。Emacsのほとんどの編集コマンドはLispで記述されています。Lispで記述することも可能ですが、効率のためにCで記述されているものもあります。拡張機能の記述はプログラミングですが、プログラマーでない人も後でそれを使うことができます。もしあなたがEmacs Lispを学びたければ、Preface in An Introduction to Programming in Emacs Lispを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1 画面の構成

Xウィンドウシステムを使うGNU/Linuxのようなグラフィカルなディスプレーの場合、Emacsはグラフィカルなウィンドウに表示されます。テキスト端末の場合、Emacsは端末スクリーン全体を表示領域として使います。Emacsが占有する画面スクリーンや、グラフィカルなウィンドウを指して、フレーム(frame)という用語を使用します。Emacsの振る舞いは、どちらのフレームでも同じです。通常は1個のフレームだけで始まりますが、必要ならば新たにフレームを作れます(フレームとグラフィカルなディスプレーを参照)。

それぞれのフレームにはいくつかの領域が含まれています。いちばん上のフレームはメニューバー(menu bar)で、メニューにある一連のコマンドにアクセスできます。グラフィカルなディスプレーでは、メニューバーのすぐ下にツールバー(tool bar)があり、アイコンをクリックすることにより編集コマンドを実行できます。いちばん下のフレームはエコーエリア(echo area)で、メッセージが表示されたり、Emacsが入力を求める際に使用されます。

(もしあれば)ツールバーの下とエコーエリアの間の、フレームの主要な領域の部分を、ウィンドウ(the window)といいます。このマニュアルでは“ウィンドウ”という言葉を、上記のような場合に使います。グラフィカルなディスプレーのシステムでは、“ウィンドウ”という言葉を違う意味で用いますが、上述したとおり、そのようなグラフィカルなウィンドウのことは、“フレーム”と呼ぶことにします。

Emacsのウィンドウには、バッファー(buffer) — 編集、または閲覧しているテキストやグラフィック — が表示されます。グラフィカルなディスプレーでは、ウィンドウの片側にスクロールバー(scroll bar)あり、これを使ってバッファー内をスクロールできます。ウィンドウのいちばん下の行は、モードライン(mode line)です。これには保存されてない変更や、使用されている編集モード、現在のライン番号など、バッファーについての様々な情報が表示されます。

Emacsを起動すると、通常フレームには1つのウィンドウが表示されます。しかしこのウィンドウを水平方向、または垂直方向に分割して複数のウィンドウを作成し、それぞれ異なるバッファーを表示することもできます(複数ウィンドウを参照)。

どんな時でも、1つのウィンドウが選択されたウィンドウ(selected window)となります。グラフィカルなディスプレーでは、選択されたウィンドウには目立つカーソル(通常は塗りつぶされて点滅している)が表示され、他のウィンドウには目立たないカーソル(通常はぬりつぶされていない四角)が表示されます。テキスト端末では、選択されたウィンドウのカーソルだけが表示されます。選択されたウィンドウ上に表示されているバッファーを、カレントバッファー(current buffer)と呼び、それが編集が行われているバッファーとなります。多くのEmacsコマンドはカレントバッファーに暗黙に適用され、選択されてないウィンドウに表示されているテキストは参照用に使用します。もしグラフィカルなディスプレーで複数のフレームを使っている場合、特定のフレームを選択すると、そのフレームのウィンドウが選択されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.1 ポイント

カーソルは、選択されたウィンドウで多くの編集コマンドが作用する場所を示し、その場所をポイント(point)2と呼びます。多くのEmacsコマンドはポイントをテキスト中で移動し、テキスト中のさまざまな箇所で編集できるようにします。マウスのボタン1(通常は左ボタン)をクリックしても、ポイントを移動できます。

デフォルトでは、選択されたウィンドウ上にある、塗りつぶされたボックスのカーソルは文字のに表示されますが、ポイントは2つの文字のにあると考える必要があります。つまりポイントは、カーソルが重なっている文字のにあります。たとえば、‘frob’というテキストで、‘b’にカーソルがある場合、ポイントは‘o’と‘b’の間にあります。その位置に‘!’という文字を挿入すると、‘fro!b’という結果になり、ポイントは‘!’と‘b’の間にあります。つまりカーソルは‘b’の上にあり、実行前と同じです。

Emacsでいくつかのファイルを編集して、各ファイルがそれぞれ専用のバッファーにある場合、各バッファには独自のポイント位置があります。バッファーが表示されていなくても、後で表示されるときに備えて、ポイント位置を記録しています。1つのフレームに複数のウィンドウがある場合、各ウィンドウには独自のポイント位置があります。

Emacsがカーソルをどのように表示するか制御する方法については、カーソルの表示を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.2 エコーエリア

フレームの1番下の行は、エコーエリア(echo area)です。ここは、いろいろな目的向けの短いテキスト表示に使われます。

エコーエリアという名前は、あなたが打った文字がエコーされることが由来で、これは複数の文字からなるコマンドが表示されることを意味します。1文字のコマンドをエコーすることはありません。複数の文字からなるコマンド(キーを参照)の途中で、入力中に1秒以上間を置くとエコーされます。Emacsはそれまでに入力されたコマンドの文字を表示し、ユーザーに残りの文字の入力を促します。いったんエコーが始まると、コマンドの残りは、打つと同時にただちにエコーされます。これは、タイプに自信のあるユーザーには速い応答を提供する一方で、自信のないユーザーには最大限のフィードバックを与えるための機能です。

エコーエリアは、コマンドを実行できなかったときに、エラーメッセージ(error message)を表示するためにも使用されます。エラーメッセージと共に、ビープ音が鳴ったり、画面が点滅する場合もあります。

エコーエリアに有用なメッセージを表示するコマンドもあります。これらの有用なメッセージは、エラーメッセージによく似ていますが、ビープ音を伴わず点滅もしません。たとえば、コマンドC-x =(Ctrlを押したままxをタイプし、Ctrlを離してから=をタイプします)は、テキスト中のポイントの文字位置と、ウィンドウの現在の列位置を示すメッセージを表示します。処理に時間のかかるコマンドでは、実行中に‘...’(どの程度進行したかをパーセント表示で示す場合もあります)で終わるメッセージをエコーエリアに表示し、完了時には‘done’を最後に付け加えることがよくあります。

エコーエリアに表示される有益なメッセージは、*Messages*と呼ばれる特別なバッファーに保存されます(まだバッファーについては説明していませんが、詳細は複数バッファーの使用を参照)。画面上に短時間しか表示されないメッセージを見逃してしまった場合には、*Messages*バッファーに切り替えて、もう一度そのメッセージを見ることができます。*Messages*のサイズは、ある行数に制限されています。変数message-log-maxは、その行数を指定します(まだ変数については説明していませんが、詳細は変数を参照)。いったんバッファーがこの行数を超えると、最後に1行加わるごとに先頭の1行を削除します。

Emacsがエコーエリアをどのように使用するか制御するオプションについては、ディスプレーのカスタマイズを参照してください。

エコーエリアはミニバッファー(minibuffer)の表示にも使われます。これは、編集しようとするファイル名のような、コマンドへの引数を読むのに使われるウィンドウです。ミニバッファーが使用されているとき、エコーエリアにはプロンプト文字列(prompt string)で始まるテキストが表示され、エコーエリアが一時的に選択されたウィンドウとなり、カーソルもその行に表示されます。C-gを打つと、いつでもミニバッファーから抜けられます。ミニバッファーを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.3 モードライン

ウィンドウの最後の行はモードライン(mode line)であり、そのウィンドウで何が進行しているか表示します。ウィンドウが1つしかなければモードラインはエコーエリアのすぐ上に表示されます。フレームでは最後から2番目の行になります。グラフィカルなディスプレーではモードラインは立体的に描画されます。Emacsは選択されたウィンドウのモードラインが目立つように、通常は選択されていないウィンドウとは異なるカラーで描画します。

モードラインに表示されるテキストは以下の書式です:

 cs:ch-fr  buf      pos line   (major minor)

テキスト端末では、上記テキストの後ろからウィンドウの右端まで一連のダッシュ表示されます。これらのダッシュはグラフィカルなディスプレーでは省略されます。

csとその後ろのコロンは、カレントバッファーのキャラクターセットと改行の規則を説明しています。通常Emacsはこれらの設定を自動的に処理しますが、このメッセージが便利なときもあります。

csはバッファーのキャラクターセットを説明します(コーディングシステムを参照)。もしこれがダッシュ(‘-’)の場合、特定のキャラクターセットの処理が行われていないことを意味します(例外として、以降で説明する行末規則があります)。‘=’の場合は、変換が行われていないことを意味し、通常はテキストに非テキストデータが含まれているときに使用されます。他の文字はさまざまなコーディングシステム(coding systems) — たとえば‘1’はISO Latin-1を表します。

テキスト端末ではcsの前に追加で2つの文字が表示され、それによりキーボード入力と端末出力のコーディングシステムが示されます。さらに何らかの入力メソッドを使用している場合は、csの前に入力メソッドを識別する文字列が表示されます(インプットメソッドを参照)。

csの後ろの文字は、通常コロンです。もし違う文字が表示されている場合、それはファイルのエンコーディングに特別な行末規則が使われていることを意味します。通常ファイル内のテキストの各行は改行文字(newline characters)で区切られていますが、他の2つの規則が使われる場合もあります。MS-DOSのファイルを編集する場合にはキャリッジリターン(carriage-return)とラインフィード(linefeed)が使われ、コロンではなくバックスラッシュ(‘\’)または‘(DOS)’(オペレーティングシステムに依存する)が表示されます。古いマッキントッシュシステムのファイルでは、改行文字の代わりにキャリッジリターン(carriage-return)が使われ、そのような場合コロンではなくスラッシュ(‘/’)または‘(Mac)’が表示されます。いくつかのシステムでは行の区切りとして改行文字を使う場合、コロンではなく‘(Unix)’と表示されます。

emacsclient (emacsclientの呼び出しを参照)で作成されたフレームでは、次の文字に‘@’が表示されます。これは通常、デーモン(サーバーとしてのEmacsの使用を参照)として実行中のEmacsプロセスのフレームにたいして表示されます。

モードラインの次の要素はchで示される文字列です。2つのダッシュ(‘--’)が表示されている場合、ウィンドウに表示されているバッファーとディスク上のファイルの内容が同じことを意味し、たとえばバッファーが未変更(unmodified)の場合です。バッファーが変更されている場合には2つの星印(‘**’)が表示されます。読み出し専用のバッファーの場合には、バッファーが編集されている場合には‘%*’になり、バッファーが編集されていない場合には‘%%’となります。

通常、chの後ろの文字はダッシュ(‘-’)です。しかしカレントバッファーのdefault-directory (ファイルの名前を参照)がリモートマシン上(ファイルの名前を参照)にある場合、かわりに‘@’が表示されます。

frは選択されているフレームの名前です(フレームとグラフィカルなディスプレーを参照)。これはテキスト端末でだけ表示されます。フレーム名の初期値は‘F1’です。

bufは、ウィンドウに表示されているバッファーの名前です。通常は編集中のファイル名と同じです。複数バッファーの使用を参照してください。

posはウィンドウの上またはウィンドウの下に、まだテキストがあるかを知らせます。もしバッファーが小さくてウィンドウに全体が表示されている場合、posには‘All’が表示されます。そうではなくバッファーの一部が表示されているときには、バッファーの先頭が表示されている場合には‘Top’、バッファーの最後が表示されている場合には‘Bot’、‘nn%’と表示されている場合、nnはウィンドウの上部がバッファーのどこかをパーセント表示したものです。Size Indication(サイズ表示)モードでは、バッファー全体のサイズを表示できます。

lineは、‘L’のあとに現在ポイントがある行の番号が続いたものです(Column Number(列番号)モードをオンにすると、現在の列番号も表示できます。モードラインのオプションを参照)。

majorは、そのバッファのメジャーモード(major mode)の名前です。メジャーモードはバッファーを編集する際の主要なモードで、Textモード、Lispモード、Cモードなどがあります。メジャーモードを参照してください。メジャーモード名の後ろに追加の情報を表示するメジャーモードもあります。たとえばCompilation buffer(コンパイルバッファー)やShell buffer(Shellバッファー)などは、サブプロセスの状態を表示します。

minorは有効になっているマイナーモード(minor modes)の一覧で、上位のメジャーモードに追加の機能を提供するための編集モードです。マイナーモードを参照してください。

いくつかの機能は、それらが本当はマイナーモードではなくても、有効になっていればマイナーモードの一覧とともに表示されます。‘Narrow’は、表示中のバッファーが、そのテキストの一部のみを編集するように制限されていることを示します(ナローイングを参照)。‘Def’は、キーボードマクロを定義中であることを示します(キーボードマクロを参照)。

さらにEmacsが再帰編集(recursive edit)にあるときには、モードを囲んでいるカッコの周りに角カッコ(‘[…]’)が現れます。再帰編集中も別の再帰編集に入ると、角カッコは2重になります。再帰編集は、特定のバッファにだけ関係するものではなく、Emacs全体に影響するので、角カッコはすべてのウィンドウのモード行に表示されるか、まったく表示されないのどちらかです。再帰編集レベルを参照してください。

モードラインの外観は、その内容の書式と同様、変更できます。モードラインのオプションを参照してください。さらにモードラインはマウスに反応します。モードラインの違う部分をクリックすることでさまざまなコマンドを実行できます。モードラインのマウスコマンドを参照してください。また、モードラインのマウス感応範囲上でマウスポインターをホバリングすると、モードライン上でクリックして呼び出すことができるコマンドに関する情報を表示するツールチップ(ツールチップを参照)が表示されます。また、モードラインのマウスセンシティブ(mouse-sensitive: マウス感応)な部分の上にマウスをホバリングすると、モードライン上をクリックして呼び出せるコマンドに関する情報がツールチップ(ツールチップを参照)が表示されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.4 メニューバー

各Emacsフレームには通常、最上部にメニューバー(menu bar)があり、よく使われる操作を実行するために使用できます。これはあなた自身で簡単に確かめられますから、ここではそれらを列挙する必要はないでしょう。

マウスをサポートするディスプレー上では、マウスを使ってメニューバーからコマンドを選ぶことができます。メニューアイテムの後にある右矢印は、そのアイテムにサブメニュー(submenu)があることを示します。アイテムの最後に‘...’がある場合は、コマンドを実際に実行する前に、そのコマンドがキーボードから引数を読み取ることを意味します。

メニューのコマンドの中には、他のコマンドと同様、キーが割り当てられているものもあります。そのような場合、メニューのアイテムの後にキーバインディングが表示されます。メニューアイテムの完全なコマンド名や説明文を見るには、C-h kとタイプしてから、通常どおりにマウスでメニューバーを選択してください(キーのドキュメントを参照)。

マウスを使う代わりにF10(コマンドmenu-bar-openを実行します)を押せば、メニューバーの最初のアイテムを呼び出すことができます。その後は矢印キー、またはC-bC-f(左右)、C-pC-n(上下)でメニュー操作できます。選択されたメニューアイテムを起動するときはRET、メニュー操作をキャンセルするときはC-gESC ESC ESCを押します。(ただし、GUIツールキットとともにビルドされたEmacsでは、メニューはそのツールキットにより描画および制御され、メニュー操作をキャンセルするキーシーケンスは上記の説明とは異なるかもしれません。)

テキスト端末では、エコーエリアからメニューバーのメニューにアクセスすることもできます。これを行うには、変数tty-menu-open-use-tmmをカスタマイズして、非nil値にします。その後はF10をタイプするとメニューをドロップダウンせずに、コマンドtmm-menubarが実行されます(M-`は常にtmm-menubarを呼び出します)。tmm-menubarでは、キーボードでメニューアイテムを選択できます。暫定的な候補がエコーエリアに表示されるので、上矢印か下矢印でメニューの異なるアイテムを表示し、RETを押せばアイテムを選択できます。各メニューアイテムを文字か数字で指定することもできます(通常メニューアイテム名のイニシャル)。この文字または数字とアイテム名は‘==>’で区切られています。アイテムの文字または数字を押せばアイテムを選択することができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2 ユーザー入力の種類

GNU Emacsは、主にキーボードを使うようにデザインされています。マウスを使ってメニューバーやツールバーの編集コマンドを実行することはできますが、キーボードを使う場合に比べて効率的ではありません。したがって、このマニュアルには主にキーボードで編集する方法を記します。

Emacsにたいするキーボード入力は、ASCIIを大きく拡張したバージョンが基本となっています。‘a’、‘B’、‘3’、‘=’や空白文字(SPC)と表記します)などの単純な文字は、それぞれに対応するキーをタイプして入力します。RETTABDELESCF1HomeLEFTなどの制御文字なども、この方法で入力できますし、非英語キーボードの特定の文字も同様です(国際化文字セットのサポートを参照)。

Emacsは修飾キー(modifier keys)を用いて入力された制御文字も認識します。よく使用される修飾キーは、Control(通常Ctrl)というラベル)と、Meta(通常Alt3というラベル)の2つです。たとえば、Control-aCtrlを押したままでaを押して入力しますが、これを短くC-aと記します。同様に、Meta-aまたは短くM-aは、Altを押したままaを押すことです。修飾キーは英数文字以外のキーにも適用できます。例: C-F1M-LEFT

ESCで始まる2文字キーシーケンスを使って、Meta文字を入力することもできます。したがってM-aESC aと入力することができます。C-M-a(CtrlAltを両方押しながらaを押下)はESC C-aと入力できます。Metaと違い、ESCは切り離された文字です。次の文字を押すときESCを押しっぱなしにするのではなく、ESCを押して離してから次の文字を入力します。この機能はMetaキーをあてにできない、一部のテキスト端末で有用です。

Emacsは追加の修飾キーをサポートします。修飾キーを参照してください。

グラフィカルなディスプレーでは、ウィンドウマネージャーがM-TABM-SPCC-M-dC-M-lなどのキーボード入力をブロックするかもしれません。このような問題がある場合、ウィンドウマネージャーがこれらのキーをブロックしないようにカスタマイズしたり、影響を受けるEmacsのコマンドをリバインド(rebind)したりできます(カスタマイズを参照)。

単純な文字や制御文字、同様にマウスのクリックなどの非キーボード入力は、総じて入力イベント(input events)と呼ばれます。Emacsが内部で入力イベントをどのように処理するかについての詳細は、Input Events in The Emacs Lisp Reference Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3 キー

Emacsコマンドには、ただ1つの入力イベントで呼び出されるものが、いくつかあります。たとえばC-fはバッファーを1文字前方に移動します。他のコマンドは、C-x C-fC-x 4 C-fのように、2つ以上の入力イベントにより呼び出されます。

キーシーケンス(key sequence)、短く書くとキー(key)は、1つの単位として考えることのできる、1つまたはそれ以上の一連の入力イベントの集まりのことです。もし、あるキーシーケンスがコマンドを呼び出すような場合、それをコンプリートキー(complete key)と呼ぶことにします。たとえばC-fC-x C-fC-x 4 C-fなどはコンプリートキーです。もし、あるキーシーケンスがコマンドを呼び出すほど十分長くないとき、それをプレフィクスキー(prefix key)と呼ぶことにします。たとえば前の例でいうと、C-xC-x 4はプレフィクスキーです。すべてのキーシーケンスは、コンプリートキーかプレフィクスキーのどちらかになります。

プレフィクスキーは、その後の入力イベントと組み合わせて、もっと長いキーシーケンスを作るためのものです。たとえばC-x はプレフィクスキーなので、C-xと入力しただけではコマンドは呼び出されません。かわりにEmacsは更なる入力を待ちます(もし1秒以上入力がない場合、入力を促すためにC-xがエコーされます。エコーエリアを参照)。C-xは、それに続く次の入力イベントと組み合わされる、2イベントのキーシーケンスで、それはプレフィクスキー(C-x 4)など)のときもあれば、コンプリートキー(C-x C-fなど)のときもあります。キーシーケンスの長さに制限はありませんが、実際に3つ、4つ以上の入力イベントの場合は、ほとんどありません。

コンプリートキーに入力イベントを付け加えることはできません。たとえば、C-fはコンプリートキーなので、2イベントのシーケンスC-f C-kは、1つではなく2つのキーシーケンスです。

デフォルトではEmacsのプレフィクスキーはC-cC-hC-xC-x RETC-x @C-x aC-x nC-x rC-x tC-x vC-x 4C-x 5C-x 6ESCM-gM-oです(F1F2C-hC-x 6のエイリアス)。このリストは不変のものではありません。Emacsをカスタマイズすれば、新しいプレフィクスキーを作ることができます。標準のプレフィクスキーを無効にすることさえできますが、これはほとんどのユーザーにたいして推奨はできません。たとえばプレフィクス定義C-x 4を削除すると、C-x 4 C-fは無効なキーシーケンスになります。キーバインディングのカスタマイズを参照してください。

プレフィックスキーのあとにヘルプ文字(C-hF1)を押すと、そのプレフィックスで始まるコマンド一覧を表示できます。唯一の例外はESCです。ESC C-hC-M-hと同じで、これは何かまったく別のことを行うコマンドです。しかしF1ならば、ESCで始まるコマンドの一覧を表示できます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4 キーとコマンド

このマニュアルは、特定のキーが何を行うかを説明するページばかりです。しかし、Emacsは直接キーに意味を与えてはいません。そのかわりに、Emacsは名前を付けたコマンド(commands)に意味を持たせ、キーとコマンドをバインディング(binding)することによって、キーに意味を与えています。

すべてのコマンドには、プログラマーが選んだ名前が付いています。名前は、たとえばnext-lineforward-wordのように、いくつかの英単語をダッシュで区切って作られます。内部的には、それぞれのコマンドはLispの関数(function)の特別な型で、コマンドに関連付けられたアクションは、関数を実行することによって機能します。What Is a Function in The Emacs Lisp Reference Manualを参照してください。

キーとコマンドの間のバインディングは、keymapsというテーブルに記憶されます。キーマップを参照してください。

C-nは下に1行動きます”という言い方は、通常の使用では関係ないものの、Emacsをカスタマイズする上では重要になる点を隠蔽しています。1行下に移動するコマンドはnext-lineです。C-nnext-lineにバインドされているから効果があるのです。もしC-nをコマンドforward-wordにリバインドしたら、C-nで1語前方に動くことになります。

厳密に言えばキーはコマンドにバインドされているだけですが、このマニュアルではC-nをコマンドであるかのような言い回しをするときがあります。そのようなときは、処理を実行させるキーの後ろに、本当に処理を行うコマンドの名前をカッコ内に記します。たとえば、“コマンドC-n (next-line)は、ポイントを垂直下方に移動します”というときは、コマンドnext-lineがポイントを垂直下方に移動し、それは通常C-nにバインドされている、ということを意味します。

カスタマイズについて議論したので、変数(variables)にもふれておくべきでしょう。コマンドの説明で、“これを変更する場合、変数 mumble-fooをセットしてください”というときがあります。変数とは、値を保存するときに使用する名前のことです。このマニュアルに記載されている変数は、ほとんどがカスタマイズに関するものです。いくつかのコマンド、およびEmacsのある部分は、変数を調べてその変数にセットされた値により、動作がかわります。カスタマイズに興味がでるまでは、、変数に関する情報は無視してかまいません。その後で変数(変数を参照)の基本を読めば、特定の変数についての情報に合点がいくでしょう。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5 Emacsの起動

Emacsを呼び出す通常の方法は、シェルコマンドemacsです。GUI端末上で実行されるUnixシェルからは、emacs &によりEmacsをバックグラウンドで実行できます。この方法だとEmacsが端末ウィンドウに結びつけられないため、他のシェルコマンドを実行できます(MS-WindowsでEmacsを開始する方法については、MS-WindowsでEmacsを開始する方法を参照)。

Emacsを起動すると、初期フレームは‘*GNU Emacs*’という名前の特別なバッファーを表示します。このスタートアップ画面(startup screen)には、Emacsについての情報と、初心者にとって便利な一般的タスクへのリンクが含まれています。たとえば‘Emacs Tutorial’というリンクはEmacsのチュートリアルを開きます。これはコマンドC-h t (help-with-tutorial)と同じです。リンクをアクティブにするには、ポイントをそこに動かしてRETをタイプするか、mouse-1(マウスの左ボタン)をクリックしてください。

コマンドライン引数を使うと、Emacsが起動直後に1つ以上のファイルをアクセスするよう指示できます。たとえばemacs foo.txtは、‘foo.txt’の内容を表示するバッファーとともにEmacsを起動します。これは他のエディターとの互換性により存在する機能で、シェルから短い編集セッションを始めるときのためにデザインされています。Emacsをこの方法で呼び出すと、初期フレームは2つのウィンドウに分割されます。1つは指定されたファイルで、もう1つはスタートアップ画面です。複数ウィンドウを参照してください。

一般的に、ファイルを編集するたびに新たにEmacsを起動するのは不必要で無駄です。Emacsを使うときの推奨方法は、Emacsを1度だけ起動する方法で、ログインしたら起動して、同じEmacsセッションですべての編集作業を行うのです。1つ以上のファイルをアクセスする方法は、ファイルの処理を参照してください。この方法でEmacsを使うと、Emacsのセッションはキルリング(kill ring)、レジスター(registers)、アンドゥヒストリー(undo history)、マークリング(mark ring)などの、値をもつコンテキストを蓄積するので、これを共有すれば編集がより快適になります。これらの機能については、このマニュアルの後で説明します。

Emacsを実行中に、他のプログラムからファイルを編集する場合、既存のEmacsセッションのファイルを開くために、emacsclientというヘルパープログラムを使うことができます。サーバーとしてのEmacsの使用を参照してください。

コマンドライン引数を使って、EmacsにLispファイルをロードして初期フレームに適用させたりできます。Emacs呼び出しにたいするコマンドライン引数を参照してください。

変数inhibit-startup-screenが非nilの場合、Emacsはスタートアップ画面を表示しません。この場合、コマンドラインに1つ以上のファイルが指定されていれば、Emacsは単にそれらのファイルを表示し、指定されていないときはLispの式を対話的に評価できる、*scratch*という名前のバッファーを表示します。Lisp Interactionバッファーを参照してください。変数inhibit-startup-screenのセットは、Emacsのカスタマイズ機能(Easy Customizationインターフェースを参照してください)を使うか、初期設定ファイル(Emacs初期化ファイルを参照してください)を編集して行うことができます。4

変数initial-buffer-choiceにファイルやディレクトリーの名前をセットすることにより、Emacsのスタートアップ時にファイルやディレクトリーを表示させることもできます。initial-buffer-choiceの値に、その後に表示するバッファーを戻す関数(引数なし)をセットすることもできます。 initial-buffer-choiceが非nilの場合、コマンドラインにファイルを指定しても、それらのファイルは表示されますが、初期画面としては表示されません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6 Emacsからのexit

C-x C-c

Emacsをkill(終了)します。(save-buffers-kill-terminal)。

C-z

テキスト端末ではEmacsをサスペンドします。グラフィカルなディスプレーでは選択されたフレームをアイコン化(または“最小化”)します(suspend-frame)。

EmacsをKillするというのは、Emacsプログラムを終了するという意味です。これを行うには、C-x C-c (save-buffers-kill-terminal)とタイプします。2文字キーシーケンスが使われているのは、アクシデントにより間違ってタイプしづらくするためです。もし変更されたファイルがある場合、C-x C-cをタイプすると、Emacsとそれらのバッファーを巡回して、バッファーを保存するか問い合わせます。それらすべてを保存しない場合、未保存の変更が失われてしまう前に、もう一度問い合わせます。サブプロセスがまだ実行中の場合にも、Emacsをkillするとサブプロセスもkillされるので、問い合わせを行います(Emacsからのシェルコマンドの実行を参照してください)。

もしEmacsをサーバーとして使っている場合、C-x C-cは特別に振る舞います。もしクライアントフレームからタイプした場合は、クライアントのコネクションをクローズします。サーバーとしてのEmacsの使用を参照してください。

Emacsはオプションで、killしたときに表示していたファイルなどの、セッション情報を記録することができます。この情報は次回Emacsを起動するとき利用可能です。Emacsセッションの保存を参照してください。

変数confirm-kill-emacsの値が非nilの場合、C-x C-cはその値が関数だとみなして、その関数を呼び出します。その関数呼び出しの結果が非nilの場合、セッションはkillされ、そうでない場合、Emacsは実行を続けます。confirm-kill-emacsの値として使うのに適した関数の1つが、yes-or-no-pです。confirm-kill-emacsのデフォルト値はnilです。

変数confirm-kill-processesの値がnilの場合、C-x C-cはEmacsにより開始されたサブプロセスをkillする前に確認を求めません。デフォルトでは、この値はtです。

Emacsをexitするとき何が起こるかさらにカスタマイズするには、Killing Emacs in The GNU Emacs Lisp Reference Manualを参照してください。

保存の問い合わせを行わずにEmacsをkillするときは、M-x kill-emacsとタイプします。

C-zは、コマンドsuspend-frameを実行します。グラフィカルなディスプレーでは、このコマンドは選択されたEmacsのフレームを後で戻れるように、最小化(またはアイコン化)して隠します(どのように隠されるかはウィンドウシステムに依存します)。テキスト端末では、C-zはEmacsをサスペンド(休止)します。プログラムは一時的に停止し、制御は親プロセス(通常はシェル)に戻ります。ほとんどのシェルではシェルのコマンド%emacsで、サスペンド中のEmacsを再開できます。

テキスト端末は、通常、実行中のプログラムをkillしたりサスペンドする、特定の特殊文字を監視しています。この端末の機能は、Emacsではオフになっています。EmacsでのC-zC-x C-cのキーの意味は、いくつかのオペレーティングシステムでプログラムを休止させたり終了させたりするために用いる文字、C-zC-cにヒントを得たものですが、オペレーティングシステムとの関係はそれだけです。これらのキーは、他のコマンドを実行するようにカスタマイズできます(キーマップを参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7 基本的な編集コマンド

ここではテキストの入力、修正、ファイルへの保存といった基本操作について説明します。これらに接するのが初めてなら、learn-by-doing(行ってみることで学ぶ)形式のチュートリアルをやってみることを提案します。チュートリアルを行うにはC-h t (help-with-tutorial)とタイプしてください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.1 テキストの挿入

普通のグラフィック文字(graphic character)(例 ‘a’、‘B’、‘3’、‘=’)は、対応するキーをタイプして挿入することができます。これによりバッファーのポイント位置に文字が追加されます。挿入によりポイントは前方に移動するので、ポイントは挿入された文字の直後になります。ポイントを参照してください。

行を終了して新しい行を開始するにはRET(newline)を入力します(キーボードでRETキーは、ReturnEnter、もしくは↲のような奇妙な左矢印のラベルがついているかもしれませんが、このマニュアルではRETと呼ぶことにします)。このコマンドは改行文字をバッファーに挿入してから、メジャーモードに基づきインデント(インデントを参照してください)を行います。ポイントが行末にある場合には、新しく空行を作成してから新しい行をインデントします。もしポイントが行の途中にある場合、行はその位置で分割されます。自動インデントをオフにするには、Electric Indentモード(インデントの便利な機能を参照してください)を無効にするか、自動インデントを行わず改行だけを挿入するC-jを入力します。

マニュアルの後ろで説明しますが、マイナーモード(minor modes)を利用することにより、Emacsが挿入を処理する方法を変更できます。たとえばAuto Fillモードというマイナーモードは行が長くなりすぎたとき自動的に行を分割します(テキストのフィルを参照)。Overwrite modeというマイナーモードは、既存の文字を右方に押しやるかわりに、既存の文字を置き換え(上書き)ます。マイナーモードを参照してください。

対応するキーを押して挿入できるのはグラフィック文字だけです。他のキーは編集コマンドとして動作し、文字自体の挿入はしません。たとえば、デフォルトではDELは、コマンドdelete-backward-charを実行します(違うコマンドにバインドされているモードもあります)。このキーはリテラルの‘DEL’(ASCIIの文字コード127)を入力する訳ではありません。

非グラフィック文字や、キーボードがサポートしていない文字を挿入するには、最初にC-q (quoted-insert)で文字をクォート(quote)します。C-qの使い方は2つあります:

8進のかわりに10進や16進を使うには、変数read-quoted-char-radixに、10や16をセットします。もし基数が16の場合、aからfは文字コードの一部として扱われます。大文字小文字は区別されません。

数は多くありませんが、一般的なUnicode文字はC-x 8で始まるコマンドを通じて挿入できます。たとえばC-x 8 [は『』を挿入します。これはUnicodeコードポイントU+2018 LEFT SINGLE QUOTATION MARK (単独の左“curved quote”、または“curly quote”と呼ばれることもあり)を挿入します。同様にC-x 8 ]は『』、C-x 8 {は『』、C-x 8 }は『』を挿入します。またAltキーも(後にRETが続かない) C-x 8と同じように機能します。たとえばA-[C-x 8 [と同様に『』を挿入します。どの文字がC-x 8による短縮入力をもつかを確認するにはC-x 8 C-hとタイプしてください。

かわりにコマンドC-x 8 RET (insert-char)を使うこともできます。これはミニバッファーを使って、Unicode名かコードポイント(code-point)の入力を求めます。もし名前を入力する時、コマンドが補完機能を提供します(補完を参照してください)。コードポイントを入力する場合、それは16進(Unicodeの規約による)、または指定した基数の数字(例 #o23072 (octal); Integer Basics in The Emacs Lisp Reference Manualを参照してください)であるべきです。このコマンドは対応する文字をバッファーに挿入します。

たとえば以下はすべて同じ文字を挿入します:

C-x 8 RET left single quotation mark RET
C-x 8 RET left sin TAB RET
C-x 8 RET 2018 RET
C-x 8 [
A-[  (Altキーが機能する場合)
`    (Electric Quoteモードの場合)

C-qまたはC-x 8 ...への数引数は、文字のコピーを何個挿入するかを指定します(数引数を参照してください)。

さらに加えて、あるコンテキストにおいては、`like this'のようにクォートにgrave accentとapostropheを使用した場合は、たとえC-x 8コマンドを使用していなくても、これは1つのクォーテーションマークを使用した形式``like this''のように変換されます。同様に、``like this''のように2重のgrave accentとapostropheを使用した場合、これはダブルクォーテーションマークを使用した形式“like this”のように変換されます。クォーテーションマークを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.2 ポイント位置の変更

文字の挿入以上のことを行うには、ポイントを移動する方法について知る必要があります(ポイントを参照してください)。キーボードのコマンドC-fC-bC-nC-pは、それぞれ右・左・下・上にポイントを移動します。ほとんどのキーボードにある矢印キー — RIGHTLEFTDOWNUPでもポイントを移動できます。しかし多くのEmacsユーザーは矢印キーより、コントロールキーのほうが速いと考えています。なぜなら矢印キーを押すためにそれらが配置されている領域に手を動かす必要があるからです。

ポイントを移動したい場所でマウスの左ボタンをクリックしてもポイントを移動できます。Emacsは、さらに洗練された方法でポイントを移動する、さまざまなキーボードコマンドを提供します。

C-f

1文字前方(forward)に移動します (forward-char)。

RIGHT

このコマンド(right-char)はC-fと同様に振る舞います。例外はポイントのあるパラグラフがright-to-leftの場合です。双方向の編集を参照してください。

C-b

1文字後方(backward)に移動します (backward-char)。

LEFT

このコマンド(left-char)はC-bと同様に振る舞います。例外は現在のパラグラフがright-to-leftの場合です。双方向の編集を参照してください。

C-n
DOWN

スクリーンに表示された行で1行下に移動します(next-line)。このコマンドは横方向の位置を変更しないよう試みます。そのため行の途中でコマンドを開始すると、次の行の途中に移動することになります。

C-p
UP

スクリーンに表示された行で1行上に移動します(previous-line)。このコマンドはC-nと同様、行内の位置を保ちます。

C-a
Home

行の先頭に移動します(move-beginning-of-line)。

C-e
End

行の最後に移動します(move-end-of-line)。

M-f

1単語前方に移動します(forward-word)。単語を最終してください。

C-RIGHT
M-RIGHT

このコマンド(right-word)はM-fと同様に振る舞います。例外は現在のパラグラフがright-to-leftの場合、1語後方に移動することになります。双方向の編集を参照してください。

M-b

1単語後方に移動します(backward-word)。単語を参照してください。

C-LEFT
M-LEFT

このコマンド(left-word)はM-bと同様に振る舞います。例外は現在のパラグラフがright-to-leftの場合、1語前方に移動することになります。双方向の編集を参照してください。

M-r

スクリーン上のテキストを移動させることなく、ポイントの位置をウィンドウ上で中央にもっとも近いテキスト行の左端に移動します。連続して呼び出すと、最上行の左端、最下行の左端へと循環的にポイントを移動します(move-to-window-line-top-bottom)。

数引数はスクリーンの行の何行目にポイントを移動するか指定します。数値はウィンドウの最上行から数えた行数です(0は最上行を意味します)。負の引数は最下行から数えた行数です(-1は最下行を意味します。数引数については詳細は、数引数を参照してください。

M-<

バッファーの先頭に移動します(beginning-of-buffer)。数引数nが与えられた場合、最上行からn/10に移動します。グラフィカルなディスプレイでは、C-HOMEで同じことを行うことができます。

M->

バッファーの最後に移動します(end-of-buffer)。グラフィカルなディスプレイでは、C-ENDで同じことを行うことができます。

C-v
PageDown
next

画面を1画面前方にスクロールします。もし必要ならポイントをスクリーン上の位置に移動します(scroll-up-command)。スクロールを参照してください。

M-v
PageUp
prior

画面を1画面後方にスクロールします。もし必要ならポイントをスクリーン上の位置に移動します(scroll-down-command)。スクロールを参照してください。

M-g c

数値nを読み取り、ポイントをバッファー位置nに移動します。1を指定するとバッファーの先頭に移動します。

M-g M-g
M-g g

数値nを読み、ポイントをバッファーの先頭からn行目に移動します。行に1を指定するとバッファーの先頭に移動します。もしポイントがバッファーの数字の上または直後にある場合、その数がnのデフォルトになります。ミニバッファーで単にRETを押すと、その数が使われます。数値のプレフィクス引数でnを指定してM-g M-gに与えることもできます。単にプレフィクス引数を与えた場合のM-g M-gの動作については、バッファーの作成と選択を参照してください。

M-g TAB

数値nを読み取り、現在行のn列目に移動します。列0は最左列です。プレフィクス引数とともに呼び出された場合、引数で指定された数の列に移動します。

C-x C-n

カレントバッファー内の現在ポイントがある列をC-nC-p半恒久的な目標列(semipermanent goal column)として使用します。目標列が有効な場合、これらのコマンドで垂直に移動すると、その列もしくはできる限り近い列に移動しようと試みます。目標列はキャンセルされるまで有効です。

C-u C-x C-n

目標列をキャンセルします。それ以降のC-nC-pは通常どおり水平位置を保とうと試みます。

バッファーのテキストがウィンドウの幅より長い場合、通常Emacsは2行以上のスクリーン行(screen lines)で表示します。便宜上、C-nC-pそしてdownupも、同様にスクリーン行にしたがってポイントを移動します。これらのコマンドを論理行(logical lines)(たとえばバッファーのテキスト行)にしたがって移動させるには、line-move-visualnilをセットします。そうすると論理行が複数のスクリーン行となるような場合、カーソルは追加されたスクリーン行をスキップします。詳細は継続行を参照してください。line-move-visualなどの変数をセットする方法については、変数を参照してください。

C-nC-pと異なり、ほとんどのEmacsコマンドは論理的な行に作用します。たとえばC-a (move-beginning-of-line)やC-e (move-end-of-line)は、論理行の先頭もしくは最後に移動します。C-nC-pのようにスクリーン行に作用するコマンドの場合、わたしたちはそれを示すようにします。

line-move-visualnilの場合、変数track-eolにも非nil値をセットできます。そうすると論理行の行末でC-nC-pを開始すると、次の論理行の行末に移動します。通常track-eolnilです。

通常C-nをバッファーの最後の行で使用した場合、バッファーの最後でストップします。しかし変数next-line-add-newlinesに非nil値をセットした場合、バッファーの最後の行でC-nを押すと、行を追加してその行に移動します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.3 テキストの消去

DEL
BACKSPACE

ポイントの前の文字、またはリージョンがアクティブのときはリージョンを削除します(delete-backward-char)。

Delete

ポイントの後の文字、またはリージョンがアクティブのときはリージョンを削除します(delete-forward-char)。

C-d

ポイントの後ろの文字を削除します(delete-char)。

C-k

行末までkillします(kill-line)。

M-d

次の単語(word)の末尾までを前方にkillします(kill-word)。

M-DEL
M-BACKSPACE

前の単語の先頭までを後方にkillします(backward-kill-word)。

コマンドDEL (delete-backward-char)は、ポイントの前の文字を削除して、カーソルと後ろの文字を後方に移動します。ポイントが行の先頭にある場合、前の改行を削除して、その行を前の行と連結します。

しかしリージョンがアクティブのとき、DELはリージョンのテキストを削除します。リージョンの説明は、マークとリージョンを参照してください。

ほとんどのキーボードでは、DELにはBACKSPACEというラベルがついていますが、このマニュアルではDELと呼ぶことにします(DELDeleteと混同しないでください。Deleteについてはこの後で議論します)。いくつかのテキスト端末では、EmacsはDELを正しく認識しません。もしこの問題に遭遇したときには、DELで削除できない場合を参照してください。

コマンドDelete (delete-forward-char)は、反対方向に削除します。これはポイントの後ろの文字、たとえばカーソルの下の文字を削除します。ポイントが行末にある場合は、その行を次の行と連結します。DELと同様、リージョンがアクティブのときはリージョンのテキストを削除します(マークとリージョンを参照してください)。

C-d (delete-char)は、Deleteと同じようにポイントの後ろの文字を削除しますが、リージョンがアクティブかどうかは関係ありません。

上述した削除コマンドについての詳細な情報は、削除を参照してください。

C-k (kill-line)は行を一度に消去(kill)します。もし行頭または行の途中でC-kとタイプすると、行末までのすべてのテキストをkillします。行末でC-kとタイプすると、その行を次の行と連結します。

C-kと関連するコマンドについては、テキストのkillと移動を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.4 変更のアンドゥ

C-/
C-x u
C-_

undoレコードにあるエントリーをundoします。通常1つのコマンドを元に戻す(undo)ことに相当します(1つ目のキーはテキストモードのディスプレイでは利用できないかもしれない)。

Emacsはバッファー内のテキストに行われた変更のリストを記録しているので、最近の変更はundoできます。これはC-/(およびC-x uC-_)にバインドされているコマンドundoを使って行われます。通常このコマンドは最後の変更をundoして、ポイントを変更前の位置に移動します。undoコマンドはバッファーへの変更のみに適用されるので、カーソルの動きをundoすることはできません。

個々の編集コマンドは、通常undoレコードの個別のエントリーとなりますが、とても単純なコマンドはグループ化される場合があります。1つのエントリーが、実は複雑なコマンドのほんの一部の場合もあります。

もしC-/(またはそれの別名コマンド)を繰り返すと、undoされた箇所はさらにundoされ、初期の変更もundoされ、ついには利用可能なundo情報の限界に達します。もし記録された変更がすべてundoされている場合、undoコマンドはエラーメッセージを表示して、何も行いません。

undoコマンドについてさらに学ぶには、Undo(取り消し)を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.5 ファイル

Emacsのバッファーに挿入したテキストは、Emacsのセッションの間だけ存在します。テキストを永続化させるためには、それをファイル(file)に保存しなければなりません。

ホームディレクトリーに、test.emacsという名前のファイルがあるとしましょう。このファイルをEmacsで編集するには、以下を入力します

C-x C-f test.emacs RET

ここでファイル名は、コマンドC-x C-f (find-file)に与えられる、引数(argument)です。このコマンドは引数を読み取るためにミニバッファー(minibuffer)を使い、RETは引数を終端させます(ミニバッファーを参照してください)。

このコマンドに従うために、Emacsはそのファイルをvisit(訪問)します: すなわちバッファーを作成し、ファイル内容をバッファーにコピーし、編集のためにバッファーを表示します。テキストを変更したら、C-x C-s (save-buffer)と入力することにより、ファイルを保存(save)できます。これにより変更されたバッファー内容は、test.emacsに書き戻され永続化されます。保存するまでは、テキストへの変更はEmacs内部にだけ存在し、ファイルtest.emacsは変更されません。

ファイルを作成するには、すでにファイルが存在するかのようにC-x C-fでファイルをvisitするだけです。これはファイルに書き込みたいテキストを入力できる、空のバッファーを作成します。最初にこのバッファーをC-x C-sで保存するとき、Emacsは実際にファイルを作成します。

Emacsでファイルを使うことについてさらに学ぶには、ファイルの処理を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.6 ヘルプ

もしキーが何をするか忘れた場合、C-h k (describe-key)と入力して、それに続けて関心のあるキーを入力します。たとえばC-h k C-nは、C-nが何をするか表示します。

プレフィクスキーC-hは“ヘルプ(help)”が由来です。F1キーはC-hの別名です。C-h k以外にも、異なる種類のヘルプを提供する多くのヘルプコマンドがあります。

詳細については、ヘルプを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.7 空行

空行を挿入したり削除するための、特別なコマンドとテクニックがあります。

C-o

カーソルの後ろに空行を挿入します(open-line)。

C-x C-o

連続する空行を、1行残してすべて削除します(delete-blank-lines)。

これまでRET (newline)が、どうやってテキストの新しい行を開始するのか見てきました。しかし最初に空行を作ってからテキストを挿入するほうが、何を行っているのかわかりやすいでしょう。これはキーC-o (open-line)を使えば、簡単に行うことができます。これはポイントの後ろに改行を挿入し、ポイントを改行の前に維持します。C-oの後に新しい行のためのテキストを入力します。

複数の空行はC-oを数回入力するか、何個の空行を作るのかを数引数で与えれば作れます。方法については、数引数を参照してください。もしフィルプレフィクスがあって、行頭でC-oが入力された場合、新しい行にフィルプレフィクスを挿入します。フィルプレフィクスを参照してください。

余分な空行を取り除く簡単な方法は、C-x C-o (delete-blank-lines)です。連続する空行の中にポイントがあるとき、C-x C-oは1行残してすべての空行を削除します。ポイントが単独の空行にある場合、C-x C-oはその空行を削除します。ポイントが空でない行にある場合、C-x C-oは、後続する空行があれば、それらすべてを削除します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.8 継続行

バッファー内のテキストの行 — 論理行(logical line) — がウィンドウに収まらないほど長い場合、Emacsがそれを2行以上のスクリーン行(screen lines)で表示するときがあります。これは行の折り返し(line wrapping)または継続(continuation)と呼ばれ、論理行は継続された行(continued line)と呼ばれます。グラフィカルなディスプレーでは、Emacsは行の折り返しをウィンドウの左右のフリンジ(fringes、縁)の小さな曲矢印で示します。テキスト端末では、Emacsは右の余白に‘\’を表示して行の折り返しを示します。

ほとんどのコマンドは、スクリーン行ではなく論理行にたいして作用します。たとえばC-kは論理行をkillします。前に説明したように、C-n (next-line)とC-p (previous-line)は特別な例外です。これらはスクリーン行にたいしてポイントを上下に移動させます(ポイント位置の変更を参照してください)。

Emacsはオプションで長い論理行を継続するかわりに、切り詰める(truncate)ことができます。これは論理行が1つのスクリーン行を占めることを意味します。もし論理行がウィンドウ幅より長い場合、行の残りは表示されません。グラフィカルなディスプレーでは切り詰められた行は、右フリンジの小さな直矢印で示されます。テキスト端末では右余白の‘$’で示されます。行の切り詰めを参照してください。

デフォルトでは継続行はウィンドウの右端で折り返されます。折り返しが単語の途中で発生すると、継続された行は読むのが難しくなります。普通の解決策は、行が長くなりすぎる前に改行を挿入することです。もしお好みなら、行が長くなりすぎたときにEmacsが自動的に改行を挿入するように、Auto Fillモードを使うことができます。テキストのフィルを参照してください。

多くの長い論理行を含むファイルを編集する必要があり、それらすべてを改行で分割するのが実用的でない場合があります。そのようなケースでは単語折り返し(word wrapping)が有効なVisual Lineモードを使うことができます。これは長い行を正確にウィンドウの右端で折り返すのではなく、ウィンドウの右端に一番近い単語境界(スペースやタブなど)で折り返します。Visual Lineモードでは、C-aC-nC-kなどの編集コマンドも、論理行ではなくスクリーン行を処理するように再定義されます。Visual Lineモードを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.9 カーソル位置の情報

バッファーのある部分にたいしてサイズや位置、単語数や行数についての情報を得るためのコマンドがあります。

M-x what-line

ポイントの行番号を表示します。

M-x line-number-mode
M-x column-number-mode

現在の行番号および列番号の自動表示を切り替えます。モードラインのオプションを参照してください。各行の前に行番号を表示したい場合は、ディスプレーのカスタマイズを参照してください。

M-=

現在のリージョンの行数、単語数、文字数を表示します(count-words-region)。リージョンについては、マークとリージョンを参照してください。

M-x count-words

現在のバッファーの行数、単語数、文字数を表示します。リージョン(マークとリージョンを参照してください)がアクティブのときは、かわりにリージョンの数字を表示します。

C-x =

ポイントの後ろの文字の文字コード、ポイントの文字位置、ポイントの列位置を表示します(what-cursor-position)。

M-x hl-line-mode

現在行のハイライト表示を有効または無効にします。カーソルの表示を参照してください。

M-x size-indication-mode

バッファーのサイズの自動表示を切り替えます。モードラインのオプションを参照してください。

M-x what-lineは、エコーエリアに現在の行番号を表示します。通常このコマンドは不必要です。なぜならモードラインに現在の行番号が、すでに表示されているからです (モードラインを参照してください)。しかしバッファーがナロー(narrow: 制限)されている場合、モードラインはアクセスできる範囲についての行番号しか表示しません(ナローイングを参照してください)。それにくらべてwhat-lineは、制限されたリージョンとバッファー全体、両方の行番号を表示します。

M-= (count-words-region)はリージョン内の行数、単語数、文字数を報告するメッセージを表示します(リージョンについての説明は、マークとリージョンを参照してください)。プレフィクス引数C-u M-=を指定すると、このコマンドはバッファー全体の数字を表示します。

M-x count-wordsは同じことを行いますが、呼び出し規約が異なります。もしリージョンがアクティブの場合はリージョン、そうでない場合はバッファーの数字を表示します。

コマンドC-x = (what-cursor-position)は現在のカーソル位置と、その位置にあるバッファー内容についての情報を表示します。エコーエリアには、以下のような行が表示されます:

Char: c (99, #o143, #x63) point=28062 of 36168 (78%) column=53

Char:’には、バッファー中のそのポイントにある文字が表示されます。カッコ内にはその文字に対応する文字コードが10進、8進、16進で表示されます。C-x =が文字の情報について表示する方法については、国際化文字セットのイントロダクションを参照してください。‘point=’はポイント位置を文字数(バッファーの最初の文字は1、次の文字は2、...)で表示します。その後ろの数字ではバッファー内の文字数の合計が表示され、カッコ内にはその位置が全体から見て何パーセントの位置なのかが表示されます。‘column=’にはポイントの水平位置、すなわちウィンドウの左端から数えて何番目の列かが表示されます。

ユーザーオプションwhat-cursor-show-namesが非nilならUnicode文字データベース(Unicode Character Database)で定義されておいるような名前が同様に表示されます。カッコ内の部分は以下のようになります:

(99, #o143, #x63, LATIN SMALL LETTER C)

もしバッファーがナローされている場合、最初と最後の部分のテキストが一時的にアクセス不能になります。C-x =は現在アクセス可能な範囲についての追加説明を表示します。たとえば以下のように表示します:

Char: C (67, #o103, #x43) point=252 of 889 (28%) <231-599> column=0

ここで、新たに追加された2つの数字が、ポイントを設定できる文字位置の下限と上限を示します。これら2つの位置のあいだの文字が参照可能な文字です。ナローイングを参照してください。

関連はあるものの異なる機能がdisplay-line-numbers-mode(ディスプレーのカスタマイズを参照)です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.10 数引数

数学や計算機の用語では、引数(argument)という単語は、“関数や操作に与えるデータ”を意味します。Emacsのコマンドには、数引数(numeric argument)(プレフィクス引数(prefix argument)とも呼ぶ)を指定できるものがあります。引数を反復回数として解釈するコマンドもあります。たとえば、引数10をC-fに指定すると、カーソルを通常の1文字ではなく、10文字分前向きに移動します。これらのコマンドでは、引数を指定しないと引数1を指定したのと同等になります。この種のコマンドの多くでは、負の引数を指定すると、逆向きの移動や逆の操作を指示することになります。

数引数を指定するもっとも簡単な方法は、Metaキーを押しながら数字またはマイナス記号(と数字)を入力する方法です。以下はその例です:

M-5 C-n

これは5行下に移動します。キーM-1M-2、...、同様にM--は、次のコマンドへの引数をセットアップするコマンド、(digit-argumentnegative-argument)にバインドされています。数字をともなわないM--は、通常-1を意味します。

2桁以上の数字を入力したい場合、2文字目以降の数字を入力するときにMetaを押しつづける必要はありません。つまり50行下に移動するときは、以下のように入力します:

M-5 0 C-n

これは、(あなたが期待するように)‘0’を5つコピーして挿入してから1行下がるのではないことに注意してください。‘0’はプレフィクス引数の一部として扱われます。

(‘0’を5つコピーして挿入するときは、M-5 C-u 0と入力します。ここでC-uはプレフィクス引数を終端させるので、次のキー入力はあなたが実行したいコマンドです。ここでのC-uの意味はこのケースだけに適用される使い方です。C-uの通常の役割については以下を参照してください。)

数引数を指定する別の方法として、M-1M-2、...と入力するかわりに、C-u (universal-argument)のあとに数字(負の引数の場合はマイナス記号と数字)を入力する方法があります。通常、数字をともなわないマイナス記号は-1を意味します。

単独のC-uは、“4倍”という特別な意味をもち、次のコマンドの引数を4倍にします。C-u C-uは16倍です。つまりC-u C-u C-fは16文字前方に移動します。その他に便利な使い方としてはC-u C-nC-u C-u C-n(適当な割り合いで画面を下に移動する)や、C-u C-u C-o(16個の空行を作る)、C-u C-k(4行削除する)、などがあります。

自分自身を挿入する文字の前に数引数を使えば、指定した分のコピーを挿入できます。これは挿入したい文字が数字でないときは簡単です。たとえばC-u 6 4 aは、‘a’を64個コピーして挿入します。しかし数字を挿入したいときは、これではうまくいきません。C-u 6 4 1は引数に641を指定することになってしまいます。このようなときは引数と挿入したい数字を分けるために、他のC-uを使うことができます。たとえばC-u 6 4 C-u 1とすれば、これは‘1’を64個コピーして挿入します。

引数の有無は確認しても、その値は無視するコマンドもあります。たとえばコマンドM-q (fill-paragraph)は、1行に収まるようできるだけテキストをフィルしますが、引数をともなうと、余分なスペースを挿入してテキストが正確に1行の最大幅を使うよう均等に割り付けてフィルします(M-qについては、テキストのフィルを参照してください)。このようなコマンドは、引数として単にC-uを指定するだけで充分です。

引数の値を繰り返しの回数として使いますが、引数がないときは特別な処理を行うコマンドもあります。たとえばコマンドC-k (kill-line)に引数nを指定すると、これは行末の改行も含めてn行をkillします。しかし引数を指定しないでC-kした場合、ポイントから改行までのテキストをkillするか、ポイントが行末にある場合は改行をkillします。つまりコマンドC-kを引数なしで2回呼び出すと、C-kに引数1を指定したのと同様、空でない行をkillできます(C-kについての情報は、テキストのkillと移動を参照してください)。

いくつかのコマンドは、C-uだけの引数を通常の引数とは異なるものとして扱います。また、マイナス記号のみの引数を、-1とは区別するコマンドもあります。これらの例外については、必要になったときに説明します。これらの例外は、それぞれのコマンドを使いやすくするためにあり、コマンドのドキュメント文字列に記載されています。

コマンドのに引数を入力するという点を強調するために、そしてコマンドが呼び出されたに入力されるミニバッファー引数(ミニバッファーを参照してください)と区別するために、わたしたちはプレフィクス引数(prefix argument)という言葉を使います。

グラフィカルなディスプレイではC-0C-1、...はM-0M-1、...と同じように振る舞います。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.11 コマンドの繰り返し

単純なキーで呼び出されるものや、M-x command-name RETで実行できるような多くのコマンドは、数引数で繰り返し回数(数引数を参照してください)を与えることで、その回数だけ繰り返すことができます。しかし、入力を求めるものや数引数を別の目的に使うコマンドでは、この方法はうまくいきません。

コマンドC-x z (repeat)は、Emacsコマンドを何回も反復する別の方法です。このコマンドは、直前のEmacsコマンドが何であっても、それを繰り返します。繰り返されるコマンドは、まえと同じ引数を使います。毎回新たに引数を読み取ることはしません。

コマンドを2回以上繰り返すにはzを追加して入力します。1つのzでコマンドを1回繰り返します。z以外の文字を入力するか、マウスボタンを押すと繰り返しを終了します。

たとえば、20文字削除するためにC-u 2 0 C-dと入力したとしましょう。C-x z z zと入力すれば、(引数を含めて)削除コマンドをさらに3回繰り返し、全部で80文字削除できます。始めのC-x zでコマンドを1回繰り返し、そのあとのそれぞれのzで1回ずつ繰り返します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8 ミニバッファー

ミニバッファー(minibuffer)とは、Emacsのコマンドがファイル名、バッファー名、Emacsコマンド名、Lisp式といった、複雑な引数を読み取るための場所です。なぜ“ミニバッファー”と呼ぶかというと、それがスクリーン上の小領域を占める、特別な目的のためのバッファーだからです。ミニバッファーで引数テキストを編集するために、通常のEmacs編集コマンドを使うことができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.1 ミニバッファーを使う

ミニバッファーを使用中、ミニバッファーはエコーエリアにカーソルとともに表示されます。ミニバッファーは通常、コロンが最後についたプロンプト(prompt)から開始されます。プロンプトはどのような入力が期待されるか、そしてそれがどのように使われるのかを示します。プロンプトは、フェイスminibuffer-promptを使ってハイライトされます。

ミニバッファーで入力するもっとも簡単な方法は、テキストを入力してからRETで引数入力を完了してミニバッファーを終了する方法です。かわりにC-gを入力して引数を求めているコマンドをキャンセルし、ミニバッファーを終了することもできます(中止と中断を参照してください)。

コロンの前のカッコ内にデフォルト引数(default argument)を表示するプロンプトもあります。このデフォルト値は、RETだけを入力したときに、引数として使用されます。たとえばバッファー名を読み取るコマンドは、通常デフォルト値としてバッファー名を表示します。RETを入力することでデフォルトのバッファーにたいして処理を行うことができます。

Minibuffer Electric Defaultモードというグローバルマイナーモードを有効にしている場合、ミニバッファーの内容の変更を開始すると、Emacsはデフォルト引数を非表示にします。ミニバッファーのテキストを元に戻せば、ふたたびプロンプトにデフォルト値が表示されます。さらに変数minibuffer-eldef-shorten-defaultを非nil値に変更すると、スクリーンのスペースを節約するために、‘(default default-arg)’のかわりに‘[default-arg]’の形式でデフォルト値を表示します。このマイナーモードを有効にするには、M-x minibuffer-electric-default-modeとタイプしてください。

エコーエリアにミニバッファーが表示されると、他のエコーエリアの使用と競合するかもしれません。ミニバッファーがアクティブなときは、メッセージはミニバッファーのテキストの後にカッコ内に数秒、あるいは何かをタイプするまで表示されて、その後消えます。ミニバッファーの使用中、Emacsはキーストロークをエコーしません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.2 ミニバッファーでのファイル名

C-x C-f (find-file)のようなコマンドは、ミニバッファーを使ってファイル名引数を読み取ります。ファイル名を読み取るためにミニバッファーを使用しているとき、通常は最後にスラッシュがついたテキストで開始されています。これはデフォルトディレクトリー(default directory)です。たとえば以下のように開始されていたとします:

Find file: /u2/emacs/src/

ここで‘Find file: ’はプロンプト、‘/u2/emacs/src/’はデフォルトディレクトリーです。ここでbuffer.cを入力すると/u2/emacs/src/buffer.cを指定したことになります。デフォルトディレクトリーについての情報は、ファイルの名前を参照してください。

あなたが望むかもしれないファイル名のデフォルト候補は、M-nとタイプすることにより利用できます。ミニバッファーヒストリーを参照してください。

..で親ディレクトリー内のファイルを指定できます。つまり/a/b/../foo.el/a/foo.elと同じです。M-DELを使えば、ディレクトリー名を後方にkillできます(単語を参照してください)。

デフォルトディレクトリーとは無関係のファイルを指定する場合、デフォルト値全部をC-a C-kでkillできます。かわりにデフォルト値を無視することもできます。これはスラッシュで始まる絶対パスのファイル名か、チルダで始まるファイル名をデフォルトディレクトリーに続けて入力します。たとえば以下のようにして/etc/termcapを指定できます:

Find file: /u2/emacs/src//etc/termcap

ダブルスラッシュにより、Emacsは2番目のスラッシュより前のすべてを無視します。上の例では/u2/emacs/src/は無視されるので、引数は/etc/termcapとなります。無視される部分のファイル名は、端末に可能なら目立たないような表示になります(これを無効にするには、コマンドM-x file-name-shadow-modeでFile Name Shadowモードをオフにしてください)。

リモートファイルの名前(リモートファイルを参照)を補完する際、ダブルスラッシュは若干異なる挙動を示します。この場合のダブルスラッシュは、Emacsがファイル名の部分だけを無視して、他の部分(method、host、username、...など)を手付かずのままにするようにします。3つのスラッシュを連続してタイプすると、リモートファイル名の中のすべてを無視します。File name completion in The Tramp Manualを参照してください。

Emacsは~/をホームディレクトリーと解釈します。~/foo/bar.txtはホームディレクトリーにある、fooというディレクトリーの、bar.txtという名前のファイルを指定します。さらに~user-id/はログイン名がuser-idというユーザーの、ホームディレクトリーを意味します。~の前のディレクトリー名は無視されるので、/u2/emacs/~/foo/bar.txt~/foo/bar.txtと同じです。

MS-WindowsとMS-DOSでは、ユーザーは常にホームディレクトリーを持つとは限らないので、Emacsはいくつかの代替ディレクトリーを使います。MS-WindowsについてはMS-WindowsでのHOMEディレクトリーと開始ディレクトリー、MS-DOSについては MS-DOSでのファイル名を参照してください。 これらのシステムでは~user-id/は現在のユーザーの場合だけ、つまりuser-idが現在のユーザーのログイン名のときだけがサポートされます。

Emacsがファイル名を読みとるとき、デフォルトディレクトリーを挿入しないようにするには、変数insert-default-directorynilに変更します。この場合、ミニバッファーは空で開始されます。それでも相対パスでのファイル名引数は、同じデフォルトディレクトリーにもとづいて解釈されます。

ミニバッファーにリモートファイル名を入力することもできます。 リモートファイルを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.3 ミニバッファーでの編集

ミニバッファーは一風変わっていますがEmacsのバッファーなので、引数テキストを編集するための、通常のEmacsコマンドが利用可能です(しかしプロンプトは読み取り専用(read-only)なので変更できません)。

ミニバッファーでのRETは引数を完了させるので、これを使って改行を挿入することはできません。C-q C-jを使えば制御文字C-j(改行文字と等しい)を挿入できます(テキストの挿入を参照してください)。かわりにC-o (open-line)を使うこともできます(空行を参照してください)。

ミニバッファーの中ではTABSPC?補完コマンド(completion commands)にバインドされている場合があります。これによりテキスト全部を入力せずに、入力したいテキストを簡単に入力できます。補完を参照してください。RETのときと同様、C-qを使ってTABSPC、‘?’のような文字を入力できます。

便宜上ミニバッファーでのC-a (move-beginning-of-line)は、プロンプトの先頭ではなく引数テキストの先頭にポイントを移動します。これにより、たとえばC-a C-kで引数全体をkillことができます。

ミニバッファーがアクティブのとき、エコーエリアは通常のEmacsウィンドウのように扱われます。たとえば(C-x oで)他のウィンドウに切り替えて、そこでテキストを編集して、またミニバッファーのウィンドウにもどって引数の入力を完了できます。ほかのウィンドウでテキストをkillしてからミニバッファーのウィンドウにもどり、引数にテキストをyankすることさえ可能です。しかしミニバッファーのウィンドウは分割(split)できないなどの制限もあります。複数ウィンドウを参照してください。

通常ミニバッファーのウィンドウは、スクリーン行で1行を占めます。しかし2行以上のテキストをミニバッファーに追加すると、そのテキストに対応して自動的に拡張されます。変数resize-mini-windowsは、ミニバッファーのサイズ調整を制御します。デフォルト値はgrow-onlyで、これは今説明したとおりの振る舞いを意味します。もし値がtの場合、ミニバッファーから行を削除すると。ミニバッファーのウィンドウは自動的に縮小されて、スクリーン行で1行まで小さくなります。値がnilの場合、ミニバッファーのウィンドウは自動的にサイズを変更しません。しかし通常のウィンドウのサイズ調整コマンドは使用できます(複数ウィンドウを参照してください)。

変数max-mini-window-heightは、ミニバッファーのウィンドウのサイズ変更するときの、最大高さを制御します。浮動少数を指定した場合は、フレームの高さにたいする比になります。整数を指定した場合は最大行数になります。nilを指定すると、ミニバッファーのウィンドウの自動サイズ調整は行われません。デフォルト値は0.25です。

ミニバッファーでのC-M-vコマンドは、他のウィンドウに表示されたコマンドのヘルプテキストをスクロールします。M-PageUpM-PageDown(またはM-priorM-next)でも、ヘルプテキストをスクロールできます。これは長い補完候補のリストを選ぶときなどに便利です。他のウィンドウの使用を参照してください。

Emacsではミニバッファーがアクティブのときには、通常はミニバッファーにたいして多くのコマンドが使用できないようになっています。ミニバッファーでこれらのコマンドを使えるようにするには、変数enable-recursive-minibufferstをセットしてください。ミニバッファーを再帰的に使用中にミニバッファーのプロンプトにカレントの再帰深さを表示するために、minibuffer-depth-indicate-modeも有効にする必要があるかもしれません。

アクティブでないとき、ミニバッファーはminibuffer-inactive-modeになっており、mouse-1をクリックすると、*Messages*バッファーを表示します。ミニバッファー専用のフレームを使用している場合、Emacsはそこでのキー入力も認識します。たとえばnは新しいフレームを作成します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.4 補完

引数を入力する助けとなる、補完(completion)という機能が使えるときがあります。これは引数の一部を入力すると、それまでに何を入力したかにもとづいて、Emacsが残りあるいは残りの一部を補完してくれることを意味します。

補完が利用可能なとき、特定のキー(通常はTABRETSPC)が、ミニバッファーの特別な補完コマンド(補完コマンドを参照してください)にリバインドされています。これらのコマンドは、ミニバッファーのテキストを完了させようと試みます。これは引数を要求したコマンドが提供する、補完候補(completion alternatives)にもとづいています。通常?を入力すると、補完候補のリストを見ることができます。

補完は通常ミニバッファー内で行われますが、通常のバッファーないでもこの機能を利用可能なときがあります。シンボル名の補完を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.4.1 補完の例

ここでは簡単な例が理解しやすいでしょう。M-xは、コマンド名を読み取るためにミニバッファーを使います。補完はミニバッファーのテキストと、既存のEmacsコマンドの名前のマッチによって機能します。コマンドをauto-fill-modeを実行したいとします。M-x auto-fill-mode RETをタイプすればよいのですが、補完を使えばもっと簡単になります。

M-x a u TABとタイプすると、TABは‘au’で始まる補完候補(この例ではコマンド名)を探します。auto-fill-modeautoconf-modeなどの候補がいくつかありますが、候補はすべてautoで始まるので、ミニバッファーの‘au’は‘auto’に補完されます(あなたのEmacsのセッションには、もっと多くのコマンドが定義されているかもしれません。たとえばauthorize-meというコマンドが定義されている場合には、Emacsが補完できるのは‘aut’までです)。

もう一度TABをタイプしても、次の文字は‘-’、‘a’、‘c’のどれなのか決定できません。そのため文字は追加されず、かわりにTABは可能性のある補完候補の一覧を別のウィンドウに表示します。

次に-fと入力します。ミニバッファーには‘auto-f’が入力されました。この文字で始まるコマンド名は、auto-fill-modeだけです。ここでTABを入力すると、残りの部分が補完されて、ミニバッファーの引数は‘auto-fill-mode’になります。

したがってa u TAB - f TABと入力するだけで、‘auto-fill-mode’と入力できるのです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.4.2 補完コマンド

以下は補完が使えるときに、ミニバッファーで定義されている補完コマンドの一覧です。

TAB

可能な限りミニバッファーのテキストを補完します。補完できないときは、可能性のある補完候補のリストを表示します(minibuffer-complete)。

SPC

ミニバッファーのテキストを単語単位で補完します(minibuffer-complete-word)。このコマンドは、引数にスペースが含まれる可能性のあるファイル名などでは利用できません。

RET

最初に可能な限り補完した後で、ミニバッファーのテキストを引数として確定します。補完の終了を参照してください。

?

補完候補の一覧を表示します(minibuffer-completion-help)。

TAB (minibuffer-complete)は、もっとも基本的な補完コマンドです。これはミニバッファーのテキストとマッチする可能性のある、すべての補完候補を検索して、できるかぎりの補完を試みます。補完候補が選択される方法については、補完候補が選択される方法を参照してください。

SPC (minibuffer-complete-word)は、TABと同じように補完をおこないますが、次のハイフンまたは空白までしか補完しません。ミニバッファーが‘auto-f’の場合、‘auto-fill-mode’まで補完できますが、‘ill-’しか挿入しないので‘auto-fill-’となります。次にSPCを入力すると‘auto-fill-mode’が補完されます。

TABSPCが補完できない場合、マッチする補完候補のリスト(複数ある場合)を、別のウィンドウに表示します。同じリストは? (minibuffer-completion-help)でも表示できます。以下は補完一覧で使うことができるコマンドです:

M-v
PageUp
prior

ミニバッファーでM-vを入力すると、候補リストを表示しているウィンドウを選択します(switch-to-completions)。以下のコマンドを使うには、この方法がよいでしょう。PageUppriorは同じことをおこないます。他の方法でもウィンドウを選択できます(複数ウィンドウを参照してください)。

RET
mouse-1
mouse-2

補完候補リストのバッファー内では、ポイント位置の補完候補を選択します(choose-completion)。

TAB
RIGHT

補完候補リストのバッファー内では、これらのキーは次の補完候補にポイントを移動します(next-completion)。

S-TAB
LEFT

補完候補リストのバッファー内では、これらのキーは前の補完候補にポイントを移動します(previous-completion)。

q

補完候補リストのバッファー内ではリストバッファーを表示中のウィンドウをquitして、ミニバッファーを表示中のウィンドウを選択します

z

補完候補リストのバッファー内ではリストバッファーをkillしてそれを表示中のウィンドウを削除します(kill-current-buffer)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.4.3 補完の終了

コマンドがミニバッファーの補完を使って引数を読みとる場合、引数を確定するためにRET (minibuffer-complete-and-exit)をタイプしたときに、何が起こるかも制御します。これには4種類の動作があります:


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.4.4 補完候補が選択される方法

補完コマンドは、たくさんの可能性のある補完候補を、ミニバッファーに入力したものとマッチ(match)する、より少ないサブセットへと絞り込むことにより機能します。補完の例では、そのようなマッチングの簡単な例を紹介しました。どのような構成がマッチなのかを決定する手続きはとても複雑です。Emacsは多くの状況下でもっとも妥当と思われる補完を試みます。

Emacsは1つ以上の補完スタイル(completion styles)を使って補完をおこないます。これはミニバッファーのテキストを補完候補とマッチングするための条件のセットです。補完を行うとき、Emacsは補完スタイルを順番に試します。もしあるスタイルが1つ以上のマッチを獲得した場合、それらは補完候補リストのために使用されます。もしあるスタイルがマッチを獲得できなかった場合、Emacsは次のスタイルにフォールバックします。

リスト変数completion-stylesは、使用する補完スタイルを定義します。それぞれのリスト要素(list element)は、補完スタイルの名前(Lispシンボル)です。デフォルトの補完スタイルは、リスト変数に以下の名前の要素が順番に並んでいます。

basic

ミニバッファーのポイントより前のテキストと、補完候補の先頭が同じでなければなりません。さらにミニバッファーのポイントより後ろのテキストがある場合、補完候補の残りそれが含まれていなければなりません。

partial-completion

このアグレッシブな補完スタイルは、ミニバッファーのテキストをハイフンまたは空白で区切り、各単語ごとに補完をおこないます(たとえばコマンド名を補完する場合、‘em-l-m’は、‘emacs-lisp-mode’に補完されます)。

さらにミニバッファーのテキスト中の‘*’は、ワイルドカード(wildcard)として扱われます。これは補完候補の対応する位置にある文字列の、任意の文字とマッチします。

emacs22

この補完スタイルはbasicとにていますが、ミニバッファーのポイントより後のテキストを無視します。この名前は補完の動作がEmacs 22と同じだからです。

以下の追加の補完スタイルが定義されており、completion-stylesに追加することもできます(カスタマイズを参照してください)。

substring

補完候補は、ミニバッファーのポイントより前のテキストと、ポイントより後のテキストが同じ順番で含まれていなければなりません。

したがって、ミニバッファーのテキストが‘foobar’で、ポイントが‘foo’と‘bar’の間にある場合、‘afoobbarc’にマッチします。この場合abcは空文字列を含む任意の文字列です。

flex

このflxfuzzy、またはscatterのような補完としても知られるアグレッシブな補完は部分文字列を順に使用することにより補完を試みます。たとえば‘foo’は、‘frodo’や‘fbarbazoo’にマッチするとみなすことができます。

initials

このとてもアグレッシブな補完スタイルは、頭文字とイニシャルで補完を試みます。たとえばコマンド名の補完をする場合、‘lch’は‘list-command-history’とマッチします。

emacs21と呼ばれる、とてもシンプルな補完スタイルもあります。このスタイルでは、ミニバッファーのテキストが‘foobar’の場合、‘foobar’で始まるものだけにマッチします。

変数completion-category-overridesを設定することにより、状況に応じて異なる補完スタイルを使うことができます。たとえばバッファー名を補完するときは、デフォルトでbasicsubstringだけを使うよう指定できます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.4.5 補完オプション

大文字小文字の違いは、コマンド名のように大文字小文字を区別する(case-sensitive)引数では重要です。たとえばコマンド名の補完では、‘AU’では‘auto-fill-mode’に補完されません。大文字小文字の違いは、それが問題にならない引数の補完では無視されます。

ファイル名を補完するとき、変数read-file-name-completion-ignore-caseが非nilなら、大文字小文字の違いは無視されます。GNU/Linuxのように、ファイル名の大文字と小文字を区別するシステムでは、デフォルト値はnilです。Microsoft Windowsのように、ファイル名の大文字と小文字を区別しないシステムでは、非nilです。バッファー名を補完するとき、read-buffer-completion-ignore-caseが非nilなら、大文字小文字の違いは無視されます。デフォルトはnilです。

通常Emacsはファイル名を補完するとき、選ばれるべきではないと思われる、特定の候補を無視します。これはリスト変数completion-ignored-extensionsにより決定されます。リストの要素はに文字列を指定します。それらの文字列で終わるファイル名は、補完候補としては無視されます。スラッシュ(/)で終わる要素は、ディレクトリー名を表します。completion-ignored-extensionsの標準的な値は".o"".elc""~"を含むいくつかの要素です。たとえばディレクトリーに‘foo.c’、‘foo.elc’があるとき、‘foo’は‘foo.c’に補完されます。しかしすべての補完候補が無視すべき文字列で終わるとき、これらの候補は無視されません。前の例でいうと‘foo.e’は‘foo.elc’に補完されます。Emacsは補完候補リストで補完候補を表示するとき、completion-ignored-extensionsを無視します。

Shellでの補完は、ファイル名補完の拡張されたバージョンです。Shellモードのオプションを参照してください。

completion-auto-helpnilがセットされていると、補完コマンドは補完リストバッファーを表示しません。表示するには?を入力しなければなりません。値がlazyの場合、Emacsは2度目の補完を試みたときだけ、補完リストバッファーを表示します。もし補完すべきものがない場合、1度目のTABは‘Next char not unique’と表示し、2度目のTABで補完リストバッファーが表示されます。

completion-cycle-thresholdが非nilのとき、補完コマンドは補完候補を循環(cycle)することができます。ミニバッファーのテキストで1つ以上の補完候補がある場合は通常、補完コマンドは補完できた文字までを表示します。completion-cycle-thresholdtに変更すると、補完コマンドは補完候補の中から最初の候補を表示します。それ以降の補完コマンドの呼び出しでは、その次の補完候補を循環的に表示します。completion-cycle-thresholdを数値nにすると、補完候補がn以下のときだけ循環表示の動作をします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.5 ミニバッファーヒストリー

ミニバッファーで入力したすべての引数は、ミニバッファーヒストリーリスト(minibuffer history list)に保存されているので、簡単に後でまた使うことができます。以下のコマンドにより、前の引数をすばやく探してミニバッファーに呼び出すことができます:

M-p

ミニバッファーヒストリーの前のアイテム、つまり以前のアイテムに移動します(previous-history-element)。

M-n

ミニバッファーヒストリーの次のアイテムに移動します(next-history-element)。

UP
DOWN

M-pM-nと同様ですが、前のヒストリーアイテムに移動する前に、複数行アイテムの前、または次の行に移動します(previous-line-or-history-element、およびnext-line-or-history-element)。

M-r regexp RET

regexpにマッチする、ミニバッファーヒストリーの以前のアイテムに移動します(previous-matching-history-element)。

M-s regexp RET

regexpにマッチする、ミニバッファーヒストリーの以降のアイテムに移動します(next-matching-history-element)。

ミニバッファーでのM-p (previous-history-element)は、ミニバッファーのヒストリーリストのアイテムを1つずつ移動します。M-pはヒストリーリストの以前のアイテムを取り出して、ミニバッファーの既存の内容を置き換えます。M-n (next-history-element)は、ミニバッファーのヒストリーリストを反対方向、つまり以降のエントリーを取り出してミニバッファーの既存の内容を置き換えます。

ミニバッファーヒストリーに以降のエントリーがないとき(たとえば前に1回もM-pを入力していないとき)、Emacsはデフォルト引数のリストから、あなたが入力するだろうと思われる値を取り出します。これは“未来のヒストリー”を移動すると考えることもできます。

ファイルにたいする“未来のヒストリー(future history)”には、カレントバッファー内のポイント位置にあるファイル名やURLのような、あなたが便利だと思うかもしれないいくつかの候補が含まれます。この場合、“未来のヒストリー”に配されるデフォルトは、オプションfile-name-at-point-functionsの値にセットされた関数により制御されます。デフォルトでは、この値はffapパッケージ((ポイント位置のファイルやURLを開く)を参照)を呼び出します。これはポイント周辺のテキストからデフォルトとなるファイルやURLを推測します。この推測を無効にするには、このオプションをnil値にカスタマイズします。これにより“未来のヒストリー”に含まれるのは、(もしあれば)カレントバッファーでvisitされたファイル、およびデフォルトディレクトリーのファイルだけになります。

矢印キーのUPDOWNは、M-pM-nのように機能しますが、カレントヒストリーアイテムが複数行の場合には、前(または次)のヒストリーアイテムに移動する前に、前(または次)の行に移動します。

ミニバッファーコマンドのM-pまたはM-nで挿入されたテキストを編集しても、ヒストリーリストのエントリーは変更されません。かわりに編集された引数が確定されたとき、ヒストリーリストの最後に追加されます。

M-r (previous-matching-history-element)でヒストリーリストの古い要素を、M-s (next-matching-history-element)で新しいエントリーを探すことができます。これらのコマンドはどちらも引数として正規表現(regular expression)を要求し、それにマッチした最初のエントリーをミニバッファーに取り出します。正規表現についての説明は、正規表現の構文を参照してください。数引数nを指定すると、それはn番目に一致したエントリーを取り出すことを意味します。これらのコマンドはミニバッファーから呼び出されたとはいえ、ミニバッファーを使って正規表現を読みとるという点では、変わったコマンドです。正規表現に大文字が含まれていると、大文字小文字を区別する検索(検索中のLaxマッチングを参照してください)となります。

ヒストリーをインクリメンタルサーチすることもできます。ミニバッファーの検索を参照してください。

Emacsは引数の種類ごとに個別のリストを保持します。たとえばファイル名のリストは、ファイル名を読みとるすべてのコマンドで使われたファイル名、といった具合です。ほかのヒストリーリストとしてはバッファー名やコマンド名(M-xで使われたもの)、コマンド引数(query-replaceのような引数で使われたもの)があります。

変数history-lengthには、ミニバッファーのヒストリーリストの最大の長さを指定します。リストが長くなりすぎたときは、一番古い要素を削除して新しい要素を追加します。tを指定したときは、長さは無制限になります。

変数history-delete-duplicatesには、重複したヒストリーを削除するかを指定します。非nilの場合、新しい要素が追加されるとリストからそれと同じ要素がすべて削除されます。デフォルトはnilです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.6 ミニバッファーでのコマンドの繰り返し

ミニバッファーを使用したコマンドはすべて、コマンドヒストリー(command history)という特別なヒストリーリストに記録されます。これにはコマンドの引数の値も記録されるので、コマンド全体を再実行できます。特にM-xはコマンド名を読みとるので、M-xを使用したものはすべてそこに記録されます。

C-x ESC ESC

コマンドヒストリーから最近のミニバッファーのコマンドを再実行します(repeat-complex-command)。

M-x list-command-history

コマンドヒストリー全体を表示します。表示されたすべてのコマンドはC-x ESC ESCで再実行できます。一番最近のものが先頭に表示されます。

C-x ESC ESCは、ミニバッファーを使った最近のコマンドを再実行します。引数を与えないと、一番最近のコマンドを実行します。数引数で再実行したいコマンドを指定します。1は一番最近のコマンド、2はその前、といった具合です。

C-x ESC ESCは、前のコマンドをLisp式に変換して、その式でミニバッファーのテキストを初期化します。Lispを知らなくても、何のコマンドが再実行用に表示されているか明白でしょう。単にRETを入力すると、コマンドを変更せずに再実行します。実行する前にLisp式を編集して、コマンドを変更できます。実行されたコマンドは、一番最近のコマンドと等しくなければ、コマンドヒストリーの一番先頭に追加されます。

C-x ESC ESCで一度ミニバッファーの中に入れば、通常のミニバッファーのヒストリーコマンド(ミニバッファーヒストリーを参照してください)を使って、ヒストリーリスト中を移動できます。以前に実行したコマンドが見つけたら、式を編集してRETにより実行できます。

厳密に言うとインクリメンタルサーチはミニバッファーを使いません。これが複雑なコマンドのように振る舞うとしても、通常はC-x ESC ESCで表示されるヒストリーリストに含まれません。ヒストリーにインクリメンタルサーチコマンドを表示させるには、isearch-resume-in-command-historyに非nilをセットしてください。インクリメンタル検索を参照してください。

ミニバッファーを使用した以前のコマンドのリストは、Lispのリスト値としてcommand-historyに格納されています。Lisp式の各要素は、1つのコマンドとその引数をあらわしています。Lispプログラムはevalcommand-historyの要素を使って呼び出すことで、コマンドを再実行できます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.7 パスワードの入力

Emacsでパスワードを入力したい場合があります。たとえばEmacsにFTPのようなネットワークプロトコルを介して他のマシンのファイルをvisitし、マシンへのアクセスのためにパスワードを与える場合などです(リモートファイルを参照してください)。

パスワードの入力はミニバッファーの使用と似ています。Emacsは(‘Password: ’のような)プロンプトをエコーエリアに表示します。要求されたパスワードを入力した後、それを確定するためにRETを押します。他の人がパスワードを見るのを防ぐために、入力した文字は通常の形式ではなくアスタリスク(‘*’)で表示されます。

ミニバッファーに関連付けられた多くの機能およびコマンドは、パスワード入力では使用できません。ヒストリーや補完はできず、ウィンドウの変更やEmacsでの他の処理も、パスワードをsubmitするまでは行うことができません。

パスワードのタイプ中は、DELを押して後方に、すなわち最後に入力した文字から削除できます。C-uで入力したすべての文字を削除できます。C-gはパスワードプロンプトを閉じます(中止と中断を参照)。C-yは現在のkillリングからパスワードを挿入します(テキストのkillと移動を参照)。パスワードを確定するには、RETまたはESCを入力します。他の自己挿入文字は、対応する文字をパスワードに入力します.それ以外の入力は無視されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.8 Yes or No プロンプト

Emacsのコマンドが実行の過程で、yes-or-no(はい/いいえ)形式で質問して答えを求めるかもしれません。これらの質問は大きく2つにわけることができます。

1番目のyes-or-no形式の質問は‘(y or n)で終わるプロンプトの質問です。‘y’か‘n’いずれかの単一キーをタイプして質問に応答して、それによりミニバッーを即座にexitして応答を伝えます。たとえばバッファーの保存でC-x C-w (write-file)を入力して既存のファイル名を入力すると、Emacsは以下のようなプロンプトを表示します:

File ‘foo.el’ exists; overwrite? (y or n)

2番目のyes-or-no形式の質問は間違った答えが深刻な事態を招くような場合に使用される質問形式で、‘(yes or no)’を編集する長いプロンプトが特徴です。たとえば変更が保存されていないファイルをvisitしているバッファーでC-x k (kill-buffer)を呼び出すと、Emacsはミニバッファーをアクティブにして以下のようなプロンプトを表示します:

Buffer foo.el modified; kill anyway? (yes or no)

これに答えるにはミニバッファーで‘yes’か‘no’の後にRETをタイプしなければなりません。

これらのyes-or-noによる2つの質問形式では、前のセクションで説明したようにミニバッファーは振る舞います。C-lによる選択されたウィンドウの再センタリング、ウィンドウのスクロール( C-vPageDownで前方、M-vPageUpで後方にスクロール)、C-x oによる別ウィンドウへの切り替え、M-pM-nによるヒストリーコマンドの使用等が可能です。質問を終了するためにはC-gをタイプしてミニバッファーと問い合わせコマンドををquitします(中止と中断を参照)。これに答えるには、ミニバッファーに‘yes’または‘no’と入力してから、RETを押さなければなりません。ミニバッファーは前のセクションで説明したように動作します。C-x oによる他のウィンドウへのスイッチ、ヒストリーコマンドのM-pM-nなどが使用できます。C-gでミニバッファーを閉じて、質問を発したコマンドを終了できます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9 名前を指定してコマンドを実行する

すべてのEmacsコマンドは、それを使えば実行できるような名前を持っています。使いやすいようにキーバインディングされているコマンドも、たくさんあります。これらのコマンドはキーまたは名前で実行できます。キーがバインドされていないコマンドもたくさんあり、そのようなコマンドは名前でしか実行できません(キーバインドをセットアップする方法については、キーバインディングのカスタマイズを参照してください)。

慣例によりコマンド名はauto-fill-modemanual-entryのように、ハイフンで区切られた、1つ以上の単語となっています。コマンド名は覚えやすいように、略されていない英単語が主に使われます。

コマンドを名前で実行するには、最初にM-xをタイプしてから、コマンド名をタイプしてRETで実行します。M-xはミニバッファーを使ってコマンド名を読みとります。ミニバッファーの先頭には、実行のために名前の入力が必要なことを気付かせるため、‘M-x’という文字がプロンプトとして表示されます。RETでミニバッファーを抜けだしコマンドを実行します。ミニバッファーについての詳細は、ミニバッファーを参照してください。

コマンド名の入力には補完が使用できます。たとえばforward-charを呼び出すには以下のように入力できます

M-x forward-char RET

または

M-x forw TAB c RET

forward-charは、キーC-fで呼び出されるのと同じコマンドであることに注意してください。キーバインドの存在は、名前によるコマンドの実行を妨げません。

M-xでコマンドを補完するとき、obsolete(時代遅れ)と宣言されたコマンドは無視されます。これらのコマンドにたいしては、完全な名前をタイプする必要があります。時代遅れのコマンドとはもっと新しく、より良い代替が存在していて、将来のEmacsリリースにおいて廃止が予定されているコマンドのことです。

M-xとコマンドの実行をキャンセルするには、コマンド名の入力のかわりにC-gを入力します。これによりコマンドを呼び出したレベルまで戻ります。

M-xで呼び出すコマンドに数引数を渡すには、M-xの前に数引数を指定します。引数の値はコマンド名が読みとられるときにプロンプトとして表示され、最終的にM-xは引数をコマンドに渡します。たとえば、コマンドforward-charに数引数として42を渡すには、C-u 42 M-x forward-char RETとタイプできます。

M-xで実行するコマンドがキーバインディングを持つ場合、Emacsはコマンド実行後にその旨をエコーエリアに表示します。たとえばM-x forward-wordと入力すると、同じコマンドをM-fで実行できるというメッセージが表示されます。このメッセージは変数suggest-key-bindingsnilにセットすればオフにできます。suggest-key-bindingsの値には数字も指定でき、この場合Emaceは指定された秒数の間、キーバインドを表示します。バインディングを表示するときのデフォルトは2秒です。

キーバインドをもたないコマンドも、‘M-x’のプロンプトで、完全な名前より短くタイプして呼び出すことができます。Emacsは、短縮入力が完全なコマンド名より明らかに短く、extended-command-suggest-shorterが非nilの場合は、そのような短縮入力をエコーエリアに表示します。suggest-key-bindingsのセッティングは、そのようなヒントにも同様に効果を及ぼします。

このマニュアルではコマンドを名前で実行するとき、名前を終了させるためのRETを省くことがあります。つまりM-x auto-fill-mode RETではなくM-x auto-fill-modeと表記します。RETはコマンドに引数がある場合に強調させる意味で使用します。

M-xexecute-extended-commandを実行します。これは他のコマンドの名前を読み取って実行するコマンドです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10 ヘルプ

Emacsはバラエティに富んだヘルプコマンドを提供しており、それらにはプレフィクスキーC-h(ファンクションキーF1でも可)からアクセスできます。以下のセクションではこれらのコマンドについて説明します。C-h C-h (help-for-help)と入力すれば、ヘルプコマンドの一覧を見ることもできます。この一覧はSPCDELでスクロールでき、それから見たいヘルプコマンドを入力するか、C-gでキャンセルできます。

多くのヘルプコマンドは、ヘルプバッファー(help buffer)という特別なバッファーに情報を表示します。このバッファーではSPCDELによりスクロールし、RETでハイパーリンクをフォローすることができます。ヘルプモードのコマンドを参照してください。

特定の機能を探しているが、それが何と呼ばれているかわからない、どこを見ればよいのかわからないときには、次の3つの方法を推奨します。まず最初にaproposコマンドを試してください。次にマニュアルのインデックスを探してください。そしてFAQとパッケージのキーワードを探してください。

C-h a topics RET

引数topicsと名前が一致するコマンドを検索します。引数にはキーワード、キーワードのリスト、正規表現(正規表現の構文を参照してください)を指定できます。Apropos(適切な)を参照してください。

C-h i d m emacs RET i topic RET

Emacsのinfoマニュアルのインデックスから、topicを検索して最初にマッチしたものを表示します。,を押すと次にマッチしたものを表示します。topicには正規表現を指定できます。

C-h i d m emacs RET s topic RET

同様ですが、インデックスではなくマニュアル本文のテキストを検索します。

C-h C-f

Infoを使ってEmacs FAQを表示します。

C-h p

キーワードに基づいて、利用可能なEmacsパッケージを表示します。パッケージのキーワード検索を参照してください。

他のさまざまなコンテキストでも、C-hF1は“ヘルプ”を意味します。たとえばプレフィクスキーの後にこれらのキーを入力すると、プレフィクスキーに続けて入力できるキーの一覧を表示することができます(このコンテキストでは?も使用できます。いくつかのプレフィクスキーはC-h?に別の意味を持たせているものがあるので使えませんが、それらのものでもF1はサポートされています)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.1 ヘルプの概要

ここではビルトインのドキュメントにアクセスする、ヘルプコマンドの要約を記します。これらの大部分については、以下のセクションで詳細を説明します。

C-h a topics RET

名前がtopicsにマッチするコマンドの一覧を表示します(apropos-command)。Apropos(適切な)を参照してください。

C-h b

有効なキーバインディングをすべて表示します。最初はマイナーモード、次にメジャーモード、それからグローバルのバインディングを表示します(describe-bindings)。その他のヘルプコマンドを参照してください。

C-h c key

キーシーケンスkeyがバインドされているコマンドの名前を表示します(describe-key-briefly)。cは“character”が由来です。keyについてさらに詳しい情報を得るにはC-h kを使います。キーのドキュメントを参照してください。

C-h d topics RET

topicsにマッチするドキュメントをもつ、コマンドまたは変数を表示します(apropos-documentation)。Apropos(適切な)を参照してください。

C-h e

バッファー*Messages*を表示します(view-echo-area-messages)。その他のヘルプコマンドを参照してください。

C-h f function RET

functionという名前のLisp関数のドキュメントを表示します(describe-function)。コマンドもLisp関数なのでコマンドにも使用できます。コマンドと変数名のヘルプを参照してください。

C-h h

ファイルHELLOを表示します。このファイルは様々な文字セットの例です。

C-h i

GNUドキュメントブラウザー(info)を実行します。Emacsのマニュアルはinfoで利用できます。その他のヘルプコマンドを参照してください。

C-h k key

keyで実行されるコマンドの名前と、ドキュメントを表示します(describe-key)。キーのドキュメントを参照してください。

C-h l

最近のキーストローク300回分のの説明を表示します(view-lossage)。その他のヘルプコマンドを参照してください。

C-h m

カレントのメジャーモード、およびマイナーモードのドキュメントを表示します(describe-mode)。その他のヘルプコマンドを参照してください。

C-h n

最近のEmacsの変更に関するニュースを表示します(view-emacs-news)。ヘルプファイルを参照してください。

C-h o symbol

symbolという名前のLispシンボルのドキュメントを表示します(describe-symbol)。これはすべての種類のシンボル、すなわち関数、変数、フェイスのドキュメントも表示します。コマンドと変数名のヘルプを参照してください。

C-h p

トピックのキーワードでパッケージを見つけます(finder-by-keyword)。パッケージのキーワード検索を参照してください。これはパッケージメニューバッファーを使ってパッケージを一覧します。Emacs Lispパッケージを参照してください。

C-h P package RET

指定したパッケージのドキュメントを表示します(describe-package)。パッケージのキーワード検索を参照してください。

C-h r

Emacsのマニュアルをinfoで表示します(info-emacs-manual)。

C-h s

現在の構文テーブル(syntax table)を表示します(describe-syntax)。その他のヘルプコマンドを参照してください。構文テーブルはどの文字が開始デリミッターで、その文字が単語の一部なのかを定義します。詳細についてはSyntax Tables in The Emacs Lisp Reference Manualを参照してください。

C-h t

Emacsの対話的なチュートリアルを開始します(help-with-tutorial)。

C-h v var RET

Lisp変数varのドキュメントを表示します(describe-variable)。コマンドと変数名のヘルプを参照してください。

C-h w command RET

commandという名前のコマンドを実行するキーを表示します(where-is)。キーのドキュメントを参照してください。

C-h C coding RET

コーディングシステムcodingを説明します(describe-coding-system)。コーディングシステムを参照してください。

C-h C RET

現在使用されているコーディングシステムを説明します。

C-h F command RET

infoを開始して、Emacsコマンドcommandのドキュメントのノードに移動します(Info-goto-emacs-command-node)。コマンドと変数名のヘルプを参照してください。

C-h I method RET

インプットメソッドmethodを説明します(describe-input-method)。インプットメソッドの選択を参照してください。

C-h K key

infoを開始して、キーシーケンスkeyのドキュメントのノードに移動します(Info-goto-emacs-key-command-node)。キーのドキュメントを参照してください。

C-h L language-env RET

言語環境(language environment)language-envで使用される文字セット、コーディングシステム、インプットメソッドに関する情報を表示します。言語環境を参照してください。

C-h S symbol RET

編集中のプログラム言語に基づいて、シンボルsymbolのinfoドキュメントを表示します(info-lookup-symbol)。その他のヘルプコマンドを参照してください。

C-h .

ポイントが特別なテキスト領域のとき(これには、たとえば*Help*のリンクなどが含まれます)、ヘルプメッセージを表示します(display-local-help)。アクティブテキストのヘルプとツールチップを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.2 キーのドキュメント

キーシーケンスに関する情報を得るためのヘルプコマンドは、C-h c (describe-key-briefly)とC-h k (describe-key)です。

C-h c keyは、keyにバインドされているコマンドの名前を、エコーエリアに表示します。たとえばC-h c C-fは、‘forward-char’と表示します。

C-h k keyも同様ですが、さらに多くの情報が得られます。これはコマンドが何をするかが正確に説明する、ドキュメント文字列(documentation string)を含むヘルプバッファーを表示します。

C-h K keyは、keyに対応するコマンドが説明されている、Emacsマニュアルのセクションを表示します。

C-h cC-h kC-h Kはファンクションキー、メニュー、マウスイベント(ただしC-h cはマウス移動イベントを無視する)を含む、任意のキーシーケンスにたいして動作します。たとえばC-h kの後で、メニューバーからメニューアイテムを選択すれば、それにより実行されるコマンドのドキュメントが表示されます。

C-h w command RETは、commandがバインドされているキーをリストします。リストはエコーエリアに表示されます。コマンドがキーにバインドされていないとき、それはM-xを使って実行しなければならないことを意味します。C-h wはコマンドwhere-isを実行します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.3 コマンドと変数名のヘルプ

C-h f function RET (describe-function)は、Lisp関数functionのドキュメントをウィンドウに表示します。コマンドもLisp関数なので、この方法を使えば、名前を知っている任意のコマンドのドキュメントを閲覧できます。たとえば

C-h f auto-fill-mode RET

auto-fill-modeのドキュメントを表示します。これはキーにバインドされていないコマンド(通常M-xで実行する)のドキュメントを閲覧する、唯一の方法です。

C-h fは、LispプログラムからLisp関数を使うときも便利です。たとえば式(make-vector len)を書いたとしましょう。正しく(make-vector len)を使っているかチェックしたいときは、C-h f make-vector RETと入力します。C-h fはコマンド名だけでなくすべての関数名を許容するので、M-xでは機能するいつもの補完による短縮形が、C-h fでは機能しないと気付くかもしれません。コマンド名では省略形が一意であっても、すべての関数名を含めたら一意ではないかもしれないからです。

C-h f RETを入力すると、バッファーのポイントがある位置の、一番内側のLisp式で呼び出されている関数の名前が有効で、Lisp関数として定義されていれば、その関数の説明が表示されます(引数を入力するときデフォルトとして関数名が表示されます)。たとえばポイントが‘(make-vector (car x)’の後ろにあるとき、ポイントを含む一番内側のリストは‘(make-vector’で始まっているので、C-h f RETにより関数make-vectorの説明が表示されます。

C-h fは、関数名を正しく記述しているか確かめたいときも便利です。C-h fのミニバッファーのプロンプトで、編集中のバッファーの関数名がデフォルトとして表示されるなら、それは定義されたLisp関数であることを意味します。本当にドキュメントを見たい訳でなければ、C-gを押してコマンドC-h fをキャンセルできます。

C-h v (describe-variable)は、C-h fと似ていますがLisp関数ではなく、Lisp関数の説明を表示します。ポイントの周囲または前にあるLispシンボルが、定義されたLisp変数名のときはそれがデフォルトとなります。変数を参照してください。

通常Emacsの変数または関数を説明するヘルプバッファーには、ソースファイルがインストールされていれば、対応するソースコードへのハイパーリンクが含まれています(ハイパーリンクとWebナビゲーション機能を参照してください)。

マニュアルからコマンドのドキュメントを探すには、C-h F (Info-goto-emacs-command-node)を使います。これはEmacsのマニュアルだけでなく、さまざまなマニュアルを認識するので、正しいものを見つけられるでしょう。

C-h o (describe-symbol)は、C-h fC-h vと似ていますが、これは任意のシンボル(関数、変数、フェイス)を説明します。シンボルが複数の定義をもつ場合(たとえばシンボルが関数と変数の両方の定義をもつような場合)、このコマンドはそれらすべてのドキュメントを順に表示します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.4 Apropos(適切な)

apropos(折よい、適切な)コマンドは、“What are the commands for working with files?(ファイルを処理するコマンドは?)”のような質問に答えるものです。より正確に言うと単語、単語のリスト、正規表現によって、aproposパターンを指定します。

以下の各aproposコマンドは、ミニバッファーでaproposパターンを読み取り、パターンにマッチするアイテムを検索して、結果を別のウィンドウに表示します。

C-h a

コマンドを検索します(apropos-command)。プレフィクス引数を指定すると、非インタラクティブな関数も検索します。

M-x apropos

関数と変数を検索します。これを使えばインタラクティブな関数(コマンド)と非インタラクティブな関数の両方を検索できます。

M-x apropos-user-option

ユーザーがカスタマイズできる関数を検索します。プレフィクス引数を指定すると、カスタマイズできない変数も検索します。

M-x apropos-variable

変数を検索します。プレフィクス引数を指定すると、カスタマイズできる変数だけを検索します。

M-x apropos-local-variable

バッファーローカル変数を検索します。

M-x apropos-value

指定したパターンにマッチする値の変数を検索します。プレフィクス引数を指定すると、定義がパターンにマッチする関数と、プロパティーリストがパターンにマッチする、Lispシンボルも検索します。

M-x apropos-local-value

値が指定されたパターンにマッチする、バッファーローカル変数を検索します。

C-h d

指定されたパターンにマッチするドキュメント文字列の関数、または変数を検索します(apropos-documentation)。

最も簡単な種類のaproposパターンは単語です。その単語が含まれていれば、パターンにマッチします。ファイルを処理するコマンドを探すには、C-h a file RETと入力します。これはcopy-filefind-fileなどの、名前に‘file’を含むすべてのコマンドの一覧を表示します。各コマンド名には簡単な説明と、それを呼び出すためのキーの一覧が一緒に表示されます。この例だと、find-fileC-x C-fで呼び出せることがわかります。

aproposバッファーの関数定義、変数、シンボルの属性についてもっと情報が欲しいときは、mouse-1またはmouse-2でクリックするか、そこに移動してRETを押してください。

2つ以上の単語をaproposパターンに指定したときは、マッチするために少なくとも名前に2つの単語が含まれていなければなりません。たとえばポイントの前のテキストをkillするコマンドを探すときは、C-h a kill back backward behind before RETなどと試みることができます。これは実際のコマンド名kill-backwardにマッチするでしょう。もしkill-text-beforeというコマンドがあったなら、これも指定した単語を2つ含んでいるのでマッチします。

より一層フレキシビリティを高めるために、正規表現(正規表現の構文を参照)を指定できます。aproposパターンに正規表現の特殊文字‘^$*+?.\[’が含まれていると、それは正規表現として扱われます。

Emacsコマンド命名の慣習に従うと、aproposパターンとして便利な単語がいくつかあります。これらをC-h aで使うことにより、命名の慣習の必要性を感じることができるでしょう。

char、line、word、sentence、paragraph、region、page、sexp、list、defun、rect、buffer、frame、window、face、file、dir、register、mode、beginning、end、forward、backward、next、previous、up、down、search、goto、kill、delete、mark、insert、yank、fill、indent、case、change、set、what、list、find、view、describe、default

変数apropos-do-allが非nilの場合、ほとんどのaproposコマンドは、プレフィクス引数が与えられたかのように振る舞います。例外が1つあります。プレフィクス引数なしのapropos-variableは、apropos-do-allの値に関係なく、常にすべての変数を検索します。

デフォルトでは、apropos-documentationを除くすべてのaproposコマンドは、結果をアルファベット順に一覧します。変数apropos-sort-by-scoresが非nilのときは、かわりに結果の関連度を推測して、一番関連度が高いと思われるものを最初に表示します。apropos-documentationコマンドは、デフォルトで結果を関連度順で一覧します。これをアルファベット順にするには、変数apropos-documentation-sort-by-scoresnilに変更してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.5 ヘルプモードのコマンド

ヘルプバッファーはViewモード(Viewモードを参照してください)と同じコマンドを提供します。たとえば前方へのスクロールはSPC、後方へのスクロールはDELS-SPCです。他にも特別なコマンドをいくつか提供します:

RET

ポイント位置のクロスリファレンス先をフォローします(help-follow)。

TAB

ポイントを次のハイパーリンクへ進めます(forward-button)。

S-TAB

ポイントを前のハイパーリンクへ戻します(backward-button)。

mouse-1
mouse-2

クリックしたハイパーリンク先をフォローします。

C-c C-c

ポイント位置のシンボルに関する、すべてのドキュメントを表示します(help-follow-symbol)。

C-c C-f
r

次ののヘルプトピックに前方へ移動します(help-go-forward)。

C-c C-b
l

前のヘルプトピックに戻ります(help-go-back)。

もし関数名、変数名、フェイス名(テキストのフェイスを参照してください)がヘルプバッファーのドキュメントにあると、通常はアンダーラインされたハイパーリンク(hyperlink)として表示されます。関連するドキュメントを閲覧するには、ポイントをそこに移動してRET (help-follow)とタイプするか、ハイパーリンクをmouse-1またはmouse-2でクリックします。するとヘルプバッファーの内容が入れ替わりますが、C-c C-b、またはl (help-go-back)で元に戻すことができます。元に戻る途中では、C-c C-fまたはr (help-go-forward)を使用して前に進むことができます。

ヘルプバッファーには、infoマニュアル、ソースコード定義、URL(ウェブページ)へのハイパーリンクを含むこともできます。最初の2つはEmacs上で表示され、3番目のURLはコマンドbrowse-urlにより、ウェブブラウザーを使って表示されます。

ヘルプバッファーでは、TAB (forward-button)はポイントを次のハイパーリンクへ進め、S-TAB (backward-button)は前のハイパーリンクへ戻します。これらのコマンドは循環的です。たとえば最後のハイパーリンクでTABをタイプすると、最初のハイパーリンクに戻ります。

テキスト中のシンボルに関するすべてのドキュメントを閲覧するには、ポイントをシンボルに移動してC-c C-c (help-follow-symbol)とタイプします。これは変数、関数、および/またはフェイスとしての、そのシンボルが意味する、すべてのドキュメントを表示します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.6 パッケージのキーワード検索

Emacsのたいていのオプション機能は、パッケージ(packages)にグループ化されています。Emacsには数百のビルトインパッケージが含まれており、ネットワークを通じて他のパッケージのインストールもできます(Emacs Lispパッケージを参照してください)。

あるトピックに関連するパッケージを探すのを簡単にするため、ほとんどのパッケージは、それが何をするかにもとづき、1つ以上のキーワード(keywords)に関連付けられています。C-h p (finder-by-keyword)とタイプすると、パッケージキーワードとキーワードの意味を説明するリストが表示されます。キーワードに属するパッケージのリストを表示するには、そのキーワードの行でRETをタイプします。これによりパッケージメニューバッファー(Package Menuバッファーを参照してください)で、パッケージの一覧が表示されます。

C-h P (describe-package)はパッケージ名(Emacs Lispパッケージを参照)の入力を求めて、パッケージの属性と、それが実装する機能をヘルプバッファーで表示します。このバッファーは、ボタン形式で関連するパッケージのキーワードを一覧します。ボタンmouse-1mouse-2をクリックすると、そのキーワードに関連する他のパッケージを見ることができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.7 国際化言語のサポートに関するヘルプ

特定の言語環境(language environment: 言語環境を参照してください)の情報を得るには、C-h Lとタイプします。これはヘルプバッファーを開いて、言語環境でサポートされる言語の説明と、関連する文字セット、コーディングシステム、インプットメソッド、およびその言語環境のサンプルテキストを表示します。

コマンドC-h h (view-hello-file)は、ファイルetc/HELLOを表示します。このファイルはさまざまな言語で“hello”をどのように言うのかを、いろいろな文字セットで表示するデモンストレーションです。

コマンドC-h I (describe-input-method)は、指定されたインプットメソッド、または現在使われているインプットメソッド(デフォルト)の説明します。インプットメソッドを参照してください。

コマンドC-h C (describe-coding-system)は、指定されたコーディングシステム、または現在使われているものを説明します。コーディングシステムを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.8 その他のヘルプコマンド

C-h i (info)はinfoプログラムを実行します。infoは構造化されたドキュメントファイルを閲覧するものです。C-h 4 i (info-other-window)は同じことを行いますが、別のウィンドウにInfoバッファーを表示します。Emacsマニュアル全体は、GNUシステムのための他のマニュアルとともにinfoで利用可能です。infoを開始した後にhをタイプすると、infoの使い方のチュートリアルが実行されます。

数引数nを指定すると、C-h iはinfoバッファー‘*info*<n>’を選択します。これは同時に複数のinfoマニュアルを閲覧するとき便利です。プレフィクス引数C-uだけを指定した場合、C-h iはドキュメントのファイル名を尋ねるので、infoメニューのトップレベルにエントリーがないファイルでも閲覧できます。

上記で説明しているヘルプコマンドC-h F function RETC-h K keyは、infoを実行して関数(function)またはキー(key)に関するドキュメントを直接開きます。

プログラムを編集しているとき、そのプログラム言語のinfo版のマニュアルを持っていれば、C-h S (info-lookup-symbol)を使ってシンボル(キーワード、関数、変数)のエントリーを、適切なマニュアルから探すことができます。コマンドがどのように動作するかの詳細は、メジャーモードに依存します。

何か予期しないことが起こって、何をタイプしたかわからなくなったときは、C-h l (view-lossage)を使います。C-h lは最近の300回分のキーストロークと、それらが呼び出したコマンドを表示します。馴染みのないコマンドを見つけたら、C-h kC-h fを使用して、それらのコマンドが何を行なうか調べることができます。

最近のエコーエリアのメッセージを調べるには、C-h e (view-echo-area-messages)を使います。これはそれらのメッセージを保持するバッファー、*Messages*を表示します。

Emacsの各メジャーモードでは、一般的にいくつかのキーが再定義されていて、編集動作も異なります。C-h m (describe-mode)は、現在のメジャーモードのドキュメントを表示します。これには通常このモードで変更されているコマンドや機能、およびそれらのキーバインドについても説明されています。

C-h b (describe-bindings)とC-h s (describe-syntax)は、現在のEmacs環境に関する、それ以外の情報を表示します。最初は現在のマイナーモードのローカルバインディング、次に現在のメジャーモードで定義されているローカルバインディング、最後にグローバルバインディングが表示されます。C-h sは各文字の構文の説明とともに、構文テーブルの内容を表示します(Syntax Tables in The Emacs Lisp Reference Manualを参照してください)。

プレフィクスキーの後にC-h?F1をタイプすることにより、特定のプレフィクスキーにたいする、サブコマンドのリストを得ることができます(この方法が機能しないプレフィクスキーもあります。たとえばESCです。ESC C-hは実際にはC-M-hと解釈され、これはdefunをマークするコマンドです。このような場合でもESC F1ESC ?はうまく機能します)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.9 ヘルプファイル

ビルトインのドキュメントとマニュアル以外にも、Emacsにはコピー条件(copying conditions)、リリースノート(release notes)、デバッグ説明書(instructions for debugging)、バグ報告(reporting bugs)などのトピックを説明する、いくつかのファイルが含まれています。これらのファイルは、以下のコマンドで閲覧することができます。C-h gをのぞき、これらはすべて、C-h C-charという形式になっています。

C-h C-c

Emacsをコピー、再頒布する場合の規則を表示します(describe-copying)。

C-h C-d

Emacsをデバッグするためのヘルプを表示します(view-emacs-debugging)。

C-h C-e

外部のパッケージをどこで入手するかについての情報を表示します(view-external-packages)。

C-h C-f

EmacsのFAQ(frequently-answered-questions: 頻繁に答えられる質問)のリストを表示します(view-emacs-FAQ)。

C-h g

GNUプロジェクトに関する情報がある、ページをvisitします(describe-gnu-project)。

C-h C-m

Emacsマニュアルの印刷されたコピーの注文に関する情報を表示します(view-order-manuals)。

C-h C-n

このバージョンの新しい機能の一覧が含まれるnewsファイルを表示します(view-emacs-news)。

C-h C-o

Emacsおよび他のGNUソフトウェアーの最新バージョンを、注文またはダウンロードする方法を表示します(describe-distribution)。

C-h C-p

Emacsの既知の問題(それにどう対処するかの提案がある場合もあります)を表示します(view-emacs-problems)。

C-h C-t

EmacsのTODOリストを表示します(view-emacs-todo)。

C-h C-w

GNU Emacsが完全に無保証なことにたいする、すべての詳細を表示します(describe-no-warranty)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.10 アクティブテキストのヘルプとツールチップ

Emacsでは拡大解釈されるアクティブテキスト(active text: マウスのクリックやRETに特別な反応をするテキスト)は、しばしばヘルプテキストに関連付けられています。これにはEmacsのバッファーのハイパーリンク、同様にモードラインの一部が含まれます。グラフィカルなディスプレー、同様にいくつかのテキスト端末は、マウストラッキングをサポートしており、アクティブテキストの上をマウスが通過することにより、ヘルプテキストをツールチップ(tooltip)で表示します。ツールチップを参照してください。

マウストラッキングをサポートしない端末では、バッファーのアクティブテキストにポイントを移動して、C-h . (display-local-help)をタイプすれば、ヘルプテキストを表示できます。これはヘルプテキストをエコーエリアに表示します。ポイントがある場所のヘルプテキストが利用可能な場合に、常に表示させるには、変数help-at-pt-display-when-idletをセットしてください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

11 マークとリージョン

Emacsのコマンドには、現在のバッファー内の、任意の連続する領域(region)を操作するものがたくさんあります。そのようなコマンドが操作するテキストを指定するには、領域の一方の端にマーク(mark)をセットし、もう一方の端にポイントを移動します。ポイントとマークの間のテキストを、リージョン(region)と呼びます。リージョンは常にポイントとマークの間で拡張され、それは一方がテキストの先頭にある場合も変わりません。ポイントを移動すれば、常にリージョンは変化します。

テキストのある位置にマークをセットすると、マークはアクティブ(active)になります。マークがアクティブのときは、リージョンもアクティブになります。Emacsはアクティブなリージョンの中にあるテキストを、フェイスregionでハイライト表示します(フェイスのカスタマイズを参照してください)。

これはテキスト、および行末よウィンドウボーダーの間のスペースのハイライトに同一フェイスを暗黙に使用する:extend t属性をもつ数少ないフェイスの1つです。テキストだけをハイライトするために、この属性にnilをセットすることもできます。

バッファーのテキストを変更するコマンドを含む、特定の非移動系コマンド(non-motion commands)の後で、Emacsは自動的にマークを非アクティブ(deactivates)にし、これによりハイライトも解除されます。C-gをタイプすれば、いつでも明示的に非アクティブにすることができます(中止と中断を参照してください)。

上記のデフォルト動作は、Transient Markモード(暫定マークモード)という名で知られています。Transient Markモードを無効にすると、Emacsは通常ではリージョンをハイライトしなくなります。Transient Markモードを無効にするを参照してください。

あるバッファーでマークをセットしても、他のバッファーのマークは影響を受けません。アクティブなマークがあるバッファーに戻ったとき、マークは以前と同じ場所にあります。複数のウィンドウで同じバッファーを表示しているとき、これらのウィンドウはそれぞれのポイント位置をもっているので、リージョンも異なります。しかしこれらのウィンドウでは、マークの位置は共通です。複数ウィンドウを参照してください。通常、選択されたウィンドウのリージョンだけがハイライトされます。しかし変数highlight-nonselected-windowsが非nilの場合、各ウィンドウのリージョンがハイライトされます。

rectangular region(矩形リージョン)という、違う種類のリージョンもあります。矩形領域(Rectangles)を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

11.1 マークのセット

マークをセットするためのコマンドがいくつかあります:

C-SPC

ポイント位置にマークをセットしてアクティブにします(set-mark-command)。

C-@

同じです。

C-x C-x

ポイント位置にマークをセットしてアクティブにしてから、以前のマークがあった位置にポイントを移動します(exchange-point-and-mark)。

Drag-mouse-1

ドラッグしたテキストの周りにポイントとマークをセットします。

mouse-3

ポイント位置にマークをセットしてから、クリックした場所にポイントを移動します(mouse-save-then-kill)。

シフトを押したカーソル移動キー

マークが非アクティブなら、ポイント位置にマークをセットしてポイントを移動します。シフト選択を参照してください。

マークをセットするもっとも一般的な方法は、C-SPC (set-mark-command)です5。これはポイントがある位置にマークをセットしてから、アクティブにします。その後、マークをそこに残したままポイントを移動できます。

たとえばバッファーの一部を大文字に変換したいとします。これを行うには対象のテキストの一方の端に移動して、C-SPCをタイプし、対象のテキストがハイライトされるまでポイントを移動します。そしてC-x C-u (upcase-region)をタイプすると、リージョンのテキストが大文字に変換されて、マークが非アクティブになります。

マークがアクティブなときに非アクティブにしたいときは、C-gをタイプします(中止と中断を参照してください)。リージョンにたいして操作を行うほとんどのコマンドは、上記の例のC-x C-uのように、自動的にマークを非アクティブにします。

リージョンにたいしての操作は行わず、バッファーの位置を覚えておくためにマークをセット(C-SPC C-SPCとタイプ)して、後でそこに戻る(C-u C-SPCとタイプ)こともできます。詳細については、マークリングを参照してください。

コマンドC-x C-x (exchange-point-and-mark)は、ポイントとマークの位置を交換します。ポイントの位置に問題はないが、リージョンのもう一方の端にポイントを移動したいときC-x C-xは便利です。2回目のC-x C-xで、マークを新しいポイント位置にマークをセットしてから、ポイントを元の位置に戻すことができます。このコマンドはマークが非アクティブのとき、最初にマークをアクティブにします。これはマークが最後にどこにセットされたかを明確にするために、リージョンをハイライトするためです。しかしプレフィクス引数とともに呼び出せば、マークは非アクティブのままでリージョンもハイライトされません。これを使えばC-u C-SPCと同様の方法で、マークの位置にジャンプできます。

マウスでマークをセットすることもできます。マウスの左ボタン(down-mouse-1)をクリックしてから、テキスト範囲をドラッグすると、最初にマウスボタンを押した位置にマークがセットされ、マウスボタンを話した位置にポイントが置かれます。かわりにマウスの右ボタン(mouse-3)をクリックすれば、ポイントのある位置にマークがセットされ、クリックした位置にポイントが移動します。これらのマウスコマンドに関する詳細な説明は、編集のためのマウスコマンドを参照してください。

最後にシフトキーを押しながらカーソルを移動するコマンド(S-RIGHTS-C-fS-C-nなど)でマークをセットできます。これはシフト選択(shift-selection)と呼ばれ、以前にシフト選択やマウスコマンドでセットされたアクティブなマークがないときに限り、ポイントを移動する前の位置にマークをセットします。マウスコマンドやシフト選択によるマークのセットは、通常のマークとは少し異なります。続けてシフトを押さないカーソル移動コマンドを実行するにより、マークは自動的に非アクティブになります。詳細は、シフト選択を参照してください。

C-y (yank)のようなテキストを挿入するコマンドの多くは、挿入されたテキストの先頭に、非アクティブなマークをセットします。これにより簡単にその位置に戻ることができます(マークリングを参照してください)。コマンドがこれを行っていることは、エコーエリアに‘Mark set’が表示されることで見分けることができます。

Xではアクティブなリージョンが変化するたびに、Emacsはリージョンのテキストをプライマリー選択(primary selection)に保存します。これによりmouse-2をクリックして、他のXアプリケーションへテキストを挿入することができるようになります。他のウィンドウアプリケーションにたいするカットアンドペーストを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

11.2 テキストオブジェクトをマークするコマンド

単語(word)、リスト(list)、パラグラフ(paragraph: 段落)、ページ(page)などのテキストオブジェクトの周辺に、ポイントを配置してマークするコマンドがあります:

M-@

次の単語の末尾にマークをセットします(mark-word)。ポイントは移動しません。

C-M-@

次の対応のとれた式の後にマークをセットします(mark-sexp)。ポイントは移動しません。

M-h

ポイントを現在のパラグラフの先頭に移動して、パラグラフの最後にマークをセットします(mark-paragraph)。

C-M-h

ポイントを現在のdefunの先頭に移動して、defunの最後にマークをセットします(mark-defun)。

C-x C-p

ポイントを現在のページの先頭に移動して、ページの最後にマークをセットします(mark-page)。

C-x h

ポイントを現在のバッファーの先頭に移動して、バッファーの最後にマークをセットします(mark-whole-buffer)。

M-@ (mark-word)は、次の単語の最後にマークをセットします(単語についての情報は、単語を参照してください)。繰り返し呼び出されると、マークを1度に1単語進めてリージョンを拡張します。例外として、マークがアクティブでポイントの前にある場合、M-@はマークを現在の位置から1単語後方に移動します。

このコマンドに数引数nを指定することにより、n単語進めてマークするよう指定できます。負の引数-nは、n単語後方にマークを移動します。

同様にC-M-@ (mark-sexp)は、対応のとれた式の最後にマークをセットします(対応が取れたカッコの式を参照してください)。繰り返し呼び出すことにより、後続の式にリージョンを拡張します。正または負の数引数を指定するとその数に応じて前方または後方にマークを移動します。

上記のリストの他のコマンドは、ポイントとマークの両方をセットするので、バッファー内のオブジェクトを区切るコマンドです。M-h (mark-paragraph)はパラグラフ(パラグラフを参照してください)、C-M-h (mark-defun)はトップレベルの関数定義(defunの移動を参照してください)、C-x C-p (mark-page)はページ(ページを参照してください)をマークします。繰り返して呼び出すと、同種の連続するオブジェクトへと、リージョンを拡張します。数引数も同様で、マークを移動したいオブジェクトの数を指定します。

C-x h (mark-whole-buffer)はポイントをバッファーの先頭、マークを最後にセットすることによりバッファー全体をリージョンとします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

11.3 リージョンを操作する

一度リージョンを設定すると、それを処理するいくつかの方法があります:

マークが非アクティブのときにはデフォルトの動作をするが、マークがアクティブのときはリージョンを処理するコマンドがいくつかあります。たとえばM-$ (ispell-word)は、通常はポイントのある単語のスペルをチェックしますが、マークがアクティブのときはリージョンの中のテキストをチェックします(スペルのチェックと訂正を参照してください)。通常そのようなコマンドはリージョンが空のとき(たとえばマークとポイントが同じ位置のとき)は、デフォルトの動作をします。空のリージョンにたいして処理を行いたいときは、変数use-empty-active-regiontに変更してください。

テキストの消去で説明したように、DEL (backward-delete-char)とDelete (delete-forward-char)もこの方法で動作します。マークがアクティブのときはリージョンのテキストを削除します(例外として数引数nに1以外が指定されたとき、これらのコマンドはマークがアクティブか関係なく、n文字を削除します)。変数delete-active-regionnilに変更すると、これらのコマンドはマークがアクティブのとき異なる動作をしなくなります。これをkillに変更するとリージョンを削除するかわりに、killするようになります(テキストのkillと移動を参照してください)。

その他のコマンドにはデフォルトの動作はなく、常にリージョンを処理します。通常このようなコマンドには、C-w (kill-region)やC-x C-u (upcase-region)のように、名前にregionがついています。マークが非アクティブのときは非アクティブなリージョン、すなわちポイントと最後にマークをセットした位置の間にあるテキストにたいして処理を行います(マークリングを参照してください)。この動作を無効にするには、変数mark-even-if-inactivenilに変更してください。そうするとこれらのコマンドはマークが非アクティブのときエラーをシグナルします。

デフォルトでは、マークがアクティブでもテキストの挿入は普通に行われます。たとえばaをタイプすると、‘a’が挿入されてからマークが非アクティブになります。マイナーモードのDelete Selectionモードは、この振る舞いを変更します。Delete Selectionモードが有効な場合、マークがアクティブなときは、最初にリージョンのテキストを削除してから、テキストが挿入されます。Delete Selectionモードをオフにするには、M-x delete-selection-modeとタイプしてください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

11.4 マークリング

各バッファーは、マークリング(mark ring)の中に、以前のマークの位置を記録しています。マークをセットするコマンドは、古いマークをこのリングにpushします。マークリングの1つの使い方として、後で戻りたい場所を記録させる使い方があります。

C-SPC C-SPC

マークをアクティブにせずにマークをセットしてから、マークリングにpushします。

C-u C-SPC

マークがあった場所にポイントを移動し、マークリングから1つ前のマークを復元します。

コマンドC-SPC C-SPCは、後で戻ってきたい位置をマークするときに便利です。これは現在の位置をマークを(Emacsがリージョンをハイライト表示してしまう)アクティブにすることなく、マークリングにpushします。実際にこれはC-SPC (set-mark-command)を連続して2回呼び出しています。最初のC-SPCはマークをセットし、2回目のC-SPCはそれを非アクティブにしています(Transient Markモードがオフの場合、C-SPC C-SPCは一時的にTransient Markモードを有効にします。Transient Markモードを無効にするを参照してください)。

マークした位置に戻るには、C-u C-SPCのようにプレフィクス引数を指定して、set-mark-commandを使います。これはマークがあった場所にポイントを移動して、もしマークがアクティブのときは非アクティブにします。C-u C-SPCを連続して呼び出すと、マークリングに保存された前の位置へジャンプしていきます。この方法で移動した位置の情報は失われません。それらはリングの最後に移動します。

set-mark-command-repeat-popを非nilにセットすると、C-u C-SPCの後に続けて、C-u C-SPCではなく、C-SPCでマークリングを巡回できます。デフォルトではset-mark-command-repeat-popnilです。

各バッファーは自身のマークリングを持ちます。すべての編集コマンドは現在のバッファーのマークリングを使います。特にC-u C-SPCは常に同じバッファーに留まります。

変数mark-ring-maxは、マークリングに保持する最大のエントリー数を指定します。デフォルトは16エントリーです。もしエントリー数が最大の場合、他のエントリーをpushするとリストの一番古いものが捨てられます。C-u C-SPCを繰り返すと、リングの現在位置を巡回します。

もし何度も同じ場所に戻りたいときは、マークリングでは不十分でしょう。そのような場合は後で使うために、その位置をレジスターに記録できます(レジスターに位置を保存するを参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

11.5 グローバルマークリング

各バッファーに属する普通のマークリングに加えて、Emacsにはグローバルマークリング(global mark ring)が1つあります。以前マークをセットしてからバッファーを切り替えた場合、マークをセットすると、マークはカレントバッファーのマークリングに加えて、グローバルマークリングにも記録されます。その結果、グローバルマークリングには訪れていたバッファーの系列が記録され、各バッファーではマークを設定した箇所が記録されます。グローバルマークリングの長さは、global-mark-ring-maxで制御され、デフォルトは16です。

コマンドC-x C-SPC (pop-global-mark)は、グローバルリングの最新のバッファー位置にジャンプします。これもリングを巡回するので、連続してC-x C-SPCを使うことにより、古いバッファーのマーク位置に移動します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

11.6 シフト選択

シフトキーを押しながらカーソル移動コマンドをタイプすると、ポイントを移動する前の位置にマークをセットするので、リージョンが元のポイント位置から新しいポイント位置に拡張されます。この機能はシフト選択(shift-selection)と呼ばれます。これは他のエディターでテキストを選択する方法と似ています。

シフト選択によるマークのセットは、これまでの説明とは少し異なる振る舞いをします。最初に、マークを非アクティブにする通常の方法(バッファーのテキストを変更したりC-gをタイプするなど)に加え、シフトキーを押さない(unshifted)カーソル移動コマンドでも、マークが非アクティブになります。次に、連続するシフトキーを押した(shifted)カーソル移動コマンドでは、マークの更新はされません。つまりシフトキーを押しながらカーソル移動コマンドを繰り返すと、リージョンは継続的に変更されます。

シフト選択は、シフトキーを押したカーソル移動キーが、別のコマンドにバインドされていない場合のみ動作します(カスタマイズを参照してください)。たとえばS-C-fを他のコマンドにバインドしていると、S-C-fはシフト選択バージョンのC-f (forward-char)ではなく、バインドされたコマンドを実行します。

マウスコマンドによるマークのセットも、シフト選択によるマークのセットと同様です(マークのセットを参照してください)。たとえばマウスをドラッグしてリージョンを指定すると、シフトキーを押したカーソル移動コマンドを使って、そのリージョンの拡張を続けることができます。どちらのケースも、シフトキーを押さないカーソル移動コマンドで、マークが非アクティブになります。

シフト選択をオフにするには、shift-select-modenilにセットしてください。これをセットしても、マウスコマンドによるマークのセッティングは無効になりません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

11.7 Transient Markモードを無効にする

マークとリージョンのデフォルト動作では、マークをアクティブにセットすると、リージョンがハイライトされます。これはTransient Markモードと呼ばれます。これはデフォルトで有効になっているマイナーモードです。M-x transient-mark-mode、または‘Options’メニューの‘Highlight Active Region’で切り替えることができます。オフにすることによりEmacsの操作モードは変更されます。

Transient Markモードがオフのときは、C-SPC C-SPCまたはC-u C-x C-xを使って一時的にアクティブにすることができます。

C-SPC C-SPC

ポイント位置にマークをセット(普通のC-SPCと同様)して、マークが非アクティブになるまでの間、1度だけTransient Markモードを有効にします(実際にはこれは独立したコマンドではなくC-SPCコマンドを2回行っています)。

C-u C-x C-x

ポイントとマークを交換してからマークをアクティブにして、次にマークが非アクティブになるまでの間、Transient Markモードを一時的に有効にします(これはプレフィクス引数を指定したC-x C-x (exchange-point-and-mark)コマンドです)。

これらのコマンドはマークをセットまたはアクティブにして、マークが非アクティブになるまでの間Transient Markモードを有効にします。これらを使う1つの理由は、いくつかのコマンドはTransient Markモードがオフのとき、リージョンにたいしてではなくバッファー全体を処理するからです。Transient Markモードを一時的に有効にできれば、これらのコマンドをリージョンにたいして処理させることができます。

リージョンをマウス(マークのセットを参照してください)、またはシフト選択(シフト選択を参照してください)で指定したときも、一時的にTransient Markモードが有効になり、リージョンがハイライトされます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12 テキストのkillと移動

Emacsでkillとはテキストを消去して、killリングにコピーすることを意味します。yankとは、killリングからテキストを取り出して、バッファーに戻すことを意味します(“cut(カット、切り取り)”と“paste(ペースト、貼り付け)”という用語を使うアプリケーションもあります)。これはテキストブロックのセットが、循環的にアクセスできるリングに格納されているイメージから、killリングと名付けられました。killリングを参照してください。

killとyankは、Emacsでテキストを移動したりコピーするための、もっとも一般的な方法です。これは用途が広いコマンドです。なぜなら、多くの異なる種類の構文単位をkillするためのコマンドが存在するからです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.1 削除とkill

バッファーからテキストを消去するコマンドの多くは、それをkillリング(killリングを参照)に保存します。これらはkillコマンドとして知られており、通常名前に‘kill’が含まれます(例 kill-line)。killリングには、最近killしたものが、1つだけではなくいくつか格納されているので、killはとても安全な操作と言えます。なぜなら、以前にkillしたテキストが失われる心配をする必要がないからです。killリングは、すべてのバッファーで共有されているので、あるバッファーでkillしたテキストを、別のバッファーにyankすることができます。

C-/ (undo)を使うと、killコマンドはアンドゥ(Undo(取り消し)を参照してください)されるので、killしたテキストはバッファーに戻されますが、killリングからは削除されません。

グラフィカルなディスプレーでは、テキストをkillすると、それはシステムのクリップボードにもコピーされます。 グラフィカルなディスプレーでのカットアンドペーストを参照してください。

テキストを消去してkillリングに保存しないコマンドは、削除(delete)コマンドとして知られており、名前に‘delete’が含まれています。これらはC-d (delete-char)やDEL (delete-backward-char)のように、一度に1文字削除するものや、スペースや改行だけを削除するものが含まれます。重要なデータの有意な量を消去するコマンドには、一般的にkill操作が用いられます。

killとyankでマウスを使うこともできます。グラフィカルなディスプレーでのカットアンドペーストを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.1.1 削除

削除とは、テキストを消去してkillリングに保存しないという意味です。テキストを削除するたいていのEmacsコマンドは、1文字または空白文字しか消去しません。

DEL
BACKSPACE

前の文字を削除します。リージョンがアクティブのときは、リージョンのテキストを削除します(delete-backward-char)。

Delete

次の文字を削除します。リージョンがアクティブのときは、リージョンのテキストを削除します(delete-forward-char)。

C-d

次の文字を削除します(delete-char)。

M-\

ポイントの周囲のスペースとタブを削除します(delete-horizontal-space)。

M-SPC

スペースを1つ残して、ポイントの周囲のスペースとタブを削除します(just-one-space)。

C-x C-o

現在行の周囲の空行を削除します(delete-blank-lines)。

M-^

行間にある改行をインデントと共に削除して2行を1行にします(delete-indentation)。

基本的な削除コマンドDEL (delete-backward-char)、delete (delete-forward-char)、C-d (delete-char)については既に説明しました。テキストの消去を参照してください。数引数を指定すると、指定した数の文字を削除します。リージョンがアクティブのとき、数引数に1を指定するか省略した場合、DELdeleteは、リージョンのすべてのテキストを削除します。

他の削除コマンドは、空白文字(スペース、タブ、改行)だけを削除するものです。M-\ (delete-horizontal-space)は、ポイントの前後にあるすべてのスペースとタブを削除します。プレフィクス引数を指定すると、ポイントの前にあるスペースとタブだけを削除します。M-SPC (just-one-space)も同様ですが、前にスペースが何個あるかに関係なく、ポイントの前に1つのスペースを残します。数引数nを指定すると、nが正のときはポイントの前に、n個のスペースを残します。nが負の場合は、スペースとタブに加えて改行も削除し、ポイントの前に-n個のスペースを残します。コマンドcycle-spacingは、just-one-spaceのようなコマンドで、よりフレキシブルな動作をします。これは連続で呼び出すと異なる処理を行います。1番目の呼び出しではjust-one-spaceと同様の処理をし、2番目の呼び出しではすべての空白文字を削除し、3番目の呼び出しでは元の空白文字を復元します。

C-x C-o (delete-blank-lines)は、現在行の下にあるすべての空行を削除します。現在行が空行のときは、現在行の上にあるすべての空行も削除します(空行を1つ、つまり現在行は残します)。単独の空行で実行するとその行を削除します。

M-^ (delete-indentation)は、改行と周囲のスペース(通常1つのスペースを残す)を削除することにより、現在行とその上の行を結合します。M-^を参照してください。

コマンドdelete-duplicate-linesは、リージョン内の重複した行を検索して、それぞれ1行を残して削除します。通常は重複した行の最初の行を残しますが、プレフィクス引数C-uを指定すると、最後の行を残します。プレフィクス引数C-u C-uを指定すると、隣接した重複行だけを検索します。これは行がソート済みのとき効果的です。プレフィクス引数C-u C-u C-uを指定すると、連続する空行は残します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.1.2 行のkill

C-k

行の残り、または1行以上をkillします(kill-line)。

C-S-backspace

1度に行全体を削除します(kill-whole-line)。

もっとも簡単なkillコマンドは、C-k (kill-line)です。これを行末で使うと、その行を終端している改行をkillして、現在行と次の行を継げます(空行なら削除します)。そうでない場合、C-kはポイントから行末までを削除します。ポイントの元の位置が行頭の場合は、空行が残ります。

どちらのケースを適用するか決める際には、行末のスペースとタブは無視されます。ポイントが行の一番最後の非空白文字の後にあるとき、C-kは改行をkillすることに注意してください。空でない行全体をkillするときは、行頭でC-kを2回タイプしてください。

このコンテキストで“行”とは、スクリーン行ではなく論理行を意味します(継続行を参照してください)。

C-kに正の数値nを与えると、n行とそれに続く改行をkillします(現在行のポイントの前にあるテキストはkillされません)。負の引数-nを与えると、現在行のポイントの前にあるテキストと、前のn行をkillします。C-kに0を指定すると、現在行のポイントの前にあるテキストをkillします。

変数kill-whole-lineが非nilのときは、行頭でのC-kにより行末の改行も含めて行全体がkillされます。この変数は通常nilです。

C-S-backspace (kill-whole-line)は行中のポイントの位置に関わらず、改行を含めた行全体をkillします。キーシーケンスC-S-backspaceをタイプできないテキスト端末がたくさんあることに注意してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.1.3 その他のkillコマンド

C-w

リージョンをkillします(kill-region)。

M-w

リージョンをkillリングにコピーします(kill-ring-save)。

M-d

次の単語をkillします(kill-word)。単語を参照してください。

M-DEL

後方に1単語killします(backward-kill-word)。

C-x DEL

センテンスの先頭までを後方にkillします(backward-kill-sentence)。センテンスを参照してください。

M-k

文の末尾までをkillします(kill-sentence)。

C-M-k

後に続く対応のとれた式(balanced expressions)をkillします(kill-sexp)。対応が取れたカッコの式を参照してください。

M-z char

次のcharまでをkillします(zap-to-char)。

M-x zap-up-to-char char

次のcharまで( charを含まず)をkillします。

一般によく使われるkillコマンドはC-w (kill-region)で、これはリージョンのテキストをkillします(マークとリージョンを参照してください)。同様にM-w (kill-ring-save)は、バッファーからテキストを消去せずに、リージョンのテキストをkillリングにコピーします。C-wまたはM-wをタイプしたとき、マークが非アクティブの場合、これらのコマンドはポイントと最後にセットしたマークの間にあるテキストにたいして処理を行います(リージョンを操作するを参照してください)。

Emacsは特定の構文単位にたいするkillコマンドを提供します。単語(words)にたいしてはM-DELM-d(単語を参照してください)、対応のとれた式(balanced expressions)にたいしてはC-M-k(対応が取れたカッコの式を参照してください)、センテンス(sentences: 文)にたいしてはC-x DELM-k(センテンスを参照してください)です。

コマンドM-z (zap-to-char)はkillと検索の組み合わせです。これは文字を読み取り、ポイントからバッファー内の次にその文字が現れる場所までをkillします。数引数は繰り返し回数です。負の引数の場合は後方に検索することを意味し、ポイントの前のテキストをkillします。以前に使用した文字のヒストリーが保守されていてM-pM-nのキーストロークでアクセスできます。これは主に複雑な入力手段で入力する必要が文字の場合に有用です。 類似コマンドのzap-up-to-charはポイントから次の文字までkillしますがその文字は含みません。数引数は繰り返し回数として機能します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.1.4 killのオプション

いくつかの特別なバッファーは、読み取り専用(read-only)のテキストを含んでいて、それらは変更できないのでkillもできません。killコマンドは読み取り専用のバッファーにたいして特別な動作をします。バッファーから実際にテキストを削除せずに、killリングにコピーします。通常はビープ音をならし、その旨のエラーメッセージを表示します。しかし変数kill-read-only-okを非nilにセットすると、なぜテキストが消去されないのかをエコーエリアにメッセージ表示します。

変数kill-do-not-save-duplicatesを非nilに変更すると、同じものにたいするkillは重複なくkillリングの1つのエントリーとなります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.2 yank

yankするとは、以前killしたテキストを再び挿入するという意味です。テキストを移動またはコピーする通常の方法は、それをkillしてからどこかにyankする方法です。

C-y

最後にkillしたものをポイント位置にyankします(yank)。

M-y

yankしたテキストを、それより前にkillしたテキストに置き換えます(yank-pop)。過去にkillしたテキストをyankするを参照してください。

C-M-w

次のコマンドがkillコマンドのときは、killしたものを、以前にkillしたものに追加します(append-next-kill)。killしたテキストの追加を参照してください。

基本的なyankコマンドは、C-y (yank)です。これはもっとも最近killされたものを挿入し、カーソルを挿入されたテキストの最後に移動します。また挿入されたテキストの先頭にマークをセットして、それを非アクティブにします。これによりC-u C-SPCで簡単にその位置にジャンプできます(マークリングを参照してください)。

C-u C-yのようにプレフィクス引数を指定すると、カーソルを挿入されたテキストの前に移動して、マークをテキストの最後にセットします。他のプレフィクス引数は、何回前のkillかを指定します。たとえばC-u 4 C-yは、もっとも最近killされたものから4番目に古いものを挿入します。

グラフィカルなディスプレーでは、C-yはまず最後にEmacsがkillした後に、他のアプリケーションがシステムのクリップボードに、何らかのテキストをコピーしていないか調べます。もしコピーしていたなら、かわりにクリップボードのテキストを挿入します。このようにEmacsは効果的に“カット(cut)”や“コピー(copy)”などの、他のアプリケーションで処理されたクリップボード操作を、Emacsのkillのように扱います(ただしkillリングには記録されません)。詳細については、グラフィカルなディスプレーでのカットアンドペーストを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.2.1 killリング

killリング(kill ring)とは、以前にkillされたテキストブロックからなるリストです。すべてのバッファーにたいして、killリングは1つしかないので、あるバッファーでkillしたテキストを、他のバッファーにyankすることができます。これはバッファーから他のバッファーへテキストを移動する、通常の方法です(他の方法もいくつかあります。たとえばテキストをレジスターに格納することもできます。レジスターを参照してください。テキストを移動する他の方法については、テキストの追加を参照してください)。

killリングのエントリーの最大数は、変数kill-ring-maxで制御されます。デフォルトは60です。エントリー数が制限に達しているとき新たにkillすると、Emacsはkillリングの一番古いエントリーを削除して空きを作ります。

killリングの実際の内容は、kill-ringという名前の変数に格納されています。killリングのエントリーの内容は、C-h v kill-ringで見ることができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.2.2 過去にkillしたテキストをyankする

yankで説明したように、C-yに数引数を指定して、最後にkillされたものではないテキストをyankできます。これはkillリングのどのエントリーが欲しいか覚えているとき便利です。もし覚えていないときは、M-y (yank-pop)コマンドを使って、候補を探すことができます。

もし前のコマンドがyankコマンドのとき、M-yはyankされたテキストを、1つ前にkillされたテキストで置き換えます。つまり2番目に新しいkillされたテキストを復元するには、最初にC-yで最後にkillされたテキストをyankし、次にM-yでその1回前にkillされたテキストで置き換えます。M-yC-yまたは他のM-yの後しか許されていません。

killリングのエントリーを指す(ポイントする)、last yankポインターという概念で、M-yを理解できるでしょう。なにかをkillする度に、last yankポインターはリングの先頭に新たに作られたエントリーを指すように移動します。C-yは、last yankポインターが指すエントリーをyankします。M-yはlast yankポインターが違うエントリーを指すように移動して、バッファーのテキストをポインターが指すテキストに変更します。M-yコマンドを繰り返すことにより、リングの任意のエントリーにポインターを移動できるので、任意のエントリーをバッファーに取り込むことができます。やがてリングの最後に到達すると、次のM-yにより再び最初のエントリーに戻ります。

M-yはリング内でlast yankポインターを移動させますが、リング内のエントリーの順番は変更しません。リングのエントリーは、常に最後にkillされたものを先頭に、記憶されているもので一番古いエントリーへと並んでいます。

last-yankポインターを何回進めるかを、M-yに数引数で指定できます。負の引数はリングの先頭に向かってポインターを移動させます。リングの先頭では一番古いエントリーに戻り、そこから先頭へと移動します。

望むテキストを見つけてバッファーに取り込んだら、M-yコマンドを止めればそのテキストはそこに残ります。このテキストはkillリングのエントリーの単なるコピーなので、それを編集してもリングの中のエントリーは変更されません。新しく何かをkillしない限り、last-yankポインターは同じ位置に留まるので、C-yでそのテキストの別のコピーをyankできます。

C-yに数引数を指定するときも、yankするエントリーにlast-yankポインターをセットします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.2.3 killしたテキストの追加

通常はkillコマンドを実行するごとに、新しいエントリーがkillリングにpushされます。しかし2回以上の連続するkillコマンドにより、killされたテキストを1つのエントリーとしてまとめ、すべてのテキストを1単位として、あたかもそれがkillされたかのように、1回のC-yでyankできます。

つまりテキストを1つの単位としてyankしたいとき、そのテキストすべてを1回でkillする必要はありません。すべてがkillされるまで行から行、単語から単語へとkillを続け、それを一度に取得することができます。

ポイントから前方にkillするコマンドは、直前にkillされたテキストの最後に追加します。ポイントから後方にkillするコマンドは、テキストの先頭に追加します。この方法により前方と後方を併用した連続するkillコマンドは、すべてのkillされたテキストを再配置しなくてもよいように、1つのエントリーにまとめます。数引数を指定してもkillの連続性は途切れません。たとえば以下のようなテキストを含むバッファーがあるとしましょう:

This is a line ∗of sample text.

ポイントの位置は∗で示された場所です。M-d M-DEL M-d M-DELとタイプして、前方と後方へのkillを交互に行うと、最後にkillリングには‘a line of sample’という1つのエントリー、バッファーには‘This is  text.が残ります(‘is’と‘text’の間には2つのスペースがあることに注意してください。これはM-SPCまたはM-qで取り除くことができます)。

同じテキストをkillする別の方法は、M-b M-bで単語2つ後方に移動してから、C-u M-dで前方の単語4つをkillする方法です。これはバッファーとkillリングに、正確に同じ結果をもたらします。M-f M-f C-u M-DELで後方にkillしても結果は同じです。killリングのエントリーは、常にバッファーからkillされる前と同じ順番になります。

killコマンドと最後のキルコマンドの間に、(単なる数引数ではない)他のコマンドが入ると、killリングには新たなエントリーが作られます。しかし、あらかじめC-M-w (append-next-kill)とタイプすることにより、最後にkillされたテキストに追加するように強制できます。C-M-wは、後に続くコマンドがkillコマンドであれば、killしたテキストを前にkillしたテキストに付け加えるよう指示します。この方法でも、前方にkillするコマンドの場合は、前にkillされたテキストの最後に追加され、後方にkillするコマンドの場合は、先頭に追加されます。この方法により、1ヶ所にyankするために離れた場所にあるいくつかのテキスト断片を、killして集めることができます。

M-w (kill-ring-save)の後のkillコマンドは、M-wでkillリングにコピーされたテキストへの追加はしません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.3 グラフィカルなディスプレーでのカットアンドペースト

ほとんどのグラフィカルなデスクトップ環境では、異なるアプリケーション間のデータ転送(通常はテキスト)に、クリップボード(clipboard)と呼ばれるシステム機能を使います。Xでは他にプライマリー選択(primary selection)とセカンダリー選択(secondary selection)という、同様の機能が利用可能です。Emacsをグラフィカルなディスプレーで実行している場合、killとyankコマンドはこれらの機能に統合されているので、Emacsと他のグラフィカルアプリケーション間で、簡単にテキストを転送できます。

デフォルトでは、Emacsはプログラム間テキスト転送のコーディングシステムとして、UTF-8を使います。もしコピーしたテキストが期待したものでない場合、C-x RET xまたはC-x RET Xとタイプして、他のコーディングシステムを指定できます。x-select-request-typeをカスタマイズして、異なるデータタイプを要求することもできます。プロセス間通信にたいするコーディングシステムを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.3.1 クリップボードを使う

クリップボード(clipboard)とは、ほとんどのグラフィカルなアプリケーションが、“カットアンドペースト”のために使う機能です。もしクリップボードが存在する場合、Emacsのkillおよびyankコマンドもそれを使います。

何らかのテキストを、C-w (kill-region)のようなコマンドでkillしたり、M-w (kill-ring-save)のようなコマンドでkillリングにコピーしたとき、そのテキストはクリップボードにも転送されます。

Emacsのkillコマンドがテキストをクリップボードに転送すると、通常クリップボードの既存の内容は失われます。オプションとして、save-interprogram-paste-before-killtに変更できます。これにより、Emacsは古いクリップボードのデータが失われることを防ぐために、最初にクリップボードのデータをkillリングに保存します。これにはデータが大きくなると、メモリー消費が増えるというリスクがあります。

C-y (yank)のようなyankコマンドもクリップボードを使います。他のアプリケーションがクリップボードを“所有”する場合(たとえばEmacsで最後にkillコマンドを実行した後に、他のアプリケーションでテキストをカットまたはコピーした場合)、Emacsはkillリングではなくクリップボードからyankします。

通常killリングをM-y (yank-pop)で巡回することでは、クリップボードは変更されません。しかしyank-pop-change-selectiontに変更すると、M-yは新しいyankをクリップボードに保存します。

killおよびyankコマンドがクリップボードにアクセスしないようにするには、変数select-enable-clipboardnilに変更してください。

多くのXデスクトップ環境は、クリップボードマネージャー(clipboard manager)と呼ばれる機能をサポートします。もしEmacsがクリップボードのデータの現在の“持ち主”のときにEmacsを終了し、そのときクリップボードマネージャーが実行されていると、Emacsはクリップボードのデータをクリップボードマネージャーに転送するのでデータは失われません。ある状況において、これはEmacsが終了するが遅くなる原因となります。Emacsがクリップボードマネージャーにデータを転送しないようにするには、変数x-select-enable-clipboard-managernilに変更してください。

通常、クリップボードを通じて渡されるNULバイトを含む文字列は切り詰められるため、Emacsはシステムのクリップボードに転送する前に、そのような文字を“\\0”に置き換えます。

Emacs 24以前は、killおよびyankコマンドは、クリップボードではなくプライマリー選択(他のウィンドウアプリケーションにたいするカットアンドペーストを参照してください)を使っていました。もしこのほうがよいなら、select-enable-clipboardnilselect-enable-primarytmouse-drag-copy-regiontに変更してください。この場合は、次のコマンドを使って、クリップボードに明示的にアクセスできます。リージョンをkillしてクリップボードに保存するにはclipboard-kill-region、リージョンをkillリングにコピーするとともにクリップボードに保存するにはclipboard-kill-ring-save、クリップボードの内容をポイント位置にyankするにはclipboard-yankです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.3.2 他のウィンドウアプリケーションにたいするカットアンドペースト

Xウィンドウシステム下では、プライマリー選択(primary selection)に、Xアプリケーションで最後に選択されたテキスト(通常はマウスのドラッグで選択される)が存在します。一般的に、このテキストは他のXアプリケーションにmouse-2をクリックして挿入することができます。プライマリー選択はクリップボードとは別のものです。プライマリー選択の内容は、より脆弱です。なぜなら、クリップボードは明示的なカットまたはコピーだけにより上書きされるのにくらべ、プライマリー選択はマウスでテキストが選択される度に上書きされるからです。

Xの下では、リージョンがアクティブ(マークとリージョンを参照してください)になればいつでも、リージョンのテキストはプライマリー選択に保存されます。これは、そのリージョンの選択がマウスでドラッグやクリック(編集のためのマウスコマンドを参照してください)されたのか、キーボードコマンド(たとえばC-SPCをタイプしてからポイントを移動したなど。マークのセットを参照してください)なのかによらず適用されます。

変数select-active-regionsonlyに変更すると、Emacsは一時的にアクティブになったリージョン(たとえばマウスやシフト選択など。シフト選択を参照してください)だけをプライマリー選択に保存します。select-active-regionsnilに変更すると、Emacsはアクティブなリージョンをプライマリー選択に保存しません。

プライマリー選択をEmacsのバッファーに挿入するには、挿入したい場所でmouse-2 (mouse-yank-primary)をクリックします。編集のためのマウスコマンドを参照してください。

MS-Windowsはプライマリー選択を提供しませんが、Emacsは単一のEmacsセッション内で選択されたテキストを内部に格納することにより、これをエミュレートします。したがってWindowsでも、プライマリー選択に関するすべての機能とコマンドは、Xと同様に機能します。しかしこれは同一セッションにおけるカットやペーストなどの場合で、Emacsセッションと他のアプリケーション間では機能しません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.3.3 セカンダリー選択

プライマリー選択に加えて、Xウィンドウシステムはセカンダリー選択(secondary selection)として知られる、同様な第2の機能を提供します。最近ではセカンダリー選択を使うXアプリケーションの数は多くありませんが、以下のEmacsコマンドによりアクセスできます:

M-Drag-mouse-1

ボタンを押した場所からボタンを話した場所までを、セカンダリー選択としてセットします(mouse-set-secondary)。ドラッグして選択されたテキストは、フェイスsecondary-selectionを使ってハイライトされます。ウィンドウの上端または下端を越えてマウスをドラッグすると、mouse-set-regionと同様にウィンドウは自動的にスクロールします(編集のためのマウスコマンドを参照してください)。

このコマンドはkillリングを変更しません。

M-mouse-1

セカンダリー選択(secondary selection)の終端をセットします(mouse-start-secondary)。もう一方のをセットして選択を完了するには、M-mouse-3を使用します。このコマンドは、新たなセカンダリー選択開始時に、既存のセカンダリー選択をキャンセルします。

M-mouse-3

以前にM-mouse-1で指定された位置から、M-mouse-3でクリックされた点を終点とするセカンダリー選択をセットします(mouse-secondary-save-then-kill)。これは選択されたテキストをkillリングにも保存します。同じ場所での2回目のM-mouse-3は、作成されたセカンダリー選択で選択されたテキストをkillします。

M-mouse-2

クリックした場所にセカンダリー選択を挿入し、ポイントをyankしたテキストの最後に配します(mouse-yank-secondary)。

Mouse-1と同様、M-mouse-1のダブルクリックで単語、トリプルクリックで行を処理します。

mouse-yank-at-pointが非nilの場合、M-mouse-2はポイント位置にyankします。どこをクリックしたか、さらにはフレームのどのウィンドウをクリックしたかは関係ありません。編集のためのマウスコマンドを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.4 テキストの追加

テキストのコピーや移動は、それをkillしてyankすることにより通常行います。しかし多くの箇所にあるテキストブロックをコピーしたり、たくさんのテキストの断片を1ヶ所にコピーする便利な方法があります。ここではテキストの断片を、バッファーやファイルに追加するコマンドを説明します。

M-x append-to-buffer

リージョンを指定したバッファーの内容の後に追加(append)します。

M-x prepend-to-buffer

リージョンを指定したバッファーの内容の前に追加(prepend)します。

M-x copy-to-buffer

リージョンを指定したバッファーにコピーして、バッファーの古い内容は削除されます。

M-x insert-buffer

指定したバッファーの内容を、現在のバッファーのポイント位置に挿入します。

M-x append-to-file

リージョンを指定したファイルの内容の最後に追加します。

テキストをバッファーに追加するには、M-x append-to-bufferを使います。これはバッファー名を読み取り、リージョンのコピーを指定したバッファーに挿入します。存在しないバッファーを指定すると、append-to-bufferはそのバッファーを作成します。テキストは、そのバッファーのポイント位置に挿入されます。バッファーを編集用に使っていると、コピーされたテキストはその時ポイントがあった位置に挿入されます。

バッファーのポイントは、コピーされたテキストの最後に残ります。連続してappend-to-bufferを使うと、テキストは指定したバッファーにコピーした順番で追加されていきます。厳密に言うとappend-to-bufferは既存のバッファーのテキストにたいして、常に追加をする訳ではありません。これはポイントがバッファーの最後にあるときに追加をします。しかしバッファーを変更するのにappend-to-bufferしか使わない場合、ポイントは常にバッファーの最後に位置することになります。

M-x prepend-to-bufferappend-to-bufferと同様ですが、他のバッファーのポイントはコピーされたテキストの前に置かれるので、連続してこのコマンドを使用すると、テキストは逆の順番に追加されます。M-x copy-to-bufferも同様ですが、他のバッファーの既存の内容は削除されるので、バッファーの内容は新しくコピーされたテキストだけになります。

コマンドM-x insert-bufferは、追加するテキストを他のバッファーから取得するために使われます。これはバッファー名の入力を求め、そのバッファーのすべてのテキストのコピーを、現在のバッファーのポイント位置に挿入します。ポイントは挿入されたテキストの先頭になります。挿入されたテキストの最後の位置もマークリングに追加されます。マークは非アクティブになります。バッファーに関する背景情報は、複数バッファーの使用を参照してください。

バッファーのテキストを追加するかわりに、M-x append-to-fileでテキストを直接ファイルに追加できます。これはファイル名の入力を求め、リージョンのテキストを指定されたファイルの最後に追加します。ディスク上のファイルはすぐに変更されます。

append-to-fileは、Emacsがvisitしていないファイルだけに使うべきです。Emacsで編集中のファイルにたいして使用すると、それはEmacsの背後でファイルが変更されることになるため、編集内容が失われる可能性があります。

テキストの移動に関する他の方法はレジスターに格納する方法です。レジスターを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.5 矩形領域(Rectangles)

矩形領域(rectangle)コマンドは、テキストの矩形領域を操作します。矩形領域のテキストとは、特定の行範囲内にある、特定の2つの列の間にある文字すべての文字です。Emacsには矩形領域にたいしてkill、yank、クリアー、スペースやテキストでフィル、削除を行うコマンドがあります。矩形領域コマンドは、複数列のテキストを操作したり、テキストをそのように変更したり戻したりする場合に便利です。

コマンドで操作する矩形領域を指定するには、一方の角にマークを設定し、その対角にポイントを置きます。このように設定した矩形領域を矩形リージョン(region-rectangle)と呼びます。ポイントとマークが同じ列の場合、矩形リージョンは空になります。ポイントとマークが同じ行の場合、矩形リージョンの高さは1行になります。

矩形リージョンは、リージョンの制御と大体同じ方法で制御できます。しかし、ポイントとマークの組がリージョンとして解釈されるのか、あるいは矩形領域として解釈されるかは、それらを使うコマンドに依存することに注意してください。

矩形リージョンはマウスを使用してマークすることもできます。矩形の一方の隅をC-M-mouse-1でクリックして向かい側の隅までドラッグしてください。

C-x r k

矩形リージョンをkillして、最後にkillされた矩形領域として、その内容を保存します(kill-rectangle)。

C-x r M-w

矩形リージョンのテキストを、最後にkillされた矩形領域として保存します(copy-rectangle-as-kill)。

C-x r d

矩形リージョンのテキストを削除します(delete-rectangle)。

C-x r y

最後にkillされた矩形領域の左上隅がポイント位置になるようにyankします(yank-rectangle)。

C-x r o

矩形領域にスペースを挿入します(open-rectangle)。これにより矩形リージョンの以前の内容は右にずれます。

C-x r N

矩形リージョンの左端に行番号を挿入します(rectangle-number-lines)。これにより矩形リージョンの以前の内容は右にずれます。

C-x r c

矩形リージョンの内容をスペースに置き換えてクリアーします(clear-rectangle)。

M-x delete-whitespace-rectangle

指定された矩形領域の各行で、矩形領域の左端の列から空白文字を削除します。

C-x r t string RET

矩形領域の各行にたいして、内容をstringに置き換えます(string-rectangle)。

M-x string-insert-rectangle RET string RET

矩形領域の各行にたいして、stringを挿入します。

C-x SPC

Rectangle Markモードを切り替えます(rectangle-mark-mode)。このモードがアクティブのとき矩形領域はハイライトされ、拡大・縮小が可能になります。標準のkillおよびyankコマンドは、それにたいして操作を行います。

矩形領域の操作は2種類に分類できます。それは矩形領域を消去または挿入するものと、空の矩形領域を作るものです。

矩形領域のテキストを消去するには2つの方法があります。C-x r d (delete-rectangle)はテキストを無条件に削除します。C-x r k (kill-rectangle)はテキストを取り除いて、それを最後にkillされた矩形領域として保存します。両方とも矩形領域の各行の指定したテキストを消去するように、矩形リージョンを消去します。その行の後に続くテキストがある場合、削除による隙間を生めるために後方に移動されます。

矩形領域のkillは普通のkillとは異なります。矩形領域はkillリングには保存されず、一番最後にkillされた矩形領域だけを記録する、特別な場所に保存されます。矩形領域のyankは線形テキストのyankとは大きく異なるので、異なるyankコマンドが使われるからです。矩形領域にたいしてyankのpopは定義されていません。

C-x r M-w (copy-rectangle-as-kill)は矩形領域用のM-wに相当します。これはバッファーからテキストを削除することなく、最後にkillされた矩形領域として、矩形領域を記録します。

killされた矩形領域をyankするには、C-x r y (yank-rectangle)とタイプします。矩形領域の最初の行はポイント位置に挿入されます。矩形領域の2行目はポイントの1行下の位置に挿入され、以下同様に挿入されていきます。影響を受ける行数は、保存された矩形領域の高さにより決定されます。

たとえば1列のリスト2つを2列のリストに変換できます。一方の1列リストを矩形領域としてkillしてもう一方の1列リストの隣にyankすればよいのです。

C-x r r rC-x r i rで、矩形領域をレジスターにコピーしたり取り出したりできます。レジスターに矩形領域を保存するを参照してください。

空の矩形領域を作るために使うことのできるコマンドが2つあります。C-x r c (clear-rectangle)は、矩形リージョンの既存のテキストを空白に置き換えます。C-x r o (open-rectangle)は空白の矩形領域を挿入します。

M-x delete-whitespace-rectangleは、指定した列を起点に水平方向の空白文字を削除します。これは矩形領域の各行に適用され、開始列は矩形領域の左端です。矩形領域の右端はこのコマンドに影響を及ぼしません。

コマンドC-x r N (rectangle-number-lines)は、矩形領域の左端に行番号を挿入します。通常は矩形領域の最初の行を1として番号が開始されます。プレフィクス引数を指定すると、このコマンドは開始番号と、番号を出力する際の書式文字列(Formatting Strings in The Emacs Lisp Reference Manualを参照してください)の入力を求めます。

コマンドC-x r t (string-rectangle)は、矩形リージョンの各行を文字列で置き換えます。文字列の幅は矩形領域と同じ幅である必要はありません。矩形領域の後ろのテキストは、文字列の幅が少ないときは左に、文字列の幅が大きいときは右にシフトされます。

コマンドM-x string-insert-rectangleは、string-rectangleと同様ですが、各行に文字列を挿入し、元の文字列は右にシフトされます。

コマンドC-x SPC (rectangle-mark-mode)は、矩形リージョンをハイライトするか、標準のリージョンをハイライトするかを切り替えます(最初にリージョンをアクティブにする必要があります)。このモードが有効な場合、C-fC-nなどのコマンドは矩形領域に合ったやり方でリージョンのサイズを変更し、kill、yankは矩形領域を処理します。テキストのkillと移動を参照してください。このモードはリージョンがアクティブな間だけ持続します。

標準のリージョンとは異なり、バッファー終端を越えたり、TABのような伸長された空白スペースの中間のような、通常はポイントを置けない場所にも矩形リージョンのコーナーを置くことができます。

そのリージョンがrectangle-mark-modeにある場合、C-x C-xは、矩形リージョンの4隅のコーナーを巡回する、コマンドrectangle-exchange-point-and-markを実行します。これはマークされたテキストにたいする処理を呼び出す前に、矩形リージョンをのサイズを変更したい場合に便利です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

12.6 CUAバインド

コマンドM-x cua-modeは、多くのアプリケーションで使われている、CUA(Common User Access)互換のキーバンドをセットアップします。

CUAモードが有効な場合、C-xC-cC-vC-zなどのキーは、カット(kill)、コピー、ペースト(yank)、アンドウのコマンドを呼び出します。C-xC-cによるカットとコピーは、リージョンがアクティブなときだけ処理されます。リージョンが非アクティブのときはプレフィクスキーとして動作するので、C-x C-cのような標準のEmacsコマンドは正常に機能します。変数mark-even-if-inactiveC-xC-cに影響を及ぼさないことに注意してください(リージョンを操作するを参照してください)。

マークがアクティブのときにC-x C-fのようなEmacsコマンドを入力するには、Shiftを押しながらプレフィクスキーを押す(例 S-C-x C-f)か、プレフィクスキーを素早く2回タイプ(例 C-x C-x C-f)します。

CUAモードがEmacs標準のキーバインドをオーバーライドするのを無効にしつつ、以下で説明するそれ以外のCUAモードの機能は使う場合は、変数cua-enable-cua-keysnilをセットしてください。

CUA モードはデフォルトでDelete-Selectionモード(編集のためのマウスコマンドを参照してください)を有効にするので、アクティブなリージョンがあるときテキストをタイプすると、そのテキストで置き換えられます。CUAモードでこれを無効にするには、変数cua-delete-selectionnilにセットしてください。

CUAモードは矩形領域を明白にハイライトする、強化された矩形領域サポートを提供します。C-RETを使うことにより矩形領域の選択が開始され、移動コマンドを使って拡張したり、C-xC-cで切り取りとコピーができます。RETにより、矩形領域の四隅に時計方向へカーソルを移動させるので、任意の方向に簡単に領域を拡張できます。タイプされた通常のテキストは、矩形領域の各行の左か右(カーソルのある側)に挿入されます。

この矩形領域サポートは、cua-rectangle-mark-modeコマンドを呼び出すことにより、CUAモードを有効にせずに使うこともできます。標準コマンドrectangle-mark-modeもあります。矩形領域(Rectangles)を参照してください。

CUAモードでは、テキストや矩形領域を簡単にレジスターに保存したり、取り出すことができます。これは1桁の数引数をkill、copy、yankコマンドに指定します。たとえばC-1 C-cはリージョンをレジスター1にコピーし、C-2 C-vはレジスター2の内容をyankします。

CUAモードは、バッファー間での簡単にテキストを移動したりコピーするためのグローバルマーク機能も提供します。C-S-SPCを使って、グローバルマークのオンとオフが切り替えられます。グローバルマークがオンのときは、killまたはコピーされたすべてのテキストは自動的にグローバルマークの位置に挿入され、タイプしたテキストも現在のカーソル位置ではなくグローバルマークに挿入されます。

たとえば複数のバッファーから単語をコピーして単語リストを作るには、単語リストを作るバッファーにグローバルマークをセットします。次にリストにしたい単語をマーク(S-M-fなど)してから、C-cM-wでリストにコピーします。そしてRETでリストにコピーされた単語の後ろに改行を挿入すればよいのです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

13 レジスター

Emacsのレジスター(registers)は、テキストや矩形領域、位置、その他、後で使うものを保存するための区画です。一度テキストや矩形領域をレジスターに保存すれば、それをバッファーに何度もコピーできます。一度場所をレジスターに保存すれば、何度でもその場所にジャンプして戻ることができます。

各レジスターは1文字からなる名前があり、ここではrと表記することにします。rには、英字(‘a’など)または数字(‘1’など)を使用できます。大文字小文字は区別されるので、レジスター‘a’とレジスター‘A’は同じではありません。たとえば‘*’や‘C-d’のような、非英数字にレジスターをセットすることもできます。‘C-g’と‘ESC’は対話的なコマンドを終了させるために予約済みなので、これらのキーにレジスターをセットすることはできないことに注意してください。

レジスターには位置、テキスト、矩形領域、数字、ウィンドウの設定、ファイル名が保存できますが、一度に保存できるのは1つです。レジスターに何か保存すると、他の何かをそのレジスターに保存するまで残ります。レジスターrに何が含まれているのか見るには。M-x view-registerを使います:

M-x view-register RET r

レジスターrに何が含まれるかの説明を表示します。

レジスター名の入力を求めるコマンドはすべて、既存のレジスターを一覧するプレビュー(preview)ウィンドウを遅延表示します。遅延の長さはregister-preview-delayでカスタマイズできます。遅延を無効にするには、nilをセットしてください。この場合、C-hF1で、明示的にプレビューウィンドウを要求できます。

ブックマーク(Bookmarks)はファイルと位置を記録するので、ファイルを再び見るときは記録された位置から閲覧できます。ブックマークも本質的にレジスター同じなので、このチャプターに記載します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

13.1 レジスターに位置を保存する

C-x r SPC r

現在のバッファーのポイント位置をレジスターrに記録します(point-to-register)。

C-x r j r

レジスターrに記録されたバッファーの位置にジャンプします(jump-to-register)。

C-x r SPC (point-to-register)と、それに続けて文字rをタイプすると、ポイント位置と現在のバッファーの両方をレジスターrも保存します。レジスターは他の何かが保存されるまでこの情報を保持します。

コマンドC-x r j rrに記録されたバッファーに切り替えて、マークをpushするとともに記録された位置にポイントを移動します(すでにポイントが記録された位置にあるとき、またはこのコマンドの連続呼び出し時にはマークはpushされない)。レジスターの内容は変わらないので、保存した位置に何度でもジャンプできます。

C-x r jを使って保存した位置に移動するとき、保存されたバッファがkillされていた場合、C-x r jは同じファイルをvisitしてバッファーを生成しようと試みます。もちろんこれはファイルをvisitしたバッファーだけの動作です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

13.2 レジスターにテキストを保存する

同じテキストのコピーを何回も挿入したいとき、killリングからyankするのは不便です。なぜなら何かkillするたびに、そのエントリーはリングの下の方へ移動してしまうからです。代替として、テキストをレジスターに保存して、後で取り出す方法があります。

C-x r s r

リージョンをレジスターrにコピーします(copy-to-register)。

C-x r i r

レジスターrからテキストを挿入します(insert-register)。

M-x append-to-register RET r

リージョンをレジスターrのテキストに追加します。

レジスターrの内容がテキストの場合、そのレジスターに追加するのにC-x r + (increment-register)も使用できます。レジスターrに数値が含まれている場合、コマンドC-x r +は違う動作をすることに注意してください。レジスターに数字を保存するを参照してください。

M-x prepend-to-register RET r

リージョンをレジスターrの先頭に追加します。

C-x r s rは、リージョンのテキストのコピーを、rという名前のレジスターに保存します。マークが非アクティブのとき、Emacsはまず最後にセットされたマークをアクティブにします。マークはこのコマンドの最後に非アクティブになります。マークとリージョンを参照してください。同じコマンドにプレフィクス引数を指定したC-u C-x r s rは、テキストのコピーをレジスターrに保存してから、バッファーのテキストを削除します。これはリージョンのテキストを、レジスターに移動したと考えることができます。

M-x append-to-register RET rは、リージョンのテキストのコピーを、rという名前のレジスターにすでに保存されているテキストに追加します。プレフィクス引数を指定した場合、レジスターに追加した後にリージョンを削除します。コマンドprepend-to-registerも同様ですが、これはリージョンのテキストをレジスターのテキストの最後ではなく先頭に追加します。

append-to-registerprepend-to-registerを使ってテキストを集める場合、セパレーターを使って個々に集めたテキストを分割したい場合があります。そのようなときはregister-separatorを構成して、セパレーター文字列をそのレジスターに保存します。たとえばテキストを収集する過程で、個々のテキストを2つの改行で分けたい場合、以下の設定を使うことができます。

(setq register-separator ?+)
(set-register register-separator "\n\n")

C-x r i rは、レジスターrのテキストをバッファーに挿入します。通常はポイントをテキストの後に置き、非アクティブのマークをテキストの前にセットします。プレフィクス引数を指定したときは、ポイントをテキストの前、マークをテキストの後にセットします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

13.3 レジスターに矩形領域を保存する

レジスターには線形のテキストだけでなく、矩形領域も保存できます。バッファーで矩形領域を指定する方法は、矩形領域(Rectangles)を参照してください。

C-x r r r

矩形リージョンをレジスターrにコピーします(copy-rectangle-to-register)。プレフィクス引数を指定するとコピー後に矩形リージョンを削除します。

C-x r i r

レジスターrに矩形リージョンが保存されている場合、それを挿入します(insert-register)。

前にレジスターにテキストを保存するでも説明したC-x r i r (insert-register)コマンドは、レジスターに矩形領域が保存されているときはテキストではなく矩形領域を挿入します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

13.4 レジスターにウィンドウ設定を保存する

選択されたフレームのウィンドウの設定や、すべてのフレームのすべてのウィンドウの設定もレジスターに保存して、後で設定を復元することができます。ウィンドウの設定については、複数ウィンドウを参照してください。

C-x r w r

選択されたフレームのウィンドウの設定を、レジスターrに保存します(window-configuration-to-register)。

C-x r f r

すべてのフレームおよびフレームに含まれるすべてのウィンドウの状態を、レジスターrに保存します(frameset-to-register)。

C-x r j rを使うと、ウィンドウまたはフレームの設定を復元できます。これはカーソル位置を復元するコマンドと同じです。フレームの設定を復元するとき、設定に含まれていないフレームは非表示になります。もしこれらのフレームを削除したいときは、かわりにC-u C-x r j rを使います。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

13.5 レジスターに数字を保存する

数字をレジスターに保存して、その数字(10進)をバッファーに挿入したり、増加させるコマンドがあります。これらのコマンドはキーボードマクロで使うと便利です(キーボードマクロを参照してください)。

C-u number C-x r n r

numberをレジスターrに保存します(number-to-register)。

C-u number C-x r + r

rに数字が保存しているときは、レジスターの数字をnumberだけ増加させます。コマンドC-x r + (increment-register)は、rにテキストが保存されているときは異なる動作をすることに注意してください。レジスターにテキストを保存するを参照してください。

C-x r i r

レジスターrの数字をバッファーに挿入します。

C-x r iは、他のレジスターの内容をバッファーに挿入するコマンドと同じです。C-x r +に数字の引数を与えない場合、レジスターの値は1増加します。C-x r nに数字の引数を与えない場合、レジスターには0が保存されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

13.6 レジスターにファイル名を保存する

特定の名前のファイルを頻繁にvisitする場合、その名前をレジスターにセットしておけば、より便利にファイルをvisitすることができます。以下はnameというファイルをレジスターrにセットするLispコードです:

(set-register r '(file . name))

たとえば、

(set-register ?z '(file . "/gd/gnu/emacs/19.0/src/ChangeLog"))

はレジスター‘z’にファイル名をセットします。

レジスターrに名前がセットされているファイルをvisitするには、C-x r j rとタイプします。これはある位置にジャンプしたり、フレームの設定を復元するのと同じコマンドです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

13.7 キーボードマクロのレジスター

あるキーボードマクロ(キーボードマクロを参照してください)を頻繁に実行する必要がある場合、それをレジスターにセットしたり保存することができればより便利でしょう(キーボードマクロの命名と保存を参照してください)。C-x C-k x r (kmacro-to-register)は、最後のキーボードマクロをレジスターrに保存します。

レジスターrのキーボードマクロを実行するには、C-x r j rとタイプします(これはある位置にジャンプしたりフレームを復元するのと同じコマンドです)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

13.8 ブックマーク

ブックマーク(Bookmarks)とは、ジャンプしたい位置を記録するレジスターのようなものです。レジスターとの違いは、長い名前をもつことができ、次のEmacsセッションに自動的に引き継がれることです。ブックマークの典型的な使い方は、さまざまなファイルのどこを読んでいたかを記録することです。

C-x r m RET

visitしているファイルのポイント位置に、ブックマークをセットします。

C-x r m bookmark RET

ポイント位置に、bookmarkという名前のブックマークをセットします(bookmark-set)。

C-x r M bookmark RET

C-x r mと同様ですが、既存のブックマークを上書きしません。

C-x r b bookmark RET

bookmarkという名前のブックマークにジャンプします(bookmark-jump)。

C-x r l

すべてのブックマークを一覧します(list-bookmarks)。

M-x bookmark-save

現在のすべてのブックマークの値を、デフォルトのブックマークファイルに保存します。

visitしているファイル内のカレント位置を記録するには、コマンドC-x r mを使用します。これは、ブックマーク名のデフォルトとしてファイル名を使います。ブックマークが指すファイルをもとにブックマークの名前を付ければ、C-x r bで任意のファイルを再びvisitして、同時にブックマーク位置に移動するという操作を楽に行えます。

コマンドC-x r M (bookmark-set-no-overwrite)はC-x r mと同じように機能しますが、指定されたブックマークがすでに存在する場合は、上書きするかわりにエラーをシグナルします。

すべてのブックマークのリストを別のバッファーに表示するには、C-x r l (list-bookmarks)とタイプします。そのバッファーに切り替えて、ブックマークの定義の編集やブックマークに注釈をつけることができます。ブックマークバッファーでC-h mとタイプすれば、特別な編集コマンドに関する情報を見ることができます。

Emacsを終了するとき、もしブックマークの値を変更していたら、Emacsはブックマークを保存します。M-x bookmark-saveコマンドで、いつでもブックマークを保存できます。ブックマークは~/.emacs.d/bookmarksというファイルに保存されます(古いバージョンのEmacsとの互換性を保つため、もし~/.emacs.bmkというファイルがあればそのファイルに保存します)。ブックマークコマンドは、デフォルトのブックマークファイルを自動的にロードします。この保存とロードにより、ブックマークの内容を次のEmacsセッションに引き継ぐことができるのです。

bookmark-save-flagに1をセットすると、ブックマークをセットするコマンドはブックマークの保存も行ないます。こうすることにより、Emacsがクラッシュしてもブックマークを失わずにすみます。この変数の値が数字の場合、それはブックマークを何回変更したら保存するという意味です。この変数にnilをセットすると、Emacsは明示的にM-x bookmark-saveを使ったときだけブックマークを保存します。

変数bookmark-default-fileには、ブックマークを保存するデフォルトのファイルを指定します。

変数bookmark-use-annotationstにセットすれば、ブックマークへの問い合わせは注釈について行われるようにセットされます。ブックマークに注釈があれば、ブックマークへのジャンプ時には別ウィンドウに注釈が自動的に表示されます。

ブックマークの位置は、周囲のコンテキストとともに保存されるので、ファイルが少し変更されていても、bookmark-jumpは正確な位置を見つけることができます。変数bookmark-search-sizeは、ブックマーク位置のコンテキストの前後何文字を記録するかを指定します。

以下はブックマークを処理する追加のコマンドです:

M-x bookmark-load RET filename RET

ブックマークのリストを含む、filenameという名前のファイルをロードします。このコマンドはbookmark-writeと同様に、デフォルトのブックマークファイルに加えて、他のファイルのブックマークを使うことができます。

M-x bookmark-write RET filename RET

現在のすべてのブックマークをファイルfilenameに保存します。

M-x bookmark-delete RET bookmark RET

bookmarkという名前のブックマークを削除します。

M-x bookmark-insert-location RET bookmark RET

ブックマークbookmarkが指すファイル名をバッファーに挿入します。

M-x bookmark-insert RET bookmark RET

ブックマークbookmarkが指すファイルの内容をバッファーに挿入します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14 ディスプレーの制御

ウィンドウに入りきらない大きなバッファーでは、Emacsはその一部しか表示できません。このチャプターでは、見たい部分のテキストを指定するコマンドや変数と、どのようにしてテキストが表示されるかを説明します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.1 スクロール

ウィンドウがバッファーのすべてのテキストを表示するには小さい場合、その一部だけが表示されます。スクロールコマンドは、バッファーで表示される部分を変更します。

前方(forward)または上(up)へのスクロールは、ウィンドウに表示される部分を先に進めます。これはウィンドウに表示されるバッファーのテキストを、上に移動させるのと同じです。後方(backward)または下(down)へのスクロールは、ウィンドウに表示される部分を前に戻します。これはウィンドウに表示されるバッファーのテキストを下に移動させます。

Emacsでのupとdownは、ウィンドウでテキストが移動する方向に基づいており、テキストにたいしてウィンドウが移動する方向ではありません。この用語は現在のscrolling upやscrolling downが広まる前に、Emacsで採用されました。そのためPageDownは、Emacs的には上(up)にスクロールするという、奇妙な結果となりました。

ウィンドウに表示されているバッファー部分には、常にポイントが含まれています。もしウィンドウの下端か上端を越えてポイントを移動させると、ポイントを画面に表示させるために自動的にスクロールが発生します(自動スクロールを参照してください)。以下のコマンドで明示的にスクロールができます:

C-v
PageDown
next

ウィンドウのほぼ全画面分、前方にスクロールします(scroll-up-command)。

M-v
PageUp
prior

後方にスクロールします(scroll-down-command)。

C-v (scroll-up-command)は、ウィンドウ全体の高さに近い量、前方にスクロールします。これにより下端の2行が上端になるようスクロールして、それに続く表示されていなかった行を表示します。ポイントが上端より上になってしまう場合、ウィンドウの新たな上端の行に移動します。The PageDown(またはnext)は、C-vと同じです。

M-v (scroll-down-command)は、同様の方法で後方にスクロールします。PageUp(またはprior)は、M-vと同じです。

スクロールコマンドでオーバーラップして表示される行数は、変数next-screen-context-linesで制御され、デフォルトは2です。数引数nを与えたときは、n行スクロールします。Emacsはポイントを変更しないよう試みるので、テキストとポイントは一緒に上または下に動きます。C-vに負の引数を与えると、M-vのように反対方向へスクロールします。

デフォルトでは、ウィンドウがバッファーの先頭または最後に到達していて、これ以上スクロールできない場合、これらのコマンドは(beep音をならしたり画面をフラッシュして)エラーをシグナルします。変数scroll-error-top-bottomtに変更すると、コマンドは可能な限り、つまりバッファーの先頭の文字または最後の文字にポイントを移動します。ポイントがすでにそこにあるときは、エラーをシグナルします。

スクロールしたとき、ポイントが同じスクリーン位置に留まることを好むユーザーもいます。そうすれば同じスクリーンにスクロールして戻ったとき、ポイントが元の位置にあると便利だからです。この動作は変数scroll-preserve-screen-positionを通じて利用可能です。変数の値がtのとき、スクロールコマンドによりポイントがウィンドウの外にでるような場合、Emacsはポイントを先頭行または最終行に移動させるのではなく、同じスクリーン位置にポイントを調整して、カーソルを維持します。その他の非nil値の場合、Emacsはスクロールコマンドによりポイントがウィンドウに残っている場合にも、この方法でポイントを調整します。この変数はこのセクションで説明するすべてのスクロールコマンド、同様にマウスホイールによるスクロール(編集のためのマウスコマンドを参照してください)に影響を与えます。一般的にいうと、この変数はscroll-commandプロパティが非nilのコマンドに影響を及ぼします。Property Lists in The Emacs Lisp Reference Manualを参照してください。

ときどき、特にC-vM-vのようなキーを押したままにすると、キーボードのオートリピートがアクティブになり、要求された高レートのスクロール要求にEmacsが対応できなくなるときがあります。そのような場合、表示は更新されず、かなり長時間の間、Emacsが応答しなくなる可能性があります。変数fast-but-imprecise-scrollingを非nil値にセットすることにより、この状況に対処できます。これはスクロールコマンドにフォント表示化(Font Lockモードを参照してください)を行なわないように指示します。スクロールされるテキストは、それらがデフォルトフェイスをもつと仮定されなくなり、フォント表示化されなくなります。これにより、そのフェイスがすべて同じサイズのフォントを使用していない場合には、(たとえばオートリピートではない)1回のスクロールでも、Emacsが誤ったバッファー位置にスクロールするかもしれません。

fast-but-imprecise-scrollingをセットするかわりにJIT Lockによる遅延されたフォント表示化の有効化のほうが好ましいと思うかもしれません(Font Lockモードを参照)。これを行うにはjit-lock-defer-timeに0.25、タイプ速度が速い場合には0.1のように小さい正の数値をセットします。これによりC-v押下時のぎくしゃくしたスクロールが幾分改善されますが、バッファーの新たな部分へスクロールするようなアクション後のウィンドウのコンテンツは一時的に非フォント化されるでしょう。

コマンドM-x scroll-upおよびM-x scroll-downは、scroll-up-commandおよびscroll-down-commandと同様に動作しますが、scroll-error-top-bottomを考慮しません。これらのコマンドは、Emacs 24以前ではスクロールアップおよびスクロールダウンのためのデフォルトでした。コマンドM-x scroll-up-lineおよびM-x scroll-down-lineは、現在のウィンドウを1行スクロールさせます。もしこれらのコマンドを使う場合は、それにキーバインドを割り当てたくなるでしょう(initファイル内でのキーのリバインドを参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.2 センタリング

C-l

選択されているウィンドウで、現在行が中央になるようスクロールします。連続して呼び出すと、次は現在行が上端になり、その次は現在行が下端に、という順番で循環します。画面の再描画が行われる可能性があります(recenter-top-bottom)。

M-x recenter

選択されているウィンドウで、現在行が中央になるようにスクロールします。画面の再描画が行われる可能性があります。

C-M-l

有用な情報が表示されるよう、発見的な手法でスクロールします(reposition-window)。

C-l (recenter-top-bottom)コマンドは、選択されたウィンドウにたいしてセンタリング(recenters)をします。これにより現在のスクリーン行がウィンドウの中央、または中央に一番近い行になります。

(C-l C-l)のようにC-lを2回タイプすると、ポイントのある行が上端になるようにスクロールします。C-lを3回タイプするとポイントのある行が下端になるようにスクロールします。連続してC-lをタイプすることにより、上記の3つの位置を循環してスクロールできます。

リスト変数recenter-positionsをカスタマイズすることにより、循環する順序を変更できます。リスト要素にはシンボルtopmiddlebottomまたは数値を指定します。数値に整数を指定すると、現在行が指定したスクリーン行になるようスクロールします。数値に0.0から1.0の浮動小数点数は、ウィンドウの上端から現在行までを割合で指定します。デフォルトは(middle top bottom)で、これは上述した循環順序です。さらに変数scroll-marginを、0以外の値nに変更すると、C-lは常にウィンドウの上端または下端からスクリーン行で、n行を残してスクロールします(自動スクロールを参照してください)。

C-lにプレフィクス引数を指定することもできます。C-u C-lのようにプレフィクス引数だけを指定すると、単にポイントを示す行を中央にします。正の引数nは、ポイントを示す行がウィンドウの上端からn行目になるようにスクロールします。0を指定すると、ポイントのある行がウィンドウ上端になるようにスクロールします。負の引数-nは、ポイントのある行がウィンドウの下端からn行目になるようにスクロールします。引数を与えたときは、C-lは画面をクリアーせず、異なるスクリーン位置への循環も行いません。

変数recenter-redisplayが非nil値の場合、C-lはスクリーンのクリアーと再描画を行います。特別な値tty(デフォルト)は、これをテキスト端末上のフレームだけに限定します。再描画はスクリーンが何らかの理由により文字化けしてしまったときなどに便利です(スクリーン上のゴミを参照してください)。

より原始的なコマンドM-x recenterは、recenter-top-bottomと同じように振る舞いますが、スクリーン位置を循環しません。

C-M-l (reposition-window)は、有用な情報がスクリーンに表示されるように、現在のウィンドウを発見的な手法によりスクロールします。たとえばLispファイルの場合、このコマンドは可能な限り現在のdefun全体がスクリーン上に表示されるよう試みます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.3 自動スクロール

ポイントが表示されているテキスト部分から外に移動すると、Emacsは自動スクロール(automatic scrolling)の処理を行います。通常自動スクロールは、ウィンドウの垂直方向の中央にポイントをセンタリングしますが、この振る舞いを変えるいくつかの方法があります。

scroll-conservativelyに小さい数字nをセットすると、ポイントが少し(n行以下)スクリーンの外に出たら、Emacsはポイントがスクリーンに表示されるのに充分なだけスクロールします。これでもしポイントの表示に失敗した場合、Emacsはそのウィンドウの中央にポイント行が表示されるのに充分なだけのスクロールをします。scroll-conservativelyに大きな数字(100より大)も数字をセットすると、どれだけポイントを移動させようと、自動スクロールはポイント行を中央にセンタリングしなくなります。Emacsはポイントが表示されるように常にテキストをスクロールします。ウィンドウの上端または下端かはスクロールの方向に依存します。デフォルトではscroll-conservativelyは 0で、これは常にポイント行がウィンドウの中央にセンタリングされることを意味します。

自動スクロールを制御する他の方法は、変数scroll-stepをカスタマイズすることです。この変数の値はポイントがスクリーンから外れたとき、何行を自動スクロールさせるかを決定します。その行数スクロールしてもポイントが表示されない場合、かわりにポイント行が中央にきます。デフォルト値は0で、スクロール後は常にポイント行が中央にきます。

自動コントロールを制御する3番目の方法は、変数scroll-up-aggressivelyscroll-down-aggressivelyをカスタマイズすることで、これは直接スクロール後のポイントの垂直位置を指定します。scroll-up-aggressivelyの値には、nil(デフォルト)、または0から1までの浮動小数点数fを指定します。ポイントがウィンドウの下端を越えたとき(たとえば前方にスクロールしたとき)、Emacsはウィンドウの高さとウィンドウの下端からポイント行までの割合が、fになるようスクロールします。つまりfを大きくするとより積極的(aggressive)、つまり新しいテキストがより多く表示されることを意味します。デフォルト値nilは0.5と同じです。

同様にscroll-down-aggressivelyは、ポイントがウィンドウの上端を越えたとき(たとえば後方にスクロールしたとき)の振る舞いを設定します。値にはスクロール後のウィンドウの上端からポイント行までのマージンを指定します。つまりscroll-up-aggressivelyを大きくすると、より積極的になります。

変数scroll-conservativelyscroll-step、およびscroll-up-aggressivelyscroll-down-aggressivelyは、互いに矛盾する方法で自動スクロールを制御します。したがって自動スクロールをカスタマイズする場合は、2つ以上の手法を選ぶべきではありません。もし2つ以上の変数をカスタマイズする場合は、scroll-conservatively、次にscroll-step、そして最後にscroll-up-aggressivelyscroll-down-aggressivelyという優先順でカスタマイズしてください。

変数scroll-marginは(たとえscroll-up-aggressivelyやscroll-down-aggressivelyに、上端または下端からのマージンがウィンドウにたいして占める割合より大きくなるようなfを指定していても)、ポイントがウィンドウの上端または下端にどれだけ近づけるかを制限します。変数の値にはスクリーン行の行数です。もしポイントがウィンドウの上端または下端から指定した行数の位置にくると、Emacsは自動的にスクロールします。デフォルトではscroll-marginは0です。デフォルトではそのウィンドウの高さの1/4に制限されていますが、maximum-scroll-marginをカスタマイズすることにより1/2まで増加(または0まで減少)させることができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.4 水平スクロール

水平スクロール(Horizontal scrolling)は、ウィンドウの行を右方向に移動させます。そのため左端の近くのテキストは表示されなくなります。ウィンドウのテキストが水平スクロールされると、テキスト行は折り返されるのではなく、切り詰め(truncated)られます。ウィンドウが切り詰められた行を表示しているとき、ポイントがスクリーンの左端か右端を越えて移動すると、Emacsは自動的に水平スクロールを行います。デフォルトではそのウィンドウ内のすべての行は一緒に水平スクロールされますが、変数auto-hscroll-modeに特別な値current-lineをセットした場合は、カーソルを表示する行だけがスクロールされます。自動的な水平スクロールを完全に無効にするには、変数auto-hscroll-modenilをセットしてください。また自動的な水平スクロールがオフになっている場合、ポイントがスクリーンの端を越えると、それを知らせるためにカーソルが表示されなくなることに注意してください(テキスト端末の場合カーソルは端に残されます)。

変数hscroll-marginは、自動的なスクロールが起こる前に、ポイントがウィンドウの左端または右端に、どれだけ近づけるかを制御します。変数の値は列数で指定します。たとえば変数の値が5のときは、端から5列目にポイントが移動すると、水平スクロールが発生します。

変数hscroll-stepはmポイントが端に近づきすぎたときに、何列スクロールするかを決定します。デフォルト値の0は、ポイントがウィンドウの中央になるようにスクロールされることを意味します。正の整数はスクロールされる列数を指定します。浮動小数点数(0から1の値であること)は、スクロールされる量を、ウィンドウの幅にたいする割合で指定します。

以下のコマンドで明示的に水平スクロールすることもできます:

C-x <

現在のウィンドウのテキストを左にスクロールします(scroll-left)。

C-x >

右にスクロールします(scroll-right)。

C-x < (scroll-left)は選択された、ウィンドウをウィンドウ幅から2列少ない列数、左にスクロール(いいかえればウィンドウのテキストは左に移動)します。数引数nを指定すると、n列スクロールします。

テキストが左にスクロールされて、ポイントがウィンドウの左端を越えると、ポイントが表示されているテキストに戻るまで、カーソルはフリーズします。これはauto-hscroll-modeの設定とは独立しています(これはテキストを左にスクロールするときのウィンドウの右端での振る舞いだけに影響します)。

C-x > (scroll-right)は、同様に右にスクロールします。ウィンドウが通常の表示(行の先頭がウィンドウの左端に表示されている状態)のときは、それ以上スクロールできないので何も起こりません。これはC-x >の引数を正確に計算する必要がないことを意味します。充分に大きな引数を与えれば、通常の表示が復元されます。

これらのコマンドでウィンドウを水平方向にスクロールすると、自動水平スクロールの下限値がセットされます。自動スクロールはウィンドウのスクロールを続けますが、前にscroll-leftにセットされた値を越えて右にスクロールできなくなります。auto-hscroll-modecurrent-lineにセットされているときは、カーソルを表示する行以外の行は、最小限度だけスクロールされるでしょう。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.5 ナローイング

ナローイング(Narrowing)とはバッファーのある範囲にフォーカスを置き、他の部分を一時的にアクセス不能にすることを意味します。扱うことのできる範囲のことを、アクセス可能範囲(accessible portion)と呼びます。ナローイングを取り消すと、バッファー全体に再びアクセスできるようになります。これをワイドニング(widening)と呼びます。バッファーにたいして、ナローイングにより境界を設けることを、バッファーの制限(restriction)と呼びます。

ナローイングにより、他の部分に気を取られずに、1つのサブルーチンやパラグラフに集中することが容易になります。ナローイングは、置換コマンドやキーボードマクロの繰り返しにより操作される範囲を制限するためにも使われます。

C-x n n

ポイントとマークの間にナローイングします(narrow-to-region)。

C-x n w

バッファー全体をワイドニングして、再びアクセス可能にします(widen)。

C-x n p

現在のページにナローイングします(narrow-to-page)。

C-x n d

現在のdefunにナローイングします(narrow-to-defun)。

バッファーをナローイングしているときは、表示されている範囲がすべてです。残りの部分を見ることはできず、移動もできず(移動コマンドによりアクセス可能範囲の外に移動することはできません)、変更もできません。しかし残りの部分がなくなったわけではないので、ファイルを保存するとアクセス不能範囲のテキストもすべて保存されます。ナローイングが有効なときは、モードラインに‘Narrow’という単語が表示されます。

主要なナローイングコマンドは、C-x n n (narrow-to-region)です。これは現在のバッファーを制限するので、現在のリージョンだけがアクセス可能になり、リージョンの前後のすべてのテキストはアクセス不能になります。ポイントとマークは変化しません。

かわりにC-x n p (narrow-to-page)を使うと、現在のページにナローイングされます。ページの定義については、ページを参照してください。C-x n d (narrow-to-defun)は、ポイントを含むdefunにナローイングします(トップレベルの定義、またはdefunを参照してください)。

ナローイングを取り消す方法は、C-x n w (widen)です。これにより再びバッファーのテキストすべてにアクセス可能になります。

バッファーのどの範囲にナローイングされているかは、C-x =コマンドを使って情報を得ることができます。カーソル位置の情報を参照してください。

ナローイングは、それを理解していないユーザーを容易に混乱させるので、通常narrow-to-regionコマンドは無効になっています。このコマンドを使おうとすると、Emacsは確認を求め、有効にするオプションを提供します。このコマンドを有効にすると、それ以降は確認を求められなくなります。コマンドの無効化を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.6 Viewモード

Viewモードは、バッファーをスクリーン上でスキャンするためのマイナーモードです。このモードは、バッファーを変更せずにスクロールする、便利なコマンドを提供します。Emacsのカーソル移動コマンドとは別に、SPCで前方にスクロール、S-SPCまたはDELで後方にスクロール、sでインクリメンタルサーチができます。

q (View-quit)とタイプするとViewモードが無効になり、Viewモードが有効になる前のパッファーの位置に戻ります。e (View-exit)とタイプするとViewモードが無効になり、現在のバッファーと位置は維持されます。

M-x view-bufferは、既存のEmacsバッファー名を入力として求め、そのバッファーに切り替えてViewモードを有効にします。M-x view-fileはファイル名を入力として求め、そのファイルをvisitしてViewモードを有効にします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.7 Followモード

Followモードは、同じバッファーを表示する2つのウィンドウを、1つの仮想ウィンドウとしてスクロールするマイナーモードです。Followモードを使うには、ウィンドウが1つだけのフレームを選択して、それをC-x 3を使って縦に並べて2分割してから、M-x follow-modeとタイプします。それ以降はバッファーをどちらのウィンドウでも編集でき、どちらかのウィンドウをスクロールすると、他方のウィンドウも追従してスクロールします。

Followモードでは、一方のウィンドウで表示されている部分の外にポイントを移動して、もう一方のウィンドウで表示されている部分にポイントを移動させると、そのウィンドウが選択されます。つまり2つのウィンドウを1つの大きなウィンドウとして扱えるのです。

Followモードをオフにするには、もう一度M-x follow-modeとタイプしてください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.8 テキストのフェイス

Emacsはフェイス(faces)と呼ばれる仕組みを通じて、テキストをいくつかの異なるスタイルで表示できます。フェイスにはfont(フォント)、height(高さ)、weight(太さ)、slant(傾き)、foreground(前景)およびbackground(背景)、underline(アンダーライン)、overline(オーバーライン)などの様々なフェイス属性(face attributes)を指定できます。ほとんどのメジャーモードはFont Lockモードを通じて、テキストに自動的にフェイスを割り当てます。これらのフェイスを割り当てる方法については、Font Lockモードを参照してください。

現在定義されているフェイスと、それがどのような外観なのかを見るには、M-x list-faces-displayとタイプします。プレフィクス引数を指定すると、このコマンドは正規表現の入力を求め、その正規表現にマッチするフェイスだけを表示します(正規表現の構文を参照してください)。

あるフェイスが、フレームが異なると違って見えるのことがあり得ます。たとえばいくつかのテキスト端末ではすべてのフェース属性、特に特にfont、height、widthはサポートされておらず、指定できるcolorも限られているものがあります。加えて、ほとんどのEmacsフェースは視認性をよくするために、フレームのバックグラウンドが明るい(light)か暗い(dark)かで属性が異なります。デフォルトでは、Emacsはフレームの現在のバックグラウンドカラーに基づいて、表示するフェイスの属性を自動的に選択します。しかし変数frame-background-modeに非nil値を与えると、これをオーバーライドできます。値darkではすべてのフレームの背景色が暗い色であるかのように処理し、値lightではすべてのフレームの背景色が明るい色であるかのように処理させることができます。

フェイスの属性を変えてフェイスをカスタマイズして、将来のEmacsセッション用にカスタマイズ結果を保存することができます。詳細については、フェイスのカスタマイズを参照してください。

defaultフェイスはテキストを表示するデフォルトのフェイスで、そのすべての属性は指定されています。バックグラウンドカラーは、フレームのバックグラウンドカラーとしても使用されます。フェイスのカラーを参照してください。

他の特別なフェイスとしては、cursorフェイスがあります。グラフィカルなディスプレーでは、このフェイスのバックグラウンドカラーは、テキストカーソルを描画するのに使用されます。このフェイスで効果があるのはこの属性だけです。カーソルの下のテキストのフォアグラウンドカラーには、そのテキストのバックグラウンドカラーが使われます。テキスト端末でのテキストカーソルの外観は、cursorフェイスではなく端末により決定されます。

特定のフェイスの属性を指定するのにXのリソースを使うこともできます。Xリソースを参照してください。

Emacsは可変幅フォント(variable-width fonts)を表示できますが、いくつかのコマンド、特にインデントを行うコマンドは、可変幅の文字幅の表示をうまく処理できません。そのため、ほとんどのフェイスにたいして可変幅フォントを使わないこと、特にそれがFont Lockモードに割り当てられている場合は、使わないことを推奨します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.9 フェイスのカラー

フェイスには、さまざまなフォアグラウンドカラーとバックグラウンドカラーをもたせることができます。フェイスにカラーを指定するとき、たとえばフェイスをカスタマイズ(フェイスのカスタマイズを参照してください)するときは、カラーネーム(color name)か、RGBトリプレット(RGB triplet)で指定することができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.9.1 カラー名

カラーネームとは、‘dark orange’や‘medium sea green’のような、事前に定義された名前です。カラーネームの一覧を見るには、M-x list-colors-displayとタイプします。表示されるカラーの順番を制御するには、list-colors-sortをカスタマイズします。このコマンドをグラフィカルなディスプレーで実行すると、Emacsで既知のカラーネームのすべてが表示されます(これらは標準のX11のカラーネームで、Xのrgb.txtで定義されています)。コマンドをテキスト端末で実行すると、端末で安全に表示することができる一部のカラーだけが表示されます。フェイスには、さまざまなフォアグラウンドカラーとバックグラウンドカラーを持たせることができます。しかしEmacsは、テキスト端末でもX11のカラーネームを理解できます。もしフェイスにX11のカラーネームが指定されている場合、最も近い端末の色で表示されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.9.2 RGBトリプレット

RGBトリプレットは‘#RRGGBB’という形式の文字列で指定します。主要カラーコンポーネントはそれぞれ‘00’ (色強度0)から‘FF’ (最大強度)の16進数として表現されます。各コンポーネントにたいして1桁、3桁、あるいは4桁の16進数を使用することもできるので‘red’は‘#F00’、‘#fff000000’、あるいは‘#ffff00000000’と表すことができます。各コンポーネントは同じ桁数でなければなりません。16進数のAからFは、大文字小文字を区別しません。

M-x list-colors-displayは、カラーネームと、それに相当するRGBトリプレットを表示します。たとえば‘medium sea green’は‘#3CB371’と同じです。

M-x set-face-foregroundM-x set-face-backgroundで、フェイスのフォアグラウンドとバックグラウンドのカラーを変更できます。これらのコマンドは、ミニバッファーでフェイス名とカラーの入力を求め(補完機能あり)、指定したカラーをフェイスにセットします。フェイスのカラーは全フレームに影響しますが、カスタマイズバッファーやXリソースを使うのとは異なり、将来のEmacsセッションには引き継がれません。フレームパラメーターを使って、特定のフレームのフォアグラウンドとバックグラウンドのカラーをセットすることもできます。フレームパラメーターを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.10 標準フェイス

以下はテキストの外見を指定する標準フェイスです。これらのフェイスの効果が欲しい場合は、特定のテキストに適用することができます。

default

このフェイスは特定のフェイスをもたない普通のテキストに使われます。フェイスのバックグラウンドカラーは、フレームのバックグラウンドカラーとして使用されます。

bold

このフェイスは、デフォルトフォントのbold(太字)バージョンです。

italic

このフェイスはデフォルトフォントのitalic(斜体)バージョンです。

bold-italic

このフェイスはデフォルトフォントのbold italic(太字斜体)バージョンです。

underline

このフェイスはunderline(下線)のテキストです。

fixed-pitch

このフェイスはfixed-width font(固定幅フォント)の使用を強制します。もし望むなら、このフェイスから他の固定幅フォントにカスタマイズするのは妥当ですが、可変幅フォントにするべきではありません。

fixed-pitch-serif

このフェイスはfixed-pitchと似ていますが、フォントはセリフ(serif: HやIなどの上下のひげ飾り)をもち、伝統的なタイプライター文字に、より似ています。

variable-pitch

このフェイスはvariable-width font(可変幅フォント)の使用を強制します。

shadow

このフェースはまわりのテキストに比べて、そのテキストを目立たなくします。通常これはデフォルトの黒または白のフォアグラウンドカラーではなく、グレーが使われます。

以下は特別な目的のために、一時的にテキストの一部をハイライトするのに使われるフェイスの、不完全なリストです(他にも多くのモードが、そのモードの目的のために、独自のフェイスを定義しています)。

highlight

このフェイスはさまざまなコンテキスト、たとえばハイパーリンク上をマウスカーソルが通過したときなどに、テキストをハイライトするのに使われます。

isearch

このフェイスは、現在のIsearch(インクリメンタル検索)のマッチをハイライトするのに使われます(インクリメンタル検索を参照してください)。

query-replace

このフェイスは、現在の問い合わせ置換(Query Replace)のマッチをハイライトするのに使われます(置換コマンドを参照してください)。

lazy-highlight

このフェイスは、Isearchおよび問い合わせ置換で、カレントのマッチ(現在カーソルがあるマッチ)以外のマッチ(lazy matches)をハイライトするのに使われます。

region

このフェイスは、アクティブなリージョンを表示するのに使われます(マークとリージョンを参照してください)。EmacsをGTK+サポートつきでビルドした場合、カラーは現在のGTK+のテーマから提供されます。

secondary-selection

このフェイスは、Xのセカンダリー選択(secondary X selection)を表示するのに使われます(セカンダリー選択を参照してください)。

trailing-whitespace

このフェイスは、show-trailing-whitespaceは非nilのとき、行末の余分なスペースやタブをハイライトするためのものです(不要なスペースを参照してください)。

escape-glyph

このフェイスは、制御文字やエスケープシーケンスを表示するためのものです(テキストが表示される方法を参照してください)。

homoglyph

このフェイスは、類似文字(表示しようとする文字と似ているが異なる文字)を表示するためのものです(テキストが表示される方法を参照)。

nobreak-space

このフェイスは、no-breakスペース文字を表示するためのものです(テキストが表示される方法を参照してください)。

nobreak-hyphen

このフェイスは、no-breakハイフン文字を表示するためのものです(テキストが表示される方法を参照してください)。

以下のフェイスは、Emacsフレームの一部の外見を制御します:

mode-line

このフェイスは、現在選択されているウィンドウのモードラインと、ツールキットメニューが使われていないときのメニューバーに使われます。デフォルトでは、グラフィカルなウィンドウではraised(浮き彫り)効果をだすため影つきで描画され、非ウィンドウの端末ではデフォルトのフェイスを反転して描画されます。

mode-line-inactive

mode-lineと似ていますが、選択されていないウィンドウのモードラインに使われます(mode-line-in-non-selected-windowsが非nilのとき)。このフェイスはmode-lineを継承するので、フェイスを変更するとすべてのウィンドウのモードラインが影響を受けます。

mode-line-highlight

highlightと似ていますが、モードライン上でマウスセンシティブ(マウスに感応する)なテキスト範囲に使われます。通常このようなテキスト範囲は上にマウスポインターがくると、ツールチップ(ツールチップを参照してください)をポップアップします。

mode-line-buffer-id

このフェイスは、モードライン上でバッファーを識別する部分に使われます。

header-line

mode-lineと似ていますが、ウィンドウのヘッダーラインのためのものです。モードラインがウィンドウの一番下に表示されるように、ヘッダーラインはウィンドウの一番上に表示されます。ほとんどのウィンドウはヘッダーラインを持ちません。Infoモードのような特別なモードだけがヘッダーラインを持ちます。

header-line-highlight

highlightmode-line-highlightと似ていますが、ヘッダー行のマウスに感応する部分に使用されます。header-lineフェイスはhighlightとは無関係にカスタマイズされるかもしれないので、このフェイスが別に設けられています。

tab-line

mode-lineと似ていますが、ウィンドウのタブラインのためのものです。タブラインはウィンドウのバッファーを表し、ウィンドウの上端に表示されます。ウィンドウのタブラインを参照してください。

vertical-border

このフェイスは、テキスト端末上でウィンドウを縦に分割するとき使われます。

minibuffer-prompt

このフェイスは、ミニバッファーで入力を求めるプロンプトのテキストに使われます。デフォルトでは、Emacsは自動的にプロンプトのテキストの、テキストプロパティ(Text Properties in the Emacs Lisp Reference Manualを参照してください)のリストminibuffer-prompt-propertiesに、このフェイスを追加します(この変数はミニバッファーに入ったときに効果をあらわします)。

fringe

グラフィカルなウィンドウでの、左右のフリンジのためのフェイスです(フリンジはEmacsフレームで、テキストエリアとウィンドウの左右の境界線の間にある、狭い領域です)。ウィンドウのフリンジを参照してください。

cursor

このフェイスの:background属性は、テキストカーソルのカラーを指定します。カーソルの表示を参照してください。

tooltip

このフェイスは、ツールチップのテキストに使われます。デフォルトでは、EmacsがGTK+サポートつきでビルドされた場合、ツールチップはGTK+を通じて描画されるので、このフェイスは効果がありません。ツールチップを参照してください。

mouse

このファイスは、マウスポインターのカラーを決定します。

以下のフェイスは、Emacsフレームの一部の外見を制御するときと同様ですが、テキスト端末またはEmacsをXサポートつき(ただしツールキットサポートなし)でビルドしたときだけ使われます(それ以外の場合、フレームの対応する各要素は広義なシステム設定により決定されます)。

scroll-bar

このフェイスは、スクロールバーの外見を決定します。スクロールバーを参照してください。

tool-bar

このフェイスは、ツールバーのアイコンのカラーを決定します。ツールバーを参照してください。

tab-bar

このフェイスはタブバーのアイコンのカラーを決定します。タブバーを参照してください。

menu

このフェイスはEmacsメニューのカラーとフォントを決定します。メニューバーを参照してください。

tty-menu-enabled-face

このフェイスは、テキスト端末で利用可能なメニューアイテムを表示するのに使われます。

tty-menu-disabled-face

このフェイスは、テキスト端末で利用不可なメニューアイテムを表示するのに使われます。

tty-menu-selected-face

このフェイスは、テキスト端末でマウスをクリックするか、RETを押せば選択できるメニューアイテムを表示するのに使われます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.11 テキストのスケール

現在のバッファーのデフォルトフェイスを大きくするには、C-x C-+またはC-x C-=をタイプします。小さくするには、C-x C--をタイプします。デフォルトのフェースの大きさ(グローバル)に復元するには、C-x C-0とタイプします。これらのキーは、すべて同じコマンドtext-scale-adjustにバインドされており、このコマンドは最後のキーを判断して動作を決定します。

同様にマウスポインターがバッファーテキスト上にある際にCtrl修飾キーを押下してマウスホイールをスクロールすると、スクロール方向に応じてデフォルトフェイスの高さが増加あるいは減少されます。

これらのコマンドの最後のキーは、C-xを前置せずに繰り返すことができます。たとえばC-x C-= C-= C-=は、フェイスの大きさを3段階に大きくします。各ステップで大きくなる倍率は1.2です。この倍率を変更するには、変数text-scale-mode-stepをカスタマイズします。text-scale-adjustコマンドに数引数0を指定すると、C-x C-0とタイプしたのと同様に、デフォルトの大きさに復元します。

コマンドtext-scale-increaseおよびtext-scale-decreaseは、C-x C-+およびC-x C--と同様、デフォルトフェイスを大きくまたは小さくします。キーをバインドする場合、これらのコマンドは、text-scale-adjustより便利でしょう。

コマンドtext-scale-setは、数引数で現在のバッファーのデフォルトフェイスの大きさを、絶対倍率で指定します。

上記のコマンドは、現在のフォント倍率が1以外のときは、自動的にマイナーモードtext-scale-modeを有効にし、そうでない場合は無効にします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.12 Font Lockモード

Font Lockモードはマイナーモードで、常に特定のバッファーにローカルで、バッファーのテキストにフェイスを割り当てます(またはフォント表示化(fontifies)します)。各バッファーのメジャーモードは、Font Lockモードにどのテキストをフォント表示可するか指示します。たとえばプログラム言語のモードは、コメントや文字列、関数名のような、構文に関連する構成をフォント表示化します。

Font Lockモードは、それをサポートするメジャーモードでは、デフォルトで有効になっています。カレントバッファーでこれを切り替えるには、M-x font-lock-modeとタイプします。正の数引数は無条件にFont Lockモードを有効にし、負または0の数引数を指定すると無効になります。

M-x global-font-lock-modeとタイプすると、すべてのバッファーでFont Lockモードを切り替えます。このセッティングを将来のEmacsセッションに引き継ぐには、変数global-font-lock-modeをカスタマイズ(Easy Customizationインターフェースを参照してください)するか、以下の行をinitファイルに追加します。

(global-font-lock-mode 0)

Global Font Lockモードを無効にしていたとしても、モードフック(mode hooks)に関数を追加することにより、特定のメジャーモードでFont Lockモードを有効にできます。たとえばCファイルの編集でFont Lockモードを有効にするには、以下のように記述します:

(add-hook 'c-mode-hook 'font-lock-mode)

Font Lockモードは、font-lock-string-facefont-lock-comment-faceのような、いくつかの特別な名前のフェイスを使って処理を行います。これらすべてを簡単に探す方法には、M-x customize-group RET font-lock-faces RETを使います。それからカスタマイズバッファーでそれらのフェイスの外見をカスタマイズできます。フェイスのカスタマイズを参照してください。

変数font-lock-maximum-decorationをカスタマイズして、この機能をサポートするメジャーモードにたいして、Font Lockモードで適用されるフォント表示化のレベルを変更できます。値には数字を指定します(1は最小限のフォント表示化で、3という高いレベルのモードもあります)。tは“可能な限り高く”という意味です(デフォルト)。効果を得るには、そのファイルがvisitされるfont-lock-maximum-decorationをカスタマイズするべきです。この変数をカスタマイズする時点で、すでにそのファイルをバッファーでvisitしている場合は、そのバッファーをkillしてから、スタマイズ後に再度そのファイルをvisitしてください。

特定のモードに異なる数字を指定することもできます。たとえばC/C++モードにはレベル1を指定して、他のモードにはデフォルトのレベルを適用するには、以下の値を使います

'((c-mode . 1) (c++-mode . 1)))

コメントと文字列のフォント表示化(または“構文的”なフォント表示化)は、バッファーのテキストの構文構造の解析に依存します。速度向上のため、Lispモードを含めたいくつかのモードでは、特別な慣習に依存しています。たとえば一番左の列の開きカッコ(open-parenthesis)または開き大カッコ(open-brace)は常にdefunの開始であり、すなわち常に文字列またはコメントの外部にあるとみなす、というように解析します。したがって文字列やコメントの中で、一番左の列に開きカッコや開き大カッコを記述するのは避けるべきです。詳細については、左端の慣習を参照してください。

Font Lockは、ほとんどのモードで既存のパターンをハイライトしますが、追加のパターンをフォント表示化したいときもあるでしょう。特定のモードでハイライトするパターンを追加するには、関数font-lock-add-keywordsを使うことができます。たとえばCコメント中の‘FIXME:’という単語をハイライトするには、以下を使います:

(add-hook 'c-mode-hook
          (lambda ()
           (font-lock-add-keywords nil
            '(("\\<\\(FIXME\\):" 1
               font-lock-warning-face t)))))

font-lockのハイライトパターンからキーワードを削除するには、関数font-lock-remove-keywordsを使います。Search-based Fontification in The Emacs Lisp Reference Manualを参照してください。

大きなバッファーのフォント表示化には、長い時間を要することもあります。ファイルをvisitしたとき大きな遅延を避けるには、Emacsが最初はバッファーの表示された部分だけをフォント表示化するようにします。バッファーをスクロールすると、新たに表示される部分がフォント表示化されます。このタイプのFont Lockは、Just-In-Time(またはJIT) Lockと呼ばれます。カスタマイズグループ‘jit-lock’の値をカスタマイズすることにより、アイドル状態のときにフォント表示可を行うことも含めて、JIT Lockがどのように振る舞うか制御できます。特定のアイテムのカスタマイズを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.13 インタラクティブなハイライト

Highlight Changesモードは、最近変更されたバッファー部分のテキストに、異なるフェイスを与えることによりハイライトするマイナーモードです。Highlight Changesモードを有効または無効にするには、M-x highlight-changes-modeを使います。

Hi Lockモードは、指定した正規表現にマッチするテキストをハイライトする、マイナーモードです。たとえば、プログラムのソースファイルで、特定の変数へのすべての参照をハイライトしたり、何らかのプログラムの大量の出力の一部をハイライトしたり、記事中の特定の名前をハイライトするために使用できます。Hi Lockモードを有効または無効にするには、コマンドM-x hi-lock-modeを使います。すべてのバッファーでHi Lockモードを有効にするには、M-x global-hi-lock-modeを使うか、.emacsファイルに(global-hi-lock-mode 1)と記述してください。

Hi LockモードはFont Lockモード(Font Lockモードを参照してください)と同じように動作しますが、ハイライトするパターンを明示的に正規表現で指定します。これらは以下のコマンドで制御できます(C-x wで始まるキーバインドは、M-s hで始まるグローバルなバインドが優先されるため推奨されておらず、将来のEmacsのバージョンで廃止されるでしょう)。

M-s h r regexp RET face RET
C-x w h regexp RET face RET

regexpにマッチするテキストを、フェイスfaceを使ってハイライトします(highlight-regexp)。ハイライトはバッファーがロードされている限り残ります。たとえば単語“whim”をデフォルトのフェイス(黄色いバックグラウンドカラー)でハイライトするには、M-s h r whim RET RETとタイプします。ハイライトには任意のフェイスを使うことができますが、Hi Lockモードはモード自身でいくつかのフェイスを提供しており、それらはデフォルト値のリストに事前ロードされています。フェイスの入力プロンプトでM-nM-pを使うことにより、それらを巡回することができます。プレフィクス数引数は対応する部分式にハイライトを制限します。

オプションhi-lock-auto-select-faceに非nil値をセットすることにより、このコマンド(およびその他のフェイスを読みとるHi Lockコマンド)は、入力を求めることなく、デフォルト値のリストから次のフェイスを自動的に選択します。

このコマンドを複数回使用して、さまざまな正規表現を指定し、それぞれを異なる方法でハイライトできます。

M-s h u regexp RET
C-x w r regexp RET

regexpのハイライトを解除します(unhighlight-regexp)。メニューから呼び出した場合、ハイライト解除する正規表現をリストから選択します。キーボードから呼び出した場合は、ミニバッファーを使います。一番最近追加された正規表現を表示し、M-nを使って次に古い正規表現、M-pで次に新しい正規表現を表示できます(手入力もでき、その場合は補完機能つきです)。ハイライト解除したい正規表現がミニバッファーに表示されたら、RETを押してミニバッファーを抜けだし、ハイライトを解除できます。

M-s h l regexp RET face RET
C-x w l regexp RET face RET

regexpとのマッチを含む行全体を、フェイスfaceを使ってハイライトします(highlight-lines-matching-regexp)。

M-s h p phrase RET face RET
C-x w p phrase RET face RET

phraseにマッチするフレーズを、フェイスfaceでハイライトします(highlight-phrase)。phraseには正規表現を指定できますが、スペースは空白文字にマッチする正規表現に置き換えられます。また、先頭に小文字を使用することにより、大文字小文字を区別しなくなります。

M-s h .
C-x w .

ポイントの近くで見つかったシンボルを、次に利用可能なフェイスでハイライトします(highlight-symbol-at-point)。

M-s h w
C-x w b

現在ハイライトを行っている正規表現/フェイスのペアを、バッファーのポイント位置に挿入します。挿入はプログラムを変更してしまわないように、コメント文字列でコメント化されます(このキーバインドはhi-lock-write-interactive-patternsコマンドを実行します)。

これらのパターンは、コメントからも逆抽出されます。それは、コメントに記述されたテキストが適正で、M-x hi-lock-find-patternsを呼び出した、あるいはHi Lockモードが有効なときファイルをvisit(これはhi-lock-find-patternsを実行します)したときです。

M-s h f
C-x w i

正規表現/フェイスのペアを、現在のバッファーのコメントから抽出します(hi-lock-find-patterns)。これらのコマンドを使えば、highlight-regexpでパターンを対話的に入力、hi-lock-write-interactive-patternsでそれをファイルに保存、それらを編集(あるマッチのフェイスを別のフェイスにしたり)、そして最後にこのコマンド(hi-lock-find-patterns)で編集済みのパターンを、Hi Lockのハイライトに適用することができます。

変数hi-lock-file-patterns-policyはファイルをvisitしたとき、Hi Lockモードがパターンを探して、それを自動的に抽出するべきかを制御します。値にはnil(ハイライトしない)、ask(ユーザーに尋ねる)、または関数を指定します。関数の場合、hi-lock-find-patternsはパターンを引数としてその関数を呼び出します。関数が非nilを返した場合、パターンを使用します。デフォルトはaskです。直接hi-lock-find-patternsを呼び出した場合、この変数の値に関係なく、常にパターンはハイライトされることに注意してください。

現在のメジャーモードのシンボルが、リストhi-lock-exclude-modesのメンバーの場合、hi-lock-find-patternsは何もしません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.14 ウィンドウのフリンジ

グラフィカルなディスプレーでは、通常Emacsの各ウィンドウの左右の端に、狭いフリンジ(fringes: 縁、へり)があります。フリンジは、ウィンドウのテキストに関する情報を提供するシンボルの表示に使用されます。M-x fringe-modeとタイプしてフリンジ表示を切り替えたり、幅を変更できます。このコマンドは全フレームのフリンジに影響します。選択されたフレームのフリンジだけを変更するには、M-x set-fringe-styleを使います。変数fringe-modeをカスタマイズして、フリンジへの変更を永続化できます。

フリンジのもっとも一般的な使われかたは、継続行の表示です(継続行を参照してください)。テキストの1行が複数のスクリーン行に分割されるとき、最初の行を除いた各行の左フリンジには曲矢印が表示され、その行の先頭が実際の行頭ではないことを示します。そして、最後の行を除いた各行の右フリンジにも曲矢印が表示され、その行の最後が実際の行末ではないことを示します。行の方向が右から左(双方向の編集を参照してください)の場合、フリンジの曲矢印の意味は逆になります。

行が切り詰められているとき(行の切り詰めを参照してください)は水平方向の直矢印を表示して、この行には水平スクロールしなければ見ることのできないテキストがあることを示します。矢印の上でマウスをクリックすれば、矢印の指す方向に水平スクロールします。

フリンジはバッファーの境界(バウンダリーの表示を参照)やウィンドウ下端付近の使用されていない行、デバッグ(Emacs下でのデバッガーの実行を参照)しているプログラムが実行中であることを示すためにも使われます。

現在の行がウィンドウの幅と正確に一致して、ポイントがその行の行末にある場合、フリンジにはカーソルが描画されます。これを無効にするには、変数overflow-newline-into-fringenilに変更します。これによりEmacsはウィンドウ幅と同じ長さの行にたいしても、継続または切り詰めを行います。

表示されているウィンドウの片側、または両側のフリンジを削除するためにfringe-modeをカスタマイズする場合、フリンジ上にに表示する機能は利用できなくなりますが、行の継続と切り詰めの標識は例外です。フリンジが利用できない場合、Emacsは特別なASCII文字(継続行、および行の切り詰めを参照してください)により、行の継続と切り詰めを示すために、最左および最右の文字セルを使用します。行の継続と切り詰めの標識に使用される文字セルは、この目的のために予約されるので、各行に表示するテキストのための列数は減少します。バッファーのテキストには双方向のテキスト、およびleft-to-right(左から右)とright-to-left(右から左)の両方のパラグラフ(双方向の編集を参照してください)が含まれるかもしれないので、、片側のフリンジを削除しただけでは依然として2つの文字セルが予約されます。つまり行の継続と切り詰めの標識のために、ウィンドウの両側にそれぞれ1つの文字セルが予約されます。なぜなら、right-to-leftのパラグラフでは、これらの標識はウィンドウの反対側に表示されるからです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.15 バウンダリーの表示

Emacsにfill-columnの位置(明示的なフィルコマンドを参照)を表示するインジケーターを追加できます。フィル列インジケーターは特にprog-modeとその派生モード(メジャーモードを参照)においてプログラムのソースコードのフォーマットにたいして特別な意味をもつ特定の列位置を示すために有用な機能です。

フィル列インジケーターの表示を有効にするには、インジケーターをローカルまたはグローバルに有効にする M-x display-fill-column-indicator-modeM-x global-display-fill-column-indicator-modeを使用します。

かわりにインジケーターの有効化とインジケートに使用する文字の制御に、display-fill-column-indicatordisplay-fill-column-indicator-characterという2つのバッファーローカル変数セットできます。インジケーターを表示するためには、これらの変数がどちらも非nilでなければならないことに注意してください(マイナーモードをオンにすることによりこれらの変数がセットされる)。

このモードをカスタマイズするために2つのバッファーローカル変数と1つのフェイスがあります:

display-fill-column-indicator-column

インジケーターをセットするべき列数を指定します。列にたいする正の数値、あるいは変数fill-columnの値の使用を意味するtを指定できます。

それ以外の値ではインジケーターは無効になります。デフォルト値はtです。

display-fill-column-indicator-character

インジケーターに使用する文字を指定します。フォントがサポートすれば、Unicode文字を含む任意の文字を指定できます。値nilはインジケーターを無効にします。display-fill-column-indicator-modeglobal-display-fill-column-indicator-modeでモードを有効にしたときは、値が非nilならばこの変数が指定する文字が使用されます。それ以外ならEmacsは文字‘U+2502 VERTICAL LINE’、‘U+2502 VERTICAL LINE’が表示できなければフォールバックとして‘|’を使用します。

fill-column-indicator

インジケーターの表示に使用するフェイスを指定します。これはバックグラウンドカラーを除くデフォルト値をフェイスshadowから継承します。インジケーターのカラーを変更するために必要なのは、このフェイスのフォアグラウンドカラーのセットだけです。

グラフィカルなディスプレーでは、Emacsはバッファーのバウンダリー(boundary: 境界)を、フリンジに表示することもできます。この機能を有効にすると、最初の行と最後の行ではフリンジに、かぎカッコが表示されます。上矢印または下矢印の場合、それはウィンドウをその方向に、もっとスクロールできることを示します。

バッファーローカルな変数indicate-buffer-boundariesは、バッファーのバウンダリーととウィンドウのスクロールが、フリンジでどのように表示されるかを制御します。値がleft(またはright)の場合、かぎカッコと矢印のビットマップは、左フリンジ(または右フリンジ)に表示されます。

値がalist(association list: 連想リスト。Association Lists in the Emacs Lisp Reference Manualを参照してください)の場合、各要素の(indicator . position)で、標識(indicator)の位置(position)を指定します。indicatorにはtopbottomupdown、またはt(指定されていない標識のデフォルト位置)を指定します。positionにはleftright、またはnil(標識を表示しない)を指定します。

たとえば((top . left) (t . right))は、最上行の左フリンジにかぎカッコを表示し、右フリンジには最下行のかぎカッコとスクロール矢印を表示します。左フリンジにかぎカッコだけを表示させる場合は、((top . left) (bottom . left))を使います。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.16 不要なスペース

意識せずに不必要なスペースを行末に残してしまったり、バッファーの最後に空行を残してしまうことはよくあります。ほとんどの場合、そのような行末の空白文字(trailing whitespace)は何の影響も及ぼしませんが、厄介物になる場合もあります。

バッファーローカルな変数show-trailing-whitespacetにセットすることにより、行末の空白文字を可視化できます。これによりEmacsはフェイスtrailing-whitespaceで、行末の空白文字を表示します。

この機能は行末に空白文字を含む行の、行末にポイントがあるときは適用されません。厳密にいえば、これも行末の空白文字なのですが、それを特別に表示してしまうと、新しいテキストをタイプするとき面倒です。このような特別なケースでは、ポイントの位置に表示されるカーソルより、空白文字があることが自明だからです。

M-x delete-trailing-whitespaceとタイプすると、すべての行末の空白文字を削除します。このコマンドは、バッファー内の各行の行末にあるすべての余分なスペースと、バッファーの最後にある空行を削除します。バッファー内の空行を削除しない場合は、変数delete-trailing-linesnilに変更してください。リージョンがアクティブのときは、リージョン内の各行の行末の余分なスペースを削除します。

グラフィカルなディスプレーでは、Emacsはウィンドウの最後の使われていない行の左フリンジに小さなイメージを表示して、それを示すことができます。このイメージはバッファーのテキストが何も含まれていないスクリーン行に表示されるので、バッファーの最後にある空行は、このイメージが表示されないことで見分けることができます。この機能を有効にするにはバッファーローカルな変数indicate-empty-linesに非nil値をセットします。すべての新しいバッファーでこの機能を有効または無効にするには、この変数のデフォルト値をセットします(例 (setq-default indicate-empty-lines t))

Whitespaceモードはバッファーローカルなマイナーモードで、バッファー内にある多くの種類の空白文字を視覚化します。これは空白文字を特別なフェイスで描画するか、特別なグリフで表示することにより行われます。このモードを切り替えるには、M-x whitespace-modeとタイプします。視覚化される空白文字の種類は、リスト変数whitespace-styleにより決定されます。M-x whitespace-toggle-optionsとタイプして、カレントバッファーでこのリスト内の個々の要素のオンとオフを切り替えることができます。以下はリストに指定できる要素の一部です(完全なリストは変数のドキュメントを参照してください)。

face

特別なフェイスを使った視覚化をすべて有効にします。この要素には特別な意味があります。もしこれがリストに含まれていない場合、space-marktab-marknewline-markを除く他の視覚化は効果がなくなります。

trailing

行末の空白文字をハイライトします。

tabs

タブ文字をハイライトします。

spaces

スペースおよびnon-breaking space文字をハイライトします。

lines

80列以上の行をハイライトします。列の上限を変更するには、変数whitespace-line-columnをカスタマイズします。

newline

改行をハイライトします。

empty

バッファーの先頭、および/または終端の空行をハイライトします。

big-indent

非常に深いインデントをハイライトします。デフォルトでは、少なくとも4個の連続するTAB文字と、32個の連続するスペースからなる、任意のシーケンスがハイライトされます。これを変更するには、正規表現whitespace-big-indent-regexpをカスタマイズしてください。

space-mark

スペースとnon-breaking文字を特別なグリフで描画します。

tab-mark

タブ文字を特別なグリフで描画します。

newline-mark

改行文字を特別なグリフで描画します。

Global Whitespaceモードは、すべてのバッファーで空白文字を視覚化する、グローバルなマイナーモードです。この機能を個別に切り替えるには、M-x global-whitespace-toggle-optionsを使用してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.17 選択的な表示

Emacsには、与えられたレベルより多くインデントされた行を隠す機能があります。これをプログラムの概要を理解するのに使うことができます。

現在のバッファーの行を隠すには、数引数nを指定してC-x $ (set-selective-display)をタイプします。すると少なくともn列のインデントをもつ行は、スクリーンに表示されなくなります。隠された行の存在を示すのは、表示されている行末に表示された3つのドット(‘’)だけで、これは1行以上の行が後に隠されていることを意味します。

コマンドC-nおよびC-pは、隠された行が存在しないかのように、隠された行をスキップして移動します。

隠された行は依然としてバッファーに存在し、ほとんどの編集コマンドはそれらを見ることができるので、隠されな行にポイントを移動することもありえます。これが起こるとカーソルは前の行の最後、つまり3つのドットの後ろに表示されます。ポイントが表示されている行の行末、つまり改行の前にある場合、カーソルは3つのドットの前に表示されます。

隠された行のすべてを再び表示するには、引数を指定せずにC-x $とタイプしてください。

変数selective-display-ellipsesnilをセットすると、隠された行があることを示す3つのドットは表示されなくなり、隠された行があることを示す視覚的な表示はなくなります。変数がセットされると、それは自動的にローカルになります。

バッファーのテキストの一部を隠す他の方法については、Outlineモードを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.18 モードラインのオプション

バッファーのパーセント表示posは、ウィンドウの上端がバッファーのどの場所にあるかを100分率で示します。M-x size-indication-modeとタイプしてSize Indicationモードをオンにすることにより、バッファーのサイズを追加で表示できます。サイズは以下のようにパーセント表示のすぐ後に表示されます:

pos of size

sizeは、バッファーの文字数を人間が理解しやすい形式(‘k’は10^3、‘M’は10^6、‘G’は10^9などの短縮形が使用されます)で表示します。

Line Numberモードが有効なとき、ポイント位置の現在の行番号はモードラインに表示されます。M-x line-number-modeコマンドを使って、Line Numberモードのオンとオフを切り替えることができます(通常はオンです)。行番号はそれが何であるかを示す文字‘L’とともに、バッファーのパーセント表示posの後ろに表示されます。

同様に、M-x column-number-modeでColumn Numberモードをオンにすることにより、現在の列番号を表示できます。列番号は文字‘C’で示されます。しかし両方のモードが有効になっているときは、行番号と列番号は‘L’や‘C’ではなく、‘(561,2)’のようにカッコつきで表示されます。マイナーモードとこれらのコマンドの使い方については、マイナーモードを参照してください。

Column Numberモードでは、列番号はそのウィンドウの左マージンより0からカウントされます。1からカウントした列番号を表示したい場合は、column-number-indicator-zero-basednilにセットしてください。

ナローイング(ナローイングを参照してください)によりバッファーを制限している場合、アクセスできる部分にもとづいた行番号が表示されます。そのため、これはgoto-lineの引数として使用するには適しません(ファイル全体にたいする相対行番号を確認するにはwhat-lineコマンドを使用)。ナローされたバッファーのアクセス可能範囲に相対的な行へポイントを移動するにはgoto-line-relativeコマンドを使用できます。

バッファーが非常に大きい場合(line-number-display-limitの値より大)、速度が遅くなるのでEmacsは行番号を計算しません。そのためモードラインに行番号は表示されません。この制限を取り除くには、line-number-display-limitnilをセットします。

バッファーの行が長いときも、行番号の計算が遅くなります。この理由により、Emacsはポイントの近くの行の幅の平均文字数が、line-number-display-limit-widthより大きいときは、行番号を表示しません。デフォルト値は200文字です。

Emacsはオプションで、時刻とシステムロードを、すべてのモードラインで表示できます。この機能を有効にするには、M-x display-timeとタイプするか、オプションdisplay-time-modeをカスタマイズします。モードラインに追加される情報は以下のような形式です:

hh:mmPM l.ll

ここでhhmmは時間と分で、後ろに‘AM’と‘PM’がつきます。l.llは、過去数分間における、システム全体で実行中または実行準備ができている(例: 利用可能なプロセッサー待ち)プロセスの平均数です(オペレーティングシステムがサポートしないフィールドは表示されません)。時刻を24時間表示にしたいときは、変数display-time-24hr-formattをセットしてください。

もし未読メールがある場合、ロードレベルの後ろに‘Mail’という単語が表示されます。グラフィカルなディスプレーでは、display-time-use-mail-iconをカスタマイズすることにより、‘Mail’のかわりにアイコンを使うことができます。これによりモードラインのスペースが多少節約できます。display-time-mail-faceをカスタマイズして、メールの表示を目立たせることができます。display-time-mail-fileを使ってチェックするメールファイルを指定したり、display-time-mail-directoryで受信メールのディレクトリーを指定できます(ディレクトリー内の空でない普通のファイルは、新しい受信メールと判断されます)。

Emacsをラップトップコンピューターで実行している場合、コマンドdisplay-battery-modeを使うか、変数display-battery-modeをカスタマイズすることにより、モードラインにバッテリー充電状況を表示できます。変数battery-mode-line-formatは、バッテリーの充電状況の表示方法を決定します。モードラインに表示されるメッセージの正確さはオペレーティングシステムに依存しており、通常はバッテリーの充電トータルにたいする現在のバッテリー充電率が表示されます。

グラフィカルなディスプレーでは、モードラインは立体的に描画されます。この効果が気に入らない場合は、mode-lineフェイスをカスタマイズして、box属性にnilをセットすることにより無効にできます。フェイスのカスタマイズを参照してください。

デフォルトでは、選択されていないウィンドウのモードラインは、mode-line-inactiveと呼ばれる、別のフェイスで表示されます。選択されたウィンドウのモードラインだけが、mode-lineフェイスで表示されます。これにより、どのウィンドウが選択されているかがわかりやすくなります。モードラインがないミニバッファーが選択されているときは、ミニバッファーをアクティブにしたウィンドウのモードラインが、mode-lineで表示されます。結果として通常のミニバッファーの使用では、モードラインは変化しません。

変数mode-line-in-non-selected-windowsnilにセットすることにより、mode-line-inactiveの使用を無効にできます。これによりすべてのモードラインが、mode-lineフェイスで表示されます。

モードラインに表示される改行フォーマットは、変数eol-mnemonic-unixeol-mnemonic-doseol-mnemonic-mac、およびeol-mnemonic-undecidedをセットすることにより、カスタマイズできます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.19 テキストが表示される方法

ほとんどの文字は、印字文字(printing characters)です。これらの文字がバッファーに存在すると、スクリーンにそのまま表示されます。印字文字にはASCIIの数字、文字、区切り文字、同様に多くの非ASCII文字が含まれます。

ASCII文字セットには、印字されない制御文字(control characters)が含まれます。その中でも特別に表示されるものが2つあります。1つ目は改行文字(UnicodeのコードポイントU+000A)で、新しい行を開始するのに表示されます。2つ目はタブ文字(U+0009)で、次のタブストップ(通常は8文字ごと)までをスペースで表示します。タブを何文字のスペースで表示するかは、バッファーローカルな変数tab-widthで制御され、1から1000の整数で指定しなければなりません。バッファーのタブ文字が表示される方法は、コマンドとしてのTABの定義には関係ないことに注意してください。

他のASCII制御文字としては、U+0020(8進の40、10進の32)より下のコードがあり、それらはカレット(‘^’)と、その後ろに非制御文字バージョンの文字を続けて、escape-glyphフェイスで表示されます。たとえば文字‘control-A’(U+0001)は、‘^A’と表示されます。

コードU+0080(8進の200)からU+009F(8進の237)までのrawバイトは、escape-glyphフェイスにより8進エスケープシーケンス(octal escape sequences)で表示されます。たとえば文字コードU+0098(8進の230)は‘\230’と表示されます。バッファーローカルな変数ctl-arrownilに変更すると、ASCII制御文字もカレットエスケープシーケンスではなく8進エスケープシーケンスで表示されます(rawバイトを16進表示するように要求することも可能。display-raw-bytes-as-hexを参照)。

ASCII文字の中には、ASCIIのスペースやハイフン(マイナス記号)と同じ外観を持つものがあります。そのような文字は、意識せずにバッファーに入力されたとき(たとえばyankなどで)、問題となることがあります。たとえばソースコードコンパイラーは通常、非ASCIIのスペースを、空白文字として扱いません。この問題に対処するため、Emacsはそのような文字を特別な方法(U+00A0(no-break space)はnobreak-spaceフェイス、U+00AD(soft hyphen)、U+2010(hyphen)、U+2011 (non-breaking hyphen)はnobreak-hyphenフェイス)で表示します。これを無効にするには、変数nobreak-char-displaynilに変更します。この変数に非nilかつ非tの値を与えると、Emacsはハイライトされたバックスラッシュの後に、スペースまたはハイフンを表示します。

特定の文字コードの表示のカスタマイズは、ディスプレーテーブル(display table)によって行われます。Display Tables in The Emacs Lisp Reference Manualを参照してください。

グラフィカルなディスプレーでは、Emacsが利用可能なフォントにグリフがない文字がいくつかあります。これらのグリフがない文字(glyphless characters)は、通常16進文字を含むボックスで表示されます。テキスト端末では、端末エンコーディング(端末入出力にたいするコーディングシステムを参照してください)で表示できない文字は、通常クエスチョン記号で表示されます。表示方法は、変数glyphless-char-display-controlで制御できます。これらの文字の表示がより目立つように、glyphless-charフェイスをカスタマイズすることもできます。詳細は、Glyphless Character Display in The Emacs Lisp Reference Manualを参照してください。

Emacsはカレントのディスプレイでcurved quotes(‘’と‘’)が表示可能か判断を試みます。デフォルトでは、表示可能ならEmacsはメッセージやヘルプテキスト内のASCIIクォート(‘`’と‘'’)をcurved quotesに変換します。ユーザーオプションtext-quoting-styleをカスタマイズすることにより、この変換を有効または無効にできます(Keys in Documentation in The Emacs Lisp Reference Manualを参照)。

curved quotes()をASCII文字と同様な外観で見ることができる場合、それらはhomoglyphフェイスで表示されます。表示できないことが既知のcurved quotesは、それらのASCIIによる代替である`'"homoglyphで表示されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.20 カーソルの表示

テキスト端末では、カーソルの外見は端末により制御され、大部分はEmacsの制御が及びません。いくつかの端末は、普通の固定的なカーソルと、目立つ点滅カーソルの2種類を提供します。デフォルトではEmacsは目立つカーソルを使い、Emacsを開始または再開したときは、そのカーソルに切り替えます。変数visible-cursornilの場合、Emacsを開始または再開したとき、普通のカーソルを使います。

グラフィカルなディスプレーでは、より多くのテキストカーソルのプロパティを変更できます。カラーを変えるには、フェイスcursorの、属性:backgroundを変更します(このフェイスの他の属性には、何を指定しても効果はありません。カーソルの下にあるテキストはフレームのバックグラウンドカラーを使って描画されます)。外見を変更するには、バッファーローカルな変数cursor-typeをカスタマイズします。有効な値はbox(デフォルト)、hollow(中抜きのボックス)、bar(垂直のバー)、(bar . n)(幅がnピクセルの垂直バー), hbar(水平バー)、(hbar . n)(高さがnピクセルの水平バー)、またはnil(カーソルなし)です。

デフォルトでは、カーソルは10回点滅する間にEmacsに何も入力がないと、点滅をストップします。そして何らかの入力イベントがあると、また0からカウントを再開します。変数blink-cursor-blinksをカスタマイズして、これを制御できます。変数の値には、何の入力もないとき点滅をストップする点滅回数を指定します。変数に0または負の値をセットすると、カーソルはずっと点滅したままになります。カーソルの点滅を無効にするには、変数blink-cursor-modenilに変更するか(Easy Customizationインターフェースを参照してください)、initファイルに以下の行を追加します:

  (blink-cursor-mode 0)

リスト変数blink-cursor-alistをカスタマイズして、カーソルが点滅をストップしたとき、どのように見えるかを変更できます。リストの各要素は、(on-type . off-type)という形式を指定します。on-typeには、点滅しているときのカーソルを指定します(on-typeには、上で説明したカーソルタイプを指定します)。そしてoff-typeには、点滅していないときのカーソルを指定します。

タブ文字のように、特別に幅が広い文字もあります。そのような文字上にカーソルがあるとき、通常はデフォルトの文字幅で描画されます。カーソルを文字幅に伸ばすには、変数x-stretch-cursorを非nil値に変更してください。

選択されていないウィンドウのカーソルは、通常点滅していない中抜きのボックスで表示されます(カーソルにバーを使っている場合、より細いバーで表示されます)。選択されていないウィンドウでカーソルを非表示にするには、変数cursor-in-non-selected-windowsnilに変更してください。

カーソルをよりはっきりと表示させるために、HL Lineモードを使用できます。このモードでは、ポイントを含む行がハイライトされます。現在のバッファーで有効または無効にするには、M-x hl-line-modeを使います。このモードをグローバルに有効または無効にするには、M-x global-hl-line-modeを使用してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.21 行の切り詰め

Emacsは行を継続(継続行を参照してください)するかわりに、長い行を切り詰めて表示できます。これは、スクリーンやウィンドウの幅より長い行は、全体が表示されないことを意味します。グラフィカルなディスプレーでは、行が切り詰められている場合、フリンジに小さな直矢印が表示されます。テキスト端末では、右端および/または左端の列に‘$’が表示されます。

水平スクロールは、自動的に行の切り詰めを引き起こします(水平スクロールを参照してください)。特定のバッファーにたいして行の切り詰めを明示的に有効にするには、コマンドM-x toggle-truncate-linesを使います。これは変数truncate-linesをローカルに変更することで機能します。値が非nilのときは、長い行は切り詰められ、nilのときは複数のスクリーン行に分けられます。変数truncate-linesをセットすると、現在のバッファーにローカルに適用されます。値を変更するまでは、デフォルト値(nil)が使われます。

ウィンドウを分割して狭くなりすぎたとき、Emacsは自動的に行の切り詰めを有効にします。これを制御する変数truncate-partial-width-windowsについては、ウィンドウの分割を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.22 Visual Lineモード

このモードでは、通常の行継続の代わりに、単語での折り返しが使われます。通常の行継続のように、長い論理行は2行以上のスクリーン行に分割されます。しかしEmacsはウィンドウの右端(RTL言語:Right-To-Leftlanguageでは左端)の近くの、単語の境界で折り返すよう試みます。これは単語の途中で折り返さないことにより、可読性を高めるためです。

単語での折り返しは、オプションのマイナーモードである、Visual Lineモードで有効になります。現在のバッファーでVisual Lineモードの有効と無効を切り替えるには、M-x visual-line-modeとタイプします。メニューバーからVisual Lineモードを有効にすることもできます(Optionsメニューから、サブメニュー‘Line Wrapping in this Buffer’の、メニューアイテム‘Word Wrap (Visual Line Mode)’を選択します)。Visual Lineモードが有効なときは、モードラインのモード表示に‘wrap’という文字が表示されます。コマンドM-x global-visual-line-modeは、全バッファーのVisual Lineモードを切り替えます。

Visual Lineモードでは、いくつかのコマンドは論理行ではなくスクリーン行に作用します。C-a (beginning-of-visual-line)はスクリーン行の先頭に移動し、C-e (end-of-visual-line)はスクリーン行の最後に移動、C-k (kill-visual-line)はテキストをスクリーン行の最後までkillします。

論理行単位で移動するには、コマンドM-x next-logical-lineまたはM-x previous-logical-lineを使います。これらのコマンドはVisual Lineモードが有効であるかにかかわらず、次または前の論理行に移動します。これらのコマンドを頻繁に使う場合は、キーを割り当てると便利でしょう。initファイル内でのキーのリバインドを参照してください。

デフォルトでは、単語の折り返し表示はフリンジに表示されません。Visual Lineモードは、長い論理行を含むファイルを編集するときに使われる場合があり、折り返し行すべてにフリンジの表示をすると見にくくなるためです。これを変更するには、変数visual-line-fringe-indicatorsをカスタマイズしてください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.23 ディスプレーのカスタマイズ

このセクションでは、Emacsスクリーンの外観を制御するさまざまな変数を説明します。初心者はスキップして構いません。

Emacsにバッファー内の各行にたいして行番号を表示させたい場合は、バッファーローカルな変数display-line-numbers(デフォルトはnil)をカスタマイズします。この変数は行番号表示のさまざまなモードをサポートするために、いくつかの異なる値をもつことができます。

t

バッファーテキストを表示する継続行ではないスクリーン各行の前に、、(絶対)行番号を表示します。その行が継続行の場合、またはスクリーン行全体がディスプレイ文字列(display string)、またはオーバーレイ文字列(overlay string)の場合、その行に番号は振られません。

relative

バッファーテキストを表示する非継続行の前に、相対行番号(relative line number)を表示します。行番号はポイントを表示する行にたいして相対的なので、カレント行から遠ざかるにしたがって、行番号は増加または減少します。

visual

この値により、Emacsにビジュアル的に行をカウントさせます。実際にディスプレイに表示されている行だけがカウントされ、ラップして複数行を占めるスクリーン行は、複数回番号付けされます。表示される番号は、上述の値relativeのように相対的です。これはOutlineモード(Outlineモードを参照)のような、テキストをフォールド(fold: 折り畳む)するモードで、正確なスクリーン行の番号により移動するときに役立つでしょう。

その他

その他の非nil値は、tとして扱われます。

コマンドM-x display-line-numbers-modeは、行番号表示を切り替える便利な方法を提供します。このモードのグローバル版は、global-display-line-numbers-modeです。ユーザーオプションdisplay-line-numbers-typeは、上述した行番号表示のサブモードのどのモードをアクティブにするかを制御します。

たとえグローバルにdisplay-line-numbers-modeをオンにしていても、ミニバッファーやツールチップ内に行番号は表示されないことに注意してください。

Emacsが相対行番号を表示しているとき、カレント行(ポイントを表示している行)の前に表示される番号を制御できます。デフォルトでは、Emacsはカレント行にたいしては、他のすべての行が相対行番号であっても、絶対行番号を表示します。変数display-line-numbers-current-absolutenil値にカスタマイズした場合、カレント行に表示される番号は0になります。これはカレント行の番号が重要ではなく、大きなバッファー内のテキストにたいして、より多くの水平方向の空きを残したいとき便利でしょう。

ナロー(ナローイングを参照)されたバッファーでは通常、ナローイングの先頭から番号が開始されます。しかし、変数display-line-numbers-widenを非nil値にカスタマイズした場合、ナローイングは無視されて、そのバッファーの最初の文字から行番号が開始されます。

display-line-numbers-offsetの値が非0なら、各絶対行番号に追加されて、行はあたかもdisplay-line-numbers-widenが非nilであるかのようにバッファー先頭から計数されます。0にセットされた場合、あるいは行番号が絶対でない場合には影響はありません。

Selective Display(選択的表示)モード(選択的な表示を参照)、およびその他の(OutlineモードやOrgモードのような)ディスプレイから多くの行を隠すモードでは、行番号のために予約済みのスペースにたいする法則性のない計算ミスを避けるために、変数display-line-numbers-width-startおよびdisplay-line-numbers-grow-onlyのカスタマイズ、またはdisplay-line-numbers-widthに十分大きな値をセットしたいと思うかもしれません。

行番号は特別なフェイスline-numberで表示されます。カレント行番号は異なるフェイスline-number-current-lineで表示されるので、ポイントを表示する行を見つける助けとなるようにカレント行番号に異なる外観を与えることができます。特定の数値の倍数であるような行番号をハイライトするために、追加フェイスのline-number-major-tickline-number-minor-tickを使用できます。それらの数値にdisplay-line-numbers-major-tickdisplay-line-numbers-minor-tickをカスタマイズしてください。

変数visible-bellが非nilの場合、Emacsは通常ベルサウンドを鳴らす場面で、スクリーン全体を点滅するよう試みます。端末がスクリーンを点滅させる方法を持たないとき、この変数は効果がありません。

変数echo-keystrokesは、複数文字キーのエコー表示を制御します。値にはエコーが開始されるまでの秒数を指定します。0の場合、エコーされません。何かエコーされるべきものがあるときは、この変数の値が効果をもちます。エコーエリアを参照してください。

グラフィカルなディスプレーでは、Emacsはビジーのときにマウスポインターを砂時計で表示します。この機能を無効にするには、変数display-hourglassnilをセットします。変数hourglass-delayは、砂時計が表示されるまでのビジーな時間を、秒数で指定します。デフォルトは1です。

マウスポインターがEmacsのフレーム内にある場合、文字をタイプしてテキストを挿入するまでの間、テキストを隠さないよう、Emacsはマウスポインターを非表示にします(正確に言うとマウスポインターの非表示は、自己挿入的(self-inserting)な文字をタイプしたときです。テキストの挿入を参照してください)。マウスポインターを動かすと、再び表示されます。この機能を無効にするには、変数make-pointer-invisiblenilをセットしてください。

グラフィカルなディスプレーでは、変数underline-minimum-offsetは、アンダーラインされたテキストの、アンダーラインから文字の基底線までの最小距離を、ピクセルで決定します。デフォルトでは値は1です。この変数を増加させると、特定のフォントにおいて、アンダーラインされたテキストの可読性が向上します(しかしEmacsは、カレント行にはアンダーラインを描画しません)。変数x-underline-at-descent-lineは、テキストにアンダーラインを引く方法を決定します。デフォルトはnilで、これはフォントの基底線と同じレベルに描画されることを意味します。これをtに変更すると、Emacsはフォントが同じ大きさになるよう、アンダーラインを少し下に描画します。(アンダーラインされるテキストにたいして非デフォルトの行間が指定された場合、Emacsは追加される行間の下にアンダーラインを描画する。Line Height in The Emacs Lisp Reference Manualを参照されたい。)

変数overline-marginは、テキストの上のオーバーラインの垂直位置を、オーバーライン自身の高さも含めて、ピクセルで指定します。デフォルトは2です。

テキスト端末には、bold(太字)かつ反転されたテキストが読みにくいものがあります。関数tty-suppress-bold-inverse-default-colorsに、引数非nilを与えて呼び出すと、このような場合のbold-faceの効果を抑制します。

デフォルトでは、rawバイトは8進形式で表示されます。たとえば10進値が128のバイトは\200のように表示されます。これを16進形式の\x80で表示するよう変更するには、変数display-raw-bytes-as-hextにセットしてください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15 検索と置換

他のエディターと同様、Emacsには文字列を検索(search)するコマンドがあります。Emacsには、文字列を違う文字列で置き換える(replace)コマンドもあります。また、同じことを行いますが、固定文字列ではなくパターンを検索するコマンドもあります。

xrefの制御下にある複数ファイルにたいして検索したり((識別子の検索と置換を参照してください)、DiredのAコマンドを通じて検索したり(ファイルにたいする操作を参照してください)、grepコマンドを使った検索(Emacs下でのGrepによる検索を参照してください)も可能です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.1 インクリメンタル検索

Emacsにおける重要な検索コマンドは、インクリメンタル検索(isearch: incremental search)です。これは検索する文字列の最初の文字をタイプすると、すぐに検索が開始されます。検索文字列をタイプしていくにつれて、Emacsはその文字列(それまでに入力した文字列)がどこにあるかを表示します。望む場所を特定するのに充分な文字列をタイプしたところで、検索をストップできます。次に何をするかによって、明示的なRETにより検索を終えたり、続けることができます。

C-s

前方にインクリメンタル検索します(isearch-forward)。

C-r

後方にインクリメンタル検索します(isearch-backward)。

メニューバーの‘Edit->Search’メニューからインクリメンタル検索を呼び出すこともできます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.1.1 インクリメンタル検索の基本

C-s

インクリメンタル検索を開始します(isearch-forward)。

C-r

逆向きのインクリメンタル検索を開始します(isearch-backward)。

C-s (isearch-forward)は、前方へのインクリメンタル検索を開始します。これはキーボードから文字を読み取り、タイプした文字が最初に出現するバッファーの位置に、ポイントを移動します。

たとえばC-sとタイプした後にFをタイプすると、検索を開始したバッファーのポイント位置より前方にある、最初のFにカーソルを移動します。つぎにOをタイプすると、前方にある最初の‘FO’にカーソルが移動します。この場合、‘FO’の‘F’は、前に見つかった‘F’と同じ位置である必要はありません。もう一度Oをタイプすると、カーソルは最初の‘FOO’に移動します。

各ステップでEmacsはカレントマッチ(current match: 現在のマッチ)(検索文字列にマッチしたバッファーのテキスト)を、isearchフェイス(テキストのフェイスを参照してください)でハイライトします。このハイライトをカスタマイズするさまざまなオプションについては、必要に応じて検索を調整するを参照してください。その時点での検索文字列はエコーエリアにも表示されます。

検索文字列のタイプ中に間違ったら、DEL(isearch-delete-char)とタイプしてください。DELをタイプするたびに、検索の間にエンターした最後の入力がキャンセルされます。検索文字列、ポイント位置、検索の成否、検索の方向、カレント検索結果の他端位置、検索の“ラッピング”を変更するコマンドのタイプ時、Emacsは常に新たな入力アイテム(input item)を記録します。失敗した検索を処理するための詳細は、インクリメンタル検索でのエラーを参照してください。

検索により到達した位置に満足したら、RET (isearch-exit)をタイプします。これは検索をストップして、検索により移動した位置にカーソルを残します。検索とは関係ないコマンドも、検索をストップして、そのコマンドが実行されます。つまりC-aは検索をexitして行の先頭に移動し、矢印キーをタイプすると検索をexitして対応する移動コマンドが処理される、などとなります。RETで検索を終える必要があるのは、次のコマンドが印字文字をタイプするコマンドのときだけです。DELRETおよび他のいくつかの文字(C-qC-wC-rC-sC-yM-yM-rM-cM-e、および以下で説明する文字)は、検索で特別な意味を持っています。検索をexitするコマンドを微調整できます。インクリメンタル検索を終了させないを参照してください。

特別な例外として、検索文字列が空のときにRETを入力すると、非インクリメンタル検索(非インクリメンタル検索を開始します(これは"カスタマイズ可能"です。必要に応じて検索を調整するを参照してください)。

検索を中止して検索を開始した位置に戻るには、ESC ESC ESC (isearch-cancel)、またはC-g C-g (isearch-abort)とタイプしてください。

インクリメンタル検索を終了するとき、ポイントの元の位置をマークをアクティブにせず(ただしマークがすでにアクティブではなかったときだけ)に、マークリングに追加します。これにより、C-u C-SPC、またはC-x C-xを使って、検索を開始する前の位置に戻ることができます。マークリングを参照してください(Emacsはマークがすでにアクティブでないときだけ、これを行ないます。検索を開始したときにマークがアクティブな場合は、C-u C-SPCC-x C-xの両方とも、マークに戻ります)。

後方に検索するには、C-sで検索を開始するかわりに、C-r (isearch-backward)を使います。前方検索が検索を開始した位置より前方にある最初のマッチを探すように、後方検索は検索を開始した位置より後方にある最後のマッチを探します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.1.2 インクリメンタル検索の繰り返し

前方に‘FOO’を検索してマッチしたが探しているマッチではなく、探しているのはバッファーのもっと前方に出現する‘FOO’だとしましょう。ここでもう1度C-s (isearch-repeat-forward)をタイプすることにより、検索文字列が次に出現する場所、C-r (isearch-repeat-backward)とタイプすれば検索文字列が前に出現した場所に移動します。これは何回でも繰り返すことができます。次、または前へn個目の出現場所を見つけるためにC-sC-rにプレフィクス数引数nをかわりに供給することもできます。もしタイプしすぎたときは、C-sコマンドをDELで取り消すことができます。同様に後方へのインクリメンタル検索では、C-r (isearch-repeat-backward)により後方検索が繰り返されます。

インクリメンタル検索中に手を止めて眺めてみると、検索文字列にたいするカレントマッチ以外に、スクリーンに表示されている他のマッチもハイライトされていることがわかります。これは検索するために、何回C-sまたはC-rを繰り返せばよいのか予測しやすくするためです。その他のマッチは、カスタマイズ可能なフェイスlazy-highlight (テキストのフェイスを参照してください)を使って、現在のマッチとは異なってハイライトされます。この機能を無効にするには、isearch-lazy-highlightnilをセットしてください。マッチのハイライトに関連するその他のカスタマイズについては、必要に応じて検索を調整するを参照してください。

検索を終了した後、同じ文字列を再度検索するには、C-s C-sとタイプします。最初のC-sはインクリメンタル検索を呼び出し、2回目のC-sは最後に検索した文字列の再検索を意味します。同様に、C-r C-rは最後に検索した文字列を後方に検索します。最後に検索された文字列の決定では、その文字列がC-sで検索されたのか、C-rで検索されたのかは問題ではありません。

前方に検索していて、検索している対象が検索開始点より後方にあるのに気付いたときは、検索文字列を変更すること無く、C-rで後方検索に切り替えることができます。同様に後方検索でC-sをタイプすると、前方検索に切り替わります。

検索が失敗したとき、バッファーの先頭から検索を再開するには、もう一度C-sをタイプします。逆向きの繰り返し検索が失敗したときは、C-rでバッファーの最後から検索を再開します。これはwrapping around(巻き直し)と呼ばれ、これが発生すると、‘Wrapped’という単語が検索プロンプトに表示されます。検索を続けて元の検索開始ポイントを通過すると、‘Overwrapped’に変化します。これはすでに見たマッチを再訪していることを意味します。

以前に検索した文字列を再利用するには、サーチリング(search ring)を使います。コマンドM-p (isearch-ring-retreat)またはM-n (isearch-ring-advance)で、リングを移動して再使用したい文字列を取り出します。これらのコマンドは、選択されたリング要素の文字列をミニバッファーに残すので、それを編集することができます。C-sC-r、またはRETとタイプすると、その文字列を受け入れて、その文字列にたいする検索を開始します。サーチリングの中に保存されている、最近使用された検索文字列の数は、変数search-ring-maxで指定され、デフォルトは16です。

ミニバッファーの現在の検索文字列を、サーチリングのアイテムで置き換えずに編集するときは、M-e (isearch-edit-string)とタイプするか、ミニバッファーをmouse-1でクリックします。RETC-sC-rとタイプすれば、編集を終了してそれを検索できます。バッファーの検索を開始したポイントの後に続く文字を検索文字列に追加するには、C-fまたはRIGHTとタイプしてください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.1.3 インクリメンタル検索でのyank

多くのケースで、ポイントの近くにあるテキストを検索文字列として使いたいことがあるでしょう。このサブセクションで説明されているコマンドにより、これを便利に行なえるようになります。

C-w (isearch-yank-word-or-char)は検索された文字列のポイントの次の文字または単語を検索文字列に追加します。これはポイント位置にあるテキストを検索する簡単な方法です(コピーする対象を文字または単語のどちらにするかの決定は発見的に行われます)。プレフィクス数引数nを与えると次のn個の文字または単語を追加します。

C-M-w (isearch-yank-symbol-or-char)は、検索された文字列のポイントの次の文字またはシンボルを検索文字列に追加します。これはポイント位置にあるシンボルを検索する簡単な方法です(コピーする対象を文字またはシンボルのどちらにするかの決定は発見的に行われます)。プレフィクス数引数nを与えると次のn個の文字またはシンボルを追加します。

M-s C-e (isearch-yank-line)は、検索文字列にカレント行の残りの部分を追加します。ポイントが既に行末にある場合には次の行が追加されます。プレフィクス引数nを指定すると次のn行を追加します。

同様にC-M-z (isearch-yank-until-char)はポイントから指定した文字の次の出現場所(その文字を含まず)までのすべてを検索文字列に追加します。これはたとえばプログラミング言語やマークアップ言語でその文字が字句境界をマークするようなときのキーボードマクロにとって有用です。プレフィクス数引数nを与えると、このコマンドはポイントからn個目の指定した文字までのすべてを追加します。

インクリメンタル検索でのC-y (isearch-yank-kill)は、カレントkillを検索文字列に追加します。C-yの後にM-y (isearch-yank-pop)が呼び出されると、追加するテキストを、もっと前にkillされたものに置き換えます。これは通常のM-y (yank-pop)コマンドと似ています((yank)を参照)。エコーエリアでmouse-2をクリックすることにより、はカレントのX選択(他のウィンドウアプリケーションにたいするカットアンドペーストを参照)を検索文字列に追加します(isearch-yank-x-selection)。

C-M-d (isearch-del-char)は検索文字列の最後の文字を削除し、C-M-y (isearch-yank-char)は検索されたポイントの後の文字を追加します。ポイントの後ろの文字を追加する他の方法は、M-e(インクリメンタル検索の繰り返しを参照してください)でミニバッファーに移動してから、検索文字列の最後でC-fRIGHTをタイプします。C-fRIGHTをタイプするたびに、ポイントの後の文字が検索文字列に順次追加されます。

検索が大文字小文字を区別しない場合は通常、検索文字列にyankされるテキストは小文字に変換されるので、検索は大文字小文字を区別しないままです(case foldingを参照してください)。しかし、変数search-upper-case (search-upper-caseを参照してください)の値がnot-yanks以外の場合には、この小文字への変換は無効になります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.1.4 インクリメンタル検索でのエラー

文字列が見つからなかった場合、エコーエリアに‘Failing I-Search’と表示されて、文字列とできるかぎりマッチした位置に、カーソルが移動します。つまり‘FOOT’を検索して‘FOOT’がない場合、カーソルは‘FOOL’という文字列の‘FOO’の後ろに移動します。エコーエリアではマッチに失敗した検索文字列の一部が、フェイスisearch-failを使ってハイライトされます。

その時に行うことができる選択肢がいくつかあります。もし文字列が間違っている場合には、文字列を訂正するために、DELで前の入力アイテム(インクリメンタル検索の基本を参照)を削除、一度に一文字削除するならC-M-d、編集する場合はM-eとタイプします。もし見つかった位置が望む位置なら、RETをタイプしてその位置に留まることができます。またはC-gをタイプして、検索文字列から検索できなかった文字(‘FOOT’の中の‘T’)を取り除き、検索された部分の文字列(‘FOOT’の中の‘FOO’)を残します。その位置でもう1回C-gをタイプすると、検索全体を取り消し、ポイントは検索を開始した位置に戻ります。

終了コマンドのC-gは、検索において特別な処理を行います。このコマンドの動作は、検索の状況に依存します。もし指定した文字列の検索が成功して、さらに検索文字の入力を待っているとき、C-gは検索全体を取り消して、カーソルを検索を開始したときの位置に移動します。検索文字列に検索に失敗した文字が含まれているときに、C-gがタイプされたときは、検索文字列から検索に失敗した文字が取り除かれます。後に残るのは検索に成功した文字列で、さらに検索文字の入力を待っているので、先のケースと同様、2回目のC-gで検索全体が取り消されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.1.5 インクリメンタル検索の特別な入力

前のサブセクションで説明した文字に加えて、インクリメンタル検索のときにタイプする文字列の中には、特別な効果をもつものがあります。ここではそれらについて説明します。

lax space matching(「だらしない、ゆるんだ、緩慢な、締まりのない」スペースのマッチング。lax space matchingを参照してください)を切り替えるには、M-s SPCとタイプします。

検索でcase sensitivity(大文字小文字を区別するか)を切り替えるには、M-cまたはM-s cとタイプします。case foldingを参照してください。検索文字列が大文字を含む場合、デフォルトではその検索はcase-sensitive(大文字小文字を区別)します。

検索が似ている文字、または等価な文字を考慮するかどうかを切り替えるには、M-s 'とタイプします。character foldingを参照してください。検索文字列にアクセント付きの文字が含まれる場合、その検索の間、character foldingは無効になります。

非表示のテキストを検索するかしないかは、M-s i (isearch-toggle-invisible)とタイプして切り替えることができます。Outline Searchを参照してください。

インクリメンタル検索で、非正規表現による検索と、正規表現による検索を切り替えるには、M-r、またはM-s r (isearch-toggle-regexp)とタイプします。正規表現検索を参照してください。

シンボルモードを切り替えるには、M-s _とタイプします。シンボル検索を参照してください。

改行文字を検索するには、検索文字列の途中でC-jとタイプします。

ASCII文字を検索するには、以下の方法の1つを使います:

インクリメンタル検索の中でM-s oとタイプすることにより、カレントの検索文字列でoccurを実行する、isearch-occurが呼び出されます。occurを参照してください。

インクリメンタル検索でM-% (isearch-query-replace)をタイプすると、query-replaceまたはquery-replace-regexpが呼び出され(検索モードに依存します)、現在の検索文字が置換対象になります。負のプレフィクス引数は、後方への置換を意味します。問い合わせつき置換を参照してください。C-M-% (isearch-query-replace-regexp)とタイプすることにより、カレント検索文字列を置換すべき正規表現としてquery-replace-regexpが呼び出されます。

インクリメンタル検索でM-TABをタイプすると、isearch-completeが呼び出され、サーチリング(以前に使用された検索文字列)を補完リストとして使って、検索文字列の補完を試みます。補完を参照してください。多くのオペレーティングシステムでは、キーシーケンスM-TABはウィンドウマネージャーに捕えられます。その場合、これを使うにはisearch-completeを、他のキーシーケンスに再バインドする必要があります(対話的なキーバインディングの変更を参照してください)。

M-s h r (isearch-highlight-regexp)とタイプすればマッチをハイライトしたまま検索をexitできます。これはハイライトに使用するフェイスの入力を求めるhighlight-regexp (インタラクティブなハイライトを参照)に、検索文字列から継承したregexpをに渡して実行します。(マッチだけではなく)マッチを含む行全体をハイライトするには、M-s h l (isearch-highlight-lines-matching-regexp)とタイプします。いずれの場合でも、ハイライトを除去するにはM-s h u (unhighlight-regexp)とタイプしてください。

インクリメンタル検索がアクティブのとき、C-h C-h (isearch-help-map)とタイプすると、特別なキーバインドのリストを含む、対話的なヘルプにアクセスできます。これらのキーバインドは、キーマップisearch-mode-mapの一部です(キーマップを参照してください)。

インクリメンタル検索がアクティブな際にM-s M->とタイプすると検索文字列の最後の出現位置、M-s M-<とタイプすると最初の出現位置に移動します。プレフィクス数引数nを与えると、これらのコマンドはそれぞれバッファーの先頭または最後から数えてn個目の検索文字列の出現位置へ移動します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.1.6 インクリメンタル検索を終了させない

このサブセクションでは検索で特別な意味をもたないコマンドがコマンドを実行する前に、検索をexitするかどうかを制御する方法を説明します。また、(たとえそれらがインクリメンタル検索の一部ではなくても)カレントのインクリメンタル検索をexitせずにタイプできる、3つのカテゴリーに属するコマンドを説明します。

インクリメンタル検索によりバインドされていないコマンドをタイプすると通常、そのコマンドを実行する前に検索をexitします。したがって、そのコマンドは検索を呼び出したときのバッファーにたいして処理を行なうことになります。しかし、変数search-exit-optionappendにカスタマイズした場合、(インクリメンタル検索により解釈されないような)タイプした文字は、単に検索文字列に追加されます。これにより、通常は検索をexitして、その文字にバインドされているコマンドをそのバッファーにたいして呼び出す、C-aのような制御文字を検索文字列に含めることができるようになります。

プレフィクス引数

インクリメンタル検索でプレフィクス引数を指定したコマンドをタイプすると、デフォルトではその引数は次の検索アクションに適用されるか、検索をexitするコマンドに渡されます。他の言い方をすると、プレフィクス引数の入力自体は、検索を終了させません。

以前のバージョンのEmacsでは、プレフィクス引数の入力は常に検索を終了させていました。この振る舞いに戻すには、変数isearch-allow-prefixnilをセットしてください。

isearch-allow-scrollが非nilのとき(以下を参照)、プレフィクス引数は上で説明したようなデフォルト動作をします。つまり、たとえisearch-allow-prefixnilでも、プレフィクス引数は検索を終了させません。

スクロールコマンド

通常スクロールコマンドは、インクリメンタル検索を終了させます。変数isearch-allow-scrollを非nil値に変更すると、スクロールバーやC-vM-vC-lのようなスクロールコマンド(スクロールを参照してください)が利用可能になります。これは、これらのコマンドをバウンドされたキーシーケンスで呼び出したときだけ適用されます。つまりM-xは依然として検索を終了させます。これらのコマンドには、通常の方法でプレフィクス引数を与えることができます。この機能では通常はカレントマッチが表示されない位置にスクロールすることはできません。しかしisearch-allow-scrollを特別な値unlimitedにカスタマイズすることにより、この制限は解除されます。

isearch-allow-scrollの機能は、正確にはスクロールではないが、テキストが表示されるスクリーン位置に影響する、C-x 2 (split-window-below)やC-x ^ (enlarge-window)のような、コマンドにも効果を及ぼします。これはコマンド名のisearch-scrollプロパティが非nilのコマンドに適用されます。そのため、どのコマンドが影響を受けるかは、それらのプロパティを変更して制御できます。

たとえば将来のEmacsセッションも含めて、インクリメンタル検索中にC-h lを使えれば便利だと思ったら、まずC-h cで何のコマンドが実行されるか調べて(キーのドキュメントを参照してください)、それがview-lossageだとわかります。その後はinitファイルに以下を追加します(Emacs初期化ファイルを参照してください)。

(put 'view-lossage 'isearch-scroll t)

この機能はポイント、バッファー内容、マッチデータ、カレントバッファーや選択されているウィンドウ・フレームを変更しない任意のコマンドに適用できます。そして、そのコマンド自体がインクリメンタル検索を行ってはなりません。この機能は、isearch-allow-scrollnil(デフォルト)の場合は無効です。

移動コマンド

isearch-yank-on-moveshiftにカスタマイズしている際には、カーソル移動コマンドをタイプ中にシフトキーを押下することにより検索文字列を拡張できます。これはポイント移動後にカレントバッファーの新たな位置で終了するテキストをyankします。

isearch-yank-on-movetの際にはカーソル移動コマンドにシフトキーを使用せずに検索文字列を拡張できますが、それはコマンドのシンボルにisearch-moveプロパティをもつ特定の移動コマンドだけに適用されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.1.7 ミニバッファーの検索

ミニバッファーがアクティブのときインクリメンタル検索を開始すると、Emacsはミニバッファーの内容を検索します。通常のバッファーにたいする検索とは異なり、エコーエリアはミニバッファーの表示に使われているので、検索文字列はエコーエリアには表示されません。

ミニバッファーでのインクリメンタル検索が失敗すると、ミニバッファーヒストリーを検索します。ミニバッファーヒストリーを参照してください。ミニバッファーとミニバッファーのヒストリーは、一番古いヒストリー要素が最初で、カレントのミニバッファーが最後にある、一連のページとして視覚化することができます。前方検索のC-sは前方、つまり新しいページを検索し、後方検索のC-rは後方、つまり古いページを検索します。普通のバッファーの検索と同様、検索が失敗すると、最後から最初のページ、またはその逆に巻き直して検索します。

カレントマッチがヒストリーの要素にあった場合、ヒストリーの要素はミニバッファーに取り出されます。インクリメンタル検索を正常に終了(たとえばRETをタイプ)すれば、それはミニバッファーに残ります。検索を取り消すのはC-gで、これによりミニバッファーの内容は検索を開始したときのものに復元されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.2 非インクリメンタル検索

Emacsには、従来式の非インクリメンタル検索もあります。これは検索を開始する前に、検索文字列全体を入力する必要があります。

C-s RET string RET

stringを検索します。

C-r RET string RET

後方にstringを検索します。

非インクリメンタル検索を開始するには、最初にC-s RETをタイプします。これにより、検索文字列を読みとるために、ミニバッファーに移動します。検索文字列の入力を終了して検索を開始するには、RETをタイプします。文字列が見つからなかったとき、検索コマンドはエラーをシグナルします。

C-s RETとタイプすると、C-sは通常どおりインクリメンタル検索を呼び出します。しかし、このコマンドは指定した文字列が空のとき、非インクリメンタル検索を行うコマンドを呼び出すよう、プログラムされています(そのような用途以外に空の引数は無意味です)。C-r RETも同様に、後方に非インクリメンタル検索を行なうコマンドを呼び出します。

メニューバーの‘Edit->Search’メニューから非インクリメンタル検索を呼び出すこともできます。

よりシンプルな2つのコマンド、M-x search-forwardM-x search-backwardを使うこともできます。これらのコマンドは指定した文字をリテラルとして検索し、case folding(検索で大文字小文字を区別するか)を除くlax-search機能(検索中のLaxマッチングを参照してください)をサポートしません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.3 単語検索

単語検索(word search)は、単語の並びを、その間にある区切り文字の種類とは無関係に検索します。たとえば検索文字列に、1つのスペースで区切られた2つの単語を入力すると、2つの単語を区切るのが、1つまたはそれ以上のスペース、改行文字、およびそれ以外の区切り文字の場合にもマッチします。これはテキスト文書を検索するとき特に有用です。なぜなら検索する単語が改行で区切られているのか、スペースで区切られているのか考慮しなくてもよいからです。プログラミング言語のためのメジャーモード、およびその他の特別なメジャーモード、そのモードの構文的なニーズに適合するように、単語の定義が変更されているかもしれないことに注意してください。

M-s w

インクリメンタル検索がアクティブのとき、単語検索モードに切り替えます(isearch-toggle-word)。非アクティブのときは、前方へのインクリメンタルな単語検索を開始します(isearch-forward-word)。

M-s w RET words RET

非インクリメンタルな単語検索を使って、wordsを前方検索します。

M-s w C-r RET words RET

非インクリメンタルな単語検索を使って、wordsを後方検索します。

M-s M-w

リージョン内のテキストにたいして、Webを検索します。

前方へのインクリメンタルな単語検索を開始するには、M-s wとタイプします。インクリメンタル検索が非アクティブの場合、これはコマンドisearch-forward-wordを実行します。インクリメンタル検索がすでにアクティブの場合(前方か後方かにかかわらず)、M-s wは検索の方向と現在の検索文字列は変更せずに、単語検索に切り替えるコマンドisearch-toggle-wordを実行します。単語検索をオフに切り替えるには、再度M-s wをタイプしてください。

非インクリメンタルな単語検索を開始する場合、前方検索はM-s w RET、後方検索はM-s w C-r RETをタイプします。これらはコマンドword-search-forward、またはword-search-backwardを実行します。

インクリメンタルな単語検索と、非インクリメンタルな単語検索では、マッチを見つける方法に若干の違いがあります。非インクリメンタルな単語検索では、検索文字列の各単語は、単語全体に厳密に一致しなければなりません。インクリメンタルな単語検索では、マッチの規則は緩くなります。検索文字列をタイプするとき、最初と最後の単語は、単語全体にマッチする必要はありません。これはタイプする度にマッチを処理するためです。これは(カーソルがある)カレントマッチ以外のマッチ(lazy matches。インクリメンタル検索を参照してください)には適用されません。それらは単語全体がマッチしなければハイライトされません。検索文字列をタイプしている間は、C-sのような検索繰り返しキーを使用するまで、検索プロンプトに‘Pending’が表示されます。

単語検索コマンドは、character foldingを処理せず、lax whitespace matching(lax space matchingを参照してください)が効果をもたないように切り替えます。

リージョン内のテキストにたいしてWebを検索するには、M-s M-wとタイプします。このコマンドは、変数eww-search-prefixにより指定されたURLの検索エンジンを使用して、リージョン内の単語にたいするインターネット検索を行ないます(EWW in The Emacs Web Wowser Manualを参照)。リージョンがアクティブでない場合、このコマンドはユーザーに検索するURL、またはキーワードの入力を求めます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.4 シンボル検索

シンボル検索(symbol search)は、通常の検索と似ていますが、検索の境界がシンボルの境界にマッチしていなければなりません。シンボルの意味は、メジャーモードのコンテキストに依存しており、Emacs LispモードでのLispシンボルのように、通常はソースコードのトークンを参照します。たとえばLispシンボルforward-wordをインクリメンタルなシンボル検索すると、これはisearch-forward-wordにはマッチしません。そのため、この機能は主にソースコードの検索に有用です。

M-s _

インクリメンタル検索がアクティブのとき、シンボル検索モードに切り替えます(isearch-toggle-symbol)。非アクティブのときは、前方へのインクリメンタルなシンボル検索を開始します(isearch-forward-symbol)。

M-s .

ポイントの近くにあるシンボルを、検索文字列の初期値に追加して、前方へのインクリメンタルなシンボル検索を開始します。

M-s _ RET symbol RET

symbolにたいして、前方への非インクリメンタルな検索をします。

M-s _ C-r RET symbol RET

symbolにたいして、後方への非インクリメンタルな検索をします。

前方へのインクリメンタルなシンボル検索を開始するには、M-s _ (ポイントの近くにシンボルがあるときはM-s .)をタイプします。インクリメンタル検索がまだアクティブでなければM-s _はコマンドisearch-forward-symbolM-s .はコマンドisearch-forward-symbol-at-pointを実行します。プレフィクス数引数nを与えるとM-s .はポイント位置のシンボルにたいして次のn番目の出現位置を検索します。負のnでは後方に検索します。すでにインクリメンタル検索がアクティブのとき、M-s _は検索方向と現在の検索文字列を維持した状態で、シンボル検索に切り替えます(もう一度M-s _をタイプすると、シンボル検索を無効にできます)。インクリメンタルなシンボル検索では、検索み文字列をタイプする間は、検索文字列の先頭がシンボルの先頭にマッチだけが必要であり、C-sのような検索繰り返しキーを使用するまでは検索プロンプトに‘Pending’が表示されます。

非インクリメンタルなシンボル検索は、前方への検索はM-s _ RET、後方への検索はM-s _ C-r RETをタイプします。非インクリメンタル検索では、文字列の先頭と最後が、シンボルの先頭と最後にマッチする必要があります。

シンボル検索コマンドは、character foldingを処理せず、lax whitespace matching(lax space matchingを参照してください)が効果をもたないように切り替えます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.5 正規表現検索

正規表現(regular expression: regexpと略します)とは、文字列にマッチさせるための代替の文字列クラスを示すパターンです。Emacsはregexpにマッチする検索を、インクリメンタル、非インクリメンタルの両方で提供します。正規表現の構文は、次のセクションで説明します。

C-M-s

インクリメンタルなregexp検索を開始します(isearch-forward-regexp)。

C-M-r

逆方向のインクリメンタルなregexp検索を開始します(isearch-backward-regexp)。

regexpにたいするインクリメンタル検索は、C-M-s (isearch-forward-regexpをタイプするか、プレフィクス引数(引数の値は何でもよい)を指定して、C-sを呼び出します。前方へのインクリメンタル検索中は、M-rをタイプします。このコマンドはC-sと同様に、検索文字列をインクリメンタルに読みとりますが、検索文字列に正確に一致するバッファーのテキストを検索するのではなく、検索文字列をregexpとして扱います。検索文字列にテキストを追加する度に、regexpは長くなり、新しいregexpを検索します。後方へのregexp検索には、C-M-r(isearch-backward-regexp)またはプレフィクス引数を指定したC-rを使います。後方へのインクリメンタル検索中はM-rを使います。

通常のインクリメンタル検索の特別なキーシーケンス(インクリメンタル検索の特別な入力を参照)は、インクリメンタルなregexp検索でも同じようなことを行います。たとえば検索開始直後にC-sをタイプすると、最後に行ったインクリメンタル検索で使ったregexpで、前方検索を行います。インクリメンタルなregexpと非regexp検索は、独立したデフォルトを持ちます。これらは別のサーチリングも持っており、これにはM-pM-nでアクセスできます。サーチリングに保存される検索regexpの最大数は、regexp-search-ring-maxの値により決定され、デフォルトは16です。

通常のインクリメンタル検索とは異なり、インクリメンタルregexp検索は、デフォルトではlax space matchingを使いません。この機能を切り替えるには、M-s SPC (isearch-toggle-lax-whitespace)を使います。そうするとインクリメンタルregexp検索でのSPCは、1つ以上の空白文字の並びにマッチするようになります。変数search-whitespace-regexpは、lax space matchingにたいするregexpを指定します。インクリメンタル検索の特別な入力を参照してください。

通常のインクリメンタル検索とは異なり、インクリメンタルなregexp検索ではcharacter folding(検索中のLaxマッチングを参照してください)を使用できません(インクリメンタルregexp検索の途中で、M-s 'によりcharacter foldingを切り替えた場合、検索は非regexp検索となり、タイプした検索パターンはリテラル文字列として解釈されます)。

インクリメンタルregexp検索では、検索文字列の追加によりカーソルが前に戻され、最初から検索しなおされることがありえます。たとえば検索文字列‘foo’に‘\|bar’を追加すると、カーソルは‘foo’から、それより前にある最初の‘bar’に戻ります。正規表現の構文を参照してください。

前方および後方へのregexp検索は、対照的ではありません。なぜならEmacsでのregexpに対するマッチは常に前方へ処理され、regexpの先頭から開始されるからです。したがって前方へのregexp検索は前方にスキャンし、可能性のある開始位置から前方へとマッチを試みます。後方へのregexp検索は後方へスキャンし、可能性のある開始位置から前方へとマッチを試みます。これらの検索手法はミラーイメージではありません。

regexpにたいする非インクリメンタルな検索は、コマンドre-search-forwardおよびre-search-backwardで行われます。これらのコマンドはM-xから呼び出すか、インクリメンタルregexp検索からのC-M-s RETおよびC-M-r RETで呼び出します。M-xを使用してこれらのコマンドを呼び出した場合は、指定したregexpを厳密に検索するので、case foldingを除くlax-search機能(検索中のLaxマッチングを参照してください)はサポートされません

プレフィクス引数を指定したインクリメンタルregexp検索は、isearch-forwardisearch-backwardのような、通常の文字列を検索します。インクリメンタル検索を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.6 正規表現の構文

このセクション(および、マニュアル全般)では、ユーザーが通常使う正規表現の機能を説明します。主にLispプログラムで使用される追加の機能については、Regular Expressions in The Emacs Lisp Reference Manualを参照してください。

正規表現は、いくつかの特殊文字(special constructs)と、それ以外の普通の文字からなる構文を持ちます。通常の文字はそれと同じ文字にマッチし、それ以外の文字にはマッチしません。特殊文字は、‘$^.*+?[\’です。文字‘]’は、文字候補を終了させる場合は特殊文字です(以下参照)。文字‘-’は、文字候補の中では特殊文字です。正規表現の中に現れるその他の文字は、前に‘\’がついてない限り普通の文字です(Lispプログラム内で正規表現を使う場合、‘\’は2つ記述しなければなりません。このセクションの最後にある例を参照してください)。

たとえば‘f’は特殊文字ではなく普通の文字なので、正規表現中の‘f’は文字列‘f’にマッチし、他の文字列にはマッチしません(文字列‘ff’にはマッチしません)。同様に正規表現中の‘o’は、‘o’だけにマッチします(大文字小文字を区別しない場合、これらのregexpは‘F’や‘O’にもマッチしますが、これを例外としてではなく、“同じ文字列”を一般化したものと考えます)。

2つの正規表現abを結合できます。結合した結果は、aが先頭の適当な部分に一致して、bが残りの部分に一致する正規表現となります。些細な例としては、‘f’と‘o’という正規表現を結合すると、正規表現‘fo’となり、これは文字列‘fo’だけにマッチします。ここまでは普通です。これより複雑ことを行うには、特殊文字を使う必要があります。以下にリストを示します。

. (ピリオド)

これは改行文字以外の任意の1文字にマッチする特殊文字です。たとえば正規表現‘a.b’は、最初が‘a’で最後が‘b’の3文字の文字列にマッチします。

*

単独では使用されません。これは接尾演算子で、前の正規表現の任意の回数、可能な限り多くの回数を含めた繰り返しを意味します。したがって‘o*’は任意の個数の‘o’にマッチし、‘o’がない場合(0個の場合)も含めてマッチします。

*’は常に可能な限り小さな、前置表現に適用されます。したがって‘fo*’は‘fo’の繰り返しではなく‘o’の繰り返しです。この正規表現は‘f’、‘fo’、‘foo’、...にマッチします。

マッチングにより構成される‘*’は、見つけられるだけの反復回数へと、直ちに処理されます。その後でパターンの残りの部分の処理を続けます。これが失敗すると、バックトラッキングが発生します。‘*’の反復回数をいくつか捨てて、パターンの残りの部分がマッチするように構成を変更します。たとえば文字列‘caaar’にたいして‘ca*ar’をマッチさせる場合、まず最初に‘a*’を、3つすべての‘a’にマッチさせます。しかしパターンの残りの部分は‘ar’ですが、マッチさせるために残っているのは‘r’だけなので、このマッチは失敗します。かわりに‘a*’を2つの‘a*’だけにマッチさせます。この選択により、regexpの残りの部分のマッチが成功します。

+

これは‘*’と同様に接尾演算子ですが、前置表現に最低1回マッチしなければならない点が異なります。したがって‘ca+r’は‘car’、‘caaaar’にマッチしますが、‘cr’にはマッチしません。一方‘ca*r’は、これら3つすべての文字列にマッチします。

?

これは‘*’と同様に接尾演算子ですが、前置表現が1回出現するか、出現しないかいずれかという点が異なります。したがって‘ca?r’は、‘car’または‘cr’のいずれかになります。

*?, +?, ??

これらは上述した演算子の、非貪欲(greedy)なタイプの演算子です。通常の演算子‘*’、‘+’、‘?’は、regexpがマッチする、できる限り長いマッチを行います。しかしこれらの演算子に‘?’を後置すると、できる限り短いマッチを行います。

したがって‘ab*’と‘ab*?’は、両方とも文字列‘a’と文字列‘abbbb’にマッチしますが、文字列‘abbb’にマッチさせたとき、‘ab*’は文字列全体(有効な最長マッチ)にマッチしますが、‘ab*?’は‘a’(有効な最短マッチ)だけにマッチします。

非貪欲な演算子は、与えられた開始位置から開始される、できるだけ短い文字列にマッチします。前方検索では、利用できる一番最初の開始位置は、常にカーソルの位置となります。したがって末尾が改行のテキスト‘abbab’にたいして‘a.*?$’を検索すると、文字列全体にマッチします。これはマッチが最初の‘a’から開始されので、マッチさせることができるのです。

\{n\}

これはn回の繰り返しを指定する接尾演算子です。つまり前置される正規表現に、正確にn回連続でマッチしなければなりません。たとえば‘x\{4\}’は、文字列‘xxxx’だけにマッチします。

\{n,m\}

これはn回からm回の繰り返しを指定する接尾演算子です。つまり前置される正規表現が、最低n回、最大m回マッチしなければなりません。mが省略されたときは、マッチ回数の上限はありませんが、前置される正規表現は少なくともn回マッチしなければなりません。
\{0,1\}’は、‘?’と同じです。
\{0,\}’は、‘*’と同じです.
\{1,\}’は、‘+’と同じです。

[ … ]

これは‘[’で始まり‘]’で終わる、文字集合(character set)です。

もっとも簡単なケースでは、2つのカッコの間に指定された文字が、マッチできる文字集合となります。したがって‘[ad]’は1つの‘a’か1つの‘d’にマッチし、‘[ad]*’は‘a’と‘d’からなる任意の文字列にマッチします(空の文字列を含む)。結果として‘c[ad]*r’は、‘cr’、‘car’、‘cdr’、‘caddaar’、...にマッチします。

文字集合には、開始文字と終了文字の間に‘-’を記述することにより、文字の範囲を含めることもできます。したがって‘[a-z]’は、ASCII小文字となります。文字の範囲と特定の文字の指定を混ぜることもできます。‘[a-z$%.]’は任意のASCII小文字と‘$’、‘%’、‘.’にマッチします。別の例としては、‘[α-ωί]’はギリシャ文字の小文字すべてにマッチします。

いくつかの特別な文字クラス(character classes)を、文字集合に含めることもできます。文字の候補を含む文字クラスを‘[:’と‘:]’で囲んで指定します。たとえば‘[[:alnum:]]’は、任意のアルファベットと数字にマッチします。文字クラスのリストは、Char Classes in The Emacs Lisp Reference Manualを参照してください。

文字集合に‘]’を含めるには、それを最初に記述しなければなりません。たとえば‘[]a]’は、‘]’または‘a’にマッチします。文字集合に‘-’を含めるには、‘-’を文字集合の最後に記述しますが、範囲の先頭や後にも記述できます。したがって‘[]-]’は、‘]’と‘-’の両方にマッチします。

文字集合に‘^’を含めるには、集合の最初以外に記述します(最初に記述した場合、補集合を指定したことになります。以下を参照してください)。

大文字小文字を区別しない検索で文字の範囲を使う場合、範囲の先頭と最後を、大文字だけ、または小文字だけで記述するか、先頭と最後をアルファベット以外で記述するべきです。‘A-z’のような大文字小文字を混成した範囲指定は不正な定義で、Emacsの将来のバージョンで変更されるかもしれません。

[^ … ]

[^’は文字の補集合complemented character setを開始します。つまり指定された文字以外がマッチします。したがって‘[^a-z0-9A-Z]’は、ASCII文字と数字以外にマッチします。

^’は文字集合で最初以外で使用された場合、特別な意味をもちません。‘^’に続く文字は、先頭にあるものとして扱われます(いいかえると‘-’と‘]’は、ここでは特別な意味をもちません)。

もしマッチしない文字として改行が記述されていなければ、文字の補集合を改行にマッチさせることができます。これはgrepのようなプログラムにおける、regexpにたいする処理とは対照的です。

^

これは空文字列、ただしテキストの行頭だけにマッチする特殊文字です。それ以外ではマッチに失敗します。したがって‘^foo’は行の先頭にある‘foo’にマッチします。

歴史的な互換性により、この意味での‘^’の使用は、正規表現の先頭か、‘\(’または‘\|’の後に記述された場合に限ります。

$

^’と似ていますが、行末だけにマッチします。したがって‘x+$’は、行末にある1つ以上の‘x’にマッチします。

歴史的な互換性により、この意味での‘$’の使用は、正規表現の最後か、‘\)’または‘\|’の後に記述された場合に限ります。

\

これには2つの機能があります。まず特殊文字(‘\’を含む)をクォートすることと、追加の特別な構成を導入することです。

\’は特殊文字をクォートするので、正規表現中の‘\$’は‘$’だけにマッチし、‘\[’は‘[’だけにマッチします。

\’で始まる特別な構成については、以下のセクションを参照してください。

注意: 歴史的な互換性から、特殊文字はそれが特殊な意味をもたないようなコンテキストで使用された場合は、通常の文字として扱われます。たとえば‘*foo’は、‘*’が特殊文字として動作するための前置された表現がないので、普通の文字として扱われます。このような振る舞いに依存することは、よい習慣ではありません。特殊文字を記述する場合、それがどこに記述されようとクォートするべきです。

文字集合の候補中では‘\’は特別ではなく、‘-’と‘]’のもつ特別な意味を除去することはありません。したがって、これらの文字が特別な意味をもたないような場所にあるときは、これらの文字をクォートすべきではありません。これでは明確ではないかもしれません。これらの特殊文字が特別な意味をもつ場所にあるとき、バックスラッシュを前置することによりクォートされるのです。たとえば‘[^\]’(Lispの文字記法では"[^\\]")は、バックスラッシュ以外の任意の一文字にマッチします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.7 正規表現でのバックスラッシュ

多くの場合、任意の文字を伴う‘\’はその文字だけに一致します。しかしいくつか例外があって、‘\’で始まる2文字のシーケンスが、特別な意味を持つ場合があります。シーケンス内の2文字目にくる文字は、単独で使った場合には普通の文字として扱われるものです。以下は‘\’の構成の表です。

\|

選択肢を指定します。2つの正規表現abの間に‘\|’を記述すると、それはaまたはbのいずれかにマッチする表現を形成します。これはまずaとのマッチを試み、失敗した場合にbとのマッチを試みます。

したがって‘foo\|bar’は、‘foo’または‘bar’のいずれかにマッチし、それ以外の文字列にはマッチしません。

\|’は、周囲の一番大きな表現に適用されます。‘\|’のグループ化の能力に制限をかけることができるのは、周囲の‘\( … \)’によるグループ化だけです。

複数の‘\|’使用を処理するための、完全なバックトラッキング能力が存在します。

\( … \)

3つの目的のためのグループ化構成です:

  1. 他の操作に使うために、一連の選択肢‘\|’を括ります。したがって‘\(foo\|bar\)x’は、‘foox’または‘barx’のいずれかにマッチします。
  2. 接尾演算子‘*’、‘+’、‘?’を適用できるように、複雑な正規表現を括ります。したがって‘ba\(na\)*’は、‘bananana’のように、(0個以上の)文字列‘na’にマッチします。
  3. あとで参照できるように、マッチした部分文字列を記録します。

この最後の使い方は、カッコでグループ化することが重要なのではありません。これは‘\\( … \\)構成の、2番目の意味とは異なる機能です。実際には、これら2つの機能が衝突することは、通常はありません。もし衝突するようなら、以下で説明する、shy(内気)なグループ化を使うことができます。

\(?: … \)

マッチした部分文字列を記録しない、shy(内気)なグループ化を指定します。マッチした部分文字列は、‘\d’により後方参照できません(以下参照)。この機能は正規表現を機械的にまとめるときに役立ちます。これにより後方参照するためのグループにたいする番号づけに影響することなく、文法的な目的によるグループ化を行うことができます。

\d

d番目に‘\( … \)’構成にマッチしたテキストと同じテキストにマッチします。これは後方参照(back reference)と呼ばれます。

最後の‘\( … \)’構成の後で、マッチ処理はこの構成にマッチしたテキストの最初と最後を記録します。そして正規表現の後の部分で‘\’の後に数字dを使うことにより、d番目の‘\( … \)’構成にマッチしたテキストと同じテキストにマッチさせることができます。

正規表現に記述された最初の9つの‘\( … \)’にマッチしたテキストは、正規表現で開きカッコが出現した順に、1から9までの数字が割り当てられます。そのため‘\1’から‘\9’を使うことにより、‘\( … \)’構成にマッチした、対応するテキストを参照することができます。

たとえば‘\(.*\)\1’は改行を含まない、前半と後半が同一の文字列にマッチします。‘\(.*\)’は、そのテキストが何であろうと前半にマッチしますが、‘\1’は前半と正確に同じテキストにマッチしなければなりません。

もし特定の‘\( … \)’構成が1回以上マッチする場合(これは‘*’が後置されているとき簡単に発生します)、最後のマッチだけが記録されます。

\`

空の文字列にマッチしますが、文字列またはバッファー(またはアクセスできる部分)の先頭に限定されます。

\'

空の文字列にマッチしますが、文字列またはバッファー(またはアクセスできる部分)の最後に限定されます。

\=

空の文字列にマッチしますが、ポイント位置に限定されます。

\b

空の文字列にマッチしますが単語の先頭または最後に限定されます。したがって‘\bfoo\b’は、区切られた単語‘foo’にマッチします。‘\bballs?\b’は、別々の単語‘ball’または‘balls’にマッチします。

\b’は、そこにどんなテキストが出現しようと、バッファーの先頭または最後にもマッチします。

\B

空の文字列にマッチしますが、単語の最初と最後以外にマッチします。

\<

空の文字列にマッチしますが、単語の先頭に限定されます。‘\<’は単語の構成文字が続く場合に限り、バッファーの先頭にマッチします。

\>

空の文字列にマッチしますが、単語の最後に限定されます。‘\<’は内容が単語の構成文字で終わる場合に限りバッファーの最後にマッチします。

\w

任意の単語構成文字にマッチします。どの文字が該当するかは、構文テーブル(syntax table)により決定されます。Syntax Tables in The Emacs Lisp Reference Manualを参照してください。

\W

単語構成文字以外の任意の文字にマッチします。

\_<

空の文字列にマッチしますが、シンボルの先頭に限られます。シンボルは1文字以上のシンボル構成文字からなります。シンボル構成文字は、‘w’と‘_’の構文をもつ文字です。‘\_<’はシンボル構成文字が続く場合に限り、バッファーの先頭にもマッチします。単語にたいしては、構文テーブル(syntax table)が、どの文字がシンボル構成文字かを判断します。

\_>

空の文字列にマッチしますが、シンボルの最後に限定されます。‘\_>’は内容がシンボル構成文字で終わる場合に限り、バッファーの最後にマッチします。

\sc

構文がcである、任意の文字にマッチします。ここでcとは、特定の構文クラスを表す文字です。したがって‘w’は単語構成文字、‘-’または‘ ’は空白文字、‘.’は通常の区切り文字、などとなります。Syntax Class Table in The Emacs Lisp Reference Manualを参照してください。

\Sc

構文がc以外の、任意の文字にマッチします。

\cc

カテゴリーcに属する、任意の文字にマッチします。たとえば‘\cc’は中国文字、‘\cg’はギリシャ文字にマッチします。既知のカテゴリーについての説明は、M-x describe-categories RETをタイプしてください。

\Cc

カテゴリーc属さない、任意の文字にマッチします。

単語と構文に関係する構成は構文テーブルのセッティングにより制御されます。See Syntax Tables in The Emacs Lisp Reference Manual.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.8 正規表現の例

以下にregexpの例を示します。これはEmacsがセンテンスの最後(末尾の空白は含まない)を認識するために、デフォルトで使用するregexp(たとえば変数sentence-end-base)と似ています。

[.?!][]\"')}]*

これには2つの連続する部分があります。1つは‘.’、‘?’、‘!’にマッチする文字です。もう1つは閉じカッコ、クォート、カッコの0回以上の繰り返しです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.9 検索中のLaxマッチング

あなたは通常、タイプした文字と、検索されるテキストの間にある、特定の瑣末な違いを、検索コマンドが無視することを望むでしょう。たとえば長さが異なる空白文字シーケンスは通常、等しいとみなされ、大文字小文字の違いは通常問題にならない、などです。これは等価文字(character equivalence)として知られています。

このセクションではEmacsのlax search(緩い検索)機能と、それを必要に応じて調整する方法について説明します。

デフォルトでは、検索コマンドはlax space matching(緩いスペースマッチング)を行います。これはスペースおよび一連のスペースは、テキスト中の1つまたはそれ以上の空白文字にマッチします(インクリメンタルregexp検索は別のデフォルトをもちます。正規表現検索を参照してください)。したがって‘foo barは‘foo bar、‘foo  bar、‘foo   bar、...にマッチします(‘foobar’にはマッチしません)。正確にいうと、Emacsは検索文字列中の一連のスペースを、変数search-whitespace-regexpで指定された正規表現にマッチさせます。たとえばスペースを一連の改行とスペースにマッチさせるには、変数に‘"[[:space:]\n]+"’をセットします。この変数のデフォルト値は、そのバッファーのメジャーモードに依存します。ほとんどのメジャーモードは、スペース、タブ、フォームフィード文字を空白文字としてクラス化します。

空白文字を正確にマッチさせたい場合は、インクリメンタル検索中にM-s SPC (isearch-toggle-lax-whitespace)とタイプすることにより、lax space matchingをオフに切り替えることができます。もう1度M-s SPCとタイプすると、lax space matchingふぁオンに切り替わります。すべての検索でlax space matchingを無効にするには、search-whitespace-regexpnilに変更します。これにより検索文字列の中のスペースは、正確に1つのスペースにマッチするようになります。

Emacsでの検索では、検索文字列を小文字で指定した場合、デフォルトでは検索するテキストの大文字小文字は区別されません。したがって‘foo’を検索すると、‘Foo’や‘fOO’もマッチします。regexp、特に文字集合でも同様に振る舞います。つまり‘[ab]’は、‘a’、‘A’、‘b’、‘B’もマッチします。この機能はcase foldingとして知られており、これはインクリメンタル検索と非インクリメンタル検索の両方でサポートされています。

検索文字列のどこかに大文字があると、検索はcase-sensitive(大文字小文字を区別する)になります。したがって‘Foo’を検索すると、‘foo’や‘FOO’は検索されません。これは正規表現検索でもリテラル文字列検索と同様に適用されます。検索文字列から大文字を削除すると、効果はなくなります。変数search-upper-caseがこれを制御します。この変数が非nilの場合、検索文字列の中の大文字は検索をcase-sensitiveにします。これをnilにセットすることにより、大文字によるこの効果は無効になります。この変数のデフォルト値は検索文字列中に大文字があれば検索をcase-sensitiveにして、検索文字列にyankするテキスト(インクリメンタル検索でのyankを参照)を小文字にする(そうすればデフォルトで検索がcase-insensitiveになる)not-yanksです。

変数case-fold-searchnilをセットすると、すべての文字は大文字小文字を含めて、完全にマッチしなければなりません。これはバッファーごとの変数で、変数の変更はデフォルト値を変えない限り、通常はカレントバッファーだけが影響を受けます。ローカル変数を参照してください。これは置換コマンド(置換コマンドを参照してください)や、ミニバッファーのヒストリー検索(ミニバッファーヒストリーを参照してください)を処理する、非インクリメンタル検索にも適用されます。

インクリメンタル検索でM-c、またはM-s c (isearch-toggle-case-fold)とタイプすると、検索が大文字小文字を区別するかが、切り替わります。この効果は、現在の検索を超えて引き継がれませんが、カレントの検索にたいして大文字を追加・削除したときの効果をオーバーライドします.

特定のコマンドや操作にたいする検索やマッチングにおいて、大文字小文字の区別を制御する変数がいくつかあります。たとえばtags-case-fold-searchは、find-tagでの大文字小文字の区別を制御します。これらの変数を探すには、M-x apropos-variable RET case-fold-search RETとタイプしてください。

case foldingでは、文字の大文字小文字の違いを無視するので、大文字は小文字にマッチし、その逆もマッチします。case foldingを一般化したものがcharacter foldingで、これは類似した文字間の違いの、より広いクラスを無視します。たとえばcharacter foldingでは、文字aäáのようなアクセント付きの類似文字にもマッチし、これらの変種を区別するための特殊記号も無視します。加えてaは、aに似ている他の文字や、U+249C PARENTHESIZED LATIN SMALL LETTER Aや、U+2100 ACCOUNT OF(これは小さいcの上に小さいaがあるような外観をもちます)のような、文字のグラフィカルな外観の一部にaをもつ文字にもマッチします。同様にASCIIのダブルクォート文字"は、ダブルクォートの変種としてUnicode標準で定義されている、他のすべての変種にマッチします。最後に、character foldingにより、1つ以上の文字シーケンスは違う長さの他の文字にもマッチするようになります。たとえば2つの文字ffは、U+FB00 LATIN SMALL LIGATURE FFにマッチします。文字シーケンスはまったく同じではありませんが、character foldingでのマッチはequivalent character sequences(等価文字シーケンス)として知られています。

一般的にEmacsの検索コマンドは、デフォルトでは等価な文字シーケンスのマッチのためにcharacter foldingを行ないません。変数search-default-modechar-fold-to-regexpにカスタマイズすることにより、この振る舞いを有効にできます。必要に応じて検索を調整するを参照してください。インクリメンタル検索では、M-s ' (isearch-toggle-char-fold)とタイプすることによりcharacter foldingが切り替わりますが、これはその検索だけです(置換コマンドは別のオプションによる異なるデフォルトをもちます。置換コマンドとLaxマッチを参照してください)。

デフォルトではäのような文字の明示的な変種を検索文字列の一部としてタイプしても、それはaのようなベース文字とはマッチしません。しかし変数char-fold-symmetrictにカスタマイズすれば、検索コマンドは等価な文字を同一に扱い、検索文字列内での等価な文字集合の使用により、検索するテキスト内の等価な文字を検索するので、アクセントつきの文字äは文字aと同じようにáのようなすべての変種にもマッチします。

カスタマイズ可能な変数char-fold-includeを使用して新たなfoldingを追加したり、カスタマイズ可能な変数char-fold-excludeを使用して既存のfoldingを削除できます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.10 置換コマンド

Emacsは検索と置換を行うコマンドをいくつか提供します。単純なM-x replace-stringコマンドに加えて、出現する検索パターンごとに置換するかを問い合わせるM-% (query-replace)も提供します。

置換コマンドは通常、ポイント位置からバッファーの最後までのテキストにたいして処理を行います。リージョンがアクティブのときは、リージョンにたいして処理を行います(マークとリージョンを参照してください)。基本的な置換コマンドは1つの検索文字列(またはregexp)を、1つの置換文字列で置き換えます。コマンドexpand-region-abbrevsを使用して、複数の置換を並行して処理することが可能です(abbrev展開の制御を参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.10.1 無条件の置換

M-x replace-string RET string RET newstring RET

すべてのstringnewstringで置換します。

ポイントの後にある‘foo’のすべてのインスタンスを‘bar’に置換するには、コマンドM-x replace-stringに2つの引数‘foo’と‘bar’を指定します。置換はポイントの後だけで発生するので、バッファー全体を置換したい場合は、最初にバッファーの先頭に移動しなければなりません。バッファーの最後までのすべてが置換されます。置換をバッファーの一部に制限したいときは、そのリージョン部分をアクティブにします。リージョンがアクティブのときは、置換はそのリージョンに制限されます(マークとリージョンを参照してください)。

replace-stringが終了したとき、ポイントは最後に置換された位置に留まります。以前のポイント位置(replace-stringコマンドを実行した場所)はマークリングに追加されるので(マークは非アクティブ)、C-u C-SPCで戻ることができます。マークリングを参照してください。

プレフィクス引数を指定すると、置換対象は単語単位に制限されます。

置換コマンドでのcase-sensitivity(大文字小文字の区別)とcharacter foldingについては、置換コマンドとLaxマッチを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.10.2 正規表現の置換

M-x replace-stringコマンドは、正確にマッチする単一の文字列を置換します。同様なコマンドM-x replace-regexpは、指定した正規表現パターン(正規表現の構文を参照してください)にマッチするすべてを置換します。

M-x replace-regexp RET regexp RET newstring RET

regexpにマッチするすべてをnewstringで置換します。

replace-regexpでは、newstringが定数である必要はありません。regexpにマッチした全体、または部分を参照することができます。newstringでの‘\&’は、置換されるマッチ全体を表します。newstringでの‘\d’(dは1から始まる数字)は、regexp内でカッコでグループ化されたものの、d番目にマッチします(これは“後方参照(back reference)と呼ばれます”)。‘\#’は、このコマンドですでに置換された件数を10進数で参照します。最初の置換では‘\#’は‘0’で、2番目の置換では‘1’、...のようになります。たとえば、

M-x replace-regexp RET c[ad]+r RET \&-safe RET

これは‘cadr’を‘cadr-safe’に、‘cddr’を‘cddr-safe’に置き換えます。

M-x replace-regexp RET \(c[ad]+r\)-safe RET \1 RET

これは逆向きの置換をします。置換するテキストに‘\’を含めるときは、‘\\’と入力しなければなりません。

置換する文字列の一部を毎回手入力したいときは、置換文字列で‘\?’を使用します。すると置換ごとにミニバッファーで置換文字列を編集できます(ポイント位置は‘\?’を記述した場所です。)

このサブセクションの残りの部分は、Lispの知識が必要となる特別な処理を念頭に書かれています。大半の読者はスキップしても構いません。

置換文字列の一部を計算するために、Lisp式を使うことができます。これを行うには、置換文字列の中で、‘\,’に続けてLisp式を記述します。各置換において式の値が計算され、それをクォートされていない文字列に変換します(もし文字列の場合は、その文字列の内容が使われることを意味します)。そしてそれを置換文字列内で、式が記述された場所に使用します。もし式がシンボルのときは、シンボル名と、置換文字列中のシンボル名の後にあるの間に1つスペースは、両方シンボルの値に置換されます。

このような式の中では、いくつかの特別なシーケンスを使うことができます。式の中での‘\&’や‘\d’は、通常のようにマッチした文字列全体と、部分マッチした文字列を参照します。dには複数桁の数字を記述でき、カッコでグループ化されたd番目の正規表現がマッチしなかったとき、‘\d’はnilになります。‘\#&’と‘\#d’を使って、それらのマッチを数字で参照することもできます(これはマッチまたは部分マッチが数字書式の場合に有効です)。ここでの‘\#’も、すでに置換された数を意味します。

たとえば‘x’と‘y’の入れ替えは、以下の方法で行うことができます:

M-x replace-regexp RET \(x\)\|y RET
\,(if \1 "y" "x") RET

\,’により置換する文字列を計算するには、format関数が便利なときがあります(Formatting Strings in The Emacs Lisp Reference Manualを参照してください)。たとえば73列目から80列目(もしそこに何もなければ)に、‘ABC00042’のような連番を振りたいときは、以下を使うことができます。

M-x replace-regexp RET ^.\{0,72\}$ RET
\,(format "%-72sABC%05d" \& \#) RET

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.10.3 置換コマンドとLaxマッチ

このサブセクションではlaxマッチに関する置換コマンドの振る舞いと、それをカスタマイズする方法を説明します。一般的には、ほとんどの置換は、それと同等な検索コマンドに比べて、デフォルトではより厳密なマッチを行ないます。

インクリメンタル検索とは異なり、置換コマンドはデフォルトではlax space matching(緩いスペースマッチング)を行いません(lax space matchingを参照してください)。置換でlax space matchingを有効にするには、変数replace-lax-whitespaceを非nilに変更してください(これはEmacsが置換文字列ではなく、置換するテキストを検索する方法だけに影響を与えます)。

query-replace-regexpがパターンを検索するときlax whitespace matchingを使うかどうかを制御するのは、それに対応する変数replace-regexp-lax-whitespaceです。

置換コマンドの最初の引数がすべて小文字の場合、置換のための検索において大文字小文字の違いを無視します。これはcase-fold-searchsearch-upper-caseがいずれも非nilの場合です。search-upper-case (search-upper-caseを参照)がnilなら、検索が大文字小文字を無視するかどうかは、コマンドの1つ目の引数が小文字かどうかと無関係にcase-fold-search単独で決定されます。case-fold-searchnilにセットすると、すべての検索において常に大文字小文字の違いが有効になります。

さらにnewstringのすべて、または一部が小文字の場合、置換コマンドは大文字小文字が出現するパターンを維持しようと試みます。したがって以下のコマンド、

M-x replace-string RET foo RET bar RET

は小文字の‘foo’を小文字の‘bar’で置換し、すべて大文字の‘FOO’を‘BAR’、そして最初が大文字の‘Foo’を‘Bar’に置換します。(これら3つの候補、すなわち小文字、すべて大文字、先頭が大文字は、replace-stringが認識できる唯一のパターンです)。

置換文字列に大文字が使われている場合、テキストが挿入されるときは、常に大文字のままとなります。大文字が最初の引数で使用されている場合、大文字小文字の変換なしで、2番目の引数に与えられたとおりに置換されます。同様にcase-replacecase-fold-searchの両方がnilにセットされている場合、大文字小文字の変換なしで置換されます。

デフォルトでは置換コマンドは、置換するテキストを探すとき、character folding(character foldingを参照してください)を使用しません。query-replacereplace-stringでのマッチングでcharacter foldingを有効にするには、変数replace-char-foldに非nil値をセットします(このセッティングは、Emacsが置換するテキストを探す方法だけに影響し、置換するテキストには影響を与えません。また、replace-regexpにも影響を与えません)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.10.4 問い合わせつき置換

M-% string RET newstring RET

任意のstringnewstringで置換します。

C-M-% regexp RET newstring RET

regexpにたいする任意のマッチをnewstringで置換します。

foo’を‘bar’に置換するとき、すべてではなく、そのうちのいくつかだけを置換したいときは、M-% (query-replace)を使います。このコマンドは‘foo’を1つずつ検索して、それを置換するかを毎回尋ねます。この問い合わせを別とすれば、query-replacereplace-stringと同様に機能します(無条件の置換を参照してください)。通常のように、case-replaceが非nilのときは、大文字小文字を区別します(置換コマンドとLaxマッチを参照してください)。数引数を指定すると、単語区切り文字で区切られた単語だけを考慮します。負のプレフィクス引数は後方に置換します。

C-M-% (query-replace-regexp)は、regexpの検索と置換を行います。これはquery-replaceのように問い合わせを行う以外は、replace-regexpと同様に機能します。

これらのコマンドで行なった以前の置換を再利用できます。query-replacequery-replace-regexpが検索文字列の入力を求めるプロンプトを表示しているとき、M-pM-nを使用することにより、‘from -> to’という形式で、以前の置換を表示できます。ここでfromは検索パターン、toはそれの置換、これらの間に表示されるセパレータは変数query-replace-from-to-separatorの値により決定されます。望む置換が表示されたら、RETとタイプしてそれを選択します。この変数の値がnilの場合、置換はコマンドヒストリーに追加されず、再利用できません。

これらのコマンドは、カレントのマッチを、フェイスquery-replaceを使ってハイライトします。変数query-replace-highlightnilにセットすることにより、このハイライトを無効にできます。他のマッチのハイライトにはインクリメンタル検索(インクリメンタル検索を参照してください)と同様に、フェイスlazy-highlightが使われます。変数query-replace-lazy-highlightnilにセットすることにより、このハイライトを無効にできます。デフォルトではquery-replace-regexpは、カレントマッチを置換する展開後の文字列を、ミニバッファーに表示します。特別なシーケンス‘\&’および‘\n’を展開せずに維持するには、query-replace-show-replacement変数をカスタマイズしてください。

変数query-replace-skip-read-onlyに非nilがセットされている場合、置換コマンドはread-only(読み取り専用)のテキスト内のマッチを無視します。デフォルトでは、それらを無視しません。

以下は文字列またはregexpにたいするマッチが表示されているときにタイプできる文字です:

SPC
y

マッチをnewstringで置き換えます。

DEL
Delete
BACKSPACE
n

カレントマッチを置換せずに次のマッチへスキップします。

, (カンマ)

カレントマッチを置換して、結果を表示します。そして次に何をするかを文字入力するよう促します。置換がすでに行われているので、この状況ではDELSPCは等価で、どちらも次のマッチへ移動します。

ここでC-r(以下を参照)をタイプして、置換されたテキストを編集できます。 undoコマンド(C-x uとタイプする。Undo(取り消し)を参照されたい)で置換をアンドゥすることもできます。置換を取り消すこともできます。これはquery-replaceを終了させるので、さらに置換を行う場合は、C-x ESC ESC RETで置換を再開しなければなりません(ミニバッファーでのコマンドの繰り返しを参照)。

RET
q

これ以上の置換を行わずに終了します。

. (ピリオド)

カレントマッチを置換してから、これ以上の検索を行わずに終了します。

!

これ以上の問い合わせをせずに、残りのマッチをすべて置換します。

^

前のマッチの位置に戻ります。これは間違えて変更したときや、再検証したい場合に使います。

u

最後の置換をアンドゥ(undo: 取り消し)して、その置換が行われた位置に戻ります。

U

すべての置換をアンドゥして、最初の置換が行われた位置に戻ります。

C-r

再帰編集レベル(recursive editing level)に入ります。これはマッチをnewstringで置換するだけでなく、編集したい場合に使用します。編集を終えたらC-M-cで再帰編集レベルを抜けて、次のマッチを処理します。再帰編集レベルを参照してください。

C-w

マッチを削除してから、C-rと同様に再帰編集レベルに入ります。これはstringを削除してから、テキストを挿入することにより置換を行う場合に使用します。編集を終えたらC-M-cで再帰編集レベルを抜けて、次のマッチを処理します。

e
E

置換文字列をミニバッファーで編集します。RETでミニバッファーを抜けると、カレントマッチをミニバッファーの内容で置換します。この新しい置換文字列は、残りのマッチにたいしても適用されます。

C-l

スクリーンを再描画します。その後でカレントマッチにたいして何を行うか、別の文字をタイプして指定しなければなりません。

Y (大文字)

複数バッファーの置換で、残りのバッファーの、残りのマッチをすべて置換します(これは選択したファイルにたいして問い合わせつきの置換を行う、DiredのQコマンドと似ています)。これはすべての一連の問い合わせにたいして、これ以上のユーザーとの対話なしに“yes”を答えます。

N (大文字)

複数バッファーの置換で、カレントバッファーの残りのマッチを置換せずに、次のバッファーへスキップします。これはカレントバッファーのマッチにたいする問い合わせに“no”を答えて、次のバッファーへと処理を続けます。

C-h
?
F1

上述したオプションの要約を表示します。その後でカレントマッチにたいして何を行うか、別の文字をタイプして指定しなければなりません。

これらのエイリアス文字以外の文字は、query-replaceを終了してから、キーシーケンスの残りの部分を読みとります。したがってC-kとタイプすると、query-replaceを終了してから、行末までをkillします。特に、C-gは単にquery-replaceをexitします。

一度終了したquery-replaceを再開するには、C-x ESC ESCを使います。query-replaceは引数の読み取りにミニバッファーを使っているので、このキーシーケンスで再開させることができます。C-x ESC ESCを参照してください。

オプションsearch-invisibleは、query-replaceが非表示のテキストを扱う方法を決定します。Outline Searchを参照してください。

選択されたファイルにたいして問い合わせつきの置換を行う、DiredのQコマンドについては、ファイルにたいする操作を参照してください。regexpにマッチするファイル名にたいして、ファイル名の変更、ファイルのコピー、ファイルのリンクを行うDiredのコマンドについては、Diredでのファイル名の変更を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.11 その他の検索およびループコマンド

ここでは正規表現にたいするマッチを検索する、その他のコマンドを説明します。これらのコマンドは、パターンに大文字が含まれていないカ、case-fold-searchが非nilのときは、マッチングで大文字小文字を区別しません。常にバッファー全体を検索するmulti-occurmulti-occur-in-matching-buffersをのぞき、これらはすべて、ポイント位置からバッファーの最後まで、リージョンがアクティブなときはそのリージョンにたいして処理を行います。

M-x multi-isearch-buffers

1つ以上のバッファー名の入力を求め(RETで終了)、それらのバッファーにたいして複数バッファーのインクリメンタル検索を開始します(あるバッファーでの検索に失敗すると、次のC-sにより、指定された次のバッファーへと検索を試みます)。プレフィクス引数を指定すると、regexpの入力を求め、regexpにマッチするバッファーにたいして、複数バッファーでのインクリメンタル検索を開始します。

M-x multi-isearch-buffers-regexp

このコマンドはmulti-isearch-buffersと同様ですが、インクリメンタルなregexp検索を行います。

M-x multi-isearch-files

1つ以上のファイル名の入力を求め(RETで終了)、それらのファイルにたいして複数ファイルのインクリメンタル検索を開始します(あるファイルで検索に失敗すると、次のC-sにより、指定された次のファイルへと検索を試みます)。プレフィクス引数を指定すると、regexpの入力を求め、regexpにマッチするファイルにたいして、複数ファイルでのインクリメンタル検索を開始します。

M-x multi-isearch-files-regexp

このコマンドはmulti-isearch-filesと同様ですが、インクリメンタルなregexp検索を行います。

バッファーローカルな変数multi-isearch-next-buffer-functionをセットするいくつかのモード(たとえばChange Logモード)では、複数ファイルにたいするインクリメンタル検索は自動的にアクティブになります。

M-x occur
M-s o

regexpの入力を求め、それへのマッチを含むバッファー内の各行をリスト表示します。プロンプトでM-nをタイプした場合は、前のインクリメンタル検索から検索文字列を再利用できます。マッチするテキストは、matchフェイスを使用してハイライトされます。数引数nを指定すると、そのコンテキストでマッチした各行の、前後n行を表示します。

コンテキスト行のデフォルト行数は、変数list-matching-lines-default-context-linesにより指定されます。list-matching-lines-jump-to-current-lineが非nilのとき、カレント行はフェイスlist-matching-lines-current-line-faceでハイライト表示され、ポイントはその行の最初のマッチの後にセットされます。

インクリメンタル検索がアクティブのときはM-s oを実行して、カレントのサーチリングを使うこともできます。

あなたがタイプしたregexpにたいするマッチは完全な行を含むように拡張され、1つ前のマッチの終了の前から開始するマッチは考慮されないことに注意してください。

*Occur*バッファーでは、エントリーをクリックするか、ポイントをそこに移動してRETをタイプすることにより、検索されたバッファーの対応する位置をvisitします。oC-oはマッチを他のウィンドウに表示します(C-oはそのウィンドウを選択しません)。かわりにM-g M-n (next-error)コマンドを使うことにより、マッチした場所を1つ1つvisitできます(Compilationモードを参照してください)。

*Occur*バッファーでeをタイプすることにより、Occur Editモードに切り替えます。このモードではエントリーにたいする編集結果が、元のバッファーのテキストに適用されます。C-c C-cとタイプすることにより、Occurモードに戻ります。

コマンドM-x list-matching-linesは、M-x occurの別名です。

M-x multi-occur

このコマンドはoccurと同じですが、複数のバッファーを検索する点が異なります。このコマンドは、1つずつバッファー名の入力を求めます。

M-x multi-occur-in-matching-buffers

このコマンドはmulti-occurと似ていますが、visitしているファイル名にマッチする正規表現を指定することにより、検索するバッファーを指定する点が異なります。プレフィクス引数を指定すると、正規表現にマッチするバッファー名となります。

M-x how-many

regexpの入力を求め、バッファーのポイント位置以降に、何個のマッチがあるか表示します。リージョンがアクティブのときは、リージョンにたいして操作を行います。

M-x flush-lines

regexpの入力を求めて、ポイントの後のテキストでマッチを含む各行を削除します。コマンドの終了時には削除したマッチ行の行数をプリントします。

カレント行のポイント以降にマッチする文字列が含まれているときはカレント行を削除します。リージョンがアクティブのときはリージョンにたいして操作を行います。行の一部ににリージョンが含まれていて、さらにマッチの全体がリージョンに含まれているときには行は削除されます。

マッチが行をまたいでいる場合、flush-linesはそれらの行すべてを削除します。このコマンドは行を削除してから、次のマッチを検索します。したがって、1行にマッチ全体と、次の行にまたがるマッチが両方含まれるとき、次の行にまたがるマッチは無視されます。

M-x keep-lines

regexpの入力を求め、ポイント以降にあるテキストにたいして、マッチを含まない行を削除します。ポイントが行の先頭でない場合、このコマンドは常にカレント行を維持します。リージョンがアクティブのときは、リージョンにたいして操作を行います。このコマンドは一部がリージョンに含まれるだけの行は削除しません(行を終端する改行は、その行の一部と判断します)。

マッチが行をまたぐ場合、このコマンドはそれらすべての行を維持します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.12 必要に応じて検索を調整する

このセクションでは、他では説明されていない、その他の検索に関連した機能を説明します。

インクリメンタル検索にたいするデフォルトの検索モードは、変数search-default-modeにより指定されます。この変数には、nilt、または関数を指定できます。nilの場合、デフォルトのモードはcharacter foldingなしのリテラル検索です。しかし、case foldingにたいしてはcase-fold-search、lax-whitespace matchにたいしてはsearch-whitespace-regexpにより決定されます(検索中のLaxマッチングを参照してください)。値がtの場合、インクリメンタル検索のデフォルトはregexp検索になります。デフォルト値には、case foldingとlax-whitespace matchingだけを行なう関数が指定されています。

継続的なインクリメンタル検索でのカレントマッチは、isearchフェイスでハイライトされます。変数search-highlightnilにセットすることにより、このハイライトを無効にできます。

ディスプレーに表示されている、検索文字列にたいするその他のマッチは、lazy-highlightフェイスを使用してハイライトされます。変数isearch-lazy-highlightをセットして、このハイライトを無効にできます。以下はlazy-highlightをカスタマイズする、その他の変数です:

lazy-highlight-initial-delay

可視なマッチをハイライトするのに待機する秒数です。

lazy-highlight-interval

マッチをハイライトする秒数です。

lazy-highlight-max-at-a-time

入力をチェックする前にハイライトする、マッチの最大数です。大きな数を指定するとハイライトに時間を要するかもしれず、その間に検索を継続するためにC-sC-rをタイプしても、それらすべてのマッチのハイライトを終了するまで、Emacsは反応しないでしょう。したがって小さな数を指定することにより、Emacsの反応を改善できます。

isearch-lazy-count

検索プロンプトにカレントマッチ数とマッチ総数を表示します。

lazy-count-prefix-format
lazy-count-suffix-format

これらの2つの変数はisearch-lazy-countの表示にたいするカレントマッチ数とマッチ総数のフォーマットを決定します。

インクリメンタル検索で検索文字列が空のときにRETを入力すると、通常これは非インクリメンタル検索を開始します(実際には、これにより検索文字列の編集が開始され、次のRETで検索を行ないます)。しかし、変数search-nonincremental-insteadnilにセットした場合、検索文字列が空でも、RETのタイプは常にインクリメンタル検索をexitします。

デフォルトではインクリメンタル検索および問い合わせ付き置換コマンドは不可視のテキストにもマッチしますが、そのようなマッチは隠され、不可視のテキストの外にできるだけ早くカレントマッチを移動させます。変数isearch-hide-immediatelynilにカスタマイズした場合、マッチが見つかった任意の不可視テキストは、検索または置換コマンドがexitするまで表示され続けます。

遅い回線で接続されたリモートマシンのディスプレーなど、遅い端末でインクリメンタルな検索をすると、検索によりディスプレーの大きな範囲を再描画しなければならないことが、煩わしくなるかもしれません。Emacsは、遅い端末にたいして特別なディスプレーモードを提供します。これは検索が別の小さなウィンドウをポップアップして、マッチの周辺テキストをそのウィンドウに表示します。小さいウィンドウは早く表示できるので、遅いスピードの影響による煩わしさは軽減されます。変数search-slow-speedは、Emacsがこのディスプレーモードを使用する、ボーレートの下限値を決定します。変数search-slow-window-linesは、Emacsがポップアップして検索結果を表示するウィンドウの行数を制御します(デフォルトは1)。このウィンドウは通常、検索を開始したバッファーを表示するウィンドウの下部にポップアップされますが、search-slow-window-linesの値が負の場合、ウィンドウは上部に配され、search-slow-window-linesの絶対値が表示される行数になります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16 タイプミスを訂正するコマンド

このチャプターでは、編集中に間違いに気付いたときに便利なコマンドを説明します。これらのコマンドの中でもっとも基本的なのは、undoコマンドC-/です(これはC-x uC-_にもバインドされています)。これは1つのコマンドやコマンドの一部(query-replaceの場合など)、または連続するいくつかの文字の挿入を取り消します。連続してC-/を繰り返すと、前へ前へと変更を取り消し、undo情報が利用できる限界までさかのぼって、変更を取り消します。

ここで説明するコマンドとは別に、DEL (delete-backward-char)のような削除コマンドでもテキストを消去できます。これらのコマンドは、このマニュアルの前のチャプターで説明しています。テキストの消去を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.1 Undo(取り消し)

undo(取り消し)コマンドは、バッファーのテキストにたいする最後の変更を無効にします。バッファーはそれぞれ変更を個別に記録しており、undoコマンドは常にカレントバッファーに適用されます。バッファーのレコードにより、バッファーにたいするすべての変更をundoできます。通常、個々の変種コマンドは、undoレコードに個別のエントリーを作成しますが、query-replaceのようないくつかのコマンドは、undo操作に柔軟性をもたせるために、コマンドによる変更を複数のエントリーに分割します。連続した文字の挿入コマンドは、undo操作の冗長性をなくすために、通常1つのundoレコードにまとめられます。

C-/
C-x u
C-_

カレントバッファーのundoレコードの、1エントリーでundoします(undo)。

undoを開始するには、C-/(またはエイリアスのC-_C-x u)をタイプします6。これは一番最近のバッファーにたいする変更を取り消して、バッファーが変更される前の位置にポイントを戻します。連続してC-/(またはそれのエイリアス)を繰り返すと、現在のバッファーにたいする変更を、前へ前へとさかのぼって取り消します。すでに記録されている変更がすべて取り消されているとき、undoコマンドはエラーをシグナルします。

undo以外のコマンドは、undoコマンドの順序性を損ないます。undo以外のコマンドを開始した時点から、undoしてきた一連のundoコマンド全体が、undoレコードとして記録されます。したがってundoした変更を再適用するには、undoの順序性を損なわないようなC-fのようなコマンドをタイプしてから、C-/を1回以上タイプして、undoコマンドをundoしていきます。

以前のundoコマンドを再実行せずにundoを再開したいときは、かわりにM-x undo-onlyを使います。これはundoと同様ですが、すでにundoした変更をredo(再実行)しません。

バッファーをうっかり変更してしまったのに気付いたら、モードラインのアスタリスクが表示されなくなるまでC-/を繰り返しタイプするのが、もっとも簡単な復旧方法です。undoコマンドによりモードラインのアスタリスクが消えたとき、それはバッファーの内容がファイルを最後に読み込んだとき、または保存したときと同じ内容だということを意味します。バッファーを意図して変更したか覚えていないときは、C-/を1回タイプします。最後の変更がundoされたのを確認して、それが意図した変更なのか確かめます。もしそれが意図しない変更だったならundoしたままにします。意図した変更だった場合、上で説明した方法で変更を再実行します。

かわりにM-x revert-bufferを使用して、そのバッファーが最後にvisitされたとき、または最後に保存されたとき以降のすべての変更を破棄できます(バッファーのリバートを参照)。

アクティブなリージョンがあるとき、undo選択的なundo(selective undo)を行います。これはバッファー全体ではなく、リージョンにたいして一番最近の変更をundoします。しかしTransient Markモードがオフのとき(Transient Markモードを無効にするを参照してください)、C-/は、リージョンではなく、常にバッファー全体を操作します。この場合undoコマンドにプレフィクス引数を指定(C-u C-/)することにより、選択的なundoができます。同じリージョンにたいしてさらに変更をundoしたいときは、undoコマンドを繰り返します(プレフィクス引数は必要ありません)。

undoレコードを作らない、特別なバッファーがいくつかあります。それは名前がスペースで始まるバッファーです。これらのバッファーはEmacsにより内部的に使用されており、通常ユーザーが閲覧したり編集しないテキストを保持します。

バッファーにたいするundo情報が大きくなりすぎたとき、Emacsは一番古いレコードを、時々(ガベージコレクション(garbage collection)の間)廃棄します。変数undo-limitundo-strong-limitundo-outer-limitをセットすることにより、どれだけのundo情報を保持するか指定することができます。これらの値はバイト数で指定します。

変数undo-limitは、ソフトリミットをセットします。Emacsはこのサイズに達するまでのコマンドのundoデータを保持します。制限を超えることもあり得ますが、これを超える古いデータは保持しません。デフォルト値は160000です。変数undo-strong-limitは、厳密なリミット(stricter limit)をセットします。この制限を超えるような以前のコマンド(一番最近のコマンドではない)は記憶されません。undo-strong-limitのデフォルト値は240000です。

これらの変数の値にかかわらず、一番最近の変更はundo情報がundo-outer-limit(通常は24,000,000)より大きくならない限り、廃棄されることはありません。もしこれを超えるような場合、Emacsはundoデータを廃棄して、それにたいする警告を発します。これは一番最近のコマンドをundoできない唯一の状況です。これが発生した場合、将来同じことが起こらないようにundo-outer-limitの値を増やすことができます。しかしコマンドがそのような大きなundoデータを作るとは考えられない場合、それは多分バグなので、それを報告すべきです。Reporting Bugsを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.2 テキストの入れ替え

C-t

2つの文字を入れ替えます(transpose-chars)。

M-t

2つの単語を入れ替えます(transpose-words)。

C-M-t

バランスのとれた2つの式を入れ替えます(transpose-sexps)。

C-x C-t

2つの行を入れ替えます(transpose-lines)。

M-x transpose-sentences

2つのセンテンスを入れ替えます(transpose-sentences)。

M-x transpose-paragraphs

2つのパラグラフを入れ替えます(transpose-paragraphs)。

M-x transpose-regions

2つのリージョンを入れ替えます。

2つの文字を入れ違いに入力してしまう間違いはよくありますが、それらが隣接しているときはC-t(transpose-chars)コマンドで訂正できます。通常C-tはポイントの左右にある文字を入れ替えます。行末でこのコマンドを使う場合、最後の文字と改行を入れ替えるのはおそらく無意味なので、C-tは行末の2文字を入れ替えます。このような入れ違いミスにすぐ気付いたときは、C-tだけで訂正できます。すぐに間違いに気付かなかった場合、C-tをタイプする前に、入れ替えて入力してしまった文字の間にカーソルを移動しなければなりません。単語の最後の文字とスペースを入れ替えて入力してしまった場合、そこに戻るには単語移動コマンド(M-fM-bなど)が良い方法です。それ以外では、逆向きの検索(C-r)が最善な方法の場合があります。検索と置換を参照してください。

M-tは、ポイントの前にある単語と、後にある単語を入れ替えます(transpose-words)。このコマンドはポイントより後方、またはポイントがある単語を前方に移動して、ポイントをその後に移動します。文字の間にある区切り文字は移動しません。たとえば‘FOO, BARは、‘BAR FOO,ではなく、‘BAR, FOOに入れ替わります。

C-M-t (transpose-sexps)も似ていますが、これは2つの式(対応が取れたカッコの式を参照してください)、C-x C-t (transpose-lines)は行を入れ替えます。M-x transpose-sentencesM-x transpose-paragraphsはそれぞれセンテンスとパラグラフを入れ替えます。これらのコマンドはM-tと同様に動作しますが、入れ替えを行うテキスト単位が異なります。

入れ替えコマンドに数引数を指定すると、反復回数になります。これは入れ替えコマンドに、ポイントより前(またはポイントがある)の移動させる文字(または単語、式、行)を、何文字(または単語、式、行)後に移動させるか指示します。たとえばC-u 3 C-tは、ポイントの前にある文字を3文字後ろに移動します。つまり‘f∗oobar’は‘oobf∗ar’に変更されます。これはC-tを3回繰り返したのと同じですC-u - 4 M-tはポイントの前にある単語を、後方に単語4つ分移動します。C-u - C-M-tは、引数を指定しないC-M-tの効果を取り消します。

数引数0には特別な意味が割り当てられています(繰り返し回数としては、0に意味がありません)。これはポイントの後ろで終わる文字(または単語、式、行)を、マーク位置で終わる文字(または単語、式、行)と入れ替えます。

M-x transpose-regionsはポイントとマークの間のテキストを、マークリングに最後にpushされた2つのマークの間のテキストと入れ替えます(マークのセットを参照)。プレフィクス数引数を与えるとポイントとマークの間のテキストを、その個数分マークリングを戻ってから連続する2つのマークの間のテキストと入れ替えます。このコマンドは複数の文字(や単語、センテンス、パラグラフ)を一度に行うために最適です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.3 大文字小文字の変換

M-- M-l

最後に入力した単語を小文字に変換します。Meta--はメタとマイナスであることに注意して下さい。

M-- M-u

最後に入力した単語をすべて大文字に変換します。

M-- M-c

最後に入力した単語の先頭を大文字、それ以外を小文字に変換します。

単語の大文字小文字を間違えてタイプするのは、とても一般的な間違えです。そのため、単語の大文字小文字の変換コマンドM-lM-uM-cに負の数引数を指定すると、カーソルを移動しないという特性があります。最後に入力した単語のタイプミスに気付いたら、単に大文字小文字を変換して、タイプを続けることができます。大文字小文字変換コマンドを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

16.4 スペルのチェックと訂正

このセクションでは、1つの単語、またはバッファーの一部のスペルをチェックするコマンドを説明します。これらのコマンドはHunspell、Aspell、Ispell、またはEnchantのうちのいずれかのスペルチェッカープログラムがインストールされている場合だけ機能します。これらのプログラムはEmacsの一部ではありませんが、GNU/Linuxまたは他のフリーなオペレーティングシステムには、通常1つはインストールされています。 Aspell in The Aspell Manualを参照してください。

インストール済みのスペルチェッカープログラムが1つだけなら、Emacsはここで説明するいずれかのコマンドを最初に呼び出した際にそれを見つけるでしょう。複数のスペルチェッカープログラムがインストールされていれば、変数ispell-program-nameをカスタマイズしてどれを使うかを制御できます。

M-$

ポイントがある単語スペルの、チェックと訂正をします(ispell-word)。リージョンがアクティブのときは、リージョンに含まれるすべての単語にたいして行います。

M-x ispell

バッファーにある単語スペルの、チェックと訂正をします。リージョンがアクティブのときは、リージョンに含まれるすべての単語にたいして行います。

M-x ispell-buffer

バッファーにある単語スペルの、チェックと訂正をします。

M-x ispell-region

リージョンにある単語スペルの、チェックと訂正をします。

M-x ispell-message

メールメッセージのドラフト(引用部分を除く)にたいして、単語スペルのチェックと訂正をします。

M-x ispell-change-dictionary RET dict RET

スペルチェッカーのプロセスを再起動して、dictを辞書として使用させます。

M-x ispell-kill-ispell

スペルチェッカーのサブプロセスをkillします。

M-TAB
ESC TAB
C-M-i

ポイントの前にある単語を、スペル辞書をもとに補完します(ispell-complete-word)。

M-x flyspell-mode

スペルミスした単語をハイライトする、Flyspellモードを有効にします。

M-x flyspell-prog-mode

コメントと文字列にたいして、Flyspellモードを有効にします。

ポイントの前または周囲にある単語スペルをチェックしたり訂正するには、M-$ (ispell-word)をタイプします。リージョンがアクティブのときは、リージョン内のすべての単語スペルをチェックします。マークとリージョンを参照してください(Transient Markモードがオフのとき、M-$はリージョンを無視して、常にポイントの前または周囲の単語にたいして動作します。Transient Markモードを無効にするを参照してください)。

同様に、コマンドM-x ispellはリージョンがアクティブのときはリージョン、それ以外のときはバッファー全体にたいしてスペルチェックを行います。コマンドM-x ispell-bufferおよびM-x ispell-regionは、スペルチェックをバッファー全体にたいして行うのか、リージョンにたいして行うかを明示します。このコマンドはバッファー全体をチェックしますが、インデントされているテキストと、以前のメッセージの引用と思われるテキストはチェックしません。メールの送信を参照してください。

これらのコマンドは、正しくないと思われる単語に出会うと、それをどうするかを尋ねます。通常は番号が振られた近い単語(near-misses: 正しくないと思われる単語に似た単語)のリストを表示します。これにたいして1文字をタイプして応答しなければなりません。以下は有効な応答文字です。

数字

今回だけは近い単語の一覧で単語を置き換えます。近い単語には番号が振られており、選択するにはその番号をタイプします。

SPC

その単語を間違いと判断することは変更しませんが、その単語をここでは変更せずスキップします。

r new RET

今回は単語をnewで置き換えます(置換文字列にスペルエラーがないか再スキャンされます)。

R new RET

単語をnewで置き換え、query-replaceを実行します。これによりバッファーの他の箇所の間違えを置換できます(置換にスペルエラーがないか再スキャンされます)。

a

正しくないと思われる単語を正しいものとして受け入れますが、それは今回の編集セッションに限られます。

A

正しくないと思われる単語を正しいものとして受け入れますが、それは今回の編集セッションとそのバッファーに限られます。

i

この単語をプライベートな辞書ファイルに挿入するので、今後(将来のセッションを含めて)はその単語を正しいと認識します。

m

iと同様ですが、辞書の補完情報も指定できます。

u

この単語の小文字バージョンを、プライベートな辞書ファイルに挿入します。

l word RET

wordにマッチする単語を辞書から探します。これらの単語は近い単語の新しいリストになるので、置換で数字をタイプして選択できるようになります。wordにはワイルドカードとして‘*’を使うことができます。

C-g
X

対話的なスペルチェックを終了します(ポイントはチェックされた単語の位置に残されます)。C-u M-$でチェックを再開できます。

x

対話的なスペルチェックを終了します(ポイントはチェックを開始したときの位置に戻ります)。

q

対話的なスペルチェックを終了して、スペルチェッカーのサブプロセスをkillします。

?

オプションの一覧を表示します。

Textモードおよびそれに関連するモードでは、M-TAB (ispell-complete-word)で、スペル訂正にもとづくバッファー内補完を行います。単語の最初の部分を入力してからM-TABをタイプすると、補完一覧が表示されます(ウィンドウマネージャーがM-TABを横取りしてしまう場合は、ESC TABまたはC-M-iをタイプします)。補完対象には番号か文字が振られているので、その番号か文字をタイプして選択します。

1度プロセスが開始されれば、スペルチェッカーのサブプロセスは待機状態で実行を続けるので、一連のスペルチェックコマンドは素早く完了します。プロセスを終了させたいときはM-x ispell-kill-ispellを使います。スペルの訂正を行うとき以外プロセスがCPU時間を使うことはないので、これは通常必要ありません。

スペルチェッカーは、スペルを2つの辞書から探します。それは標準辞書と個人用辞書です。標準辞書は変数ispell-local-dictionaryで指定されます。これがnilのときは、変数ispell-dictionaryで指定されます。両方がnilのとき、スペルプログラムは既定の辞書を使います。コマンドM-x ispell-change-dictionaryは、バッファーにたいする標準辞書をセットしてからサブプロセスを再起動することにより、これにより異なる標準辞書を使うことができます。個人用の辞書は、変数ispell-personal-dictionaryで指定します。これがnilのとき、スペルプログラムは個人辞書を、各スペルチェッカーが指定する既定の場所から探します。

単語の補完には別の辞書が使われます。変数ispell-complete-word-dictは、この辞書のファイル名を指定します。補完辞書は、単語の変化形を検知するためにスペルチェックが使用する、単語にたいするroot語(接辞を含まない語)とaffix語(接辞語)に関する情報を使用できないので、、別の辞書でなければなりません。補完辞書はもたないが、スペルチェック辞書はあもつ言語もいくつかあります。

Flyspellモードは、タイプしたテキストのスペルをタイプ時に自動的にチェックするマイナーモードです。認識できない単語を見つけると、その単語をハイライトします。M-x flyspell-modeとタイプすると、カレントバッファーのFlyspellモードを切り替えます。すべてのTextバッファーでFlyspellモードを有効にするには、text-mode-hookに、flyspell-modeを追加します。フックを参照してください。Flyspellモードは、ユーザーの移動にしたがって各単語をチェックする必要があるので、カーソル移動やスクロールコマンドにより速度低下するかもしれないことに注意してください。タイプしていないテキストや移動と関係ないテキストの自動チェックも行いません。それを行うためには、flyspell-regionflyspell-bufferを使用してください。

Flyspellモードが間違ったスペルの単語をハイライトしているとき、それをmouse-2 (flyspell-correct-word)でクリックして、可能な定性とアクションを表示するメニューを表示できます。加えてC-.、またはESC-TAB (flyspell-auto-correct-word)はポイント位置の単語にたいする可能な訂正を提案し、C-c $ (flyspell-correct-word-before-point)は可能な訂正のメニューをポップアップします。もちろん、間違ったスペルの単語を、常にお好みの方法で手修正できます。

Flyspell Progモードは通常のFlyspellモードと同じように機能しますが、コメントと文字列に含まれた単語だけをチェックします。この機能はプログラムを編集する場合に便利です。M-x flyspell-prog-modeをタイプして、現在のバッファーにたいするこのモードの有効と無効を切り替えます。すべてのプログラミングに関連したモードでこのモードを有効にするには、prog-mode-hookflyspell-prog-modeを追加します(フックを参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

17 キーボードマクロ

このチャプターでは一連の編集コマンドを記録して、後で簡単に繰り返す方法を説明します。

キーボードマクロ(keyboard macro)とは、Emacsのユーザーにより定義される、一連のキー入力からなるコマンドです。たとえばC-n M-d C-dを40回繰り返しタイプしていることに気付いたとしましょう。C-n M-d C-dを行うキーボードマクロを定義して、それを39回以上繰り返すことにより、作業スピードをあげることができます。

キーボードマクロは、コマンドを実行・記録することにより定義します。違う言い方をすると、キーボードマクロの定義では、初回はマクロの定義が実行されるということです。この方法により、頭だけで考えるのではなく、コマンドの影響を目で見ることができます。コマンド列の入力を終了して定義を終了するときは、キーボードマクロが定義されるとともに、入力したコマンド列の影響としてマクロが1回実行されたことになります。その後はマクロを呼び出すことにより、コマンド列全体を実行することができます。

キーボードマクロは、LispではなくEmacsコマンド言語(Emacs command language)で記述されている点が、通常のEmacsコマンドと異なります。しかしEmacsコマンド言語は、高度なことや一般的なことを記述するプログラム言語として、充分にパワフルとはいえません。そのような事項には、Lispを使わなければなりません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

17.1 基本的な使い方

F3

キーボードマクロの定義を開始します(kmacro-start-macro-or-insert-counter)。

F4

キーボードマクロを定義しているときは定義を終了します。それ以外の場合は一番最近のキーボードマクロを実行します(kmacro-end-or-call-macro)。

C-u F3

最後のキーボードマクロを再実行してから、キーをマクロ定義に追加します。

C-u C-u F3

最後のキーボードマクロを再実行せずに、キーをマクロ定義に追加します。

C-x C-k r

リージョンの中の各行の行頭にたいして、最後のキーボードマクロを実行します(apply-macro-to-region-lines)。

C-x (

(旧スタイル)キーボードマクロの定義を開始します(kmacro-start-macro)。プレフィクスキーを与えると最後のマクロにキーを追加します。

C-x )

(旧スタイル)マクロ定義を終了します(kmacro-end-macro)。プレフィクス引数はそのマクロ自体を除外した繰り返し回数として機能します。

C-x e

もっとも最後に定義したキーボードマクロを実行します(kmacro-end-and-call-macro)。プレフィクス引数は繰り返し回数として機能します。

キーボードマクロの定義を開始するには、F3をタイプします。それからはキーを入力して実行を続けますが、それは同時にマクロ定義の一部になります。その間は、モードラインに‘Def’が表示されて、マクロの定義中であることを示します。終了するときはF4 (kmacro-end-or-call-macro)をタイプして、定義を終了します。たとえば、

F3 M-f foo F4

これは1単語前方に移動してから、‘foo’を挿入するマクロを定義します。F3F4は、マクロの一部とはならないことに注意してください。

マクロを定義した後は、F4でそれを呼び出すことができます。上記の例では、それはM-f foo againをタイプしたのと同じ効果をもちます(F4コマンドの2つの役割に注意してください。これはマクロを定義しているときはマクロの定義を終了し、そうでないときは最後のマクロを呼び出します)。F4に数引数‘n’を与えることもできます。これはマクロを‘n’回呼び出すことを意味します。引数に0を与えると、エラーになるか、C-g(MS-DOSではC-BREAK)をタイプするまで、マクロを永久に繰り返します。

上記の例は、キーボードマクロを使った便利なトリックをデモンストレイトする例です。テキストの一定間隔の位置にたいして繰り返し操作を行いたいときは、マクロの一部に移動コマンドを含めます。この例ではマクロの繰り返しにより、連続する単語の後ろに文字列‘foo’を挿入していきます。

キーボードマクロの定義を終了した後でも、C-u F3をタイプすることにより、マクロの定義にキーストロークを追加できます。これはF3に続けてマクロの定義を再タイプするのと同じです。結果として、そのマクロの以前の定義が再実行されることになります。変数kmacro-execute-before-appendnilに変更すると、既存のマクロにキーストロークが追加されるまでは実行されません(デフォルトはt)。最後に実行したキーボードマクロを再実行することなく、定義の最後にキーストロークを追加するには、C-u C-u F3をタイプしてください。

コマンドがミニバッファーから引数を読みとる場合、ミニバッファーにたいする入力は、コマンドと一緒にマクロの一部となります。したがってマクロを再生すると、そのコマンドの引数は入力されたのと同じになります。たとえば、

F3 C-a C-k C-x b foo RET C-y C-x b RET F4

これはカレント行をkillして、バッファー‘foo’にそれをyankした後、元のバッファーに戻ります。

ほとんどのキーボードコマンドは、キーボードマクロの定義で普通に機能しますが、いくつか例外があります。C-g (keyboard-quit)をタイプすると、キーボードマクロの定義が終了します。C-M-c (exit-recursive-edit)は信頼できません。これはマクロの中で再帰編集(recursive edit)を開始したときは期待通りに再帰編集から抜け出しますが、キーボードマクロの呼び出し前に開始された再帰編集を抜け出すには、キーボードマクロからも抜け出す必要があります。同様に、マウスイベントもキーボードマクロで使用できますが。信頼はできません。マクロによりマウスイベントが再生されるときは、マクロを定義したときのマウス位置が使用されます。この効果は予測が困難です。

コマンドC-x C-k r (apply-macro-to-region-lines)は、リージョン内の各行のにたいして、最後に定義されたキーボードマクロを繰り返します。これは1行ずつポイントをリージョン内の行頭に移動してからマクロを実行します。

上記で説明したF3F4に加えて、Emacsはキーボードマクロを定義したり実行するための、古いキーバインドもサポートします。F3と同様にマクロ定義を開始するには、C-x ( (kmacro-start-macro)とタイプします。プレフィクス引数を指定すると、最後のキーボードマクロの定義に追加します。マクロ定義を終了するにはC-x ) (kmacro-end-macro)とタイプします。一番最近のマクロを実行するには、C-x e (kmacro-end-and-call-macro)とタイプします。マクロ定義中にC-x eを入力すると、マクロ定義を終了してからすぐに実行されます。C-x eをタイプした後すぐにeをタイプすることにより、そのマクロを1回以上繰り返すことができます。(マクロの実行に使用されるときの)F4と同様、C-x eには繰り返し回数を引数指定できます。

C-x )に、繰り返し回数を引数として与えることができます。これはマクロを定義した後、すぐにマクロが繰り返されることを意味します。マクロの定義は、定義することによりマクロが実行されるので、最初の1回として数えられます。したがってC-u 4 C-x )は、マクロを3回すぐに追加実行します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

17.2 キーボードマクロリング

すべての定義されたキーボードマクロは、キーボードマクロリング(keyboard macro ring)に記録されます。キーボードマクロリングはすべてのバッファーで共有され、1つだけしかありません。

C-x C-k C-k

リングの先頭にあるキーボードマクロを実行します(kmacro-end-or-call-macro-repeat)。

C-x C-k C-n

キーボードマクロリングを、次のマクロ(古く定義されたもの)にローテートします(kmacro-cycle-ring-next)。

C-x C-k C-p

キーボードマクロリングを前のマクロ(新しく定義されたもの)にローテートします(kmacro-cycle-ring-previous)。

キーボードマクロリングを操作するすべてのコマンドは、同じC-x C-kを使います。これらのコマンドでは、すぐ後にコマンドを実行して繰り返す場合には、互いにC-x C-kプレフィクスを必要としません。たとえば、

C-x C-k C-p C-p C-k C-k C-k C-n C-n C-k C-p C-k C-d

これは、キーボードマクロリングを2つ前のマクロが先頭にくるようにローテートして、3回実行します。次にキーボードマクロリングをローテートして、元は先頭だったマクロを先頭に戻して1回実行します。次にキーボードマクロリングを1つ前のマクロが先頭にくるようにローテートして、それを実行します。そして最後にそれを削除しています。

コマンドC-x C-k C-k (kmacro-end-or-call-macro-repeat)は、マクロリングの先頭にあるキーボードマクロを実行します。もう一度すぐにC-kをタイプすると、マクロを繰り返すことができます。すぐにC-nC-pをタイプすれば、マクロリングをローテートすることができます。

キーボードマクロを定義しているとき、C-x C-k C-kF4と同様に振る舞いますが、すぐ後にタイプされた場合は異なります。このセクションで説明するほとんどのキーバインドは、C-x C-kプレフィクスが必要ない場合があります。たとえば、すぐにC-kをタイプした場合は、マクロを再実行します。

コマンドC-x C-k C-n (kmacro-cycle-ring-next)およびC-x C-k C-p (kmacro-cycle-ring-previous)は、マクロリングをローテートして、次または前のキーボードマクロをリングの先頭に移動させます。新しく先頭となったマクロの定義は、エコーエリアに表示されます。お望みのマクロが先頭にくるまで、すぐにC-nまたはC-pを繰り返しタイプすれば、マクロリングのローテートを続けることができます。新しくマクロリングの先頭にきたマクロを実行するには、単にC-kをタイプします。

Emacsはマクロリングの先頭を、最後に定義されたキーボードマクロとして扱います。たとえば、そのマクロはF4で実行でき、C-x C-k nで名前をつけることができます。

キーボードマクロリングに格納できるマクロの最大数は、カスタマイズ可能な変数kmacro-ring-maxにより決定されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

17.3 キーボードマクロカウンター

キーボードマクロには、それぞれカウンターが割り当てられています。これはマクロの定義を開始したとき0に初期化されます。このカレントカウンター(current counter)の数値をバッファーに挿入することもできます。カレントカウンターの数値は、マクロが呼び出された回数にもとづきます。バッファーにカウンターの値が挿入される度に通常、カウンターは増加します。

カレントカウンターに加えて、前回カレントカウンターが増加またはセットされたときにもっていた値を記録する、前回カウンター(previous counter)も保守します。C-u 0 C-x C-k C-iにより増分値0でカレントカウンターを増加させると、カレントカウンターの値も前回カウンターの値として記録されることに注意してください。

F3

キーボードマクロの定義では、キーボードマクロカウンターの値をバッファーに挿入します(kmacro-start-macro-or-insert-counter)。

C-x C-k C-i

キーボードマクロカウンターの値をバッファーに挿入します(kmacro-insert-counter)。

C-x C-k C-c

キーボードマクロカウンターをセットします(kmacro-set-counter)。

C-x C-k C-a

プレフィクス引数をキーボードマクロカウンターに加えます(kmacro-add-counter)。

C-x C-k C-f

挿入するキーボードマクロカウンターの書式を指定します(kmacro-set-format)。

キーボードマクロを定義しているとき、コマンドF3 (kmacro-start-macro-or-insert-counter)は、キーボードマクロカウンターの現在の値をバッファーに挿入して、カウンターを1増加させます(マクロを定義していないとき、F3はマクロの定義を開始します。基本的な使い方を参照してください)。異なる増分の指定には、数引数を使うことができます。単にプレフィクスC-uを指定すると、前回カウンターの値を挿入して、カレントカウンターの値は変化しません。

例として数字が振られたリストを構築するために、キーボードマクロカウンターを使う方法を見てみましょう。以下のキーシーケンスを考えてください:

F3 C-a F3 . SPC F4

マクロ定義の一部として、現在の行の先頭に文字列‘0. ’が挿入されます。バッファーの他の箇所でF4でマクロを呼び出すと、その行の先頭に文字列‘1. ’が挿入されます。その後に呼び出すと‘2. ’、‘3. ’、...が挿入されます。

コマンドC-x C-k C-i (kmacro-insert-counter)は、F3と同様のことを行いますが、これはキーボードマクロの定義外でも使用できます。キーボードマクロが定義中でなく実行もされていない場合、これはキーボードマクロリングの先頭にあるマクロのカウンター値を挿入および増加します。

コマンドC-x C-k C-c (kmacro-set-counter)は現在のマクロカウンターを、数引数の値にセットします。マクロ内で使用した場合、マクロ実行ごとに処理します。プレフィクス引数に単にC-uを指定した場合、マクロの現在の繰り返し実行おいて、カウンターが最初にもっていた値に、カウンターをリセットします(この繰り返しにおける増加を取り消します)。

コマンドC-x C-k C-a (kmacro-add-counter)は、プレフィクス引数を現在のマクロカウンターに加えます。単にC-uを引数に指定すると、任意のキーボードマクロにより最後に挿入された値に、カウンターをリセットします(通常これを使うときは、最後の挿入は同じマクロによる同じカウンターです)。

コマンドC-x C-k C-f (kmacro-set-format)は、マクロカウンターを挿入するときに使われる書式の入力を求めます。デフォルトの書式は‘%d’で、これはパディングなしの10進数字が挿入されることを意味します。ミニバッファーに何も入力せずにexitすることにより、このデフォルト書式にリセットできます。format関数(この関数はさらに1つの整数の引数をとります)が受け入れる書式文字列を指定できます(Formatting Strings in The Emacs Lisp Reference Manualを参照してください)。ミニバッファーに書式文字列を入力するときは、書式文字列をダブルクォーテーションで括らないでください。

キーボードマクロの定義および実行がされていないときにこのコマンドを使うと、新しい書式はそれ以降のマクロ定義すべてに影響を及ぼします。既存のマクロは、それが定義されたときの書式を使いつづけます。キーボードマクロ定義中に書式をセットすると、そのマクロが定義されている箇所に影響を及ぼしますが、それ以降のマクロには影響を与えません。マクロの実行においては、そのマクロ定義の時点の書式が使われます。マクロの実行中にマクロ書式を変更すると、これは定義中における書式の変更と同様、それ以降のマクロに影響を与えません。

C-x C-k C-fによりセットされた書式は、レジスターに格納された数字の挿入には影響しません。

マクロの繰り返しにおいてレジスターを増加してカウンターとして使う場合、これはキーボードマクロカウンターと同じことです。レジスターに数字を保存するを参照してください。大抵の用途では、キーボードマクロカウンターを使う方が単純です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

17.4 変化のあるマクロの実行

キーボードマクロで、query-replaceのように変更を行うか応答を求める効果を作ることができます。

C-x q

マクロ実行中にこの箇所に到達すると確認を求めます(kbd-macro-query)。

マクロ定義中に問い合わせを行いたい箇所でC-x qをタイプします。マクロ定義中はC-x qは何も行いませんが、後でマクロを実行するとC-x qは実行を続けるか対話的に確認を求めます。

以下はC-x qにたいする有効な応答です:

SPC (またはy)

キーボードマクロの実行を続けます。

DEL (またはn)

マクロのこの繰り返しでの残りの部分をスキップして、次の繰り返しを開始します。

RET (またはq)

マクロのこの繰り返しでの残りの部分をスキップして、これ以上の繰り返しを取り消します。

C-r

マクロの一部ではない編集を行うことができる、再帰編集レベル(recursive editing level)に入ります。C-M-cを使って再帰編集を抜けると、キーボードマクロを続行するか再び確認を求められます。ここでSPCをタイプすると、マクロ定義の残りの部分が実行されます。マクロの残りの部分が期待したように動作するためにポイントとテキストを残すのは、ユーザーの責任です。

C-x qにプレフィクス引数を指定したC-u C-x qは、完全に異なる関数を実行します。これはマクロ定義中およびマクロ実行中の両方で、キーボード入力を読みとる再帰編集に入ります。定義中のときは、再帰編集の中で行った編集はマクロの一部とはなりません。マクロ実行中は、再帰編集により各繰り返しにおいて特別な編集を行う機会が与えられます。再帰編集レベルを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

17.5 キーボードマクロの命名と保存

C-x C-k n

一番最近定義したキーボードマクロに、名前(持続期間はEmacsセッション中)を与えます(kmacro-name-last-macro)。

C-x C-k b

一番最近定義したキーボードマクロを、キーにバインド(持続期間はEmacsセッション中)します(kmacro-bind-to-key)。

M-x insert-kbd-macro

キーボードマクロの定義を、Lispコードとしてバッファーに挿入します。

キーボードマクロを後で使うために保存するには、C-x C-k n (kmacro-name-last-macro)を使って、それに名前を与えることができます。これはミニバッファーを使って名前を引数として読み取り、最後のキーボードマクロの現在の定義を実行するための、名前を定義します(後でこのマクロの定義を追加した場合、その名前のマクロ定義は変更されません)。マクロ名はLispシンボルで、M-xで呼び出せ、global-set-keyでキーにバインドできる有効な名前をつけます。キーボードマクロ以外に定義されている名前を指定すると、エラーメッセージが表示され何も変更はされません。

C-x C-k b (kmacro-bind-to-key)の後に、バインドしたいキーシーケンスを続けることにより、最後のキーボードマクロ(の現在の定義)をキーにバインドすることもできます。グローバルキーマップ(global keymap)の任意のキーシーケンスにバインドできますが、大部分のキーシーケンスはすでに他のバインドをもっているので、キーシーケンスの選択は慎重に行う必要があります。任意のキーマップで既存のバインドをもつキーシーケンスにバインドしようとすると、既存のバインドを置き換える前に確認を求めます。

既存のバインドの上書きに起因する問題を避けるには、キーシーケンスC-x C-k 0からC-x C-k 9と、C-x C-k AからC-x C-k Zを使います。これらのキーシーケンスは、キーボードマクロのバインド用に予約されています。これらのキーシーケンスにバインドするには、キーシーケンス全体ではなく数字か文字だけをタイプすればバインドできます。たとえば、

C-x C-k b 4

これは最後のキーボードマクロをキーシーケンスC-x C-k 4にバインドします。

1度マクロにコマンド名をつければ、その定義をファイルに保存できます。それは他の編集セッションでも使用できます。最初に定義を保存したいファイルをvisitします。次に以下のコマンドを使います:

M-x insert-kbd-macro RET macroname RET

これは後で実行するとき、今と同じ定義のマクロとなるLispコードをバッファーに挿入します(これを行うためにLispコードを理解する必要はありません。なぜならあなたのかわりにinsert-kbd-macroがLispコードを記述するからです)。それからファイルを保存します。後でそのファイルをload-file (EmacsのためのLispコードによるライブラリーを参照してください)でロードできます。initファイル~/.emacs (Emacs初期化ファイルを参照してください)に保存すれば、そのマクロはEmacsを実行する度に定義されます。

insert-kbd-macroにプレフィクス引数を与えると、(もしあれば)macronameにバインドしたキーを記録するためのLispコードが追加されるので、ファイルをロードしたとき同じキーにマクロが割り当てられます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

17.6 キーボードマクロの編集

C-x C-k C-e

最後に定義されたキーボードマクロを編集します(kmacro-edit-macro)。

C-x C-k e name RET

以前に定義されたキーボードマクロnameを編集します(edit-kbd-macro)。

C-x C-k l

過去300回分のキーストロークを、キーボードマクロとして編集します(kmacro-edit-lossage)。

C-x C-k C-eまたはC-x C-k RET (kmacro-edit-macro)をとタイプして、最後のキーボードマクロを編集できます。これはマクロ定義をバッファーに整形出力して、それを編集するために特化したモードに入ります。そのバッファーでC-h mをタイプすると、マクロを編集する方法の詳細が表示されます。編集を終了するにはC-c C-cをタイプしてください。

名前をつけたキーボードマクロ、またはキーにバインドしたマクロは、C-x C-k e (edit-kbd-macro)とタイプして編集できます。このコマンドに続けてそのマクロを呼び出すときのキー入力(C-x eM-x name、またはその他のキーシーケンス)を入力します。

C-x C-k l (kmacro-edit-lossage)とタイプして、最近300回のキーストロークをマクロとして編集できます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

17.7 キーボードマクロのステップ編集

C-x C-k SPC (kmacro-step-edit-macro)とタイプして、最後のキーボードマクロをインタラクティブに1コマンドずつ再生および編集できます。マクロをqまたはC-gで終了しなければ、編集されたマクロでマクロリングの最後のマクロを置き換えます。

このマクロ編集機能は、最初(または次)に実行されるコマンドと、それにたいする操作を尋ねるプロンプトをミニバッファーに表示します。?を入力すれば、オプションの要約を表示できます。以下のオプションが利用可能です:


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18 ファイルの処理

オペレーティングシステムはファイルにデータを永続化するので、Emacsで編集するテキストの大部分はファイルから読み込んで、最終的にファイルに格納します。

ファイルを編集するには、Emacsにファイルを読み込み、ファイルのテキストを含むバッファーを準備するよう、指示しなければなりません。これを、ファイルのvisit(訪問)と呼びます。編集コマンドは直接バッファーのテキスト、つまりEmacs内部のコピーに適用されます。変更がファイルに反映されるのは、バッファーをファイルに保存(save)したときだけです。

ファイルのvisitや保存に加え、Emacsはファイルの削除、コピー、名前の変更、ファイルへの追加、ファイルの複数バージョンの保持、ディレクトリーの操作を行うことができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.1 ファイルの名前

ファイルを操作するEmacsコマンドの多くは、ミニバッファー(ミニバッファーでのファイル名を)を使って、ファイル名の指定を求めます。

ミニバッファーでは、通常の補完およびヒストリーコマンドを使うことができます(ミニバッファーを参照してください)。ファイル名の補完では、ファイル名の拡張子が変数completion-ignored-extensionsに含まれているファイルは無視されます(補完オプションを参照してください)。またほとんどのコマンドは、ファイルの読み込みにおいて、確認をともなう寛大な補完(permissive completion with confirmation)を使います。この補完では、存在しないファイル名が許されますが、存在しないファイル名の入力を完了するためにRETをタイプすると、Emacsは‘[Confirm]’を表示し、この確認に同意するために2番目のRETをタイプしなければなりません。詳細については、補完の終了を参照してください。

ミニバッファーのヒストリーコマンドは、ファイル名を読み取るための特別な機能をいくつか提供します。ミニバッファーヒストリーを参照してください。

それぞれのバッファーは、バッファーローカルな変数default-directoryに、デフォルトのディレクトリーを格納しています。ミニバッファーを使ってファイル名を読み取るとき、通常Emacsはミニバッファーの初期内容として、デフォルトディレクトリーを挿入します。変数insert-default-directorynilに変更することにより、この挿入を抑制できます。常にEmacsは任意の相対パスで指定されたファイル名を、デフォルトディレクトリーにたいする相対パスとみなします。たとえばディレクトリーを指定しないファイル名は、デフォルトディレクトリーのファイルを指定します。

ファイルをvisitするとき、Emacsはvisitしているバッファーのdefault-directoryに、そのファイルのディレクトリーをセットします。C-x bのようなコマンドを通じて、ファイルをvisitしていないバッファーを新たに作成すると、通常そのバッファーのデフォルトディレクトリーは、現在のバッファーのデフォルトディレクトリーをコピーします。現在のバッファーのdefault-directoryの値を見るために、M-x pwdコマンドを使用できます。M-x cdコマンドはディレクトリー名の入力を求め、バッファーのdefault-directoryもそのディレクトリーをセットします(これを行うことによりバッファーのファイル名は変更されません)。

例として、ファイル/u/rms/gnu/gnu.tasksをvisitしているとします。このときデフォルトディレクトリーは/u/rms/gnu/にセットされます。ファイル名を読み取るコマンドを呼び出して、ミニバッファーでディレクトリー名を省略して単に‘foo’と入力すると、これはファイル/u/rms/gnu/fooを指定したことになります。‘../.login’と入力すると/u/rms/.login、‘new/foo’と入力すると/u/rms/gnu/new/fooを指定したことになります。

ミニバッファーにファイル名をタイプするとき、2つのショートカットを使うことができます。2つのスラッシュは、2番目のスラッシュの前にあるすべてを無視します。そして‘~/’は、ユーザーのホームディレクトリーです。ミニバッファーでのファイル名を参照してください。

文字‘$’は、ファイル名を置き換える環境変数の代用として使われます。環境変数の名前は、‘$’の後ろのすべての英数字から構成されます。‘$’の後ろの、大カッコ(braces)に囲まれた変数名も使用できます。たとえばシェルコマンドexport FOO=rms/hacksは、名前がFOOの環境変数をセットするために使われます。すると/u/$FOO/test.c/u/${FOO}/test.cはどちらも、/u/rms/hacks/test.cの省略形となります。環境変数が定義されていないときは、何の置き換えも発生せず、文字‘$’はそれ自身を意味します。Emacs外部でセットされた環境変数は、それがEmacsの開始前に適用されたときだけ、Emacsに影響を与えることに注意してください。

$’により環境変数が展開されるようなとき、名前に‘$’を含むファイルにアクセスする場合は、‘$$’とタイプします。1つの‘$’が環境変数を展開するのと同時に、2つのペアは1つの‘$’に変換されます。かわりにファイル名を‘/:’でクォートすることもできます(ファイル名のクォートを参照してください)。名前が文字‘~’で始まるファイル名も、‘/:’でクォートするべきです。

ファイル名に非ASCII文字を含めることができます。ファイル名にたいするコーディングシステムを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.2 ファイルのvisit(訪問)

C-x C-f

ファイルをvisitします(find-file)。

C-x C-r

変更を許さない閲覧用として、ファイルをvisitします(find-file-read-only)。

C-x C-v

最後にvisitしたファイルとは異なるファイルを、かわりにvisitします(find-alternate-file)。

C-x 4 f

別のウィンドウでファイルをvisitします(find-file-other-window)。選択されたウィンドウに表示されているものは変更しません。

C-x 5 f

新しいフレームでファイルをvisitします(find-file-other-frame)。選択されたフレームに表示されているものは変更しません。

M-x find-file-literally

内容を変換せずにファイルをvisitします。

ファイルをVisiting(訪問)するとは、そのファイル内容をEmacsのバッファーに読み込むことを意味するので、それを編集することができます。Emacsはvisitするファイルごとに、新しいバッファーを作成します。

ファイルをvisitするには、C-x C-f (find-file)とタイプして、visitしたいファイルの名前をミニバッファーで入力します。ミニバッファーでは、C-gをタイプして、コマンドを中止することができます。ミニバッファーでのファイル名の入力についての詳細は、ファイルの名前を参照してください。

ファイルは存在するが、システムが読み込みを許さない場合、エコーエリアにエラーメッセージが表示されます(GNUおよびUnixシステムでは、‘su’や‘sudo’のような方法を使用して、そのようなファイルをvisitできるかもしれない。リモートファイルを参照されたい。) それ以外の場合、スクリーンに新しいテキストが表示され、モードラインバッファー名が表示されることで、C-x C-fが成功したことを知ることができます。通常Emacsは、ファイル名からディレクトリー名を省いて、バッファー名を作ります。たとえば/usr/rms/emacs.texという名前のファイルは、バッファー名‘emacs.tex’となります。その名前のバッファーがすでにある場合、Emacsは一意な名前を作ります。通常の方法はディレクトリー名にもとづく接尾辞の追加です(たとえば‘<rms>’、‘<tmp>’など)が、違う方法を選択することもできます。バッファー名を一意にするを参照してください。

新しいファイルを作成するには、同じコマンドC-x C-fを使ってvisitするだけです。Emacsはエコーエリアに‘(New file)’と表示しますが、他の点では既存の空のファイルをvisitしたのと同じく振る舞います。

ファイルをvisitした後で編集コマンドにより行われた変更は、Emacsのバッファーに反映されます。バッファーを保存(save)するまでは、visitしているファイルに影響はありません。バッファーが保存されていない変更を含むとき、そのバッファーが変更されている(modified)といいます。これはバッファーを保存しなければ、その変更が失われることを意味します。モードラインの左余白の近くに2つのアスタリスクが表示され、バッファーが変更されていることを示します。

すでにEmacsがvisitしているファイルをvisitした場合、C-x C-fは他のコピーを作らず既存のバッファーに切り替えます。切り替えを行う前に、最後にvisitまたは保存した後にファイルが変更されているか確認します。もしファイルが変更されているとき、Emacsはそれの再読み込みを提案します。

large-file-warning-threshold (デフォルトは10000000で、これは約10MB)より大きなファイルのvisitを試みると、Emacsは最初に確認を求めます。yを応えることによりファイルのvisitを続けて、lではファイルをリテラル(以下参照)にvisitします。 巨大なファイルではリテラルにファイルをvisitすることにより、種々の潜在的に高価な機能がオフに切り替えられるので、操作や編集が高速化されます。しかしEmacsは、Emacsバッファーの最大サイズ(Emacsが割り当てられるメモリー量の制限と、Emacsが扱える整数により制限されます)を超えるバッファーは、visitできないことに注意してください。この場合、Emacsは最大バッファーサイズを超えた旨を知らせるエラーメッセージを表示します。

ファイル名にシェル形式のワイルドカード文字が含まれている場合、Emacsはそれにマッチするすべてのファイルをvisitします。(大文字小文字を区別しないファイルシステムでは、Emacsは大文字小文字に関係なくワイルドカードをマッチします)。ワイルドカードには‘?’、‘*’および‘[…]’シーケンスが含まれます。ミニバッファーでワイルドカード‘?’をファイル名に入力するには、C-q ?とタイプする必要があります。ワイルドカード文字を実際に名前に含むファイルをvisitする方法についての情報は、ファイル名のクォートを参照してください。find-file-wildcardsをカスタマイズして、ワイルドカード機能を無効にすることができます。

無意識に間違ったファイル名をタイプして違うファイルをvisitした場合、C-x C-v (find-alternate-file)で実際に望むファイルをvisitできます。C-x C-vC-x C-fと似ていますが、これは現在のバッファーをkillします(変更されている場合は最初に保存するか確認を求めます)。C-x C-vがvisitするファイルの名前を読み取るときは、ミニバッファーにデフォルトのファイル名全体を挿入して、ポイントをディレクトリー名の後に置きます。これは名前を少し間違えた場合などに便利です。

実際はディレクトリーであるファイルをvisitしたとき、EmacsはEmacsのディレクトリーブラウザーのDiredを呼び出します。Dired (ディレクトリーエディター)を参照してください。この振る舞いは、変数find-file-run-dirednilにセットすることにより無効にできます。この場合、ディレクトリーをvisitするとエラーになります。

実際には他のファイルの集まりであるようなアーカイブファイル(file archives)の場合、アーカイブされたメンバーを操作できる、Diredに似た環境を呼び出す特別なモードでvisitします。これらの機能については、ファイルアーカイブを参照してください。

オペレーティングシステムが変更を許していない、または読み取り専用にしているファイルをvisitした場合、Emacsもバッファーを読み取り専用にするので、保存すると問題を起こすような変更を防ぐことができます。C-x C-q (read-only-mode)で、バッファーを書き込み可能にできます。その他のバッファー操作を参照してください。

予期せぬ入力による変更を防ぐために、読み込み専用でファイルをvisitしたい場合は、C-x C-fのかわりにコマンドC-x C-r (find-file-read-only)でvisitします。

C-x 4 f (find-file-other-window)はC-x C-fと同様ですが、指定したファイルを含むバッファーは、別のウィンドウで選択されます。C-x 4 fの前に選択されていたウィンドウは、すでに表示していたのと同じバッファーの表示を続けます。1つのウィンドウしか表示されていないときにこのコマンドを使うと、これはウィンドウを2つに分割し、1つのウィンドウには前に表示されていたのと同じバッファー、別の1つには新しい要求されたファイルを表示します。複数ウィンドウを参照してください。

C-x 5 f (find-file-other-frame)も同様ですが、新しいフレームををオープンするか、指定したファイルをすでに表示している既存のフレームを選択します。フレームとグラフィカルなディスプレーを参照してください。

グラフィカルなディスプレーでは、ファイルをvisitする追加の方法が2つあります。1つ目は、Emacsが適したGUIツールキットによりビルドされているとき、マウスによるコマンドの呼び出し(メニューバーやツールバーのクリックによる)は、ミニバッファーでファイル名の入力を求める代わりに、そのツールキット標準のファイル選択(file selection)ダイアログを表示します。GNU/LinuxおよびUnixプラットフォームでは、GTK+、LessTif、Motifツールキットとともに構築されていると、Emacsはこれを行います。MS-WindowsとMacでは、GUIバージョンのデフォルトにより行われます。これをカスタマイズする情報については、ダイアログボックスの使用を参照してください。

2つ目は、Emacsはのドラッグアンドドロップ(drag and drop)サポートで、通常のEmacsウィンドウにファイルをドロップすることにより、そのウィンドウでファイルをvisitします。例外としてDiredバッファーを表示しているウィンドウにファイルをドロップすると、表示されているディレクトリーにファイルを移動またはコピーします。詳細についてはドラッグアンドドロップその他のDiredの機能を参照してください。

テキスト端末、およびGUIツールキットなしでビルドされているグラフィカルなディスプレーでは、アイテム‘Visit New File’と‘Open File’をもつメニューバーの‘File’メニューから、、ファイルをvisitできます。

文字エンコーディングと使用されている改行規則を検知するために、Emacsは自動的に内容をスキャンします。そして、それらをEmacsの内部エンコーディングとバッファーの改行規則に変換します。バッファーを保存するとき、Emacsは逆の変換を行い、元のエンコーディングと改行規則でファイルをディスクに書き込みます。コーディングシステムを参照してください。

ファイルにたいして特別なエンコーディングや変換を行わずに、非ASCII文字のシーケンスとして編集したいときは、M-x find-file-literallyコマンドを使います。これはC-x C-fと同様ですが、フォーマット変換(Format Conversion in the Emacs Lisp Reference Manualを参照してください)、文字コード変換(コーディングシステムを参照してください)、自動解凍(圧縮ファイルへのアクセスを参照してください)を行わず、require-final-newlineによる最後の改行も追加しません(ファイル保存のカスタマイズを参照してください)。同じファイルをすでに通常(非リテラル)の方法でvisitしている場合、このコマンドはそれをリテラル(そのままの文字の列)としてvisitするかを尋ねます。

2つの特別なフック変数により、ファイルをvisitする操作を変更して拡張することができます。存在しないファイルをvisitすることにより、find-file-not-found-functionsの関数が実行されます。この変数は関数のリストを保有し、それらはどれか1つが非nilを返すまで、(引数を指定せずに)1つずつ呼び出されます。これはノーマルフックではないため、その事実を示すために名前の最後が‘-hook’ではなく、‘-functions’で終わっています。

ファイルが存在するしないにかかわらず、ファイルをvisitするのに成功すると、引数なしで関数find-file-hookを呼び出します。この変数はノーマルフックです。ファイルが存在しない場合、最初にfind-file-not-found-functionsを実行します。フックを参照してください。

ファイルを編集するために自動的にメジャーモードを指定し(ファイルのモードを選択するを参照してください)、そのファイルのために特別なローカル変数を定義する方法がいくつかあります(ファイル内のローカル変数を参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.3 ファイルの保存

Emacsでのバッファーの保存(Saving)は、バッファーの内容を、そのバッファーによりvisitされているファイルに書き戻すことを意味します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.3.1 ファイルを保存するコマンド

ファイルの保存と書き込みに関するコマンドが、いくつかあります。

C-x C-s

現在のバッファーを、そのファイルに保存します(save-buffer)。

C-x s

任意、またはすべてのバッファーを、それらのファイルに保存します(save-some-buffers)。

M-~

現在のバッファーが変更されたことを忘れます(not-modified)。プレフィクス引数(C-u)を指定すると、現在のバッファーを変更済みとマークします。

C-x C-w

現在のバッファーを、指定したファイル名で保存します(write-file)。

M-x set-visited-file-name

現在のバッファーが保存される場所で、ファイル名を変更します。

ファイルを保存して変更を永続化させたいときは、C-x C-s (save-buffer)とタイプします。保存が完了すると、C-x C-sは以下のようなメッセージを表示します:

Wrote /u/rms/gnu/gnu.tasks

現在のバッファーが変更されていない(新規作成されたとき、または最後に変更されたときから変更していない)場合、保存しても意味がないので実際の保存は行われません。かわりにC-x C-sは、エコーエリアに以下のようなメッセージを表示します:

(No changes need to be saved)

C-u C-x C-sのようにプレフィクス引数を指定すると、Emacsはそのバッファーを次回の保存が行われるときバックアップするようマークします。バックアップファイルを参照してください。

コマンドC-x s (save-some-buffers)は、任意、またはすべての変更されたバッファーの保存を提案します。これはバッファーごとに何を行うか尋ねます。使用できる応答は、query-replaceと同様です。

y
SPC

このバッファーを保存し、残りのバッファーについて尋ねます。

n
DEL

このバッファーは保存せずに、残りのバッファーについて尋ねます。

!

このバッファーを保存し、残りのバッファーを尋ねることなくすべて保存します。

q
RET

これ以上の保存をせずに、save-some-buffersを終了します。

.

このバッファーを保存したら、他のバッファーをどうするか尋ねることなく、save-some-buffersを終了します。

C-r

現在尋ねられているバッファーを閲覧します。Viewモードから抜けると、再びsave-some-buffersはどうするか尋ねます。

C-f

save-some-buffersをexitして、カレントで問い合わせ中だったバッファーをvisitします。

d

そのバッファーに対応するファイルとDiffをとり、どのような変更を保存するのか確認できます。これはコマンドdiff-buffer-with-file (ファイルの比較を参照してください)を呼び出します。

C-h

これらのオプションについての、ヘルプメッセージを表示します。

save-some-buffers-default-predicateの値をカスタマイズして、どのバッファーにたいしてEmacsが問い合わせるか制御できます。

Emacsを終了するキーシーケンスC-x C-cは、save-some-buffersを呼び出すので、同じ質問をします。

バッファーを変更したが変更を保存したくないとき、保存されるのを防ぐためにできることがいくつかあります(それ以外のC-x sまたはC-x C-cで間違って保存してしまうのはあなたの責任です)。まずできることは、M-~ (not-modified)とタイプすることで、これはバッファーが変更されているというマークをクリアーします。これを行うと、保存コマンドに、バッファーが保存を必要しないと信じこませることができます(‘~’は数学のシンボルで、“not(否定)”として使われることがあります。したがってM-~はメタと“not”になります。)。かわりにファイルからテキストを読み込むことにより、ファイルをvisitまたは保存された後に行った、すべての変更を取り消すことができます。これはリバート(reverting: 復元)と呼ばれます。バッファーのリバートを参照してください(undoコマンドC-x uを繰り返すことにより、変更がすべての変更を取り消すこともできますが、リバートの方が簡単です)。

M-x set-visited-file-nameは、現在のバッファーがvisitしているファイルの名前を変更します。このコマンドはミニバッファーを使って、新しいファイル名を読み取ります。その後に、そのバッファーがそのファイル名のファイルをvisitしているとマークし、バッファー名も合わせて変更します。set-visited-file-nameは、新しくvisitするファイルへの保存はしません。これは後で保存するときのために、Emacs内のレコードを変更するだけです。これはバッファーを変更されている(modified)とマークするので、そのバッファーでの将来C-x C-sで、保存が行われます。

バッファーにたいして、違うファイルをvisitしているとマークしてすぐに保存したい場合は、C-x C-w (write-file)を使います。このコマンドは、set-visited-file-nameの後すぐにC-x C-sをするのと同じですが、C-x C-wはファイルが存在するとき確認を求める点が異なります。ファイルをvisitしていないバッファーでのC-x C-sは、C-x C-wと同じ効果をもちます。したがってファイル名を読み取り、バッファーがそのファイルをvisitしているとマークした後、バッファー内容をそのファイルに保存します。ファイルをvisitしていないバッファーのデフォルトファイル名は、バッファー名と、バッファーのデフォルトディレクトリーから合成されます(ファイルの名前を参照してください)。

新しいファイル名が何らかのメジャーモードに関連する場合、大抵はC-x C-wによりそのメジャーモードへの切り替えが行われます。コマンドset-visited-file-nameもこれを行います。ファイルのモードを選択するを参照してください。

Emacsがファイルを保存する際、ディスクの最新バージョンのファイル日付を確認して、それがEmacsが最後に読み込み、または書き込みしたときと異なる場合、Emacsはその事実をユーザーに知らせます。なぜならそれはおそらく同時編集による問題を示しており、それをすぐにユーザーに知らせる必要があるからです。Simultaneous Editingを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.3.2 バックアップファイル

ほとんどのオペレーティングシステムでは、ファイルを書き換えるとファイルに入っていたそれまでの記録は、自動的に破棄されます。したがって、Emacsでファイルを保存すると、ファイルの古い内容は捨てられます。しかし実際に保存する前に、Emacsが慎重に古い内容をバックアップ(backup)ファイルと呼ばれる別のファイルにコピーすれば、古い内容は失われません。

Emacsは最初にバッファーからファイルに保存されたときだけ、バックアップファイルを作成します。その後ファイルを何回保存しようと、バックアップは変更されません。しかしバッファーをkillしてから、そのファイルを再びvisitすると、新しいバックアップファイルが作成されます。

ほとんどのファイルにたいして、変数make-backup-filesはバックアップファイルを作るかを決定します。ほとんどのオペレーティングシステムでは、デフォルト値はtなので、Emacsはバックアップファイルを書き込みます。

バージョンコントロールシステム(version control system: バージョンコントロールを参照してください)で管理されているファイルにたいして、バックアップファイルを作るかは、変数vc-make-backup-filesにより決定されます。バージョンコントロールシステムに以前のバージョンがある場合、バックアップファイルを作るのは不必要なので、デフォルト値はnilです。 一般的なオプションを参照してください。

選択できるオプションは、Emacsにファイルごとに1つのバックアップを作らせる方法と、編集するファイルごとに番号がついた、一連のファイルを作る方法があります。単一または番号つきバックアップを参照してください。

変数backup-enable-predicateのデフォルト値は、一時的なファイルのために使われるディレクトリー(変数temporary-file-directoryまたはsmall-temporary-file-directoryで指定されます)のファイルは、バックアップしないような値になっています。

前に保存されたバッファーにたいしても、バッファーから他のバックアップファイルを作るよう、Emacsに明示的に指示することができます。バッファーをC-u C-x C-sで保存すると、この保存したバージョンが、次にバックアップするときのバックアップになります。C-u C-u C-x C-sはバッファーを保存しますが、最初に元のファイル内容を新しいバックアップファイルとします。C-u C-u C-u C-x C-sは両方を行います。まず前の内容でバックアップを作成し、次回に保存したときは、今回保存したものをバックアップにします。

変数backup-directory-alistをカスタマイズして、指定したパターンにマッチする特定のファイルにたいして、指定したディレクトリーにバックアップを作成させることができます。典型的な使い方は、要素("." . dir)を追加することにより、すべてのバックアップを絶対パスdirに作る方法です。異なるディレクトリーにある同じ名前のファイルによる、バックアップファイルの名前の衝突を避けるため、Emacsはバックアップファイルの名前を変更します。("." . ".~")を追加すると、これは元のファイルがあるディレクトリーに、非表示の.~というディレクトリーを作って、そこにバックアップを作成します。Emacsはバックアップを作るため、必要ならディレクトリーを作成します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.3.2.1 単一または番号つきバックアップ

Emacsのバックアップファイル作成では、バックアップの名前は通常、編集されるファイル名の後ろに‘~’をつけて作成されます。したがってeval.cのバックアップファイルは、eval.c~になります。

アクセスコントロールによりEmacsが通常の名前でバックアップファイルを書き込めない場合、~/.emacs.d/%backup%~というバックアップファイルに書き込みます。この1つのファイルしか存在しないので、一番最近作られたバックアップだけが利用可能です。

Emacsは番号つきバックアップファイル(numbered backup files)を作ることもできます。番号つきバックアップファイルの名前は、元のファイル名の後ろに‘.~’と番号と‘~’をつけたものです。したがってeval.cのバックアップファイルは、eval.c.~1~eval.c.~2~、...、eval.c.~259~、...となります。

変数version-controlは、単一のバックアップファイルを作るか、複数の番号つきバックアップファイルを作るかを決定します。有効な値は以下のとおりです:

nil

すでに番号つきバックアップのあるファイルにたいしては、番号つきバックアップを作ります。それ以外は単独のバックアップをつくります。これがデフォルトです。

t

番号つきバックアップを作ります。

never

番号つきバックアップをつくらず、常に単一のバックアップを作ります。

この変数をセットする通常の方法は、initファイルやcustomizationバッファーを通じて、グローバルにセットする方法です。しかし特定のバッファーにローカルにversion-controlをセットして、そのバッファーのバックアップ作成を制御することができます(ローカル変数を参照してください)。特定のファイルをvisitするとき、常にEmacsにversion-controlをローカルにセットさせることができます(ファイル内のローカル変数を参照してください)。Rmailモードのようないくつかのモードは、この変数をセットします。

さまざまなGNUユーティリティーにたいして、何をすべきか指示する環境変数VERSION_CONTROLをセットすると、Emacsも開始時にこの環境変数にしたがって、Lisp変数version-controlをセットします。環境変数の値が‘t’または‘numbered’のときは、version-controltになります。値が‘nil’または‘existing’のときは、version-controlnilになります。もし‘never’または‘simple’のときは、version-controlneverになります。

変数make-backup-file-name-functionに適切なLisp関数をセットすることにより、Emacsがバックアップファイル名を作る通常の方法をオーバーライドできます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.3.2.2 バックアップの自動削除

ディスク容量の過度な消費を防ぐため、Emacsは自動的に番号つきバックアップを削除することができます。一般的にEmacsは一番古いバックアップと、一番新しいバックアップをいくつか保持し、その間にあるバックアップを削除します。これは新しいバックアップが作られる度に行なわれます。

2つの変数kept-old-versionsおよびkept-new-versionsが、この削除を制御します。これらの変数の値は順に、削除せずに残す一番古い番号(小さい番号)のバックアップと、一番新しい番号(大きい番号)で、新しいバックアップが作られる度に評価されます。中間のバックアップ(一番古いものと一番新しいものを除いたもの)は、余分なバージョンで、これらのバックアップは削除されます。これらの変数の値は余分なバージョンを削除するとき、つまり新しいバックアップが作られた直後に使われます。新しく作られたバックアップは、kept-new-versionsのカウントに含まれます。デフォルトでは、両方の変数の値は2です。

delete-old-versionstのとき、Emacsは何も尋ねずに余分なバックアップファイルを削除します。nil(デフォルト)のとき、Emacsは余分なバージョンのバックアップを削除するか尋ねます。他の値の場合、Emacsはバックアップの自動削除をしません。

Diredの.(ピリオド)コマンドでも、古いバージョンを削除できます。大量のファイルに一度にフラグをつけるを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.3.2.3 コピー vs. リネーム

バックアップファイルは、古いファイルをコピーまたはリネームすることで作ることができます。コピーとリネームは、古いファイルが複数の名前をもつ場合(ハードリンクされている場合)に、異なる効果をもちます。古いファイルがバックアップファイルにリネームされた場合、ハードリンクされた別の名前で参照されるファイルは、バックアップファイルとなります。かわりに古いファイルをコピーすると、ハードリンクされた別の名前で参照されるファイルは、編集中のファイルのままで、それらの名前でアクセスする内容は新しい内容となります。

バックアップファイルを作る方法は、編集中のファイルの所有者とグループにも影響します。コピーが使われた場合、それらは変化しません。リネームが使われた場合、そのユーザーがファイルの所有者となり、ファイルのグループはデフォルト(オペレーティングシステムごとにグループのデフォルトは異なります)のグループになります。

リネームとコピーの選択は、以下の変数により行われます:

ファイルがバージョンコントロールシステムで管理されている場合(バージョンコントロールを参照)、通常、Emacsは普通の方法でそのファイルのバックアップを作りません。しかしコミット(チェックインとも呼ばれる。バージョンコントロールの概念を参照されたい)は、バックアップを作るのと似たところがあります。これらの操作は通常ハードリンクをこわし、同じファイルにたいする別のファイル名でのvisitを切断します。Emacsにできることはありません。バージョンコントロールシステムがこれを行うのです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.3.3 ファイル保存のカスタマイズ

変数require-final-newlineの値がtのとき、ファイルの保存または書き込みにより、ファイルの終端に改行がないときは、何も尋ねずに改行を追加します。値がvisitの場合、Emacsはファイルをvisitした直後に、終端に改行がないファイルの改行を追加します(これによりバッファーは変更されたとマークされます。undoはできません)。値がvisit-saveの場合、Emacsはそのような改行をvisitと保存のときに追加します。値がnilの場合、Emacsはファイルの終端を変更しません。それ以外の非nil値は、改行を追加するかをEmacsが尋ねることを意味します。デフォルトはnilです。

ファイルの終端に常に改行があると想定する、特定の種類のファイルのためにデザインされたメジャーモードがいくつかあります。そのようなメジャーモードは、変数require-final-newlineに、変数mode-require-final-newlineの値(デフォルトはt)をセットします。後者の変数の値をセットすることにより、これらのモードが終端の改行を取り扱う方法を制御できます。

通常プログラムがファイルに書き込むとき、オペレーティングシステムはデータをディスクにコミットする前に、ファイルのデータをメインメモリーにキャッシュします。これにより大幅にパフォーマンスを向上できます。たとえばラップトップを使っている場合、ファイルを書き込む度にディスクをスピンアップ(spin-up)しなくて済みます。しかし、キャッシュをディスクにコミットする前にオペレーティングシステムがクラッシュすることにより、データを失うリスクもあります。

このリスクを減少させるため、Emacsはファイルを保存した後にfsyncシステムコールを呼び出すことができます。fsyncにより、データを失うリスクを皆無にすることはできません。その理由の一部は、多くのシステムはfsyncを正しく実装していないことであり、他の理由の一部はEmacsのファイル保存手段は通常ディレクトリー更新に頼っており、これはfsyncが正しく実装されていても、クラッシュを生き延びることはできないでしょう。

write-region-inhibit-fsync変数は、ファイルを保存した後にEmacsがfsyncを呼び出すかを制御します。この変数のデフォルト値は、Emacsを対話的に使用しているときはnil、バッチモードの時はtです(Batch Modeを参照)。

Emacsは自動保存ファイルの書き込みにfsyncを使うことはありません。なぜなら、それらのファイルのデータは、いずれにせよ失われるものだからです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.3.4 同時編集からの保護

同時編集(Simultaneous editing)は、2人のユーザーが同じファイルをvisitして、両者が変更と保存を行ったときに発生します。これが発生していることを誰も知らせなければ、最初に保存したユーザーは、後で自分の変更が失われていることに気付くでしょう。

いくつかのシステムでは、Emacsは2番目のユーザーがファイルの変更を開始すると、すぐに警告を発します。また、すべてのシステムにおいて、Emacsはファイルを保存するときにチェックして、他のユーザーの変更を上書きすることを警告します。ファイルを保存するかわりに適切な訂正アクションをとることにより、他のユーザーの変更を失わなわずに済みます。

ファイルをvisitしているEmacsバッファーで最初の変更を行うとき、Emacsはファイルがロック(locked)されていることを記録します(これは同じディレクトリーにある、特別な内容の、特別な名前のシンボリックリンク7を作ることにより行われます。詳細は(elisp)File Locksを参照のこと)。変更を保存したとき、Emacsはロックを解除します。このアイデアは、ファイルをvisitしているEmacsバッファーに保存されていない変更があるとき、ファイルはロックされているとするものです。

変数create-lockfilesnilにセットすることにより、ロックファイルの作成を抑制することができます。警告:これにより、この機能が提供する利点を失うことになります。

他のユーザーによりロックされているファイルをvisitしているバッファーの変更を開始すると、衝突(collision)が起こります。Emacsが衝突を検知すると、Lisp関数ask-user-about-lockを呼び出して、何を行うか尋ねます。カスタマイズのためにこの関数を再定義できます。この関数の標準定義は、ユーザーに質問をして、3つの有効な応えを受け取ります。

s

ロックを横取りします。すでにファイルを変更したユーザーはロックを失い、あなたがロックを取得します。

p

続行します。他のユーザーがロックしている如何にかかわらずファイルの編集を続けます。

q

終了します。これはエラー(file-locked)を引き起こし、バッファーの内容は変更されません。あなたが試みた修正は実際には行われません。

Emacsまたはオペレーティングシステムがクラッシュすると、偽のロックファイルが残ることがあり、このような偽のロックファイルによる警告を受けることがあります。偽の衝突だと確信できるときは、Emacsにとにかく実行させるpを使います。

ロックはファイル名にもとづいて機能するので、ファイルが複数の名前を持っていて、2人のユーザーがそれぞれ別のファイル名で同時編集を行うことを、Emacsが防ぐことはできないことに注意してください。

ロックファイルに書き込みできない状況がいくつかあります。たとえばシステム権限不足や他の理由により、Emacsがロックファイルが作成できない場合です。このような場合でも保存を試みたときに、ファイルの最終変更日時をチェックすることにより、Emacsは衝突を検知できます。最後にEmacsがvisitまたは保存したときからファイルが変更されているとき、それは他の何らかの手段によりファイルが変更されたことを示し、Emacsが保存を行うことによりそれらが失われることを意味します。そのようなときEmacsは警告メッセージを表示して、保存する前に確認を求めます。保存するときはyes、保存を取り消すときはnoまたはC-gと応えてください。

すでに同時編集が発生しているとき、バッファーとファイルを比較する方法の1つは、M-x diff-buffer-with-fileコマンドです。ファイルの比較を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.3.5 ファイルのシャドーイング

特定のファイルと等しいshadowコピーを1つ以上の場所、ことによると異なるマシン間で保持するように計画できます。これを行うにはまず、shadowファイルグループをセットアップしなければなりません。これはリストにあるサイト間で共有される同じ名前のファイルのセットです。ファイルグループは永続的で、将来のEmacsセッションでも、現在のセッションと同様に適用されます。一度グループをセットアップすると、Emacsを終了する度に、編集したファイルをグループの他のファイルにコピーします。M-x shadow-copy-filesをタイプすることにより、Emacsを終了せずにコピーすることもできます。

shadowクラスターは、ディレクトリーを共有するホストのグループなので、それらのコピーは、そのディレクトリーにあるすべてのファイルを更新するのに充分です。shadowクラスターはそれぞれ名前を持ち、プライマリーホスト(コピーを行うホスト)のネットワークアドレスと、プライマリーホスト以外でクラスターに含めるホストを選択するための正規表現を指定します。M-x shadow-define-clusterによりshadowクラスターを定義できます。

M-x shadow-initialize

ファイルのシャドーイング(shadowing)をセットアップします。

M-x shadow-define-literal-group

サイト間で共有される単一のファイルを定義します。

M-x shadow-define-regexp-group

ファイルのグループがマッチするすべてのファイルを、ホスト間で共有するようにします。

M-x shadow-define-cluster RET name RET

shadowファイルのクラスターnameを定義します。

M-x shadow-copy-files

すべての保留中のshadowファイルをコピーします。

M-x shadow-cancel

ファイルにたいするshadow指示を取り消します。

shadowファイルグループをセットアップするには、M-x shadow-define-literal-groupまたはM-x shadow-define-regexp-groupを使います。詳細な情報は、これらの関数のドキュメント文字列を参照してください。

ファイルをshadowにコピーする前に、Emacsは確認を求めます。“no”を応えることにより、その時だけはコピーを回避できます。特定のファイルにたいして今後もshadowingを取り消したい場合、M-x shadow-cancelを使うことにより、shadowファイルグループを削除または変更します。

MS Widowsでは、ファイルのシャドーイングは利用できません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.3.6 タイムスタンプの自動更新

ファイルにタイムスタンプを書き込むことができます。これによりファイルを編集・保存する度に、タイムスタンプが自動的に更新されます。タイムスタンプは、ファイルの最初の8行になければならず、以下のような形式、

Time-stamp: <>

または以下のような形式です:

Time-stamp: " "

その後、フックbefore-save-hookに関数time-stampを追加します(フックを参照してください)。ファイルを保存するとき、この関数は現在の日時で自動的にタイムスタンプを更新します。コマンドM-x time-stampを使って、手動でタイムスタンプを更新することもできます。デフォルトではタイムスタンプの書式は、localeのセッティング(環境変数を参照してください)と、タイムゾーン(Time of Day in The Emacs Lisp Reference Manualを参照してください)にしたがいます。カスタマイズに関しては、Customグループのtime-stampを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.4 バッファーのリバート

ファイルをvisitしているバッファーにたいして、広範な変更をした後に気が変わったときは、リバート(revert: 復元)することにより。変更をファイルの保存されたバージョンに戻すことができます。これを行うにはM-x revert-bufferとタイプします。間違えてリバートしてしまうことによって大量の作業結果を失うこともあり得るので、Emacsは最初に確認を求めます。

revert-bufferコマンドは、ファイルが少ししか変更されていないときは、前にポイントがあったテキスト部分とだいたい同じ位置にポイントを置くよう試みます。しかし広範な変更を行っていた場合、ポイントは大きく異なる場所に置かれることになります。

リバートはバッファーをnot modified(変更されていない)とマークします。しかし、これはリバートされた変更を単一の変更として、そのバッファーのundoヒストリーに追加します(Undo(取り消し)を参照)。したがって、リバート後に気が変わってリバートされた変更を元に戻したくなった場合は、C-/またはそのエイリアスをタイプして、それを行うことができます。

ファイルに関連付けられていない、Diredバッファーのようなバッファーでも、リバートすることができます。それらの場合、リバートはその内容を再計算することを意味します。C-x bで明示的に作成したバッファーは、リバートできません。リバートを試みるとrevert-bufferはエラーを報告します。

自動的かつ頻繁に変更されるファイル、たとえば実行を続けるプロセスのログ出力などを編集しているとき、Emacsが確認なしにリバートできたら便利でしょう。このような振る舞いをさせるには、変数revert-without-queryに正規表現のリストをセットします。ファイル名がそれらの正規表現の1つにマッチしたとき、find-fileおよびrevert-bufferは、バッファーが変更されていないときは、ファイルが変更される度に自動的にリバートします(もしテキストを編集していた場合、変更を放棄するのはおそらく正しくありません)。

visit中のファイルがディスク上で変更された際にバッファーを自動的にリバートするようにEmacsに指定できます。自動リバートーバッファーを自動的に最新に保つを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.5 自動リバートーバッファーを自動的に最新に保つ

visit中のファイルを別プログラムが変更した場合には、バッファーがvisit中のファイルと同期しなくなる可能性があります。これを最新に保つために、M-x auto-revert-modeをタイプしてAuto Revertモードを有効にできます。これはvisit中のファイルがディスク上で変更された際に、バッファーを自動的にリバートします。すべてのファイルバッファーで同じことを行うには、M-x global-auto-revert-modeをタイプしてGlobal Auto Revertモードを有効にします。

Auto Revertはバッファーに未保存の変更があったり、ディスク上のファイルが削除やリネームされた場合にはバッファーをリバートしません。

Auto Revertモードの1つの使い方は、システムログのようなファイルを“tail”することです。これにより、それらのファイルにたいする、他のプログラムによる変更を、継続的に表示できます。これを行うには、ポイントをバッファーの最後に移動します。そうすればファイル内容が変更されても、ポイントはその位置に留まります。しかし、ファイルがファイルの終端方向に向かって変更されるだけだと確信できるときは、かわりにAuto Revert Tailモード(auto-revert-tail-mode)を使います。このモードは、これをより効果的に行います。Auto Revert Tailモードは、リモートのファイルにたいしても機能します。

バッファーが自動リバートされたとき、メッセージが生成されます。これはauto-revert-verboseを非nilにセットすることにより、抑制できます。

Auto Revertモードはリモートファイルのチェックやリバートは、通常は低速なので行いません。この挙動は変数auto-revert-remote-filesを非nilにセットして変更できます。

デフォルトでは、Auto Revertモードはファイル通知(file notifications)を使用して機能します。これにより、ファイルシステムへの変更が、OSからEmacsに報告されます。変数auto-revert-use-notifynilにカスタマイズして、ファイル通知を無効にできます。その場合、Emacsは5秒ごとにポーリングして、ファイルの変更をチェックするでしょう。変数auto-revert-intervalを通じて、ポーリングの間隔を変更できます。

すべてのシステムでファイル通知がサポートされている訳ではありません。サポートされないシステムでは、auto-revert-use-notifyはデフォルトでnilです。

デフォルトではAuto Revertモードは、たとえファイル通知の使用中でもファイル変更の定期的なポーリングは行いません。多くの場合にはポーリングは不要であり、ポーリングをオフにして通知だけを信頼することにより電力が節減できます。これを行うには変数auto-revert-avoid-pollingに非nilをセットします。しかし別のマシンからファイルを変更可能なUnix系マシン上の主要なネットワークファイルシステムのように、特定のファイルシステムでは通知は効果がありません。そのようなファイルシステムではポーリングが必要かもしれません。auto-revert-avoid-pollingが非nilのときにポーリングを強制するには、を通知を使用するファイルから除外すべきファイルにマッチするようにauto-revert-notify-exclude-dir-regexpをセットします。

Diredバッファー(Dired (ディレクトリーエディター)を参照)では、Auto Revertモードはそのバッファーのディレクトリーでファイルが作成、または削除されたとき更新を行います。

バージョンコントロールシステムの下にあるファイルを、以前のバージョンにリバーとするコマンドについては、バージョンコントロール操作のアンドゥを参照してください。バージョンコントロールシステムの下にあるファイルをvisitしているときの自動リバートの特性については、バージョンコントロールとモードラインを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.5.1 非ファイルバッファーの自動リバート

通常Global Auto Revertモードは、ファイルのバッファーだけをリバートします。非ファイルバッファーにたいして自動リバートを行うには、2つの方法があります。1つはそれらのバッファーにたいしてAuto Revertモードを有効にする方法です(M-x auto-revert-modeを使います)。もう1つはglobal-auto-revert-non-file-buffersに非nil値をセットする方法です。後者はそれが実装されているすべての種類のバッファーにたいして、自動リバートを有効にします(以下のメニューにリストされています)。

ファイルバッファーと同様、非ファイルバッファーはそれらにたいして作業を行っているときや、リバートすると失われてしまう情報が含まれているとき、通常はリバートすべきではありません。したがって、それらがmodified(変更されている)のときはリバートしません。非ファイルバッファーが変更されているとマークするのは、ファイルバッファーのときより通常難しいので、トリッキーになり得ます。

他のトリッキーな点に関する詳細は、効率の問題です。自動リバートはしばしばバッファーにたいするすべての可能な変更を検知しようとせず、広範または簡単に検知できる変更だけを検知します。したがって、非ファイルバッファーに自動リバートを有効にすることは、バッファーのすべての情報が最新であると常に保証はしませんし、手動によるリバートを無用にする必要もないからです。

それとは反対に、特定のバッファーはauto-revert-intervalで指定された秒数ごとに自動的にリバートします(これは現在のところBuffer Menuだけに適用されます)。この場合、自動リバートはリバートの際、auto-revert-verboseが非nilでも、何もメッセージを表示しません。

いくつかの非ファイルバッファーは、バッファーのデフォルトディレクトリーのファイル通知によって信頼性をもって更新が可能です。Diredがその例です。メジャーモードはそのバッファーでbuffer-auto-revert-by-notificationに非nilをセットしてこれを示すことができ、Auto Revertが定期的なポーリングを行わなくすることができます。このような通知はディレクトリー自身にたいしてだけであり、ディレクトリーのファイルは含まれません。

詳細はバッファーの特性に依存し、それらは対応するセクションで説明されています。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.5.1.1 Buffer Menuの自動リバート

非ファイルバッファーの自動リバートが有効なとき、必要性の有無にかかわらず、Buffer Menu (複数バッファーにたいする操作を参照) はauto-revert-intervalで指定された秒数ごとに自動的にリバートされます。(リバートする必要があるかチェックするのは、恐らく実際にリバートするより長い時間を要する)。

Buffer Menuがmodifiedと不適切にマークされたときは、gにより手動でリバートして自動リバートを再開します。しかし特定のバッファーにたいして削除や表示のマークをつけた場合は、慎重になる必要があります。なぜならリバートはすべてのマークを消去するからです。マークの追加はバッファーのmodifiedフラグをセットするという事実は、自動的なマークの消去からの自動リバートを防ぎます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.5.1.2 Diredバッファーの自動リバート

Diredバッファーは、バッファーのメインディレクトリーのファイルリストが変化したとき(たとえば新しいファイルの追加や削除)だけ、自動リバートします。特定のファイルの情報が変化したとき(たとえばサイズの変化)や、サブディレクトリーへの追加は自動リバートしません。すべてのリストされた情報が最新であることを確実にするには、Diredバッファーで自動リバートが有効であっても、手動でgを使ってリバートする必要があります。メインディレクトリーにリストされているファイルへの変更や保存で、実際に自動リバートが起こるのに気付くかもしれません。これはファイルの変更や保存は、たとえばバックアップファイルやauto-saveファイルにより、高い確率でディレクトリー自身を変更するからです。しかし、これは保証されているわけではありません。

Diredバッファーがmodifiedとマークされ、残したい変更がない場合、大抵はgでバッファーを手動でリバートすることにより、自動リバートを再開できます。しかし1つ例外があります。ファイルにフラグやマークをつけた場合、安全にバッファーをリバートできます。これはフラグやマークを消去しません(もちろんマークされたファイルが削除されていない場合です)。しかしバッファーはリバートの後でさえmodifiedの状態に留まるので、自動リバートは再開しません。これは、もしファイルにたいしてフラグやマークをつけた場合、それはバッファーにたいして作業をしており、警告なしにバッファーが変更されることを望まないだろうからです。マークやフラグがある状態で自動リバートを再開したいときは、M-~を使ってバッファーをnon-modifiedとマークします。しかしマークやフラグの追加・削除・変更により、バッファーは再びmodifiedとマークされます。

現在のところ、リモートのDiredバッファーは、自動リバートされません。特定のファイルだけをリストするように、シェルのワイルドカードやファイル引数を与えられたDiredバッファーも同じです。*Find*および*Locate*は、どちらも自動リバートしません。

Diredバッファーの自動リバートは、いくつかのシステムでは満足に機能しないかもしれないことに注意してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.6 自動保存-災害にたいする防御

Emacsは定期的に、visitしているファイルを、実際に使っているファイルを変更せずに、別のファイルに自動的に保存するときがあります。これは自動保存(auto-saving)と呼ばれます。これはシステムがクラッシュしたとき、失われてしまう作業をある程度以下に制限するためのものです。

Emacsが自動保存するときだと決定すると、各バッファーを判断して、それらのバッファーの自動保存が有効で、最後に自動保存されてから変更されている場合には自動保存します。auto-save-no-message変数がnil (デフォルト)にセットされている際には、もし自動保存されているファイルが実際にあればエコーエリアに‘Auto-saving...’というメッセージが自動保存の間に表示されます。このメッセージを無効にするには、この変数を非nilにカスタマイズしてください。自動保存の間のエラーはキャッチされるので、ユーザーがタイプして実行したコマンドに、干渉することはありません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.6.1 自動保存ファイル

自動保存は通常、visitしているファイルへの保存はしません。なぜなら永続化したくない変更を保存するのは、好ましくないからです。そのかわりに、自動保存はauto-saveファイルと呼ばれる別のファイルに保存し、visitしているファイルへの変更は、保存を明示的に要求したとき(C-x C-sなど)に行います。

auto-saveファイルの名前は通常、visitしているファイル名の前後に‘#’をつけて作られます。したがってfoo.cというファイルをvisitしているバッファーは、#foo.c#というファイルに自動保存されます。ファイルをvisitしていないバッファーのほとんどは、明示的に要求した場合だけ自動保存されます。それらのバッファーが自動保存されるとき、auto-saveファイル名は、バッファー名の前後に‘#’をつけて、その後ろに数字と文字を付け加えて一意な名前にします。たとえば送信メッセージを作成する*mail*バッファーは、#*mail*#704juuのような名前のファイルに、自動保存されます。Emacsの一部(関数make-auto-save-file-nameおよびauto-save-file-name-p)を違った方法で再プログラムしない限り、auto-saveファイル名はこの方法で作成されますバッファーの自動保存に使われるファイル名は、そのバッファーの自動保存をオンにしたときに計算されます。

変数auto-save-file-name-transformsは、auto-saveファイル名をある程度制御することを許します。これに一連の正規表現を指定して置換することにより、auto-saveファイル名を変更します。デフォルト値は、リモートのファイル(リモートファイルを参照してください)を、ローカルマシンの一時ディレクトリーのauto-saveファイルに変換します。

大きなバッファーから大量のテキストを削除したとき、そのバッファーにたいする自動保存は一時的にオフになります。これは、もしテキストをうっかり削除してしまった場合、それがauto-saveファイルに含まれていて、そこから探せる方が便利だからです。これが発生した後、再び自動保存を有効にするには、バッファーをC-x C-sで保存するか、C-u 1 M-x auto-save-modeを使います。

別のauto-saveファイルではなく、visitしているファイル自体に自動保存したい場合は、グローバルなマイナーモードauto-save-visited-modeを有効にします。このモードでは、自動保存は明示的な保存と等価です。このモードは上述のauto-saveと直交(orthogonal)するモードであり、両方同時に有効にできることに注意してください。しかし、いくつかのバッファーでauto-saveモードがアクティブで、かつ時代遅れのauto-save-visited-file-name変数が非nil値の場合、そのバッファーはauto-save-visited-modeの影響を受けないでしょう。

auto-save-visited-modeモードの自動保存処理の間隔は、変数auto-save-visited-intervalを使用してカスタマイズできます。auto-save-intervalauto-save-timeoutは、auto-save-visited-modeに影響を与えません。これらの変数の詳細は、自動保存の制御を参照してください。

バッファーのauto-saveファイルは、そのバッファーをvisitしているファイルに保存したとき削除されます(変数delete-auto-save-filesnilにセットすることにより、これを禁じることができます)。C-x C-wまたはset-visited-file-nameで、visitされているファイル名を変更することにより、あたらしくvisitされているファイル名にもとづいてauto-saveファイル名はリネームされます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.6.2 自動保存の制御

ファイルをvisitする度に、そのファイルバッファーの自動保存は、オンになります(バッチモードでは異なります。初期化オプションを参照してください)。この変数のデフォルトはtなので、ファイルをvisitしているバッファーの自動保存は通常、常に行われます。現在のバッファーの自動保存を切り替えるには、M-x auto-save-modeとタイプします。Auto Saveモードはバッファーローカルに動作するマイナーモードです(マイナーモードを参照してください)。

Emacsは最後に自動保存されてから何文字タイプしたかにもとづいて、定期的に自動保存を行います。変数auto-save-intervalは、自動保存と自動保存の間に何文字タイプされたかを指定します。デフォルトは300です。Emacsは小さすぎる値は受け付けません。auto-save-intervalを20より小さな値にカスタマイズした場合、Emacsは20と指定されたかのように振る舞います。

自動保存はタイピングをストップしたときも行われます。デフォルトでは30秒アイドル状態が続くと実行されます。(このときEmacsはガベージコレクションも実行します; Garbage Collection in The Emacs Lisp Reference Manualを参照してください)。この間隔を変更するには、変数auto-save-timeoutをカスタマイズします。実際の実行間隔は、現在のバッファーの大きさに応じて長くなります。これは、自動保存が実感できるほど時間がかかるような大きなバッファーを編集しているときは、それをなるべく無くすようにする狙いです。アイドル状態のときの自動保存は、2つの事を達成します。最初に、端末を少しの間離れるときなどに、すべての作業の保存を保証します。次に、実際にタイプしているときは自動保存を避けます。

auto-save-visited-modeが有効なとき、Emacsはアイドル5秒後に、ファイルをvisitしているバッファーを自動保存するでしょう。アイドル時の間隔は、変数auto-save-visited-intervalでカスタマイズできます。

Emacsは、致命的なエラーが発生したときも自動保存を行います。これには‘kill %emacs’のようなコマンドによるEmacsジョブのkill、電話回線やネットワーク回線の切断が含まれます。

コマンドM-x do-auto-saveにより、明示的に自動保存を行うことができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.6.3 自動保存からのデータ復旧

コマンドM-x recover-file RET file RETにより、auto-saveファイルの内容を使って、失われたデータを復旧できます。これはfileをvisitして、(確認を求めた後で)auto-saveファイル#file#の内容をリストアします。その後C-x C-sで復旧したテキストを、file自身に保存できます。たとえばファイルfoo.cを、そのauto-saveファイル#foo.c#で復旧するには、以下のようにします:

M-x recover-file RET foo.c RET
yes RET
C-x C-s

M-x recover-fileは確認を求める前に、指定したファイルとauto-saveファイルのあるディレクトリー一覧を表示するので、ファイルのサイズや日付を確認できます。auto-saveの方が古い場合、M-x recover-fileはそれを読み込むように提案しません。

Emacsまたはコンピューターがクラッシュしたとき、M-x recover-sessionコマンドで編集していたすべてのファイルを、それらのauto-saveファイルで復旧できます。これは最初に中断されたセッションの記録された一覧を表示します。ポイントを移動して選択してから、C-c C-cをタイプします。

recover-sessionは、そのセッションの間に編集されていた各ファイルについて、ファイルを復旧するか尋ねます。yと応えるとrecover-fileを呼び出し、通常の方法で復旧を行います。これは元のファイルとauto-saveファイルの日付を表示して、ファイルの復旧を行うかもう1度尋ねます。

recover-sessionが完了すると、復旧を選択したファイルがEmacsバッファーに表示されます。実際にファイル自体を 更新するためには、これらを保存するのが唯一の方法です。

Emacsは中断されたセッションについての情報を、ディレクトリー~/.emacs.d/auto-save-list/の、.saves-pid-hostname~という名前のファイルに記録します。auto-save-list-file-prefixnilにセットすると、復旧用にセッションが記録されなくなります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.7 ファイルのエイリアス

シンボリックリンクとハードリンクは、同じファイルを参照するためにいくつかの名前を使うことを可能にします。ハードリンクは、ファイルを直接参照する他の名前です。それらすべての名前は同じように有効で、それらの間に優先順位はありません。対照的にシンボリックリンクは、ある種の定義されたエイリアス(別名)です。foobarへのシンボリックリンクの場合、そのファイルをどちらの名前でも参照できますが、barが実際の名前で、fooはエイリアスに過ぎません。シンボリックリンクがディレクトリーを指すときは、さらに複雑なケースが発生します。

Emacsがすでに異なる名前でvisitしている場合、通常はエコーエリアにメッセージを表示して、そのファイルをvisitしている既存のバッファーを使います。これはハードリンクおよびシンボリックリンクをサポートしているシステム、または長いファイル名を切り詰めるシステムで長い名前のファイルを使っている場合、またはファイル名の大文字小文字を区別しないシステムで発生します。変数find-file-suppress-same-file-warningsを非nil値にセットすることにより、メッセージを表示しないようにできます。変数find-file-existing-other-namenilにセットすれば、この機能全体を無効にできます。その場合、同じファイルを異なる名前でvisitすると、それぞれのファイル名で別々のバッファーが使われます。

変数find-file-visit-truenameが非nilの場合、バッファー用に記録されるファイル名は、指定した名前ではなく、ファイルの本当の名前(これはすべてのシンボリックリンクを対象の名前で置き換えて作られます)が使われます。find-file-visit-truenameをセットするは、find-file-existing-other-nameにも暗に影響します。

シンボリックリンクを通じてアクセスされるようなディレクトリーにたいしては通常、優先的にリンクされた名前をEmacsに表示させたいときがあります。これを行うにはdirectory-abbrev-alistをカスタマイズします。このリストの各要素は(from . to)という書式です。これはディレクトリー名にfromが出現したときは常に、fromtoで置き換えることを意味します。文字列fromは正規表現です(正規表現の構文を参照してください)。正規表現はディレクトリー名の最初の文字にマッチさせる必要があるので、‘\`’で始まります(埋め込みの改行をサポートするディレクトリー名の場合は、‘^’で無効にします)。toには同じディレクトリーを指す、絶対パスによる普通のディレクトリー名を指定する必要があります。文字列toでホームディレクトリーを指定するのに、‘~’を使用しないでください。Emacsはこれらの変換を個別に行います。以下は通常シンボリックリンク/fsfでアクセスされる、/home/fsfを指定する例です:

(("\\`/home/fsf" . "/fsf"))

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.8 ファイルディレクトリー

ファイルシステムは、ファイルをディレクトリーにグループ化します。ディレクトリーリストは、ディレクトリーに含まれるファイルのリストです。Emacsはディレクトリーを作成および削除するコマンドを提供し、簡単な形式(ファイル名のみ)、および詳細な形式(サイズ、日付、その他の属性を含む)のディレクトリーリストを作成します。EmacsにはDiredと呼ばれるディレクトリーブラウザーも含まれています。詳細はDired (ディレクトリーエディター)(C-x dで呼び出せる)を参照してください。

C-x C-d dir-or-pattern RET

簡単なディレクトリーリストを表示します(list-directory)。

C-u C-x C-d dir-or-pattern RET

詳細なディレクトリーリストを表示します。

M-x make-directory RET dirname RET

dirnameという名前の新しいディレクトリーを作成します。

M-x delete-directory RET dirname RET

dirnameという名前のディレクトリーを削除します。もし空でない場合、それらを再帰的に削除するか尋ねます。

ディレクトリーリストを表示するコマンドは、C-x C-d (list-directory)です。これはミニバッファーを使って、リストを表示するディレクトリーと、リストするファイルを指定するワイルドカードが含まれたパターンの両方により、ファイル名を読み取ります。たとえば

C-x C-d /u2/emacs/etc RET

これはディレクトリー/u2/emacs/etcのファイルをリストします。以下はファイル名のパターンを指定する例です。

C-x C-d /u2/emacs/src/*.c RET

通常、C-x C-dは名前だけを含む、簡単なディレクトリーリストを表示します。数引数(値は関係なし)は、サイズ、日付、所有者を含む詳細な一覧を作成するよう指示します。

ディレクトリーリストのテキストは、主に下位プロセスとしてlsを実行することにより取得されます。2つのEmacs変数が、lsに指定するスイッチを制御します。list-directory-brief-switchesには、簡単な一覧に使うためのスイッチを文字列で指定します(デフォルトは"-CF")。list-directory-verbose-switchesには、詳細な一覧に使うためのスイッチを文字列で指定します(デフォルトは"-l")。

詳細なディレクトリーのリストでは、Emacsはディレクトリーを含むディスク上のフリー領域サイズに関する情報を追加します。

コマンドM-x delete-directoryは、ミニバッファーを使ってディレクトリー名の入力を求め、空のときはディレクトリーを削除します。ディレクトリーが空でない場合、再帰的に削除するか確認を求めます。“Trash(ごみ箱)”(または“Recycle Bin”)の機能をもつシステムでは、変数delete-by-moving-to-trashtに変更することにより、指定したディレクトリーを無条件に削除するかわりに、ごみ箱に移動します。ごみ箱の使い方についての情報は、その他のファイル操作を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.9 ファイルの比較

コマンドM-x diffは、ミニバッファーを使って2つのファイル名の入力を求め、*diff*という名前のバッファーに、2つのファイルの違いを表示します。これはdiffプログラムに、変数diff-switchesで指定されたオプションを指定して実行することにより機能します。diff-switchesには文字列を指定します。デフォルトはunified context diff形式を指定する"-u"です。プログラムについての情報は、Diff in Comparing and Merging Filesを参照してください。

diffコマンドの出力は、Diffモードと呼ばれるメジャーモードを使って表示されます。Diffモードを参照してください。

(より高機能な)代替物はM-x ediffです(Ediff in The Ediff Manualを参照)。

コマンドM-x diff-backupは指定したファイルと、そのファイルの一番最近のバックアップを比較します。バックアップファイル名を指定したときは、diff-backupは指定されたバックアップファイルと、それの元となるファイルを比較します。それ以外の点はM-x diffと同じです。

コマンドM-x diff-buffer-with-fileは指定されたバッファーと、それに対応するファイルを比較します。これはバッファーを保存すると、ファイルにどのような変更がされるかを表示します。

コマンドM-x diff-buffersは指定した2つのバッファーのコンテンツを比較します。

コマンドM-x compare-windowsはカレントウィンドウと、カレントウィンドウの前に選択されていたウィンドウを比較します(Emacsのウィンドウについての詳細は、複数ウィンドウを参照してください)。比較はそれぞれのウィンドウのポイント位置から、それぞれのバッファーのポイントの初期位置を、対応するバッファーのマークリング(マークリングを参照)にpushした後に開始されます。それから各ウィンドウのポイントを1文字ずつ前方に移動していきます。文字がマッチしなくなるとコマンドは終了します。

コマンドを開始したとき、2つのウィンドウのポイントの後ろのテキストがマッチしない場合、M-x compare-windowsは2つのウィンドウでマッチするテキストが見つかるまでポイントを進めてから終了します。したがってM-x compare-windowsを繰り返し使うと、毎回1つのマッチする範囲をスキップするか、次の開始点を探します。

数引数を指定すると、compare-windowsは空白文字の違いを無視します。変数compare-ignore-caseが非nilの場合、大文字小文字の違いを無視して比較します。変数compare-ignore-whitespaceが非nilの場合、compare-windowsはデフォルトでは空白文字の違いを無視しますが、数引数が指定されたときは、その回のコマンド呼び出しでは、これをオフにします。

M-x smerge-modeを使って、Smergeモードに切り替えることができます。これはdiff3プログラムの出力を編集するマイナーモードです。これは通常、バージョン管理システムと、バージョン管理システムの外でのupdateをマージするとき、ファイルへの変更が競合して失敗した結果です。Smergeモードは特定の変更を選択することにより、競合を解決するコマンドを提供します。

ファイルをマージする強力なインターフェースを提供するEmerge機能については、 Emergeでのファイルのマージを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.10 Diffモード

Diffモードは、M-x diffや他の同様なコマンドの出力のために使用されるメジャーモードです。この種の出力はpatchと呼ばれます。なぜならそれが特定の変更を自動的に適用するために、patchコマンドに渡されるからです。手動でDiffモードを選択するには、M-x diff-modeとタイプします。

パッチに指定された変更は、hunk(欲張り)にグループ化されます。これは変更された行を1行以上含むテキストと、それに隣接するテキストです。hunksもまた、変更のコンテキストを提供するために、変更されていない行も含みます。それぞれのhunkにはhunkヘッダーが前についていて、これはhunkの変更が発生した、古い行番号と、新しい行番号が指定されます。Diffモードは実際のhunkの内容と区別するため、hunkヘッダーをハイライトします。

パッチ内の最初のhunkの前にはファイルヘッダーがあり、それはそのファイルの新たなバージョンと古いバージョンの名前と、それらのタイムスタンプを示します。パッチが複数ファイルの変更を表す場合、各ファイルがそのファイルの変更の最初のhunkの前にそのようなヘッダーをもつことになります。

他のバッファーと同様に、Diffモードのバッファーを編集することができます(もし読み込み専用の場合、最初にそれを書き込み可にする必要があります。その他のバッファー操作を参照のこと)。hunkを編集すると、Diffモードはpatchを正しい状態に保ち、patchにより正しく適用できるように、hunkヘッダーの行番号を自動的に修正しようと試みます。自動的な行番号の修正を無効にするには、変数diff-update-on-the-flynilに変更してください。

DiffモードはM-g M-nやエラーメッセージを処理する他のコマンドによりコンパイラーのエラーメッセージとして扱われるようにhunkをアレンジします(Compilationモードを参照)。したがって、対応するソースの位置をvisitするために、Compilationモードのコマンドを使用できます。

それに加えてDiffモードは、移動、操作、patchの一部を適用するために、以下のコマンドを提供します:

M-n

次のhunk-startに移動します(diff-hunk-next)。プレフィクス引数を指定した場合は、次のn番目のhunkに前方へ移動します。

デフォルトではDiffモードはEmacsが表示する際により良い粒度で変更をハイライトできるようにhunkをリファイン(refine: 洗練する)します。diff-refineにシンボルnavigationをセットすると、Diffはこのコマンドやdiff-hunk-prevで移動したhunkだけをリファインします。

M-p

前のhunkが開始される位置に移動します(diff-hunk-prev)。プレフィクス引数を指定した場合には、前のn番目のhunkに後方へ移動します。diff-refineにシンボルnavigationをセットしていれば、このコマンドはM-nと同様に移動先のhunkをリファインします。

M-}

複数ファイルへのpatchで、次のファイルが開始される位置に移動します(diff-file-next)。プレフィクス引数を指定した場合は、次のn番目のファイルの先頭へ、前方に移動します。

M-{

複数ファイルへのpatchで、前のファイルが開始される位置に移動します(diff-file-prev)。プレフィクス引数を指定した場合は、前のn番目のファイルの先頭へ、後方に移動します。

M-k

ポイントがある位置のhunkをkillします(diff-hunk-kill)。

M-K

複数ファイルへのpatchで、現在のファイル部分をkillします(diff-file-kill)。

C-c C-a

そのhunkを、ターゲットファイルに適用します(diff-apply-hunk)。C-uによるプレフィクス引数を与えた場合は、このhunkをリバート(“新しい”バージョンを“古い”バージョンに変更するリバースhunkを適用する)します。diff-jump-to-old-fileが非nilなら、かわりにsのhunkを“古い”バージョンに適用します。

C-c C-b

ポイント位置のhunkの変更を、よりよい粒度でハイライトします(diff-refine-hunk)。これにより変更された各行について実際に変更された箇所を確実に見ることができます。

デフォルトではDiffモードはEmacsがhunkを表示する際にhunkをリファインするので、diff-refineを非デフォルト値にカスタマイズしている場合にはこのコマンドが有用だと思うかもしれません。

C-c C-c

そのhunkに対応するソースファイルの該当行にジャンプします(diff-goto-source)。デフォルトではファイルヘッダーの最初に示される、“新しい”バージョンのファイルにジャンプします。プレフィクス引数を与えた場合には、かわりに“古い”バージョンにジャンプします。diff-jump-to-old-fileが非nilなら、このコマンドはデフォルトで“古い”バージョンにジャンプして、プレフィクス引数の意味も逆になります。プレフィクス引数が8より大(たとえばC-u C-u C-c C-cとタイプした場合)なら、このコマンドは次回呼び出しにたいしてdiff-jump-to-old-fileのセットも行います。ソースファイルがバージョンコントロール(バージョンコントロールを参照)の配下にある場合には、デフォルトでは作業ファイルにジャンプします。プレフィクス引数を与えると、ポイントが古い行にあれば“旧”リビジョン(古いリビジョンの調査と比較を参照)、それ以外なら“新”リビジョンにジャンプします。

C-c C-e

このパッチでEdiffセッションを開始します。Ediff in The Ediff Manualを参照してください。

C-c C-n

表示を現在のhunkに制限します(diff-restrict-view)。ナローイングを参照してください。プレフィクス引数を指定すると、複数ファイルへのpatchで、表示を現在のファイルに制限します。制限を解除するには、C-x n w (widen)を使います。

C-c C-r

バッファー全体にたいする比較方向を逆転します(diff-reverse-direction)。プレフィクス引数を与えた場合は、カレントリージョンの内部でのみ方向を逆転します(マークとリージョンを参照)。方向の逆転とは、hunkとファイル冒頭のヘッダーを、“新しい”バージョンから“古い”バージョンにするパッチを生成するように変更することを意味します。

C-c C-s

ポイント位置でhunkを2つの別個のhunkに分割します(diff-split-hunk)。これはhunkヘッダーの挿入ち、カレントhunkのヘッダーの変更を行います。これは手動でpatchを編集するために有用で、diffプログラムに-uまたは--unifiedオプションを指定して生成された、unified diff format(統一diffフォーマット)だけで機能します。diff-cまたは--contextオプションを指定して生成された、context diff format(コンテキストdiffフォーマット)のhunkを分割するには、最初にC-c C-uで、バッファーをunified diff formatに変換する必要があります。

C-c C-d

バッファー全体を、context diff formatに変換します(diff-unified->context)。プレフィクス引数を指定すると、リージョンのhunkだけを変換します。

C-c C-u

バッファー全体をunified diff formatに変換します(diff-context->unified)。プレフィクス引数を指定すると、unified formatからcontext formatに変換します。マークがアクティブのときは、リージョンのhunkだけを変換します。

C-c C-w

空白文字の変更を無視して、カレントhunkを再生成します(diff-ignore-whitespace-hunk)。

C-x 4 A

それぞれのhunkについて、C-x 4 aが行うようにChangeLog(変更ログを参照してください)のエントリーを生成します(diff-add-change-log-entries-other-window)。これは、あとで実際に変更の説明を記入できるように、変更ログの雛形を作ります。DiffモードでのC-x 4 a自体は、現在のhunkのファイルのためのものですが、関数名はpatch自体から取得します。これはpatchにより削除される関数のための、ログエントリーを作るのに有用です。

patchには変更された行の行末に、無意識に入力された望んでいない空白文字が含まれている場合があります。この問題を扱うには2つの方法があります。1つ目はDiffバッファーでWhitespaceモード(不要なスペースを参照してください)を有効にする方法で、これは自動的に変更された行の行末にある空白文字をハイライトします。2つ目はコマンドM-x diff-delete-trailing-whitespaceを使う方法で、patchにより変更された行の行末の空白文字を検索して、patchとpatchされたソースファイルの両方からそれを取り除きます。このコマンドは変更を保存しないので、ユーザーが変更を保存するか決定することができます(変更されたファイルはエコーエリアに表示されます)。プレフィクス引数を指定すると、patchされた(“新しい”)ファイルではなく、元の(“古い”)ソースファイルを変更しようと試みます。

diff-font-lock-syntaxが非nilならhunk内のソース断片は適切なメジャーモードに応じてハイライトされます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.11 ファイルのコピー、命名、リネーム。

Emacsにはファイルをコピー、命名、リネームするためのコマンドがいくつかあります。これらはすべてミニバッファーを使用してold(またはtarget)とnewの2つのファイル名を読み取り、それらをコピー、またはファイル名に調整します。これらのコマンドは、ワイルドカードを含むファイル名は許容しません。

これらすべてのコマンドは、引数newが単なるディレクトリー名(Directory Names in the Emacs Lisp Reference Manualを参照)の場合には、そのディレクトリーを実際の新しい名前として、oldをそれの非ディレクトリー成分とします。たとえば、コマンドM-x rename-file RET ~/foo RET /tmp/ RETは、~/foo/tmp/fooにリネームします。GNU、およびその他のPOSIXシステムでは、ディレクトリー名は‘/’で終端されます。

これらのコマンドはすべて、新しいファイル名がすでに存在する場合は確認を求めます。

M-x copy-fileはファイルoldのコンテンツを、ファイルnewにコピーします。

M-x copy-directoryは、シェルコマンドcp -rと同じようにディレクトリーをコピーします。newがディレクトリー名の場合、このコマンドはoldディレクトリーのコピーを作成して、それをnewの下に配します。それ以外では、このコマンドはoldのコンテンツを、新しいnewという名前のディレクトリーにすべてコピーします。

M-x rename-fileは、ファイルoldnewにリネームします。すでにファイル名newが存在する場合、確認にyesと答えなければリネームは行われません。なぜなら、名前newの古い内容が失われてしまうからです。oldnewが異なるファイルシステム上にある場合は、ファイルoldがコピーされた後に削除されます。

ファイルがバージョンコントロール(バージョンコントロールを参照してください)の配下にある時は、M-x rename-fileのかわりにM-x vc-rename-fileを使ってリネームします。バージョンコントロールされたファイルの削除とリネームを参照してください。

M-x add-name-to-fileは、既存のファイルの古い名前を削除せずに、新しい名前を追加します。新しい名前は、既存のファイルのハードリンクとして作成されます。新しい名前は、そのファイルがあるのと同じファイルシステムになければなりません。MS-Windowsでは、このコマンドはファイルがNTFSファイルシステムにあるときだけ機能します。MS-DOS、およびその他いくつかのリモートシステムタイプでは、ファイルをコピーすることにより機能します。

M-x make-symbolic-linkは、targetを指すnewという名前のシンボリックリンクを作成します。これにより、今後newというファイルを開こうとすると、その時点でtargetという名前のファイルが何であれ、ファイルのオープンが行われたときは、そのファイルを開きます。その時点でtargetという名前のファイルが存在しないときはエラーになります。このコマンドは引数targetを展開しないので、リンクの対象を相対パスで指定できます。しかし、このコマンドはtarget内の先頭の‘~’は展開するので、簡単にホームディレクトリーを指定できます。また、先頭の‘/:’は取り除くので、リテラル‘~’および‘/:’で始まる相対パスを指定することができます。ファイル名のクォートを参照してください。MS-Windowsでは、このコマンドはMS Windows Vista以降だけで機能します。newがリモートのときは、そのシステムタイプに依存して機能します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.12 その他のファイル操作

Emacsには、ファイルを操作する他のコマンドがたくさん存在します。それらはすべて1つのファイルを操作します。ファイル名にワイルドカードは指定できません。

M-x delete-fileはファイルの入力を求め、そのファイルを削除します。1つのディレクトリーにある、複数のファイルを削除する場合、delete-fileよりDiredを使う方が便利でしょう。Diredでのファイルの削除についてを参照してください。

M-x move-file-to-trashは、ファイルをシステムのTrash(またはRecycle Bin)に移動します。この機能は、ほとんどのオペレーティングシステムで利用可能です。Trashに移動されたファイルは、後で気が変わったとき元に戻すことができます(trashに移動されたファイルのリストアはシステムに依存する)。

デフォルトでは、Emacsの削除コマンドはTrashを使いません。一般的な削除コマンドでTrash(それが利用可能な場合)を使うには、変数delete-by-moving-to-trashtに変更します。これはコマンドM-x delete-fileM-x delete-directory (ファイルディレクトリーを参照してください)、およびDired (Diredでのファイルの削除についてを参照してください)の削除コマンドに影響を与えます。M-x delete-fileおよびM-x delete-directoryにプレフィクス引数を与えると、delete-by-moving-to-trashの値にかかわらず、Trashを使わずに完全に削除します。

ファイルがバージョンコントロール(バージョンコントロールを参照してください)の配下にある時は、M-x delete-fileのかわりにM-x vc-delete-fileを使って、ファイルを削除します。バージョンコントロールされたファイルの削除とリネームを参照してください。

M-x insert-file(C-x iも)は、指定したファイルの内容のコピーを、現在のポイント位置に挿入し、ポイントの位置は変更せずに挿入された内容の前に残します。挿入した内容の後の位置はマークリングに追加され、マークは非アクティブになります(マークリングを参照してください)。

M-x insert-file-literallyM-x insert-fileと同様ですが、ファイルはliterally(そのまま)挿入されます。つまりM-x find-file-literallyコマンド(ファイルのvisit(訪問)を参照してください)と同様に、特別なエンコーディングや変換なしに、ASCII文字の並びとして扱われます。

M-x write-regionM-x insert-fileの逆です。このコマンドはリージョンの内容を、指定されたファイルにコピーします。M-x append-to-fileはリージョンのテキストを、指定されたファイルの末尾に加えます。テキストの追加を参照してください。変数write-region-inhibit-fsyncの値は、これらのコマンドおよびファイルの保存に影響を与えます。ファイル保存のカスタマイズを参照してください。

M-x set-file-modesはファイル名と、その後にファイルモード(file mode)を読み込んで、指定されたファイルにそのファイルモードを適用します。ファイルモード(またはファイルパーミッション(file permissions)とも呼ばれます)は、ファイルが読み込み可能か、書き込み可能か、実行可能か、そしてそれは誰にたいしてなのかを決定します。このコマンドは、chmodコマンドに指定する形式の、シンボルまたは8進のファイルモードを読み取ります。たとえば‘u+x’は、そのファイルを所有するユーザーに実行可能の権限を追加することを意味します。ファイルモードをサポートしないオペレーティングシステムでは、効果はありません。chmodはこの関数の便利なエイリアスです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.13 圧縮ファイルへのアクセス

Emacsは、圧縮されたファイルをvisitするとき、自動的に解凍します。また、それらのファイルを変更して保存するときも、自動的に再圧縮します。Emacsは圧縮ファイルを名前で認識します。ファイル名が‘.gz’で終わっていれば、それはファイルがgzipで圧縮されていることを示します。他の拡張子の場合は、他の圧縮プログラムを示します。

自動的な解凍と圧縮は、Emacsがファイル内容を操作するすべてに適用されます。これにはvisit、保存、内容のバッファーへの挿入、ロード、バイトコンパイルが含まれます。

この機能を無効にするには、コマンドM-x auto-compression-modeとタイプします。変数auto-compression-modeをカスタマイズすることにより、永続的に無効にすることができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.14 ファイルアーカイブ

名前が‘.tar’で終わるファイルは通常、tarプログラムで作られたアーカイブです。Emacsはそれらを、Tarモードと呼ばれる特別なモードで表示します。これは内容をDiredに似たリストで提供します(Dired (ディレクトリーエディター)を参照してください)。リストの移動はDiredのときと同様で、アーカイブに含まれるファイルをvisitできます。しかしTarモードでは、Diredコマンドのすべてが利用可能ではありません。

Auto Compressionモードが有効な場合(圧縮ファイルへのアクセスを参照してください)、Tarモードは圧縮アーカイブ(ファイルの拡張子が‘.tgz’、.tar.Z.tar.gz)も使うことができます。

キーefRETはすべて、ファイルをファイル自身のバッファーに展開します。それをバッファーで編集して、バッファーを保存すると、編集されたバージョンでTarバッファーのものを置き換えます。Tarバッファーでファイル名をマウスでクリックしても、同様なことが行えます。vはファイルをバッファーにViewモードで展開します(Viewモードを参照してください)。oは、ファイルを展開して他のウィンドウで表示するので、ファイルの編集とアーカイブの操作を同時に行うことができます。

キーIは、新しい(標準)ファイルをアーカイブに追加します。ファイルは最初は空ですが、上記のコマンドを使用してすぐに編集することができます。このコマンドはカレントのファイルの前に新しいファイルを挿入するので、Tarバッファーの最上行で使用すると、新しいファイルがアーカイブの最上行となり、バッファーの最後で使用すると、新しいファイルがアーカイブの最下行になります。

Diredと同様に、dは後でxを使ったときにファイルを削除するためにマークし、uはマークを外します。Cはファイルをアーカイブからディスクにコピーし、Rはアーカイブのファイルをリネームします。gはバッファーをディスク上のアーカイブでリバートします。キーMGOは、ファイルのパーミッションビット、グループ、所有者を変更します。

Tarバッファーの保存により、構成要素に変更が施された、新しいバージョンのアーカイブをディスクに書き込みます。

Tarモードを使うのに、tarプログラムは必要ありません。Emacsは直接アーカイブを読み込みます。しかし圧縮アーカイブへのアクセスには、適切な解凍プログラムが必要です。

arcjarlzhziprar7zzoo、および自己解凍実行形式のexeには、互いに似通った異なるArchiveモードが使われます。

ArchiveモードのキーバインドはTarモードと同様で、それに加えてキーmは後に続く操作のためにファイルをマークし、M-DELはマークされたファイルのマークをすべて外します。キーaは、1行に収まらないようなアーカイブの、詳細なファイル情報の表示を切り替えます。ファイルのリネーム、ファイルモードや所有者の変更をサポートするアーカイブ書式は、いくつかに限られます。

Tarモードとは異なり、Archiveモードはアーカイブの展開と格納に、アーカイブプログラムを実行します。しかし、展開したりアーカイブ内のファイルを操作するときだけこれらのプログラムが必要で、アーカイブの目録を見るには必要ありません。プログラム名とセットできるオプションの詳細は、Customizeグループ‘Archive’でセットできます(カスタマイズグループを参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.15 リモートファイル

他のマシンにあるファイルを、特別なファイル名構文を使って参照できます:

/method:host:filename
/method:user@host:filename
/method:user@host#port:filename

このリクエストを発行するために、Emacsはsshのような、リモートログインプログラムを使います。どのmethodを使うかは、常にファイル名で指定しなければなりません。たとえば/ssh:user@host:filenamesshを使います。ファイル名のmethodに擬似methodの‘-’を使用したとき、Emacsは以下によりmethodを選択します:

  1. ホスト名が‘ftp.’(ドット付き)で始まるとき、EmacsはFTPを使います。
  2. ユーザー名が‘ftp’または‘anonymous’のとき、EmacsはFTPを使います。
  3. 変数tramp-default-methodが‘ftp’にセットされているとき、EmacsはFTPを使います。
  4. ssh-agentが実行されているとき、Emacsはscpを使います。
  5. 上記以外の場合、Emacsはsshを使います。

変数tramp-modenilにセットすることにより、リモートファイル名の機能を完全にオフにすることができます。個別のケースについて機能をオフにするには、ファイル名を‘/:’でクォートします(ファイル名のクォートを参照してください)。

FTPを通じたリモートファイルへのアクセスは、以下で説明するAnge-FTPパッケージで処理されます。他の方法によりリモートファイルへのアクセスはTrampパッケージにより処理され、これにはそれ自身のマニュアルがあります。The Tramp Manual in The Tramp Manualを参照してください。

Ange-FTPパッケージでは、リモートファイル名にユーザー名userがしているときは、FTPを通じてその名前でログインします。userが指定されていないとき、Emacsはローカルシステムのユーザー名でログインします。しかし変数ange-ftp-default-userに文字列がセットされているときは、かわりにその文字列を使用します。Emacsは、ログイン時にパスワードの入力も求めます。

パフォーマンス的な理由により、FTPを通じたファイルのアクセス時に、デフォルトではEmacsはバックアップファイルを作成しません。バックアップを作成するには、変数ange-ftp-make-backup-filesを非nil値に変更してください。

デフォルトではリモートファイルの自動保存ファイルは、変数auto-save-file-name-transformsで指定された、ローカルマシンの一時ディレクトリーに作成されます。自動保存ファイルを参照してください。

匿名FTPでアクセスできるファイルをvisitするには、特別なユーザー名‘anonymous’または‘ftp’を使います。これらのユーザー名にたいするパスワードは、特別に処理されます。これは変数ange-ftp-generate-anonymous-passwordにより制御されます。この変数の値が文字列の場合、その文字列がパスワードとして使用されます。非nil(デフォルト)の場合、user-mail-addressの値が使用されます。nilの場合、Emacsは通常どおりパスワードの入力を求めます(パスワードの入力を参照してください)。

セキュリティー上の理由で、リモートマシンとの間にあるファイアーウォール(firewall)により、ファイルにアクセスできないときがあります。対象ファイルにアクセスできるマシンからゲートウェイ(gateway)マシンにログインできて、FTPサーバーがゲートウェイ機能をサポートしている場合は、リモートファイル名を使うことができます。これを行うには変数ange-ftp-gateway-hostにゲートウェイマシンの名前をセットして、ange-ftp-smart-gatewaytにセットする必要があります。それ以外の場合でもリモートファイル名が機能するようにできますが、その方法は複雑です。これらの方法は、M-x finder-commentary RET ange-ftp RETとタイプして読むことができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.16 ファイル名のクォート

特殊な文字や構文を含むファイルにたいする特別な効果を防ぐために、絶対ファイル名をクォートできます。これを行うには先頭に‘/:’を追加します。

たとえばリモートにあるように見える名前の、ローカルなファイルの名前をクォートすることにより、リモートファイル名として扱われないようにすることができます。したがって名前が/foo:というディレクトリーがあり、そこにbarという名前のファイルがある場合、Emacsでは、そのファイルを‘/:/foo:/bar’という名前で参照できます。

リモートファイル名もローカル部分の特殊文字だけをクォートしたい場合はローカル部分だけをクォートできます。たとえば‘/ssh:baz:/:/foo:/bar’は、ホストbaz上のディレクトリー/foo:のファイルbarを参照します。

/:’は、‘~’がユーザーのホームディレクトリーを意味する、特別な文字として扱われることを防ぐこともできます。たとえば/:/tmp/~hackは、ディレクトリー/tmpのファイル~hackを参照します。

/:’によるクォートは、ミニバッファーでの名前に‘$’を含むファイル名の入力にも使用できます。これが機能するには、ミニバッファーの最初の内容が‘/:’で始まらなければなりません(2回‘$’を記述することでも同様な効果が得られます。詳細はFile Names with $を参照してください)。

ファイルをvisitするときに、ワイルドカードをクォートすることもできます。たとえば/:/tmp/foo*barは、ファイル/tmp/foo*barをvisitします。

同じ効果を得るための別の方法は、/tmp/foo[*]barと入力する方法です。これは/tmp/foo*barだけにマッチするワイルドカード指定です。しかしクォートしなくても同じ結果が得られるので、ワイルドカード文字をクォートする必要がない場合がたくさんあります。たとえば/tmpの中に‘foo’で始まり‘bar’で終わるファイルがfoo*barだけの場合、/tmp/foo*barと指定することにより、/tmp/foo*barだけをvisitすることができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.17 ファイル名キャッシュ

ファイル名キャッシュ(file name cache)により、ファイルがどこにあるか正確に覚えていなくても、名前でファイルがどこにあるかを簡単に指定することができます。ファイル名をミニバッファーでタイプするとき、C-TAB (file-cache-minibuffer-complete)で、ファイル名キャッシュを使ったファイル名を補完が行なわれます。C-TABを繰り返すと、最初にタイプした内容から補完できる利用可能な候補を順番に表示します(しかしC-TAB文字は、多くのテキスト端末でタイプできないことに注意してください)。

ファイル名キャッシュは自動的に充填されません。かわりに以下のコマンドを使ってファイル名をキャッシュにロードします。

M-x file-cache-add-directory RET directory RET

directoryの各ファイルを、ファイル名キャッシュに加えます。

M-x file-cache-add-directory-using-find RET directory RET

directoryの各ファイルを、ファイル名キャッシュに加えるとともに、ネストされたサブディレクトリーのすべてのファイルを、ファイル名キャッシュに加えます。

M-x file-cache-add-directory-using-locate RET directory RET

directoryの各ファイルを、ファイル名キャッシュに加えるとともに、ネストされたサブディレクトリーのすべてのファイルを、ファイル名キャッシュに加えます。ファイルの検索には、locateを使用します。

M-x file-cache-add-directory-list RET variable RET

variableにリストされた各ディレクトリーのファイル名を、ファイル名キャッシュに加えます。variableはLisp変数で、load-pathと同様、値はディレクトリーのリストです。

M-x file-cache-clear-cache RET

キャッシュをクリアーして、すべてのファイル名を削除します。

ファイル名キャッシュは永続的ではありません。キャッシュが維持されるのはEmacsのセッションの間だけです。キャッシュの内容は、file-cache-displayコマンドで閲覧できます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.18 ファイル検索の便利な機能

このセクションでは、最近開いたファイルの検索、バッファーからのファイル名の読み取りなどの便利な機能を紹介します。

M-x recentf-modeでRecentfモードを有効にすると、‘File’メニューに最近開いたファイルを含むサブメニューが含まれるようになります。M-x recentf-save-listは現在のrecentf-listをファイルに保存して、M-x recentf-edit-listでそれを編集できます。

M-x ffapコマンドは、find-fileを一般化した、より強力なデフォルト決定のための機能で、基本的にはポイント位置のテキストにもとづいて決定を行ないます。Partial Completionモードはfind-fileを拡張する、ffapとともに使用できるその他の機能を提案します。補完オプションを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.19 イメージファイルのvisit

イメージファイルをvisitすることによりImageモードが選択されます。このメジャーモードではC-c C-c (image-toggle-display)とタイプすることにより、Emacsバッファーでファイルのイメージ表示とイメージの元となるテキスト(またはraw byte)表示を切り替えることができます。さらにC-c C-x (image-toggle-hex-display)とタイプすると、Emacsバッファー内でイメージとしてファイルを表示、または16進表記で表示を切り替えることができます。ファイルのイメージ表示は、Emacsがそのようなイメージの表示をサポートするようにコンパイルされているときだけ機能します。

イメージを表示するウィンドウよりイメージの幅または高さが大きければ、通常のポイント移動キー(C-fC-p、...)によりイメージの他の部分が表示されます。しかしデフォルトではイメージはウィンドウにフィットするように自動的にリサイズされるので、これはオプションimage-auto-resizeimage-auto-resizeを使用してデフォルトの挙動をカスタマイズしている場合だけ必要になります。

手動でイメージをリサイズするには、イメージをウィンドウの幅と高さにフィットさせる、s bにバインドさているコマンドimage-transform-fit-bothを使用できます。スケール因子(scale factor)を指定してイメージをスケールするには、s sにバインドされたコマンドimage-transform-set-scaleを使用します。すべての変換を初期状態にリセットするには、s 0にバイドされたimage-transform-resetを使用してください。

n (image-next-file)やp (image-previous-file)を押下して、同一ディレクトリー内の次または前のイメージファイルをvisitできます。

イメージの閲覧時に、後で処理するために(たとえば別の場所へコピーするために一群のイメージを選択したいとき)ファイルをマークできると便利なことがあります。m (image-mode-mark-file)コマンドは、カレントファイルのディレクトリーを表示中のすべてのDiredバッファーのカレントファイルをマークします。そのようなバッファーがオープンされていなければ、新たなバッファーにディレクトリーがオープンされます。ファイルのマークをオフにするにはコマンドu (image-mode-mark-file)を使用します。最後にカレントバッファーのファイル名だけをkillリングにコピーしたければ、コマンドw (image-mode-copy-file-name-as-kill)を使用できます。

アニメーションが可能なイメージの場合、コマンドRET (image-toggle-animation)で、アニメーションの開始と停止ができます。オプションimage-animate-loopが非nilでなければ、アニメーションの再生は1回です。f (image-next-frame)とb (image-previous-frame)により、アニメーションの各フレームを切り替えることができます。これらのコマンドは数引数を指定することにより、指定した数の分だけ先のフレームを表示できます。F (image-goto-frame)により、特定のフレームを指定することができます。フレームは1からインデックスがつきます。a + (image-increase-speed)とタイプすると、アニメーションのスピードが早くなり、a - (image-decrease-speed)で遅くなります。またa r (image-reverse-speed)で逆再生されます。コマンドa 0 (image-reset-speed)は、スピードを元の値にリセットします。

EmacsがImageMagickのサポートつきでコンパイルされている場合、さまざまなイメージを描画するのに、ImageMagickを使うことができます。変数imagemagick-enabled-typesは、EmacsがImageMagickを使って描画できるイメージの種類のリストです。リストの各要素は、ImageMagick内部でのイメージ種類にたいする名前で、シンボルまたは等価な文字列で指定します(たとえばBMP.bmpイメージです)。利用可能なイメージの種類にたいしてImageMagickを有効にするには、imagemagick-enabled-typestに変更します。変数imagemagick-types-inhibitは、変数imagemagick-enabled-typesの値にかかわらずmImageMagickを使わずに描画するイメージ種類のリストです(リストのデフォルトにはCおよびHTMLなどが含まれ、これらはImageMagickはイメージとして描画できるが、Emacsはイメージとして描画しないものです)。ImageMagickを完全に無効にするには、imagemagick-types-inhibittに変更してください。

要求されるイメージフォーマットにたいするネイティブサポートをEmacsがもたず、かつimage-use-external-converterが非nilなら、Emacsは表示の前に要求されるイメージをPNGに変換するために使用可能な外部ユーティリティーの存在有無の判定を試みます。このイメージ変換には現在のところGraphicsMagick、ImageMagick、ffmpegがサポートされています。

Image-Diredパッケージはイメージをサムネールとして表示するのにも使用されます。Diredでのイメージとサムネイルの閲覧を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.20 ファイルセット

定期的に特定のファイルのグループを編集する場合、それらをファイルセット(fileset)として定義できます。これによりvisit、query-replace、シェルコマンドなどの特別な操作を、すべてのファイルに一度に行うことができます。ファイルセットを使うには、initファイル(Emacs初期化ファイルを参照)に、式(filesets-init)を追加しなければなりません。これはメニューバーの‘File’メニューに、サブメニュー‘Filesets’を追加します。

ファイルセットを定義する一番簡単な方法は、ファイルを1つずつ追加する方法です。ファイルセットnameにファイルを追加するには、そのファイルをvisitしてM-x filesets-add-buffer RET name RETをタイプします。ファイルセットnameが存在しない場合、現在のファイルだけを含む新しいファイルセットを作成します。コマンドM-x filesets-remove-bufferは、ファイルセットから現在のファイルを削除します。

M-x filesets-edit(または‘Filesets’メニューの‘Edit Filesets’を選択)で、ファイルセットを直接編集することもできます。編集はCustomizeバッファーで行われます(Easy Customizationインターフェースを参照してください)。ファイルセットは通常、単純なファイルのリストですが、ファイル名にマッチする正規表現で、ファイルセットを定義することもできます。より複雑なファイルセットの例は、Customizeバッファーに記されています。将来のEmacsセッションで同じファイルセットを使うには、‘Save for future sessions’を選択するのを忘れないでください。

コマンドM-x filesets-openを使って、ファイルセットのすべてのファイルをvisitし、それらをM-x filesets-closeで閉じることができます。M-x filesets-run-cmdを使って、ファイルセットのすべてのファイルにたいして、シェルコマンドを実行します。これらのコマンドは‘Filesets’メニューからも利用可能で、メニューには既存のファイルセットが、サブメニューとして表示されています。

異なるコンセプトのファイルセット(バージョンコントロール操作のためにグループにまとめられたファイル)については、バージョンコントロールを参照してください。この種のファイルセットには名前がなく、Emacsセッション間で引き継がれません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

19 複数バッファーの使用

Emacsで編集するテキストは、バッファー(buffer)と呼ばれるオブジェクトの中に存在します。ファイルをvisitするたびに、そのファイルのテキストを保持するために、バッファーが使われます。Diredを呼び出すたびに、ディレクトリーリストを保持するためにバッファーが使われます。C-x mでメッセージを送信すると、メッセージのテキストを保持するためにバッファーが使われます。コマンドのドキュメントは、*Help*という名前のバッファーに表示されます。

バッファーは使用されているかぎりは存在して、ユーザー(バッファーのkillを参照)またはEmacs(たとえばEmacsのexit時。Emacsからのexitを参照)がもはや必要としなくなったときに削除(または“kill”)されます。

それぞれのバッファーは、任意の長さの一意な名前を持っています。バッファーがウインドウに表示されているとき、バッファーの名前はモードライン(モードラインを参照してください)に表示されます。バッファー名での大文字と小文字の違いは重要です。ほとんどの場合、ほとんどのバッファーはvisitしているファイルから作られ、それらの名前はファイル名から生成されます。しかし、新しい空のバッファーを、任意の名前で作成することもできます。新しく開始されたEmacsにはいくつかのバッファーがあり、それらの中には*scratch*という名前の、Lisp式を評価するのに使用されるバッファーも含まれます。そのバッファーはファイルに関連付けられていません(Lisp Interactionバッファーを参照してください)。

選択されるバッファーは、常に1つだけです。そのバッファーをカレントバッファー(current buffer: 現在のバッファー)と呼びます。「コマンドは“そのバッファー(the buffer)”を操作します」という言い方をするときがあります。これはカレントバッファーを操作するというのが、本当の意味です。Emacsのウィンドウが1つだけのとき、そのウィンドウに表示されているバッファーがカレントになります。複数のウィンドウがあるとき、選択されたウィンドウに表示されているバッファーがカレントになります。複数ウィンドウを参照してください。

バッファーのコンテンツ(contents: 内容)とは、オプションでテキストプロパティ(Text propertiesを参照)のセットをもつ一連の文字から構成されます。テキストプロパティにより、文字により多くの情報を指定できます。

バッファーのテキスト的な内容は別として、それぞれのバッファーはいくつかの情報を記録しています。それらは、(もしあれば)visitしているファイルは何か、変更されているか、有効なメジャーモードとマイナーモードは何か(メジャーモードとマイナーモードを参照してください)、などの情報です。これらは、バッファーローカルな変数(buffer-local variables)に格納され、これらの変数はバッファーごとに異なる値をもつことができます。ローカル変数を参照してください。

バッファーのサイズは、いくつかの最大値を超えて大きくすることはできません。これは一番大きいバッファーの位置が、Emacsの整数(Emacs integers)で表されることにより定義されます。なぜならEmacsはそのデータ型を使用して、バッファーの位置を追跡するからです。通常の64ビットマシンでは、バッファーの最大サイズは2^{61} - 2バイト、およそ2EiBです。通常の32ビットマシンでは、バッファーの最大サイズは通常2^{29} - 2バイト、およそ512MiBです。バッファーのサイズはシステムのメモリー量によっても制限されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

19.1 バッファーの作成と選択

C-x b buffer RET

bufferという名前のバッファーを、選択または作成します(switch-to-buffer)。

C-x 4 b buffer RET

同様ですが、他のウィンドウでbufferを選択します(switch-to-buffer-other-window)。

C-x 5 b buffer RET

同様ですが、別のフレームでbufferを選択します(switch-to-buffer-other-frame)。

C-x LEFT

バッファーリストの、前のバッファーを選択します(previous-buffer)。

C-x RIGHT

バッファーリストの、次のバッファーを選択します(next-buffer)。

C-u M-g M-g
C-u M-g g

数字nを読み取って、カレントバッファーではない、一番最近選択された、別のウィンドウにあるバッファーの、n行目に移動します。

C-x b (switch-to-buffer)コマンドは、ミニバッファーを使ってバッファー名を読み取ります。それからそのバッファーをカレントとして、現在選択されたウィンドウに表示します。空の入力は、そのとき他のウィンドウに表示されていない、一番最近カレントだったバッファーを指定します。

バッファー名を入力するとき、通常の補完とヒストリーコマンドを使うことができます(ミニバッファーを参照してください)。C-x bおよび関連するコマンドは、ミニバッファーの補完に、確認つきの寛大な補完(permissive completion with confirmation)を使うことに注意してください。存在しないバッファー名にたいする補完の後、すぐにRETをタイプすると、Emacsは‘[Confirm]’を出力し、バッファー名を確定するために2回目のRETをタイプしなければなりません。詳細は、補完の終了を参照してください。その他の補完オプションと機能についての詳細は、補完オプションを参照してください。

存在しないバッファーを指定すると、C-x bはファイルをvisitしていない新しい空のバッファーを作成し、編集用にそのバッファーを選択します。変数major-modeは、新しいバッファーのメジャーモードのデフォルトを決定します。デフォルトでは、これはFundamentalモードです。メジャーモードを参照してください。新しいバッファーを作る1つの理由は、それを一時的なノートとして使うためです。これを保存しようと試みると、Emacsは保存に使うファイル名を尋ね、バッファーのメジャーモードは、ファイル名にもとづきメジャーモードを再割り当てします(ファイルのモードを選択するを参照してください)。

少ないバッファーの切り替えでは、コマンドC-x LEFTおよびC-x RIGHTを使うのが便利です。C-x LEFT (previous-buffer)は前のバッファー(現在のフレームの一番最近選択されたバッファー順)、C-x RIGHT (next-buffer)は逆方向のバッファーに移動します。いずれのコマンドもプレフィクス数引数をサポートており、それは繰り返し回数として機能します。

現在のウィンドウとは別のウィンドウにバッファーを選択するには、C-x 4 b (switch-to-buffer-other-window)とタイプします。これはミニバッファーを使ってバッファー名の入力を求め、選択されているウィンドウではない別のウィンドウに、そのバッファーを表示して、そのウィンドウを選択します。

同様にC-x 5 b (switch-to-buffer-other-frame)はバッファー名の入力を求め、他のフレーム(フレームとグラフィカルなディスプレーを参照)にそのバッファーを表示して、そのフレームを選択します。他のウィンドウまたはフレームにすでにバッファーが表示されている場合、Emacsは新しく作成するのではなく、そのウィンドウまたはフレームを選択します。

C-x 4 bおよびC-x 5 bコマンドが表示するウィンドウまたはフレームを取得する方法については、ウィンドウでのバッファーの表示を参照してください。

これらに加えて、C-x C-fや、その他のファイルをvisitするコマンドでも、すでにファイルをvisitしているバッファーに切り替えることができます。ファイルのvisit(訪問)を参照してください。

プレフィクス引数だけを指定したC-u M-g M-g goto-lineは、ミニバッファーを使って数字nを読み取り、別のウィンドウにあるカレントバッファー以外の、一番最近選択されたバッファーを選択して、ポイントをそのバッファーのn行目の先頭に移動します。これは他のバッファーの行番号を参照するバッファーで特に有用です。ポイントが数字の直後にある場合、goto-linenのデフォルトとしてその数字を使います。ただのC-uではないプレフィクス引数では、異なる振る舞いをすることに注意してください。C-u 4 M-g M-gはミニバッファーから数字を読み取らず、カレントバッファーの4行目にジャンプします(プレフィクス引数を指定しないM-g M-gは、数字nを読み取ってカレントバッファーのn行目に移動することを思い出してください。ポイント位置の変更を参照してください)。

Emacsはスペースで開始される名前のバッファーを、内部的な用途のために使用しています。それらのバッファーは特別な方法で扱われます。たとえば、それらのバッファーではundo情報が記録されません。そのようなバッファー名を使うことは避けるのが最良です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

19.2 既存のバッファーを一覧する

C-x C-b

既存のバッファーをリストします(list-buffers)。

既存のバッファーのリストを表示するには、C-x C-bとタイプします。これにより、*Buffer List*という名前のバッファーにバッファーメニューがポップアップします。リストの各行にはバッファー名、サイズ、メジャーモード、visitしているファイルが表示されます。バッファーは、カレントだった順でリストされます。したがって、一番最近カレントだったバッファーが先頭に表示されます。このセクションでは、バッファーリストが表示される方法と、リスト内に示されるさまざまなものの解釈の仕方について説明します。*Buffer List*バッファーの特別なモードと、利用可能なコマンドについては、複数バッファーにたいする操作を参照してください。

行の最初のフィールドの‘.’は、そのバッファーがカレントであることを示します。‘%’は読み取り専用バッファーであることを示します。‘*’はそのバッファーが変更されていることを示します。いくつかのバッファーが変更されていて、それらを保存するべきだと思ったときは、C-x s (ファイルを保存するコマンドを参照してください)で保存します。以下はバッファーリストの例です:

CRM Buffer                Size  Mode              File
. * .emacs                3294  Emacs-Lisp        ~/.emacs
 %  *Help*                 101  Help
    search.c             86055  C                 ~/cvs/emacs/src/search.c
 %  src                  20959  Dired by name     ~/cvs/emacs/src/
  * *mail*                  42  Mail
 %  HELLO                 1607  Fundamental       ~/cvs/emacs/etc/HELLO
 %  NEWS                481184  Outline           ~/cvs/emacs/etc/NEWS
    *scratch*              191  Lisp Interaction
  * *Messages*            1554  Messages

この例でバッファー*Help*は、ヘルプを要求されたことにより作成されます(ヘルプを参照してください)。これはファイルをvisitしていません。バッファーsrcは、ディレクトリー~/cvs/emacs/src/にたいして、Diredが作成したバッファーです。ファイルをvisitしているバッファーだけを一覧するには、C-u C-x C-bのように、コマンドにプレフィクス引数を与えます。

list-buffersは名前がスペースで始まるバッファーを省略します(そのバッファーがファイルをvisitしていない限り)。これらのバッファーは、Emacsにより内部的に使用されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

19.3 その他のバッファー操作

C-x C-q

バッファーの読み取り専用の状態を切り替えます(read-only-mode)。

M-x rename-buffer RET buffer RET

カレントバッファーの名前を変更します。

M-x rename-uniquely

カレントバッファーの末尾に‘<number>’を加えてリネームします。

M-x view-buffer RET buffer RET

バッファーbufferをスクロールして閲覧します。Viewモードを参照してください。

バッファーを読み取り専用にすることができます、これはバッファーのテキストにたいして挿入や削除を行うコマンドが許されないことを意味します(とはいえ、他のC-x RET fのようなコマンドは、バッファーを変更済みとマークすることは可能。ファイルのテキストにたいするコーディングシステムの指定を参照されたい)。読み取り専用バッファーのモードラインでは、左余白の近くに‘%%’または‘%*’が表示されます。モードラインを参照してください。読み取り専用バッファーは通常、DiredやRmailのように、そのバッファーのテキストを操作する専用コマンドをもつ、サブシステムにより作成されます。アクセスが制御されているファイルをvisitしたときも、そのバッファーに書き込めない旨が通知されます。

コマンドC-x C-q (read-only-mode)は、読み取り専用バッファーを書き込み可能に、書き込み可能なバッファーを読み取り専用にします。これは各バッファーにローカルな変数buffer-read-onlyをセットすることにより機能します(値が非nilのときバッファーは読み取り専用)。オプションview-read-onlyを非nil値に変更すると、C-x C-qでバッファーを読み取り専用にしたとき、そのバッファーでViewモードが有効になります(Viewモードを参照してください)。

M-x rename-bufferはカレントバッファーの名前をリネームします。新しい名前はミニバッファーで指定します。デフォルトはありません。他のバッファーで使用済の名前を指定するとエラーとなり、リネームされません。

M-x rename-uniquelyはカレントバッファーの後に数字を追加して、似てはいるが異なる名前を作成します。このコマンドに引数は必要ありません。これは複数のshellバッファーを作成するのに便利です。*shell*バッファーをリネームしてから再度M-x shellを行うと、これは新しく*shell*という名前のバッファーを作成します。一方リネームされた古いshellバッファーは新しい名前で実行を続けます。この方法はmailバッファー、compilationバッファー、そして特定の名前で特別なバッファーを作成するEmacs機能に適しています(これらの機能のいくつか、たとえばM-x compileM-x grepなどではコマンドを再度実行する前に他のバッファーに切り替える必要がある。さもないとカレントバッファーの名前を変更せずに、そのバッファーを再使用する)。

コマンドM-x append-to-bufferおよびM-x insert-bufferも、あるバッファーから他のバッファーへテキストをコピーするのに使用できます。テキストの追加を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

19.4 バッファーのkill

しばらくの間、Emacsセッションを続けていると、多くのバッファーが溜まってしまう場合があります。必要のないバッファーをkillしたほうがよいと思うかもしれません(他のエディターではこの操作をclose(閉じる)と呼び、“バッファーを閉じる”とか、ファイルをvisitしているバッファーでは“ファイルを閉じる”のように表現するものもあります)。ほとんどのオペレーティングシステムでは、バッファーをkillすることにより、バッファーのためにEmacsが使用していたメモリーをオペレーティングシステムに解放するので、他のプログラムがそれを使えるようになります。以下はバッファーをkillするコマンドです:

C-x k buffer RET

バッファーbufferをkillします(kill-buffer)。

M-x kill-some-buffers

バッファーを1つずつkillするか尋ねます。

M-x kill-matching-buffers

正規表現にマッチするすべてのバッファーをkillするか尋ねます。

C-x k (kill-buffer)は、ミニバッファーで指定した名前のバッファーを1つkillします。RETだけをタイプしたときはデフォルトが使われ、これはカレントバッファーをkillします。カレントバッファーをkillすると、最近カレントだったが、今は別のウィンドウにも表示されていないバッファーがカレントになります。ファイルをvisitしているバッファーが変更されているとき、それをkillしようとすると確認を求められます。そのバッファーをkillする前に、確認にyesを応えなければkillできません。

コマンドM-x kill-some-buffersは、各バッファーについて1つずつ確認を求めます。yesと応えると、kill-bufferと同様にバッファーをkillすることを意味します。このコマンドは名前がスペースで始まる、Emacsが内部的に使用するバッファーは無視します。

コマンドM-x kill-matching-buffersは、正規表現の入力を求め、名前がその正規表現にマッチするすべてのバッファーをkillします。正規表現の構文を参照してください。kill-some-buffersと同様、このコマンドはkillする前に確認を求めます。このコマンドは通常、名前がスペースで始まる、Emacsが内部的に使うバッファーを無視します。内部的なバッファーも同じようにkillするには、プレフィクス引数を指定してkill-matching-buffersを呼び出します。

さまざまなバッファーをkillするにはBuffer Menu機能も便利です。複数バッファーにたいする操作を参照してください。

バッファーがkillされるときに特別な処理を行いたい場合、フックkill-buffer-hookにフック関数を追加できます(フックを参照してください)。

(多くの人がそうしているように)何日間も1つのEmacsセッションを使っていると、何日か前に使ったバッファーが溜まってくるかもしれません。コマンドM-x clean-buffer-listは、それらを一掃するのに便利です。これは長い間使用されていない、変更されていないバッファーをすべてkillします。3日間表示されていない普通のバッファーはkillされます。しかし自動的にkillされるべきではない特定のバッファーを指定したり、使われていない時間が短いバッファーでもkillするように指定できます。これらのデフォルト、およびこのコマンドの挙動の他の動向は、clean-buffer-listのドキュメント文字列で説明されている、いくつかのオプションをカスタマイズすることにより制御できます。

Midnightモードを有効にすることにより、1日ごとにバッファーを一掃することもできます。Midnightモードは毎日真夜中にclean-buffer-list、またはノーマルフックmidnight-hookに指定された関数を実行します(フックを参照してください)。Midnightモードを有効にするには、Customizationバッファーを使って変数midnight-modetにセットします。Easy Customizationインターフェースを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

19.5 複数バッファーにたいする操作

M-x buffer-menu

すべてのEmacsバッファーの、バッファーリストの編集を開始します。

M-x buffer-menu-other-window

同様ですが、別のウィンドウで行います。

C-x C-b (既存のバッファーを一覧するを参照してください)でオープンされるBuffer Menuは、単にバッファーを一覧するだけではありません。これはDiredに似たインターフェースで、バッファーにたいしてさまざまな操作を行うことができます。ここでは、バッファーの保存、kill(Diredとの一貫性を保つため、ここではそれらを削除(delete)する、と呼びます)、表示ができます。

Buffer Menuを使うにはC-x C-bとタイプして、*Buffer List*バッファーが表示されたウィンドウに切り替えます。M-x buffer-menuとタイプして、選択されたウィンドウにBuffer Menuを開くこともできます。コマンドM-x buffer-menu-other-windowは、Buffer Menuを別のウィンドウに開いて、そのウィンドウを選択します。

Buffer Menuは読み取り専用バッファーで、このセクションで説明する特別なコマンドだけを通じて変更します。このバッファーでは、通常のカーソル移動コマンドを使うことができます。以下のコマンドは、バッファーのカレント行に適用されます。

d

そのバッファーの削除(kill)フラグをセットしてから、ポイントを次の行に移動します(Buffer-menu-delete)。削除フラグは、各行のバッファー名の前の文字‘D’により示されます。削除はxコマンド(以下参照)をタイプしたときだけ発生します。

C-d

dと同様ですが、ポイントを下ではなく上に移動します(Buffer-menu-delete-backwards)。

s

そのバッファーの保存フラグをセットします(Buffer-menu-save)。保存フラグは各行のバッファー名の前の文字‘S’により示されます。保存はxコマンド(以下参照)をタイプしたときだけ発生します。同じバッファーに保存と削除の両方をリクエストできます。

x

すべての削除および保存フラグを処理します(Buffer-menu-execute)。

u

カレント行のすべてのフラグを取り除いてから、下に移動します(Buffer-menu-unmark)。プレフィックス引数を指定した場合は、フラグを取り除いた後、上に移動します。

DEL

前の行に移動して、その行のすべてのフラグを取り除きます(Buffer-menu-backup-unmark)。

M-DEL

すべて行から特定のフラグを取り除きます(Buffer-menu-unmark-all-buffers)。これは、1文字の入力を求めて、その文字でマークされたバッファーのマークを取り除きます。RETをタイプした場合は、すべてのマークを取り除きます。

U

すべての行のすべてのフラグを取り除いてから、下に移動します(Buffer-menu-unmark-all)。

フラグを取り除くコマンドdC-dには、繰り返し回数として数引数を指定できます。

以下のコマンドは、カレント行にリストされたバッファーを即座に処理します。これらのコマンドにも、繰り返し回数を数引数として指定できます。

~

バッファーを変更されていない(unmodified)とマークします(Buffer-menu-not-modified)。ファイルを保存するコマンドを参照してください。

%

バッファーの読み取り専用属性を切り替えます(Buffer-menu-toggle-read-only)。その他のバッファー操作を参照してください。

t

そのバッファーを、tagsテーブルとしてvisitします(Buffer-menu-visit-tags-table)。タグテーブルの選択を参照してください。

以下は、他のバッファーを選択するために使われるコマンドです:

q

Buffer Menuメニューを閉じます(quit-window)。一番最近に表示されていたバッファーが、その場所に表示されます。

RET
f

そのウィンドウの*Buffer List*バッファーを置き換えて。この行のバッファーを選択します(Buffer-menu-this-window)。

o

C-x 4 bのように*Buffer List*を表示したまま、その行のバッファーを他のウィンドウで選択します(Buffer-menu-other-window)。

C-o

この行のバッファーを他のウィンドウで表示しますが、選択はしません(Buffer-menu-switch-other-window)。

1

この行のバッファーを、フレーム全体のウィンドウで選択します(Buffer-menu-1-window)。

2

現在のフレームを2つのウィンドウにセットアップして、この行のバッファーを一方のウィンドウで選択し、もう一方のウィンドウに以前のカレントバッファー(*Buffer List*)は除く)を表示します(Buffer-menu-2-window)。

b

この行のバッファーをbury(つまりバッファーリストの最後)に移動します(Buffer-menu-bury)。

m

vコマンドで抜けるとき、この行のバッファーを他のウィンドウで表示されるようにマークします(Buffer-menu-mark)。表示フラグは行の先頭に文字‘>’で示されます(1つのバッファーが削除と表示のフラグを両方もつことはないでしょう)。

v

この行のバッファーを選択し、mコマンドでフラグづけされたバッファーも他のウィンドウで表示します(Buffer-menu-select)。バッファーにフラグをつけていないとき、このコマンドは1と等価です。

以下はバッファーリスト全体に影響を与えるコマンドです:

S

ポイントがある列の数値にしたがって、Buffer Menu全体をソートします。数引数nを指定すると、n番目の列でソートします(tabulated-list-sort)。

}

カレント列の幅をn文字(プレフィクス引数)広くします。

{

カレント列の幅をn文字(プレフィクス引数)狭くします。

T

非ファイルバッファーを削除または再挿入します(Buffer-menu-toggle-files-only)。このコマンドは、そのようなバッファーがバッファーリストに含まれるか否かを切り替えます。

バッファー*Buffer List*は通常、バッファーの作成およびkillにより自動的に更新はされません(内容は単なるテキストです)。バッファーを作成・削除・リネームした場合、それが行われたか確かめるために*Buffer List*を更新するには、g (revert-buffer)とタイプします。このバッファーのAuto Revertモードを有効にすれば、このバッファーが変更されたとマークされない限り、auto-revert-interval秒ごとに定期的に更新させることができます。Global Auto Revertモードは、global-auto-revert-non-file-buffersが非nilのときだけ、*Buffer List*バッファーに適用されます。 詳細はglobal-auto-revert-non-file-buffersを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

19.6 インダイレクトバッファー

インダイレクトバッファー(indirect buffer: 間接バッファー)は、そのインダイレクトバッファーのベースバッファー(base buffer: 基底バッファー)と呼ばれる、他のバッファーのテキストを共有します。ある点においては、ファイルに置けるシンボリックリンクの、バッファー版に例えることができます。

M-x make-indirect-buffer RET base-buffer RET indirect-name RET

ベースバッファーbase-bufferの、インダイレクトバッファーindirect-nameを作成します。

M-x clone-indirect-buffer RET

カレントバッファーの、インダイレクトバッファーを作成します。

C-x 4 c

カレントバッファーのインダイレクトバッファーを作成して、それを別のウィンドウで選択します(clone-indirect-buffer-other-window)。

インダイレクトバッファーのテキストは、常にベースバッファーのテキストと等しく、どちらかを編集すると、その変更はすぐにもう一方から見えるようになります。しかし他の観点では、インダイレクトバッファーとベースバッファーは、完全に分離されています。これらのバッファーは異なる名前、異なるポイント値、異なるナローイング、異なるマーカー、異なるメジャーモード、異なるローカル変数をもつことができます。

インダイレクトバッファーはファイルをvisitできませんが、ベースバッファーはvisitできます。インダイレクトバッファーの保存を試みると、それは実際にはベースバッファーの保存として機能します。ベースバッファーをkillするとインダイレクトバッファーもkillされますが、インダイレクトバッファーのkillは、ベースバッファーに影響を与えません。

インダイレクトバッファーの1つの使い方としては、アウトラインの複数の視点からの表示です。複数ビューによるアウトラインの閲覧を参照してください。

手早くインダイレクトバッファーを作成するには、コマンドM-x clone-indirect-bufferを使う方法があります。これはカレントバッファーをベースバッファーとする、インダイレクトバッファーを作成して選択します。数引数を指定すると、インダイレクトバッファーの名前の入力を求めます。指定しない場合、カレントバッファー名の後ろに‘<n>’を付加した名前を使います。C-x 4 c (clone-indirect-buffer-other-window)は、M-x clone-indirect-bufferと同様に機能しますが、新しいバッファーを他のウィンドウで選択します。これらの関数はインダイレクトバッファーを作成した後、フックclone-indirect-buffer-hookを実行します。

インダイレクトバッファーを作成する、より一般的な方法はコマンドM-x make-indirect-bufferです。これはバッファーbase-bufferから、名前がindirect-nameのインダイレクトバッファーを作成します。これらの名前は、ミニバッファーを使って入力が求められます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

19.7 バッファー処理の便利な機能とカスタマイズ

このセクションではバッファーを切り替えをもっと便利にする、モードと機能をいくつか説明します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

19.7.1 バッファー名を一意にする

同じ名前のファイルを複数のバッファーでvisitしているとき、Emacsはバッファーに区別可能な名前をつけなければなりません。デフォルトの方法はファイルをディレクトリーの一部を後ろに追加する方法です。たとえば同時にファイル/foo/bar/mumble/name/baz/quux/mumble/nameをvisitしている場合、バッファーの名前は‘name<bar/mumble>’と‘name<quux/mumble>’になるでしょう。Emacsは名前を一意にするために必要な分だけ、ディレクトリー名の一部を追加します。

オプションuniquify-buffer-name-styleをカスタマイズして、一意なバッファー名を構築するための異なるスタイルを選択することができます。

命名方法forwardは、バッファー名の先頭部分に、ファイルのディレクトリー名の一部を含めます。この方法を使うとファイル/u/rms/tmp/Makefile/usr/projects/zaphod/Makefileをvisitしているバッファーの名前は、‘tmp/Makefile’と‘zaphod/Makefile’になるでしょう。

対照的に命名方法post-forwardは、バッファーを‘Makefile|tmp’および‘Makefile|zaphod’と名づけます。デフォルトのpost-forward-angle-bracketsは、post-forwardと同様ですが、一意なパスを山形カッコ(angle brackets)で囲います。命名方法reverseでは、‘Makefile\tmp’および‘Makefile\zaphod’となります。post-forwardreverseの重要な違いは、2つのファイルを区別するのに1つのディレクトリ名では不足するときです。reverseはディレクトリー名を逆順にして命名するので、ファイル/top/middle/fileは‘file\middle\top’となります。一方post-forwardはディレクトリー名を正順でファイル名に追加するので‘file|top/middle’となります。uniquify-buffer-name-stylenilにセットされていると、バッファー名の後ろに単に‘<2>’、‘<3>’と加えることにより、バッファー名を作成します。

タイプする前にバッファー名に注意すれば、バッファー名にディレクトリー名を付加する方法に重要な違いはありません。しかしルールを知った経験豊富なユーザーは、それほど注意する必要はないでしょう。そして、その場合いずれかのルールでバッファー名が表示されていれば,思い出し利用するのが容易になることでしょう。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

19.7.2 素早いミニバッファーの選択

グローバルなマイナーモードのIcompleteモードは、ミニバッファーで利用可能な補完候補を素早く選択する便利な方法を提供します。これが有効な場合、ミニバッファーでタイプすることにより、すでにタイプした文字にマッチする、利用可能な候補を連続で表示します。

C-jとタイプすることにより、常にリストの最初の補完候補を選択できます。つまり特定の補完候補を選択するには、まずその候補をリストの先頭にすることです。これを行うには2つの方法があります。1つ目の方法は、補完候補の名前をさらにタイプすることにより、違う候補が含まれないように、希望する補完候補にリストを絞りこむ方法です。もう1つはC-.およびC-,を使って、望む候補が先頭にくるまでリストをローテートする方法です。

M-TABC-jのようにリストの最初の補完候補を選択しますが、ミニバッファーを抜けないので、さらに編集を続けることができます。これはファイル名の入力で通常使われます。M-TABにより、いくつかのディレクトリー階層をたどることができます。

Icompleteモードを有効にするには、M-x icomplete-modeとタイプするか、変数icomplete-modetにカスタマイズします(Easy Customizationインターフェースを参照してください)。

FidoモードはIcompleteの代替えとなるモードです。このモードはIcompleteモードと非常に似ていますが、Idoモードと呼ばれるポピュラーな拡張の機能のいくつかを残しています(実際のところこのモード名は“Fake Ido”から継承された)。特にFidoモードではC-sC-rを補完リストのローテートにも使用し、C-kはリスト内のファイル削除やバッファーのkillに使用できます。他に特筆すべき観点はデフォルトの保管スタイルとしてflexを使用する点です(補完候補が選択される方法を参照)。これを変更するには初期化ファイル(Emacs初期化ファイルを参照)に以下を追加してください:

(defun my-icomplete-styles ()
  (setq-local completion-styles '(initials flex)))
(add-hook 'icomplete-minibuffer-setup-hook 'my-icomplete-styles)

Fidoモードを有効にするにはM-x fido-modeとタイプするか、変数fido-modetにカスタマイズしてください(Easy Customizationインターフェースを参照)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

19.7.3 バッファーメニューのカスタマイズ

M-x bs-show

M-x list-buffersと同様にバッファーリストを作成しますが、カスタマイズが可能です。

M-x ibuffer

バッファーのリストを作成して、Dired様式でそれらを操作できるようにします。

M-x bs-showは、通常C-x C-bで表示されるのと同じようなバッファーリストを表示しますが、これはより柔軟な方法で表示をカスタマイズできます。たとえば、表示すべきバッファー属性のリスト、バッファー名の列幅の最小と最大、決して表示されないバッファーや常に表示するバッファー名にたいする正規表現を指定することができます。通常のバッファーリストよりこちらのほうが好ましい場合、このコマンドをC-x C-bにバインドできます。このバッファーリストをカスタマイズするには、Customグループのbs(Easy Customizationインターフェースを参照)を使用するか、bs-customizeを呼び出してください。

MSBグローバルマイナーモード(“MSB”は“mouse select buffer”が由来)は、カスタマイズ可能なマウスによる別のBuffer Menuを、好みに応じて提供します。これは通常C-Down-mouse-1、またはC-F10にバインドされているmouse-buffer-menuと、そのコマンドを置き換えます。メニューはCustomグループmsbでカスタマイズが可能です。

IBufferとは、バッファーのリストを閲覧して、フィルタリング、マーキング、さまざまな方法によるソート、およびバッファーにたいする処理を含む、Dired(Dired (ディレクトリーエディター)を参照)に似た操作をバッファーに行うメジャーモードです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

20 複数ウィンドウ

Emacsのフレームは、2つ以上のウィンドウに分割できます。複数のウィンドウで異なるバッファーを表示したり、1つのバッファーの異なる部分を表示できます。複数フレームは自ずと複数ウィンドウになります。なぜならフレームには、それぞれウィンドウがあるからです。ウィンドウは1つのフレームだけに属します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

20.1 Emacsウィンドウの概念

Emacsの各ウィンドウには、常に1つのEmacsバッファーが表示されます。1つのバッファーは、複数のウィンドウに表示される場合があります。この場合、バッファーのテキストへの任意の変更は、それが表示されているすべてのウィンドウで表示されます。しかし各ウィンドウは独自にポイント値をもっているので、ウィンドウごとにバッファーの異なる部分を表示できます。

常に1つのEmacsウィンドウが、選択されたウィンドウとなります。このウィンドウに表示されているバッファーが、カレントバッファーとなります。グラフィカルなディスプレーでは、選択されたウィンドウのカーソルは、点滅する塗りつぶされたカーソルとなり、選択されていないウィンドウでは、中抜きボックスのカーソルになります。テキスト端末では、カーソルは選択されたウィンドウだけで描画されます。カーソルの表示を参照してください。

ポイントを移動するコマンドは、選択されたEmacsウィンドウのポイント値だけに影響します。他のEmacsウィンドウのポイント値は、たとえ同じバッファーを表示していたとしても変更されません。これと同じことは、C-x bのようなバッファー切り替えコマンドについても言えます。これらは他のウィンドウには影響を与えません。しかしC-x 4 bのような、別のウィンドウを選択して、バッファーを切り替えるコマンドもあります。(たとえば)C-h f (describe-function)やC-x C-b (list-buffers)を含む、ウィンドウで情報を表示するコマンドは、選択されたウィンドウに影響を与えることなく、通常は選択されていないウィンドウ内にバッファーを表示することにより機能します。

複数ウィンドウで同じバッファーを表示しているとき、これらは異なるリージョンを持ちます。なぜなら、それらは異なるポイント値を持つことができるからです。しかしバッファーごとにマーク位置は1つだけなので、これらは同じマーク位置をもちます。

それぞれのウィンドウには、独自のモードラインがあり、それにはバッファー名、変更状態、そのウィンドウに表示されているバッファーのメジャーモードとマイナーモードが表示されます。選択されたウィンドウのモードラインは、異なる色で表示されます。詳細については、モードラインを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

20.2 ウィンドウの分割

C-x 2

選択されたウィンドウを上下に2分割します(split-window-below)。

C-x 3

選択されたウィンドウを左右に2分割します(split-window-right)。

C-mouse-2

ウィンドウのモードライン上では、ウィンドウを分割します。

C-x 2 (split-window-below)は、選択されたウィンドウを上下に2つのウィンドウに分割します。分割した後は、上が選択されたウィンドウになり、新たに分割されたウィンドウが下になります。2つのウィンドウは最初同じポイント値をもち、(可能な限り)同じバッファー部分を表示します。必要ならポイントをスクリーン上に残したまま、ウィンドウをスクロールできます。デフォルトでは2つのウィンドウの高さは、元のウィンドウの高さの半分になります。正の数引数は上のウィンドウの高さが何行分かを指定し、負の数引数は下のウィンドウが何行分の高さかを指定します。

変数split-window-keep-pointnilに変更すると、C-x 2はスクリーンに表示されるテキストができるだけ前と同じになるように、ウィンドウに表示されるバッファー部分と、各ウィンドウのポイント位置を調整します。さらにポイントが元のウィンドウの下半分にあったときは、上ではなく下のウィンドウが選択されます。

C-x 3 (split-window-right)は、選択されたウィンドウを左右に2つのウィンドウに分割します。左のウィンドウが選択されたウィンドウとなり、右のウィンドウには同じバッファーの同じ部分が表示され、ポイント位置も同じです。正の数引数は左のウィンドウの幅を列数で指定し、負の数引数は右のウィンドウの幅を数引数で指定します。

ウィンドウをC-x 3で分割すると、分割されたウィンドウの幅はフレーム全体の幅より小さくなります。ウィンドウの幅が狭くなりすぎると、継続行が使われたバッファーを読むことが困難になる場合があります(継続行を参照してください)。したがってウィンドウの幅が50列より狭くなったとき、Emacsは自動的に行を切り詰めに切り替えます。この切り詰めは、変数truncate-linesの値に関係なく発生します(行の切り詰めを参照してください)。truncate-linesのかわりに、この自動切り詰めを制御するのは、変数truncate-partial-width-windowsです。この変数の値が正の整数(デフォルトは50)の場合、それは自動的な行切り詰めが発生する前の、分割ウィンドウの最小のトータル幅(total width)を指定します。この値がnilの場合、自動的な行切り詰めは無効です。他の非nil値では、分割されたウィンドウの幅に関係なく、Emacsは行を切り詰めます。ウィンドウのトータル幅(total width)とは、window-total-width (Window Sizes in The Emacs Lisp Reference Manualを参照してください)で報告される列単位の値で、これにはフリンジと、継続および切り詰めのためのグリフ、マージン、スクロールバーが含まれます。

テキスト端末では、左右に分割されたウィンドウを垂直に分割する分割線は、vertical-borderフェイスで描画されます。

ウィンドウのモードライン上でC-mouse-2をクリックすると、クリックした位置に垂直分割線を配してウィンドウを分割します。Emacsがコンパイルされた方法に依存しますが、ウィンドウのスクロールバー上でC-mouse-2をクリックすると、クリックした位置に水平分割線を配してウィンドウを分割します(この機能は、EmacsがGTK+のスクロールバーを使っているときは機能しません)。

デフォルトでは、ウィンドウを分割したとき、Emacsは分割されたウィンドウのサイズをフレームのデフォルトフォントの整数倍にします。これによりスクリーンが正確に2分割されない場合があります。変数window-resize-pixelwiseを非nil値にセットすると、Emacsは分割されたウィンドウのサイズを、同じピクセル数にします(元のサイズが奇数のピクセル数の場合、1ピクセル増減されます)。フレームのピクセル数がフレームの文字サイズ倍でない場合、このオプションがnilでも、少なくとも1つのウィンドウがピクセル幅のサイズ変更をされることに注意してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

20.3 他のウィンドウの使用

C-x o

他のウィンドウを選択します(other-window)。

C-M-v

次のウィンドウを上方にスクロールします(scroll-other-window)。

C-M-S-v

次のウィンドウを下方にスクロールします(scroll-other-window-down)。

Mouse-1

ウィンドウのテキスト領域をmouse-1でクリックすると、そのウィンドウを選択してクリックした位置にポイントを移動します。モードラインをクリックすると、ポイントを移動せずにそのウィンドウを選択します。

キーボードでC-x o (other-window)をタイプして、ウィンドウを切り替えることができます。oは“other”のoで、0(ゼロ)ではありません。2つ以上のウィンドウがある時、このコマンドはすべてのウィンドウを順繰りに選択します(一般的に上からした、左から右)。一番右または一番下のウィンドウの後は、左上のウィンドウに戻ります。数引数は上記の順番で何番目のウィンドウに移動するかを意味します。負の引数は逆向きで同じことを行います。ミニバッファーがアクティブのとき、ミニバッファーウィンドウはこの順番では最後のウィンドウになります。ミニバッファーのウィンドウから他のウィンドウに切り替えて、後からミニバッファーに戻って引数の入力を終了させることができます。ミニバッファーでの編集を参照してください。

other-windowコマンドは通常は(別フレームが設定されていないかぎり)カレントフレームの次のウィンドウだけに切り替えます。マルチフレーム環境において、このサイクルの一部にすべてのフレームのウィンドウを含めたければ、C-x onext-window-any-frameコマンドにリバインドすることができます(コマンドをリバインドする方法は対話的なキーバインディングの変更を参照)。

通常のスクロールコマンド(ディスプレーの制御を参照)は選択されたウィンドウだけに適用されますが、次のウィンドウをスクロールするコマンドは他にもあります。C-M-v (scroll-other-window)はC-x oにより選択されるようなウィンドウをスクロールします。このコマンドは別の観点から見るとC-vのように振る舞います。いずれのコマンドもバッファーテキストをウィンドウから相対的に上方へ移動して、どちらも正と負の引数を受け取るからです(ミニバッファーではミニバッファーに関連付けられたヘルプウィンドウがあれば、C-M-vは標準的なサイクル順での次ウィンドウではなくヘルプウィンドウをスクロールする。ミニバッファーでの編集を参照)。C-M-S-v (scroll-other-window-down)は同様の方法で次のウィンドウを下方にスクロールします。

mouse-autoselect-windowを非nil値にセットしている場合、マウスが選択されたウィンドウ以外のウィンドウに移動すると、そのウィンドウが選択されます。この機能はデフォルトでオフです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

20.4 他のウィンドウでの表示

C-x 4は、異なるウィンドウ(他の既存のウィンドウや、選択されたウィンドウを分割することにより新たに作成されたウィンドウ)のバッファーに切り替える、さまざまなコマンドのプレフィクスキーです。Emacsがウィンドウを選択または作成する方法については、display-bufferが機能する方法を参照してください。

C-x 4 b bufname RET

他のウィンドウのバッファーbufnameを選択します(switch-to-buffer-other-window)。バッファーの作成と選択を参照してください。

C-x 4 C-o bufname RET

バッファーbufnameを選択せずに、別のウィンドウに表示します(display-buffer)。ウィンドウが選択される方法についての詳細は、ウィンドウでのバッファーの表示を参照してください。

C-x 4 f filename RET

ファイルfilenameをvisitして、他のウィンドウでバッファーを選択します(find-file-other-window). ファイルのvisit(訪問)を参照してください。

C-x 4 d directory RET

directoryのDiredバッファーを、別のウィンドウで選択します(dired-other-window)。Dired (ディレクトリーエディター)を参照してください。

C-x 4 m

C-x m (メールの送信を参照してください)と同様に、メールメッセージの編集を開始しますが、別のウィンドウで行います(compose-mail-other-window)。

C-x 4 .

M-. (識別子のリファレンスを探すを参照してください)と同様に、識別子の定義を検索しますが、別のウィンドウで行います(xref-find-definitions-other-window)。

C-x 4 r filename RET

ファイルfilenameを読み取り専用でvisitして、別のウィンドウでバッファーを選択します(find-file-read-only-other-window)。ファイルのvisit(訪問)を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

20.5 ウィンドウの削除とリサイズ

C-x 0

選択されたウィンドウを削除します(delete-window)。

C-x 1

フレームから選択されたウィンドウ以外のすべてのウィンドウを削除します(delete-other-windows)。

C-x 4 0

選択されていたウィンドウを削除して、それに表示されていたバッファーをkillします(kill-buffer-and-window)。このキーシーケンスの最後の文字はゼロです。

M-x delete-windows-on RET buffer RET

指定されたbufferを表示しているウィンドウを削除します。

C-x ^

選択されたウィンドウの高さを増やします(enlarge-window)。

C-x }

選択されたウィンドウの幅を増やします(enlarge-window-horizontally)。

C-x {

選択されたウィンドウの幅を減らします(shrink-window-horizontally)。

C-x -

バッファーに多くの行数が必要ない場合、そのウィンドウを縮小します(shrink-window-if-larger-than-buffer)。

C-x +

すべてのウィンドウの高さを同じにします(balance-windows)。

選択されたウィンドウを削除するには、C-x 0 (delete-window)とタイプします(これはゼロです)。一度ウィンドウが削除されると、そのウィンドウが占めていたスペースは隣接したウィンドウに与えられます(しかしミニバッファーの場合、それがアクティブな場合でも適用されません)。ウィンドウの削除は、ウィンドウを表示用に使っていたバッファーに影響を与えません。そのバッファーは存在し続け、C-x bで切り替えることができます。

C-x 4 0 (kill-buffer-and-window)は、コマンドC-x 0より強力なコマンドです。これはカレントバッファーをkillしてから、選択されたウィンドウを削除します。

C-x 1 (delete-other-windows)は、選択されたウィンドウ以外のすべてのウィンドウを削除します。選択されたウィンドウはフレーム全体に拡張されます(このコマンドは、ミニバッファーのウィンドウがアクティブのとき使うことができません。これを試みるとエラーがシグナルされます)。

M-x delete-windows-onは、特定のバッファーを表示するウィンドウを削除します。これは、そのバッファーの入力を求めます(デフォルトはカレントバッファー)。C-u 0のようにプレフィックス引数が0の場合、このコマンドはカレントディスプレイ上のフレームのウィンドウだけを削除します。

コマンドC-x ^ (enlarge-window)は、フレームの高さを変えずに垂直方向に隣接するウィンドウのスペースを縮小して、選択されたウィンドウの高さを増やします。正の数引数を与えると、このコマンドは指定した行数分ウィンドウの高さを増やします。負の数引数を与えると、指定した行数分ウィンドウの高さを増やします。垂直方向に隣接するウィンドウが存在しない場合(たとえばウィンドウの高さがフレーム全体の高さと同じとき)、エラーをシグナルします。このコマンドは変数window-min-height(デフォルトは4)で指定された、最小行数よりウィンドウの高さを縮小しようとしても、エラーをシグナルします。

同様にC-x } (enlarge-window-horizontally)は、選択されたウィンドウの幅を増やし、C-x { (shrink-window-horizontally)は幅を減らします。これらのコマンドは、変数window-min-width(デフォルトは10)で指定された最小列数よりウィンドウの幅を縮小すると、エラーをシグナルします。

モードライン(モードラインのマウスコマンドを参照してください)、またはウィンドウ分割線(window dividers。ウィンドウdividerを参照してください)をマウスでクリックすることにより、ウィンドウの高さの変更およびウィンドウの分割や削除を行なう、別の方法を提供します。

C-x - (shrink-window-if-larger-than-buffer)は、バッファー全体を表示するのに必要な高さより選択されたウィンドウの高さが大きいときは、選択されたウィンドウの高さを減らします。余った行数はフレームの他のウィンドウに与えられます。

C-x + (balance-windows)を使って、選択されたフレームのすべてのウィンドウの高さを均等にすることもできます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

20.6 ウィンドウでのバッファーの表示

ユーザーのコマンドの結果として、任意のバッファーが表示またはポップアップされるのは、Emacsでは一般的な処理です。コマンドがこれを行うには、いくつかの異なる方法があります。

C-x C-f (find-file)のような多くのコマンドは、デフォルトでは選択されたウィンドウを“乗っ取って”バッファーを表示します。

選択されたウィンドウを乗っ取らずに、たとえばウィンドウを分割して新しいウィドウを作り、そこにバッファーを表示するといったような、利口な表示を試みるコマンドがいくつかあります。さまざまなヘルプコマンド(ヘルプ)を含む、そのようなコマンドは内部的にdisplay-bufferを呼び出すことにより機能します。詳細は、display-bufferが機能する方法を参照してください

他のコマンドはdisplay-bufferと同じことを行いますが、それに加えてバッファーの編集を開始できるように、表示されたウィンドウを選択します。コマンドM-g M-n (next-error)が1つの例です(Compilationモードを参照してください)。そのようなコマンドは、内部的に関数pop-to-bufferを呼び出すことにより機能します。Switching to a Buffer in a Window in The Emacs Lisp Reference Manualを参照してください。

名前が-other-windowで終わるコマンドは、display-bufferと同じように振る舞います。例外はそれらが決して選択されたウィンドウに表示しない点です。これらのコマンドのいくつかは、プレフィクスキーC-x 4にバインドされています(他のウィンドウでの表示を参照してください)。

名前が-other-frameで終わるコマンドは、display-bufferと同じように振る舞います。例外は、i)選択されたウィンドウに決して表示しない、ii)望むバッファーを表示するために新たなフレームを作成するか、他のフレーム上のウィンドウを使用する、という2点です。これらのコマンドのいくつかは、プレフィクスキーC-x 5にバインドされています。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

20.6.1 display-bufferが機能する方法

display-bufferコマンド(およびこのコマンドを内部的に呼び出すコマンド)は、以下で与えられたステップに従って、表示するウィンドウを選択します。このステップの順番を変更する方法については、Choosing a Window for Displaying a Buffer in The Emacs Lisp Reference Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

20.6.2 編集不可バッファーの表示

ウィンドウに表示されるバッファーの中には、編集のためではなく閲覧するためのものがあります。Helpコマンド(ヘルプを参照)は通常、この目的のために*Help*と呼ばれるバッファーを使用し、ミニバッファーの補完(補完を参照)は別の*Completions*と呼ばれるバッファーなどを使用します。このようなバッファーは通常、短時間しか表示されません。

Emacsは通常、このような一時的に表示されるウィンドウを、前のサブセクションで説明したようにdisplay-bufferを通じて表示します。一方、*Completions*バッファーは通常、そのフレームにいくつウィンドウが表示されているかに関わらず、選択されたフレームの最下のウィンドウに表示されます。

一時的なバッファーを他のやり方でEmacsに表示させたい場合、変数display-buffer-alist (Choosing a Window for Displaying a Buffer in The Emacs Lisp Reference Manualを参照)をカスタマイズしてください。たとえば、常に選択されたウィンドウの下に*Completions*を表示するには、初期化ファイル(Emacs初期化ファイルを参照)で以下のフォームを使用します:

(customize-set-variable
 'display-buffer-alist
 '(("\\*Completions\\*" display-buffer-below-selected)))

Emacsは通常、バッファーの内容のすべてを表示するのに必要な大きさのウィンドウを作成するという点において、*Completions*バッファーは特別です。たとえば*Help*バッファーなど、他の一時表示でこのようなウィンドウのリサイズを行なうには、マイナーモード(マイナーモードを参照)のtemp-buffer-resize-mode (Temporary Displays in The Emacs Lisp Reference Manualを参照)に切り替えます。

temp-buffer-resize-modeでリサイズされるウィンドウの最大サイズは、オプションtemp-buffer-max-heighttemp-buffer-max-width (Temporary Displays in The Emacs Lisp Reference Manualを参照)で制御できます。最大サイズは、ウィンドウが含まれるフレームのサイズを超えることはできません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

20.7 ウィンドウ処理のための便利な機能

Winnerモードはウィンドウの設定変更(たとえばフレームのウィンドウがどのように分割されたか)を記録するグローバルマイナーモードなのでそれらをundoできます。WinnerモードはM-x winner-mode、または変数winner-modeをカスタマイズすることにより切り替えることができます。このモードが有効な場合には、C-c left (winner-undo)は左のウィンドウの設定変更をundoします。undoしてから気が変わったら、C-c right (M-x winner-redo)を使ってundoした変更をredo(再実行)することができます。WinnerモードによるC-c leftC-c rightのバインドを抑制するために、変数winner-dont-bind-my-keysを非nil値にカスタマイズできます。デフォルトではWinnerモードはフレームごとに最大200個のウィンドウ設定を格納しますが、変数winner-ring-sizeにより変更できます。Winnerモードにリストアさせたくないようなウィンドウをもつバッファーがある場合には、それらの名前を変数winner-boring-buffersか正規表現winner-boring-buffers-regexpに追加しください。

Followモード(M-x follow-mode)は、複数のウィンドウの同じバッファーを同期するので、バッファーの隣接した部分が常に表示されます。Followモードを参照してください。

Windmoveパッケージはフレーム内で隣接するウィンドウに方向的に移動するコマンドを定義します。M-x windmove-rightはカレントで選択されたウィンドウのすぐ右のウィンドウを選択して、他の方向(left、up、down)にたいしても同じように機能します。M-x windmove-default-keybindingsにより、これらのコマンドはS-right等にバインドされます。これを行うことにより、それらのキーによるシフト選択は無効になります(シフト選択を参照)。ウィンドウを方向的に選択するコマンドにたいしても同じ方法でキーバインディングを定義できます。次のコマンドが表示しようとするバッファー用のウィンドウをどの方向に表示するか指定するコマンドのを定義にはM-x windmove-display-default-keybindingsを使用できます。方向的にウィンドウを削除するコマンド用にキーバインディングを定義するにはM-x windmove-delete-default-keybindings、選択されたウィンドウと指定方向のウィンドウのコンテンツの入れ替えるコマンド用のキーバインディングの定義にはM-x windmove-swap-states-default-keybindingsがあります。

コマンドM-x compare-windowsは、異なるウィンドウに表示されたテキストを比較します。ファイルの比較を参照してください。

Scroll Allモード(M-x scroll-all-mode)は、スクロールおよびポイント移動コマンドが、表示されているすべてのウィンドウに適用されるグローバルマイナーモードです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

20.8 ウィンドウのタブライン

コマンドglobal-tab-line-modeは各ウィンドウのスクリーン行上端へのタブライン(tab line)の表示を切り替えます。タブラインは各バッファーにたいしてウィンドウ内に特別なボタン(“tabs”)を表示して、対応するボタンをクリックすることによりバッファーを切り替えることができます。+アイコンをクリックすればバッファーのウィンドウローカルタブに新たなバッファーを追加、タブのxアイコンをクリックすればバッファーを削除します。タブライン上のマウスホイールはタブを水平方向にスクロールします。

前のウィンドウローカルタブの選択はC-x LEFT (previous-buffer)、次のタブの選択はC-x RIGHT (next-buffer)をタイプすることと等価です。いずれのコマンドも繰り返し回数としてプレフィクス数引数をサポートします。

タンブラインに優先されるコンテンツを定義するために、変数tab-line-tabs-functionをカスタマイズできます。デフォルトでは上述のようにそのウィンドウで以前visitしたすべてのバッファーが表示されます。しかしカレントバッファーと同じメジャーモードのバッファーリストを表示したり、メジャーモードでグループ化したバッファー(最初のタブでモード名をクリックするとバッファーの別グループを選択可能なすべてのメジャーモードが表示される)を表示するようにセットすることもできます。

タブラインはタブバーとは異なることに注意してください(タブバーを参照)。各フレーム上端にあるタブバーのタブはバッファーをもつ複数のウィンドウを含むウィンドウ設定間を切り替えますが、各ウィンドウ上端にあるタブラインのタブはウィンドウ内のバッファーの切り替えに使用します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

21 フレームとグラフィカルなディスプレー

Emacsがグラフィカルなディスプレー(たとえばXウィンドウシステム)で開始されたときは、システムレベルのグラフィカルな表示領域(display region)を占有します。このマニュアルではこれをフレームと呼び、“ウィンドウ”という言葉はフレームでバッファーを表示する部分のために使います。フレームには最初1つのウィンドウが含まれていますが、これを複数のウィンドウに分割することができます。フレームには通常、メニューバー、ツールバー、エコーエリアも含まれます。

追加のフレームを作ることもできます(フレームの作成を参照してください)。同じEmacsセッションで作られたすべてのフレームは、背後にあるバッファーや、その他のデータにアクセスします。たとえば1つ以上のフレームで表示されているバッファーは、あるフレームに表示されているものに変更を加えると、即座に他のフレームに反映されます。

C-x C-cとタイプすると、現在表示されているすべてのフレームを閉じて、他に表示されているフレームがなければ、Emacsセッションを終了します(Emacsからのexitを参照してください)。選択されたフレームだけを閉じるには、C-x 5 0(これはoではなくゼロです)とタイプします。

このセクションでは、グラフィカルなディスプレーに特有の機能(特にマウスコマンド)と、複数フレームを管理する機能について説明します。テキスト端末では、これらの機能の多くは利用できません。しかしテキスト端末で複数のフレームを作ることは可能です。そのようなフレームは1度に1つだけ表示され、テキスト画面全体を占有します(非ウィンドウ端末を参照してください)。テキスト端末の中には、マウスを使うことが可能なものがいくつかあります(GNUおよびUnix systemsでこれを行うには、テキスト端末でのマウスの使用を、MS-DOSでこれを使うには、 MS-DOSでびマウスの使用方法を参照してください )。メニューはすべてのテキスト端末でサポートされています。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

21.1 編集のためのマウスコマンド

mouse-1

クリックした場所にポイントを移動します(mouse-set-point)。

Drag-mouse-1

ドラッグにより選択されたテキストを取り囲むリージョンをアクティブ化して、そのテキストをプライマリー選択に置きます(mouse-set-region)。

mouse-2

クリックした場所にポイントを移動して、そこにプライマリー選択の内容を挿入します(mouse-yank-primary)。

mouse-3

リージョンがアクティブなときは、近くにあるリージョンの終端をクリックした位置に移動します。アクティブでないときは現在のポイントにマークをセットして、ポイントをクリックした位置に移動します。結果となるリージョンはkillリングに保存されます。2回目のクリックでリージョンをkillします(mouse-save-then-kill)。

C-M-mouse-1

ドラッグにより選択されたテキストを取り囲む矩形リージョンをアクティブにします。矩形領域(Rectangles)を参照してください。

もっとも基本的なマウスコマンドはmouse-set-pointで、これはウィンドウのテキスト領域でマウスの左ボタン、mouse-1をクリックすることにより呼び出されます。これはポイントをクリックされた位置に移動します。そのウィンドウが選択されたウィンドウでなかったとき、そのウィンドウが選択されたウィンドウになります。mouse-1をダブルクリックして、リージョンをアクティブにすることもできます(単語と行にたいするマウスコマンドを参照)。

クリックしたフレームが選択されたフレームでなかった場合は通常、クリックされたフレームが選択されたフレームになるのに加えて、ウィンドウも選択されてカーソルがセットされます。Xウィンドウシステムでは、変数x-mouse-click-focus-ignore-positiontにセットすることにより、これを変更できます。この場合、選択されていないフレームへの最初のクリックではフレームだけを選択し、他は変更しません。次にクリックするとそのウィンドウを選択してカーソルをその位置にセットします。

mouse-1を押してテキストの周辺をドラッグすると、最初にマウスボタンを押した位置にマークが置かれ、ボタンを離した位置にポイントがセットされ(マークとリージョンを参照してください)、その領域がアクティブになります(mouse-set-region)。それに加えてリージョンのテキストがプライマリー選択となります(他のウィンドウアプリケーションにたいするカットアンドペーストを参照してください)。

変数mouse-drag-copy-regionを非nil値に変更すると、テキストの周囲をドラッグすることにより、そのテキストをkillリングに追加します。デフォルトはnilです。

ドラッグしている途中でマウスがウィンドウの上または下を超えた場合、マウスがウィンドウ内に戻るまで、ウィンドウが一定の割合でスクロールします。この方法により、スクリーン全体に収まらないリージョンを選択できます。1度に何行スクロールするかは、マウスがウィンドウの縁からどれだけ離れたかに依存します。変数mouse-scroll-min-linesは、最小ステップサイズを指定します。

マウスの真ん中のボタン、mouse-2をクリックすると、クリックした位置にポイントを移動して、プライマリー選択の内容を挿入します(mouse-yank-primary)。他のウィンドウアプリケーションにたいするカットアンドペーストを参照してください。この振る舞いは、他のXアプリケーションと一貫性があります。かわりにmouse-2を、mouse-yank-at-clickにバインドできます。これはクリックした位置にyankするコマンドです。

変数mouse-yank-at-pointを非nil値に変更すると、mouse-2はポイントを移動しません。これはどこをクリックしたか、フレームのどのウィンドウをクリックしたかに関係なく、ポイントのある位置にテキストを挿入します。この変数はmouse-yank-primarymouse-yank-at-clickの両方に影響します。

マウスの右ボタン、mouse-3をクリックすると、コマンドmouse-save-then-killが実行されます。これはどこをクリックしたかと、リージョンの状態に依存していくつかのアクションを処理します。

mouse-save-then-killコマンドは、変数mouse-drag-copy-regionの値にもしたがいます(上記参照)。変数の値が非nilのときは、コマンドがアクティブなリージョンをセットまたは調整したとき、常にリージョンのテキストはkillリングにも追加されます。一番最近のkillリングのエントリーが同じ方法で追加されたものである場合、新しいエントリーを作成せず、そのエントリーを置き換えます。

上記で説明した任意のマウスコマンドを使ってセットしたリージョンは、シフト選択以外のマウス移動コマンド、および通常のマークを非アクティブ化する方法により、マークが非アクティブになります。シフト選択を参照してください。

スクロールに使うことができる“ホイール”があるマウスもいくつかあります。ほとんどのグラフィカルなディスプレーでEmacsはデフォルトでマウスホイールによるウィンドウのスクロールをサポートします。この機能を切り替えるにはM-x mouse-wheel-modeを使います。変数mouse-wheel-follow-mouseおよびmouse-wheel-scroll-amountは、(どこでホイールによるスクロール操作が行われたかによる)スクロール対象の選択方法と、バッファーがスクロールされる量を決定します。変数mouse-wheel-progressive-speedは、スクロールの早さがホイールを移動した早さにリンクするかを決定します。このモードはデフォルトフェイス高さの増加と減少もサポートしており、デフォルトではCtrl修飾によるスクロールにバインドされています。

マウスがホイールのチルトが可能、あるいはタッチパッドがチルトをサポートしていれば、Emacsも水平スクロールをサポートできます。この機能はデフォルトではオフです。変数mouse-wheel-tilt-scrollを非nil値にカスタマイズすればオンになります。デフォルトではマウスホイールをチルトするとチルトした方向にウィンドウのビューがスクロールします。つまり右にチルトするとウィンドウは右にスクロールするのでウィンドウに表示されていたテキストは水平左方向に移動します。水平スクロールの方向を逆転したい場合は、変数mwheel-flip-directionを非nil値にカスタマイズしてください。

Imageモード(イメージファイルのvisitを参照)ではイメージ上にマウスポインターがあるときには、Ctrl修飾とともにマウスホイールのスクロールはマウスポインター下のイメージをスケーリングします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

21.2 単語と行にたいするマウスコマンド

以下のmouse-1の変種は、1度に単語全体または行全体を選択します。Emacsは選択されたテキスト周辺のリージョンをアクティブにして、killリングにもコピーされます。

Double-mouse-1

クリックした単語や文字周辺のテキストを選択します。

シンボルの構文をもつ文字(C modeでのアンダースコアーなど)をダブルクリックすると、シンボルを取り囲むその文字を選択します。開きカッコ(または閉じカッコ)の構文をもつ文字をダブルクリックすると、そのカッコで始まる(または終わる)グループを選択します。区切り文字の構文をもつ文字(Cのシングルクォーテーションやダブルクォーテーション)をダブルクリックすると、文字列定数を選択します(Emacsはその文字により開始するのか(または終了するのか)を、発見的な手法を使って見つけ出します)。

カッコによるグループ化、または文字列の区切り文字の先頭をダブルクリックすると、そのリージョンの最後にポイントが移動します。新たな位置を表示するために必要なら、バッファーの表示を前方にスクロールします。カッコによるグループ化、または文字列の区切り文字の終端をダブルクリックしても、デフォルトではポイントはそのリージョンの終端に留まり、リージョンの先頭がウィンドウ上端より上にある場合は表示されません。必要ならバッファーの表示を後方にスクロールすてリージョンの先頭に移動するように変更するには、ユーザーオプションmouse-select-region-move-to-beginningを非nilにセットしてください。

Double-Drag-mouse-1

単語全体を単位として、ドラッグした箇所のテキストを選択します。

Triple-mouse-1

クリックした行を選択します。

Triple-Drag-mouse-1

行全体を単位として、ドラッグした箇所のテキストを選択します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

21.3 マウスで参照をフォローする

Emacsのバッファーにはボタンや、アクティブ化(例えばクリック)したとき何らかのアクション(例えば参照をフォローする)を行う、ハイパーリンクを含むものがあります。ボタンのテキストは通常、アンダーラインが引かれていたり、周囲にボックスが描かれて、視覚的にハイライトされています。ボタンの上にマウスを移動すると、マウスカーソルの形状が変化して、ボタンがライトアップされます。変数mouse-highlightnilに変更すると、Emacsはこのハイライト機能を無効にします。

ボタンをアクティブにするには、ポイントをそこに移動してRETをタイプするか、mouse-1またはmouse-2でボタンをクリックします。たとえばDiredバッファーでは、ファイル名がボタンです。これをアクティブにすることにより、Emacsはそのファイルをvisitします(Dired (ディレクトリーエディター)を参照してください)。*Compilation*バッファーでは、各エラーメッセージがボタンです。これをアクティブにすることにより、そのエラーにたいするソースコードをvisitします(Emacs下でのコンパイルの実行を参照してください)。

ボタンをmouse-1でクリックすると、ボタンがアクティブになりますが、マウスボタンを押してから離すまで一定時間(厳密に言うと450ミリ秒以上)が経過すると、Emacsはボタンをアクティブにせず、ポイントをクリックした場所に移動します。この方法によりボタンをアクティブにせずにポイントを移動するのに、マウスを使用できます。マウスをボタンの上にドラッグすると、通常どおりリージョンをセットして、ボタンはアクティブにしません。

ボタンにたいしてmouse-1がどのように適用されるかは、mouse-1-click-follows-linkをカスタマイズすることにより変更できます。変数の値が正の整数の場合、それはボタンのアクティブ化を取り消すのに、何ミリ秒マウスボタンを押しつづける必要があるかを指定します。前のパラグラフで説明したように、デフォルトは450です。値がnilの場合、mouse-1は単にクリックした場所にポイントを移動するだけで、ボタンをアクティブにしません。値がdoubleの場合、シングルクリックでポイントのセット、ダブルクリックでボタンをアクティブにします。

選択されていないウィンドウのボタンでも通常、mouse-1でクリックすればボタンがアクティブになります。変数mouse-1-click-in-non-selected-windowsnilに変更した場合、選択されていないウィンドウのボタンをmouse-1でクリックすると、クリックした位置にポイントを移動してウィンドウを選択しますが、ボタンはアクティブになりません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

21.4 メニューにたいするマウスクリック

CtrlおよびSHIFTで修飾されたマウスクリックにより、メニューが表示されるものがいくつかあります。

C-mouse-1

このメニューはバッファーを選択するためのものです。

MSB(“mouse select buffer”)グローバルマイナーモードは、このメニューをスマートで、よりカスタマイズ可能なものにします。 バッファーメニューのカスタマイズを参照してください。

C-mouse-2

このメニューには、フェイスや他のテキストプロパティーをテストしたり、それらを設定するものが含まれます(後者は主にEnriched textを編集するのに便利です。Enrichedテキストを参照してください)。

C-mouse-3

このメニューは、モードに特有なメニューです。Menu-barモードがオンの場合、ほとんどのモードでは、このメニューに、そのモード特有なメニューバーのメニューと同じアイテムを表示します。このボタンに異なるメニューを指定するモードもいくつかあります。Menu-barモードがオフの場合、このメニューにはモード特有のメニューだけでなく、本来メニューバーに含まれるべきすべてのアイテムが含まれるので、メニューバーを表示せずに、それらにアクセスすることができます。

S-mouse-1

このメニューはそのウィンドウのバッファーの、デフォルトのフェイスを変更するためのものです。テキストのスケールを参照してください。

グラフィカルなアプリケーションには、mouse-3をモード特有なメニューに使うものもいくつかあります。mouse-3mouse-save-then-killコマンドを実行するかわりに、Emacsにこのようなメニューを表示させるには、以下の行をinitファイルに追加してmouse-3をリバインドします(initファイル内でのキーのリバインドを参照してください)。

(global-set-key [mouse-3] 'mouse-popup-menubar-stuff)

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

21.5 モードラインのマウスコマンド

ウィンドウのモードラインをマウスでクリックして、ウィンドウを選択したり操作することができます。

モードラインのいくつかの領域、たとえばバッファー名や、メジャーモードおよびマイナーモードは、独自のマウスバインディングをもっています。これらの領域にマウスを移動すると、その領域がハイライトされ、特別なバインディングが表示されます(ツールチップを参照してください)。このセクションのコマンドは、それらの領域には適用できません。

mouse-1

モードラインをmouse-1でクリックすると、それが属するウィンドウを選択します。モードライン上でmouse-1でドラッグすることにより、それを移動することができるので、ウィンドウの高さを変更することができます。マウスでの高さの変更により、ウィンドウが削除されることはありません。ウィンドウの高さが定められた最小値より小さくなる場合は、拒絶されます。

mouse-2

モードラインをmouse-2でクリックすると、そのウィンドウがフレーム全体に表示されます。

mouse-3

モードラインをmouse-3でクリックすると、それが属するウィンドウを削除します。フレームにウィンドウが1つしかないときは、何もしません。

C-mouse-2

モードラインをC-mouse-2でクリックすると、クリックした位置でウィンドウを左右に分割します(ウィンドウの分割を参照してください)。

さらに、左右に並んだモードラインの間にある分割線を、mouse-1でクリックしてドラッグすることにより、垂直の境界線を左右に移動できます。

ウィンドウのサイズ変更は、window-resize-pixelwiseの値に影響されることに注意してください。詳細はウィンドウの分割を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

21.6 フレームの作成

プレフィクスキーC-x 5は、C-x 4に類似しています。C-x 4コマンドが、選択されたフレームの別ウィンドウにバッファーを表示するのにたいして、C-x 5は異なるフレームを使います。可視またはアイコン化(“最小化”とも言われる。Visibility of Frames in The Emacs Lisp Reference Manualを参照)されたフレームで、すでに要求されたバッファーが表示されている場合、そのフレームを手前に表示して非アイコン化(“最小化解除”)されます。それ以外の場合は、新しいフレームが現在の表示端末に作成されます。

以下のC-x 5コマンドは、選択するバッファーを検索したり作成する方法が異なります。

C-x 5 2

新しいフレームを作成します(make-frame-command)。

C-x 5 b bufname RET

バッファーbufnameを他のフレームで選択します。これはswitch-to-buffer-other-frameを実行します。

C-x 5 f filename RET

ファイルfilenameをvisitして、そのバッファーを他のフレームで選択します。これはfind-file-other-frameを実行します。ファイルのvisit(訪問)を参照してください。

C-x 5 d directory RET

ディレクトリーdirectoryにたいするDiredバッファーを、他のフレームで選択します。これはdired-other-frameを実行します。Dired (ディレクトリーエディター)を参照してください。

C-x 5 m

他のフレームでメールメッセージの作成を開始します。これはcompose-mail-other-frameを実行します。これはC-x mの異なるフレーム版です。メールの送信を参照してください。

C-x 5 .

他のフレームで識別子の定義を検索します。これはxref-find-definitions-other-frameを実行する、M-.の複数フレーム版です。識別子のリファレンスを探すを参照してください。

C-x 5 r filename RET

ファイルfilenameを読み取り専用でvisitして、そのバッファーを他のフレームで選択します。これはfind-file-read-only-other-frameを実行します。ファイルのvisit(訪問)を参照してください。

フレームパラメーター(frame parameters)を指定することにより、新しく作成されるフレームの外見と動作を制御できます。フレームパラメーターを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

21.7 フレームコマンド

以下のコマンドは、フレームを削除したり操作するために使われます:

C-x 5 0

選択されたフレームを削除します(delete-frame)。1つしかフレームがないときは、エラーをシグナルします。

C-z

選択されたEmacsフレームを最小化(またはアイコン化)します(suspend-frame)。Emacsからのexitを参照してください。

C-x 5 o

他のフレームを選択して手前に表示します。このコマンドを繰り返すと、端末のすべてのフレームを循環することができます。

C-x 5 1

現在の端末の、選択されたフレーム以外のすべてのフレームを削除します。

M-F10

カレントフレームの最大化を切り替えます。フレームが最大化されているときはスクリーン全体に表示されます。

F11

カレントフレームのフルスクリーンモードを切り替えます(フルスクリーンと最大化の違いは、前者がウィンドウマネージャーの装飾を隠すことで、これによりEmacs自身のスクリーンスペースが若干増えます)。

フレームを本当に最大化またはフルスクリーンにするためには、変数frame-resize-pixelwiseを非nil値にカスタマイズする必要があるウィンドウマネージャーもいくつかあります。この変数を非nil値にセットすると、一般的にフレームのサイズ変更を行や列の整数倍ではなく、ピクセル単位で行うことができます。

C-x 5 0 (delete-frame)コマンドは、選択されたフレームを削除します。しかしEmacsセッションとの対話能力が失われるのを防ぐため、Emacsセッションの最後のフレームの削除は拒絶します。Emacsがデーモンとして実行されているとき(サーバーとしてのEmacsの使用を参照してください)は、普通の対話的なフレームがすべて削除された後も、常に仮想的なフレーム(virtual frame)が残ります。この場合、C-x 5 0は最後の対話的なフレームを削除できます。Emacsセッションに再接続するには、emacsclientを使うことができます。

C-x 5 1 (delete-other-frames)コマンドは、現在の端末(端末にはグラフィカルなディスプレーとテキスト端末の両方が含まれます)の、カレントのフレーム以外のすべてのフレームを削除します。非ウィンドウ端末を参照してください)。他のグラフィカルなディスプレー、またはテキスト端末で開いたフレームをもっている場合、これらは削除されません。

C-x 5 o (other-frame)コマンドは、現在の端末の次のフレームを選択します。EmacsをXウィンドウシステム上のウィンドウマネージャーで使っていて、どんなフレームだろうと、マウスカーソルが上にくるとそのフレームを選択(またはフォーカスを与える)するようになっている場合、このコマンドが正常に機能するために、変数focus-follows-mousetに変更する必要があります。これはC-x 5 oを呼び出し、マウスカーソルを選択されたフレームにワープさせます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

21.8 フォント

デフォルトではEmacsはグラフィカルなディスプレーでテキストを表示するのに10ポイントのmonospaceフォントを使います。フォントのサイズはインタラクティブに変更可能です(テキストのスケールを参照)。

異なるフォントを指定するために複数の異なる方法があります:

現在使っているフォントをチェックするには、C-u C-x =コマンドが有用です。これはポイント位置の文字の説明と、それを描画しているフォント名を表示します。

フォント名を表現する異なる方法がいくつか存在します。1番目はFontconfigパターンを使う方法です。Fontconfigパターンは以下の形式をもちます:

fontname[-fontsize][:name1=values1][:name2=values2]...

このフォーマットでは、大カッコ(brackets)の中の要素は省略可能です。fontnameは、‘Monospace’や‘DejaVu Sans Mono’のような、フォントのファミリー名です。fontsizeは、フォントのポイントサイズ(1プリンターポイントはおよそ1/72インチです)で、エントリー‘name=values’は、フォントのslantやweightなどのセッティングを指定します。valuesには1つの値か、カンマで区切られた値のリストを指定します。それらに加えていくつかのプロパティー値は、ある種のプロパティー名だけで有効なものがあり、それらについては‘name=’部分を省略できます。

以下は、一般的なフォントプロパティーの一覧です:

slant

italic’、‘oblique’、‘roman’のうちの、どれか1つです。

weight

light’、‘medium’、‘demibold’、‘bold’、‘black’のうちの、どれか1つです。

style

slantとweightを組み合わせた、特別なstyleを定義するフォントがいくつかあります。たとえば‘Dejavu Sans’は、‘book’ styleを定義し、これはslantおよびweightプロパティーをオーバーライドします。

width

condensed’、‘normal’、‘expanded’のうちの、どれか1つです。

spacing

monospace’、‘proportional’、‘dual-width’、‘charcell’のうちの、どれか1つです。

以下はFontconfigパターンの例です:

Monospace
Monospace-12
Monospace-12:bold
DejaVu Sans Mono:bold:italic
Monospace-12:weight=bold:slant=italic

Fontconfigパターンの、より詳細な説明は、Fontconfigのマニュアルを参照してください。これはFontconfigとともに配布されており、https://fontconfig.org/fontconfig-user.htmlからオンラインで利用可能です。

MS-Windowsではすべてのフォントにたいしてfontname[-fontsize]形式のサブセットだけがサポートされています。これらの形式すべてにたいして完全なFontconfigパターンは機能しないかもしれません。

フォントを指定する2番目の方法は、GTKフォントパターンを使う方法です。これらは以下の構文を使います。

fontname [properties] [fontsize]

fontnameはファミリー名、propertiesはスペースで区切られたプロパティー値のリストで、fontsizeはポイントサイズです。GTKフォントパターンで指定するプロパティーは以下のようなものでしょう:

以下にGTKフォントパターンの例をいくつか示します:

Monospace 12
Monospace Bold Italic 12

MS-Windowsではfontnameのサブセットだけがサポートされています。

フォントを指定する3番目の方法はXLFD(X Logical Font Description)を使う方法であり、MS-Windowsでもサポートされています。これはXでフォントを指定する際の伝統的な手法です。以下のように、各XLFDは14の単語か数字をダッシュで区切ったものからなります:

-misc-fixed-medium-r-semicondensed--13-*-*-*-c-60-iso8859-1

XLFDでのワイルドカード文字(‘*’)は、任意の文字の並び(noneを含む)にマッチし、‘?’は任意の1文字にマッチします。しかしマッチングは実装依存で、長い名前の中のダッシュにたいするワイルドカードのマッチが不正確なことがあります。信頼できる結果を得るためには、14個すべてのダッシュを指定して、ワイルドカードを1つのフィールドだけに使います。XLFDでは大文字小文字の違いは重要ではありません。XLFDの構文は以下のとおりです:

-maker-family-weight-slant-widthtype-style…
…-pixels-height-horiz-vert-spacing-width-registry-encoding

エントリーは以下の意味をもちます:

maker

フォントのmanufacturer(製造者名)です。

family

フォントのファミリー名です(たとえば‘courier’)。

weight

フォントのweightで、通常は‘bold’、‘medium’、‘light’のどれかです。他の値をサポートするフォント名もいくつかあります。

slant

フォントのslantで、通常は‘r’(roman)、‘i’(italic)、‘o’(oblique)、‘ri’(reverse italic)、‘ot’(other)のどれかです。他の値をサポートするフォント名もいくつかあります。

widthtype

フォントのwidthで、通常は‘normal’、‘condensed’、‘semicondensed’、‘extended’のどれかです。他の値をサポートするフォント名もいくつかあります。

style

オプションの追加のstyle名です。通常これは空で、ほとんどのXLFDでは、この位置に2つのハイフンを続けて指定します。style名には、‘ja’や‘ko’のような、ISO-639 language nameの2文字を指定することもできます。CJKスクリプトをサポートするいくつかのフォントは、style名の部分にこの記述をもちます。

pixels

フォントのheightをピクセルで指定します。

height

プリンターのポイントの1/10を単位とした、スクリーン上のフォントのheightです。フォントのポイントサイズの10倍です。垂直解像度(vertical resolution)を与えれば、heightpixelsは比例します。したがって一方を指定して、もう一方に‘*’を指定するのが一般的です。

horiz

フォントが意図するインチあたりのピクセル数で表した、水平解像度(horizontal resolution)です。

vert

フォントが意図するインチあたりのピクセル数で表した、垂直解像度(vertical resolution)です。通常、システムのフォント解像度は、スクリーンにたいして正しい値になっています。したがって、これとhorizには‘*’を指定するのが普通です。

spacing

これには‘m’(monospace)、‘p’(proportional)、‘c’(character cell)を指定します。

width

ピクセル単位で表した文字の平均widthの10倍です。

registry
encoding

フォントを描画するXフォント文字セット(X font character set)です(Xフォント文字セットはEmacs文字セットと同じではありませんが、似ています)。フォントの選択をチェックするのに、xfontselコマンドを使うことができます。通常は、registryに‘iso8859’、encodingに‘1’を使うべきです。

フォントを指定する4番目の方法は、フォントニックネーム(font nickname)を使う方法です。特定のフォントは通常のフォント指定のかわりに、短いニックネームをもつものがあります。たとえば‘6x13’は以下と同じです

-misc-fixed-medium-r-semicondensed--13-*-*-*-c-60-iso8859-1

この形式はMS-Windowsではサポートされていません。

X上でのEmacsは、2つのタイプのフォントを認識します。1つはクライアントサイドのフォントで、これはXftおよびFontconfigライブラリーにより提供されます。もう1つはサーバーサイドのフォントで、これはXサーバー自身により提供されます。ほとんどのクライアントサイドフォントは、アンチエイリアシング(antialiasing)やサブピクセルンティング(subpixel hinting)などの、サーバーサイドフォントにはない、進んだフォント機能をサポートします。FontconfigとGTKパターンは、クライアントサイドフォントだけにマッチします。

すべての文字が同じ幅をもつ固定幅フォントを使いたいと思うでしょう。XftおよびFontconfigフォントでは、fc-listコマンドを使って、以下のようにして利用可能な固定幅フォントを一覧することができます。

fc-list :spacing=mono
fc-list :spacing=charcell

サーバーサイドのXフォントにたいしては、xlsfontsプログラムを使って、以下のようにして利用可能な固定幅フォントを一覧することができます。

xlsfonts -fn '*x*' | grep -E '^[0-9]+x[0-9]+'
xlsfonts -fn '*-*-*-*-*-*-*-*-*-*-*-m*'
xlsfonts -fn '*-*-*-*-*-*-*-*-*-*-*-c*'

XLFDのspacingフィールドが、‘m’または‘c’のフォントは固定幅フォントです。特定のフォントの外見を見るには、以下のようにxfdコマンドを使います:

xfd -fn 6x13

これはフォント‘6x13’の全体を表示します。

Emacsを実行しているときは、特定の種類のテキスト(テキストのフェイスを参照してください)や、特定のフレーム(フレームパラメーターを参照してください)のフォントをセットすることもできます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

21.9 スピードバーフレーム

スピードバー(speedbar)は、簡単に他のフレームを操作したり処理するための、特別なフレームです。スピードバーが存在するとき、それは常にアタッチされたフレーム(attached frame)と呼ばれる、特定のフレームに対応しています。すべてのスピードバー操作は、そのフレームにたいして処理されます。

M-x speedbarとタイプすると、スピードバーを作成して、カレントフレームに関連付けます。スピードバーを解除するには、再度M-x speedbarとタイプするか、スピードバーを選択してqとタイプします(他のEmacsフレームを削除するのと同じ方法で、スピードバーフレームを削除することもできます)。スピードバーを他のフレームに関連付けたいときは、一旦解除してから、そのフレームでM-x speedbarを呼び出します。

スピードバーは、さまざまなモードを処理できます。デフォルトモードはFile Display(ファイル表示)モードで、これはアタッチされたフレームの、選択されたウィンドウのカレントディレクトリーのファイルを、1行に1ファイルずつ表示します。ディレクトリー以外をクリックすると、アタッチされたフレームの、選択されたウィンドウでそのファイルをvisitし、ディレクトリーをクリックすると、スピードバーでそのディレクトリーを表示します(マウスで参照をフォローするを参照してください)。各行には‘[+]’や‘<+>’が記されたボックスがあり、それをクリックすると、そのアイテムの内容を展開します。ディレクトリーを展開すると、ディレクトリーの内容を、ディレクトリー自身の行の下に加えてスピードバー表示します。通常のファイルを展開すると、ファイルの中のtagリストをスピードバー表示に加えます。tag名をクリックして、アタッチされたフレームの選択されたウィンドウで、tagにジャンプできます。ファイルまたはディレクトリーが展開されているときは、‘[+]’が‘[-]’に変化します。ボックスを再度クリックすると、アイテムを収納して、内容を隠すことができます。

キーボードを使ってスピードバーを操作することもできます。スピードバーでポイントのある行でRETをタイプするのは、そのアイテムをクリックするのと等しく、SPCはアイテムを展開または収納します。Uは、カレントディレクトリーの親ディレクトリーを表示します。カレント行のファイルをコピー、削除、リネーム<するには、CDRをタイプします。新しいディレクトリーを作成するには、Mをタイプします。

スピードバーのモードで、他に一般的な目的に使われるのはBuffer Display(バッファー表示)モードです。このモードでは、スピードバーはEmacsバッファーのリストを表示します。このモードに切り替えるにはスピードバーでbをタイプします。File Displayモードに戻るには、fをタイプします。スピードバーのウィンドウのどこかをmouse-3でクリック(またはモードラインをmouse-1でクリック)して、ポップアップメニューの‘Displays’を選択しても、表示モードを変更することができます。

Rmailモード、Info、GUDを含むいくつかのメジャーモードは、スピードバーに選択可能な便利なアイテムを配する、特別な方法をもっています。たとえばRmailモードでは、スピードバーはRmailファイルのリストを表示し、カレントメッセージを他のRmailファイルに移動する場合は、それの‘<M>’ボックスをクリックします。

スピードバーの使い方とプログラミングに関する詳細は、Speedbar in Speedbar Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

21.10 複数ディスプレー

1つのEmacsが、1つ以上のXディスプレーと通信できます。最初、Emacsは環境変数DISPLAY、または‘--display’オプション(初期化オプションを参照してください)で指定された、ただ1つのディスプレーに表示されます。他のディスプレーに接続するには、コマンドmake-frame-on-displayを使います:

M-x make-frame-on-display RET display RET

ディスプレーdisplayに新しいフレームを作成します。

1つのXサーバーは、1つ以上のスクリーンを処理できます。1つのサーバーに属する2つのスクリーンでフレームを開いた場合、Emacsはそれらが1つのキーボードを共有するのを知っているので、これらのスクリーンから到着するすべてのコマンドを1つの入力ストリームとして扱います。

異なるXサーバーでフレームを開いた場合、Emacsは各サーバーごとに別な入力ストリームを作成します。各サーバーは、それぞれ選択されたフレームをもちます。特定のXサーバーで入力したコマンドは、そのサーバーの選択されたフレームに適用されます。

マルチモニターディスプレイではコマンドmake-frame-on-monitorが使用可能です:

M-x make-frame-on-monitor RET monitor RET

モニターmonitor上にスクリーン領域がカレントディスプレイの一部であるようなフレームを新たに作成します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

21.11 フレームパラメーター

変数default-frame-alistの中の、フレームパラメーター(frame parameters)のデフォルトリストを指定することにより、すべてのフレームのデフォルトの外見と振る舞いを制御することができます。この値はエントリーのリストで、各エントリーにはパラメーター名と、そのパラメーターの値を指定します。これらのエントリーはEmacsが新しいフレームを作るとき(初期フレームを含む)に効果を及ぼします。

たとえば以下のファイルをinitファイル(Emacs初期化ファイルを参照してください)に追加することにより、デフォルトのフレーム幅が90列、デフォルトのフレーム高さが40行、デフォルトフォントに‘Monospace-10’を指定します。

(add-to-list 'default-frame-alist '(width  . 90))
(add-to-list 'default-frame-alist '(height . 40))
(add-to-list 'default-frame-alist '(font . "Monospace-10"))

フレームパラメーターのリストと、その効果については、Frame Parameters in The Emacs Lisp Reference Manualを参照してください.

変数initial-frame-alistをカスタマイズすることにより、初期フレームだけに適用されるフレームパラメーターのリストを指定することもできます。

EmacsがX ツールキットを使ってコンパイルされている場合、カラーとフォントを指定するフレームパラメーターは、メニューとメニューバーには影響を及ぼしません。なぜなら、それらはEmacsが直接描画しているのではなく、ツールキットにより描画されているからです。

フレームの外観と振る舞いも、Xリソースを通じてカスタマイズできます(Xのオプションとリソースを参照)。これらはinitファイル内で指定された初期フレームのパラメーターをオーバーライドします。

セッションの保存とリストアのためにdesktopライブラリーを使用している場合は、desktopファイルに記録されたフレームが、これらのパラメーターとともにリストアされることに注意してください。これらのフレームがリストアされるときは、initファイル内でdefault-frame-alistおよびinitial-frame-alistで指定されているフレームパラメーターよりも、記録されたパラメーターが優先されます。これを避ける方法については、Emacsセッションの保存を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

21.12 スクロールバー

グラフィカルなディスプレーでは、Emacsウィンドの横に垂直スクロールバー(vertical scroll bar)があります。スクロールバーのupボタンまたはdownボタンをmouse-1でクリックすると、ウィンドウを1行ずつスクロールします(しかし、これらのボタンがないようにスクロールバーをカスタマイズできるツールキットもある)。スクロールバー内部のボックスの上または下をmouse-1でクリックすると、M-vまたはC-vと同様に、ほぼウィンドウ全体の高さ分スクロールします(ポイント位置の変更を参照) (これも、いくつかのツールキットでは動作が異なるかもしれない)。スクロールバー内部のボックスをドラッグすると、連続してスクロールします。

EmacsがXウィンドウシステム上でXツールキットサポートなしでコンパイルされている場合、スクロールバーは違った振る舞いをします。スクロールバーの任意の箇所をmouse-1でクリックするとC-vのように前方にスクロールし、mouse-3でクリックするとM-vのように後方にスクロールします。スクロールバーでmouse-2をクリックすると、スクロールバー内部のボックスを上下にドラッグできます。

垂直スクロールバーの使用を切り替えるには、M-x scroll-bar-modeとタイプします。このコマンドは、まだ作成されていないフレームも含めて、すべてのフレームに適用されます。選択されたフレームの垂直スクロールバーだけ切り替えたい場合は、コマンドM-x toggle-scroll-barを使用してください。

起動時に垂直スクロールバーの使用を制御するには、変数scroll-bar-mode (カスタマイズを参照)をカスタマイズします。この変数の値は、right(ウィンドウの右にスクロールバーを配します)、left(ウィンドウの左にスクロールバーを配します)、nil(垂直スクロールバーを無効にします)のどれかです。EmacsがXウィンドウシステム上でGTK+サポートつきでコンパイルされている、またはMS-Windows、macOSの場合、デフォルトでは右にスクロールバーを配します。EmacsがXウィンドウシステム上でGTK+サポートなしでコンパイルされている場合、(古いXアプリケーションの慣例にしたがって)スクロールバーを左に配します。

Xリソース‘verticalScrollBars’を使って、スクロールバーの有効または無効にすることができます(Xリソースを参照してください)。スクロールバーの幅を制御するにはフレームパラメーターscroll-bar-widthを変更してください(Frame Parameters in The Emacs Lisp Reference Manualを参照してください)。

(GTK+またはMotifとともに)X上でEmacsを使っている場合、変数scroll-bar-adjust-thumb-portionをカスタマイズして、スクロールバーのオーバースクロール(overscrolling: たとえばバッファーの最後が表示されていてもさらに下にスクロールします)を制御できます。変数の値が非nilの場合、バッファーの最後が表示されていてもスクロールバーを下にドラッグできます。nilの場合、バッファーの最後が表示されたとき、内部のボックスはスクロールバーの最下になります。バッファー全体が表示されているときは、オーバースクロールできません。

スクロールバーの視覚的な外見は、scroll-barフェイスにより制御されます。

グラフィカルなフレームでは、垂直スクロールバーは暗に横並びのウィンドウを区別する役目を担っています。垂直スクロールバーが無効なとき、Emacsはデフォルトでは幅1ピクセルの垂直ボーダー(vertical border)によりそのようなウィンドウを区別します。このボーダーは右側のウィンドウの最初の1ピクセルの列を占め、したがってそこに表示されていたグリフの左端ピクセルの上に上書きされることになるでしょう。これらのピクセルに重要な情報が含まれる場合は、window dividerを有効にしてそれらを可視にできます(ウィンドウdividerを参照)。垂直ボーダーの見栄えを複製するには、フレームのright-divider-widthパラメーターを1にセットして、window-dividerフェイスをvertical-borderのフェイスから継承してください(Window Dividers in The Emacs Lisp Reference Manualを参照)。

ツールキットサポート付きのグラフィカルなディスプレーでは、Emacsは各ウィンドウの最下に水平スクロールバー(horizontal scroll bar)も提供します。スクロールバーのleftボタンまたはrightボタンをmouse-1でクリックすると、ウィンドウを1列ずつ水平にスクロールします(これらのボタンを表示しないようスクロールバーをカスタマイズできるツールキットがあることに注意)。スクロールバーの内部ボックスの左または右下をmouse-1でクリックすると、ウィンドウは4列スクロールします。スクロールバー内部のボックスをドラッグすると、連続してスクロールします。

このような水平スクロールにより、そのウィンドウのポイント位置が、右側または左側の見えない場所になるかもしれないことに注意してください。文字をタイプしてテキストを挿入したり、キーボードコマンドでポイントを移動することにより通常、ポイントは視界に戻るでしょう。

水平スクロールバーの使用を切り替えるには、M-x horizontal-scroll-bar-modeとタイプします。このコマンドは、まだ作成されていないフレームも含めて、すべてのフレームに適用されます。選択されたフレームの水平スクロールバーだけ切り替えたい場合は、コマンドM-x toggle-horizontal-scroll-barを使用してください。

起動時に水平スクロールバーの使用を制御するには、変数horizontal-scroll-bar-modeをカスタマイズしてください。

Xリソース‘horizontalScrollBars’を使って、水平スクロールバーを有効または無効にすることができます(Xリソースを参照してください)。スクロールバーの高さを制御するには、フレームパラメーターscroll-bar-heightを変更してください(Frame Parameters in The Emacs Lisp Reference Manualを参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

21.13 ウィンドウdivider

グラフィカルなディスプレーでは、ウィンドウの外観を分割するために、window dividersを使用することができます。window dividersはマウスでドラッグできるバーなので、隣接したウィンドウを簡単にリサイズできます。

window dividersの表示を切り替えるには、コマンドM-x window-divider-modeを使用します。

dividersをどこに表示するかカスタマイズするには、オプションwindow-divider-default-placesを使用します。変数の値にはbottom-only (dividersをウィンドウの下だけに表示します)、right-only (dividersをウィンドウの右だけに表示します)、またはt (下と右の両方に表示します)を指定します。

このモードにより表示されるwindow dividersの幅を調整するには、オプションwindow-divider-default-bottom-widthおよびwindow-divider-default-right-widthをカスタマイズします。

ウィンドウの列の最初の1ピクセル(window dividerが無効な場合は横並びのウィンドウを区別する垂直ボーダーに使用されます)を可視とするwindow dividerは、垂直スクロールバーが無効のときにも有用です(スクロールバーを参照)。

window dividersについての詳細は、Window Dividers in The Emacs Lisp Reference Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

21.14 ドラッグアンドドロップ

ほとんどのグラフィカルなデスクトップ環境で、Emacsはドラッグアンドドロップ(drag and drop)操作にたいする、基本的なサポートを提供します。たとえばEmacsのフレームにテキストをドロップすると、ドロップされた箇所にテキストを挿入し、ファイルをドロップすると、Emacsフレームはそのファイルをvisitします。特別なケースとしては、Diredバッファーにファイルをドロップすることにより、バッファーに表示されているディレクトリーにファイルを移動またはコピーします(アプリケーションの慣例に基づきます)。

ファイルをドロップすると、通常はドロップされたウィンドウでファイルをvisitします。そのような場合に、新しいウィンドウでファイルをvisitしたいときは、変数dnd-open-file-other-windowをカスタマイズします。

現在のところ、XDNDおよびMotif drag and drop protocolsと、古いKDE 1.x protocolがサポートされています。

Emacsはオプションで、テキストのリージョンを他のバッファーの他の部分へドラッグする操作もサポートします。これを有効にするには、変数mouse-drag-and-drop-regionを非nil値にカスタマイズしてください。通常そのテキストは、ドロップ先が元のリージョンと同じなら移動(カットアンドペースト)され、他のバッファーならそのリージョンがコピーされます。この変数の値が‘shift’、‘control’、‘alt’のような修飾キー名の場合、その修飾キーを押しながらテキストをドロップすると、ドロップ先がドラッグ元と同じバッファーでも、テキストはカットされずにコピーされます。

ドラッグ元とドロップ先が異なるバッファーのときにもテキストをカットするためには、オプションmouse-drag-and-drop-region-cut-when-buffers-differを非nil値にセットします。デフォルトでは、グラフィカルなディスプレイの選択されたテキストはツールチップ内に表示され、ドラッグ中にはマウスカーソルとともにポイントが移動します。このような動作を抑止するには、オプションmouse-drag-and-drop-region-show-tooltip、および/またはmouse-drag-and-drop-region-show-cursornilをセットしてください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

21.15 メニューバー

M-x menu-bar-modeで、メニューバーの使用を切り替えることができます。引数を指定しないと、このコマンドはグローバルマイナーモードのMenu Barを切り替えます。引数を指定した場合、引数が正ならMenu Barモードをオンにして、負ならオフにします。起動時にメニューバーの使用を制御するには、変数menu-bar-modeをカスタマイズしてください。

熟練したユーザーは、テキストのために更なる行を得るために、メニューをオフにしている場合がしばしばあります(特にテキスト端末時)。メニューバーがオフでも、ポップアップメニューをサポートするディスプレーなら、C-mouse-3でメニュー内容を含むポップアップメニューを表示できます。メニューにたいするマウスクリックを参照してください。

メニューバーのコマンドを呼び出す方法については、メニューバーを参照してください。メニューバーのメニューの視覚的な外見をカスタマイズする方法は、Xのオプションとリソースを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

21.16 ツールバー

グラフィカルなディスプレーでは、Emacsはフレームのトップ、メニューバーの直下にツールバー(tool bar)を配します。これはマウスでクリックすることにより、さまざまなコマンドを呼び出すことができるアイコンが1列に並んだものです。

(デフォルトの)グローバルツールバーは、一般的なコマンドを含みます。自身のツールバーを定義するメジャーモードもいくつか存在します。バッファーがそれらのメジャーモードの場合、モードのツールバーにより、グローバルツールバーが置き換えられます。

ツールバーの使用を切り替えるには、M-x tool-bar-modeとタイプします。このコマンドは、まだ作成されていないフレームを含むすべてのフレームに適用されます。起動時にツールバーの使用を制御するには、変数tool-bar-modeをカスタマイズします。

EmacsがGTK+サポートつきでコンパイルされている場合、ツールバーアイテムには、イメージ、テキストラベル、またはそれら両方を含むことができます。デフォルトではEmacsはGnomeデスクトップの、ツールバースタイルセッティングにしたがいます。もし何も定義されていない場合、ツールバーのアイテムにはイメージだけが表示されます。特定のツールバースタイルを強要するには、変数tool-bar-styleをカスタマイズしてください。

フレームパラメーターtool-bar-positionで、GTK+ツールバーのためのツールバーの配置を制御することもできます。Frame Parameters in The Emacs Lisp Reference Manualを参照してください。

NSビルドはツールバーをウィンドウ装飾と判断するため、ウィンドウが装飾されていないときはツールバーを表示しません。Frame Parameters in The Emacs Lisp Reference Manualを参照してください。macOSでは、フレームがフルスクリーンのときツールバーは表示されませんが、スクリーン上端にマウスポインターを移動することにより表示することができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

21.17 タブバー

グラフィカルなディスプレーとテキスト端末では、Emacsはオプションでフレームのトップ、メニューバーの直下にタブバー(Tab Bar)を表示できます。タブバーとはタブ(tabs)の行(そのフレーム上のウィンドウ設定間を切り替えるためにクリック可能)です。

タブバー上の各タブは永続的なウィンドウ設定を表します。タブの名前はウィンドウ設定で可視なバッファーの名前のリストから構成されます。タブをクリックすることによってタブに記録されたウィンドウ設定(以前そのタブがカレントタブだったときにフレームで使用されたウィンドウとバッファーの設定)に切り替わります。

セッションの保存とリストアにデスクトップライブラリー(Emacsセッションの保存を参照)を使用している場合には、タブバーのタブは関連付けられたウィンドウ設定とともにデスクトップファイルに記録されて、それはセッションをリストアした後に利用することができます。

タブバーはタブラインとは異なることに注意してください(ウィンドウのタブラインを参照)。各ウィンドウ上端にあるタブラインのタブはバッファーの切り替え、各フレーム上端にあるタブバーのタブは複数のウィンドウとバッファーを含むウィンドウ設定の切り替えに使用します。

タブバーの使用を切り替えるには、M-x tab-bar-modeとタイプします。このコマンドは、まだ作成されていないフレームを含むすべてのフレームに適用されます。起動時にタブバーの使用を制御するには、変数tab-bar-modeをカスタマイズします。

変数tab-bar-showはTab Barモードを自動的にオンにするかどうかを制御します。この値がtなら、新たなタブを作成するコマンドの使用時にtab-bar-modeモードが有効に成増。値が1ならタブが1つだけのときはタブバーを隠して、さらにタブが作成されたら再び表示します。値nilは常にタブバーを非表示にします。この場合でもM-x tab-nextM-x tab-switcher、およびタブ名の補完を提供するその他のコマンドを使用することによってタブバーなしで名前つきのウィンドウ設定を切り替えることができます。M-x tab-newM-x tab-close等のコマンドを使用することにより、タブバーの作成やクローズも可能です。

プレフィクスキーC-x tC-x 5と似ています。C-x 5コマンドはバッファーを別フレームにポップアップしますが(フレームの作成を参照)、C-x tコマンドは選択されたフレームで異なるウィンドウ設定に別のタブを使用します。

以下のC-x tコマンドは選択するバッファーを検索したり作成する方法が異なります。以下のコマンドは新たなタブでのバッファーの選択に使用できます。:

C-x t 2

タブを新たに追加します(tab-new)。変数tab-bar-new-tab-choiceのカスタマイズによって新たなタブに表示するバッファーの選択を制御できます。

C-x t b bufname RET

バッファーbufnameを他のタブで選択します。これはswitch-to-buffer-other-tabを実行します。

C-x t f filename RET

ファイルfilenameをvisitして、そのバッファーを他のタブで選択します。これはfind-file-other-tabを実行します。ファイルのvisit(訪問)を参照してください。

C-x t d directory RET

ディレクトリーdirectoryにたいするDiredバッファーを、他のタブで選択します。これはdired-other-tabを実行します。Dired (ディレクトリーエディター)を参照してください。

デフォルトでは新たなタブを追加したコマンドの呼び出し前にカレントだったバッファーとともに新たなタブが開始されます。別のバッファーとともに新たなタブを開始するには、変数tab-bar-new-tab-choiceをカスタマイズしてください。

変数tab-bar-new-tab-toは新たなタブを配置する場所を定義します。デフォルトでは新たなタブはカレントタブの右側に追加されます。

以下のコマンドはタブの削除に使用されます:

C-x t 0

選択されたタブをクローズします(tab-close)。変数tab-bar-close-last-tab-choiceがデフォルト値なら、1つのタブの場合には効果はありません。

C-x t 1

選択されたフレームの、選択されたタブ以外のすべてのタブを削除します。

変数tab-bar-close-tab-selectはカレントタブをクローズ後に選択するタブを定義します。デフォルトではもっとも最近使用したタブを選択します。

コマンドtab-undoは最後にクローズしたタブをリストアします。

以下のコマンドはタブ間を切り替えるために使用されます:

C-x t o
C-TAB

次のタブに切り替えます。このコマンドを繰り返すと選択されたフレームのすべてのタブを巡回します。正の数引数nでは次のn番目のタブ、負の引数-nでは前のn番目のタブに切り替えます。

S-C-TAB

前のタブに切り替えます。正に数引数nでは前のn番目のタブ、負の引数-nでは次のn番目のタブに切り替えます。

C-x t RET tabname RET

すべてのタブの名前の補完つきで名前でタブを切り替えます。デフォルト値はもっとも最近使用された順にソートされたタブ名なので、M-n (next-history-element)で最後にvisitしたタブ、その前のタブ、...を取得します。

modifier-tabnumber

タブ名でタブを切り替えます。modifierキーを指定するために変数tab-bar-select-tab-modifiersをカスタマイズした後には、タブの序数と指定した修飾キーを組み合わせてタブを選択できます。別の変数tab-bar-tab-hintsをカスタマイズして、タブ名とともにタブ番号を表示できます。これは番号でタブを選択するためにどのキーを押下すれば判断する助けになるでしょう。

modifier-0

最近使用したタブに切り替えます。キーの組み合わせはtab-bar-select-tab-modifiersで指定した修飾キーと0です。数引数nではn番目に最近使用したタブに切り替えます。

以下のコマンドはタブを操作するために使用されます:

C-x t r tabname RET

カレントタブをtabnameにリネームします。変数tab-bar-tab-name-functionをカスタマイズして、デフォルトでタブに与えるプログラム的な名前を制御できます。

C-x t m

正の数引数nではカレントタブから右にn個目のタブ、負の引数-nではカレントタブから左にn個目のタブに移動します。

すべてのタブに使用されたウィンドウ設定の記録とリストアのためにtab-bar-history-modeを有効にできます。

tab-bar-history-back

カレントタブで前に仕様されたウィンドウ設定をリストアします。これによりウィンドウ設定のヒストリーを戻ります。

tab-bar-history-forward

前のウィンドウ設定のリストアを取り消します。これはウィンドウ設定のヒストリーを進めます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

21.18 ダイアログボックスの使用

ダイアログボックスとは、yes-or-noの質問(はい/いいえで応える問いかけ)をしたり、他の何か特別な質問を問いかけるための、特別な種類のメニューです。コマンドを呼び出すためにマウスを使い、それがユーザーへの質問を要するような操作の場合、多くのEmacsコマンドはyes-or-noを問うために、ダイアログボックスを使います。

ダイアログボックスの使用を無効にするには、変数use-dialog-boxnilに変更します。この場合、Emacsはエコーエリアとキーボード入力を使ってyes-or-noプロンプトを処理します。この変数はファイル選択ウィンドウの使用も制御します(しかしこれらはすべてのプラットフォームでサポートされているわけではありません)。

ファイル選択ウィンドウはファイル名を問うための、特別な種類のダイアログボックスです。変数use-file-dialogをカスタマイズすれば、他の種類のダイアログボックスを使用して、ファイル選択ウィンドウを使用しないようにできます。変数use-dialog-boxですべてのダイアログボックスを使用しないようにしている場合、この変数は効果がありません。

EmacsがGTK+サポートつきでコンパイルされている場合、EmacsはGTK+のファイル選択ダイアログを使います。Emacsは非表示のファイル(名前がドットで始まるファイル)の表示の有効・無効を切り替えるボタンを、ダイアログボックスに追加します。この切り替えをデフォルトで有効にしたい場合、変数x-gtk-show-hidden-filestに変更します。さらにEmacsは、GTK+ファイル選択ダイアログにヘルプテキストを追加します。このヘルプテキストを無効にするには、変数x-gtk-file-dialog-help-textnilに変更してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

21.19 ツールチップ

ツールチップは、小さい特別なフレームに、マウスのカレント位置に関するテキスト情報を表示します。ツールチップはウィンドウの重要なテキストの上や、ツールバーのボタンやメニューアイテムのような、Emacsフレームの他の部分の上でマウスを停止させたときにアクティブになります。

ツールチップの使用は、コマンドM-x tooltip-modeで切り替えることができます。Tooltipモードが無効な場合、ヘルプテキストは、かわりにエコーエリアに表示されます。ツールチップの使用を起動時に制御するには、変数tooltip-modeをカスタマイズしてください。

以下の変数はツールチップ表示にたいするカスタマイズオプションを提供します:

tooltip-delay

この変数は、最初のツールチップを表示する前に、Emacsがwaitする長さを指定します。値は秒です。

tooltip-short-delay

この変数は、すでに最初のツールチップが表示されているとき、異なるアイテムにたいする後続のツールチップを表示する前に、Emacsがwaitする長さを指定します。値は秒です。

tooltip-hide-delay

マウスが静止しているとき、ツールチップを隠すまでの秒数です。

tooltip-x-offset
tooltip-y-offset

マウスポインター位置から、ツールチップの左上隅までのXオフセットとYオフセットを、ピクセルで指定します。tooltip-frame-parametersが、leftおよびtopパラメーターをインクルードするためにカスタマイズされている場合、これらは無視されることに注意してください。オフセットには、ツールチップがマウスのクリックと干渉するような、マウスポインターのホットスポットを覆い隠さない値を指定するべきです。

tooltip-frame-parameters

ツールチップの表示のために、フレームパラメーターが使用されます。Frame Parameters in The Emacs Lisp Reference Manual、およびTooltips in The Emacs Lisp Reference Manualを参照してください。

ツールチップの表示にたいする追加のカスタマイズオプションについては、M-x customize-group RET tooltip RETを使用してください。

EmacsがGTK+サポートつきでビルドされている場合、ツールチップはGTK+を通じて、GTK+のツールチップのデフォルトの外見を使います。これを無効にするには、変数x-gtk-use-system-tooltipsnilに変更します。これを行うか、EmacsがGTK+サポートなしでビルドされた場合は、ツールチップテキストのほとんどの属性はtooltipフェイスとXリソース(Xのオプションとリソースを参照してください)により指定されます。

GUDツールチップは、プログラムをGUDでデバッグしているときに変数の値を表示する、特別なツールチップです。デバッガーの操作を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

21.20 マウスの回避

グラフィカルな端末では、マウスポインターがEmacsフレームのテキストを隠してしまうことがありえます。この問題を避けるために、Emacsは2つの方法を提供します。

1番目の方法は、ユーザーが自己挿入文字をタイプしたとき、Emacsがマウスポインターを非表示にして、マウスポインターを動かしたときに、ポインターがEmacsフレームの内側にあるときは、再びポインターを表示する方法です。この機能を無効にするには、変数make-pointer-invisiblenilにセットしてください。ディスプレーのカスタマイズを参照してください。

2番目の方法はMouse Avoidance(マウス回避)モードを使って、マウスポインターをポイントから遠ざける方法です。Mouse Avoidanceモードを使うには、変数mouse-avoidance-modeをカスタマイズします。この変数にさまざまな値をセットすることにより、マウスを遠ざけるいくつかの方法を選択できます。

banish

キーが押されたらポインターをフレームの隅に移動します。ポインターをどこに遠ざけるかは、変数mouse-avoidance-banish-positionでカスタマイズできます。

exile

カーソルがポインターに近づきすぎたときだけポインターを遠ざけて、カーソルが離れたらポインターを元に戻します。

jump

カーソルがポインターに近づきすぎたら、ランダムな方向と距離にポインターを移動します。

animate

jumpと同様ですが、移動モーションをアニメ化します。

cat-and-mouse

animateと同じです。

proteus

animateと同様ですが、マウスポインターの外見も変更します。

コマンドM-x mouse-avoidance-modeを使って、このモードを有効にすることもできます。Mouse Avoidanceモードがマウスを移動したときは、常にそのフレームを前に表示します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

21.21 非ウィンドウ端末

テキスト端末では、Emacsは1度に1つのEmacsフレームしか表示できません。それでも複数のEmacsフレームを作成して、それらを切り替えることができます。これらの端末でフレームを切り替えるのは、異なるウィンドウの設定を切り替えるのによく似ています。

C-x 5 2を使うと新しいフレームを作成してそれに切り替えます。C-x 5 oを使うと既存のフレームを巡回します。C-x 5 0を使うと、カレントフレームを削除します。

各フレームには区別するための番号があります。端末が1度に1つのフレームしか表示できない場合、選択されたフレームの番号nが、モードラインの先頭に近い位置に、‘Fn’という形式で表示されます。

Fn’は、フレームの実際の初期名称です。フレームにもっと意味のある名前を与えて、その名前でフレームを選択できます。コマンドM-x set-frame-name RET name RETを使うと、選択されたフレームに新しい名前を指定し、M-x select-frame-by-name RET name RETを使うとその名前に一致するフレームを選択します。指定した名前は、そのフレームが選択されたときに、モードラインに表示されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

21.22 テキスト端末でのマウスの使用

端末ウィンドウでのマウスクリックをサポートするテキスト端末がいくつかあります。

xtermと互換性のある端末エミュレーターでは、M-x xterm-mouse-modeを使って、Emacsに簡単なマウスの使用 — 基本的には修飾なしのシングルクリックだけがサポートされます — を制御させることができます。より新しいバージョンのxtermは、マウストラッキングもサポートします。そのようなクリックにたいする通常のxtermのマウス機能は、マウスボタンを押すときにSHIFTキーを押すことにより、利用できます。Xterm Mouseモードはグローバルマイナーモードです(マイナーモードを参照してください)。コマンドを繰り返すと、このモードを再びオフにします。

GNU/Linuxのコンソールでは、M-x gpm-mouse-modeを使ってマウスサポートを有効にできます。これが機能するためにはgpmサーバーがインストールされていて、システムで実行されていなければなりません。このモードが有効な場合、EmacsとGPMを使用する他のプログラムとの間で、マウスによるテキスト転送ができないことに注意してください。これはGPMとLinux kernelによる制限です。

MS-DOSでのマウスサポートに関する情報は、MS-DOSでびマウスの使用方法を参照してください 。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

22 国際化文字セットのサポート

Emacsは、広範囲な国際化文字セット(international character sets)をサポートします。それらには、ラテンアルファベットの変種であるEuropeanとVietnamese、同様にArabic scripts、(Bengali、Hindi、Thaiのような言語にたいする)Brahmic scripts 、Cyrillic、Ethiopic、Georgian、Greek、(ChineseとJapaneseにたいする)Han、(Koreanにたいする)Hangul、Hebrew、IPAが含まれます。Emacsは他の国際化されたソフトウェアー(ワープロやメーラー)などで使われる、それらの文字にたいするさまざまなエンコーディングもサポートします。

Emacsは関連するアクティビティーのすべてをサポートすることにより、国際化文字セットの編集を可能にします:

このチャプターの残りの部分では、これらの問題について詳細を説明します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

22.1 国際化文字セットのイントロダクション

国際化文字セットとスクリプトのユーザーは、ファイルを保存するために、多少の差はありますが、標準化された多くのコーディングシステムを確立しています。これらのコーディングシステムは通常はマルチバイト(multibyte)で、これは1つの非ASCII文字を表すのに、2つ以上のバイトシーケンスを対応させることを意味します。

Emacsは、内部的にはUnicode標準のスーパーセットである、マルチバイト文字エンコーディングを使用します。この内部的なエンコーディングは、ほとんどすべての既知のスクリプトを、1つのバッファーまたは文字列に混成することを可能にします。Emacsはファイルを読み書きしたり、サブプロセスとデータをやりとりするとき、このマルチバイト文字エンコーディングと、他のさまざまなコーディングシステムをコード変換します。

コマンドC-h h (view-hello-file)は、ファイルetc/HELLOを表示します。これは、多くの異なる言語で、“hello”をどのように記述するかを、さまざまな文字で例示するファイルです。もしもある文字が端末で表示できないときは、それらの文字は‘?’か、中抜きのボックスで表示されます。

これらの文字セットを使う国のキーボードでも、一般的にはすべての文字に対応するキーはもっていません。キーボードがサポートしない文字は、C-x 8 RET (insert-char)を使って挿入することができます。テキストの挿入を参照してください。一般的な文字のいくつかは略記が利用できます。たとえばC-x 8 [とタイプ(Electric Quoteモードでは、通常は単に`とタイプ)することにより、left single quotation mark を挿入できます。Emacsはさまざまなインプットメソッド(IM: input methods)をサポートします。これはあるスクリプトの文字をタイプするのを簡単にするもので、通常1つのスクリプトまたは言語に1つです。インプットメソッドを参照してください。

プレフィクスキーC-x RETは、マルチバイト文字、コーディングシステム、インプットメソッドに属するコマンドにたいして使用されます。

コマンドC-x = (what-cursor-position)は、ポイント位置にある文字の情報を表示します。文字の位置に加えて、カーソル位置の情報で説明したように、このコマンドはその文字がどのようにエンコードされているかを表示します。たとえば、このコマンドは文字‘c’に大して、以下のような行をエコーエリアに表示します:

Char: c (99, #o143, #x63) point=28062 of 36168 (78%) column=53

Char:’の後ろの4つの値は、ポイント位置の文字を説明するためのもので、1つ目はその文字自身、その後ろに文字コードを10進(decimal)、8進(octal)、16進(hex)で表示します。非ASCIIのマルチバイト文字の場合、バッファーのコーディングシステムでその文字を安全に1バイトでエンコードできる場合は、‘file’とそのバッファーのコーディングシステムで表した文字コードの16進表記が続きます。その文字のエンコーディングが1バイトより長い場合、Emacsは‘file ...’と表示します。

Emacsがrawバイト(raw bytes)に遭遇する場合がまれにあります。rawバイトとは、既知の非ASCII文字エンコーディングとしてEmacsが解釈できない、値128(8進0200)から255(8進0377)の範囲の単一バイトのことです。そのようなrawバイトは、特別な文字セットeight-bitに属すものとして扱われます。Emacsはそれらをエスケープされた8進コードで表示します(これはカスタマイズ可能。ディスプレーのカスタマイズを参照されたい)。この場合、C-x =は‘file’のかわりに‘raw-byte’を示します。加えて、C-x =はそれらがあたかもEmacsが範囲#x0080..#x00FFのユニコード文字から区別するためにマップする範囲#x3FFF80..#x3FFFFFにあるかのようにrawバイトの文字コードを表示します。

プレフィクス引数を指定した(C-u C-x =)では、その文字の詳細な情報を表示するコマンドdescribe-charを追加で呼び出します:

以下は例です(マニュアルに収まるように折り返している行もあります):

             position: 1 of 1 (0%), column: 0
            character: ê (displayed as ê) (codepoint 234, #o352, #xea)
    preferred charset: unicode (Unicode (ISO10646))
code point in charset: 0xEA
               script: latin
               syntax: w        which means: word
             category: .:Base, L:Left-to-right (strong), c:Chinese,
                       j:Japanese, l:Latin, v:Viet
             to input: type "C-x 8 RET ea" or
                       "C-x 8 RET LATIN SMALL LETTER E WITH CIRCUMFLEX"
          buffer code: #xC3 #xAA
            file code: #xC3 #xAA (encoded by coding system utf-8-unix)
              display: by this font (glyph code)
    xft:-PfEd-DejaVu Sans Mono-normal-normal-
        normal-*-15-*-*-*-m-0-iso10646-1 (#xAC)

Character code properties: customize what to show
  name: LATIN SMALL LETTER E WITH CIRCUMFLEX
  old-name: LATIN SMALL LETTER E CIRCUMFLEX
  general-category: Ll (Letter, Lowercase)
  decomposition: (101 770) ('e' '^')

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

22.2 言語環境

サポートされているすべての文字セットは、マルチバイト文字が利用可能なときは、Emacsバッファーの中でサポートされます。その文字を表示するために、特定の言語を選択する必要はありません。しかしさまざまなデフォルト値をセットするために、言語環境(language environment)を選択することは重要です。大まかに言うと、言語環境とは、言語の選択というよりも、好ましいスクリプト選択の提示です。

言語環境は、テキストを読み込むとき、それを認識するコーディングシステムを制御します(コーディングシステムの認識を参照してください)。これはファイル、到着メール、その他のEmacsで読む任意のテキストに適用されます。これは新しくファイルを作成するときに使う、デフォルトのコーディングシステムも指定します。それぞれの言語環境は、デフォルトのインプットメソッドも指定します。

言語環境を選択するには、current-language-environmentをカスタマイズするか、コマンドM-x set-language-environmentを使います。このコマンドを使うとき、どのバッファーがカレントかで違いは生じません。なぜなら、その効果はEmacsセッションにグローバルで適用されるからです。サポートされている言語環境の一覧は、変数language-info-alistを参照してください。コマンドC-h L lang-env RET (describe-language-environment)を使うと、言語環境lang-envの、より詳細な情報が参照できます。サポートされる言語環境には、以下が含まれます:

ASCII、Arabic、 Belarusian、Bengali、 Brazilian Portuguese、Bulgarian、 Burmese、Cham、 Chinese-BIG5、Chinese-CNS、Chinese-EUC-TW、Chinese-GB、Chinese-GB18030、Chinese-GBK、 Croatian、Cyrillic-ALT、Cyrillic-ISO、Cyrillic-KOI8、 Czech、Devanagari、 Dutch、English、 Esperanto、Ethiopic、 French、Georgian、 German、Greek、Gujarati、 Hebrew、IPA、 Italian、 Japanese、Kannada、 Khmer、Korean、Lao、 Latin-1、Latin-2、Latin-3、Latin-4、Latin-5、Latin-6、Latin-7、Latin-8、Latin-9、 Latvian、Lithuanian、 Malayalam、Oriya、 Persian、Polish、 Punjabi、Romanian、 Russian、Sinhala、 Slovak、Slovenian、Spanish、 Swedish、TaiViet、 Tajik、Tamil、 Telugu、Thai、 Tibetan、Turkish、 UTF-8、Ukrainian、 Vietnamese、Welsh、 Windows-1255

グラフィカルなディスプレーでは、使用されている言語環境で使われているスクリプトを表示するために、適切なフォントをもっている必要があります。フォントのセットアップについては、フォントセットを参照してください。

環境変数LC_ALLLC_CTYPELANGをセットすることにより、使用する文字セットのlocaleを指定するオペレーティングシステムがいくつかあります(もしこれらの1つ以上がセットされている場合、特に1番目のものが空でない場合、それは正にこの目的のためにlocaleを指定しています)。起動の間、Emacsは文字セットのlocale名を、システムのlocaleエイリアステーブルから探して、その正規化された名前(canonical name)を、変数locale-charset-language-namesおよびlocale-language-names(前者は後者をオーバーライドします)のエントリーにたいしてマッチし、マッチが見つかったら対応する言語環境を選択します。これはディスプレーテーブルと端末のコーディングシステム、localeコーディングシステム、localeに必要な好ましいコーディングシステム — そして最後に重要なのは — Emacsがキーボードから送られた非ASCII文字をデコードする方法を調整します。

Emacs実行中に、(M-x setenvを使って)環境変数LC_ALLLC_CTYPELANGを変更した場合、新しいlocaleにたいする言語環境を再調整するために、後でset-locale-environmentコマンドを呼び出したいと思うかもしれません。

set-locale-environment関数は、通常はシステムメッセージをデコードするために、言語環境により確立された優先コーディングシステムを使用します。しかしlocaleが変数locale-preferred-coding-systemsのエントリーにマッチした場合には、Emacsはかわりに対応するコーディングシステムを使用します。たとえばlocaleの‘ja_JP.PCK’がlocale-preferred-coding-systemsjapanese-shift-jisにマッチすれば、通常ならutf-8が使われるような場合でも、Emacsはエンコーディングにそのコーディングシステムを使用します。

initファイルで明示的にコマンドset-language-environmentを使うか、current-language-environmentをカスタマイズすることにより、起動時に選択された言語環境をオーバーライドできます。

特定の言語環境lang-envの効果に関する情報を表示するには、コマンドC-h L lang-env RET (describe-language-environment)を使います。これはこの言語環境に有効な言語、文字セットのリスト、コーディングシステム、インプットメソッドを表示します。これはこの言語環境で使われるスクリプトを例示する、サンプルテキストも表示します。lang-envに空の入力を与えると、このコマンドは選択されている言語環境を説明します。

ノーマルフックset-language-environment-hookにより、任意の言語環境をカスタマイズできます。コマンドset-language-environmentは、新しい言語環境をセットアップした後に、このフックを実行します。フック関数は変数current-language-environmentをチェックすることにより、特定の言語環境をテストできます。このフックはキーボード入力にたいするコーディングシステムや端末出力、デフォルトのインプットメソッドなど、特定の言語環境にたいして非デフォルトのセッティングが必要な場所に設定します

新しい言語環境のセットアップを開始する前に、set-language-environmentはまずフックexit-language-environment-hookを実行します。このフックはset-language-environment-hookによるカスタマイズを取り消すのに便利です。たとえば、特定の言語環境にたいしてset-language-environment-hookを使って特別なキーバインドをセットアップした場合は、exit-language-environment-hookで通常のキーバインドに復元するべきです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

22.3 インプットメソッド

インプットメソッド(IM: input method)は、対話的入力のために具体的にデザインされた、一種の文字変換です。Emacsでは、各言語はそれ自身のインプットメソッドをもっています。同じ文字を使う複数の言語で、1つのインプットメソッドを共有できます。複数のインプットメソッドをサポートする言語もあります。

一番簡単な種類のインプットメソッドは、ASCII文字を他のアルファベットにマッピングすることにより機能します。これによりASCIIのかわりに他のアルファベットを使うことが可能になります。GreekとRussianのインプットメソッドはこの方式で機能します。

より強力なテクニックがコンポジション(composition: 複合)です。これは文字のシーケンスを1つの文字に変換します。Europeanのインプットメソッドの多くが、アクセント文字を後(または前)に続けた文字シーケンスから、1つの非ASCII文字を生成するためにコンポジションを使います。たとえば、インプットメソッドのいくつかは、o ^のシーケンスを1つのアクセントつき文字に変換します。これらのインプットメソッドは、それら自身では特別なコマンドをもちません。これらすべてが行うのは、文字シーケンスを複合して、プリント文字にすることです。

音節記号(syllabic scripts)のためのインプットメソッドは通常、マッピングと、それに続けてコンポジションを使います。ThaiとKoreanのためのインプットメソッドは、この方式で機能します。最初に複数の文字が、特定の音や口調のためのシンボルにマッピングされます。次にこれらシンボルのシーケンスから音節全体を作り、それを1つの音節記号にマッピングします。

ChineseとJapaneseには、さらに複雑な方式が必要です。Chineseのインプットメソッドでは、最初にChineseの単語の音声スペルを入力するか(特にインプットメソッドchinese-py)、文字の一部をシーケンスとして入力します(インプットメソッドchinese-4cornerchinese-swなど)。通常1つの入力シーケンスは、多くのChinese文字に対応します。C-fC-bC-nC-p(または矢印キー)、またはこの状況では特別な意味をもつ数字を指定することにより、意図するものを選択します。

文字の候補は、概念的には複数の行にアレンジされ、各行は10個の候補をもちます。通常Emacsは1度に1行をエコーエリアに表示します。行頭に(i/j)が表示され、これはトータルj行中、i番目の行かを示します。C-nまたはC-pをタイプすると、次または前の行を表示します。

C-fまたはC-bをタイプすると、カレント行の候補の間を前方または後方に移動します。これを行うとき、Emacsはカレント候補を特別な色でハイライトします。C-SPCとタイプすると、カレント候補を選択して、それを入力に使用します。各行の候補には番号も付けられています。この番号は各候補の前に表示されます。番号をタイプすると、カレント行の番号に関連付けられた候補を選択し、それを入力に使用します。

これらChineseのインプットメソッドでは、TABはすべての文字候補をバッファーに表示します。候補の1つをmouse-2でクリックすることにより選択します。C-fC-bC-nC-p、および数字キーは通常どおり機能しますが、それらはエコーエリアではなく、文字候補を表示したバッファーをハイライトします。

かわりにpīnyīn変換メソッドに応じた文字を入力するには、入力メソッドchinese-sishengを使用します。これは合成ベースのメソッドであり、pi1が‘’になります。

Japaneseのインプットメソッドでは、最初に音声スペルを使って単語全体を入力します。つぎに単語がバッファーに入った後で、より大きな辞書を使ってEmacsがそれを1つ以上の文字に変換します。1つの音声スペルは、いくつかのJapaneseの単語に対応します。これらの1つを選択するには、C-nまたはC-pを使って候補を巡回します。

インプットメソッドをオフにして、入力した文字シーケンスが複合されないようにするのが便利なときがあります。たとえばインプットメソッドlatin-1-postfixでは、シーケンスo ^は、アクセントつきの‘o’に複合されます。これらの文字を個別に入力したいときはどうすればよいでしょう?

1つは、アクセントを2度タイプする方法です。これは文字とアクセントを個別に入力するための特別な機能です。たとえばo ^ ^により、2つの文字‘o^’が得られます。他の方法としてはoの後に別の文字 — 複合されない何か別の文字 — を入力してすぐにそれを削除する方法です。たとえばo o DEL ^とタイプすることにより、‘o’と‘^’を個別に得ることができます。もう1つは、より一般的ですがタイプが容易とは言えない方法で、2つの文字が欠号されるのを防ぐために、文字の間でC-\\ C-\\を使用する方法です。これは、コマンドC-\\(toggle-input-method)を2回使用しています。 インプットメソッドの選択を参照してください。

C-\ C-\は、インクリメンタル検索の中で使うのが特に便利です。なぜならこれは複合される文字が入力されるのを待つのを止めて、それまでに入力した文字で検索を開始するからです。

現在のインプットメソッドを使って、ポイント位置の後ろの文字を入力する方法を探すには、C-u C-x =をタイプします。カーソル位置の情報を参照してください。

変数input-method-highlight-flagおよびinput-method-verbose-flagは、インプットメソッドで何が起きているかを告げる方法を制御します。input-method-highlight-flagが非nilの場合、部分的な入力シーケンスがバッファーでハイライトされます(この機能を無効にしているインプットメソッドもあります)。input-method-verbose-flagが非nilの場合、次にタイプできる文字の一覧をエコーエリア(ただしミニバッファーにいるときは除く)に表示します。

フック変数quail-activate-hookに関数で変更を行うことにより、入力メソッドが機能する方法を変更できます。フックを参照してください。たとえば、関数quail-translation-keymapによりリターンされるキーマップ内のキーバインディングを、define-keyを使用して、定義することによりその入力メソッドのいくつかのキーを再定義できます。initファイル内でのキーのリバインドを参照してください。

何らかの理由でバッファーのテキストが読み取り専用の際には、入力メソッドは抑制されます。これはread-only-modeimage-modeのようなバッファーテキストやその一部が読み取り専用なモードにおいて、たとえば入力メソッドがアクティブでも単一文字のキーバインディングを機能させるためです。

キーボードにない文字をタイプする他の方法は、C-x 8 RET (insert-char)を使って、Unicode名またはコードポイント(code-point)にもとづいて1つの文字を挿入する方法です。テキストの挿入を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

22.4 インプットメソッドの選択

C-\

選択されたインプットメソッドを有効または無効にします(toggle-input-method)。

C-x RET C-\ method RET

カレントバッファーにたいして、新しいインプットメソッドを選択します(set-input-method)。

C-h I method RET
C-h C-\ method RET

インプットメソッドmethodの説明を表示します(describe-input-method)。デフォルトでは、(もしあれば)カレントのインプットメソッドを説明します。これは特定のインプットメソッドの使い方に関する、すべての詳細説明を表示します。

M-x list-input-methods

サポートされている、すべてのインプットメソッドのリストを表示します。

カレントバッファーにたいするインプットメソッドを選択するには、C-x RET C-\ (set-input-method)を使います。このコマンドはミニバッファーからインプットメソッドの名前を読み取ります。この名前は通常、それが使われることを意図した言語環境で開始されます。変数current-input-methodは選択されたインプットメソッドを記録します。

インプットメソッドは非ASCII文字を表すために、さまざまなASCII文字のシーケンスを使います。インプットメソッドを一時的にオフにできると便利なときもあります。そのようなときはC-\ (toggle-input-method)をタイプします。インプットメソッドを再度有効にするには、もう1度C-\をタイプします。

C-\をタイプしたときに、まだインプットメソッドが選択されていない場合、インプットメソッドを指定するように求めます。これはインプットメソッドを指定するC-x RET C-\を使ったときと同じ効果です。

C-u C-\のようにプレフィクス引数を指定した場合、toggle-input-methodは常にインプットメソッドを尋ねます。このときデフォルトとして提案されるのは、もっとも最近選択されたインプットメソッドです。

言語環境の選択により、さまざまなバッファーで使用するデフォルトのインプットメソッドが指定されます。デフォルトのインプットメソッドがある場合、C-\とタイプしてカレントバッファーでそれを選択できます。変数default-input-methodはデフォルトのインプットメソッドを指定します(nilは、それが存在しないことを意味します)。

複数の異なるインプットメソッドをサポートする言語環境では、set-language-environmentで選択されるデフォルトとは違うインプットメソッドを使いたいときもあるでしょう。set-language-environment-hookを使って、特定の言語環境にたいして異なるデフォルトのインプットメソッドを使うようEmacsに指示できます(set-language-environment-hookを参照してください)。たとえば:

(defun my-chinese-setup ()
  "Set up my private Chinese environment."
  (if (equal current-language-environment "Chinese-GB")
      (setq default-input-method "chinese-tonepy")))
(add-hook 'set-language-environment-hook 'my-chinese-setup)

これは言語環境をChinese-GB languageに選択したときは、常にデフォルトのインプットメソッドをchinese-tonepyにセットします。

特定のインプットメソッドを自動的にアクティブにするようEmacsに指示できます。たとえば:

(add-hook 'text-mode-hook
  (lambda () (set-input-method "german-prefix")))

これはTextモードで自動的にインプットメソッドgerman-prefixをアクティブにします。

英文字スクリプトのためのいくつかのインプットメソッドは、それらのスクリプトで一般的に使用されているさまざまなキーボードエミュレートするために、(実質的には)他のアルファベットに再マッピングすることにより機能します。この再マッピングがどのように正しく行われるかは、実際のキーボードレイアウトに依存します。キーボードがどのレイアウトなのかを指定するには、コマンドM-x quail-set-keyboard-layoutを使います。

コマンドM-x quail-show-keyを使って、ポイントの後ろにある文字を入力するために、選択されたキーボードレイアウトの、どのキー(またはキーシーケンス)をタイプすればよいのか表示できます。コマンドC-u C-x =もこの情報と、それに加えてその文字に関する他の情報を表示します。

M-x list-input-methodsは、サポートされているすべてのインプットメソッドを一覧します。この一覧は各インプットメソッドの情報と、モードラインに表示される文字列を表示します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

22.5 コーディングシステム

さまざまな言語のユーザーは、多少の差はあれ、それらを表示するための標準のコーディングシステムを確立しています。Emacsはこれらのコーディングシステムを、内部的に使用しません。データを読み込むときは、さまざまなコーディングシステムからEmacs独自のコーディングシステムに変換し、データを書き込むときには、内部コーディングシステムから他のコーディングシステムに変換します。ファイルの読み書き、端末とのやりとり、サブプロセスとのデータ交換において、変換が可能です。

Emacsは各コーディングシステムに名前を割り当てます。ほとんどのコーディングシステムは、1つの言語で使用され、コーディングシステムの名前は、言語の名前で始まります。複数の言語で使用されるコーディングシステムもあります。これらのコーディングシステムの名前は、通常‘iso’で始まります。no-conversionraw-textemacs-internalのような特別なコーディングシステムもあります。

まとめてコードページ(codepages)として知られる、特別なクラスのコーディングシステムは、MS-WindowsおよびMS-DOSのソフトウェアーによりエンコードされたテキストをサポートするためにデザインされています。これらのコーディングシステムの名前はcpnnnnという形式で、nnnnは3桁から4桁のコードページ番号です。これらのコーディングもほかのコーディングシステムと同様に使うことができます。たとえばコードページ850でエンコードされたファイルをvisitするには、C-x RET c cp850 RET C-x C-f filename RETとタイプします。

ASCII文字のさまざまな表現の変換に加えて、コーディングシステムは行末変換(end-of-line conversion)も行います。Emacsは、ファイル内の行の区切り方として、3つの異なる変換を扱います。つまり、改行(Unix)、復帰改行(DOS)、復帰(Mac)です。

C-h C coding RET

コーディングシステムcodingの説明を表示します(describe-coding-system)。

C-h C RET

カレントで使用しているコーディングシステムcodingの説明を表示します(describe-coding-system)。

M-x list-coding-systems

サポートされているすべてのコーディングシステムのリストを表示します。

コマンドC-h C (describe-coding-system)は、特定のコーディングシステムについて、それらのコーディングシステムで規定されている、行末変換も含めた情報を表示します。引数にコーディングシステム名を指定できます。引数が空のときには、さまざまな目的のために選択されている、現在のコーディングシステムの、カレントバッファにたいするものとデフォルトの両方について表示するとともに、コーディングシステムを認識するための優先順位表を表示します(コーディングシステムの認識を参照してください)。

サポートされているすべてのコーディングシステムのリストを表示するには、M-x list-coding-systemsとタイプします。表示されるリストは、モードラインに表示される文字も含めて、各コーディングシステムの情報を提供します。

リストに表示される各コーディングシステム — ただし何の変換も行わないno-conversionは除く — は、プリントする文字をどのように変換するか、しないかを指定しますが、改行変換については、各ファイル内容にもどづいて決定するので選択をしません。たとえばファイルが行区切りに改行復帰文字を使っているように見えるときは、DOSの改行変換を使います。

リストされた各コーディングシステムは、改行変換を厳密に指定する3つの変種があります。

…-unix

何の改行変換も行いません。ファイルは行区切りに改行文字を使っていると仮定します(これは通常Unix、GNUシステム、macOSで使われている慣習です)。

…-dos

ファイルが行区切りに改行復帰文字を使っていると仮定し、適切な変換を行います(これは通常Microsoftシステムで使われている慣習です8)。

…-mac

ファイルが行区切りに復帰文字を使っていると仮定し、適切な変換を行います(これはクラシックなMac OSで使われていた慣習です)。

これらのコーディングシステムの変種は、それらが完全に予測可能なため、簡略化のためにlist-coding-systemsの表示からは省略されています。たとえばコーディングシステムiso-latin-1iso-latin-1-unixiso-latin-1-dosiso-latin-1-macという変種をもちます。

コーディングシステムunixdosmacは、それぞれundecided-unixundecided-dosundecided-macの別名です。これらのコーディングシステムは改行変換だけを指定し、文字コード変換はテキスト字体から推論されるよう残します

コーディングシステムraw-textは、主にASCIIテキストのファイルに適していますが、ファイルには、非ASCII文字の符号を意味しない127を越えるバイト値が含まれるかもしれません。raw-textでは、 Emacsはそれらのバイト値を変更せずにコピーし、カレントバッファーのenable-multibyte-charactersnilにセットして、それらは適切に解釈されるます。raw-textは、出会ったデータに基づく通常の方法で行末変換を処理し、使用する行末変換を指定する変種も3つもちます。

対照的に、コーディングシステムno-conversionは、いかなる文字コード変換 — 非ASCIIバイト値や行末にたいしても — を行いません。これは、バイナリーファイル、tarファイル、 そのまま処理する必要があるその他のファイルを読み書きするのに便利です。これもenable-multibyte-charactersnilにセットします。

いかなる種類の変換もしないでファイルを編集するもっとも簡単な方法は、M-x find-file-literallyコマンドを使うことです。このコマンドは、no-conversionを使い、ファイルを見る前にファイルの内容を変換するかもしれない、Emacsのその他の機能を抑制します。ファイルのvisit(訪問)を参照してください。

コーディングシステムemacs-internal(またはutf-8-emacs)は、Emacs内部エンコーディングのままで格納された、非ASCII文字を含むファイルであることを意味します。これは出会ったデータに基づいて行末変換を処理し、行末変換の種類を指定する通常の3つの変種を持ちます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

22.6 コーディングシステムの認識

Emacsはテキストを読み込むとき、どのコーディングシステムが使われているか認識しようと試みます。これはファイルの読み込み、サブプロセスからの出力、X選択からのテキストなど、さまざまです。Emacsは大抵の場合 — 自分の好みを1度指定しておけば、自動的に正しいコーディングシステムを選択できます。

データにどのバイトシーケンスが出現するかにより、認識あるいは識別されるコーディングシステムもいくつかあります。しかし識別される可能性さえないコーディングシステムもあります。たとえばLatin-1とLatin-2を識別する方法はありません。これらは同じバイト値を異なる意味で使用します。

Emacsはこのようなシチュエーションを、コーディングシステムの優先リストにより処理します。Emacsがファイルを読み込むときは常に、それに使用するコーディングシステムを指定しなければ、Emacsはデータを各コーディングシステムに照らしてチェックし、それを優先順位の上から順に、データに適合するコーディングシステムが見つかるまで続けます。そして、そのコーディングシステムで、ファイル内容が表示できると仮定して変換を行います。

コーディングシステムの優先リストは、選択されている言語環境に依存します(言語環境を参照してください)。たとえばFrenchを使うのなら、おそらくEmacsにはLatin-2よりLatin-1を選んでほしいでしょう。Czechを使うなら、おそらくLatin-2のほうがよいでしょう。これが言語環境を指定する理由の1つです。

しかし、コマンドM-x prefer-coding-systemを使って、優先リストの詳細を変更できます。このコマンドはミニバッファーからコーディングシステムの名前を読み取り、それを優先リストの先頭に追加して、他のすべてのものより優先するようにします。このコマンドを数回使うと、使用するごとに優先リストの先頭に1つの要素が追加されます。

iso-8859-1-dosのような、行末変換を指定したコーディングシステムを使うと、iso-8859-1を優先して認識を試み、その際DOSの行末変換を使うことをEmacsに指示することになります。

ファイルにたいして使用するコーディングシステムをファイル名が示していることがあります。変数file-coding-system-alistは、この対応関係を指定します。このリストに要素を追加する特別な関数は、modify-coding-system-alistです。たとえば、すべての‘.txt’の読み書きに、コーディングシステムchinese-iso-8bitを使用したいなら、つぎのLisp式を実行します:

(modify-coding-system-alist 'file "\\.txt\\'" 'chinese-iso-8bit)

1つ目の引数はfile、2番目の引数はこれを適用するファイルを決定する正規表現、3番目の引数は、これらのファイルに対して使用するコーディングシステムです。

Emacsはファイルの内容にもとづいて、使用する行末変換の種類を認識します。復帰のみ、あるいは復帰改行のシーケンスだけであれば、対応する行末変換を選択します。変数inhibit-eol-conversionを非nilにセットすることにより、行末変換の自動的な使用を抑止できます。これを行うとDOSスタイルのファイルは、バッファー内に可視の‘^M’という文字を表示します。モードラインの左端に目立たないように表示される改行タイプ指示‘(DOS)’より、こちらのほうを好む人もいます。

デフォルトでは、コーディングシステムの自動検知はエスケープシーケンスを検出します。文字シーケンスがエスケープ文字で開始されていて、そのシーケンスが有効なISO-2022であれば、それはEmacsにファイルをデコードするエンコーディングに、ISO-2022を使うことを告げています。

しかし、ファイルの中のエスケープシーケンスを、そのまま読み取りたい場合もあるでしょう。そのような場合、変数inhibit-iso-escape-detectionを非nilにセットします。これにより、コード検知はエスケープシーケンスを無視するようになり、ISO-2022エンコーディングは使用されません。この結果として、すべてのエスケープシーケンスがバッファー内で可視になります。

変数inhibit-iso-escape-detectionのデフォルト値はnilです。わたしたちは特別な操作を除いて、これを変更しないことを推奨します。なぜなら、EmacsディストリビューションのEmacs Lispソースファイルのいくつかは、コーディングシステムiso-2022-7bitでエンコードされた非ASCII文字を含んでおり、エスケープシーケンス検知を抑止しているときにこれらのファイルをvisitすると、正しくデコードされないからです。

変数auto-coding-alistおよびauto-coding-regexp-alistは、それぞれファイル名に含まれる特定パターン、およびファイルに含まれる特定パターンによりコーディングシステムを指定する一番強い方法です。これらの変数は、ファイル自身に含まれる‘-*-coding:-*-’タグさえオーバーライドします。たとえば、Emacsはtarおよびアーカイブファイルに、auto-coding-alistを使います。これはアーカイブのメンバーファイルに‘-*-coding:-*-’が含まれている場合、Emacsが混乱してそれをファイル全体に適用するのを防ぎます。

コーディングシステムを指定する他の方法は、変数auto-coding-functionsを使う方法です。たとえばビルトインの1つauto-coding-functionsは、XMLファイルにたいするエンコーディングを検知します。前の2つと異なり、この変数は‘-*-coding:-*-’タグをオーバーライドしません.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

22.7 ファイルのコーディングシステムの指定

Emacsがファイルのエンコーディングを正しく認識しなかった場合、C-x RET r (revert-buffer-with-coding-system)で、正しいコーディングシステムでファイルを再読み込みできます。このコマンドは、使用するコーディングシステムの入力を求めます。ファイルのデコードに実際に使われているコーディングシステムを見るには、モードラインの左端の近くのコーディングシステムのニーモニック文字を見るか、C-h C (describe-coding-system)をタイプします。

特定のファイルのコーディングシステムを指定するのに、そのファイル自身の最初に‘-*--*-構成を指定するか、ファイルの最後にローカル変数リスト(ファイル内のローカル変数を参照してください)を使用できます。これはcodingという名前の“変数”に、値を定義することにより行われます。Emacsは実際には変数codingをもっていません。かわりに変数をセットして、特定のファイルにたいしてコーディングシステムを指定するのにこれを使います。たとえば‘-*-mode: C; coding: latin-1; -*-は、Latin-1コーディングシステム、同様にCモードを指定することを指示します。ファイルの中でコーディングを明示的に指定した場合、これはfile-coding-system-alistをオーバーライドします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

22.8 出力のためのコーディングシステムの選択

Emacsがバッファーにたいして1度コーディングシステムを選択すると、そのコーディングシステムは、buffer-file-coding-systemに記録されます。これによりsave-bufferwrite-regionなどの、バッファーからファイルに書き込む際のデフォルトに、それを使用するようになります。set-buffer-file-coding-systemを使って、バッファーのコーディングシステムとは異なるコーディングシステムで、ファイルに書き込むよう指定できます(ファイルのテキストにたいするコーディングシステムの指定を参照してください)。

Emacsがサポートする任意の文字を、任意のEmacsバッファーに挿入できますが、ほとんどのコーディングシステムは、それらの文字のサブセットしか処理することができません。したがって挿入した文字は、そのバッファーを保存するのに使われるコーディングシステムではエンコードできないかもしれません。たとえば、iso-8859-2でエンコードされたPolishのファイルをvisitして、それにRussianの単語を追加することは可能です。このバッファーを保存するとき、Emacsはbuffer-file-coding-systemの現在の値を使用できません。なぜなら追加された文字が、そのコーディングシステムではエンコードできないからです。

これが発生した場合、Emacsは(M-x prefer-coding-systemまたはM-x set-language-environmentによりセットされた)もっとも適したコーディングシステムを試します。そのコーディングシステムがバッファーのすべての文字をエンコードできたら、Emacsはそれを使って、その値をbuffer-file-coding-systemに格納します。そうでなければEmacsはバッファー内容をエンコードするのに適したコーディングシステムのリストを表示して、それらのコーディングシステムを1つ選ぶよう求めます。

メールメッセージに適さない文字を入力した場合、Emacsの振る舞いは若干異なります。この場合、追加でMIMEメッセージに推奨されたもっとも適したコーディングシステムかをチェックします。もしそうでなければ、この事実を知らせ、他のコーディングシステムの入力を求めます。これにより、メール受信者のメールソフトがデコードするのが困難なエンコードで、無意識にメッセージを送るようなことがなくなります(入力をもとめられたときに、適さないコーディングシステムを選ぶ、という選択肢もまだ残っています)。

メールメッセージを送信するとき、Emacsはメッセージテキストのエンコーディングに使うコーディングシステムを決定する、4つの異なる方法をもっています。最初にバッファー自身のbuffer-file-coding-systemが非nilなら、それを使います。次にsendmail-coding-systemが非nilなら、それを使います。3番目はdefault-sendmail-coding-systemの値を使います。上述した値のすべてがnilの場合、Emacsは、新たなファイルに使用されるデフォルトコーディングシステム(選択された言語環境により制御される、buffer-file-coding-systemの値)を使用して送信メールをエンコードします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

22.9 ファイルのテキストにたいするコーディングシステムの指定

Emacsがファイル内容にたいして、自動的に正しいコーディングシステムを選択しない場合、コーディングシステムを指定するために、以下のコマンドを使用できます。

C-x RET f coding RET

カレントバッファーのファイルを、コーディングシステムcodingを使って保存または再visitします(set-buffer-file-coding-system)。

C-x RET c coding RET

直後に続くコマンドのコーディングシステムにcodingを指定します(universal-coding-system-argument).

C-x RET r coding RET

コーディングシステムcodingを使って、現在のファイルを再visitします(revert-buffer-with-coding-system)。

M-x recode-region RET right RET wrong RET

コーディングシステムwrongを使ってデコードされたリージョンを、かわりにコーディングシステムrightを使ってデコードします。

コマンドC-x RET f (set-buffer-file-coding-system)は、カレントバッファーのファイルのコーディングシステムをセットします(たとえばファイルを保存またはリバートするときに使うコーディングシステム)。これはミニバッファーを使ってコーディングシステムを指定します。モードラインのコーディングシステムインディケーターをmouse-3でクリックしても、このコマンドを呼び出すことができます。

バッファーのすべての文字を処理できないコーディングシステムを指定した場合、Emacsは問題となる文字について警告します。そしてそのバッファーを保存するときのコーディングシステムの選択を求めます。

このコマンドを、カレントバッファーのエンコーディングの際の改行変換の指示に使うこともできます(end-of-line conversionを参照してください)。たとえばC-x RET f dos RETは、カレントバッファーを、DOSスタイル(行末が改行復帰文字)で保存します。

ファイルにたいしてコーディングシステムを指定する他の方法は、ファイルをvisitするときに指定する方法です。最初にコマンドC-x RET c (universal-coding-system-argument)を使います。このコマンドはミニバッファーを使ってコーディングシステムを読み取ります。ミニバッファーを抜けた後、その直後に続くコマンドに、指定したコーディングシステムが使用されます。

たとえば直後に続くコマンドがC-x C-fの場合、そのコーディングシステムを使ってファイルを読み込みます(そして後で保存するときのために、そのコーディングシステムを記録します)。直後に続くコマンドがC-x C-wの場合、そのコーディングシステムを使ってファイルを書き込みます。C-x RET fのかわりに、この方法で保存するときのコーディングシステムを指定した場合、バッファーにそのコーディングシステムが処理できない文字が含まれていても警告はされません。

C-x iC-x C-v、同様にC-x C-fの別ウィンドウ版C-x RET cなど、その他のファイルコマンドも指定されたコーディングシステムに影響されます。そしてM-x shell (Emacsからのシェルコマンドの実行を参照してください)を含む、サブプロセスを開始するコマンドも影響を受けます。直後に続くコマンドがコーディングシステムを使用しない場合、C-x RET cは何の影響も与えません。

変換をせずにファイルをvisitする簡単な方法は、M-x find-file-literallyコマンドです。ファイルのvisit(訪問)を参照してください。

変数buffer-file-coding-systemのデフォルト値は、新しいファイルを作成するときに選択されるコーディングシステムを指定します。これは新しいファイルを作成するときや、バッファーを作成してそれをファイルに保存するときに適用されます。言語環境の選択は、この変数を言語環境にたいして適した、デフォルトのコーディングシステムにセットします。

間違ったコーディングシステムでファイルをvisitしたときは、C-x RET r (revert-buffer-with-coding-system)でこれを正すことができます。これは指定したコーディングシステムを使って、現在のファイルを再visitします。

テキストの一部が、すでに間違ったコーディングシステムでバッファーに挿入されてしまった場合、M-x recode-regionを使ってデコードしなおすことができます。これは正しいコーディングシステムと、実際に使われた間違ったコーディングシステムの入力を求め、変換を行います。最初にリージョンを間違ったコーディングシステムでエンコードして、その後で正しいコーディングシステムでデコードします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

22.10 プロセス間通信にたいするコーディングシステム

このセクションでは、他のプロセスと通信するときに使うコーディングシステムを指定する方法を説明します。

C-x RET x coding RET

選択したテキストを、他のグラフィカルなアプリケーションと送受信するために、コーディングシステムcodingを使用します(set-selection-coding-system)。

C-x RET X coding RET

次回に選択するテキストを、他のグラフィカルなアプリケーションと送受信するために、コーディングシステムcodingを使用します(set-next-selection-coding-system)。

C-x RET p input-coding RET output-coding RET

カレントバッファーでのサブプロセスの入出力に、コーディングシステムinput-codingoutput-codingを使用します(set-buffer-process-coding-system)。

コマンドC-x RET x (set-selection-coding-system)は、選択したテキストを他のウィンドウアプリケーションに送信するとき、および他のアプリケーションで選択されたテキストを受信するときのコーディングシステムを指定します。このコマンドは、このコマンドを再度使って設定をオーバーライドするまで、以降のすべての選択に適用されます。コマンドC-x RET X (set-next-selection-coding-system)は、Emacsで次に選択されるテキスト、または次に読み取られるテキストのためのコーディングシステムを指定します。

変数x-select-request-typeは、Xウィンドウシステムからのリクエストにより、他のアプリケーションで選択されたテキストを受信する際のデータタイプを指定します。値がnil(デフォルト)の場合、EmacsはUTF8_STRINGCOMPOUND_TEXTの順に試み、さらにさまざまな経験則を用いて、2つの結果からより適したものを選択します。どちらも成功しなかったとき、EmacsはSTRINGにフォールバックします。x-select-request-typeの値が、COMPOUND_TEXTUTF8_STRINGSTRINGTEXTのうちのどれかであった場合、Emacsはリクエストされたタイプだけを使用します。値がこれらのシンボルのリストだった場合、Emacsはリストのリクエストタイプを順に試行し、どれかが成功するか、すべてを試みるまで続けます。

コマンドC-x RET p (set-buffer-process-coding-system)は、サブプロセスの入出力のコーディングシステムを指定します。このコマンドはカレントバッファーに適用されます。サブプロセスは通常、それぞれ自身のバッファーをもっています。したがってサブプロセスに対応するバッファーでこのコマンドを実行することにより、特定のサブプロセスとの送受信に使用するコーディングシステムを指定できます。

サブプロセスを開始するコマンドの直前にC-x RET c (universal-coding-system-argument)を使うことにより、そのプロセスとの通信で使用するコーディングシステムを指定することもできます。ファイルのテキストにたいするコーディングシステムの指定を参照してください。

デフォルトでは、プロセス通信の入出力は現在の言語環境に依存します。

変数locale-coding-systemは、システムのエラーメッセージや、format-time-stringのフォーマットやタイムスタンプなどの、システム文字列のエンコードおよびデコードで使用するコーディングシステムを指定します。このコーディングシステムは、Xウィンドウシステムでの非ASCIIキーボードによる入力のデコード、およびバッチモードのときに標準出力とエラーストリームに送るテキストのエンコードにも使用されます。通常は環境変数LC_ALLLC_CTYPELANGのうちの1つで指定される、背景にあるシステムのテキスト表現(text representation)と互換性のあるコーディングシステムを選択するべきです(上記の順番で最初の環境変数の値が空でない場合、それはテキスト表現を決定します)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

22.11 ファイル名にたいするコーディングシステム

C-x RET F coding RET

ファイル名のエンコードおよびデコードに、コーディングシステムcodingを使用します(set-file-name-coding-system)。

コマンドC-x RET F (set-file-name-coding-system)は、ファイルの名前に使用するコーディングシステムを指定します。ファイルの内容の読み込みと書き込みには影響がありません。

実際にこのコマンドが行うのは、変数file-name-coding-systemに値をセットすることだけです。変数にコーディングシステムの名前(Lispシンボルか文字列)をセットすると、Emacsはすべてのファイル操作において、ファイル名のエンコードにそのコーディングシステムを使用します。これによりファイル名に非ASCII文字 — または少なくとも指定されたコーディングシステムではエンコードできる非ASCII文字 — を使うことが可能になります。

file-name-coding-systemnilの場合、Emacsは言語環境により選択され、変数default-file-name-coding-systemに格納される、デフォルトのコーディングシステム(通常はUTF-8)を使用します。デフォルトの言語環境では、ファイル名中の非ASCII文字は特別にエンコードされません。これらは内部的なEmacs表現を使用してファイルシステム中に現れます。

Emacsが、MS-WindowsのNTファミリーの子孫(Windows 2000、XP、および以降すべてのバージョン)にあたるバージョンで実行されている場合、file-name-coding-systemの値は大部分が無視されます。これはEmacsがデフォルトでUnicodeファイル名を直接渡せるAPIを使用するからです。一方、Windows 9Xでは、ファイル名は変数file-name-coding-systemを使ってエンコードされており、この変数にはカレントのシステムロケールにたいして適切なコードページ(codepageを参照してください)がセットされている必要があります。変数w32-unicode-filenamesの値は、Emacsがファイル名を引数とするOS関数を呼び出すUnicode APIを使うかどうかを制御します。この変数はスタートアップコードにより、Windows 9Xではnil、新しいバージョンのMS-Windowsではtにセットされます。

警告: Emacsセッションの途中でfile-name-coding-system(または言語環境)を変更した場合、すでにvisitしているファイルの名前が、古いコーディングシステムを使えばエンコードできるが、新しいコーディングシステムではエンコードされない(または違ってエンコードされる)という問題が発生します。このようなバッファーをvisitしたファイル名で保存を試みると、間違ったファイル名で保存するか、エラーが発生します。このような問題が発生したときはC-x C-wを使って、そのバッファーにたいして新しいファイル名を指定してください。

ファイル名をエンコードするとき間違いが発生した場合、コマンドM-x recode-file-nameを使って、ファイル名のコーディングシステムを変更します。このコマンドは古いコーディングシステムでの既存のファイル名と、変換したいコーディングシステムの入力を求めます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

22.12 端末入出力にたいするコーディングシステム

C-x RET t coding RET

端末の出力に、コーディングシステムcodingを使用します(set-terminal-coding-system)。

C-x RET k coding RET

キーボード入力に、コーディングシステムcodingを使用します(set-keyboard-coding-system)。

コマンドC-x RET t (set-terminal-coding-system)は、端末出力のためのコーディングシステムを指定します。端末出力の文字コードを指定した場合、端末へのすべての文字出力は、指定したコーディングシステムに変換されます。

この機能は、特定の言語または文字セットをサポートするようビルドされた、特定の文字端末で有用です — たとえばEuropean端末は、ISO Latin文字セットの1つをサポートします。マルチバイトテキストを使う場合は、端末のコーディングシステムを指定する必要があります。これにより、Emacsは端末が実際にどの文字を処理できるのか知ることができます。

デフォルトでは、Emacsが端末タイプまたはlocale指定により、正しいコーディングシステムを推論できない場合、端末への出力は変換されません。

コマンドC-x RET k (set-keyboard-coding-system)、または変数keyboard-coding-systemは、キーボード入力のためのコーディングシステムを指定します。キーボード入力の文字コード変換は、非ASCIIのグラフィック文字を送信するキーをもつ端末で有用です — たとえば、いくつかの端末はISO Latin-1、またはそれのサブセットのためにデザインされています。

デフォルトでは、キーボード入力はシステムのlocale設定にもとづいて変換されます。端末がlocaleにより暗に指定されるエンコードを実際にはサポートしない場合(たとえば、M-iをタイプしたときに非ASCII文字が挿入されるのに気づいたとき)、エンコーディングをオフにするためにkeyboard-coding-systemnilにセットする必要があるでしょう。これは、

(set-keyboard-coding-system nil)

をinitファイルに記述することにより、行うことができます。

キーボード入力にたいするコーディングシステムを使用した変換と、インプットメソッドの使用は似通った点があります。これらは両方ともキーボード入力シーケンスを1つの文字に変換します。しかし、インプットメソッドは人間により対話的に使用されることが便利なようにデザインされており、通常はASCIIのプリント文字のシーケンスが、変換されたシーケンスになります。通常、コーディングシステムは非グラフィック文字のシーケンスを変換します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

22.13 フォントセット

フォントは通常、1つのアルファベットまたはスクリプトの形状を定義します。したがってEmacsがサポートするスクリプトの全範囲を表示するには、多くのフォントのコレクションが要求されます。Emacsではこのようなコレクションのことをフォントセット(fontset)と呼びます。フォントセットはフォント仕様のリストとして定義され、それぞれが文字コードのある範囲を処理し、指定されたフォントでカバーしない文字にたいしては他のフォントセットにフォールバックします。

それぞれのフォントセットは、フォントと同様に名前をもちます。しかしフォントはシステムに格納されていて、利用可能なフォント名はシステムで定義されていますが、フォントセットはEmacs自身で定義されます。1度フォントセットを定義したら、1つのフォントを使える場所ならどこでも、フォントセットを名前で指定して使用することができます。もちろんEmacsのフォントセットに使用できるのは、システムがサポートするフォントだけです。もしある文字がスクリーン上で空のボックスや16進コードで表示される場合、それは使用しているフォントセットがその文字にたいするフォントをもっていないことを意味します。このような場合や、文字は表示されるが、それが意図したものとは異なる場合、多分追加のフォントをインストールするか、システムにすでにインストールされた特定のフォントを使用するようにフォントセットを修正する必要があるでしょう(以下参照)。オペレーティングシステムにはインストールできるオプションのフォントがあるはずです。またはサポートされたスクリプトのほとんどのフォントを含むGNU Intlfontsパッケージをインストールすることもできます。9

Emacsは3つのフォントセットを自動的に作成します。それはスタンダードフォントセット(standard fontset)スタートアップフォントセット(startup fontset)デフォルトフォントセット(default fontset)の3つです。デフォルトフォントセットは、さまざまな非ASCII文字のフォントをもち、他の2つのフォントセットのデフォルトのフォールバック先です(デフォルトフォントをセットしたときは、デフォルトフォントセットではなくデフォルトフォント)。しかしこれはフォントのファミリー名を指定しないので、これを直接使うと、結果は少しランダムに思えるかもしれません。Emacsを‘-fn’オプションで実行することにより、特定のフォントセットを使用するように指示できます。たとえば、

emacs -fn fontset-standard

Font’でフォントセットを指定することもできます(Xのオプションとリソースを参照してください)。

使用するフォントセットが何も指定されていない場合、EmacsはASCIIフォントを使用し、そのフォントがカバーしない文字にたいするフォールバックに‘fontset-default’を使用します。名前とは裏腹にスタンダードフォントセットは、明示的に要求されたときだけ使用されます。

特定のフォントセットの情報を表示するためにはM-x describe-fontsetコマンドを使用します。このコマンドはフォントセットの名前(デフォルトはカレントフレームで使用されているフォントセット)を尋ねて文字のすべての部分範囲(subrange)と、フォントセット内でそれらに割り当てられたフォントを表示します。特定のフォントセットなしで開始されたセッション(通常発生し得る)でEmacsが使用するフォントを確認するには、プロンプトでfontset-default RETをタイプするか、あるいはカレントフレームで使用中のフォントを表示するために単にRETをタイプしてください。

フォントセットはすべての文字コードにたいしてフォントを指定する必要はありません。フォントセットが特定の文字にたいしてフォントを指定していない、または指定したフォントがシステムに存在しなければ、フォントセットは文字を正しく表示できません。この場合には、その文字にたいして16進コード、細いスペース、または空のボックスがかわりに表示されます(詳細はglyphless charactersを参照)。フォントセットが何らかの文字範囲を指定するかもしれないものの、その視覚的な外観が好みではないかもしれません。これが発生した場合にはフォントセットを修正したくなるかもしれません。これを行う方法についてはフォントセットの修正を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

22.14 フォントセットの定義

XでEmacsを実行している場合、Emacsはstandard-fontset-specの値により、スタンダードフォントセットを作成します。このフォントセットの名前は、

-*-fixed-medium-r-normal-*-16-*-*-*-*-*-fontset-standard

または単に短く‘fontset-standard’です。

GNUstep、およびmacOSではスタンダードフォントセットは、ns-standard-fontset-specの値を使って作成され、MS Windowsではw32-standard-fontset-specの値を使って作成されます。

スタンダードフォントセットのボールド、イタリック、ボールドイタリックなどの変種も自動的に作成されます。これらの変種の名前には‘medium’のかわりに‘bold’、または‘r’のかわりに‘i’、またはその両方が使われます。

Emacsは‘Font’リソース、または‘-fn’引数で指定した任意のデフォルトASCIIフォント、またはEmacsが起動時に見つけたデフォルトフォントにもとづいて、フォントセットを自動的に作成します。これがスタートアップフォントセット(startup fontset)で、名前はfontset-startupです。Emacsはcharset_registryフィールドを‘fontset’、charset_encodingフィールドを‘startup’で置き換えてフォントセットを生成して、その置き換えた文字列をフォントセットの指定に用います。

たとえば以下の形式でEmacsを起動した場合、

emacs -fn "*courier-medium-r-normal--14-140-*-iso8859-1"

Emacsは以下のフォントセットを生成して、それをXウィンドウの初期フレームに使用します:

-*-courier-medium-r-normal-*-14-140-*-*-*-*-fontset-startup

スタートアップフォントセットは、そのフォントでサポートされているすべての文字にたいして指定したフォントか、異なるregistryまたはencodingのフォントを使用し、それ以外の文字は‘fontset-default’にフォールバックして表示するでしょう。

Xリソースの‘Emacs.Font’では、フォントセット名を実際のフォント名のように指定できます。しかし‘Emacs*Font’のようなワイルドカードを使ったリソースにフォントセット名を指定しないように注意してください — ワイルドカードを使った指定は、メニューのようなフォントセットを処理できないものも含めて、 他のさまざまな目的にも適用されます。Xのオプションとリソースを参照してください。

Fontset-n’という名前のXリソースを使って、追加のフォントセットを指定できます。ここでnは0から始まる整数です。リソースの値はつぎのような形式です:

fontpattern, [charset:font]…

ここでfontpatternは、最後の2つのフィールドを除いて、標準のXフォント名の形式です(前のfontset-startupの例を参照)。最後の2つのフィールドは、‘fontset-alias’の形式をもつべきです。

すべてのフォントセットには2つの名前、長い名前と短い名前があります。長い名前はfontpatternです。短い名前は‘fontset-alias’で、これは長い名前の最後の2つのフィールドです(たとえば、スタートアップ時に自動的に作成されるフォントセットは‘fontset-startup’)。どちらの名前でもフォントセットを参照できます。

charset:font’という構成は、ある文字セットにたいして、(このフォントセットでは)どのフォントを使用するかを指定します。ここでcharsetは、文字セットの名前で、fontはその文字セットに使用するフォントです。1つのフォントセットの定義の中で、この構成を何度でも使用できます。

他の文字セットにたいしては、Emacsはfontpatternにもとづいて選択します。これは文字セットを記述する値で‘fontset-alias’を置き換えます。ASCII文字フォントにたいしては、‘fontset-alias’を‘ISO8859-1’で置き換えます。

これに加えて、複数の連続するフィールドがワイルドカードの場合、Emacsはそれらを1つのワイルドカードにまとめます。これは、オートスケールされたフォントの使用を避けるためです。大きいフォントをスケーリングしたフォントは編集に適しておらず、小さいフォントをスケーリングしたフォントも同様です。なぜならEmacsがそうするように、もともと小さなフォントを使うほうがよいからです。

したがって、fontpatternが以下の場合、

-*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24

ASCII文字にたいするフォント指定は、以下のようになるでしょう:

-*-fixed-medium-r-normal-*-24-*-ISO8859-1

そしてChinese GB2312文字にたいするフォント指定は、以下のようになるでしょう:

-*-fixed-medium-r-normal-*-24-*-gb2312*-*

上記のフォント指定に一致するChineseフォントがないかもしれません。ほとんどのXディストリビューションには、familyフィールドが‘song ti’か‘fangsong ti’のChineseフォントだけが含まれています。そのような場合、‘Fontset-n’をつぎのように指定します:

Emacs.Fontset-0: -*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24,\
        chinese-gb2312:-*-*-medium-r-normal-*-24-*-gb2312*-*

そうするとChinese GB2312の文字を除くフォント指定では、familyフィールドが‘fixed’となり、Chinese GB2312の文字に対するフォント指定では、familyフィールドが‘*’となります。

フォントセットのリソース値を処理してフォントセットを作る関数は、create-fontset-from-fontset-specと呼ばれます。フォントセットを作るために、この関数を明示的に呼ぶこともできます。

フォントの命名についての詳細は、フォントを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

22.15 フォントセットの修正

常にフォントセットをスクラッチから作成する必要はありません。軽微な変更だけが必要なときは、通常は既存のフォントセット‘fontset-default’を修正するのが簡単な方法でしょう。‘fontset-default’の修正は、それをフォールバックに使用する他のフォントセットにも影響するので、特定のスクリプトのためにEmacsが選択するフォントに関する問題を解決する効果的な方法になり得ます。

フォントセットは関数set-fontset-fontを使って、文字、文字セット、スクリプトフォントを修正する文字範囲、使用されるフォントの指定を修正することができます。以下は例です:

;; Prefer a big5 font for han characters.
(set-fontset-font "fontset-default"
                  'han (font-spec :registry "big5")
                  nil 'prepend)

;; Use MyPrivateFont for the Unicode private use area.
(set-fontset-font "fontset-default"  '(#xe000 . #xf8ff)
                  "MyPrivateFont")

;; Use Liberation Mono for latin-3 charset.
(set-fontset-font "fontset-default" 'iso-8859-3
                  "Liberation Mono")

;; Use DejaVu Sans Mono as a fallback in fontset-startup
;; before resorting to fontset-default.
(set-fontset-font "fontset-startup" nil "DejaVu Sans Mono"
                  nil 'append)

set-fontset-font関数のより詳細な使用方法についてはFontsets in GNU Emacs Lisp Reference Manualを参照してください。

文字のコードポイントや文字が属するスクリプトが不明ならEmacsに尋ねることができます。文字にポイントを移動してC-u C-x = (what-cursor-position) とタイプすれば、Emacsはポップアップする*Help*により多くの情報とともにこの情報が表示されます。カーソル位置の情報を参照してください。たとえば‘kana’スクリプトに属する日本語文字が中国語文字とも混合された日本語テキストでは、以下のように日本語テキストに‘Kochi Gothic’フォントを使用するようにEmacsをセットアップして、‘han’スクリプトを使用します:

(set-fontset-font "fontset-default" 'han "Kochi Gothic")

(Emacsの‘han’スクリプトは中国語だけではなく中国語、韓国語、日本語、いわゆるCJKのすべての文字をサポートするようにセットアップされています。)

既知のスクリプトのリストは変数script-representative-charsを確認してください。

上記のようなフォントセットのセッティングはデフォルトフォントがサポートしない文字のみに影響するので、‘Kochi Gothic’がラテン文字をカバーしていても、Emacsが使用するデフォルトフォントは通常は基本的なラテン文字をカバーするので使用されることはありません。

システムにインストールされているフォントが壊れていたり、使用されている文字にたいして好ましくない結果を生成するフォントがあるかもしれません。そのような場合、文字を表示するのに必要となる適切なフォントの検索に、それらのフォントを完全に無視するように、Emacsに指示したいと思うかもしれません。face-ignored-fontsの値(リスト変数です)に、不適切なフォントを追加することによりこれを行なうことができます。以下は、そのような設定を~/.emacsに記述する例です:

(add-to-list 'face-ignored-fonts "Some Bad Font")

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

22.16 表示できない文字

あなたの端末では表示できない非ASCII文字が、いくつか存在するかもしれません。ほとんどのテキスト端末は、1つの文字セットだけをサポートします(Emacsに何を使うか指示するには、変数default-terminal-coding-systemを使用します。端末入出力にたいするコーディングシステムを参照してください)。そのコーディングシステムではエンコードできない文字は、デフォルトでは‘?’と表示されます。

グラフィカルなディスプレーでは、より広範囲の文字を表示できますが、それらすべてのフォントがインストールされていないかもしれません。フォントがない文字は、中空のボックスで表示されます。

Latin-1文字を使用するとき、端末がLatin-1を表示できない場合、かわりにニーモニックASCIIシーケンスを表示できます。たとえばo-umlautのかわりに‘"o’が表示されます。これを行うにはiso-asciiをロードします。

端末がLatin-1を表示できる場合、Latin-1と等しい文字とASCIIニーモニックを混交して、他のEuropean文字セットを表示できます。これは変数latin1-displayをカスタマイズすることにより有効になります。ニーモニックASCIIシーケンスは、ほとんどがインプットメソッドのプレフィクスに対応します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

22.17 Unibyte編集モード

ISO 8859 Latin-n文字セットは、さまざまなEuropean言語で必要とされるアクセント文字と区切り文字を扱うために、8進の0240から0377(10進の160から250)の範囲の文字コードを定義しています。Emacsはこの範囲のバイトを、たとえunibyteバッファー(たとえばマルチバイト文字を無効にしている場合)でも、それらを文字としてではなく、rawバイトとみなします。しかし、それでもEmacsはこれらの文字コードを、あたかも1つも1バイト文字セットに属するかのように1度に扱うことができます。これらのコードのどれを使うかを指定するには、M-x set-language-environmentを呼び出して、‘Latin-n’のような適切な言語環境を指定します。Disabling Multibyte Characters in GNU Emacs Lisp Reference Manualを参照してください。

端末や使っているフォントがこれらの文字をサポートしている場合、Emacsは160から255の文字を読み取り可能な文字として表示できます。これは自動的に行われます。グラフィカルなディスプレーでは、Emacsはフォントセットを通じて1バイト文字として表示できます。これは現在の言語環境で、それらに対応するマルチバイト文字を表示することにより行われます。これを行うには、変数unibyte-display-via-language-environmentに非nil値を設定します。このセッティングは、これらのバイトを表示する方法だけに影響しますが、Emacsがそれらを文字としてではなくrawバイトとして扱うという基礎事実は変わらないことに注意して下さい。

端末でLatin-1文字セットを表示できない場合、Emacsはこれらの文字をその文字が少なくとも何であるかを明確に理解できるような、ASCIIシーケンスとして表示できます。これを行うには、ライブラリーiso-asciiをロードします。他のLatin-n文字セットに対しても似たようなライブラリを実装できますが、これは まだ行われていません。

通常、非ISO 8859文字セット(10進文字の128から159のコードも含む)は、8進でエスケープ表示されます。ライブラリーdisp-tableの関数standard-display-8bitを使うことにより、非標準の拡張バージョンのISO 8859文字セットに変更できます。

1バイトの非ASCII文字を入力する2つの方法があります:


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

22.18 文字セット

Emacsでは“文字セット(character set)”を縮めて、charsetと呼びます。Emacsは、ほとんどの有名なcharsets(asciiiso-8859-1cp1250big5unicodeなど)に加えて、Emacs自身のcharsets(emacsunicode-bmpeight-bitなど)をサポートします。すべてのサポートされた文字は、1つ以上のcharsetsに属します。

Emacsは通常、charsetsにたいして正しいことを行う(does the right thing)ので、あなたはそれらを心配する必要はありません。しかし、charsetsの背景の詳細を知ることが助けになる場合もあります。

1つの例はフォント選択です(フォントを参照してください)。それぞれの言語環境(言語環境を参照してください)は、さまざまな文字にたいする優先リスト(priority list)を定義します。フォントを検索するとき、Emacsは最初に一番優先度の高いcharsetsを表示できるものを探すことを試みます。たとえばJapanese言語環境では、charsets japanese-jisx0208は一番高い優先度をもっているので、Emacsはregistryプロパティーが‘JISX0208.1983-0’のフォントの使用を試みます。

charsetsに関する情報を得るのに使うことができるコマンドが2つあります。コマンドM-x list-charset-charsはcharset名の入力を求め、その文字セットのすべての文字を表示します。コマンドM-x describe-character-setはcharset名の入力を求め、Emacsでの内部表現も含めたそのcharsetに関する情報を表示します。

M-x list-character-setsは、すべてのサポートされたcharsetsを表示します。このリストはcharsetsの名前と、各charsetを識別する追加の情報を与えます。詳細については、Information Processing Society of Japan/Information Technology Standards Commission of Japan (IPSJ/ITSCJ)により保守されている、ISO International Register of Coded Character Sets to be Used with Escape Sequences (ISO-IR)を参照してください。このリストでは、charsetsは2つのカテゴリーに分かれています。通常のcharsets(normal charsets)が最初にリストされ、その後に追加のcharsets(supplementary charsets)が続きます。追加のcharsetは他のcharsetを定義するのに(サブセットの親として)使用されるか、古いバージョンのEmacsとの互換性のために提供されます。

バッファーの文字がどのcharsetに属するか探すには、ポイントをその文字の前において、C-u C-x =をタイプします(国際化文字セットのイントロダクションを参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

22.19 双方向の編集

EmacsはArabicやFarsi、Hebrewのような、テキストを水平方向の右から左に記述するスクリプトで書かれたテキストの編集をサポートします。しかし数字やそれらのスクリプトに埋め込まれたLatinテキストは、左から右に表示されます。Latin文書の中に少量のArabicやHebrewのテキスト部分が含まれている場合も、稀ではありません(例: プログラムソース内のコメントや文字列)。これらの理由により、これらのスクリプトを使うテキストは、実際には双方向(bidirectional)、つまりそれらはleft-to-right(左から右)の文字とright-to-left(右から左)文字の混交されたものになります。

このセクションでは、双方向テキストを編集するためにEmacsが提供する機能とオプションを説明します。

Emacsはright-to-leftおよび双方向テキストを、いわゆるlogical順(またはreading順)で格納します。バッファーまたは文字列の最初の文字の位置は、次に読む文字の前になります。双方向テキストをvisual順に再配置するには表示時間が発生します。結果として文字の位置は、それらが表示される位置にたいして単調に増加しなくなります。Emacsは表示のための双方向テキストの再配置を、Unicode Standard Annex #9で説明されているUBA(Unicode Bidirectional Algorithm)で実装しています。right-to-leftパラグラフ中に長い英文テキストが出現するような、基本となるパラグラフと継続行が逆方向のときに表示する方法だけが、UBAと異なります。

バッファーローカルな変数bidi-display-reorderingは、表示用にバッファーのテキストを再配置するかどうかを制御します。この変数の値が非nilの場合、Emacsは右から左の方向に表示される文字を再配置します。デフォルト値はtです。

双方向テキストの各パラグラフは、それ自身のbase direction(基本方向)をもっており、それはright-to-leftまたはleft-to-rightです。left-to-rightのパラグラフはスクリーンの左端から開始し、右端に到達すると切り詰め、または継続されます。対照的にright-to-leftのパラグラフのテキストは右端から開始し、左端で継続、または切り詰められて表示されます。デフォルトでは、パラグラフの境界は空行(たとえば行全体が空白文字からなる行)です。これを変更するために、2つの変数bidi-paragraph-start-rebidi-paragraph-separate-reをカスタマイズできます。これらの値には正規表現(文字列)を指定します。たとえば単一の改行を新たなパラグラフの開始とする場合は、両方の変数に\"^\"をセットします。これら2つの変数はバッファーローカルです(ローカル変数を参照)。

Emacsは、パラグラフを開始するテキストにもとづいて、各パラグラフの基本方向を動的に決定します。しかし、バッファーのパラグラフにたいして特定の基本方向を強制する必要もあるでしょう。変数bidi-paragraph-directionが非nilの場合、これは基本方向の動的な決定を無効にして、バッファーのすべてのパラグラフの方向を、このバッファーローカルな値で指定された方向に強制します。値にはright-to-leftleft-to-rightが指定できます。これ以外の値はnilと解釈されます。

かわりにパラグラフの先頭に特別な文字を挿入することにより、パラグラフの基本方向を制御できます。特別な文字RIGHT-TO-LEFT MARKまたはRLMは、以降に続くパラグラフをright-to-left方向に強制します。その効果はLEFT-TO-RIGHT MARKまたはLRMによりleft-to-right方向に再強制されるまで続きます(C-x 8 RETを使ってこれらの文字を挿入できます)。GUIセッションではLRM文字およびRLM文字は、極端に細いスペースで表示されます。テキスト端末では、それらはスペースで表示されます。

文字は表示用に再配置されるので、logical順で処理を行うEmacsコマンドやバッファーの拡大は、普通とは異なる効果を生みます。たとえばコマンドC-fおよびC-bはポイントをlogical順で移動するので、再配置された双方向テキストではポイントがジャンプすることがあります。同様に隣接する文字位置の範囲をカバーするハイライトされたリージョンは、リージョンが再配置されたテキストにかかる場合には不連続に見える場合があります。これは双方向テキストをサポートする他のプログラムの振る舞いとしては普通であり、似通っています。

LEFTC-RIGHTのように、矢印キーにバインドされたカーソル移動コマンドは、カレントパラグラフの基本方向にしたがいます。left-to-rightパラグラフでは、修飾キーの有無に関わらず、RIGHTにバインドされるコマンドは、バッファーテキスト内を前方(forward)に移動しますが、right-to-leftパラグラフではかわりに後方(backward)に移動することになります。これは、right-to-leftパラグラフのバッファー位置は、ディスプレイ上を左に移動することにより大部分は増加するという事実を反映しています。

パラグラフ外に移動した際、先行または後続するパラグラフの基本方向が、移動する前のパラグラフの方向と異なる場合は、矢印キーのもつ意味は変化するでしょう。これが発生したときは、新たな基本方向に合わせて矢印キーを押下する必要があります。

デフォルトでは、LEFTおよびRIGHTはlogical方向に移動しますが、visual-order-cursor-movementが非nilの場合、これらのコマンドはそれぞれスクリーン位置を左または右に、必要ならスクリーン行の次行または前行へと移動します。これは周辺の双方向コンテキストに依存して、多くのバッファー位置が移動される可能性を秘めることに注意してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

23 メジャーモードとマイナーモード

Emacsには多くの編集用モード(editing modes)が含まれており、これは基本的な振る舞いを、編集に便利な方法に変更します。これらの編集用モードはメジャーモード(major modes)マイナーモード(minor modes)に分けられます。

メジャーモードは、Cソースファイル(プログラムの編集を参照してください)などの特定のファイルタイプや、shellバッファー(Emacsからのシェルコマンドの実行を参照してください)などの、特別なタイプの非ファイルバッファーにたいして作業するための特別な機能を提供します。メジャーモードは互いに排他であり、各バッファーは常に1つのメジャーモードをもちます。

マイナーモードはオンとオフを切り替えることができるオプションの機能で、ファイルやバッファーのタイプに特定する必要はありません。たとえばAuto Fillモードは、単語の間にタイプしたSPCで行を区切るマイナーモードです(Auto Fillモードを参照してください)。マイナーモードは互いに独立していて、選択されたメジャーモードからも独立しています。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

23.1 メジャーモード

すべてのバッファーはメジャーモードをもっており、そのバッファーがカレントである間の編集の動作を決定します。モードラインには通常カレントのメジャーモード名がカッコ内に表示されます(モードラインを参照してください)。

もっとも特殊化されていないメジャーモードは、Fundamental(基本)モードと呼ばれます。このモードには、モード独自の再定義や変数設定がないので、各Emacsコマンドはもっとも一般的な振る舞いをし、各ユーザーオプションはデフォルトの状態になっています。

Lispや英文テキストのように、Emacsが認識できる特定のタイプのテキスト編集には、LispモードやTextモードのような、より特殊化されたメジャーモードを通常は使用します。ほとんどのメジャーモードは3つのグループに分けられます。最初のグループはプレインまたはマークアップされた通常テキストのためのモードを含みます。これにはTextモード、HTMLモード、SGMLモード、TeXモードやOutlineモードなどが含まれます。2番目のグループはプログラミング言語特有のモードです。これらは、Lispモード(いくつかの変種を有する)、Cモード、Fortranモードなどが含まれます。3番目のグループはファイルに直接関連付けられていないメジャーモードが含まれます。これらはEmacsが特別の目的のために作るバッファーで使用されるものです。例としては、Diredが作成するバッファーのためのDiredモード(Dired (ディレクトリーエディター)を参照)、C-x mで作成されるバッファーのためのMessageモード(メールの送信を参照)、下位のシェルプロセスとの通信用のバッファーのためのShellモード(対話的なサブシェルを参照)などが含まれます。

通常、メジャーモードは最初にファイルをvisitしたとき、またはバッファーを作成したときに、Emacsにより自動的にセットされます。M-xコマンドを使うことにより、新しいメジャーモードを明示的に選択することができます。モードの名前に-modeを追加することにより、モードを選択するコマンド名を得ることができます(たとえば、Lispモードを選択する場合はM-x lisp-mode)。すべてのバッファーは厳密に1つのメジャーモードをもつので、メジャーモードを“オフ”にする方法はなく、かわりに他のメジャーモードに切り替えなければなりません。

バッファーローカルな変数major-modeの値は、メジャーモードコマンドと同じ名前のシンボル(たとえばlisp-mode)です。この変数は自動的にセットされます。あなた自身が変更するべきではありません。

major-modeのデフォルト値は、メジャーモードが指定されていないファイルを使うときや、C-x bで作成した新しいバッファーのメジャーモードを決定します。通常、デフォルト値はFundamentalモードを指定する、シンボルfundamental-modeです。Customizationインターフェースを通じて、このデフォルト値を変更できます(Easy Customizationインターフェースを参照してください)。initファイルに以下のような行を追加しても変更できます(Emacs初期化ファイルを参照してください):

(setq-default major-mode 'text-mode)

major-modeのデフォルト値がnilの場合、メジャーモードは前のカレントバッファーから引き継がれます。

特殊化されたメジャーモードは、特定のキーにたいして、そのモードにより適した何かを行うよう、意味づけが変更される場合があります。たとえばプログラミングに関連するモードでは、TABには、カレント行をその言語のルールにしたがってインデントする機能がバインドされます(インデントを参照してください)。一般的に変更されるキーはTABDELC-jです。多くのモードがモード自身の特別なコマンドを定義しており、それらは通常、プレフィクスキーがC-cであるようなキーシーケンスにバインドされます。メジャーモードはユーザーオプションと変数も変更できます。たとえばプログラミングに間するモードは通常、変数comment-startにバッファーローカルな値をセットします。これはソースコードのコメントがどのように区切られるかを決定します(コメントの操作を参照してください)。

カレントメジャーモードのキーバインディング一覧も含めたドキュメントを閲覧するには、C-h m (describe-mode)とタイプします。その他のヘルプコマンドを参照してください。

Fundamentalモード以外のすべてのメジャーモードは、モードフック(mode hook)を定義します。これはバッファーでそのモードが有効になるたびに実行される、カスタマイズ可能なLisp関数のリストです。フックに間する詳細は、フックを参照してください。各モードフックはメジャーモード名の後に名前がつけられます。たとえばFortranモードのモードフックは、fortran-mode-hookです。さらに、すべてのテキストベースのメジャーモードは、text-mode-hookを実行し、多くの、プログラミング言語のモード(Emacsとともに配布されるものを含む) は、その言語モード自身のモードフックの前に、prog-mode-hookを実行します10 。フック関数は変数major-modeの値を調べて、どのモードに入ろうとしているか調べることができます。

モードフックは、一般的にマイナーモードを有効にするために使用されます(マイナーモードを参照してください)。たとえば以下の行をinitファイルに記述すると、すべてのテキストベースのメジャーモードでFlyspellマイナーモード(スペルのチェックと訂正を参照してください)を、Emacs LispモードでElDocマイナーモード(Emacs Lispドキュメントの照会を参照してください)を有効にすることができます:

(add-hook 'text-mode-hook 'flyspell-mode)
(add-hook 'emacs-lisp-mode-hook 'eldoc-mode)

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

23.2 マイナーモード

マイナーモードは明確な方法でEmacsの動作を変更する、オプションの編集用モードです。メジャーモードとは異なり、いつでも任意の数のマイナーモードを有効にできます。いくつかのマイナーモードはバッファーローカル(buffer-local)で、特定のバッファーにたいしてオン(有効)にして、他のバッファーではオフ(無効)に切り替えることができます。それ以外のマイナーモードはグローバル(global)で、それが有効な間はEmacsセッションのすべてのバッファーで行う、すべての操作に影響します。ほとんどのマイナーモードはデフォルトで無効ですが、デフォルトで有効なものもいくつかあります。

ほとんどのバッファーローカルなマイナーモードは、モードラインのメジャーモード標識のすぐ後ろに有効であることを示します。たとえばモードラインに‘Fill’と表示されているとき、それはAuto Fillモードが有効であることを意味します。モードラインを参照してください。

メジャーモードと同様に、各マイナーモードはモードコマンド(mode command)に関連付けられていて、それはモード名の後ろに‘-mode’を付けた名前です。たとえばAuto Fillモードのモードコマンドはauto-fill-modeです。しかしメジャーモードのコマンドは、単純にそのモードを有効にするだけですが、マイナーモードのモードコマンドは、モードを有効または無効にすることができます。

ほとんどのマイナーモードは、モードコマンドと同じ名前のモード変数(mode variable)をもっています。変数の値が非nilのときはモードが有効で、nilなら無効です。一般的に、Lispから直接モード変数を変更して、モードを有効または無効にするべきではありません。かわりにモードコマンドを使うべきです。しかしCustomizeインターフェース(Easy Customizationインターフェースを参照してください)を通じてのノード変数のセットは、Customizeが自動的にモードコマンドを実行するので、常に正しくモードを有効または無効にします。

以下にいくつかのバッファーローカルなマイナーモードのリストを示します:

以下に便利なグローバルマイナーモードをいくつか示します:


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

23.3 ファイルのモードを選択する

ファイルをvisitしたとき、Emacsは自動的にメジャーモードを選択します。これは通常、ファイル名にもとづいて選択されます—たとえば名前が‘.c’で終わるファイルは通常、Cモードで編集されます — が、ファイル内の特別なテキストにもとづいてメジャーモードが選択されるときもあります。この特別なテキストは、バッファーローカルなマイナーモードを有効にするためにも使用されます。

以下は、これの正確な手順です:

最初にEmacsは、ファイルにファイルローカル(file-local)なモード変数が含まれているかチェックします。ファイル内のローカル変数を参照してください。メジャーモードを指定するファイルローカル変数が存在する場合、Emacsは他の条件をすべて無視してそのメジャーモードを使用します。ファイルローカル変数を使用してメジャーモードを指定する方法はいくつかあります。一番単純なのは、空行でない最初の行に、そのモードの名前と、モード名の前後に‘-*-’を記述する方法です。他のテキストがその行にあっても問題はありません。たとえば、

; -*-Lisp-*-

これはEmacsにLispモードを使用するよう指示します。Lispがこの行をコメントとして扱うように、セミコロンがどのように使われているか注意してください。以下のように書くこともできます

; -*- mode: Lisp;-*-

ファイルローカル変数を使用して、バッファーローカルなマイナーモードを指定することもできます。これはeval指定を使用して行います。たとえば、空行でない最初の行に以下を記述すると、これはバッファーをLispモードにして、Auto-Fillモードを有効にします。

; -*- mode: Lisp; eval: (auto-fill-mode 1); -*-

しかし、ほとんどのマイナーモードはユーザー個人の好みが表れるものなので、この方法でマイナーモードを有効にするのは、通常は不適切です。特定のファイルタイプにたいしてマイナーモードを個人的に使用したい場合は、メジャーモードフックを通じてマイナーモードを有効にするのが、より良い方法です。

2番目に、メジャーモードを指定するファイル変数が存在しない場合、Emacsは最初の行が‘#!’で開始されていないかチェックします。もし該当したら、それはそのファイルがファイルの最初の行に記述された名前のインタープリターを実行する(ファイルの残りはインタープリターへの入力として使用されます)ことにより機能する、実行可能なシェルコマンドであることを示します。したがってEmacsはインタープリター名を使って、モードの選択を試みます。たとえば、‘#!/usr/bin/perl’で始まるファイルは、Perlモードで開かれます。変数interpreter-mode-alistは、インタープリター名とメジャーモードの対応を指定します。

最初の行が‘#!’で開始されている場合、最初の行で‘-*-’の機能は通常は使用できません。なぜならインタープリターを実行するときにシステムが混乱するからです。そのため、Emacsはそのようなファイルにたいしては、1行目と同じように2行目の‘-*-’を探します。これはマジック文字列‘'\"’で開始されるman pageで、troffプリプロセッサーのリストを指定することと同じです。

3番目に、Emacsは変数magic-mode-alistにもとづいて、バッファーの先頭のテキストを調べて、メジャーモードの決定を試みます。デフォルトではこの変数はnil(空のリスト)なので、Emacsはこのステップをスキップしますが、initファイルでこれをカスタマイズできます(Emacs初期化ファイルを参照してください)。変数の値には、以下の形式のリスト要素を指定します

(regexp . mode-function)

ここでregexpは正規表現(正規表現の構文を参照してください)で、mode-functionはメジャーモード関数です。ファイルの先頭のテキストがregexpにマッチした場合、Emacsはmode-functionで指定したメジャーモードを選択します。

magic-mode-alistの要素は、以下の形式でも指定できます

(match-function . mode-function)

ここでmatch-functionは、バッファーの先頭で呼び出されるLisp関数です。この関数が非nilを返した場合、Emacsはメジャーモードをmode-functionにセットします。

4番目に —Emacsが適正なメジャーモードをまだ見つけていない場合 — 今度はファイル名を調べます。ファイル名とメジャーモードの対応付けは、変数auto-mode-alistで制御されます。この変数の値は、各要素が以下の形式のリストです。

(regexp . mode-function)

または以下の形式です

(regexp mode-function flag)

たとえば、通常見られるようなリストの要素は、("\\.c\\'" . c-mode)のような形式で、これは名前が.cで終わるファイルにたいして、Cモードを選択する役目を負っています(正規表現で‘.’がもつ特別な意味を打ち消すために、文字列に‘\’を含めなければなりません。これはLisp構文では‘\\’と記述する必要があります)。要素が(regexp mode-function flag)の形式をもち、flagが非nilの場合、Emacsはmode-functionを呼び出した後、Emacsはregexpとマッチした接尾辞を捨てて、ほかのマッチを検索します。

GNU/Linuxおよび、ファイル名の大文字小文字を区別する他のシステムでは、Emacsはauto-mode-alistの検索で大文字小文字を区別します。この検索が失敗すると、2回目は大文字小文字を区別せずにalistを再検索します。2回目の検索を行わないようにするには、変数auto-mode-case-foldnilに変更します。Microsoft Windowsのような、ファイル名の大文字小文字を区別しないシステムでは、Emacsは大文字小文字を区別しないでauto-mode-alistを検索します。

最後に、Emacsがまだ使用するメジャーモードを見つけられない場合、Emacsはバッファーの先頭のテキストと、変数magic-fallback-mode-alistを比較します。この変数は上述したmagic-mode-alistと同じように機能しますが、auto-mode-alistに調べられるという点が異なります。デフォルトではmagic-fallback-mode-alistにはイメージファイル、HTML/XML/SGMLファイル、PostScriptファイル、およびUnixスタイルのConfファイルをチェックする形式が含まれています。

バッファーのメジャーモードを変更したとき、M-x normal-modeとタイプすると、Emacsが自動的に選択するメジャーモードに戻ることができます。この関数はfind-fileがメジャーモードを選択するために呼び出す関数と同じです。この関数は、(もしあれば)ファイルの‘-*-’ 行およびローカル変数リストも処理します。ファイル内のローカル変数を参照してください。

コマンドC-x C-wおよびset-visited-file-nameは、新しいファイル名が何らかのモードに関係がある場合は、新しいメジャーコードに変更します(そのバッファーがファイルをvisitしていない場合、C-x C-sも同じことを行います)。しかしバッファーの内容がメジャーモードを指定していて、ある種の特別なメジャーモードはモードの変更を許しません。このモード変更機能をオフにするには、change-major-mode-with-file-namenilにセットして下さい。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

24 インデント

インデント(Indentation)とは、空白文字(スペースやタブ文字)を行のテキストの先頭に挿入したり調整することを指します。このチャプターでは、インデントコマンドと、Textモードやそれに関連するモード、同様にプログラミング言語のモードでの一般的なオプションを記します。プログラミング用のモードでのインデントに関する追加のドキュメントは、プログラムのインデントを参照してください。

インデントを行うもっとも簡単な方法は、TABキーです。ほとんどのメジャーモードでは、これによりコマンドindent-for-tab-commandが実行されます(Cおよびそれに関連するモードでは、TABは同じように振る舞うコマンドc-indent-line-or-regionを実行する。Cのインデントのためのコマンドを参照されたい)。

TAB

空白文字を挿入、またはモードに適した方法でカレント行をインデントします(indent-for-tab-command)。リージョンがアクティブのときは、リージョンのすべての行をインデントします。

TABの正確な動作は、メジャーモードに依存します。Textモードおよびそれに関連するモードでは、TABは通常、空白とタブ文字を組み合わせたものを挿入して、ポイントを次のタブストップに進めます。このために、先行する行の最初の空白以外の文字の位置は、追加のタブストップとして扱われるので、TABを使って先行する行にポイントを揃えることができます。リージョンがアクティブ(リージョンを操作するを参照してください)な場合、TABは特別な動作をします。これはリージョンの各行をインデントするので、各行の最初の空白以外の文字は、先行する行に揃えられます。

プログラミング関連のモードでは、TABはコードのカレント行にたいして、前の行のコードの意味を理解してインデントします。リージョンがアクティブな場合、リージョンのすべての行はこの方法でインデントされます。ポイントが最初にカレント行のインデント領域にあった場合、その行の最初の空白以外の文字に再配置されます。

単にタブ文字をバッファーに挿入したいときは、C-q TABとタイプします(テキストの挿入を参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

24.1 インデントコマンド

TAB (indent-for-tab-command)コマンドとは別に、Emacsは他の方法でインデントを処理する、さまざまなコマンドを提供します。

C-M-o

カレント行をポイント位置で分割します(split-line)。その行のポイントの後にあるテキストは新しい行となり、ポイントがあった位置と同じ列にインデントされます。このコマンドは、最初にポイントを複数のスペースまたはタブを飛び越えて移動させます。その後、ポイントは挿入された行の前に配されます。

M-m

カレント行の最初の空白以外の文字に移動(前方または後方)します(back-to-indentation)。その行に空白文字しかない場合は、その行の行末に移動します。

M-i

ポイント位置の空白文字を次のタブストップまでインデントします(tab-to-tab-stop)。タブストップを参照してください。

M-x indent-relative

ポイントが前の行(実際には最後の空行以外の行)の、最初の空白以外の文字に揃うように、ポイント位置に空白文字を挿入します。ポイントがすでにその位置より右にある場合は、かわりにtab-to-tab-stopを実行します — ただし数引数を指定した場合は何もしません。

M-^

前の行とカレント行をマージします(delete-indentation)。このコマンドはカレント行の前にある任意のインデントと、行の境界を1つのスペースで置き換えて、2つの行を明解に結合(join)します。

特別なケースとして、結合された文字が連続する開きカッコまたは閉じカッコの場合、または他の改行が続く場合、1つのスペースは省略されます(Lispコードにたいして有用)。

fillプレフィクスが存在して、それが改行の後ろにあった場合、M-^はfillプレフィクスを削除します。フィルプレフィクスを参照してください。

プレフィクス引数を与えると、カレント行を後続行に結合します。リージョンがアクティブでプレフィクス引数が与えられなければ、かわりにリージョン内の全行を結合します。

C-M-\

リージョンのすべての行にたいして、各行の先頭でTABをタイプしたかのようにインデントします(indent-region)。

数引数が与えられた場合、その列番号までリージョンのすべての行をインデントします。

C-x TAB

このコマンドは、リージョン内で開始されるすべての行のインデントを変更するのに使用されます。インデントの変更は、影響を受ける行を厳格な(rigid)単位として移動することにより行われます。

引数を指定しないで呼び出されたとき、このコマンドは影響を受ける行のインデントを対話的に調整するために、transientモードをアクティブにします。transientモードがアクティブの間は、LEFTまたはRIGHTにより、スペース1文字単位で左または右にインデントします。S-LEFTまたはS-RIGHTとタイプすることにより、タブストップ単位で左または右にインデントすることもできます。他のキーをタイプするとtransientモードは無効になり、その後はこのキーは通知のように動作します。

プレフィクス引数nを指定して呼び出すと、このコマンドは行をn個のスペースでインデントします(transientモードは有効になりません)。nに値を与えると後方にインデントするので、リージョン内の行のすべてのインデントを除去したいときは、以下のように充分に大きい負の引数を与えます。

C-u -999 C-x TAB

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

24.2 タブストップ

Emacsは、特定の列番号がタブストップになるよう定義しています。これらはTextモードおよびそれに関連するモードで、TABおよびM-iのようなコマンドにより、空白文字が挿入されるときのストップポイントとして使用されます。変数tab-stop-listは、これらの位置を制御します。デフォルト値はnilで、これはタブストップが8列ごとという意味です。値には、タブストップの列番号を、0基準の列番号のリスト(昇順)で指定することもできます。Emacsは最後の要素と、その1つ前の要素の差分を繰り返すことにより、リストを無限に拡張します。

変数tab-stop-listを直接カスタマイズするかわりに、コマンドM-x edit-tab-stopsを通じて、タブストップを視認しながらセットする便利な方法があります。このコマンドは、以下のようなタブストップの説明を含んだバッファーに切り替えます。

        :       :       :       :       :       :
0         1         2         3         4
0123456789012345678901234567890123456789012345678
To install changes, type C-c C-c

最初の行は各タブストップ位置にコロンを示します。その後の2行はコロンが示す位置を表示します。tab-stop-listの値がnil(デフォルト)の場合、最初はコロンが表示されません。

異なるタブストップを置きたい列に、コロンを配して指定するために、このバッファーを編集できます。このバッファーはOverwriteモードを使用します(マイナーモードを参照してください)。Emacsは、最後に明示した2つのストップの差分を繰り返すことにより、タブストップのリストを無限に拡張することを思い出してください。編集が終わったら、新しいタブストップを有効にするために、C-c C-cとタイプします。通常、新しいタブストップのセッティングは、すべてのバッファーに適用されます。しかしM-x edit-tab-stopsを呼び出したバッファーにたいして、ローカルな変数tab-stop-listを作成していた場合(ローカル変数を参照してください)、新しいタブストップのセッティングは、そのバッファーだけに適用されます。将来のEmacsセッションのためにタブストップのセッティングを保存するには、Customizeインターフェースを使用してtab-stop-listの値を保存します(Easy Customizationインターフェースを参照してください)。

このセクションで議論したタブストップは、バッファーでタブ文字が表示される方法には影響しないことに注意してください。タブ文字は常に次のタブストップ表示(display tab stop)まで拡張される、空のスペースとして表示されます。テキストが表示される方法を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

24.3 タブ vs. スペース

インデントコマンドは通常、最小になるような一連のタブ文字とスペースを挿入(または削除)することにより、望む列に行を揃えます。タブ文字は次のタブストップ表示(display tab stop)まで伸長された、空のスペースとして表示されます。デフォルトでは、tab-width列ごと(デフォルトは8)に、1つのタブストップ表示があります。テキストが表示される方法を参照してください。

もし望むなら、すべてのインデントをスペースだけで行うこともできます。これを要求するには、バッファーローカルな変数indent-tabs-modenilにセットします。バッファーローカルな変数についての情報は、ローカル変数を参照してください。しかしC-q TABは、indent-tabs-modeの値とは無関係に、常にタブ文字を挿入することに注意してください。

indent-tabs-modenilにセットする1つの理由は、すべてのエディターがタブ文字を同じ方法で表示するわけではないという理由です。Emacsユーザーも同様で、彼らはカスタマイズされたtab-widthにより、異なる値をもつかもしれません。スペースだけを使うことにより、ファイルが常に同じように見えることを保証できます。Emacsでどのように見えるかだけに関心がある場合、この問題に取り組む他の方法は、ファイルローカルな変数tab-widthをセットする方法です(ファイル内のローカル変数を参照してください)。

空白以外の文字の列を常に保ちながら、スペースをタブに、またはその逆の変換を行うコマンドも存在します。M-x tabifyは、リージョンの連続するスペースをスキャンして、インデントを変更せずに、少なくとも2文字の連続するスペースをタブに変換します。M-x untabifyは、リージョンのすべてのタブを適正な数のスペースに変更します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

24.4 インデントの便利な機能

変数tab-always-indentは、TAB (indent-for-tab-command)コマンドの動作を微調整します。デフォルト値はtで、これはインデントで説明した動作を与えます。値をシンボルcompleteに変更すると、TABは最初にカレント行のインデントを試みます、すでにその行がインデントされている場合、このコマンドはポイント位置のテキストの補完を試みます(シンボル名の補完を参照してください)。値がnilの場合、TABはポイントが行の左端かインデント位置にあるときだけインデントを行い、それ以外はタブ文字を挿入します。

Electric Indentモードはグローバルなマイナーモードで、これはRETをタイプしたあと自動的にインデントを行います。このモードはデフォルトで有効です。このマイナーモードを切り替えるには、M-x electric-indent-modeとタイプします。1つのバッファーにたいしてモードを切り替えるには、M-x electric-indent-local-modeを使用してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25 人間の言語のためのコマンド

このチャプターではテキスト(text) — 人間の言語(対照的なものとしてコンピューターのプログラム言語があります)における、文字シーケンスという意味 — にたいして動作する、Emacsコマンドを説明します。これらコマンドは、人間の言語の構文および文体の規則に配慮した方法で動作します。単語、センテンス(文)、パラグラフ(段落)、大文字に関する規則があります。フィル(filling) — パラグラフの行をおおよそ同じ長さに再配置するという意味 — を行うコマンドもあります。これらのコマンドは主にテキストの編集を意図しており、プログラムの編集にも便利なときがあります。

Emacsには、人間言語のテキストを編集するためのメジャーモードがいくつかあります。ファイルが普通のテキストを含む場合は、Textモードを使います。これはEmacsを、テキストの構文規則にたいして少しカスタマイズしたものです。Outlineモードは。アウトライン構造でテキストを操作する特別なコマンドを提供します。Outlineモードを参照してください。

Orgモードは、Outlineモードを拡張してEmacsを本格的なオーガナイザーに変えます。これによりTODOリストを管理したり、ノートを保存して、それを多くのフォーマットで公開することができます。 Emacsと共に配布されるOrgのInfoマニュアルを参照してください。

EmacsにはTeXやLaTeX (TeXモードを参照してください)、HTMLやSGML (SGMLモードとHTMLモードを参照してください)、XML (Emacsと共に配布されるnXLMモードのマニュアルを参照してください)、 GroffやNroff (Nroffモードを参照してください)のような、コマンドが埋め込まれたテキストのための、他のメジャーモードがあります。

テキスト文字で作られたAA(ASCII art)のピクチャーを編集する必要がある場合は、そのような絵を編集するための特別なメジャーモードのPictureモードを使用します ピクチャーの編集を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.1 単語

Emacsは、単語単位で移動するコマンドをいくつか定義しています:

M-f

1単語前方に移動します(forward-word)。

M-b

1単語後方に移動します(backward-word)。

M-d

単語の最後までkillします(kill-word)。

M-DEL

単語の先頭までkillします(backward-kill-word)。

M-@

次の単語の最後にマークをセットします(mark-word)。

M-t

2つの単語を入れ替える、または他の単語を飛び越えて単語をドラッグします(transpose-words)。

これらのキーは文字単位のコマンドC-fC-bC-dDELC-tに類似していることに注目してください。M-@C-@(これはC-SPCの別名です)が由来です。

コマンドM-f (forward-word)およびM-b (backward-word)は、単語単位で前方または後方に移動します。これらのMetaベースのキーシーケンスは、1文字単位で移動するキーシーケンスC-fおよびC-bに類似しています。類似点は数引数にも拡張されます。これらは繰り返し回数を指定します。M-fに負の引数を与えると後方に移動し、M-bに負の引数を与えると前方に移動します。前方への移動は単語の最後の文字の直後で停止し、後方への移動は、最初の文字の直前で停止します。

M-d (kill-word)は、ポイントの後ろの単語をkillします。正確に言うと、ポイントから、M-fで移動する位置までのすべてをkillします。したがってポイントが単語の途中にある場合、M-dはポイントの後だけをkillします。ポイントと次の単語の間に区切り文字がある場合、それは単語と一緒にkillされます(次の単語だけをkillして、その前にある区切り文字はkillしたくないときは、M-fで最後まで移動して、M-DELで単語を後方にkillします)。M-dM-fと同様の引数を取ります。

M-DEL (backward-kill-word)は、ポイントの前の単語をkillします。これはポイントから、M-bで移動する位置までのすべてをkillします。たとえばポイントが‘FOO, BARのスペースの後ろにある場合、これは‘FOO, をkillします。‘FOO’だけをkillして、カンマとスペースは残したい場合は、M-DELのかわりにM-b M-dを使用します。

M-t (transpose-words)は、ポイントの前またはポイントを含む単語を、次の単語と交換します。単語間の区切り文字は移動されません。たとえば‘FOO, BARは、‘BAR FOO,’ではなく、‘BAR, FOOに入れ替えられます。入れ替えについては、テキストの入れ替えを参照してください。

リージョンにたいして操作を行う際、単語単位で操作したいときは、コマンドM-@ (mark-word)を使用します。このコマンドはM-fで移動する位置にマークをセットします。このコマンドにつての詳しい詳細は、テキストオブジェクトをマークするコマンドを参照してください。

単語にたいするコマンドが理解する単語境界は、構文テーブル(syntax table)で制御されます。単語の区切り文字に、(たとえば)任意の文字を使うことができます。Syntax Tables in The Emacs Lisp Reference Manualを参照してください。

以上に加えて、リージョンまたはバッファーに含まれる単語数のカウントとリポートを行うM-= (count-words-region)およびM-x count-wordsコマンドについては、カーソル位置の情報を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.2 センテンス

センテンス(文)とパラグラフ(段落)を操作するEmacsコマンドは、単語を処理するコマンドと同様、ほとんどがMetaキーに割り当てられています。

M-a

センテンスの先頭に、後方へ移動します(backward-sentence)。

M-e

センテンスの最後に、前方へ移動します(forward-sentence)。

M-k

センテンスの最後まで、前方にkillします(kill-sentence)。

C-x DEL

センテンスの最初まで、後方にkillします(backward-kill-sentence)。

コマンドM-a (backward-sentence)およびM-e (forward-sentence)は、センテンスの先頭または最後に移動します。これらのコマンドのバインディングは、行の先頭と最後に移動するC-aC-eに似せて選ばれました。似ていない点は、M-aまたはM-eを繰り返すと、センテンス単位で連続して移動することです。

センテンスにたいして後方に移動すると、ポイントはセンテンスの最初の文字の直前に移動します。前方に移動したときは、センテンスを終了させる区切り文字の直後に移動します。どちらもセンテンスの境界にある空白文字にポイントを移動することはありません。

C-aC-eがkillコマンドC-kをもつように、M-aM-eにも対応するkillコマンドがあります。M-k (kill-sentence)は、ポイントからセンテンスの最後までをkillします。正の数引数nを指定すると、次のnセンテンスをkillします。負の数引数-nを指定すると、後方にn番目のセンテンスの先頭までをkillします。

C-x DEL (backward-kill-sentence)は、センテンスの先頭までを後方にkillします。

センテンスのコマンドは、センテンスの最後に2つのスペースを置くというAmericanのタイピストの慣習に、ユーザーが従うと仮定します。つまりセンテンスの最後は‘.’、‘?’、‘!’の後ろに改行または2つのスペースがあると仮定し、その間に任意の個数の‘)’、‘]’、‘'’、‘"’が許されます。パラグラフの先頭および最後は、センテンスの先頭および最後でもあります。この慣習にしたがうことにより、Emacsのセンテンスにたいするコマンドがセンテンスの最後のピリオドと、省略形を示すピリオドを区別できるので便利になります。

センテンスの間を1つのスペースにしたい場合は、sentence-end-double-spacenilにセットすることにより、センテンスのコマンドが1つのスペースで止まるようになります。しかし、これにはセンテンスの終わりのピリオドと、省略形を示すピリオドを区別できなくなるという欠点があります。したがって便利で信頼できる編集のために、2つのスペースの慣習にしたがうことを推奨します。変数sentence-end-double-spaceはフィルにも影響します(明示的なフィルコマンドを参照してください)。

変数sentence-endは、センテンスの終了を認識する方法を制御します。非nilの場合、その値は正規表現にすべきで、それはセンテンスの最後の数文字(センテンスの後ろのスペースも含む)とのマッチに使用されます。値がnil(デフォルト)の場合、Emacsはsentence-end-double-spaceの値のような、変数条件に照らしてセンテンスの最後を計算します。

Thaiのようないくつかの言語は、センテンスの最後を示すのにピリオドを使用しません。そのような場合は変数sentence-end-without-periodtをセットします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.3 パラグラフ

パラグラフ(段落)を操作するEmacsコマンドもMetaキーに割り当てられています。

M-{

前のパラグラフの先頭に、後方へ移動します(backward-paragraph)。

M-}

次のパラグラフの最後に、前方へ移動します(forward-paragraph)。

M-h

そのパラグラフ、または次のパラグラフの周囲にポイントとマークを配します(mark-paragraph)。

M-{ (backward-paragraph)は、カレントのパラグラフ、または前のパラグラフの先頭に移動します(呼び出し時にポイントがある場所に依存する。パラグラフの定義は以下を参照)。同様に、M-} (forward-paragraph)は、カレントのパラグラフ、または次のパラグラフの最後に移動します。パラグラフの前に空行がある場合、M-{はその空行に移動します。

パラグラフにたいして操作をしたい場合、M-h (mark-paragraph)とタイプすることにより、パラグラフの周囲にリージョンがセットされます。たとえばM-h C-wは、パラグラフの周囲またはポイントの後ろをkillします。M-hは、ポイント位置のパラグラフの先頭にポイントを、最後にマークを配します。ポイントがパラグラフの間(連続する空行の中、または境界)にある場合、M-hはポイントの後ろに続くパラグラフの周囲にリージョンをセットします。パラグラフの最初の行の前に空行がある場合、その空行はリージョンに含まれます。 リージョンがすでにアクティブの場合、このコマンドはポイントを変更せずにマークをセットします。連続するM-hは、マークをパラグラフ単位で先にセットします。

パラグラフの定義はメジャーモードに依存します。Fundamentalモード、同様にTextモードとそれに関連するモードでは、パラグラフと、その隣接するパラグラフを分けるのは1行以上の空行 — 空の行、スペースとタブだけからなる行、およびそれらに改ページ文字がついた行 — です。プログラミング言語に関するモードでは、通常パラグラフは同じような方法で定義されるので、パラグラフがないプログラムなどにたいしても、パラグラフのコマンドを使うことができます。

Textモードでは、インデントされた行自体では、パラグラフの区切りにはならないことに注意してください。インデントされた行をパラグラフの分割に使用したい場合は、かわりにParagraph-Indent Textモードを使用します。Textモードを参照してください。

フィルプレフィクスをセットしている場合、フィルプレフィクスで始まっていないすべての行は、パラグラフの区切りとなります。テキストのフィルを参照してください。

パラグラフ境界の正確な定義は、変数paragraph-separateおよびparagraph-startにより制御されます。paragraph-startの値には、パラグラフを開始または分割する行にマッチする正規表現を指定します。paragraph-separateの値には、パラグラフの一部とならないような、パラグラフを分割する行にマッチする正規表現を指定します。新しいパラグラフを開始するパラグラフに含まれる行は、paragraph-startにはマッチしますが、paragraph-separateにはマッチしません。たとえばFundamentalモードでは、paragraph-start"\f\\|[ \t]*$"paragraph-separate"[ \t\f]*$"です。

paragraph-startparagraph-separateはテキストの左マージンにマッチしますが、行頭である必要はないので、パラグラフ関数がマージンのセッティングに応じてテキストリージョン内で同じように確実に機能させるために、これらのregexpに‘^’を使用するべきでないことに注意してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.4 ページ

改ページ文字(formfeed character: ASCIIコード12で、‘control-L’とも表示されます)でページに分割されているものがあり、Emacsではそれらがエスケープシーケンス‘^L’で表示されます(テキストが表示される方法を参照してください)。伝統的には、そのようなテキストファイルのハードコピーを印刷する場合、各改ページ文字で改ページされます。ほとんどのEmacsコマンドは、この文字をほかの文字と同様に扱うので、C-q C-lで挿入して、DELで削除などができます。それに加えて、Emacsはページ単位の移動や操作を行うコマンドを提供します。

M-x what-page

ポイント位置のページ番号と、ページ内での行番号を表示します。

C-x [

前のページ境界にポイントを移動します(backward-page)。

C-x ]

次のページ境界にポイントを移動します(forward-page)。

C-x C-p

現在のページ(または他のページ)の周囲に、ポイントとマークを配します(mark-page)。

C-x l

現在のページの行数を数えます(count-lines-page)。

M-x what-pageは、ファイルの先頭から数えたページ数と、そのページの行数をエコーエリアに表示します。

C-x [ (backward-page)コマンドは、前のページ区切りの直後にポイントを移動します。ポイントがすでにページ区切りの直後にある場合は、そのページ区切りをスキップして、その前のページ区切りに移動します。数引数は繰り返し回数を指定します。C-x ] (forward-page)コマンドは、次のページ区切りに前方に移動します。

C-x C-p (mark-page)コマンドは、ポイントを現在のページの先頭(ページの先頭に隣接するページ区切りの後ろ)、マークをページの最後(ページの最後に隣接するページ区切りの後ろ)に配します。

C-x C-p C-wは、ページを他の場所に移動するためにkillする便利な方法です。C-x [またはC-x ]で他のページへ移動して、そこにkillされたページをyankすれば、すべてのページは再び適切に区切られます。C-x C-pのリージョンに後続のページ区切りだけが含まれるのは、これが期待したよう確実に機能させるためです。

C-x C-pに数引数を指定すると、現在のページから数えて何ページ目に移動するかを指定します。0は現在のページ、1は次のページ、-1は前のページを意味します。

C-x l (count-lines-page)コマンドは、ページをどこで2つに分割するかの良い指標になります。これは現在のページの全行数と、カレント行の前にある行数と、後ろにある行数を以下のように表示します。

Page has 96 (72+25) lines

合計が1少ないのに注意してください。これはポイントが行の先頭にない場合は正しくなります。

変数page-delimiterは、ページがどこで始まるかを制御します。この値にはページを分割する行の先頭にマッチする正規表現を指定します(正規表現の構文を参照してください)。この変数の値は通常"^\f"で、これは行の先頭の改ページ文字にマッチします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.5 クォーテーションマーク

テキストをクォートするための一般的な方法の1つは、typewriter convention(タイプライター方式)です。これは'like this'のようなstraight apostrophesによるクォートや、"like this"のようなダブルクォートを使用します。別の一般的な方法としてはcurved quote convention(曲クォート方式)があります。これは‘like this’や‘`like thi”のように、左右のシングルクォーテーションマークやダブルクォーテーションマークを使用します。11テキストファイルにおいては、typewriter quotesはシンプルで可搬性があり、curved quotesはあいまいさが少なく見栄えもよくなります。

Electric Quoteモードにより、curved quotesをタイプするのが簡単になります。オプションでタイプした文字`'``''に変換します。このデフォルトのクォートリストは、変数electric-quote-charsをカスタマイズして変更できます。値には左シングルクォート、右シングルクォート、左ダブルクォート、右ダブルクォートに対応する、4つの文字からなるリストを指定します。デフォルト値は'(? ? ? ?)です。

Electric Quoteモードは、このモードをどこでアクティブにするかを制御する変数を通じて、カスタマイズできます。electric-quote-paragraphが非nilの場合、テキストパラグラフ内でアクティブになります。electric-quote-commentが非nilの場合、プログラミング言語のコメント内でアクティブになります。electric-quote-stringが非nilの場合、プログラミング言語の文字列定数内でアクティブになります。デフォルトでは、electric-quote-stringnilで、それ以外の変数がtです。

オプションelectric-quote-replace-doubleを非nil値にセットすることもできます。その場合には"とタイプすることにより、コンテキストに応じて適切なcurved double quoteが挿入されます。バッファー先頭や行ブレーク、空白、開カッコ、クォート文字の後には、それ以外ならが挿入されます。

Electric Quoteモードはデフォルトで無効になっています。これを単一のバッファーで切り替えるにはM-x electric-quote-local-mode、グローバルに切り替えるにはM-x electric-quote-modeとタイプします。1回だけこれを抑制したいときは、`'のかわりに、C-q `C-q 'を使用します。Electric Quoteモードが無効または非アクティブのときにcurved quoteを挿入する場合、『』はC-x 8 [、『』はC-x 8 ]、『』はC-x 8 {、『』はC-x 8 }とタイプします。テキストの挿入を参照してください。electric-quote-charsの値は、これらのキーバインドには影響を与えないことに注意してください。これらの値はelectric-quote-modeのキーバインドではなく、global-mapのバインドのためのものです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.6 テキストのフィル

テキストをフィル(fill)するとは、指定した幅に収まるように行を分割することを意味します。Emacsはフィルを2つの方法で行います。Auto Fillモードでは、自己挿入文字によるテキストの挿入で、自動的にフィルされます。テキストを編集するときに使用できる、明示的なフィルコマンドもあります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.6.1 Auto Fillモード

Auto Fillモードは行が長くなりすぎたときにSPCRETをタイプすると行を自動的に分割する、バッファーローカルなマイナーモード(マイナーモードを参照)です。

M-x auto-fill-mode

Auto Fillモードを有効または無効にします。

SPC
RET

Auto Fillモード中は、適切なときに行を分割します。

モードコマンドM-x auto-fill-modeは、カレントバッファーのAuto Fillモードを切り替えます。他のマイナーモードと同様、正の数引数はAuto Fillモードを有効にし、負の引数は無効にします。特定のメジャーモードでAuto Fillモードを自動的に有効にするには、モードフックにauto-fill-modeを追加します(メジャーモードを参照してください)。Auto Fillモードが有効なときは、モードラインにモード指標の‘Fill’が表示されます(モードラインを参照してください)。

Auto Fillモードは行が望ましい幅より長くなったときに、適切な位置で自動的に行を分割します。行分割はSPCRETをタイプしたときだけ発生します。行の分割をさせずにスペースまたは改行を挿入したいときは、C-q SPCまたはC-q C-jとタイプします。C-oも行の分割を発生させずに改行を挿入します。

Auto Fillが行ブレークする位置は、その行にある文字に依存します。ASCIIに由来する文字、ラテン文字、および他のほとんどのスクリプトでは、単語を損なわないようにEmacsはスペース文字で行を分割します。しかしCJKスクリプトでは、行は任意の2文字間での分割があり得ます(kinsokuライブラリーをロードしていれば、Emacsは特別な規則が行ブレークを抑止するような位置における、特定のCJK文字ペアー間での行分割を避けるだろう)。

Auto Fillモードが行を分割するときは、適応型フィルプレフィクス(adaptive fill prefix)にしたがうよう試みます。フィルプレフィクスがカレントパラグラフの最初の1行目、および/または2行目で推論できる場合、そのフィルプレフィクスは新しい行に挿入されます(適応型フィルを参照してください)。そうでない場合、新しい行はその行でTABをタイプしたかのようにインデントされます(インデントを参照してください)。プログラミング言語に関するモードでは、行がコメントの途中で改行された場合、新しいコメント区切りが適切に挿入されてコメントが分割されます。

Auto Fillモードはパラグラフ全体を再フィルしません。これは行の分割はしますが、行のマージはしません。したがって、パラグラフの途中を編集しているときは、適切にフィルされていないパラグラフがあり得ます。これをフィルするには、フィルコマンドを明示的に呼び出してください (明示的なフィルコマンドを参照してください)。

長い行を表示時に折り返す類似機能としてVisual Lineモードがあります(Visual Lineモードを参照)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.6.2 明示的なフィルコマンド

M-q

カレントパラグラフをフィルします(fill-paragraph)。

C-x f

フィルの列幅をセットします(set-fill-column)。

M-x fill-region

リージョンの各パラグラフをフィルします(fill-region)。

M-x fill-region-as-paragraph

リージョンを1つのパラグラフとしてフィルします。

M-o M-s

行を中央に揃えます。

コマンドM-q (fill-paragraph)は、カレントのパラグラフをフィルします。このコマンドは特定の最大列幅に適合するような方法で、パラグラフの改行を再配分して、パラグラフの余分なスペースやタブ文字を削除します。Auto Fillモードのように、このコマンドや他のフィルコマンドは通常はスペース文字で行ブレークしますが、CJK文字にたいしてはこれらのコマンドはほとんどすべての2文字間で行を分割でき、禁則処理にしたがうこともできます。Auto Fillモードを参照してください。

M-qは通常、ポイントがあるパラグラフに作用しますが、ポイントがパラグラフの間にあるときは、ポイントの後ろのパラグラフに作用します。リージョンがアクティブの場合、かわりにリージョンのテキストに作用します。M-x fill-regionを呼び出して、リージョンのテキストを明確にフィルすることもできます。

M-qおよびfill-regionは、パラグラフの境界を探すために、通常のEmacsの条件式を使用します。より細かく制御するには、ポイントとマークの間にあるすべてを1つのパラグラフとして再フィルする、M-x fill-region-as-paragraphを使用することができます。このコマンドはリージョンの空行を削除するので、分割されたテキストブロックは、1つのブロックに結合されます。

M-qに数引数を指定した場合、これはテキストのフィルと同時に割付(justify)も指示します。これは行の右端が正確にフィル列になるように、余分なスペースが挿入されることを意味します。余分なスペースを削除するには、引数を指定せずにM-qを使用します(fill-regionと同じ)。

フィルのための行の最大幅は、バッファーローカルな変数fill-columnにより指定されます。デフォルト値は70です(ローカル変数を参照してください)。カレントバッファーのfill-columnをセットする一番簡単な方法は、コマンドC-x f (set-fill-column)を使用する方法です。数引数を指定すると、それを新しいフィル列として使用します。C-uだけを指定すると、このコマンドは現在のポイントの水平位置をfill-columnにセットします。

コマンドM-o M-s (center-line)は、現在のフィル列でカレント行を中央に揃えます。数引数nを指定すると、nを中央に揃えた後、ポイントを先に移動します。このバインディングはTextモードのためのもので、利用可能なのはTextモードとそれに関連するモードだけです(Textモードを参照してください)。

デフォルトでは、Emacsは2つのスペースまたは改行が後にあるピリオドを、センテンスの終わりと判断します。後に1つのスペースしかないピリオドは、センテンスの終わりではなく、省略形を示します。それに合わせて、フィルコマンドも後に1つのスペースしかないピリオドでは、行を分割しません。変数sentence-end-double-spacenilにセットした場合、フィルコマンドは後に1つのスペースしかないピリオドでも行を分割するようになり、各ピリオドの後に1つのスペースを配すようになります。他の効果とこの方法の欠点については、センテンスを参照してください。

変数colon-double-spaceが非nilの場合、フィルコマンドはコロンの後に2つのスペースを配します。

行分割を許さない場所の条件を追加で指定するには、アブノーマルフック変数fill-nobreak-predicateをカスタマイズします(フックを参照してください)。このフックの各関数はEmacsが行を分割すべきと判断する位置で引数なしで呼び出されます。関数が非nil値を返した場合には、Emacsはその位置で行を分割しません。このフックに指定できる関数にはfill-single-word-nobreak-p (センテンスの最初の単語の後ろ、および最後の単語の前では分割しません)、fill-single-char-nobreak-p (空白文字が前置された1文字の単語の後ろでは分割しません)、fill-french-nobreak-p (‘(’の後ろ、および‘)’、‘:’、‘?’の前では分割しません)、fill-polish-nobreak-p (非空白文字が前置された1文字の単語の後ろでも分割しません)が含まれます。

EmacsはDisplay fill column indicatorモード(display-fill-column-indicatorを参照)を使用することによってfill-columnの位置にインジケーターを表示できます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.6.3 フィルプレフィクス

フィルプレフィクス(fill prefix)機能により、フィルされるパラグラフの各行が、特別な文字列(インデントされたパラグラフの行頭につける複数のスペースなど)で開始されるようになります。フィルプレフィクスを明示的に指定することができます。明示的に指定しない場合、Emacsは自動的にそれを推測することを試みます(適応型フィルを参照してください)。

C-x .

フィルプレフィクスをセットします(set-fill-prefix)。

M-q

現在のフィルプレフィクスで、パラグラフをフィルします(fill-paragraph)。

M-x fill-individual-paragraphs

リージョンをフィルします。インデントの変化は、新しいパラグラフの開始と判断されます。

M-x fill-nonuniform-paragraphs

リージョンをフィルします。パラグラフを分割する行だけを、新しいパラグラフの開始と判断します。

カレントバッファーのフィルプレフィクスを指定するには、使用したいフィルプレフィクスで開始される行に移動して、プレフィクスの最後にポイントを配し、C-x . (set-fill-prefix)とタイプします(C-xの後にピリオドです)。フィルプレフィクスをオフに切り替えるには、ポイントを行の先頭に移動してC-x .とタイプして、空のフィルプレフィクスを指定します。

フィルプレフィクスの効果がある間、フィルコマンドはフィルを行う前にパラグラフの各行のフィルプレフィクスを削除して、フィルを行った後で各行にフィルプレフィクスを挿入します(パラグラフの最初の行は変更されずに残ります。これは他の行と異なるように意図されていることがよくあるからです)。Auto Fillモードは、新しい行を作成するときにフィルプレフィクスの自動的な挿入も行います(Auto Fillモードを参照してください)。C-oコマンドは、行の先頭で使用したときは、新しい行を作成してフィルプレフィクスを挿入します。コマンドM-^は逆に、削除する改行の後ろにフィルプレフィクスがあれば、プレフィクスを削除します。

たとえばfill-columnが50で、フィルプレフィクスが‘;; ’の場合、以下のテキストにたいしてM-qを行うと、

;; This is an
;; example of a paragraph
;; inside a Lisp-style comment.

結果は以下のようになります:

;; This is an example of a paragraph
;; inside a Lisp-style comment.

M-qおよびパラグラフのコマンドは、フィルプレフィクスで開始されない行を、パラグラフの開始と判断します。これは、最初の行を除く各行がインデントされている形式のパラグラフにたいして、良い結果を与えます。空行、またはプレフィクスが削除されたインデントされた行も、パラグラフを分割または開始します。これは各行にコメント区切りがある、複数パラグラフにわたるコメントを記述するときに望ましいものです。

M-x fill-individual-paragraphsを使用して、各パラグラフに自動的にフィルプレフィクスをセットできます。このコマンドはリージョンをパラグラフに分割して、インデントの変化を新しいパラグラフの開始として扱い、それらのパラグラフをフィルします。したがって1つのパラグラフのすべての行は、同じ量のインデントをもちます。このインデントは、そのパラグラフにたいするフィルプレフィクスの役目を果たします。

M-x fill-nonuniform-paragraphsも同様なコマンドですが、別の方法でリージョンをパラグラフに分割します。このコマンドは、(paragraph-separateで定義される)パラグラフ開始行だけを、新しいパラグラフの開始と判断します。これは1つのパラグラフの各行は異なる量のインデントをもつことを想定しており、パラグラフの中で最小のインデント量をフィルプレフィクスに使用します。このコマンドは最初の行のインデントが、パラグラフの他の行より少なくても多くても、良い結果をもたらします。

フィルプレフィクスは、変数fill-prefixに保存されます。変数の値は文字列で、フィルプレフィクスがないときはnilです。これはバッファーごとの変数です。変数の変更はカレントバッファーだけに影響しますが、変更できるデフォルト値も存在します。ローカル変数を参照してください。

テキストプロパティーindentationは、パラグラフのインデント量を制御する別の方法を提供します。Enrichedテキストのインデントを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.6.4 適応型フィル

フィルコマンドは、特定なケースでは自動的に適切なフィルプレフィクスを推測できます。空白文字または特定の区切り文字が行の先頭にあり、それがパラグラフの全行に適用されている場合です。

パラグラフに2行以上の行がある場合は、2行目からフィルプレフィクスが取得されますが、それは1行目にもそれが存在する場合だけです。

パラグラフに1行しかない場合、フィルコマンドは、その行からフィルプレフィクスを取得するかもしれません。この決定は複雑です。なぜならそのような場合に妥当な、3つの選択肢があるからです。

これら3つの書式スタイルは一般的に使用されているものです。そのためフィルコマンドは、そのメジャーモードに出現するプレフィクスにもとづいて、望ましいスタイルを決定しようと試みます。判断基準は以下のとおりです。

最初の行で見つかったプレフィクスがadaptive-fill-first-line-regexpにマッチするか、それがコメント開始シーケンス(メジャーモードに依存します)の場合、見つかったプレフィクスをパラグラフのフィルに使用しますが、それは後続の行でそれらがパラグラフの開始として振る舞わない場合に限られます。

上記以外の場合、見つかったプレフィクスは同じ量のスペースに変換され、それらのスペースは残りの行のフィルプレフィクスとして使用されますが、それは後続の行でそれらがパラグラフの開始として振る舞わない場合に限られます。

Textモード、および空行またはページ区切りだけがパラグラフを分割するモードでは、適応型フィルにより選択されるプレフィクスは、パラグラフの開始として振る舞わないので、常にフィルに使用できます。

変数adaptive-fill-regexpは、どのような行開始がフィルプレフィクスの役目を果たすかを決定します。行がこの正規表現にマッチする文字で開始されるとき、プレフィクスとして使用されます。変数adaptive-fill-modenilにセットした場合、フィルプレフィクスは自動的に選択されません。

変数adaptive-fill-functionに関数をセットすることにより、より複雑な方法で自動的にフィルプレフィクスを選択する方法を指定できます。この関数は行の左端の直後のポイントで呼び出され、その行にもとづいた適切なフィルプレフィクスを返すべきです。この関数がnilを返した場合、adaptive-fill-regexpがフィルプレフィクスを見つける機会を与えられます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.7 大文字小文字変換コマンド

Emacsには、1つの単語または任意の範囲のテキストを、大文字または小文字に変換するコマンドがあります。

M-l

後続の単語を小文字に変換します(downcase-word)。

M-u

後続の単語を大文字に変換します(upcase-word)。

M-c

後続の単語の先頭の文字を大文字に変換します(capitalize-word)。

C-x C-l

リージョンを小文字に変換します(downcase-region)。

C-x C-u

リージョンを大文字に変換します(upcase-region)。

M-l (downcase-word)は、ポイントの後ろの単語を小文字に変換して、その先にポイントを移動します。したがって、M-lを繰り返すと、単語を連続して変換します。M-c (capitalize-word)は、単語の最初の文字を大文字にして残りを小文字にしますが、M-u (upcase-word)はすべての文字を大文字に変換します。これらのコマンドはすべて、引数を与えると複数の単語を変換します。これらのコマンドはすべてが大文字の大きなテキストを、これらが混成されたものに変換するとき、特に有用です、なぜなら適切にM-lM-uM-cを使い分けて単語を変換しながら移動できるからです(変換が不要なときはM-fを使ってその単語をスキップします)。

負の引数を与えると。ポイントの前の指定した数の単語にたいして、大文字小文字の変換を適用しますが、ポイントは移動しません。これは大文字小文字を間違えてタイプしたとき有用です。大文字小文字の変換コマンドを実行した後、そのまま編集を続けられるからです。

単語の途中で単語の大文字小文字を変換するコマンドが与えられた場合、ポイントの後ろに続く単語の一部だけに変換が適用されます(これはM-d (kill-word)と互換性があります)。負の引数の場合は、ポイントの前にある単語の一部が変換されます。

他の大文字小文字の変換コマンドはC-x C-u (upcase-region)とC-x C-l (downcase-region)で、これらはポイントとマークの間にあるすべてのテキストを大文字または小文字に変換します。ポイントとマークは移動しません。

リージョンにたいする大文字小文字の変換コマンドupcase-regionおよびdowncase-regionは、通常では無効になっています。これは、これらを使おうと試みたとき、確認を求められることを意味します。確認にたいして同意するとコマンドが有効になり、それ以降は確認を求められなくなることを意味します。コマンドの無効化を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.8 Textモード

Textモードは、人間の言語のテキストファイルを編集するためのメジャーモードです。.txtという拡張子で終わる名前のファイルは、通常はTextモードで開かれます。明示的にTextモードに切り替えるには、M-x text-modeとタイプしてください。

Textモードでは、改行とページ区切りだけがパラグラフを分割します。結果として、パラグラフはインデントすることができ、適応型フィルはパラグラフをフィルするときに、どのインデントが使用されているか決定します。適応型フィルを参照してください。

TextモードではTAB (indent-for-tab-command)コマンドは通常、カレント行をインデントするかわりに、次のタブストップまで空白文字を挿入します。詳細については、インデントを参照してください。

Textモードは、明示的にそれらを呼び出した場合をのぞき、コメントに間する機能をオフに切り替えます。これは構文テーブル(syntax table)を変更するので、アポストロフィーは単語の一部と判断されます(たとえば‘don't’は1つの単語と判断されます))。しかし単語がアポストロフィーで開始される場合、それは先頭の文字を大文字にするためのプレフィクスとして扱われます(たとえばM-cにより、‘'hello'’は‘'Hello'’に変換されます)。

パラグラフの最初の行をインデントしている場合は、TextモードではなくParagraph-Indent Textモード(M-x paragraph-indent-text-mode)を使用するべきでしょう。このモーででは、パラグラフの間に空行を入れる必要はありません。最初の行のインデントだけでパラグラフの開始を判断するのに充分だからです。しかしパラグラフのすべての行がインデントされている場合は、サポートされません。メジャーモードを変更したくないとき(たとえばメール作成時など)は、M-x paragraph-indent-minor-modeを使って、等価なマイナーモードを有効にしてください。

Textモードでは、M-TABispell-complete-wordにバインドされます。このコマンドはバッファーのポイントの前にある単語を、スペル辞書を使用して補完します。スペルのチェックと訂正を参照してください。ウィンドウマネージャーがM-TABをウィンドウの切り替えに定義している場合は、かわりにESC TABまたはC-M-iとタイプすることができます。

Textモードに入ると、モードフックtext-mode-hookが実行されます(メジャーモードを参照してください)。

以下のセクションでは、Textモードから派生したいくつかのメジャーモードを説明します。派生したモードは、上記で説明したTextモードのほとんどの機能を継承します。とくに、Textモードから派生したモードは、それら自身のモードフックの前に、text-mode-hookを実行します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.9 Outlineモード

OutlineモードはTextモードから派生したメジャーモードで、アウトライン(outline: 概略、概要、要綱)を編集するために特化したモードです。このモードはアウトライン構造のエントリー間を操作したり、バッファーの一部を一時的に非表示にするコマンドを提供するので、アウトライン構造をより簡単に閲覧することができるでしょう。M-x outline-modeとタイプすることにより、Outlineモードに切り替わります。Outlineモードに入ることにより、フックtext-mode-hook、およびそれに続けてフックoutline-mode-hookが実行されます(フックを参照してください)。

Outlineモードで行を非表示にするコマンド(アウトライン表示コマンドを参照してください)を使用した場合、それらの行は画面に表示されなくなります。非表示行の前にある表示された行の後ろには省略記号(3つのピリオド)が表示され、そこに隠れたテキストがあることを示します。連続する複数の行を非表示にした場合も、省略記号は1つだけです。

C-nC-pのような、複数の行にたいして操作を行う編集コマンドは、非表示の行のテキストを、その前にある表示された行の一部として扱います。表示された行の最後にある省略記号をkillすると、省略記号に対応する後続のすべての非表示テキストを実際にkillします。

Outline minorモードは、メジャーモードであるOutlineモードと同じコマンドを提供する、バッファーローカルなマイナーモードで、他のメジャーモードと合わせて使うことができます。M-x outline-minor-modeとタイプして、カレントバッファーにたいしてOutline minorモードを切り替えることができます。ファイルローカル変数のセッティングを使用して、特定のファイルにたいして有効にすることもできます(ファイル内のローカル変数を参照してください)。

メジャーモードのOutlineモードは、C-cプレフィクスで特別なキーバインディングを提供します。Outline minorモードは、C-c @プレフィクスで同様なバインディングを提供します。これは他のメジャーモードの特別なコマンドとの競合を減らすためです(変数outline-minor-mode-prefixは、使用するプレフィクスを制御します)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.9.1 アウトラインのフォーマット

Outlineモードは、バッファーの行には2つのタイプがあると仮定します。それはヘッダー行(heading lines)ボディー行(body lines)です。ヘッダー行はアウトラインのトピックを表します。ヘッダー行は1つ以上のアスタリスク文字(‘*’)で開始されます。アスタリスクの数はアウトライン構造でのヘッダーの深さを決定します。したがって1つの‘*’がついたトピックは、メジャーなトピックになります。このヘッダーと、次の‘*’が1つのヘッダーの間にある、‘*’が2つのヘッダー行は、そのヘッダーのサブトピックです。ヘッダー行ではないすべての行はボディー行です。ボディー行は、それの前にあるヘッダー行に属します。以下は例です:

* Food
This is the body,
which says something about the topic of food.

** Delicious Food
This is the body of the second-level header.

** Distasteful Food
This could have
a body too, with
several lines.

*** Dormitory Food

* Shelter
Another first-level topic with its header line.

ヘッダー行とそれに属するすべてのボディー行を合わせて、エントリー(entry)と呼びます。ヘッダー行と、その配下にあるすべてのヘッダー行、それらすべてのボディー行を、サブツリー(subtree)と呼びます。

ヘッダー行と判別する条件は、変数outline-regexpをセットすることによりカスタマイズできます(これを行う推奨された方法は、メジャーモードの関数を使うか、ファイルローカル変数を使う方法です)。行の開始がこのregexpにマッチする行は、ヘッダー行と判断されます。(行の左端ではなく)行の途中でのマッチは勘定に入りません。

テキストにたいするマッチの長さは、ヘッダーのレベルを決定します。長いマッチは、より深くネストされたレベルとなります。‘@chapter’、‘@section’、‘@subsection’というコマンドが、ドキュメントをチャプター、セクション、サブセクションに分割するようなテキストフォーマッターがある場合(訳注: texinfo形式のこと)、outline-regexpに‘"@chap\\|@\\(sub\\)*section"’をセットすることにより、それらの行をヘッダー行と判断させることができます。ここでトリックに注意してください。2つの単語‘chapter’と‘section’は同じ長さです。しかしregexp‘chap’だけにマッチするように定義することによって、チャプターのヘッダーにマッチするテキストの長さを短くすることができるので、Outlineモードはセクションがチャプターの配下であることを知ることができます。これは‘@chap’で始まるコマンドが他にない場合に限り機能します。

変数outline-levelをセットすることにより、ヘッダー行のレベルを計算するためのルールを明示できに指定できます。outline-levelの値には、引数をとらないカレントヘッダーのレベルを返す関数を指定します。この変数をセットする推奨された方法は、メジャーモードのコマンドを使うか、ファイルローカル変数を使用する方法です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.9.2 アウトライン移動コマンド

Outlineモードはヘッダー行を後方または前方に移動する、特別な移動コマンドを提供します。

C-c C-n

ポイントを次の可視なヘッダー行に移動します(outline-next-visible-heading)。

C-c C-p

ポイントを前の可視なヘッダー行に移動します(outline-previous-visible-heading)。

C-c C-f

ポイントを同じレベルの、次の可視なヘッダー行に移動します(outline-forward-same-level)。

C-c C-b

ポイントを同じレベルの、前の可視なヘッダー行に移動します(outline-backward-same-level)。

C-c C-u

ポイントを、より低い(より包括的な)レベルの可視のヘッダー行に移動します(outline-up-heading)。

上記のコマンドはすべて、繰り返し回数として数引数を受け取ります。たとえば、C-c C-fに引数を与えると、その数だけ前方の可視なヘッダー行と同じレベルに移動し、C-c C-uに引数を与えると、ネストされたレベルをその数のレベル抜け出して移動します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.9.3 アウトライン表示コマンド

Outlineモードには、アウトライン構造にもとづいてバッファーの一部を一時的に非表示にしたり可視にするコマンドが、いくつかあります。これらのコマンドはアンドゥ可能ではありません。コマンドの効果は単純にアンドゥメカニズムに記録される訳ではありませんが、それらを実行した直後に限りアンドゥできます(Undo(取り消し)を参照してください)。

これらのコマンドは、カレントのヘッダー行に作用します。ポイントがヘッダー行にある場合、それがカレントのヘッダー行です。ポイントがボディー行にある場合、カレントヘッダー行は一番近くの前にあるヘッダー行です。

C-c C-c

カレントヘッダー行のボディーを非表示にします(outline-hide-entry)。

C-c C-e

カレントヘッダー行のボディーを可視にします(outline-show-entry)。

C-c C-d

カレントヘッダー行の配下のすべて(ヘッダー行自身は含まれません)を非表示にします(outline-hide-subtree)。

C-c C-s

カレントヘッダー行の配下のすべて(ボディー、サブヘッダーおよびそのボディーを含む)を可視にします(outline-show-subtree)。

C-c C-l

カレントヘッダー行のボディーと、すべてのサブヘッダーを非表示にします(outline-hide-leaves)。

C-c C-k

カレントヘッダー行のサブヘッダーをすべてのレベルで可視にします(outline-show-branches)。

C-c C-i

カレントヘッダー行の一番近いサブヘッダー(1レベル下)を可視にします(outline-show-children)。

C-c C-t

バッファーのすべてのボディー行を非表示にします(outline-hide-body)。

C-c C-a

バッファーのすべての行を可視にします(outline-show-all)。

C-c C-q

上位nレベルのヘッダー行を除き、すべてを非表示にします(outline-hide-sublevels)。

C-c C-o

ポイントのあるヘッダー行またはボディー行と、そこから最上位までのレベルにあるヘッダーを除き、すべてを非表示にします(outline-hide-other)。

これらのコマンドのうち、カレントヘッダー行に直接続くボディー行を非表示にするC-c C-c (outline-hide-entry)と、それらを可視にするC-c C-e (outline-show-entry)が一番簡単なコマンドです。サブヘッダーとそれらのボディーは影響を受けません。

コマンドC-c C-d (outline-hide-subtree)およびC-c C-s (outline-show-subtree)は、より強力です。これらはカレントヘッダー行のサブツリー — つまりカレントヘッダー行のボディーと、すべての直接または間接のサブヘッダーとそのボディー — に適用されます。

コマンドC-c C-l (outline-hide-leaves)は、カレントヘッダー行のボディーと、サブツリーのボディーをすべて非表示にします(サブヘッダー自身は表示されます)。コマンドC-c C-k (outline-show-branches)は、(たとえばC-c C-d)などで)前に非表示にされたサブヘッダーを可視にします。コマンドC-c C-i (outline-show-children)はこれの穏やかなバージョンで、直接的なサブヘッダー(たとえば1レベル下のサブヘッダー)を可視にします。

コマンドC-c C-o (outline-hide-other)は、ポイントのあるエントリーと、その祖先(アウトライン構造上でそこから最上位レベルに至るまでのヘッダー)、およびトップレベルのヘッダーを除き、すべてを非表示にします。このコマンドは、そのバッファーの最初のヘッダーの前のボディー行も表示します。

残りのコマンドは、バッファー全体に作用するコマンドです。C-c C-t (outline-hide-body)はすべてのボディー行を非表示にするので、アウトライン構造だけを見ることができます(特別な例外として、ファイルの最初にあるヘッダー行より前の行は、技術的に言うとボディー行ですが、これらは非表示になりません)。C-c C-a (outline-show-all)はすべての行を可視にします。C-c C-q (outline-hide-sublevels)は、カレントのヘッダー行(ポイントがヘッダー行にないときのデフォルトは1行目)の位置、またはその上にある最上位のヘッダーを除き、すべてを非表示にします。数引数nを指定すると、上位nレベルのヘッダー行を除き、すべてを非表示にします。この場合、上位nレベルと、最初のヘッダーの前のボディー行が表示されることに注意してください。

インクリメンタル検索が、Outlineモードにより非表示にされたテキストを検索したとき、検索された部分のバッファーは可視になります。その位置で検索を抜けると、テキストは可視のまま残ります。アクティブなインクリメンタル検索が、非表示のテキストにマッチするかを切り替えるには、M-s iとタイプします。将来の検索にたいしてデフォルトを変更するには、オプションsearch-invisibleをカスタマイズします(このオプションはquery-replace、および関連する機能が非表示のテキストを扱う方法に影響を与えます。問い合わせつき置換を参照してください)。バッファーローカルなマイナーモードRevealモード(M-x reveal-mode)を使用して、操作にしたがって自動的にテキストを可視にもできます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.9.4 複数ビューによるアウトラインの閲覧

1つのアウトラインを同時に2つのビューで、別のウィンドウで表示することができます。これを行うには、M-x make-indirect-bufferを使ってインダイレクトバッファーを作らなければなりません。このコマンドの最初の引数は既存のアウトラインバッファーの名前で、2番目の引数は新しくインダイレクトバッファーとして使用する名前です。インダイレクトバッファーを参照してください。

1度インダイレクトバッファーが作成されると、C-x 4 bや他のEmacsコマンドで、通常のやり方でウィンドウにそれを表示できます。テキストの一部を可視にしたり非表示にするOutlineモードのコマンドは、それぞれのバッファーで独立したエントリーを操作し、それぞれのバッファーは独自のビューをもつことができます。同じアウトラインにたいして2つ以上のビューが欲しいときは、追加でインダイレクトバッファーを作成します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.9.5 折り畳み編集

Foldoutパッケージは、OutlineモードおよびOutline minorモードを、フォールディング(folding: 折り畳み)コマンドで拡張します。フォールディングのアイデアは、アウトラインのネストされた部分にたいして、それに関連する部分と、より高いレベルが非表示のときに、それにズームインするというものです。

すべてのテキストと、レベル1より下のレベルが非表示になっているOutlineモードのバッファーを考えてください。それらのヘッダーの下に何が隠れているか見るには、C-c C-e (M-x outline-show-entry)でボディーを可視にするか、C-c C-iでその子ヘッダー(レベル2)を可視にすることができます。

Foldoutでは、C-c C-z (M-x foldout-zoom-subtree)を使います。これはそのヘッダーのボディーと、その子サブヘッダーを可視にして、バッファーをナローイングするので、レベル1にヘッダーとボディー、それにレベル2のヘッダーだけが可視になります。そのうちの1つのレベル2ヘッダーの下を見るには、カーソル位置をそのヘッダーに移動して、もう一度C-c C-zを使用します。これにより、そのレベル2ヘッダーのボディーと、レベル3の子サブヘッダーが可視になり、バッファーが再びナローイングされます。連続して好きなだけサブヘッダーをズームインすることができます。モードラインの文字列には、今どの深さにいるのかが表示されます。

ヘッダーにズームインしているときに、それらの子サブヘッダーを見るにはC-u C-c C-zのように数引数を指定します。何レベル下の子かを指定することもできます(M-x outline-show-childrenに相当します)。たとえばM-2 C-c C-zは2レベルの子サブヘッダーを可視にします。ボディーを指定するにはM-- C-c C-zのように負の引数を指定します。C-c C-s (M-x outline-show-subtree)のようにサブツリー全体を展開するには、M-0 C-c C-zのように引数に0を指定します。

ズームインしている時でも、Outlineモードの表示および非表示の関数は、Foldoutに干渉せずに使用できます。バッファーがナローイングされているので、グローバルな編集操作は、ズームインされたヘッダーのテキストだけに影響します、これは特定のチャプターやセクションに変更を限定するのに便利です。

フォールドのズームを取り消す(抜ける)には、C-c C-x (M-x foldout-exit-fold)を使用します。これは最上位レベルのヘッダーの配下のすべてのテキストと、サブヘッダーを非表示にして、バッファーの以前のビューに戻ります。数引数はフォールドを何レベル抜けるかを指定します。0を指定するとすべてのフォールドを抜けます。

テキストとサブヘッダーを非表示にせずに、フォールドのナローイングを取り消すには、負の引数を指定します。たとえば、M--2 C-c C-xは2つのフォールドを抜け出し、テキストとサブヘッダーは表示されたままにします。

Foldoutモードはフォールドへの出入りと、非表示のテキストを表示するためのマウスコマンドも提供します:

C-M-mouse-1でヘッダーをクリックするとズームインします。
C-M-mouse-2でヘッダーをクリックしたときは可視になります
C-M-mouse-3でヘッダーをクリックすると、ヘッダーの配下のテキストを非表示にするか、フォールドを抜けます

foldout-mouse-modifiersをセットすることにより、(Ctrl-Meta-のかわりに)他の修飾キーを指定できます。すでにfoldout.elライブラリーがロードされている場合、これが効果をもつために再ロードしなければなりません。

Foldoutパッケージを使用するには、M-x load-library RET foldout RETとタイプするか、initファイルに以下の行を記述して自動的にこれを行うことができます。

(with-eval-after-load "outline"
  (require 'foldout))

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.10 Orgモード

Orgモードは、Emacsをオーガナイザーおよび/またはオーサリングツールとして使用するための、Outlineモードの変種です。名前が拡張子.orgで終わるファイルは、Orgモードで開かれます(ファイルのモードを選択するを参照してください)。明示的にOrgモードに切り替えるには、M-x org-modeとタイプしてください。

Orgモードでは、Outlineモードのように、各エントリーは1つ以上の‘*’文字で始まるヘッダー行をもちます。アウトラインのフォーマットを参照してください。それに加えて、‘#’文字で始まる行は、コメントとして扱われます。

Orgモードは、簡単にアウトライン構造を眺めたり操作するためのコマンドを提供します。それらのコマンドのうち、一番簡単なのはTAB (org-cycle)です。ヘッダー行でこのコマンドを呼び出すと、サブツリーを — (i)ヘッダー行だけを表示 (ii)ヘッダー行と、(あれば)直接の子ヘッダー行だけを表示 (iii)サブツリー全体を表示 — の3つの異なる視点で巡回します。ボディー行にたいして呼び出された場合、TABにグローバルにバインドされたコマンドが実行されます。

Orgモードのバッファーの任意の場所で、S-TAB (org-shifttab)とタイプすることにより、アウトライン構造全体を — (i) 最上位ㇾベルのヘッダー行だけを表示 (ii)ボディー行を除いたすべてのヘッダー行を表示 (iii) すべてを表示 — の3つの異なる視点で巡回します。

ヘッダー行でM-<UP> (org-metaup)またはM-<DOWN> (org-metadown)とタイプすることにより、ボディー行と(あれば)サブツリーを含むバッファー内のエントリー全体を、上または下に移動できます。同様にM-<LEFT> (org-metaleft)およびM-<RIGHT> (org-metaright)で、ヘッダー行を昇格または降格できます。ボディー行で呼び出された場合は、それらのキーにグローバルにバインドされたコマンドが実行されます。

以下のサブセクションでは、オーガナイザーやオーサリングシステムとしてOrgモードを使用するための基本的な操作方法を解説します。詳細については、Introduction in The Org Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.10.1 オーガナイザーとしてのOrg

エントリー内のどこかでC-c C-t (org-todo)とタイプすることにより、そのOrgエントリーをTODOアイテムとして、タグ付けすることができます。これはヘッダー行にキーワード‘TODO’を追加します。もう一度C-c C-tをタイプするとキーワードは‘DONE’に切り替わり、さらにC-c C-tとタイプするとキーワード全体を除去します。C-c C-tで使用されるキーワードは、変数org-todo-keywordsを通じてカスタマイズすることができます。

エントリーをTODOとして作成する他に、エントリー内でC-c C-s (org-schedule)とタイプすることにより、日付を割り当てることができます。これはEmacs Calender(カレンダーとダイアリーを参照してください)をポップアップして日付の入力を求め、選択された日付と一緒に、ヘッダー行の下にタグ‘SCHEDULED’を追加します。コマンドC-c C-d (org-deadline)も、タグDEADLINEを使う以外は同じ効果をもちます。

1度Orgファイルに計画されたTODOアイテムをもつと、C-c [ (org-agenda-file-to-front)とタイプすることにより、アジェンダファイル(agenda files)のリストにそのファイルを追加できます。Orgモードは、たとえばあなたの生活のさまざまな側面をオーガナイズするために、複数のアジェンダファイルを簡単に保守できるようにデザインされています。アジェンダファイルのリストは、変数org-agenda-filesに格納されています。

アジェンダファイルのアイテムを閲覧するには、M-x org-agendaとタイプします。このコマンドは何を見たいのか、入力を求めます(今週に行なうすべての事項のリストか、特定のキーワードにマッチするTODOアイテムのリストか、など)。 詳細は、Agenda Views in The Org Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.10.2 オーサリングシステムとしてのOrg

Orgノートを見映えよくフォーマットしたり、エクスポートして公表したいと思うかもしれません。カレントバッファーをエクスポートするには、OrgバッファーのどこかでC-c C-e (org-export)とタイプします。このコマンドはエクスポートするフォーマットの入力を求めます。現在サポートされているフォーマットは、HTML、LaTeX、Texinfo、OpenDocument(.odt)、iCalendar、Markdown、man-page、PDFです。PDFのようないくつかのフォーマットは、システムに特定のツールがインストールされている必要があります。

1度に複数のファイルを特定のディレクトリー(ローカルまたはネットワーク越し)にエクスポートするには、変数org-publish-project-alistにプロジェクトのリストを定義しなければなりません。詳細はOrgのドキュメントを参照してください。

Orgはエクスポートされたドキュメントのテキストのフォーマットに適用する、シンプルなマークアップの仕組みをサポートします:

- This text is /emphasized/
- This text is *in bold*
- This text is _underlined_
- This text uses =a teletype font=

#+begin_quote
``This is a quote.''
#+end_quote

#+begin_example
This is an example.
#+end_example

詳細は、Exporting in The Org Manual、およびPublishing in The Org Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.11 TeXモード

TeXはDonald Knuthにより記述された強力なテキストフォーマッターで、GNU Emacsと同様、フリーなソフトウェアーです。TeXフォーマットにはいくつかの変種があります。LaTeXはTeXのための簡略化された入力フォーマットです。DocTeXはLaTeXソースが記述された特別なファイルフォーマットであり、ソースとドキュメントが合成されています。SliTeXは、時代遅れの特別なLaTeX形式です。12

Emacsは、それらの変種用にTeXのメジャーモードを提供します。それはPlain TeXモード、LaTeXモード、DocTeXモード、SliTeXモードです。Emacsはバッファーの内容を調べて、適切なモードを選択します(通常これはTeX様式のファイルをvisitしたときに自動的に呼び出されるtex-modeコマンドにより行われる。ファイルのモードを選択するを参照されたい)。ファイル内容がこれを決定するのに不十分な場合、Emacsはtex-default-modeに指定されたモードを選択します。デフォルト値はlatex-modeです。Emacsが間違った選択をしたときは、コマンドM-x plain-tex-modeM-x latex-modeM-x slitex-modedoctex-modeを使用して、正しいTeXモードの変種を選択できます。

以下のセクションでは、TeXモードとその変種の機能について記述しています。TeXに関連したモードは他にもいくつかありますが、このマニュアルには記述されていません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.11.1 TeX編集コマンド

"

コンテキストに応じて‘``’、‘"’、‘''’のどれかを挿入します(tex-insert-quote)。

C-j

パラグラフの区切り(2つの改行)を挿入して、前のパラグラフのバランスの取れていない大カッコ(braces)やドル記号をチェックします(tex-terminate-paragraph)。

M-x tex-validate-region

リージョン内のパラグラフの、バランスのとれていない大カッコやドル記号をチェックします。

C-c {

{}’を挿入して、ポイントをその間に配します(tex-insert-braces)。

C-c }

対応が取れていない、次の閉じ大カッコの後ろに、前方に移動します(up-list)。

TeXでは文字‘"’は通常使用されません。かわりに‘``’で始まり‘''’で終わる引用が使用されます。したがってTeXモードは"キーをtex-insert-quoteコマンドにバインドしています。これは空白文字または開き大カッコの後ろに‘``’、バックスラッシュの後に‘"’、それ以外の文字の場合は‘''’を挿入します。

特別な例外として、ポイントの前のテキストが‘``’か‘''’のときに"をタイプすると、Emacsは前のテキストを1つの"で置き換えます。したがって、必要がある時は""とタイプして‘"’を挿入できます(C-q "を使用してこの文字を挿入することもできます)。

TeXモードでは、‘$’は特別な構文コードを持っていて、それはTeXの数式モードの区切りを理解しようと試みます。数式モードを抜けるために‘$’を入力した場合、数式モードに入るための対応する‘$’の位置が1秒間表示されます。これは閉じ大カッコが挿入されたとき、それに対応する開き大カッコが表示されるのと同じき機能です。しかし‘$’が数式モードに入るためなのか、それとも抜けるためなのかを指示する方法はありません。したがって、もし対応するものがある場合、実際にはそれが関係なくても、前の‘$’の位置が表示されます。

TeXは大カッコを、対応が取れていなければならない区切りとして使用します。これを1つずつ挿入するより、つねに大カッコの対応が取られている方を好むユーザーもいます。C-c { (tex-insert-braces)を使うと、対になった大カッコを挿入します。これはポイントを2つの大カッコの間に配すので、中のテキストを挿入することができます。その後でコマンドC-c } (up-list)を使用すると、前方の閉じ大カッコの先に移動します。あるテキストをマークした後にC-c {を呼び出すこともでき、その場合このコマンドはマークされたテキストを大カッコで括ります。

対応の取れていない大カッコをチェックするコマンドが2つあります。C-j (tex-terminate-paragraph)は、ポイントの前のパラグラフをチェックして、新しいパラグラフを開始するための2つの改行を挿入します。対応が取れていないものが見つかった場合、エコーエリアにメッセージを出力します。M-x tex-validate-regionはリージョンを、パラグラフごとにチェックします。エラーは*Occur*バッファーにリストされます。そのバッファーでは、特定のミスマッチをvisitするC-c C-cなどの、通常のOccurモードのコマンドを使用できます(その他の検索およびループコマンドを参照してください)。

TeXのEmacsコマンドは大カッコだけではなく、角カッコ(square brackets)やカッコ(parentheses)などもカウントすることに注意してください。これはTeX構文をチェックする目的としては、厳密に正しいとは言えません。しかしカッコと角カッコはテキストの中で、同じような対応の取れた区切りとして使用され、さまざまな移動コマンドや、対応する区切りの表示が、それらにたいして機能するのは便利なのです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.11.2 LaTeX編集コマンド

LaTeXモードは、plain TeXには適用できない特別な機能をいくつか提供します:

C-c C-o

LaTeXブロックのための‘\begin’と‘\end’を挿入して、ポイントをそれらの間の行に配します(tex-latex-block)。

C-c C-e

まだ閉じていない一番内側のLaTeXブロックを閉じます(tex-close-latex-block)。

LaTeX入力では、テキストをブロック化するのに‘\begin’と‘\end’のタグが使用されます。ブロックを挿入するにはC-c C-o (tex-latex-block)とタイプします。これはブロックタイプの入力を求め、適切な対応する‘\begin’と‘\end’を挿入し、その2行の間に空行を残してポイントをそこに移動します。

C-c C-oにたいしてブロックタイプを入力するとき、通常の補完コマンドを使用できます(補完を参照してください)。デフォルトの補完リストには、標準的なLaTeXのブロックタイプが含まれています。補完にブロックタイプを追加したい場合は、リスト変数latex-block-namesをカスタマイズしてください。

LaTeX入力では、‘\begin’と‘\end’のタグは対応が取れていなければなりません。C-c C-e (tex-close-latex-block)により、対応が取れていない最後の‘\begin’に対応する‘\end’を挿入することができます。これは対応する‘\begin’に調和するように‘\end’をインデントし、ポイントが行の先頭にあるときは‘\end’タグの後ろに改行を挿入します。マイナーモードlatex-electric-env-pair-modeは、‘\end’か‘\begin’の一方をタイプしたとき、自動的に対応する‘\end’または‘\begin’を挿入します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.11.3 TeX印刷コマンド

バッファーの全内容、または一部(たとえば大きなドキュメントの1つのチャプター)にたいして、TeXをEmacsのサブプロセスとして呼び出すことができます。

C-c C-b

カレントバッファー全体にたいしてTeXを呼び出します(tex-buffer)。

C-c C-r

バッファーのヘッダーとともに、カレントリージョンにたいしてTeXを呼び出します(tex-region)。

C-c C-f

カレントファイルにたいしてTeXを呼び出します(tex-file)。

C-c C-v

最後のC-c C-bC-c C-rC-c C-fコマンドの出力をプレビューします(tex-view)。

C-c C-p

最後のC-c C-bC-c C-rC-c C-fコマンドの出力を印刷します(tex-print)。

C-c TAB

カレントファイルにたいしてBibTeXを呼び出します(tex-bibtex-file)。

C-c C-l

TeX出力を表示するウィンドウを再センタリングして、最後の行が見えるようにします(tex-recenter-output-buffer)。

C-c C-k

TeXサブプロセスをkillします(tex-kill-job)。

C-c C-c

カレントバッファー全体にたいして、他のコンパイルコマンドを呼び出します(tex-compile)。

カレントバッファーをTeXに渡すには、C-c C-b (tex-buffer)とタイプします。フォーマットされた出力は、通常.dviという一時ファイルに出力されます。その後でC-c C-v (tex-view)とタイプして、xdviのような外部プログラムを起動して、出力ファイルを閲覧することができます。C-c C-p (tex-print)とタイプして出力ファイルのハードコピーを印刷することもできます。

デフォルトではC-c C-bは、カレントディレクトリーでTeXを実行します。TeXの出力もこのディレクトリーに作成されます。TeXを違うディレクトリーで実行するには、変数tex-directoryを望むディレクトリー名に変更します。環境変数TEXINPUTSに相対名が含まれていたり、ファイルに含まれる‘\input’コマンドが相対ファイル名の場合、tex-directory"."しないと、望ましくない結果となるでしょう。そうでない場合は、"/tmp"などの他のディレクトリーを指定しても安全です。

そのバッファーにたいするTeXの変種は、C-c C-bで実際に実行されるシェルコマンドを決定します。Plain TeXモードでは、これは変数tex-run-commandで指定され、デフォルトは"tex"です。LaTeXモードでは、これはlatex-run-commandで指定され、デフォルトは"latex"です。.dviを閲覧するためにC-c C-vで実行されるシェルコマンドは、TeXの種類に関係なく、変数tex-dvi-view-commandで決定されます。出力を印刷するためにC-c C-pで実行されるシェルコマンドは、変数tex-dvi-print-commandで決定されます。TeXでコンパイルされたファイルを閲覧および印刷するために要求されるファイル拡張子は、変数tex-print-file-extensionでセットできます。たとえば、この変数に.pdfをセットして、それに合わせてtex-dvi-view-commandtex-dvi-print-command、同様にlatex-run-commandtex-run-commandを更新できます。

Emacsは出力ファイル名に通常、前のパラグラフで説明したシェルコマンド文字列を自動的に追加します。たとえばtex-dvi-view-command"xdvi"のとき、C-c C-vxdvi output-file-nameを実行します。しかし、ファイル名がコマンドに埋め込まれている必要があるケース、たとえばあるコマンドの引数にファイル名を与えて、そのコマンドの出力をパイプで他のコマンドに渡さなければいけない場合があります。コマンド文字列の‘*’で、ファイル名をどこに置くか指定することができます。以下は例です

(setq tex-dvi-print-command "dvips -f * | lpr")

エラーメッセージを含むTeXからの端末出力は、*tex-shell*という名前のバッファーに表示されます。TeXでエラーが発生した場合、このバッファーに切り替えて、適切な入力を与えることができます(これはShellモードで機能します。対話的なサブシェルを参照してください)。このバッファーに切り替えなくても、これをスクロールできるので、C-c C-lとタイプして最後の行を表示することができます。

これ以上の出力が有用でないと判断した時は、C-c C-k (tex-kill-job)とタイプしてTeXプロセスをkillします。C-c C-bおよびC-c C-rの使用するときも、TeXがまだ実行中の時はkillします。

C-c C-r (tex-region)とタイプして、任意のリージョンをTeXに渡すことができます。しかし、これはトリッキーです。なぜならほとんどのTeX入力ファイルは、先頭にパラメーターをセットしたりマクロを定義するコマンドを含んでいるからです。この問題を解決するために、C-c C-rでは、必須のマクロを含むファイル部分を指定することができます。指定したリージョンの前にそれを含めて、TeXの入力の一部とします。ファイルの必須と指定された部分をヘッダーと呼びます。

Plain TeXモードでヘッダーの境界を示すには、ファイルに2つの特別な文字列を挿入します。これはヘッダーの前に‘%**start of header’、ヘッダーの後ろに‘%**end of header’を記述します。これらの文字列は1行に全体を記述しなければなりませんが、文字列の前または後ろに他のテキストがあっても構いません。この2つの文字列を含む行はヘッダーの中に含まれます。‘%**start of header’がバッファーの先頭100行にない場合、C-c C-rはヘッダーがないとみなします。

LaTeXモードでは、ヘッダーは‘\documentclass’または‘\documentstyle’で始まり、‘\begin{document}’で終わります。いかなる場合でもLaTeXがこれらを要求するので、ヘッダーを識別するのに特別なことをする必要はありません。

コマンド(tex-buffer)および(tex-region)は、すべてを一時ディレクトリーで処理します。そしてTeXでクロスリファレンスのために必要となる補助的なファイルは利用不可です。一般的にこれらのコマンドは、すべてのクロスリファレンスが正しい必要がある最終コピーのために実行するのには適していません。

クロスリファレンスのための補助的なファイルを使いたいときは、C-c C-f (tex-file)を使用します。これはカレントバッファーのファイルにたいして、そのファイルのディレクトリーでTeXを実行します。TeXを実行する前に、変更されたバッファーを保存するか確認が求められます。一般的には、クロスリファレンスを正しく取得するために、2回(tex-file)を使用する必要があります。

変数tex-start-optionsの値は、TeXを実行するためのオプションを指定します。

変数tex-start-commandsの値は、TeXを開始するTeXコマンドを指定します。デフォルト値はTeXをノンストップモードで実行します。対話的にTeXを実行するときは、変数に""をセットします。

大きなサイズのTeXドキュメントは複数のファイル — 1つはメインファイルで、他はサブファイル — に分割されているときがあります。サブファイルにたいしてTeXを実行しても通常は動作しません。メインファイルにたいして実行する必要があるのです。サブファイルを編集するのにtex-fileを使えるようにするには、変数tex-main-fileにメインファイルの名前をセットします。その後はtex-fileはそのファイルにたいしてTeXを実行します。

tex-main-fileを使用する一番簡単な方法は、各サブファイルのローカル変数リストにそれを指定する方法です。ファイル内のローカル変数を参照してください。

LaTeXファイルにたいしては、BibTeXを使用してカレントバッファーのファイルのための補助的なファイルを処理できます。BibTeXはデータベースの図書目録の引用(bibliographic citations)を探して、図書目録のセクション(bibliography section)のための引用文献(cited references)を準備します。コマンドC-c TAB (tex-bibtex-file)は、カレントバッファーのファイルにたいする‘.bbl’ファイルを生成するためにシェルコマンド(tex-bibtex-command)を実行します。一般的に、‘.aux’ファイルを生成するために一度C-c C-f (tex-file)を行う必要があります。その後C-c TAB (tex-bibtex-file)を行ってから、さらなるクロスリファレンスを正しく取得するためにC-c C-f (tex-file)を2回行います。

カレントのTeXバッファーで、他のコンパイルプログラムを呼び出すには、C-c C-c (tex-compile)をタイプします。このコマンドはpdflatexyapxdvidvipsを含む、多くの一般的なプログラムに渡す引数を知っています。標準の補完キーを使用して望ましいコンパイルプログラムを選択できます(補完を参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.11.4 TeXモード、その

TeXモードの変種に入ると、フックtext-mode-hookおよびtex-mode-hookを実行します。その後、plain-tex-mode-hookdoctex-mode-hooklatex-mode-hookslitex-mode-hookのうち、適切なものを実行します。TeXシェルを開始すると、フックtex-shell-hookを実行します。フックを参照してください。

コマンドM-x iso-iso2texM-x iso-tex2isoM-x iso-iso2gtexM-x iso-gtex2isoはLatin-1でエンコードされたファイルと、TeXでエンコードされた等価なファイルの変換に使用できます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.12 SGMLモードとHTMLモード

SGMLおよびHTMLのためのメジャーモードは、インデントのサポートとタグを操作するコマンドを提供します。

HTMLは2つのモードから構成されます — 1つ目はhtml-modeと呼ばれる基本的なモードで、これは若干カスタマイズされたSGMLモードの変種です。もう1つはデフォルトでHTMLファイルに使用されるものでmhtml-modeモードと呼ばれ、<script>要素で囲まれたJavascript、および<style>要素内に埋め込まれたCSSを正しく処理することを意図しています。

C-c C-n

対話的に特殊文字を指定して、その文字に対応するSGMLの‘&’コマンドを挿入します(sgml-name-char)。

C-c C-t

対話的にタグとタグの属性を指定します(sgml-tag)。このコマンドはタグ名と属性値を尋ね、開始タグと終了タグの両方を挿入し、ポイントをその間に置きます。

プレフィクス引数nを指定すると、このコマンドはバッファーのポイントの後ろにあるn個の単語の周囲にタグを配します。リージョンがアクティブなときは、タグをリージョンの周辺に配します(Transient Markモードがオフのときは、引数に-1を与えることにより、これを行います)。

C-c C-a

対話的にカレントタグの属性値を挿入します(sgml-attributes)。

C-c C-f

対応の取れたタグのグループ(開始タグと対応する終了タグまでの範囲)をスキップします(sgml-skip-tag-forward)。数引数は繰り返し回数として振る舞います。

C-c C-b

対応の取れたタグのグループ(開始タグと対応する終了タグまでの範囲)を後方にスキップします(sgml-skip-tag-backward)。数引数は繰り返し回数として振る舞います。

C-c C-d

ポイント位置またはポイントの後ろのタグを削除し、それに対応するタグも削除します(sgml-delete-tag)。ポイントの後のタグが開始タグの場合は、終了タグも削除します。終了タグの場合は、開始タグも削除します。

C-c ? tag RET

タグtagの意味の説明を表示します(sgml-tag-help)。引数tagが空のときは、ポイント位置のタグを説明します。

C-c /

一番内側の終了されていないタグの終了タグを挿入します(sgml-close-tag)。タグまたはコメントの中で呼び出されたときは、終了タグを挿入するかわりにそれを終了させます。

C-c 8

挿入したLatin-1文字を、その文字自身ではなく、その文字を表すSGMLコマンドを挿入するマイナーモードを切り替えます(sgml-name-8bit-mode)。

C-c C-v

カレントバッファーをSGMLとして評価するシェルコマンド(要指定)を実行します(sgml-validate)。(HTMLモードでは、このキーシーケンスは違うコマンドを実行する。)

C-c TAB

バッファーの既存のタグの可視・不可視を切り替えます。これは簡単なプレビューとして使用できます(sgml-tags-invisible)。

XMLドキュメントを編集するためのメジャーモードはnXMLモードと呼ばれます。このモードは多くの既存のXMLスキーマを認識することができ、M-TABを通じてXMLエレメントの補完、同様にエラーをハイライトするオンザフライ(on-the-fly)なXMLの妥当性検証を提供します。既存のバッファーでnXMLモードを有効にするには、M-x nxml-modeとタイプするか、M-x xml-modeとタイプしても同じです。Emacsは.xmlという拡張子をもつファイルにたいしてnXMLモードを使用します。.xhtmlという拡張子をもつXHTMLファイルにたいしては、デフォルトでEmacsはHTMLモードを使用します。変数auto-mode-alistをカスタマイズすることによりnXMLモードを使用させることができます(ファイルのモードを選択するを参照してください)。 nXMLモードについては、Emacsとともに配布されているInfoマニュアルで説明されています。

XMLはSGMLの厳格なサブセットなので、XMLを編集するのに、それほど強力ではないSGMLモードの使用を選択することもできます。既存のバッファーでSGMLモードを有効にするには、M-x sgml-modeとタイプします。SGMLを有効にするとき、EmacsはバッファーがXMLかどうかを検証します。もしXMLの場合、変数sgml-xml-modeに非nil値をセットします。これにより上述したSGMLモードのタグ挿入コマンドは、常に明示的に終了タグを挿入するようになります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.13 Nroffモード

NroffモードはTextモードから派生した、nroffファイル(たとえばUnixのman)の編集に特化したメジャーモードです。M-x nroff-modeとタイプすることによりこのモードにはいります。Nroffモードに入ることにより、フックtext-mode-hook、その後でnroff-mode-hookが実行されます(フックを参照してください)。

Nroffモードでは、nroffコマンド行はパラグラフの区切りとして扱われ、ページは‘.bp’で区切られ、コメントはバックスラッシュとダブルクォートで始まります。これは以下のコマンドも定義します:

M-n

nroffコマンドではない次の行の先頭に移動します(nroff-forward-text-line)。引数は繰り返し回数です。

M-p

M-nと同様ですが上に移動します(nroff-backward-text-line)。

M-?

エコーエリアにリージョンの、(nroffコマンドではない)テキストの行数を表示します(nroff-count-text-lines)。

Electric Nroffモードはバッファーローカルなマイナーモードで、Nroffモードとともに使うことができます。このマイナーモードを切り替えるには、M-x nroff-electric-modeとタイプします(マイナーモードを参照してください)。このモードがオンのとき、グループ化を行う種類のnroffコマンドを含む行をRETをタイプして終端すると、グループ化を閉じるnroffコマンドが自動的に後続の行に挿入されます。

NroffモードとともにOutline minorモード(Outlineモードを参照してください)を使用する場合、ヘッダー行は‘.H’の後に数字(ヘッダーレベル)が続く形式の行です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.14 Enrichedテキスト

Enriched(多くの刺激を含む、豊かにした)は、フォーマットされたテキストファイルをWYSIWYG(What You See Is What You Get)な方法で編集するためのマイナーモードです。Enrichedモードが有効な場合、フォントやカラーなどのさまざまなフォーマットプロパティーを、バッファーのテキストに適用できます。バッファーを保存するときは、それらのプロパティーはテキストとともに、MIME形式‘text/enriched’のファイルフォーマットを使用して保存されます。

Enrichedモードは通常、Textモードとともに使用されます(Textモードを参照してください)。これは多くのメジャーモード(構文のハイライトのためにFont Lockモードを使用するほとんどのプログラミング言語関連のモードを含む)で使用される、Font Lockモードとの互換性はありません。Enrichedモードとは異なり、Font Lockモードはカレントバッファーの内容にもとづいて、テキストのプロパティーを自動的に割り当てます。これらのプロパティーはディスクには保存されません。

Emacsのdata-directoryのファイルenriched.txtは、Enrichedモードの機能例として役に立ちます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.14.1 Enrichedモード

Enrichedモードは、バッファーローカルなマイナーモードです(マイナーモードを参照してください)。‘text/enriched’フォーマットで保存されたファイルをvisitすると、Emacsは自動的にEnrichedモードを有効にし、ファイル内のフォーマット情報をバッファーのテキストに適用します。Enrichedモードが有効なときにバッファーを保存すると、ファイルはフォーマット情報を含む‘text/enriched’フォーマットで保存されます。

フォーマットされたテキストで新しいファイルを作成するには、存在しないファイルをvisitしてM-x enriched-modeとタイプします。このコマンドは実際にEnrichedモードを切り替えます。プレフィクス引数を指定した場合、引数が正のときはEnrichedモードを有効にし、それ以外はEnrichedモードを無効にします。Enrichedモードを無効にすると、Emacsは‘text/enriched’フォーマットでバッファーを保存しなくなります。バッファーに追加されたフォーマットプロパティーはバッファーに残りますが、ディスクには保存されません。

Enrichedモードは、すべてのEmacsのテキストプロパティーを保存しません。変数enriched-translationsに指定されたものだけを保存します。これにはフォント、カラー、インデント、行端揃えのプロパティーが含まれます。

ファイルをvisitしたとき、ファイルが‘text/enriched’フォーマットだとEmacsが認識できなかった場合は、M-x format-decode-bufferとタイプします。このコマンドはファイルフォーマットの入力を求め、そのフォーマットでファイルを再読み込みします。‘text/enriched’フォーマットを指定することにより、自動的にEnrichedモードが有効になります。

text/enriched’ファイルをraw形式(フォーマットされたテキストではなく、マークアップタグを伴う通常テキスト)として閲覧するには、M-x find-file-literallyを使用します(ファイルのvisit(訪問)を参照してください)。

Emacsが‘text/enriched’のようなファイルフォーマットを認識・変換する方法については、Format Conversion in the Emacs Lisp Reference Manualを参照してください。テキストプロパティーについての詳細は、Text Properties in the Emacs Lisp Reference Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.14.2 ハード改行とソフト改行

Enrichedモードでは、Emacsは2つの異なる改行、ハード改行とソフト改行を区別します。M-x use-hard-newlinesとタイプすることにより、他のバッファーにたいしてこの機能を有効または無効にできます。

ハード改行は、パラグラフを分割したりテキストがフィルされる方法に関らず行区切りが必要な場所で使用され、ソフト改行はフィルで使用されます。RET (newline)およびC-o (open-line)コマンドはハード改行を挿入します。Auto Fill(Auto Fillモードを参照してください)を含むフィルコマンドは、ソフト改行だけを挿入し、削除もソフト改行だけでハード改行は削除せずに残します。

したがってEnrichedモードで編集するときは、フィルされたパラグラフの途中で行を分けるのにRETC-oを使うべきではありません。かわりにAuto Fillモード、または明示的なフィルコマンド(明示的なフィルコマンドを参照してください)を使用します。テーブルやリストのように、行区切りを常に残したい場所でRETC-oを使用します。そのような行では、行端揃えスタイル(justification style)もunfilledにしたいと思うかもしれません(Enrichedテキストの位置調整を参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.14.3 フォーマット情報の編集

プロパティーを変更する一番簡単な方法は、‘Text Properties’メニューです。このメニューは、メニューバー(メニューバーを参照してください)の‘Edit’メニュー、またはC-mouse-2(メニューにたいするマウスクリックを参照してください)で取得することができます。‘Text Properties’メニューのコマンドのいくつかを、以下にリストします(M-x)で呼び出すこともできます):

Remove Face Properties

リージョンからフェイスプロパティーを削除します(facemenu-remove-face-props)。

Remove Text Properties

リージョンからフェイスプロパティーを含む、すべてのテキストプロパティーを削除します(facemenu-remove-all)。

Describe Properties

ポイントの後ろにある文字の、すべてのテキストプロパティーと他の情報をリストします(describe-text-properties)。

Display Faces

定義されたフェイスのリストを表示します(list-faces-display)。テキストのフェイスを参照してください。

Display Colors

定義されたカラーのリストを表示します(list-colors-display)。フェイスのカラーを参照してください。

他のメニューエントリーについては、以下のセクションで説明します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.14.4 Enrichedテキストのフェイス

以下のコマンドは、フェイスを追加または削除するのに使用することができます(テキストのフェイスを参照してください)。マークがアクティブのときは、リージョンのテキストに適用され、マークが非アクティブのときは、次の自己挿入文字に適用されます。プレフィクス引数を指定すると、これらのコマンドはリージョンがアクティブな場合でも、次の自己挿入文字に適用されます。

M-o d

すべてのfaceプロパティーを削除します(facemenu-set-default)。

M-o b

bold(太字)フェイスを適用します(facemenu-set-bold)。

M-o i

italic(斜体)フェイスを適用します(facemenu-set-italic)。

M-o l

bold-italic(太字斜体)フェイスを適用します(facemenu-set-bold-italic)。

M-o u

underline(下線)フェイスを適用します(facemenu-set-underline)。

M-o o face RET

フェイスfaceを適用します(facemenu-set-face)。

M-x facemenu-set-foreground

カラーの入力を求め(フェイスのカラーを参照)、それをフォアグラウドカラーに適用します。

M-x facemenu-set-background

カラーの入力を求め、それをバックグラウンドカラーに適用します。

これらのコマンドは、Text Propertiesメニューからも利用可能です。

自己挿入文字は通常、フェイスプロパティー(および他のほとんどのテキストプロパティー)を、そのバッファーの前の文字から継承します。次の自己挿入文字にたいして上記のコマンドを指定した場合、その文字は前の文字からフェイスプロパティーは継承しませんが、他のテキストプロパティーは継承します。

Enrichedモードは、他の追加のフェイスexcerptおよびfixedを定義します。これらはtext/enrichedファイルフォーマットで使われるコードに対応します。excerptフェイスは引用のために使用されることを意図されており、デフォルトではitalicと同じように表示されます。fixedフェイスは固定幅テキストを指定し、デフォルトではboldと同じように表示されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.14.5 Enrichedテキストのインデント

Enrichedモードでは、パラグラフまたはパラグラフの一部の、右余白または左余白に異なる量のインデントを指定できます。これらの余白はM-q (テキストのフィルを参照してください)のようなフィルコマンドにも影響します。

IndentationサブメニューのTextプロパティーは、インデントを指定するコマンドを提供します:

Indent More

リージョンを4列ずつインデントします(increase-left-margin)。Enrichedモードでは、このコマンドはC-x TABでも利用可能です。数引数を指定した場合、何列を余白に追加するかを指定します(負の引数は余白を何列縮めるかを指定します)。

Indent Less

リージョンから4列のインデントを削除します。

Indent Right More

右端から4列インデントすることにより、テキストを狭くします。

Indent Right Less

右端からのインデントを4列削除します。

変数standard-indentは、これらのコマンドがインデントを追加または減少させる列数を指定します。デフォルトは4です。Enrichedにたいするデフォルトの右余白は、通常のようにfill-columnにより制御されます。

C-c [ (set-left-margin)またはC-c ] (set-right-margin)とタイプしても、左余白または右余白をセットできます。数引数で余白の幅を指定できます。指定しない場合、これらのコマンドはミニバッファーを通じて値の入力を求めます。

それに加えてフィルプレフィクスがある場合は、指定されたパラグラフのインデントに使用されます。C-x .は、フィルプレフィクスにたいして指定された、新しい値の中の空白文字は含めません。フィルコマンドは各行のインデントの後ろにフィルプレフィクスを探します。フィルプレフィクスを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.14.6 Enrichedテキストの位置調整

Enrichedモードでは、以下のコマンドを使って、フィルのためにさまざまな行端揃えスタイル(justification styles)を指定できます。これらのコマンドは。ポイントを含むパラグラフ、またはリージョンがアクティブの場合は、リージョンと重なるすべてのパラグラフに適用されます。

M-j l

行を左余白に揃えます(set-justification-left)。

M-j r

行を右余白に揃えます(set-justification-right)。

M-j b

行の途中にスペースを挿入することにより、行を両端の余白に揃えます(set-justification-full)。

M-j c
M-S

両端の余白の間で行を中央に揃えます(set-justification-center)。

M-j u

フィルを完全にオフに切り替えます(set-justification-none)。このセッティングにより、フィルコマンドはテキストに何も行わなくなります。それでも左余白はインデントすることができます。

Text PropertiesメニューのJustificationサブメニューを使用して、行端揃えスタイルを指定することもできます。デフォルトの行端揃えスタイルはバッファーごとの変数default-justificationにより指定されます。この変数の値はシンボルleftrightfullcenter、またはnoneのうちの1つです。シンボルの意味は上述したコマンドに対応します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.14.7 その他のテキストプロパティーのセッティング

Text PropertiesメニューのSpecial Propertiesサブメニューには、4つのテキストプロパティー — read-only (テキストの変更を不可にします)、invisible (テキストを非表示にします)、intangible (テキスト内でのポイントの移動を不可にします)、charset (これは文字の表示に正しいフォントを選択するために重要です) — を追加または削除するエントリーがあります。‘Remove Special’メニューアイテムは、リージョン内のテキストにたいする、これらの特別なプロパティーを削除します。

プロパティーinvisibleおよびintangibleは保存されません。

Enrichedモードはdisplayプロパティ(Display Property in the Emacs Lisp Reference Manualを参照)の保存とリストアもサポートします。このプロパティはスクリーン上でテキストがどのように表示されるかに影響を与え、バッファーのテキスト以外のソース由来のイメージや文字列も表示することができます。displayプロパティはディスプレイにたいするプロパティ処理の一部として、任意のLispフォームの実行もサポートします。したがって、表示時しか知ることができないコンディションにディスプレイを動的に合わせる能力を提供します。任意のLisp実行は、そのenrichedテキストのソースがEmacs、あるいはシステム外からのもの(たとえば受信した電子メールの添付ファイル)である場合は、Emacsに攻撃の可能性を開くので、Enrichedモードではそのような実行はデフォルトで無効になっています。変数enriched-allow-eval-in-display-propsを非nil値にカスタマイズすることにより、これを有効にすることができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.15 テキストベーステーブルの編集

tableパッケージは、テキストベースのテーブルを簡単に編集するコマンドを提供します。以下は、そのようなテーブルがどのように見えるかの例です:

+-----------------+--------------------------------+-----------------+
|     Command     |          Description           |   Key Binding   |
+-----------------+--------------------------------+-----------------+
|  forward-char   |Move point right N characters   |       C-f       |
|                 |(left if N is negative).        |                 |
|                 |                                |                 |
+-----------------+--------------------------------+-----------------+
|  backward-char  |Move point left N characters    |       C-b       |
|                 |(right if N is negative).       |                 |
|                 |                                |                 |
+-----------------+--------------------------------+-----------------+

このようなテキストがテーブルだとEmacsが認識した場合(テーブルの認識を参照してください)、テーブルのセル内容を編集すると、内容が大きくなってセルに収まらなくなったときは、テーブルのセルを自動的にサイズ変更します。以下のセクションで説明されている、テーブルのレイアウトを操作したり編集するコマンドを使用することができます。

M-x table-fixed-width-modeとタイプすることにより、自動的なテーブルのサイズ変更を切り替えることができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.15.1 テキストベーステーブルとは?

テーブル(table)は矩形のテキスト領域からなり、それらはセル(cells)に分割されます。セルは少なくとも1文字分の幅と高さをもち、それにボーダーラインは含まれません。セルは複数のセルに分割できますが、それらは重なることはできません。

セルのボーダーラインは、以下の変数で指定された3つの特別な文字で描画されます:

table-cell-vertical-char

垂直ラインに使用される文字です。デフォルトは‘|’です。

table-cell-horizontal-chars

水平ラインに使用される文字です。デフォルトは‘"-="’です。

table-cell-intersection-char

水平ラインと垂直ラインの交点に使用される文字です。デフォルトは‘+’です。

以下は無効なテーブルの例です:

   +-----+       +--+    +-++--+
   |     |       |  |    | ||  |
   |     |       |  |    | ||  |
   +--+  |    +--+--+    +-++--+
   |  |  |    |  |  |    +-++--+
   |  |  |    |  |  |    | ||  |
   +--+--+    +--+--+    +-++--+
      a          b          c

左から順に説明します:

  1. 重なったセル、または非矩形のセルは許されません。
  2. ボーダーは矩形でなければなりません。
  3. セルは最小でも1文字分の幅と高さがなければなりません。

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.15.2 テーブルの作成

テキストベースのテーブルをスクラッチから作成するには、M-x table-insertとタイプします。このコマンドはテーブルの列数、テーブルの行数、セルの幅と高さの入力を求めます。セルの幅とセルの高さに、セルのボーダーは含まれません。これらは1つの整数で指定するか(これは各セルの幅と高さが同じになることを意味します)、スペースまたはカンマで区切られた整数のシーケンス(これはテーブルの左から右の列、上から下の行の個別のセルにたいして幅と高さを指定します)です。その後、指定されたテーブルはポイント位置に挿入されます。

M-x table-insertで挿入されたテーブルは、Emacsにそれをテキストベースのテーブルとして特別に扱うように指示する、特別なテキストプロパティーを含みます。そのバッファーをファイルに保存して、後で再びvisitすると、それらのプロパティーは失われ、Emacsにとってテーブルは普通のテキストとして判断されます。これをテーブルに変換する方法については、次のセクションを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.15.3 テーブルの認識

バッファーに既存のテーブルがあり、そのテーブルからM-x table-insertで適用された特別なテキストプロパティーが失われているとき、それはテーブルとして特別に扱われなくなります。これにテキストプロパティーを適用するには、M-x table-recognizeとタイプします。このコマンドはカレントバッファーをスキャンして、有効なテーブルセルを認識して、適切なテキストプロパティーを適用します。反対に、M-x table-unrecognizeとタイプすることにより、特別なテキストプロパティーを削除して、テーブルをプレーンテキストに変換して、カレントバッファーのすべてのテーブルを認識しなくなります。

以下のコマンドを使って、選択的にテーブルを認識したり認識させなくすることもできます:

M-x table-recognize-region

カレントリージョンのテーブルを認識します。

M-x table-unrecognize-region

カレントリージョンのテーブルを認識しなくします。

M-x table-recognize-table

ポイント位置のテーブルを認識してアクティブにします。

M-x table-unrecognize-table

ポイント位置のテーブルを非アクティブにします。

M-x table-recognize-cell

ポイント位置のセルを認識してアクティブにします。

M-x table-unrecognize-cell

ポイント位置のセルを非アクティブにします。

テーブルを認識する他の方法については、プレーンテキストとテーブルの変換を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.15.4 テーブルセルにたいするコマンド

コマンドM-x table-forward-cellおよびM-x table-backward-cellは、ポイントをカレントセルから隣接するセルに移動します。その順番は巡回的です。ポイントがテーブルの最後のセルにあるとき、M-x table-forward-cellはポイントを最初のセルに移動します。同様に、ポイントが最初のセルにあるとき、M-x table-backward-cellはポイントを最後のセルに移動します。

M-x table-span-cellは方向 — 右、左、上、下 — の入力を求め、カレントセルをその方向の隣接するセルにマージします。マージした結果が不正なセルのレイアウトになる場合、このコマンドはエラーをシグナルします。

M-x table-split-cellは、ミニバッファーを使って分割する方向の入力を求め、カレントセルを垂直(vertically)または水平(horizontally)に分割します。特定の方向に分割するには、M-x table-split-cell-verticallyM-x table-split-cell-horizontallyを使います。垂直に分割する場合、古いセルの内容は自動的に2つの新しいセルに分割されます。水平に分割する場合、セルが空でない場合は、セル内容をどのように分割するか入力を求めます。オプションは‘split’(内容をポイント位置で分割)、‘left’(すべての内容を左のセルへ)、‘right’(すべての内容を右のセルへ)です。

以下のコマンドは、セルを拡大または縮小します。デフォルトでは、1行または1列ずつサイズ変更します。数引数が与えられた場合、それはサイズ変更を何行または何列単位で行うかを指定します。

M-x table-heighten-cell

カレントセルを垂直方向に拡大します。

M-x table-shorten-cell

カレントセルを垂直方向に縮小します。

M-x table-widen-cell

カレントセルを水平方向に拡大します。

M-x table-narrow-cell

カレントセルを水平方向に縮小します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.15.5 セルの位置調整

コマンドM-x table-justifyは、テキストベーステーブルの1つ以上のセルにたいして、位置調整(justification)を行います。位置調整は、セルのテキストがセルの外枠にたいして、どのように位置合わせされるかを決定します。テーブルの各セルは個別に位置調整できます。

M-x table-justifyは、最初に何の位置調整をするかの入力を求めます。オプションは‘cell’(カレントセルのみ)、‘column’(テーブルのカレント列のすべてのセル)、‘row’ (テーブルのカレント行のすべてのセル)です。その後、コマンドは位置調整のスタイルの入力を求めます。オプションはleftcenterrighttopmiddlebottom、またはnone(垂直方向の位置調整を行わないことを意味します)です。

水平および垂直方向の位置調整スタイルは独立して指定され、2つのタイプは同時に適用できます。たとえばM-x table-justifyを2回呼び出して、1回目は位置調整にrightを指定して、2回目は位置調整にbottomを指定することにより、セルの内容を右下に位置調整することができます。

位置調整スタイルは、テキストプロパティーとしてバッファーに格納され、バッファーをkillするかEmacsを終了すると失われます。M-x table-recognize(テーブルの認識を参照してください)のようなテーブルの認識コマンドは、セルの内容を確認して各セルの位置調整スタイルの決定と再適用を試みます。この機能を無効にするには、変数table-detect-cell-alignmentnilに変更してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.15.6 テーブルの行と列

M-x table-insert-rowは、テーブルのカレント行の前にセル行を挿入します。カレント行とポイントは、新しい行の下になります。テーブル最下にある最後の行の後ろに行を挿入するには、ポイントをテーブルの最下線の直下にポイントを移動して、このコマンドを呼び出します。数引数を指定することにより2つ以上の行を挿入できます。

同様に、M-x table-insert-columnは、テーブルのカレント列の左にセル列を挿入します。右端の最右列の右に列を挿入するには、ポイントを最右線の右(テーブルの外)に移動して、このコマンドを呼び出します。数引数は挿入する列の数を指定します。

M-x table-delete-columnは、ポイントがあるセルの列を削除します。同様に、M-x table-delete-rowは、ポイントがあるセルの行を削除します。どちらのコマンドも数引数により削除する列または行の数を指定します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.15.7 プレーンテキストとテーブルの変換

コマンドM-x table-captureは、プレーンテキストをリージョンにキャプチャーして、それをテーブルに変換します。M-x table-recognize(テーブルの認識を参照してください)とは異なり、元のテキストはテーブルの体裁をとる必要はありません。テーブル的な論理構造もつことだけが必要です。

たとえば以下の数字があったとして、これらは3つの行と、カンマで水平方向に分割されます:

1, 2, 3, 4
5, 6, 7, 8
, 9, 10

このテキストにたいしてM-x table-captureを呼び出すと、以下のテーブルが生成されます:

+-----+-----+-----+-----+
|1    |2    |3    |4    |
+-----+-----+-----+-----+
|5    |6    |7    |8    |
+-----+-----+-----+-----+
|     |9    |10   |     |
+-----+-----+-----+-----+

M-x table-releaseは逆のことを行います。これはテーブルを元のプレーンテキストに戻し、セルのボーダーを削除します。

この2つのコマンドの1つの用途としては、テキストをレイアウトで編集することです。以下の3つのパラグラフを見てください:

table-capture is a powerful command.
Here are some things it can do:

Parse Cell Items   Using row and column delimiter regexps,
                   it parses the specified text area and
                   extracts cell items into a table.

上記のテキストを含むリージョンにtable-captureを適用して、列と行を区切るregexpsに空文字列を指定すると、以下のような1つのセルからなるテーブルが作成されます。

+----------------------------------------------------------+
|table-capture is a powerful command.                      |
|Here are some things it can do:                           |
|                                                          |
|Parse Cell Items   Using row and column delimiter regexps,|
|                   it parses the specified text area and  |
|                   extracts cell items into a table.      |
+----------------------------------------------------------+

その後でセル分割コマンド(テーブルセルにたいするコマンドを参照してください)を使って、各パラグラフが1つのセルを占めるようにテーブルを分割できます。

+----------------------------------------------------------+
|table-capture is a powerful command.                      |
|Here are some things it can do:                           |
+-----------------+----------------------------------------+
|Parse Cell Items | Using row and column delimiter regexps,|
|                 | it parses the specified text area and  |
|                 | extracts cell items into a table.      |
+-----------------+----------------------------------------+

これで各セルは他のセルのレイアウトに影響を与えることなく、独立して編集することができるようになりました。終了したらM-x table-releaseを呼び出して、テーブルをプレーンテキストに戻します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.15.8 テーブル、その他

コマンドtable-query-dimensionは、テーブルのレイアウトとポイント位置のテーブルセルをレポートします。以下は出力の例です:

Cell: (21w, 6h), Table: (67w, 16h), Dim: (2c, 3r), Total Cells: 5

これはカレントセルの幅が21文字、高さが6行で、テーブルの幅が67文字、高さが16行で、2列3行で5つのセルがあることを示します。

M-x table-insert-sequenceは、テキスト文字列のシーケンスを、テーブルのセルを横断して、適切に各セルに挿入します。これは、そのシーケンスの基本文字列(base string)を尋ねて、その基本文字列を数値的(基本文字列が数字で終わる場合)、またはASCII順で“増加”させてシーケンスを生成します。基本文字列に加え、このコマンドはシーケンス内の要素数、増分、セル間隔、各セル内のテキストの行端揃えの入力を求めます。

M-x table-generate-sourceは特定のマークアップ言語にフォーマットされたテーブルを生成します。このコマンドは言語(これはhtmllatexcalswikimediawikiのいずれかでなければなりません)と、結果を出力するバッファー、テーブルの表題を尋ね、生成されたテーブルを指定したバッファーに出力します。デフォルトの出力バッファーはtable.langで、langは指定された言語です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

25.16 2列編集

2C-two-column(2列)モードは、横に並んだテキストの列を、簡単に編集できるようにします。これは横に並んだ2つのウィンドウを使って、それぞれのウィンドウは自身のバッファーを表示します。2Cモードに入るには3つの方法があります。

F2 2またはC-x 6 2

カレントバッファーを左に、カレントバッファーの名前にもとづいた名前のバッファーを右にして、2Cモードに入ります。右側のバッファーがまだ存在しない場合、そのバッファーは空で開始されます。カレントバッファーの内容は変更されません。

このコマンドは、カレントバッファーが空か1列だけしか含まなくて、それに別の列を追加したいときに適しています。

F2 sまたはC-x 6 s

2列のテキストを含むカレントバッファーを2つのバッファーに分割して、それを横に並べて表示します(2C-split)。カレントバッファーは左側のバッファーになりますが、右側の列のテキストは、右側のバッファーに移動します。カレント列は分割ポイントを指定します。分割はカレント行からバッファーの最後まで続きます。

このコマンドはすでに2列になったテキストを含むバッファーがあり、一時的にそれを列に分割したいときに適しています。

F2 b buffer RET
C-x 6 b buffer RET

カレントバッファーを左側のバッファー、バッファーbufferを右側のバッファーにして2Cモードに入ります(2C-associate-buffer)。

F2 sまたはC-x 6 sは、列の区切りを探します。区切りは各行に出現する2列の間にある文字列です。区切りの幅は、F2 sへの数引数で指定することができます。これはポイントの前の指定した文字数文を区切り文字とします。デフォルトでは幅が1なので、ポイントの前の文字が列区切りになります。

行が適切な位置で分割された場合、F2 sは区切りの後ろのテキストを右側のバッファーに移動して、区切りを削除します。適切な位置に列区切りをもたない行は、分割されずに残ります。分割されない行は左側のバッファーに残り、右側のバッファーの対応する行は空になります(これは2Cモードで2列にまたがる行を書くときの方法で、そのような行は左側のバッファーに記述して、右側のバッファーは空の行にします)。

コマンドF2 RETまたはC-x 6 RET (2C-newline)は、2つのバッファーの対応する位置にそれぞれ改行を挿入します。これは2列のテキストを分割されたバッファーで編集するときに、新しい行を追加する一番簡単な方法です。

望みどおりに両方のバッファーを編集し終えたら、F2 1またはC-x 6 1 (2C-merge)で、それらをマージします。これは右側のバッファーからテキストを、もう一方のバッファーの2列目にコピーします。2列編集に戻るには、F2 sを使用します。

F2 dまたはC-x 6 dは、バッファーをそのままにして、2つのバッファーを分割します。F2 dとタイプしたとき、カレントではないバッファーが空の場合、F2 dによりそのバッファーはkillされます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26 プログラムの編集

このチャプターでは、プログラムの編集を容易にするEmacsの機能を説明します。これらの機能で行えるいくつかは、以下のようなものです:


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.1 プログラミング言語のためのメジャーモード

Emacsには、プログラミング言語のために特化した、多くのメジャーモード(メジャーモードを参照してください)があります。プログラミング言語に関連したモードは通常、式の構文、インデントの慣習的ルール、言語の構文をハイライトする方法、関数定義の開始と終了を検索する方法を指定します。プログラムをコンパイルしたり、デバッグするための機能をもつ場合もあります。各言語にたいするメジャーモード名は、言語名により名づけられます。たとえばCプログラミング言語にたいするメジャーモードは、c-modeです。

EmacsにはLisp、Scheme、SchemeベースのDSSSL expression言語、Ada、ASM、AWK、C、C++、Fortran、Icon、IDL(CORBA)、IDLWAVE、Java、Javascript、M4、Makefile、Metafont(フォント作成のためのTeXの仲間)、Modula2、Object Pascal、Objective-C、Octave、Pascal、Perl、Pike、PostScript、Prolog、Python、Ruby、Simula、SQL、Tcl、Verilog、VHDLなどのプログラミング言語のためのモードがあります。Perlのための代替モードはCPerlモードと呼ばれます。一般的なGNUおよびUnixシェルのスクリプティング言語、MS-DOS/MS-Windowsの‘BAT’ファイル、makefiles、DNS masterファイル、一連のさまざまな設定ファイルのためのモードも利用可能です。

理想的には、Emacsは編集したいと望むすべてのプログラミング言語のためのメジャーモードをもつべきです。しかし、もしあなたのお気に入りの言語のためのモードがない場合、それはEmacsとともに配布されないパッケージで実装されているかもしれません(Emacs Lispパッケージを参照してください)。または、あたたが貢献することもできます。

ほとんどのプログラミング言語では、インデントはプログラム構造を示すために行ごとに異なります。したがって、ほとんどのプログラミング言語のモードでは、TABとタイプすることにより、カレント行のインデントが更新されます(プログラムのインデントを参照してください)。さらにDELは通常、タブをあたかも等価な数のスペースであるかのように扱って、後方に削除するbackward-delete-char-untabifyにバインドされているので、空白文字がスペースなのかタブなのか気にせずに、インデントを1列ずつ削除できます。

プログラミング言語のモードに入ることにより、フック変数prog-mode-hookに指定されたカスタムLisp関数と、その後でモード自身のモードフックが実行されます(メジャーモードを参照してください)。たとえばCモードに入ることにより、prog-mode-hookc-mode-hookが実行されます。フックについての情報は、フックを参照してください。

Adaモード(Ada Mode in Ada Modeを参照してください)、C/C++/Objective C/Java/Corba IDL/Pike/AWKモード(CC Mode in CC Modeを参照してください)、Octaveモード、VHDLモード、IDLWAVEモード(IDLWAVE in IDLWAVE User Manualを参照してください)のマニュアルが利用可能です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.2 トップレベルの定義、またはdefun

Emacsでは関数などの、バッファーのトップレベルの主要な定義は、defunと呼ばれます。この名前はLispが由来ですが、Emacsではすべての言語に使用します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.2.1 左端の慣習

プログラミング言語のモードの多くは、伝統的に左マージンにある開カッコや開大カッコ(opening parenthesis or brace)をトップレベルの定義やdefunの開始とみなします。そのためにdefun開始を探すコマンドは、デフォルトではそのような区切りをdefun開始位置として受け取ります。

この慣習をオーバーライドしたければ、ユーザーオプションopen-paren-in-column-0-is-defun-startnilにセットすることによって行うことができます。このオプションがt (デフォルト)にセットされている場合には、このdefun開始の探すコマンドは、コメントや文字列中以外の列0の開カッコか開大カッコ(braces)で停止します。nilならdefunは最外レベルのカッコまたは大カッコを検索することにより発見されます。Emacsの低レベルルーチンはもはやこの慣習に依存しないので、通常はopen-paren-in-column-0-is-defun-startをデフォルトから変更する必要はないでしょう。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.2.2 defunの移動

これらのコマンドはトップレベルの主要な定義、またはdefunsにもとづいてポイントを移動したり、リージョンをセットアップします。

C-M-a

カレントまたは直前のdefunの先頭に移動します(beginning-of-defun)。

C-M-e

カレントまたは直後のdefunの最後に移動します(end-of-defun)。

C-M-h

カレントまたは後続のdefun全体の周囲にリージョンを設定します(mark-defun)。

カレントのdefunの先頭または最後に移動するコマンドは、C-M-a (beginning-of-defun)とC-M-e (end-of-defun)です。これらのコマンドの1つを繰り返すか、正の数引数を使用すると、繰り返しごとに動作方向の次のdefunに移動します。

C-M-aで負の引数-nを指定すると、次のdefunの開始へとn回移動します。これはC-M-eに引数nを与えたときに移動する位置と、正確に同じではありません。defunの終わりは通常、後続のdefunの開始と同じ位置ではないからです(空白文字、コメント、もしかしたら宣言がこれらのdefunを分割するからです)。同様にC-M-eに負の引数を与えると、defunの最後に後方に移動しますが、これはC-M-aに正の引数を与えた場合とは完全に異なる位置になります。

カレントのdefunを操作するには、C-M-h (mark-defun)を使用します。これはカレントのdefunの最後にマークをセットし、先頭にポイントを配します。テキストオブジェクトをマークするコマンドを参照してください。これは、そのdefunをkillしてファイルの他の場所に移動するための、一番簡単な準備方法です。defunの直前(間に空行を挟まない)にコメントがある場合は、そのコメントもマークされます。ポイントがdefunの間にある場合は、後続のdefunを使用します。マークがすでにアクティブのときにこのコマンドを使用すると、リージョンの最後が、複数のdefunを含むように拡張されます。プレフィクス引数を指定した場合は、その数のdefunをマークするか、適切な数のdefunになるようリージョンを拡張します。負のプレフィクス引数の場合は、反対方向のdefunをマークするとともに、以降のmark-defun使用での選択方向も変更します。

Cモードでは、mark-defunとほとんど同じなc-mark-functionを実行します。違いは、それが引数定義、関数名、リターンデータ型を含むことで、これによりC関数全体にリージョンが設定されます。これは標準のキーバインディングをメジャーモードが調整する方法の例です。これにより特定の言語によりふさわしい方法で標準的な作業を行うのです。この目的のために、他のメジャーモードは、これらのキーバインディングすべてを置き換えているかもしれません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.2.3 Imenuとは

Imenu機能は、ファイル内の主要な定義を、名前で検索する方法を提供します。これはチャプター、セクションなどを扱う、テキストフォーマッターのためのメジャーモードでも有用です(複数ファイルを扱う、より強力な機能については、識別子のリファレンスを探すを参照してください)。

M-x imenuとタイプすると、これはミニバッファーを使用して定義の名前を読み取り、ポイントをその定義に移動します。名前の指定に補完を使用できます。このコマンドは常に有効な名前の全体のリストを表示します。

かわりに、コマンドimenuをマウスクリックにバインドできます。そうすると定義名を選択するために、マウスメニューが表示されます。imenu-add-menubar-indexを呼び出して、バッファーのインデックスをメニューバーに追加することもできます。特定のメジャーモードのすべてのバッファーにたいして、このメニューバーアイテムを有効にしたい場合、モードフックにimenu-add-menubar-indexを追加して、これを行うことができます。しかし、それを行うことにより、そのモードでファイルをvisitするたびに、Emacsがそのバッファーのすべての定義を検索する間、待つ必要があります。

バッファーの内容を変更する際、定義の追加や削除をした場合は、メニューの‘*Rescan*’アイテムを呼び出すことにより、新しい内容にもとづいてバッファーのインデックスを更新することができます。imenu-auto-rescanを非nil値にセットした場合、再スキャンは自動的に発生します。テキストを少量変更しただけの場合、再スキャンは必要ありません。

imenu-auto-rescanは、バイト数がimenu-auto-rescan-maxoutより大きいバッファーでは無効にされるでしょう。

変数imenu-sort-functionをセットして、メニューがソートされる方法をカスタマイズすることができます。デフォルトでは、名前はバッファーで出現する順にソートされています。アルファベット順にソートしたいときは、値にシンボルimenu--sort-by-nameを使用します。Lispコードを記述することにより、独自の比較関数を定義することもできます。

ImenuはWhich Functionモードに情報を提供します (Which Functionモードを参照してください)。 Speedbarもこれを使用します(スピードバーフレームを参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.2.4 Which Functionモード

Which Function(どの関数)モードは、グローバルなマイナーモード(マイナーモードを参照してください)で、これはカレントの関数名をモードラインに表示して、バッファーの移動にしたがってそれを更新します。

Which Functionモードを有効または無効にするには、コマンドM-x which-function-modeを使用します。Which Functionモードは、グローバルなマイナーモードです。デフォルトでは、それをサポートする方法を知っている、すべてのメジャーモード(たとえばImenuをサポートするすべてのメジャーモード)に影響を与えます。変数which-func-modesの値をt(これは利用可能なすべてのメジャーモードをサポートすることを意味します)から、特定のメジャーモードのリストに変更することにより、これを制限することができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.3 プログラムのインデント

プログラムを正しくインデントされた状態に保つには、何か変更したらEmacsを使って再インデントするのが一番よい方法です。Emacsには1行、指定した数の行、1つのカッコでグループ化されたすべての行をインデントするコマンドがあります。

インデントに間する全般的な情報は、インデントを参照してください。このセクションでは、プログラミング言語のモードに特有のインデント機能について説明します。

Emacsはppパッケージで、Lispのプリティープリンター(pretty-printer)も提供します。これはLispオブジェクトを、見栄えのよいインデントで再フォーマットします。pp in The Emacs Lisp Reference Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.3.1 プログラムの基本的なインデントコマンド

TAB

カレント行のインデントを調整します(indent-for-tab-command)。

RET

改行を挿入して、次の行のインデントを調整します(newline)。

基本的なインデントコマンドはTAB (indent-for-tab-command)で、これはインデントで説明されています。プログラミング言語のモードでは、TABは前の行のインデントと構文的な内容にもとづき、カレント行をインデントします。リージョンがアクティブのとき、TABはカレント行だけでなく、リージョン内の各行をインデントします。

テキストの挿入で説明されているコマンドRET (newline)は、C-jの後にTABを続けるのと同じです。これは改行を挿入してから、その行のインデントを調整します。

カッコによるグループ化により開始される行でインデントする場合、通常Emacsはグループ内の前の行の開始、または、カッコの後ろのテキストの下に、行の開始を合わせます。(たとえば美的観点により)これらの行に手動で非標準的なインデントを与えた場合は、その下の行もそれにしたがいます。

プログラミング言語のモードのほとんどは、左端の開きカッコ、開き大カッコ(open-brace)、その他の開始区切りを関数の開始とみなします。編集しているコードがこの前提に違反する場合は — それらの区切りが文字列やコメントの中にある場合でも — インデントが正しく機能するために、open-paren-in-column-0-is-defun-startnilをセットしなければなりません。左端の慣習を参照してください


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.3.2 複数行のインデント

複数行のコードを、1度に再インデントしたいときがあるかもしれません。これを行う1つの方法は、マークを使う方法です。マークがアクティブでリージョンが空でないとき、TABはリージョン内の各行をインデントします。一方、コマンドC-M-\ (indent-region)は、マークがアクティブか否かにかかわらず、リージョン内の各行をインデントします(インデントコマンドを参照してください)。

それらに加えて、Emacsはコードの大きな断片をインデントするために、以下のコマンドを提供します:

C-M-q

カッコでグループ化された、すべての行を再インデントします。

C-u TAB

カッコでグループ化されたすべてを横にシフトして、最初の行が正しくインデントされるようにします。

M-x indent-code-rigidly

リージョン内のすべての行を横にシフトしますが、コメントや文字列内で開始される行は変更しません。

1つのカッコでグループ化されたものを再インデントするには、ポイントをグループ化の前に配して、C-M-qとタイプします。これはグループ化されたものの全体的なインデント(たとえばグループ化が開始される行のインデント)は変更せずに、相対的なインデントを変更します。C-M-qで実行される関数は、Lispモードではindent-pp-sexp、Cモードではc-indent-exp、のようにメジャーモードに依存します。全体的なインデントも同様に訂正したい場合は、最初にTABをタイプします。

グループ内の相対的なインデントは好ましいが、それの最初の行のインデントが好ましくない場合は、その最初の行にポイントを移動してC-u TABとタイプします。Lisp、C、他のいくつかのメジャーモードでは、数引数を指定したTABは通常どおりカレント行をインデントしてから、カレント行で始まる、カッコでグループ化されたすべての行を同じ量で再インデントします。このコマンドは巧妙なので、文字列内で開始される行は変更しません。CモードのときはCプリプロセッサー行は変更しませんが、それらにアタッチされた継続行は再インデントします。

コマンドM-x indent-code-rigidlyは、indent-rigidlyが行うように(インデントコマンドを参照してください)、リージョン内のすべての行を厳格(rigidly)にシフトします。このコマンドはリージョンが文字列内で開始される場合を除き、文字列内で開始される行のインデントは変更しません。プレフィクス引数は、インデントする列数です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.3.3 Lispのインデントのカスタマイズ

Lisp式のインデントパターンは、式により呼ばれる関数によって決定することができます。それぞれのLisp関数のために、事前定義された複数のインデントパターンの中から選択するか、Lispプログラムで独自のものを定義できます。

標準的なインデントのパターンは以下のとおりです。最初の引数が式の開始行にある場合、式の2行目は最初の引数の下にインデントされます。そうでない場合、2行目は関数名の下にインデントされ、後続の行はネストの深さが同じなら前の行の下にインデントされます。

変数lisp-indent-offsetが非nilの場合、これは式の2行目の通常のインデントパターンをオーバーライドするので、常にこれを含むリストよりlisp-indent-offset列余計にインデントされます。

特定の関数は、標準のパターンをオーバーライドします。名前がdefで始まる関数は、式の開始の開きカッコよりlisp-body-indent列多く2行目をインデントすることにより、2行目をbodyの開始として扱います。

関数名のlisp-indent-functionプロパティーにより、個々の関数の標準パターンを、さまざまな方法でオーバーライドできます。これは通常declare構成を使用することにより、マクロ定義のために行われます。Defining Macros in The Emacs Lisp Reference Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.3.4 Cのインデントのためのコマンド

Cおよび関連するモードのインデントのために、特別な機能があります。

C-c C-q

カレントのトップレベル関数を再インデント、または型定義を統合します(c-indent-defun)。

C-M-q

ポイントの後ろの、対応が取れた式の中の各行を再インデントします(c-indent-exp)。プレフィクス引数は、無効な構文についての警告メッセージを抑制します。

TAB

カレント行の再インデントおよび/またはタブ文字を挿入する場合もあります(c-indent-command)。

c-tab-always-indenttの場合、このコマンドは常にカレント行をインデントし、他には何もしません。これがデフォルトです。

この変数がnilの場合、このコマンドはポイントが左端か、その行のインデント位置にある場合だけ、カレント行を再インデントします。そうでない場合、このコマンドはタブ(indent-tabs-modenilの場合は等価な数のスペース)を挿入します。

(nilでもtでもない)他の値の場合、常にその行をインデントし、コメントか文字列の中の場合は、タブも挿入します。

カレントバッファー全体を再インデントするには、C-x h C-M-\とタイプします。これは最初にバッファー全体をリージョンとして選択し、それからリージョンを再インデントします。

カレントブロックを再インデントするには、C-M-u C-M-qを使用します。これはブロックの前に移動してから、ブロックのすべてを再インデントします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.3.5 Cのインデントのカスタマイズ

Cモードおよび関連するモードは、インデントをカスタマイズするために柔軟なメカニズムを使用します。Cモードはソース行を2ステップでインデントします。最初のステップは、行の内容とコンテキストに応じて行の構文を分類します。次のステップで、構文コンストラクトで選択されたスタイルにより、関連付けられたインデントのオフセットを決定して、これをアンカーとなる命令文(anchor statement)のインデントに加えます。

C-c . style RET

事前に定義されたスタイルstyleを選択します(c-set-style)。

スタイルとは、Cモードおよび関連するモードで使用できるカスタマイズ用の名前つきコレクションです。完全な説明は、Styles in The CC Mode Manualを参照してください。Emacsには、gnuk&rbsdstroustruplinuxpythonjavawhitesmithellemtelawkを含む、事前に定義されたスタイルがいくつか付属します。これらのスタイルのうちいくつかは、主に1つの言語を意図したものですが、他のスタイルはこれらのモードをサポートする任意の言語で使用できます。スタイルがどのように見えるかは、何らかのコードにたいしてスタイルを選択して、(たとえば関数定義の最初でC-M-qとタイプして)再インデントしてみることです。

カレントバッファーのスタイルを選択するには、コマンドC-c .を使用します。引数として、スタイル名を指定します(大文字小文字に意味はありません)。このコマンドはカレントバッファーだけに影響し、将来のインデントコマンドの呼び出しだけに影響します。そのバッファーにすでにあるコードの再インデントはしません。バッファー全体を新しいスタイルで再インデントするには、C-x h C-M-\とタイプしてください。

変数c-default-styleをセットして、さまざまなメジャーモードにたいしてデフォルトのスタイルを指定できます。この値は、スタイル名(文字列)、または各要素が1つのメジャーモードと、それに使用するインデントスタイルを指定するalistです。たとえば、

(setq c-default-style
      '((java-mode . "java")
        (awk-mode . "awk")
        (other . "gnu")))

これはJavaモード、AWKモードにたいして明示的に選択して、その他のC-likeなモードにたいしては、デフォルトの‘gnu’スタイルを指定します。この変数はC-likeなメジャーモードを選択したときに効果を表します。したがってJavaモードにたいして新しいデフォルトスタイルを指定するには、既存のJavaモードのバッファーで、M-x java-modeとタイプすることにより効果が表れます。

gnuスタイルは、CにたいするGNUプロジェクトで推奨されるフォーマットを指定します。これがデフォルトで、私たちが使用を推奨するスタイルです。

既存のスタイルのオーバーライドや、独自のスタイルを定義する方法など、Cおよび関連するモードにたいするインデントのカスタマイズに間する情報は、Indentation Engine Basics in the CC Mode Manual、およびCustomizing Indentation in the CC Mode Manualを参照してください。

スタイルを指定するかわりに、サンプルコードのバッファーでM-x c-guessとタイプすることにより、Emacsにスタイルを推測させることができます。その後、M-x c-guess-installとして、推測されたスタイルを他のバッファーに適用できます。詳細については、Guessing the Style in the CC Mode Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.4 カッコに付随する編集のためのコマンド

このセクションでは、プログラム内のカッコ構造を活用したり、それらを対応が取れた状態に保つためのコマンドと機能について説明します。

これらの機能を語るとき、用語“カッコ(parenthesis)”には、大カッコ(braces)、角カッコ(brackets)、またはマッチするペアとして定義される区切りも含まれます。メジャーモードはどの区切りに意味があるかを、構文テーブル(syntax table)を通じて制御します(Syntax Tables in The Emacs Lisp Reference Manualを参照してください)。Lispでは丸カッコ(parentheses)だけが考慮され、Cではこれらのコマンドは大カッコや角カッコにも適用されます。

M-x check-parensを使用して、バッファー内の対応の取れていないカッコと、対応が取れていない文字列のクォートを検索することができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.4.1 対応が取れたカッコの式

プログラミング言語のモードはそれぞれ、対応が取れた式(balanced expression)にたいする、独自の定義をもちます。対応が取れた式は通常、個別のシンボル、数字、文字列定数、同様にマッチする区切りで囲まれたコードの断片を含みます。以下のコマンドは対応が取れた式にたいするものです(Emacsでは、内部的にそのような式はsexpとして参照されます13)。

C-M-f

対応が取れた式を、前方に飛び越して移動します(forward-sexp)。

C-M-b

対応が取れた式を、後方に飛び越して移動します(backward-sexp)。

C-M-k

対応が取れた式を、前方にkillします(kill-sexp)。

C-M-t

式を入れ替えます(transpose-sexps)。

C-M-@
C-M-SPC

後続の式の後ろに、マークを配します(mark-sexp)。

対応が取れた式を前方に飛び越して移動するには、C-M-f (forward-sexp)を使用します。ポイントの後ろの最初の文字が開始区切り(たとえばCでは‘(’、‘[’、‘{’)の場合、このコマンドはそれにマッチする終了区切りまで移動します。文字がシンボル、文字列、数字で始まる場合、このコマンドはそれらを飛び越して移動します。

コマンドC-M-b (backward-sexp)は対応が取れた式を後方 — C-M-fと同様ですが逆向き — に飛び越して移動します。式の前にプレフィクス文字がある場合(Lispではシングルクォート、バッククォート、カンマ)、このコマンドはそれらも同様に飛び越して後方に移動します。

C-M-fおよびC-M-bに数引数を与えると、指定した回数繰り返し操作をします。負の引数を与えると、反対の方向に移動します。ほとんどのモードでは、これらの2つのコマンドはコメントをあたかも空白文字のように通過します。これらC-M-fおよびC-M-bのキーは、文字単位で移動するC-fおよびC-b(ポイント位置の変更を参照してください)、単語単位に移動するM-fおよびM-b(単語を参照してください)に類似していることに注意してください。

対応が取れた式全体をkillするには、C-M-k (kill-sexp)とタイプします。これはC-M-fが飛び越すテキストをkillします。

C-M-t (transpose-sexps)は、前にある対応の取れた式と、次の対応の取れた式の位置をスイッチします。このコマンドは、文字を入れ替えるC-tコマンド(テキストの入れ替えを参照してください)と類似しています。C-M-tへの引数は繰り返し回数を意味し、前の式を、何個か先の式に移動します。負の引数は前にある対応が取れた式を後方に、それらの式の前に移動します。引数0は何もしないのではなく、ポイントの位置で終わる対応が取れた式、またはポイントの後ろの式と、マークの後ろの式を入れ替えます。

リージョンにたいして動作するコマンドで対応が取れた式を操作するには、C-M-SPC (mark-sexp)とタイプします。これはC-M-fが移動する位置にマークをセットします。マークがアクティブの間、このコマンドを連続で呼び出すとマークが1つの式ごとにシフトしてリージョンが拡張します。正または負の引数はマークを前方または後方に指定した数の式分のマークを移動します。エイリアスC-M-@は、C-M-SPCと等価です。これに関連したコマンドは、テキストオブジェクトをマークするコマンドを参照してください。

Cのように挿入オペレーター(infix operators)を使用する言語では、与えられた位置で複数の可能な解釈があるので、すべての対応が取れた式を認識するのは不可能です。たとえば‘foo + bar’は1つのCの式ですが、Cモードはこれを1つの式とは扱いません。かわりに‘foo’を1つの式、‘bar’をもう1つの式、そしてそれらの間にある‘+’を句読点として認識します。しかしカッコがあればCモードは‘(foo + bar)’を1つの式として認識します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.4.2 カッコ構造の移動

以下のコマンドはカッコ(または、あなたが使用している言語で、そのような区切りとして使用される文字)で区切られてグループ化されたものを移動するコマンドです。これらのコマンドは、カッコを含んでいたとしても文字列とコメントを無視し、エスケープ文字でクォートされたカッコも無視します。これらのコマンドは主にプログラムの編集を意図していますが、カッコを含む任意のテキストの編集にも有用です。これらは内部的には“リストコマンド”として参照されます。なぜならLispではこれらのグループはリストだからです。

これらのコマンドは、開始ポイントが文字列やコメントの中でないと仮定します。これらのコマンドを文字列やコメントの中から呼び出したとき、結果は信頼できません。

C-M-n

カッコでグループ化されたグループを飛び越えて、前方に移動します(forward-list)。

C-M-p

カッコでグループ化されたグループを飛び越えて、後方に移動します(backward-list)。

C-M-u

カッコによる構造を上に移動します(backward-up-list)。

C-M-d

カッコによる構造を下に移動します(down-list)。

リスト(list)コマンドのC-M-n (forward-list)と、C-M-p (backward-list)は、グループ化されたカッコを前方または後方に、1つ(またはn個)飛び越えて移動します。

C-M-nC-M-pは、カッコによる構造において同じレベルに留まろうと試みます。1レベル(またはnレベル)に移動するには、C-M-u (backward-up-list)を使用します。C-M-uは対応が取れていない、前にある開始区切りへ、後方に移動します。正の引数は繰り返し回数を意味します。負の引数は移動の方向を逆転するので、このコマンドは1レベル以上を上に、前方に移動します。

カッコによる構造をに移動するには、C-M-d (down-list)を使用します。Lispモードでは‘(’は開始区切りなので、これは‘(’を検索するのとほとんど同じです。引数は何レベルしたに移動するかを指定します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.4.3 マッチするカッコ

Emacsにはカッコのマッチング(parenthesis matching)機能がいくつかあります。これにより、どのカッコ(または他の区切り)がどのようにマッチするか簡単に見ることができます。

終了文字となる自己挿入文字をタイプすると、Emacsはそれがスクリーン上にあれば、マッチする開始区切りの位置を簡単に示します。スクリーン上にない場合、Emacsは開始区切りの近くにあるテキストをエコーエリアに表示します。どちらの方法でも、どのグループを終了したのか見分けることができます。開始区切りと終了区切りがマッチしない — ‘[x)’のような場合、エコーエリアに警告メッセージが表示されます。

3つの変数が、マッチするカッコの表示を制御します:

グローバルなマイナーモードのShow Parenモードは、より強力な自動的なマッチングの類を提供します。これは開始区切りの前、または終了区切りの後ろにポイントを移動すると、開始区切りと終了区切り、間にあるテキスト(オプション)をハイライトします。Show Parenモードに切り替えるには、M-x show-paren-modeとタイプします。これをカスタマイズするには、M-x customize-group RET paren-showingとタイプします。このモードの処理を制御するカスタマイズ可能なオプションには、以下が含まれます:

グローバルなマイナーモードのElectric Pairモードは、マッチするカッコ(parentheses)、大カッコ(braces)、角カッコ(brackets)、...などの 区切りを簡単に挿入する方法を提供します。開始区切りを挿入すると、マッチする終了区切りが自動的に挿入され、2つの区切りの間にポイントが置かれます。反対に終了区切りを既存の区切りの先に挿入した場合、何の挿入もされず、その位置は単にスキップされます。リージョンがアクティブ(マークとリージョンを参照)の場合、区切りの挿入はそのリージョンを操作します。リージョン内の文字はマッチする区切りのペアー内に括られ、ポイントはタイプした区切りの後に置かれます。

以下の変数は、Electric Pairモードの追加機能を制御するのに使用できます:

Electric Pairモードに切り替えるには、M-x electric-pair-modeとタイプします。1つのバッファーにたいしてこのモードを切り替えるには、M-x electric-pair-local-modeを使用してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.5 コメントの操作

コメントは、プログラミングにおいて重要なパートなので、Emacsはコメントの編集や挿入を行う特別なコマンドを提供します。Flyspell Progモードによる、コメントのスペルチェックも行うことができます(スペルのチェックと訂正を参照してください)。

異なる種類のコメントのインデントにたいして、特別なルールをもつメジャーモードがいくつかあります。たとえばLispコードでは、2つのセミコロンで始まるコメントは、それらの行がコードであるかのようにインデントされ、3つのセミコロンで始まるコメントは左端に揃えてインデントされ、しばしば区分けの目的で使用されます。Emacsはこれらの慣習を理解します。たとえば、コメント行でTABをタイプすると、そのコメントを適切な位置にインデントします。

;; This function is just an example.
;;; Here either two or three semicolons are appropriate.
(defun foo (x)
;;;  And now, the first part of the function:
  ;; The following line adds one.
  (1+ x))           ; This line adds one.

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.5.1 コメントコマンド

以下のコマンドは、コメントにたいして処理を行います:

M-;

カレント行にコメントを挿入、または位置揃えします。リージョンがアクティブのときは、かわりにリージョンをコメント化、または非コメント化します(comment-dwim)。

C-x C-;

カレント行をコメント、または非コメントにします(comment-line)。リージョンがアクティブの場合は、かわりにリージョンをコメント、または非コメントにします。

C-u M-;

カレント行のコメントをkillします(comment-kill)。

C-x ;

コメント列をセットします(comment-set-column)。

C-M-j
M-j

RETの後にコメントを挿入して位置揃えします(comment-indent-new-line)。複数行のコメントを参照してください。

M-x comment-region
C-c C-c (C-likeなモードの場合)

リージョンのすべての行にたいして、コメント区切りを追加します。

コメントを挿入または位置揃えするコマンドは、M-; (comment-dwim)です。単語“dwim”は、“Do What I Mean(私が言ったとおりにしてください)”の頭文字をとったものです。このコマンドは、コメントに関係する多くの異なる作業に使用できます。それは、このコマンドをどこで使うかという、状況に依存することを示します。

リージョンがアクティブ(マークとリージョンを参照してください)の場合、M-;はリージョンのコメント区切りの追加と削除のどちらかを行います。リージョンの各行がすでにコメントの場合、それらのコメント区切りを削除することにより、それらの行を非コメント化します。そうでない場合は、リージョンのテキストにコメント区切りを追加します。

リージョンがアクティブのときにM-;に数引数を与えると、それは追加または削除するコメント区切りの数を指定します。正の引数nn個の区切りを追加し、負の引数-nn個の区切りを削除します。

リージョンが非アクティブで、カレント行にコメントがない場合、M-;はカレント行に新しいコメントを追加します。ブランク行(たとえば空または空白文字しか含まない)の場合、TABをタイプしたときにインデントされるのと同じ位置に、コメントがインデントされます(プログラムの基本的なインデントコマンドを参照)。非ブランク行の場合、コメントはその行の最後の非空白文字の後ろに配されます。Emacsは、可能なら変数comment-columncomment-fill-column (コメントを制御するオプションを参照)で指定された列の間にコメントを配そうと試みます。それ以外では、Emacsは別の適切な位置、通常、非コメントのテキストと少なくとも1つのスペースを空けてコメントを配します。どちらの場合も、Emacsはコメントの開始区切りの後にポイントを配すので、すぐにコメントのタイプを開始できます。

既存のコメントの位置揃えにもM-;を使用できます。行がすでにコメント開始文字列を含む場合、M-;は慣習的な位置にそれを位置揃えして、ポイントをコメント開始区切りの後ろに移動します。例外として、列0で始まるコメントは移動されません。既存のコメントがすでに正しく位置揃えされているときでも、M-;はコメントテキストの開始に直接移動するので有用です。

C-x C-; (comment-line)は、行そのものをコメント化または非コメント化します。リージョンがアクティブ(マークとリージョンを参照してください)の場合は、リージョン内の行をコメント化または非コメント化します。リージョンが非アクティブの場合、このコマンドはポイントがある行をコメント化または非コメント化します。正のプレフィクス引数nを与えた場合、カレント行から数えてn行を処理します。負の引数-nの場合は、先行するn行に作用します。負の引数を与えてこのコマンドを呼び出した後は、それに続けて正の引数を指定して連続して呼び出した場合、あたかも負の引数が与えられたかのように、先行する行を処理します。

C-u M-; (comment-dwimにプレフィクス引数を指定)は、カレント行の任意のコメントを、それの前の空白文字と一緒にkillします。コメントはkillリングに保存されるので、他の行の行末に移動してC-yで挿入して、M-;でコメントの位置揃えをすることができます。M-x comment-killとタイプしてもC-u M-;と同じ効果を得ることができます(comment-dwimはプレフィクス引数を与えられたとき、実際にサブルーチンとしてcomment-killを呼び出します)。

コマンドM-x comment-regionは、アクティブなリージョンにたいしてM-;を呼び出すのと等価ですが、このコマンドはマークが非アクティブのときでも、常にリージョンにたいして動作します。Cモードおよび関連するモードでは、このコマンドはC-c C-cにバインドされています。コマンドM-x uncomment-regionは、リージョンの各行を非コメント化します。数引数は、削除するコメント区切りの数を指定します(負の引数は、追加するコメント区切りの数を指定します)。

C-likeなモードにたいしては、変数c-indent-comment-alistおよびc-indent-comments-syntactically-pをセットすることにより、M-;の正確な効果を設定できます。たとえば閉じ大カッコで終わる行では、M-;comment-columnではなく、大カッコの後ろにスペースを1つ空けてコメントを配します。完全な詳細は、Comment Commands in The CC Mode Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.5.2 複数行のコメント

コメントをタイプするとき、それを次の行に継続したくなったときは、M-jまたはC-M-j (comment-indent-new-line)とタイプします。これはカレント行を行ブレークして、コメントを継続するために必要なコメント区切りとインデントを挿入します。

コメントの終了区切りをもつ言語(たとえばCの‘*/’)では、M-jの正確な振る舞いは、変数comment-multi-lineの値に依存します。変数の値がnilの場合、このコマンドは古い行のコメントを終了させて、新しい行で新しいコメントを開始します。そうでない場合、カレントのコメント区切りの中で新しい行を開きます。

Auto Fillモードがオンの場合、コメントをタイプしているときにフィル列に達すると、明示的にM-jを呼び出したときと同じ方法で、コメントが継続されます。

既存の行をコメントにするには、リージョンがアクティブのときはM-;、またはM-x comment-regionを使用します。 as described in the preceding section.

複数行ブロックのコメントの行の開始で‘/’をタイプすると、コメントを終了するようにCモードを設定できます。これを行なうには、クリーンアップ(clean-up)で、comment-close-slashを有効にします。Clean-ups in The CC Mode Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.5.3 コメントを制御するオプション

コメントコマンドで示したように、M-jコマンドが行にコメントを追加するとき、バッファーローカルな変数comment-columncomment-fill-column(nilの場合はfill-columnの値。明示的なフィルコマンドを参照されたい)の間にコメントを配そうと試みます。このバッファーローカルな変数のデフォルト値、またはローカルな値は、通常の方法でセットできます(ローカル変数を参照)。かわりにC-x ; (comment-set-column)とタイプすることにより、カレントバッファーのcomment-columnの値を、現在コメントがある列にセットすることができます。C-u C-x ;は、コメント列をそのバッファーのポイントの前にある最後のコメントにセットします。その後でM-;を行うことにより、カレント行のコメントを前のコメントに揃えることができます。

コメントコマンドは、変数comment-start-skipの値である正規表現にもとづいて、コメントを認識します。この正規表現がヌル文字列にマッチしないように気をつけてください。単語という言葉の厳格な意味から考えると、これはコメント開始区切りより長い文字列にマッチするかもしれません。たとえばCモードでの変数の値は"\\(//+\\|/\\*+\\)\\s *"で、これは‘/*’自身と、その後ろの余分なアスタリスクやスペースにマッチし、C++スタイルのコメントも許容します(文字列に‘\’を含む場合、Lisp構文では‘\\’と記述する必要があることに注意してください。これは最初のアスタリスクにたいして、正規表現においてアスタリスクがもつ特別な意味を打ち消すために必要です)。

コメントコマンドが新しいコメントを作るとき、これはcomment-startの値をコメント開始区切りとして挿入します。これはポイントの後ろに、コメント終了区切りとしてcomment-endの値も挿入します。たとえばLispモードではcomment-startが‘";"’で、comment-end""(空文字列)です。Cモードではcomment-start"/* "で、comment-end" */"です。

変数comment-paddingは、コメントコマンドが、コメント区切りとコメントテキストの間を区切る文字列を指定します。デフォルトでは‘" "’、つまり1つのスペースが指定されます。かわりに数字を指定すると、これは指定した数のスペースになり、nilの場合、スペースは挿入されません。

変数comment-multi-lineは、M-jとAuto Fillモードがコメントをどのように複数行に継続するかを制御します。複数行のコメントを参照してください。

変数comment-indent-functionは、新しく挿入されたコメント、または既存のコメントの位置揃え位置を計算するために呼び出される関数を指定します。これはメジャーモードごとに異なります。関数は引数なしで呼び出されますが、新しいコメントが挿入されるときはコメント開始位置のポイント、または行末のポイントで呼び出されます。この関数はコメントが開始されるべき列を返す必要があります。たとえばLispモードでは、デフォルト関数の決定は、既存のコメントがいくつのコメント文字で始まるかにもとづきます。

さらにEmacsは、コメントを付近の行と揃えるようとも試みます。これをオーバーライドするには、インデントの許容できる範囲を示す、(もしかしたら等しい)2つの整数から成るコンスを関数がしても構いません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.6 ドキュメントの照会

Emacsは、関数やプログラムで使おうと計画している変数およびコマンドを、ドキュメントから探すのに使用できる機能をいくつか提供します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.6.1 Infoドキュメントの照会

Infoドキュメントをもつ言語に適用されるメジャーモードでは、プログラムで使用されるシンボルにたいしてC-h S (info-lookup-symbol)を使用することにより、Infoドキュメントを閲覧できます。シンボルはミニバッファーで指定します。デフォルトはバッファーのポイント位置にあるシンボルです。たとえばCモードでは、シンボルをC Library Manualから探します。このコマンドは適切なInfoファイルのマニュアルがインストールされているときだけ機能します。

Emacsは、どのドキュメントのどこからシンボルを探すか — つまり、どのInfoファイルを探すのか、そしてどのインデックスを検索するか — をメジャーモードにもとづき決定します。M-x info-lookup-fileを使用して、ドキュメントのファイル名を指定することもできます。

C-h Sをサポートしないメジャーモードでこれを使用すると、これはsymbol help modeを指定するよう求めます。ここではc-modeコマンドのように、C-h Sをサポートするメジャーモードを選択します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.6.2 man-pageの照会

Unixでは、オンラインドキュメントのメインフォームはmanual pageまたはman pageです。GNUオペレーティングシステムではmanを、Infoでブラウズできる、より組織化されたマニュアルで置き換えることを目指しています。このプロセスは終了していないので、manを読むことはまだ有用です。

オペレーティングシステムのコマンド、ライブラリー関数、システムコールにたいするman pageを、M-x manコマンドで読むことができます。このコマンドは補完つき(補完を参照してください)でトピック(topic)の入力を求め、対応するman pageをフォーマットするために、manコマンドを実行します。そのシステムが許すなら、このコマンドはmanを非同期で実行するので、ページがフォーマットされる間、編集を続けることができます。フォーマットされた結果は*Man topic*という名前のバッファーに表示されます。このバッファーは、Manモードという特別なメジャーモードを使用します。これはスクロールや他のman pageにジャンプする機能をもちます。詳細についてはManモードのバッファーで、C-h mをタイプしてください。

それぞれのman pageは、1つ以上のセクション(sections)に属します。セクションの名前は数字または数字と文字です。同じ名前のman pageが、複数のセクションに存在することもあります。特定のセクションのman pageを読むには、M-x manがトピックの入力を求める際、‘topic(section)’または‘section topic’とタイプします。たとえばCのライブラリー関数chmodはセクション2ですが、同じ名前のシェルコマンドのman pageはセクション1です。前者を閲覧するには、M-x man RET chmod(2) RETとタイプしてください。

セクションを指定しないと、M-x manは通常、最初に見つかったman pageだけを表示します。manに、コマンドラインオプション‘-a’を指定できるシステムもいくつかあります。これは指定したトピックにたいするすべてのman pageを表示するよう指定します。これを使用するには、変数Man-switchesの値を‘"-a"’に変更します。そうするとManモードのバッファーで、M-nM-pで異なるセクションのman pagfeを切り替えることができます。モードラインには、利用可能なman pageの数が表示されます。

man pageを読む他の方法として、M-x womanコマンドがあります。M-x manとは異なり、これはman pageをフォーマットするために外部のプログラムを実行しないので、MS-Windowsのような、manプログラムが利用できないかもしれないシステムでも機能します。このコマンドは、表示するman pageの入力を求め、それを*WoMan section topicという名前のバッファーに表示します。

M-x womanは、コマンドを最初に呼び出したとき、man pageの補完リストを計算します。数引数を指定すると、このリストを再計算します。これはman pageを追加・削除したとき有用です。

man pageの名前を入力して、M-x womanが複数のセクションで同じ名前のman pageを見つけた場合、これはウィンドウをポップアップして利用可能な候補を示し、それらから1つを選択するよう求めます。

M-x womanはモダンなman-pagesの最新機能をまだサポートしていないので、システムで利用可能ならM-x manの使用をわたしたちが推奨していることに注意してください。

M-x womanのセットアップと使用についての情報は、 Emacsとともに配布されているWoMan Infoマニュアルを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.6.3 Emacs Lispドキュメントの照会

Emacs Lispコードを編集するとき、コマンドC-h f (describe-function)およびC-h v (describe-variable)で、使用したい関数または変数のビルトインドキュメントを閲覧できます。コマンドと変数名のヘルプを参照してください。

ElDocモードは、Lispドキュメントを検索するのに助けとなる、バッファーローカルなマイナーモードです。これが有効な場合、ポイントがLisp関数または変数にあるときは、有用な情報がエコーエリアに表示されます。関数の場合は引数リスト、変数の場合は変数のドキュメントストリングの最初の行が表示されます。ElDocモードに切り替えるには、M-x eldoc-modeとタイプします。Global ElDocモード(デフォルトでオン)もあり、これはメジャーモードがEmacs LispモードやLisp Interactionモードであるようなバッファーに作用します(グローバルにオフにするにはM-x global-eldoc-modeとタイプする)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.7 Hideshowマイナーモード

Hideshowモードは、バッファーローカルなマイナーモードで、ブロックと呼ばれるプログラムの一部を、選択的に表示させることができます。このマイナーモードに切り替えるには、M-x hs-minor-modeとタイプします(マイナーモードを参照してください)。

ブロックを非表示にするためにHideshowモードを使用したとき、そのブロックはスクリーンに表示されなくなり、かわりに省略記号(3つのピリオド)に置き換えられます。何をブロックと定めるかは、メジャーモードに依存します。Cモード、および関連するモードでは、ブロックは大カッコ(braces)で区切られ、Lispモードでは丸カッコ(parentheses)で区切られます。複数行のコメントもブロックとみなされます。

Hideshowモードは以下のコマンドを提供します:

C-c @ C-h
C-c @ C-d

カレントブロックを隠します(hs-hide-block)。

C-c @ C-s

カレントブロックを表示します(hs-show-block)。

C-c @ C-c
C-c @ C-e

カレントブロックを表示、または非表示にします(hs-toggle-hiding)。

S-mouse-2

クリックしたブロックの表示・非表示を切り替えます(hs-mouse-toggle-hiding)。

C-c @ C-M-h
C-c @ C-t

トップレベルのすべてのブロックを隠します(hs-hide-all)。

C-c @ C-M-s
C-c @ C-a

バッファーのすべてのブロックを表示します(hs-show-all)。

C-u n C-c @ C-l

現在のブロックの、nレベル下のすべてのブロックを隠します(hs-hide-level)。

以下の変数はHideshowモードをカスタマイズするのに使用されます:

hs-hide-comments-when-hiding-all

nilの場合、C-c @ C-M-h (hs-hide-all)はコメントも隠します。

hs-isearch-open

この変数は、インクリメンタル検索でマッチするテキストが隠されたブロックにあるとき、それを表示すべき条件を指定します。変数の値は、code(コードブロックだけを表示)、comment(コメントだけを表示)、t(コードブロックとコメントの両方を表示)、nil(どちらも表示しない)のいずれかです。デフォルト値はcodeです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.8 シンボル名の補完

補完は通常ミニバッファーで行われますが(補完を参照してください)、シンボル名の補完を、普通のEmacsバッファーで行うこともできます。

プログラミング言語のモードでは、C-M-iまたはM-TABとタイプすることにより、ポイントの前のシンボル名の一部にたいして補完を行うことができます。グラフィカルなディスプレーでは、M-TABキーは通常、グラフィカルなウィンドウの切り替え用にウィンドウマネージャーに予約されているので、かわりにC-M-iまたはESC TABとタイプする必要があります。

ほとんどのプログラミング言語のモードでは、C-M-i (またはM-TAB)は、コマンドcompletion-at-pointを呼び出します。これは柔軟な方法で補完リストを生成します。Semanticモードが有効な場合は、補完にSemanticパーサーのデータを使用することを試みます(Semanticとはを参照してください)。Semanticモードが無効、または補完の処理に失敗した場合、選択されたtagsテーブル(tagsテーブルを参照してください)を使用して補完を試みます。Emacs Lispモードの場合、カレントのEmacsセッションで定義された関数、変数、プロパティー名を使用して補完を行います。

他の点では、バッファーでのシンボル補完はミニバッファーでの補完と同様に振る舞います。たとえば、Emacsが一意なシンボルを補完できない場合、他のウィンドウに補完候補のリストを表示します。補完を参照してください。

Textモード、および関連するモードでは、M-TABはスペルチェッカーの辞書にもとづいて単語を補完します。スペルのチェックと訂正を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.9 大文字小文字の混ざった単語

いくつかのプログラミングスタイルでは、‘unReadableSymbol’のような大文字小文字が混ざった(“CamelCase”の)シンボルを使います(GNUプロジェクトでは、識別子の単語の区切りに、大文字小文字の違いではなく、アンダースコアを使用することを推奨しています)。Emacsには、そのようなシンボルに簡単に対処するための、さまざまな機能があります。

バッファーローカルなマイナーモードのGlassesモードは、そのようなシンボルが表示される方法を変更することにより、それらを読みやすくします。デフォルトでは、小文字とそれに続く大文字の間に余分なアンダースコアを表示します。これはバッファーのテキストを変更するわけではなく、表示の仕方だけを変更します。

Glassesモードに切り替えるには、M-x glasses-modeとタイプします(マイナーモードを参照してください)。Glassesモードが有効な場合、モードラインのマイナーモードインジケーターには‘o^o’が表示されます。Glassesモードに間する情報を得るには、C-h P glasses RETとタイプしてください。

Subwordモードは、バッファーローカルなマイナーモードです。Subwordモードでは、Emacsの単語コマンドは、‘StudlyCapsIdentifiers’のような、単語の中の大文字を単語境界と認識します。Subwordモードが有効なときは、モードラインのマイナーモードインジケーターに‘,’が表示されます。同様なモードsuperword-modeも参照してください(プログラムを編集するための他の便利な機能を参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.10 Semanticとは

Semanticは、ソースコードパーサー(source code parsers)にもとづく、言語認識(language-aware)による編集のためのコマンドを提供します。このセクションは、Semanticについての簡単な説明を提供します。完全な詳細については、 Semantic in Semanticを参照してください。

Font Lockモード(Font Lockモードを参照してください)のような、Emacsの言語認識機能(language aware features)のほとんどは、rules of thumb14にもとづいています。これは大抵の場合においてよい結果を得られますが、完全に正しい結果は決して得られない、ということを意味します。対照的に、Semanticで使用されるパーサーは、プログラミング言語の構文を正確に理解します。これによりSemanticは、より強力で正確な検索、操作、補完コマンドが提供できるのです。

Semanticの使用を開始するには、M-x semantic-modeをタイプするか、‘Tools’メニューの、‘Source Code Parsers (Semantic)’という名前のメニューをクリックします。これはグローバルなマイナーモードのSemanticモードを有効にします。

Semanticモードが有効な場合、Emacsはファイルをvisitするたびに自動的にパースを試みます。現在のところ、SemanticはC、C++、HTML、Scheme、Java、Javascript、Make、Python、Scheme、SRecord、Texinfoを理解します。パースされたバッファーでは以下のコマンドが利用可能です:

C-c , j

カレントファイルで定義された関数名の入力を求め、ポイントをそこに移動します(semantic-complete-jump-local)。

C-c , J

Emacsがパースした任意のファイルで定義された関数名の入力を求め、ポイントをそこに移動します(semantic-complete-jump)。

C-c , SPC

ポイント位置のシンボルにたいして可能な補完候補のリストを表示します(semantic-complete-analyze-inline)。これは補完候補を選択するための特別なキーバインドのセットをアクティブにします。RETはカレントの補完候補を選択し、M-nM-pは可能な補完候補を巡回、TABは可能なところまで補完を行ってから巡回、そして、C-gまたは他のキーは補完を中止します。

C-c , l

ポイント位置のシンボルにたいして可能な補完候補のリストを、他のウィンドウに表示します(semantic-analyze-possible-completions)。

上記のコマンドに加えて、Semanticパッケージは、パーサー情報を使用する他のさまざまな方法を提供します。たとえば、Emacsがアイドルのとき、補完候補のリストを表示するために、それを使用することができます。 詳細は、Semantic in Semanticを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.11 プログラムを編集するための他の便利な機能

プログラムを編集するためにデザインされているわけではありませんが、有用なEmacsコマンドもいくつかあります

単語、センテンス、パラグラフを操作するEmacsコマンドは、コードを編集するのに有用です。ほとんどのシンボル名は単語(単語を参照してください)を含んでおり、文字列やコメントの中でセンテンス(センテンスを参照してください)を見つけることができます。パラグラフについては、ほとんどのプログラミング言語のモードは空行をパラグラフの開始および終了に定義しています。したがって空行を注意深く使用してプログラムをクリアーにすることにより、パラグラフコマンドが機能できる、有意なテキストの集合を提供することができます。プログラミング言語のモードでAuto Fillモードが有効な場合、新しい行の作成でインデントされるようになります。

Superwordはバッファーローカルなマイナーモードで、編集および移動コマンドがシンボル(たとえば‘this_is_a_symbol’)を単語として扱うようになります。Superwordモードが有効な場合、モードラインのマイナーモードインジケーターに、 ‘²’ が表示されます。同様なモードsubword-modeも参照してください(大文字小文字の混ざった単語を参照してください)。

Electric Layoutモード(M-x electric-layout-mode)はグローバルなマイナーモードで、特定の文字をタイプしたときに自動的に改行を挿入します。たとえばJavascriptモードでは‘{’、‘}’、‘;’などです。

Hideshowモード(Hideshowマイナーモードを参照してください)は別として、プログラムの一部を選択的に表示するには、選択的な表示機能(選択的な表示を参照してください)を使う方法があります。プログラミングのモードには、Foldoutパッケージ(折り畳み編集を参照してください)とともに使用できる、Outline minorマイナーモード(Outlineモードを参照してください)をサポートするものもあります。

Prettify Symbolsモードはバッファーローカルなマイナーモードで、特定の文字の表示をよりアトラクティブ(attractive: 見栄えのする)なバージョンに置き換えます。たとえばEmacs Lispモードでは、文字列‘lambda’を、ギリシャ文字のラムダ‘λ’に置き換えます。TeXバッファーでは‘\alpha’ ... ‘\omega’、および他の数学マクロ(math macros)を、対応するUnicode文字に置き換えます。このモードを、プログラミングとは関係のないモードで使いたいと思うかもしれません。prettify-symbols-alistにエントリーを追加することにより、このモードをカスタマイズできます。デフォルト値であるprettify-symbols-default-compose-pの値が適切でない場合、prettify-symbols-compose-predicateをカスタマイズすることで、より入念なカスタマイズが可能です。グローバルなバージョンglobal-prettify-symbols-modeは、サポートするすべてのモードでこれを有効にします。

ポイント位置のシンボルを、元の形式で表示することもできます。これは変数prettify-symbols-unprettify-at-pointにより制御されます。非nilの、ポイントがシンボル位置にある限り、そのシンボルの元の形式が復元されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.12 Cおよび関連するモード

このセクションではC、C++、Objective-C、Java、CORBA IDL、Pike、AWKのためのモード(これらは“Cモードおよび関連するモード”と呼ばれます)で利用できる、特別な機能を簡単に説明します。 詳細は、Emacsとともに配布されるCC modeのInfoマニュアルを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.12.1 Cモードの移動コマンド

このセクションでは、Cモードおよび関連するモードで、ポイントを移動するコマンドを説明します。

C-M-a
C-M-e

カレント関数またはトップレベルの定義の、先頭または最後にポイントを移動します。スコープによる囲い(C++のclassなど)をもつ言語では、カレント関数(current function)はスコープ内の隣接する関数です。そうでない場合、それは大カッコ(braces)で囲まれることにより定義されます。defunの移動を参照してください。

C-c C-u

マークを置いたまま、ポイントを含むプリプロセッサー条件を後方に移動します。プレフィクス引数は、繰り返し回数として振る舞います。負の引数を指定すると、ポイントを含むプリプロセッサー条件の最後に、前方へポイントを移動します。

#elif’は、‘#else’の後に‘#if’を続けたのと同じなので、この関数は後方に移動するときは‘#elif’で止まりますが、前方に移動するときは止まりません。

C-c C-p

マークを置いたまま、プリプロセッサー条件を越えてポイントを後方に移動します。プレフィクス引数は、繰り返し回数として振る舞います。負の引数の場合は前方に移動します。

C-c C-n

マークを置いたまま、プリプロセッサー条件を越えて、ポイントを前方に移動します。プレフィクス引数は、繰り返し回数として振る舞います。負の引数の場合は後方に移動します。

M-a

一番内側のCステートメントの先頭に、ポイントを移動します(c-beginning-of-statement)。すでにポイントがステートメントの先頭にある場合は、その前のステートメントの先頭に移動します。プレフィクス引数nを指定した場合、n - 1個前のステートメントに、後方へ移動します。

2行以上のコメントまたは文字列の場合、このコマンドはステートメントではなくセンテンス単位で移動します。

M-e

Cステートメントまたはセンテンスの最後に、ポイントを移動します。M-aと同様ですが、これは逆の方向に移動します(c-end-of-statement)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.12.2 エレクトリックC文字

Cモードおよび関連するモードでは、特定の文字はエレクトリック(electric) — つまり自分自身を挿入するのに加えて、カレント行を再インデントしたり、オプションで改行を挿入します。エレクトリックな文字は、{}:#;,<>/*()です。

混乱したインデントのコードを編集している場合には、エレクトリックなインデントを不便だと感じるかもしれません。CCモードになれていない場合、それはあなたを当惑させるかもしれません。エレクトリックな動作は、コマンドC-c C-lで切り替えることができます。有効な場合には、モードラインのモード名の後ろに‘/cl’が表示されます(cが表示される場合、それはコメントスタイルがブロックスタイルかラインスタイルかに応じて‘*’か‘/’が表示される)。

C-c C-l

エレクトリックな動作を切り替えます(c-toggle-electric-state)。正のプレフィクス引数を指定した場合、、このコマンドはエレクトリックな動作を有効にし、負の引数の場合は無効にします。

エレクトリックな文字は、エレクトリックな状態に加えて、自動改行(auto-newline)の機能が有効な場合(モードラインのモード名の後ろに‘/cla’が表示されている状態のとき)だけ、改行を挿入します。この機能はC-c C-aで、オンまたはオフに切り替えることができます。

C-c C-a

自動改行機能を切り替えます(c-toggle-auto-newline)。このコマンドにプレフィクス引数を指定した場合、引数が正のときは自動改行機能をオン、負のときはオフに切り替えます。

CCモードのスタイルは通常、Emacsが自動改行する正確な状況を設定します。これを直接設定することもできます。Custom Auto-newlines in The CC Mode Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.12.3 Cの欲張りな削除機能

ポイント位置の空白文字のブロック全体を削除したい場合は、hungry deletion(欲張りな削除)を使うことができます。これはポイントの前後の、一連の空白文字を1回の操作で削除します。空白文字(whitespace)にはタブと改行が含まれますが、コメントとプリプロセッサーコマンドは含まれません。

C-c C-DEL
C-c DEL

ポイントの前の空白文字のブロック全体を削除します(c-hungry-delete-backwards)。

C-c C-d
C-c C-Delete
C-c Delete

ポイントの後の空白文字のブロック全体を削除します(c-hungry-delete-forward)。

上記のコマンドのかわりに、hungry deleteモードを有効にすることができます。この機能が有効な場合(モードラインのモード名の後に‘/’と‘h’が示されます)、1回のDELで1つのスペースではなくポイントの前に続くすべての空白文字を削除し、C-d(Deleteではありません)でポイントの後に続くすべての空白文字を削除します。

M-x c-toggle-hungry-state

hungry-delete機能を切り替えます(c-toggle-hungry-state)。このコマンドにプレフィクス引数を指定した場合、正の場合はhungry-delete機能をオン、負の場合はオフにします。

変数c-hungry-delete-keyは、hungry-delete機能を有効にするかを制御します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.12.4 Cモードのその他のコマンド

M-x c-context-line-break

このコマンドは、コンテキストに応じたマナーで、行ブレークの挿入と新しい行のインデントを行います。通常のコードの中では、RET (newline)の働きをしますが、Cプリプロセッサー行の中では、行ブレークに追加で‘\’を挿入し、コメントの中ではM-j (c-indent-new-comment-line)のように動作します。

デフォルトでは、c-context-line-breakはキーにバインドされていませんが、便利に使うためには、キーにバインドする必要があります。以下のコードは、このコマンドをRETにバインドします。この例ではキーマップを変更する前に、それがロードされていることを確実にするためにc-initialization-hookを使用しています。

(defun my-bind-clb ()
  (define-key c-mode-base-map "\C-m"
              'c-context-line-break))
(add-hook 'c-initialization-hook 'my-bind-clb)
C-M-h

マークを関数定義の最後に配し、ポイントを先頭に配します(c-mark-function)。

M-q

CおよびC++のコメントに対応した、パラグラフのフィルを行います(c-fill-paragraph)。カレント行がコメントを含む、またはカレント行がコメントの場合、このコマンドはコメントのインデントとコメント区切りを保ちながら、コメントまたはポイントがあるパラグラフをフィルします。

C-c C-e

リージョンのテキストにたいして、Cプリプロセッサーを実行して、すべてのマクロ呼び出しの展開を含めて、結果を表示します。リージョンの前にあるバッファーのテキストも、マクロ定義がそこにあるためにプリプロセスされますが、この部分は出力には表示されません。

マクロを使用するCコードをデバッグするとき、マクロがどのように展開されるか正確に解明するのが難しいときがあります。このコマンドにより、展開結果を見ることができるので、わざわざ解明する必要がなくなります。

C-c C-\

リージョン内の各行末に、‘\’文字を挿入、または位置揃えします(c-backslash-region)。これはCマクロ定義を、記述または編集した後に便利です。

行がすでに(c-backslash-region)で終了されている場合、このコマンドはそれの前の空白文字の数を調整します。そうでない場合は、新規に‘\’を挿入します。しかしリージョンの最後の行は特別に扱われます。この行には‘\’は挿入されず、もし‘\’がある場合は削除します。

M-x cpp-highlight-buffer

プリプロセッサー条件に対応するテキスト部分を、ハイライトします。このコマンドは*CPP Edit*という名前の別のバッファーを表示します。これは特定の条件とその内容をどのように表示するかを選択するための、グラフィックメニューを供します。さまざまなセッティングを変更した後に、‘[A]pply these settings’をクリック(またはそのバッファーでaをタイプ)すると、それに応じてCモードのバッファーが再ハイライトされます。

C-c C-s

カレントソース行の構文的な情報を表示します(c-show-syntactic-information)。この情報は、その行がどのようにインデントされるべきか決定するために使用されます。

M-x cwarn-mode
M-x global-cwarn-mode

CWarnマイナーモードは、ある種の疑わしいCおよびC++の構文をハイライトします。

このモードを1つのバッファーにたいして有効にするにはコマンドM-x cwarn-mode、すべての適合するバッファーにたいして有効にするにはコマンドM-x global-cwarn-mode、または変数global-cwarn-modeをカスタマイズします。これが機能するためには、Font Lockモードも有効にしなければなりません。

M-x hide-ifdef-mode

Hide-ifdefマイナーモードは、プリプロセッサーブロック‘#if’および‘#ifdef’の中の選択されたコードを隠します。変数hide-ifdef-shadowtに変更した場合、Hide-ifdefマイナーモードははプリプロセッサーブロックを隠すかわりに、より目立たないフェイスでそれらのブロックをshadowします。詳細は、hide-ifdef-modeのドキュメント文字列を参照してください。

M-x ff-find-related-file

カレントバッファーでvisitされたファイルに関連するファイルを、特別な方法で検索します。通常これはC/C++ソースファイルにたいするヘッダーファイル、またはその逆です。変数ff-related-file-alistは、関連するファイル名をどのように計算するかを指定します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.13 Asmモード

Asmモードは、アセンブラーコードのファイルを編集するためのメジャーモードです。このモードは、以下の3つのコマンドを定義します:

TAB

tab-to-tab-stop.

C-j

改行を挿入してから、tab-to-tab-stopを使ってインデントします。

:

コロンを挿入してから、コロンの前のラベルからインデントを削除します。その後、tab-to-tab-stopを実行します。

;

コメントの挿入または位置揃えをします。

変数asm-comment-charはアセンブラー構文でコメントを開始する文字を指定します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.14 Fortranモード

Fortranモードは、固定形式(fixed form)(またはタブ形式(tab format))のソースコードを編集するためのモードです(通常はFortran 77)。よりモダンな自由形式(free form)のソースコードを編集するためには、F90モード(f90-mode)を使用します。Emacsは通常、拡張子が‘.f’、‘.F’、‘.for’のファイルにたいしてはFortranモードを使用し、拡張子が‘.f90’、‘.f95’、‘.f03’、‘.f08’のファイルにたいしてはF90モードを使用します。auto-mode-alistをカスタマイズして、拡張子を追加することができます。GNU Fortranは、これら自由形式と固定形式の両方をサポートします。このマニュアルでは主にFortranモードを記述しますが、対応するF90モードの機能については、その都度言及します。

Fortranモードは、Fortran命令文およびサブプログラムにたいする特別な移動コマンドと、Fortranのネスト規則、行番号、行継続された命令文を理解する、インデントコマンドを提供します。Fortranモードは、長い行を適正なFortranの継続行にブレークする、Auto Fillモードをサポートします。FortranモードはHideshowマイナーモード (Hideshowマイナーモードを参照してください)、 、およびImenu (Imenuとはを参照してください)もサポートします。

Fortranのコメントは他の言語とは異なるので、コメントのための特別なコマンドも提供されています。ビルトインのabbrev(省略形)は、Fortranキーワードをタイプする手間を削減します。

M-x fortran-modeを使用して、このメジャーモードに切り替えます。このコマンドはフックfortran-mode-hookを実行します。 フックを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.14.1 移動コマンド

defun(Fortranのサブプログラム — 関数、サブルーチン、同様にF90モードのモジュールには、コマンドfortran-end-of-subprogramおよびfortran-beginning-of-subprogramを使用します)を単位に移動、操作する通常コマンドに加えて、Fortranモードは命令文や他のプログラム単位に移動する、特別なコマンドを提供します。

C-c C-n

次の命令文の先頭に移動します(fortran-next-statement/f90-next-statement)。

C-c C-p

前の命令文の先頭に移動します(fortran-previous-statement/f90-previous-statement)。前の命令文が存在しない場合(たとえばバッファーの最初の命令文で呼び出された場合)、バッファーの先頭に移動します。

C-c C-e

次のコードブロックの先頭、またはカレントのコードブロックの最後に移動します(f90-next-block)。コードブロックとは、サブルーチン、ifendif命令文などです。これはF90モードだけのコマンドで、Fortranモードにはありません。数引数を指定すると、複数ブロックを前方に移動します。

C-c C-a

前のブロックに、後方にポイントを移動します(f90-previous-block)。これはf90-next-blockと似ていますが、後方に移動します。

C-M-n

カレントのコードブロックの最後にポイントを移動します(fortran-end-of-block/f90-end-of-block)。数引数を指定した場合、指定した数のブロックを前方に移動します。ポイントを移動する前にマークがセットされます。このコマンドのF90モードのバージョンでは、ブロックタイプと、(もしあれば)ラベルの整合性をチェックしますが、最外のブロックは不完全かもしれないのでチェックしません。

C-M-p

カレントコードブロックの先頭にポイントを移動します(fortran-beginning-of-block/f90-beginning-of-block)。これはfortran-end-of-blockと似ていますが、後方に移動します。

コマンドfortran-beginning-of-subprogramおよびfortran-end-of-subprogramは、カレントサブプログラムの先頭または後方に移動します。コマンドfortran-mark-doおよびfortran-mark-ifは、カレントのdoブロック、またはifブロックの最後にマークをセットして、ポイントをブロックの先頭に移動します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.14.2 Fortranのインデント

固定形式(またはタブ形式)のFortranコードにたいしては、さまざまな構文エントリー(行番号、行インジケーター、継続行フラグ)が、要求される列に表示されるようにするために、特別なコマンドと機能が必要です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.14.2.1 Fortranのインデントおよびフィルコマンド

C-M-j

ポイント位置でカレント行をブレークして、継続行をセットアップします(fortran-split-line)。

M-^

その行を前の行と結合します(fortran-join-line)。

C-M-q

ポイントのあるサブプログラムの、すべての行をインデントします(fortran-indent-subprogram)。

M-q

コメントブロックまたは命令文をフィルします(fortran-fill-paragraphまたはfortran-fill-statementを使用します)。

キーC-M-qは、fortran-indent-subprogramを実行します、これはポイントを含むFortranサブプログラム(関数またはサブルーチン)の、すべての行を再インデントします。

キーC-M-jは、fortran-split-lineを実行します、これはFortranの流儀にあった方法で行を分割します。非コメント行では、後半は継続行になり、それにしたがったインデントになります。コメント行の場合、両方とも別のコメント行になります。

M-^またはC-c C-dは、コマンドfortran-join-lineを実行します。これは継続行を前の行に結合します。大雑把にいうと、fortran-split-lineの逆です。このコマンドを呼び出すとき、ポイントは継続行になければなりません。

FortranモードでのM-qは、ポイントのあるコメントブロックまたは命令文ブロックをフィルします。これは余分な命令文の継続を削除します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.14.2.2 継続行

ほとんどのFortran77コンパイラーは、2つの方法で継続行を記述します。ある行の最初の非スペース文字が列5の場合、その行は前の行の継続行です。これを固定形式(fixed form)と呼びます。(GNU Emacsでは常に列は0から数えますが、Fortran標準では列1から数えることに注意。列をFortran様式で表示するよう、変数column-number-indicator-zero-basedをカスタマイズできる。 モードラインのオプションを参照されたい) 変数fortran-continuation-stringは、列5に配す文字を指定します。タブ文字で開始され、その後‘0’以外の任意の数字後に続くTAB文字も継続行です。この継続スタイルをタブ形式(tab format)と呼びます(Fortran 90では、自由形式(free form)という継続行スタイルが導入された)。

Fortranモードは、どちらの継続行スタイルも使用できます。Fortranモードに入ったとき、バッファー内容から、自動的に適切な継続行スタイルを推論しようと試みます。これはバッファーの開始から、fortran-analyze-depth行(デフォルトは100)をスキャンすることにより行われます。最初の行の開始がタブ文字か、6個のスペースかで選択が決定されます。スキャンが失敗した場合(たとえば、新しいバッファーで中身が空の場合)、fortran-tab-mode-defaultの値(nilの場合は固定形式で、非nilの場合はタブ形式)が使用されます。モードラインに‘/t’ (fortran-tab-mode-string)が表示されている場合、タブ形式が選択されていることを示します。それに応じてFortranモードはindent-tabs-modeの値をセットします。

行のテキストがFortranの継続マーカー‘$’で始まるか、列5の非空白文字で始まる場合、Fortranモードはそれを継続行として扱います。継続行をTABでインデントした場合、その行をカレントの継続スタイルに変換します。Fortran命令文をC-M-jで分割した場合、継続スタイルに応じた継続マーカーがある新しい行が作成されます。

継続スタイルのセッティングは、Fortranモードでの編集の他の側面に影響します。固定形式の場合、命令文の最小列は6になります。Fortranブロック内でそれより大きい列にインデントされる行には、空白文字としてスペース文字だけを使用しなければなりません。タブ形式では、命令文の最小列は8で、列8より前の空白文字は1つのタブ文字でなければなりません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.14.2.3 行番号

その行の最初の非空白文字が数字の場合、Fortranのインデントはそれを行番号と判断して、列0から列4に移動します(Emacsでは列を常に0から数えるが、column-number-indicator-zero-basednilにセットすることによりこれを変更できる。 モードラインのオプションを参照されたい)

4桁以下の行番号は、通常1つのスペースでインデントされます。変数fortran-line-number-indentはこれを制御します。これは行番号がもてる最大のインデントを指定します。この変数のデフォルト値は1です。Fortranモードは、必要なら指定した最大列以下にインデントを減らして、行番号が列4を超えるのを防ごうと試みます。fortran-line-number-indentが5の場合、行番号は列4で終わるように右端に揃えられます。

これらのルールに応じたインデントをするには、単純に行番号を挿入するだけで充分です。各桁が挿入されるたびに、インデントは再計算されます。この機能をオフに切り替えるには、変数fortran-electric-line-numbernilにセットしてください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.14.2.4 構文的な慣習

Fortranモードは正しくインデントを行うために、あなたが、Fortranプログラム解読を単純化する特定の慣習にしたがうと仮定します:

これらの慣習にしたがわない場合、インデントコマンドは醜いインデントをするかもしれません。しかし正しいFortranプログラムなら、慣習にしたがわずにインデントされたものでも、その意味は変わりません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.14.2.5 Fortranのインデントのための変数

Fortranのインデントがどのように機能するかを制御する、追加の変数がいくつかあります:

fortran-do-indent

do’命令の各レベルにたいする、追加のインデントです(デフォルトは3)。

fortran-if-indent

if’、‘select case’、‘where’命令の各レベルにたいする、追加のインデントです(デフォルトは3)。

fortran-structure-indent

structure’、‘union’、‘map’、‘interface’命令の各レベルにたいする、追加のインデントです(デフォルトは3)。

fortran-continuation-indent

継続行の本文にたいする、追加のインデントです(デフォルトは3)。

fortran-check-all-num-for-matching-do

Fortran 77では、番号つきの‘do’命令は、それにマッチする行番号をもつ任意の命令で終了します。この目的のためには‘continue’命令を使うのが一般的です(が、強制ではありません)。この変数が非nil値の場合、番号が付与された命令をインデントするとき、そこで終了する‘do’をチェックしなければなりません。‘do’命令を常に‘continue’(またはよりモダンな‘enddo’)で終了する場合は、この変数をnil(デフォルト)にセットすることにより、インデントの速度を上げることができます。

fortran-blink-matching-if

この変数がtの場合、‘endif’(または‘enddo’)命令のインデントにより、マッチする‘if’(または‘do’)命令にカーソルが数瞬移動します。デフォルトはnilです。

fortran-minimum-statement-indent-fixed

固定形式の継続行スタイルを使用する場合の、Fortran命令にたいする最小のインデントです。命令本体はこれより小さい値でインデントされることはありません。デフォルトは6です。

fortran-minimum-statement-indent-tab

タブ形式の継続行スタイルを使用する場合の、Fortran命令にたいする最小のインデントです。命令本体はこれより小さい値でインデントされることはありません。デフォルトは8です。

以下のセクションでは、コメントのインデントを制御する変数を説明します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.14.3 Fortranのコメント

通常のEmacsのコメントコマンドは、コード行の後にコメントを記述できると仮定します。Fortran 77では、標準のコメント構文はコメント行に行全体を要求します。したがってFortranモードは、標準のEmacsコメントコマンドを置き換え、新しい変数も定義します。

Fortranモードは、‘!’で始まり、他のテキストの後に記述することができる、Fortran 90のコメント構文も処理できます。この構文を許すFortran 77コンパイラーは限られているので、Fortranモードは、あらかじめそれを行うように指示しない限り、そのようなコメントを挿入しません。これを行うには、変数fortran-comment-line-startに‘"!"’をセットします。通常とは異なる値を使う場合、fortran-comment-line-start-skipも変更する必要があるでしょう。

M-;

コメントの位置揃え、または新しいコメントを挿入します(comment-dwim)。

C-x ;

非標準の‘!’だけを適用します(comment-set-column)。

C-c ;

リージョンのすべての行をコメントにします。または(引数を指定した場合は)コメントを実際のコードに戻します(fortran-comment-region)。

Fortranモードで実行すると、これは標準のcomment-dwimを実行します。これは任意の種類の既存のコメントを認識して、それらのテキストの位置揃えをします。既存のコメントがない場合は、コメントの挿入・位置揃えをします。Fortranモードでのコメントの挿入および位置揃えは、他のモードとは異なります。

新しいコメントが挿入されなければならない場合、カレント行が空のときは、行全体をコメントとして挿入します。その行が空でない場合、もしそれを使うことを指示していれば、非標準の‘!’コメントが挿入されます。そうでない場合はカレント行の前に新しい行を挿入して、その行全体をコメントにします。

非標準の‘!’コメントは、他の言語のコメントと同じように位置揃えされますが、行全体のコメントは異なります。標準の行全体のコメントは、コメント区切り自体は常に列0に出現しなければなりません。位置揃えできるのは、コメントの中のテキストです。変数fortran-comment-indent-styleに、以下の3つの値のうち1つをセットすることにより、3つのスタイルの位置揃えを選択できます。

fixed

テキストを固定列に位置揃えします。これはfortran-comment-line-extra-indentと命令文の最小のインデントとの和です。これがデフォルトです。

最小のインデントは、タブ形式の継続行スタイルの場合はfortran-minimum-statement-indent-tabで、固定形式スタイルの場合はfortran-minimum-statement-indent-fixedです。

relative

そのテキストがコード行であるかのように位置揃えしますが、fortran-comment-line-extra-indentに指定した列のインデントが追加されます。

nil

行全体のコメントを自動的に移動しません。

これらに加えて、変数fortran-comment-indent-charに、使用したい1文字をセットすることにより、行全体のコメントのインデントに使用する文字を指定することができます

コンパイラーにたいする命令行や、プリプロセッサー行は、コメント行と同じ外観をもっています。しかし、fortran-comment-indent-styleの値に関わらず、そのような行が決してインデントされないことが重要です。変数fortran-directive-reは、どのような行がそのような命令なのかを指定する正規表現です。これにマッチする行はインデントされず、特別な外観のフォントが適用されます。

Emacsの通常のコメントコマンドC-x ; (comment-set-column)は再定義されません。‘!’コメントを使用している場合、このコマンドをそれらに使用できます。そうでない場合、これはFortranモードでは役に立ちません。

コマンドC-c ; (fortran-comment-region)は、リージョンのすべての行の行頭に文字列‘c$$$’を挿入することにより、これらをコメントにします。数引数を指定した場合、各行の行頭から‘c$$$’を削除することにより、リージョンをコードに戻します。これらのコメントに使用する文字列は、変数fortran-comment-regionをセットすることにより制御できます。これはコマンドと変数が同じ名前をもつ例であることに注意してください。同じ名前を2つの用途で使用することによる衝突はありません。なぜならLispおよびEmacsではそれが意味するものは、コンテキストにより明らかだからです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.14.4 FortranモードでのAuto Fill

Fortranモードは、Auto Fillモードにたいする特別なサポートをもっています。これは命令文を挿入するとき、それが長くなりすぎた場合は自動的に分割するマイナーモードです。命令文の分割は、fortran-continuation-stringを使用した継続行により行われます(継続行を参照してください)。この分割はSPCRETTAB、およびFortranのインデントコマンドにより発生します。FortranモードでのAuto Fillの有効化は、通常の方法で行うことができます。 Auto Fillモードを参照してください。

Auto Fillは、その行が望ましい幅(fill-columnの値)より長くなった場合は、スペースおよび区切り文字で行をブレークします。Auto Fillが行をブレークする(空白文字以外の)区切り文字は‘+’、‘-’、‘/’、‘*’、‘=’、‘<’、‘>’、‘,’です。fortran-break-before-delimitersnilの場合、区切り文字の後ろで行ブレークします。そうでない場合(デフォルト)、区切り文字の前で行ブレークします。

すべてのFortranバッファーでAuto Fillを有効にするには、fortran-mode-hookauto-fill-modeを追加します。 フックを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.14.5 Fortranでの列のチェック

標準のFortran 77では、72列目以降は無視されます。ほとんどのコンパイラーはこれを変更するオプションを提供します(たとえばgfortranの‘-ffixed-line-length-N’)。変数fortran-line-lengthをカスタマイズすることにより、Fortranモードでの行の長さを変更できます。このポイント以降はコメントにfont-lockされます(ただし文字列内の場合は除きます。fortran-line-lengthを超える文字列は、font-lockを混乱させるでしょう)。

C-c C-r

カレント行の上に、列目盛(column ruler)を一時的に表示します。

C-c C-w

fortran-line-length列の幅になるように、カレントウィンドウを水平に分割します(fortran-window-create-momentarily)。これは、Fortranコンパイラーにより課せられた制限を超えないようにする助けになるでしょう。

C-u C-c C-w

(fortran-window-create)列の幅になるように、カレントウィンドウを水平に分割します。その後は編集を続行できます。

M-x fortran-strip-sequence-nos

fortran-line-length以上のすべてのテキストを削除します。

コマンドC-c C-r (fortran-column-ruler)は、カレント行の上に列目盛を一時的に表示します。列目盛は2行のテキストで、Fortranプログラムにおいて特別な意味をもつ列の位置を表示します。角カッコ(square brackets)は行番号の範囲を示し、中カッコ(curly brackets)は命令文本体の範囲を示します。列番号がその上に表示されます。

GNU Emacsで常にそうであるように、列番号は0からカウントされることに注意してください(ただしFcolumn-number-indicator-zero-basedoをカスタマイズして、rtranにマッチするよう列表示を変更することができる)。 モードラインのオプションを参照されたい) 結果として、この番号はあなたが親しんでいる番号より1小さくなるかもしれません。しかしこの行で示される位置は、Fortranの標準です。

列目盛を表示するのに使用されるテキストは、変数indent-tabs-modeの値に依存します。indent-tabs-modenilの場合、変数fortran-column-ruler-fixedの値が列目盛として使用されます。それ以外は、変数fortran-column-ruler-tabの値が表示されます。これらの値を変更することにより、表示される列目盛を変更できます。

C-c C-w (fortran-window-create-momentarily)で、一時的にカレントウィンドウを水平方向に分割して、ウィンドウの幅をfortran-line-length列にすることにより、長くなりすぎた行を見つけることができます。スペースをタイプすると元の幅に戻ります。

適切な位置でウィンドウを水平方向に分割して、編集を継続することもできます。これを行うには、C-u C-c C-w (M-x fortran-window-create)を使用します。このウィンドウで編集することより、Fortranでの正しい長さを超える行をすぐに見つけることができます。

コマンドM-x fortran-strip-sequence-nosは、カレントバッファーのすべての行にたいして、列fortran-line-length以上のテキストすべてを削除します。これは古いシーケンス番号を削除する一番簡単な方法です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.14.6 FortranキーワードのAbbrev

Fortranモードは、一般的なキーワードや定義にたいするabbrev(abbreviation: 省略形)を提供します。あなたが定義できるabbrevと同様なものがあります。これらを使用するには、Abbrevモードをオンに切り替えなければなりません。 abbrev(略語)を参照してください。

ビルトインのabbrevは、1つの点で特異です。これらはすべてセミコロンから始まります。たとえばFortranのビルトインのabbrevである‘;c’は、‘continue’にたいする省略形です。‘;c’を挿入してから、スペースや改行のような区切りとなる文字を挿入すると、Abbrevモードが有効な場合、‘;c’は自動的に‘continue’に展開されます。

;?’または‘;C-h’とタイプすると、すべてのビルトインのFortranのabbrevのリストと、それが何を意味するかが表示されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27 プログラムのコンパイルとテスト

前のチャプターでは、プログラムを変更するのに便利なEmacsコマンドについて議論しました。このチャプターでは、プログラムのコンパイルとテストに役立つコマンドを扱います。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27.1 Emacs下でのコンパイルの実行

Emacsは、CやFortranのような言語のためのコンパイラーを実行でき、コンパイルログをEmacsのバッファーに取り込むことができます。エラーメッセージを解析して、エラーが発生した場所を示すこともできます。

M-x compile

Emacs下で非同期にコンパイラーを実行し、エラーメッセージは*compilation*バッファーに送られます。

M-x recompile
g (Compilation mode)

最後に呼び出したM-x compileと同じコマンドで、コンパイラーを呼び出します。

M-x kill-compilation

サブプロセスで実行されているコンパイルをkillします。

make、または他のコンパイルコマンドを実行するには、M-x compileとタイプします。これはミニバッファーを使用してシェルのコマンドラインを読み取り、シェルをEmacsのサブプロセス(または下位プロセス(inferior process))として、そのコマンドを実行します。出力は*compilation*という名前のバッファーに挿入されます。カレントバッファーのデフォルトディレクトリーが、コマンドを実行する作業ディレクトリーとして使用されます。したがって、通常はそのディレクトリーでコンパイルが行われます。

デフォルトのコンパイルコマンドは‘make -k’で、これはmakeユーティリティーを使ってコンパイルするプログラムにたいして通常正しいコマンドです(‘-k’フラグはmakeに、エラー後も可能な限りコンパイルを継続するよう指示します)。Make in GNU Make Manualを参照してください。前にM-x compileを実行している場合、それに指定したコマンドは自動的に変数compile-commandに格納されます。これは、次にM-x compileとタイプしたときのデフォルトとなります。ファイルのファイルローカルな値でcompile-commandを指定することもできます(ファイル内のローカル変数を参照してください)。

コンパイルを開始すると、他のウィンドウで*compilation*バッファーが表示されますが、そのウィンドウは選択されません。コンパイルが実行中は、*compilation*バッファーのメジャーモードインジケーターに‘run’という単語が表示され、単語‘Compiling’がすべてのモードラインに表示されます。コンパイル実行中、常に*compilation*バッファーを表示している必要はありません。表示されていなくてもコンパイルは継続します。何らかの理由によりコンパイルが終了したときは、*compilation*バッファーのモードラインが‘exit’(その後に終了コード。‘[0]’の場合は通常終了)、または‘signal’(何らかのシグナルがプロセスを終了させた場合)に変化します。

コンパイルの経過を見たいときは、バッファー*compilation*に切り替えて、ポイントをバッファーの最後に移動します。ポイントが最後にある場合、コンパイル出力はポイント位置に挿入されるので、ポイントは最後に留まります。そうでない場合は、バッファーの最後にコンパイル出力が追加される間も、ポイント位置は固定されたままです。

コンパイル処理中、モードラインにはその時点までのエラー、警告の数と、コンパイラーからの情報が表示されます。

変数compilation-scroll-outputを非nil値に変更した場合、*compilation*バッファーは出力に追随して自動的にスクロールします。値がfirst-errorの場合は、最初のエラーが出現した箇所でスクロールがストップし、ポイントはエラー箇所に留まります。その他の任意の非nil値の場合は、出力がなくなるまでスクロールが継続されます。

最後にコンパイルしたのと同じコマンドで再実行するには、M-x recompileとタイプします。これは最後に呼び出したM-x compileからコンパイルコマンドを再利用します。これは*compilation*バッファーも再利用し、コンパイルもそのバッファーのデフォルトディレクトリー、つまり前にコンパイルが開始されたのと同じディレクトリーで行われます。*compilation*バッファーでは、このコマンドはgにバインドされています。

新しいコンパイルの開始は、すでに*compilation*で実行中のコンパイルをkillします。これは、そのバッファーが1度に1つのコンパイルしか処理できないからです。しかし実行中のコマンドを実際にkillする前に、M-x compile、およびM-x recompileは確認を求めます。常に確認なしで自動的にコンパイルをkillするには、変数compilation-always-killtに変更します。コマンドM-x kill-compilationで、コンパイルプロセスをkillすることもできます。

1度に2つのコンパイルを実行するには、最初に1つを開始してから(多分rename-uniquelyを使用して。その他のバッファー操作を参照してください)*compilation*、バッファーをリネームして、それからバッファーを切り替えて他のコンパイルを開始します。これにより新しい*compilation*バッファーが作成されます。

コンパイルコマンドに渡される環境は、変数compilation-environmentで制御できます。この変数の値は環境変数のセッティングのリストで、各要素は文字列"envvarname=value"の形式です。これらの環境変数のセッティングは、通常の値をオーバーライドします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27.2 Compilationモード

*compilation*バッファーは、Compilationモードと呼ばれるメジャーモードを使用します。Compilationモードは、バッファーのエラーメッセージをハイパーリンクに変換します。ポイントをそこに移動してRETをタイプするか、マウスでクリック(マウスで参照をフォローするを参照してください)すると、別のウィンドウでエラーメッセージのlocusをvisitします。locusとは、エラーが発生したファイルの特定の位置を意味します。

エラーメッセージや警告メッセージにたいするcompilation-errorcompilation-warningのように、*compilation*バッファーの外観は、*compilation*バッファーのハイライト箇所に使用されるフェイスをカスタマイズすることにより制御されます。これらのフェイスはerrorフェイスとwarningフェイスから継承されるので、親フェイスを直接カスタマイズすることも可能なことに注意してください。

カスタマイズに関する変数とフェイスの完全なリストを確認するには、M-x customize-group RET compilationを使用してください。

変数compilation-auto-jump-to-first-errorを非nil値に変更した場合、Emacsは、*compilation*バッファーに表れる最初のエラーメッセージのlocusを自動的にvisitします。

Compilationモードは、以下の追加のコマンドを提供します。これらのコマンドは*grep*バッファーでも使用できます。このバッファーではエラーメッセージのかわりに、検索にたいするマッチにハイパーリンクが設定されます(Emacs下でのGrepによる検索を参照してください)。

M-g M-n
M-g n
C-x `

次のエラーメッセージ(またはマッチ)のlocusをvisitします(next-error)。

M-g M-p
M-g p

前のエラーメッセージ(またはマッチ)のlocusをvisitします(previous-error)。

M-n

locusをvisitせずに、ポイントを次のエラーメッセージ(またはマッチ)に移動します(compilation-next-error)。

M-p

locusをvisitせずに、ポイントを前のエラーメッセージ(またはマッチ)に移動します(compilation-previous-error)。

M-}

他のファイルで発生した次のエラーメッセージ(またはマッチ)にポイントを移動します(compilation-next-file)。

M-{

他のファイルで発生した前のエラーメッセージ(またはマッチ)にポイントを移動します(compilation-previous-file)。

C-c C-f

Next Error Followマイナーモードに切り替えます。これはcompilationバッファーでのカーソル移動にしたがって、ソースを自動的に表示するモードです。

g

出力が*compilation*バッファー内に表示されている、最後のコマンドを再実行します。

M-x next-error-select-buffer

next-errorprevious-errorの次回の呼び出しで使用されるバッファーを選択します。

順番にエラーをvisitするには、C-x ` (next-error)とタイプするか、これと等価なM-g M-nまたはM-g nとタイプします。このコマンドはCompilationモードのバッファーだけでなく、任意のバッファーから呼び出すことができます。コンパイル後に最初に呼び出すときは、最初のエラーメッセージのlocusをvisitします。連続したM-g M-nは、同じ方法で次のエラーをvisitします。*compilation*バッファーからRETまたはマウスクリックで特定のエラーをvisitした場合、M-g M-nはそのエラーの次のエラーからvisitしていきます。これ以上visitするエラーメッセージがない場合、M-g M-nはエラーをシグナルします。C-u M-g M-nはcompilationバッファーの先頭から再開して、最初のlocusをvisitします。

M-g M-pまたはM-g p (previous-error)は、反対方向にエラーを巡回します。

コマンドnext-errorおよびprevious-errorは、バッファー*compilation*または*grep*にリストされたエラー(またはマッチ)だけに作用されるわけではありません。これらのコマンドはM-x occur (その他の検索およびループコマンドを参照のようなコマンドで生成されたエラー(またはマッチ)を巡回する方法も知っています。カレントバッファーがエラーメッセージ、またはマッチを含む場合には、これらのコマンドはそれらを巡回するでしょう。そうでなければEmacsは(変数next-error-find-buffer-functionの値をnext-error-buffer-on-selected-frameにカスタマイズしていれば)選択されたフレームのウィンドウの中からエラーメッセージ(またはマッチ)を含むバッファー、次にnext-errorまたはprevious-errorが最後に使用したバッファー、最後にその他のすべてのバッファーを探します。これらのコマンドが巡回するために選択されたバッファーがカレントでウィンドウに表示されていなければ、そのバッファーが表示されるでしょう。その後のnext-error呼び出しで使用される別バッファーへの切り替えには、コマンドnext-error-select-bufferを使用できます。

デフォルトでは、コマンドnext-errorおよびprevious-errorは、重要でないメッセージはスキップします。変数compilation-skip-thresholdが、これを制御します。デフォルト値は1で、これは警告(warning)より重要でないメッセージをスキップします。2の場合、エラー(error)より重要でないものをスキップし、0はメッセージをスキップしません。

Emacsがエラーメッセージのlocusをvisitしているとき、関連するソース行が一時的にハイライトされます。選択されたバッファーのlocusのハイライトの持続時間は変数next-error-highlight、それ以外のバッファーではnext-error-highlight-no-selectにより決定されます。

*compilation*バッファーが左フリンジ(ウィンドウのフリンジを参照してください)のあるウィンドウで表示されている場合、locusをvisitするコマンドはカレントエラーメッセージを指す矢印をフリンジに配します。テキスト端末のように、左フリンジがないウィンドウの場合、これらのコマンドは、カレントメッセージがウィンドウの一番上にくるようにウィンドウをスクロールします。変数compilation-context-linestに変更すると、かわりに列0の前に可視の矢印を挿入します。整数値nに変更した場合には、これらのコマンドはフリンジの有無に関わらずメッセージがウィンドウの上からn行目にくるようにウィンドウをスクロールします。デフォルト値のnilでは上述のように振る舞います。

コンパイラーからのメッセージを解析するために、Compilationモードは変数compilation-error-regexp-alistを使用します。これはさまざまなエラーメッセージのフォーマットをリストし、それらからlocusを抽出する方法をEmacsに指示します。同じような変数grep-regexp-alistは、grepコマンド(Emacs下でのGrepによる検索を参照してください)の出力を解析する方法を指示します。

Compilationモードは、スクリーン単位でスクロールを行うために、キーSPCおよびDELも定義します。M-n (compilation-next-error)およびM-p (compilation-previous-error)は、次または前のエラーメッセージに移動します。M-{ (compilation-next-file)およびM-} (compilation-previous-file)は、違うソースファイルの、次または前のエラーメッセージに移動します。

C-c C-fとタイプして、Next Error Followモードに切り替えることができます。このマイナーモードでは、compilationバッファーでの通常のカーソル移動により、自動的にソースを表示するバッファーが更新されます。たとえばカーソルをエラーメッセージに移動すると、そのエラーにたいするlocusが表示されます。

Compilationモードの機能は、Compilation Minorモード呼ばれるマイナーモードでも利用可能です。これは通常のコンパイル出力のバッファーだけでなく、任意のバッファーのエラーメッセージを解析します。M-x compilation-minor-modeとタイプすることにより、このマイナーモードが有効になります。たとえばRloginバッファー(リモートホストのシェルを参照してください)では、Compilation minorモードはリモートのソースファイルに、FTPを通じて自動的にアクセスします(ファイルの名前を参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27.3 コンパイルのためのサブシェル

このセクションには、compilationバッファー内で、シェルやその機能を使用するための、さまざまなテクニックとアドバイスが含まれています。ローカルでのコンパイルに特有なトピックを扱うので、デフォルトディレクトリーがリモートホスト上であるようなcompilationバッファーでは、おそらくほとんどは機能しない(または無関係)でしょう。

M-x compileコマンドは、コンパイルコマンドを実行するためにシェルを使いますが、オプションで非対話的なシェルを指定します。これは、シェルがプロンプトなしで開始されることを意味します。*compilation*バッファーで、通常のシェルプロンプトの見映えがよくない場合、それはシェルの初期化ファイルで、無条件にプロンプトをセットするという間違いを犯していることを意味します(この初期化ファイルは使用しているシェルに応じて.bashrc.profile.cshrc.shrcなどの名前がついています)。シェルの初期化ファイルでは、プロンプトがすでにあるときだけプロンプトをセットするべきです。これをbashで行うには、以下のようにします:

if [ "${PS1+set}" = set ]
then PS1=…
fi

cshで行うには以下のようにします:

if ($?prompt) set prompt = …

compilationのサブシェルに渡す環境変数TERMの値をカスタマイズしたい場合は、変数comint-terminfo-terminalの値をカスタマイズしてください(Shellモードのオプションを参照)。

Emacsは、コンパイラープロセスが非同期なサブプロセスで実行されることを要求しません。もしこれを行う場合、メインのコンパイラープロセスが終了した後で、サブプロセスがまだ実行中のときは、Emacsはこれらをkillするか、それらの出力はEmacsには到達しません。この問題を避けるには、メインのコンパイルプロセスが、それのサブプロセスの終了までwaitするようにします。シェルスクリプトでは、以下のように‘$!’と‘wait’を使用して、これを行うことができます:

(sleep 10; echo 2nd)& pid=$!  # サブプロセスのpidを記録
echo first message
wait $pid                     # サブプロセスのwait

バックグラウンドのプロセスがcompilationバッファーに何も出力せず、メインのコンパイルプロセスが終了したときに、これらがkillされるのを防ぐことだけが必要な場合は、以下で充分です:

nohup command; sleep 1

MS-DOSオペレーティングシステムでは、非同期なサブプロセスはサポートされていないので、M-x compileはコンパイルコマンドを同期実行します(たとえばEmacsで他のことを行うには、コマンドが終了するまで待たなければなりません)。EmacsとMS-DOSを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27.4 Emacs下でのGrepによる検索

Emacsからコンパイラーを実行して、コンパイルエラーの行をvisitできるように、grepを実行して見つかったマッチの行をvisitすることもできます。これはgrepが報告するマッチを、エラーのように扱うことで機能します。出力バッファーはGrepモードを使用します。これはCompilationモードの変種です(Compilationモードを参照してください)。

M-x grep
M-x lgrep

Emacs下でgrepを非同期で実行し、*grep*という名前のバッファーにマッチした行をリストします。

M-x grep-find
M-x find-grep
M-x rgrep

findを通じてgrepを実行し、出力を*grep*バッファーに収集します。

M-x zrgrep

zgrepを実行して、出力を*grep*バッファーに収集します。

M-x kill-grep

実行中のgrepサブプロセスをkillします。

grepを実行するには、M-x grepとタイプしてから、どのようにgrepを実行するかを指定するコマンドラインを入力します。これは通常、grepを実行するとき与える引数と同じです。grepスタイルのregexp(通常、シェルのスペシャル文字をクォートするためシングルクォートで囲む)の後に、ファイル名(ワイルドカードも使用できる)を続けます。M-x grepにプレフィクス引数を指定した場合、バッファーのポイント位置周辺の識別子(識別子のリファレンスを探すを参照してください)を探して、それをgrepコマンドのデフォルトにします。

指定するコマンドは、単純にgrepを実行するものである必要はありません。同じフォーマットで出力を生成するシェルコマンドを使用することができます。たとえば、以下のように、grepコマンドを連結することができます:

grep -nH -e foo *.el | grep bar | grep toto

grepコマンドの出力は、*grep*バッファーに送られます。オリジナルのファイルの対応する行は、コンパイルエラーと同様、M-g M-nRETなどで見つけることができます。コマンドのより詳細な説明と、*grep*バッファー内で利用可能なキーバインディングについては、Compilationモードを参照してください。

マッチをハイライトするために、その周囲に特別なマーカーを出力する‘--color’オプションを指定できるgrepプログラムもあります。この機能を使うには、grep-highlight-matchestにセットします。これによりソースバッファーのマッチを表示するとき、ソース行全体ではなく、正確なマッチだけがハイライトされます。

コンパイルコマンド(Emacs下でのコンパイルの実行を参照)のときと同様、grepコマンド実行中には、モードラインにはそれまでに見つかったマッチ数が表示されて、ハイライトされます。

grepコマンドは、実行前にバッファーの保存を提案するでしょう。これは、変数grep-save-buffersにより制御されます。利用できる値はnil(保存しない)、ask(保存前に尋ねる)、または述語として使用される関数(ファイル名をパラメーターとして呼び出され、バッファーを保存する場合は非nilをリターンすべきである)のいずれかである。その他の非nil値は、すべてのバッファーが確認なしで保存されるべきであることを意味します。デフォルト値はaskです。

コマンドM-x grep-find(M-x find-grepでも利用可能)は、M-x grepと似ていますが、コマンドにたいして提供される初期のデフォルトが異なります — このデフォルトはfindgrepの両方を実行するもので、これによりディレクトリーツリーの各ファイルを検索できます。Diredとfindfind-grep-diredコマンドも参照してください。

コマンドM-x lgrep (local grep)およびM-x rgrep (recursive grep)は、grepおよびgrep-findのユーザーフレンドリーなバージョンで、これらはマッチにたいする正規表現、検索するファイル、検索の基準となるディレクトリーを個別に尋ねます。検索での大文字小文字の区別は、case-fold-searchの値で制御されます。コマンドM-x zrgrepM-x rgrepと似ていますが、これはgrepのかわりにzgrepを呼び出し、gzipされたファイルの内容を検索します。

これらのコマンドは、変数grep-template(lgrep用)、およびgrep-find-template(rgrep用)にもとづいてシェルコマンドを構築します。検索するファイルには、変数grep-files-aliasesで定義されたエイリアスを使用できます。

変数grep-find-ignored-directoriesにリストされたディレクトリーは、M-x rgrepの検索で自動的にスキップされます。デフォルト値には、さまざまなバージョンコントロールシステムで使用されるデータディレクトリーが含まれます。

デフォルトではlgreprgrepzgrepにたいして構築されるシェルコマンドは、ファイルとディレクトリーの長いリストを含む部分を隠蔽することにより省略して表示されます。隠蔽された部分を表す省略記号のボタンをクリックすれば隠蔽部分を表示できます。M-x grep-find-toggle-abbreviationとタイプしてインタラクティブに隠蔽部分の表示を切り替えることもできます。このシェルコマンドの隠蔽を無効にするにはオプションgrep-find-abbreviatenil値にカスタマイズしてください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27.5 オンザフライで構文エラーを見つける

FlymakeモードはC、C++、Perl、HTML、TeX/LaTeXを含む、多くのプログラミング言語およびマークアップ言語の構文チェックを、オンザフライ(on-the-fly)で処理するマイナーモードです。これは通常の人間の言語にたいしてスペルチェックを処理する、Flyspellモード(スペルのチェックと訂正を参照してください)と、その方法において類似しています。Flymakeモードはファイルの編集にしたがい、そのバッファーの一時的なコピーを使用して、適切な構文チェックツールをバックグラウンドで実行します。それからエラーメッセージと警告メッセージを解析して、そのバッファーの間違った行をハイライトします。使用される構文チェックツールは、言語に依存します。たとえば通常、C/C++ファイルの場合は、Cコンパイラーです。Flymakeは、複雑なプロジェクトにたいしてのチェックでは、makeのようなビルドツールを使うこともできます。

Flymakeモードを有効にするには、M-x flymake-modeとタイプします。M-x flymake-goto-next-errorおよびM-x flymake-goto-prev-errorを使用して、これが見つけたエラーにジャンプすることができます。カレント行に関連するエラーメッセージを表示するには、M-x flymake-display-err-menu-for-current-lineとタイプしてください。

Flymakeの使用についての詳細は、 Flymake in The Flymake Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27.6 Emacs下でのデバッガーの実行

GUD(Grand Unified Debugger)ライブラリーは、広範なシンボリックデバッガーにたいするEmacsのインターフェースを提供します。これはGNUデバッガー(GDB)、同様にDBX、SDB、XDB、GuileのREPLのデバッグコマンド、Paerlのデバッグモード、PythonデバッガーのPDB、JavaデバッガーのJDBを実行することができます。

EmacsはGDBにたいする特別なインターフェースを提供します。これはデバッグされているプログラムの状態を表示する追加のEmacsウィンドウを使用します。GDBのグラフィカルインターフェースを参照してください。

Emacsは、Emacs Lispプログラムにたいするビルトインのデバッガーももっています。The Lisp Debugger in the Emacs Lisp Reference Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27.6.1 GUDの開始

デバッガーサブプロセスを開始する複数のコマンドがあり、それらは特定のデバッガープログラムに対応しています。

M-x gdb

GDBをサブプロセスとして実行し、IDE-likeなEmacsインターフェースを通じてやりとりをします。このコマンドに間する詳細は、GDBのグラフィカルインターフェースを参照してください。

M-x gud-gdb

GDBサブプロセスとの入出力に、GUD interactionバッファーを使用してGDBを実行します((デバッガーの操作を参照してください))。そのようなバッファーがすでに存在している場合はそのバッファーに切り替え、存在しない場合はバッファーを作成して切り替えます。

ここにリストされている他のコマンドは、他のデバッガープログラムにたいして同じことを行います。

M-x perldb

Perlインタープリターをデバッグモードで実行します。

M-x jdb

Javaデバッガーを実行します。

M-x pdb

Pythonデバッガーを実行します。

M-x guiler

Guile Schemeプログラムをデバッグするために、Guile REPLを実行します。

M-x dbx

DBXデバッガーを実行します。

M-x xdb

XDBデバッガーを実行します。

M-x sdb

SDBデバッガーを実行します。

これらの各コマンドは、ミニバッファーを使ってデバッガーを呼び出すコマンドラインを読み取ります。ミニバッファーの初期内容は、デバッガーの標準的な実行ファイル名とオプションで、デバッグしたいと推測される実行ファイル名の場合もあります。シェルのワイルドカードと変数は、このコマンドラインでは使用できません。Emacsは‘-’で始まらない最初のコマンド引数を、実行ファイル名とみなします。

Trampは、同じリモートホスト上のデバッガーとプログラムによる、リモートデバッグ機能を提供します。詳細については、Running a debugger on a remote host in The Tramp Manualを参照してください。これはGDBのリモートデバッグ機能とは別の物です、なぜなら、プログラムとデバッガーは違うマシンで実行されるからです(Debugging Remote Programs in The GNU debuggerを参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27.6.2 デバッガーの操作

GUD interactionバッファーは、デバッガーサブプロセスにテキストコマンドを送ったり、それの出力を記録するのに使用されるEmacsバッファーです。これはM-x gud-gdbや、 GUDの開始にリストされた他のコマンドで使用される、デバッガーとやりとりするための基本的なインターフェースです。 M-x gdbコマンドは、ブレークポイント、スタックフレーム、その他のデバッガーの状態の様相を制御する、追加の特別なバッファーにより、この機能を拡張します(GDBのグラフィカルインターフェースを参照してください)。

GUD interactionはShellモードの変種を使用するので、Shellモードで定義されたEmacsコマンドが利用可能です(Shellモードを参照してください)。ほとんどのデバッガーコマンドにたいして補完(補完を参照してください)が利用可能で、それらを繰り返すのに、通常のShellモードのヒストリーコマンドを使うことができます。 GUD interactionバッファーで使用できる特別なコマンドについては、GUDのコマンド を参照してください。

プログラムをデバッグすると、Emacsは関連するソースファイルをEmacsバッファーにvisitして、カレント実行行には左フリンジに矢印が表示されます(テキスト端末では最初の2列に‘=>’の矢印が表示されます)。そのようなバッファーでのポイントの移動は、矢印を移動しません。これらのソースファイルの編集はできますが、行の挿入や削除により矢印の位置は失われることに注意してください。なぜならEmacsには編集されたソース行が、デバッガーサブプロセスから報告されるどの行に対応するか、知る手立てがないからです。この情報を更新するには通常、プログラムのリコンパイルと再実行が必要です。

GUD Tooltipモードは、GUDにツールチップサポートを追加するグローバルなマイナーモードです。このモードに切り替えるには、M-x gud-tooltip-modeとタイプします。このモードはデフォルトで無効になっています。有効にした場合、変数、関数、マクロ(識別子として総称される)にマウスポインターを移動すると、それらの値がツールチップで表示されます(ツールチップを参照)。値を表示したい式の上にマウスポインターを置くだけでは値が表示されない場合は、マウスでその式をドラッグしてマークし、マウスポインターをそのマークされた領域内に置いたままにすることにより、より明示的にEmacsに指示することができます。かわりにマウスをドラッグして識別子または式をマークしてから、マウスをマークした領域から離すと、式の値がツールチップに表示されます。GUD Tooltipモードは、GUD interactionバッファー、およびgud-tooltip-modesにリストされたメジャーモードの、すべてのソースバッファーで効果があります。変数gud-tooltip-echo-areaが非nilの場合、またはツールチップモードがオフの場合は、ツールチップではなくエコーエリアに値が表示されます。

M-x gud-gdbでGUD Tooltipモードを使用する場合、GDBにより表示される式の値は、マクロを展開する場合があり、これはデバッグされているプログラムに副作用をもたらすかもしれません。この理由により、gud-gdbではツールチップの使用は無効になっています。M-x gdbインターフェースを使用する場合、この問題は発生しません。なぜなら副作用を避ける特別なコードがあるからです。さらにプログラムが実行されていないときに、識別子に関連付けられたマクロの定義を表示することもできます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27.6.3 GUDのコマンド

GUDはブレークポイントのセットとクリアー、スタックフレームの選択、プログラムのステップ実行のためのコマンドを提供します。

C-x C-a C-b

ポイントのあるソース行にブレークポイントをセットします。

ソースバッファーからC-x C-a C-b (gud-break)が呼び出された場合、カレントソース行にデバッガーのブレークポイントをセットします。このコマンドはGUDを開始した後だけ利用可能です。デバッガーサブプロセスに関連付けられていないバッファーで呼び出すと、エラーをシグナルします。

以下のコマンドは、GUD interactionバッファーとグローバルの両方で利用可能ですが、キーバインドが異なります。キーがC-cで始まるものはGUD interactionバッファーだけで利用可能で、C-x C-aで始まるものはグローバルに利用可能です。コマンドのいくつかはツールバーを通じても利用可能です。また、特定のデバッガーではサポートされないものもあります。

C-c C-l
C-x C-a C-l

GUD interactionバッファーで参照される最後のソース行を、別のウィンドウに表示します(gud-refresh)。

C-c C-s
C-x C-a C-s

次の1行を実行します(gud-step)。その行が関数呼び出しを含む場合、関数呼び出しに入った後に実行をストップします。

C-c C-n
C-x C-a C-n

次の1行を実行します(gud-next)。その行が関数呼び出しを含む場合、関数の中でストップせずに関数をステップオーバーします。

C-c C-i
C-x C-a C-i

機械語の1命令を実行します(gud-stepi)。

C-c C-p
C-x C-a C-p

ポイント位置の式を評価します(gud-print)。表示したい正確な式をEmacsが表示しない場合、最初に式をリージョンとしてマークします。

C-c C-r
C-x C-a C-r

停止位置を指定せずに実行を継続します。プログラムは、ブレークポイントに達する、プログラム終了、またはデバッガーがチェックしているシグナルを受けとるまで実行を続けます。

C-c C-d
C-x C-a C-d

カレントソース行にブレークポイントがある場合、ブレークポイントを削除します。GUD interactionバッファーでこのコマンドを使用する場合、プログラムが最後に停止した位置に適用されます。

C-c C-t
C-x C-a C-t

カレントソース行に、一時的なブレークポイントをセットします(gud-tbreak)。GUD interactionバッファーでこのコマンドを使用した場合、プログラムが最後に停止した位置に適用されます。

C-c <
C-x C-a <

次の外側のスタックフレームを選択します(gud-up)。これはGDBコマンドの‘up’と等価です。

C-c >
C-x C-a >

次の内側のスタックフレームを選択します(gud-down)。これはGDBコマンドの‘down’と等価です。

C-c C-u
C-x C-a C-u

カレント行まで実行を継続します(gud-until)。プログラムは、ブレークポイントに達する、プログラム終了、またはデバッガーがチェックしているシグナルを受けとる、またはカーソルがある行に到達するまで実行を続けます。

C-c C-f
C-x C-a C-f

選択されたフレームがリターンするか、他の理由により停止するまでプログラムを実行します(gud-finish)。

GDBを使用している場合、追加のキーバインディングが利用可能です:

C-x C-a C-j

ソースバッファーだけで有用です。gud-jumpはプログラムの実行箇所をカレント行に転送します。別の言い方をすると、プログラムが次に実行するのは、このコマンドを与えた位置になります。新しく実行される行が前の関数とは異なる場合、多分奇妙な結果になるので、GDBは確認を求めます。詳細は、GDBマニュアルのエントリーjumpを参照してください。

TAB

GDBの場合、シンボル名を補完します(gud-gdb-complete-command)。このキーはGUD interactionバッファーだけで利用可能です。

これらのコマンドは、それが意味がある場合には、数引数を繰り返し回数と解釈します。

TABは補完コマンドに割り当てられているので、GDBでデバッグしているプログラムへのタブの入力には使えません。タブの入力にはC-q TABとタイプしてください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27.6.4 GUDのカスタマイズ

起動時にGUDは以下のフックの1つを実行します:
GDBを使用している場合はgdb-mode-hook
DBXを使用している場合はdbx-mode-hook
SDBを使用している場合はsdb-mode-hook
XDBを使用している場合はxdb-mode-hook、Guile REPLのデバッグにはguiler-mode-hook
Perlのデバッグモードを使用している場合はperldb-mode-hook
PDBを使用している場合はpdb-mode-hook
JDBを使用している場合はjdb-mode-hookを実行します。
フックを参照してください。

Lispマクロgud-def(Defining Macros in the Emacs Lisp Reference Manualを参照してください)は、デバッガーに特定のコマンド文字列を送るEmacsコマンドを定義して、GUD interactionバッファーで、それにたいするキーバインドをセットアップする便利な方法を提供します:

(gud-def function cmdstring binding docstring)

これはデバッガープロセスにcmdstringを送る、ドキュメント文字列がdocstringの、functionという名前のコマンドを定義します。コマンドfunctionを、任意のバッファーで使用できます。bindingが非nilの場合、gud-defはそのコマンドを、GUDバッファーのモードではC-c binding、グローバルにはC-x C-a bindingにバインドします。

コマンド文字列cmdstringには、functionが呼び出されたときに書き込まれるデータのための、特定の‘%’シーケンスを含めることができます:

%f

カレントソースファイルの名前です。カレントバッファーがGUDバッファーの場合、カレントソースファイルはプログラムがストップしているファイルです。

%l

カレントソース行の番号です。カレントバッファーがGUDバッファーの場合、カレントソース行はプログラムがストップしている行です。

%e

transient-mark-modeでは、リージョンがアクティブの場合はリージョンのテキストです。そうでない場合、ポイント位置またはそれに隣接する位置にあるCのlvalue(左辺値)、または関数呼び出し式です。

%a

ポイント位置またはそれに隣接する位置にある、16進アドレスのテキストです。

%p

呼び出された関数の数引数の10進数です。コマンドに数引数が指定されなかった場合、‘%p’は空文字列になります。

コマンド文字列に‘%p’を使用しない場合、定義したコマンドは数引数を無視します。

%d

カレントソースファイルのディレクトリー名です。

%c

ポイントを取り囲む式から派生された、完全に記述されたされたclass名(fully qualified class name)です(jdbのみ)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27.6.5 GDBのグラフィカルインターフェース

コマンドM-x gdbはブレークポイント、スタックフレーム、その他のデバッグ状態の様相を制御するために特化したバッファーで、IDE-likeなインターフェースでGDBを開始します。これは、たとえばマウスソースバッファーのフリンジをクリックすることにより、そこにブレークポイントをセットするなどの、マウスによりデバッグセッションを制御する追加の方法も提供します。

これらの追加機能を使わずにGUD interactionバッファーのインターフェースだけを使ってGDBを実行するには、M-x gud-gdb (GUDの開始を参照してください)を使用します。これは、(現在のところM-x gdbではサポートされていない)1つのEmacsセッションで複数のプログラムをデバッグしたいときだけ使用しなければなりません。

内部的には、M-x gdbはGDBにたいしてスクリーンサイズに制限がないと告げます。正しい操作のために、デバッグセッションの間はGDBのスクリーンの高さと幅の値を変更してはいけません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27.6.5.1 GDBのユーザーインターフェースのレイアウト

変数gdb-many-windowsnil(デフォルト)の場合、M-x gdbは通常GUD interactionバッファーだけを表示します。しかしgdb-show-mainが非nilの場合、2つのウィンドウで開始します。その場合、1つはGUD interactionバッファーを表示して、もう一方はデバッグするプログラムのmain関数のソースを表示します。

gdb-many-windowsが非nilの場合、M-x gdbは以下のフレームレイアウトを表示します。

+--------------------------------+--------------------------------+
|   GUD interaction buffer       |   Locals/Registers buffer      |
|--------------------------------+--------------------------------+
|   Primary Source buffer        |   I/O buffer for debugged pgm  |
|--------------------------------+--------------------------------+
|   Stack buffer                 |   Breakpoints/Threads buffer   |
+--------------------------------+--------------------------------+

ウィンドウのレイアウトを変更した場合には、M-x gdb-restore-windowsとタイプして、複数ウィンドウレイアウトをリストアできます。複数ウィンドウレイアウトと、GUD interactionバッファーとソースファイルだけの単純なレイアウトを切り替えるには、M-x gdb-many-windowsとタイプしてください。

ウィンドウを複雑にセットアップをしていて、gdb-many-windowsがそれを混乱させるのを望まない場合は、別のフレーム内でM-x gdbを呼び出すほうがよいでしょう。その場合は、元のフレームのウィンドウのアレンジに影響はありません。テキスト端末で作業する場合は、GDBセッションに別のフレームを使用すれば、各ウィンドウにたいするスクリーン資源がもっとも活用される可能性があるので、特に便利になり得ます。

同じフレームまたは異なるフレームに、GDBに関連した追加のバッファーを表示するように指定できます。M-x gdb-display-buffertype-bufferまたはM-x gdb-frame-buffertype-bufferとタイプして、望むバッファーを選択します。ここでbuffertypeは‘breakpoints’のような、該当するバッファータイプです。‘GUD’メニューの、サブメニュー‘GDB-Windows’または‘GDB-Frames’により、メニューバーから同じことができます。

デバッグを終えたらC-x kでGUD interactionバッファーをkillすれば、このセッションでの関連するすべてのバッファーをkillできます。しかしEmacsでソースコードの編集とリコンパイル終えて、さらにデバッグを続けたいときは、これを行う必要はありません。実行を再開すると、GDBは自動的に新しい実行ファイルを見つけます。GUD interactionバッファーを残しておけば、シェルヒストリー、同様にGDBブレークポイントを残すことができる利点があります。最近編集したソースファイルのブレークポイントが、正しい場所にあるかチェックする必要があります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27.6.5.2 Sourceバッファー

mouse-1 (in fringe)

その行のカレントブレークポイントをセット、またはクリアーします(gdb-mouse-set-clear-breakpoint)。

C-mouse-1 (in fringe)

その行のブレークポイントを有効または無効にします(gdb-mouse-toggle-breakpoint-margin)。

mouse-3 (in fringe)

その行まで実行を継続します(gdb-mouse-until)。

C-mouse-3 (in fringe)

その行にジャンプします(gdb-mouse-jump)。

グラフィカルなディスプレーでは、sourceバッファーのフリンジをmouse-1でクリックして、その行にブレークポイントをセットできます(ウィンドウのフリンジを参照してください)。クリックした場所に赤いドットが表示されます。すでにそこにブレークポイントが存在する場合、クリックでそれを削除します。既存のブレークポイントをC-mouse-1でクリックすることにより、有効または無効にします。クリアーされておらず無効になったブレークポイントは、グレイのドットで示されます。

テキスト端末またはフリンジが無効な場合、有効なブレークポイントはウィンドウの左端に、‘B’という文字で示されます。無効なブレークポイントは‘b’で示されます(余白はブレークポイントがあるときだけ表示されます)。

sourceバッファーの左フリンジの塗りつぶされた矢印は、デバッグされているプログラムがストップした最内フレームの行を示します。中抜きの矢印はより高いレベルのフレームの現在実行されている行を示します。フリンジの矢印をmouse-1でドラッグすると、ボタンを離した行まで実行が進みます。かわりにフリンジをmouse-3でクリックすることにより、その行まで実行を進めることができます。フリンジをC-mouse-3でクリックすることにより、間にある行を実行せずに、その行にジャンプできます。このコマンドは後方へもジャンプできるので、すでに実行中のコードの実行の詳細を調べるのに便利です。

ソースファイル名が8進エスケープで表示される場合には、変数gdb-mi-decode-stringsに適切なコーディングシステム(おそらく大抵はutf-8)をセットしてください(GDBはデコードが望まれない状況で8進エスケープを出力するかもしれず、またデバッグされるプログラムが使用するであろうエンコーディングは、あなたのシステム上の非ASCIIエンコードとは異なるかもしれないので、これのデフォルトはnilになっている)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27.6.5.3 Breakpointsバッファー

GDB Breakpointsバッファーは、デバッガーセッションのブレークポイント(breakpoint)、ウォッチポイント(watchpoint)、キャッチポイント(catchpoint)を表示します。Breakpoints in The GNU debuggerを参照してください。これは以下のコマンドを提供します。これらのコマンドのほとんどはカレントブレークポイント(ポイントのあるブレークポイント)に適用されます。

SPC

カレントブレークポイントを有効または無効にします(gdb-toggle-breakpoint)。グラフィカルなディスプレーでは、これはsourceバッファーのフリンジのドットのカラーを変更します。ドットのカラーは、ブレークポイントが有効なときは赤、無効なときはグレーです。

D

カレントブレークポイントを削除します(gdb-delete-breakpoint)。

RET

カレントブレークポイントのソース行をvisitします(gdb-goto-breakpoint)。

mouse-2

クリックしたブレークポイントのソース行をvisitします(gdb-goto-breakpoint)。

gdb-many-windowsが非nilの場合、GDB Breakpointsバッファーは、GDB Threadsバッファーとウィンドウを共有します。一方から他方へ切り替えるには、ヘッダー行の関連するボタンをmouse-1でクリックします。gdb-show-threads-by-defaultが非nilの場合、GDB Threadsバッファーがデフォルトとして表示されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27.6.5.4 Threadsバッファー

GDB Threadsバッファーは、デバッグされているプログラムのスレッドのサマリーを表示します。Debugging programs with multiple threads in The GNU debuggerを参照してください。スレッドを選択するには、ポイントをそこに移動してRET (gdb-select-thread)を押すか、それをmouse-2でクリックします。これにより、それに関連するsourceバッファーが表示され、他のGDBバッファーの内容も更新されます。

GDB Threadsバッファー内に含まれる項目を選択するために、gdb-buffersグループ配下の変数をカスタマイズできます。

gdb-thread-buffer-verbose-names

Thread 0x4e2ab70 (LWP 1983)’のような長いスレッド名を表示します。

gdb-thread-buffer-arguments

スレッドのトップフレームの引数を表示します。

gdb-thread-buffer-locations

ファイル情報またはライブラリー名を表示します。

gdb-thread-buffer-addresses

threadバッファーのスレッドフレームのアドレスを表示します。

複数のスレッドの情報を同時に閲覧するには、GDB Threadsバッファーの以下のコマンドを使用します。

d

カレント行のスレッドのdisassemblyバッファーを表示します(gdb-display-disassembly-for-thread)。

f

カレント行のスレッドのGDB Stackバッファーを表示します(gdb-display-stack-for-thread)。

l

カレント行のスレッドのGDB Localsバッファーを表示します(gdb-display-locals-for-thread)。

r

カレント行のスレッドのGDB Registersバッファーを表示します(gdb-display-registers-for-thread)。

これらのコマンドの大文字DFLRは、対応するバッファーを新しいフレームに表示します。

特定のスレッドについての情報を表示するバッファーを作成した場合、それはそのスレッドにバインドされて、プログラムをデバッグする間、情報を表示し続けます。各GDBバッファーのモードインジケーターには、バッファーに情報が表示されているスレッドの番号が表示されます。スレッドの番号はバインドされたバッファーのバッファー名にも含まれます。

GDB Threadsバッファーでは、さらに他のコマンドも利用可能で、それはプログラムの実行を制御するのに使われるGDBのモードに依存します。マルチスレッドのデバッグを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27.6.5.5 Stackバッファー

GDB Stackバッファーは、コールスタック(call stack)を表示します。これは、1行がデバッガーセッションでのネストされたサブルーチン呼び出し(stack frames: スタックフレーム)にそれぞれ対応します。Backtraces in The GNU debuggerを参照してください。

グラフィカルなディスプレーでは、選択されたスタックフレームは、フリンジの矢印で示されます。テキスト端末、またはフリンジが無効な場合、選択されたスタックフレームは反転して表示されます。スタックフレームを選択するには、ポイントをその行に移動してRET (gdb-frames-select)とタイプするか、それをmouse-2でクリックします。これを行うことにより、Localsバッファーも更新されます (その他のGDBバッファーを参照してください)。

各スタックフレームのフレームアドレスを表示したい場合は、変数gdb-stack-buffer-addressesを非nil値にカスタマイズしてください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27.6.5.6 その他のGDBバッファー

Localsバッファー

このバッファーは、カレントフレームのローカル変数の値を、簡単なデータ型で表示します(Information on a frame in The GNU debuggerを参照してください)。値を編集したいときは、そこでRETを押すか、mouse-2でクリックしてください。

配列と構造体については、その型だけが表示されます。GDB 6.4以降では、ポイント位置でRETをタイプ、またはmouse-2でクリックすることにより、ローカル変数の値を調べることができます。それより前のバージョンのGDBでは、型の説明(‘[struct/union]’または‘[array]’)にたいして、RETまたはmouse-2を使用します。ウォッチ式を参照してください。

Registersバッファー

このバッファーは、レジスターに保持されている値を表示します(Registers in The GNU debuggerを参照してください)。値を編集したいときは、そのレジスターでRETを押すか、mouse-2をクリックします。GDB6.4以降では、最近変化したレジスター値は、font-lock-warning-faceで表示されます。

Assemblerバッファー

assemblerバッファーは、カレントフレームをマシン語コードで表示します。矢印はカレント命令を指し、sourceバッファーのようにブレークポイントのセットと削除ができます。ブレークポイントのアイコンも、フリンジまたは余白に表示されます。

Memoryバッファー

memoryバッファーは、プログラムのメモリーセクションを調べるためのバッファーです(Examining memory in The GNU debuggerを参照してください)。ヘッダー行の適切な箇所をmouse-1でクリックすることにより、そのバッファーが表示するメモリーの開始アドレス、またはデータアイテムの数が変化します(またはSおよびNを使用)。ヘッダー行をmouse-3でクリックすることにより、データアイテムのフォーマット、またはユニットサイズのどちらを表示するか選択します。

gdb-many-windowsが非nilの場合、breakpointsバッファーとthreadsバッファーがウィンドウを共有するように、localsバッファーとregistersバッファーもウィンドウを共有します。一方から他方へ切り替えるには、ヘッダー行の関連するボタンをmouse-1でクリックしてください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27.6.5.7 ウォッチ式

プログラムを停止するたびに、変数がどのように変化するか見たいときは、ポイントを変数名に移動して、ツールバーのウォッチアイコンをクリック(gud-watch)するか、C-x C-a C-wとタイプします。プレフィクス引数を指定した場合、変数名をミニバッファーで入力することができます。

各ウォッチ式は、speedbarに表示されます(スピードバーフレームを参照してください)。配列や、構造体、共有体のような複雑なデータ型はツリー形式で表示されます。ツリーの子ノード、および単純なデータ型では、式の名前とその値が表示され、speedbarフレームが選択されたときは型がツールチップで表示されます。それより高いレベルでは名前、型、ポインターのアドレス値、そうでない場合は名前と型だけが表示されます。ルート式では、それらがどこで定義されているかを識別するために、ツールチップでフレームアドレスも表示されます

複雑なデータ型を展開または折り畳むには、式の左のタグをmouse-2をクリックするかSPCを押します。式の子にあたるデータの数が、変数gdb-max-childrenの値を超える場合、Emacsは式を展開する前に確認を求めます。

複雑なウォッチ式を削除するには、speedbarのルート式にポイントを移動して、D (gdb-var-delete)とタイプしてください。

単純なデータ型の変数、または複雑なデータ型の単純な要素を編集するには、speedbarのその箇所にポイントを移動して、RET (gdb-edit-value)とタイプするか、値をmouse-2でクリックして、それを編集します。どちらの方法も、ミニバッファーを使って新しい値を読み取ります。

変数gdb-show-changed-valuesを非nil値(デフォルト)にセットした場合、Emacsは最近変化した値をfont-lock-warning-faceでハイライトし、スコープから外れた変数は目立たないshadowフェイスで表示します。変数がスコープから外れた場合、値を変更することはできません。

変数gdb-delete-out-of-scopeが非nil(デフォルト)の場合、Emacsはスコープから外れたときウォッチ式を自動的に削除します。この変数をnilにしておけば、プログラムが同じ関数に複数回再入したとき、新たにウォッチ式を作成しなくてよいので便利かもしれません。

変数gdb-use-colon-colon-notationが非nilの場合、Emacsは‘function::variable’というフォーマットを使います。これにより同じ変数名を共有するウォッチ式を表示することができます。デフォルト値はnilです。

ウォッチ式の表示が更新されるたびに、自動的にspeedbarを前に表示するには、gdb-speedbar-auto-raiseを非nilにセットします。これはEmacsフレームを全画面表示にしてデバッグしているとき便利です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27.6.5.8 マルチスレッドのデバッグ

GDBのall-stop modeでは、プログラムが停止すると、すべてのスレッドの実行が停止します。同様に、プログラムを再開すると、すべてのスレッドが実行を開始します。All-Stop Mode in The GNU debuggerを参照してください。マルチスレッド化されたいくつかのターゲットにたいして、GDBはこれを超える操作のためのモードをサポートします。これはnon-stop modeと呼ばれ、他のスレッドが自由に実行を継続している間に、デバッガーで停止したプログラムのスレッドを調べることができます。Non-Stop Mode in The GNU debuggerを参照してください。GDBのバージョン7.0以前では、non-stop modeはサポートされておらず、すべてのターゲットにたいしては機能しません。

変数gdb-non-stop-settingは、EmacsがGDBをall-stop modeとnon-stop modeのどちらで実行するかを決定します。デフォルトはtで、これは利用可能な場合はnon-stop modeを使うことを意味します。値をnilに変更した場合、またはnon-stop modeが利用不可の場合、EmacsはGDBをall-stop modeで実行します。この変数はEmacsがデバッグセッションを開始したときに効果をもちます。値を変更した場合、アクティブなデバッグセッションを再起動する必要があります。

non-stop modeモードでスレッドが停止すると、通常Emacsはそのスレッドに切り替えます。すでに選択したスレッドから停止した他のスレッドへの切り替えを行わないようにするには、変数gdb-switch-when-another-stoppednilに変更してください。

Emacsが停止したスレッドに切り替えるかどうかの決定は、そのスレッドが停止した理由に依存します。変数gdb-switch-reasonsをカスタマイズすることにより、スレッドの切り替えを行う停止理由を選択できます。

変数gdb-stopped-functionsには、あるスレッドが停止したときに実行する関数を指定できます。

non-stop modeでは、GUDの実行制御コマンドのための異なるモードを切り替えることができます。

Non-stop/A

gdb-gud-control-all-threadst(デフォルト)の場合、中断および継続のためのコマンドはすべてのスレッドに適用されるので、gud-stop-subjobまたはgud-contの1コマンドで、すべてのスレッドを停止または継続できます。少なくとも1つのスレッドが停止している場合、ツールバーに‘Go’ボタンが表示されます。また、少なくとも1つのスレッドが実行中の場合、‘Stop’ボタンが表示されます。

Non-stop/T

gdb-gud-control-all-threadsnilの場合、カレントスレッドだけを停止または継続します。GUDツールバーの‘Go’および‘Stop’のボタンの表示は、カレントスレッドの状態に依存します。

gdb-gud-control-all-threadsのカレント値は、ツールバーまたは‘GUD->GDB-MI’メニューで変更できます。

ステップコマンドは常にカレントスレッドに適用されます。

non-stop modeでは、スレッドを選択せずにスレッドを中断または継続できます。threadsバッファーで、ポイント位置のスレッドにたいしてiをタイプすると中断、cで継続、sでステップ実行します。今後さらにそのようなコマンドが追加されるかもしれません。

スレッドを中断した場合、停止理由は‘signal received’になることに注意してください。この理由がgdb-switch-reasonsに含まれている場合(デフォルトでは含まれています)、Emacsはそのスレッドに切り替えます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27.7 Lisp式の実行

Emacsには、Lispのいくつかの変種のためのメジャーモードがあります。これらは他のプログラミング言語のモードと同じ編集コマンドを使用します(プログラムの編集を参照してください)。それに加えて、Lisp式を実行するための特別なコマンドを提供します。

Emacs Lispモード

Emacs Lispのソースファイルを編集するためのモードです。このモードはカレントのトップレベルのLisp式を評価するC-M-xを定義します。Emacs Lisp式の評価を参照してください。

Lisp Interactionモード

Emacs Lispとの対話的なセッションのためのモードです。このモードはポイントの前の式を評価して、その値をバッファーに挿入するC-jを定義します。Lisp Interactionバッファーを参照してください。

Lispモード

Emacs Lispではない、他のLispを実行するプログラムのソースファイルを編集するためのモードです。このモードは、カレントのトップレベルの式を外部のLispで評価するC-M-xを定義します。外部Lispの実行を参照してください。

Inferior Lispモード

Emacsのサブプロセス(またはinferior process: 下位プロセス)として実行される外部Lispと、対話的にセッションするためのモードです。 外部Lispの実行を参照してください。

Schemeモード

Lispモードと同様ですが、Schemeプログラムのためのモードです。

Inferior Schemeモード

Inferior Lispモードと同様ですが、Schemeのためのモードです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27.8 EmacsのためのLispコードによるライブラリー

Emacs Lispのコードは、慣習として.elで終わる名前のファイルに保存されます。このようなファイルは、自動的にEmacs Lispモードでvisitされます。

Emacs Lispのコードは、loadが速く省スペースで、実行も速いバイトコードにコンパイルできます。慣習により、コンパイルされたEmacs Lispのコードは‘.elc’で終わる名前の別のファイルに保存されます。たとえば、foo.elをコンパイルしたコードはfoo.elcになります。Byte Compilation in the Emacs Lisp Reference Manualを参照してください。

Emacs Lispファイルをロード(load)するには、M-x load-fileとタイプします。このコマンドはミニバッファーを使ってファイル名を読み取り、そのファイル内容をEmacs Lispコードとして実行します。最初にファイルをvisitしておく必要はありません。このコマンドは、既存のEmacsバッファーからではなく、ディスクからファイルを直接読み込みます。

Emacs Lispファイルが、Emacs Lispのロードパス(load path: 以下で定義)にインストールされている場合、M-x load-fileではなくM-x load-libraryとタイプしてロードできます。M-x load-libraryコマンドは、ファイル名ではなくライブラリー名(library name)の入力を求めます。これはEmacs Lispのロードパスの各ディレクトリーを検索して、そのライブラリー名にマッチするファイルを見つけようと試みます。ライブラリー名が‘foo’の場合、ファイル名foo.elcfoo.elfooを見つけようと試みます。デフォルトの動作では、最初に見つかったファイルをロードします。このコマンドは.elより.elcを優先します。それはコンパイルされたファイルの方が、ロードと実行が速いからです。lib.ellib.elcより新しい場合、警告を発します。この場合、誰かが.elを変更したもののリコンパイルを忘れたようだが、ともかく.elcをロードする、という警告です(この振る舞いにより、編集が終わっておらず、まだリコンパイルする準備ができていないEmacs Lispのソースファイルを保存することができます)。しかしオプションload-prefer-newerを非nil値にセットした場合、上記の手順ではなく、Emacsは新しいファイルのバージョンをロードします。

Emacs Lispプログラムは通常、load関数を使用してEmacs Lispファイルをロードします。これはload-libraryと似ていますが、より低レベルで追加の引数を指定できます。How Programs Do Loading in the Emacs Lisp Reference Manualを参照してください。

Emacs Lispのロードパスは、変数load-pathにより指定されます。この変数の値は、ディレクトリー(文字列)のリストです。これらのディレクトリーは、M-x load-libraryコマンド、低レベルのload関数、その他のEmacs Lispライブラリーを探すEmacs関数により、指定された順に検索されます。load-pathのリストの要素には、特別な値nilも指定できます。これはカレントのデフォルトディレクトリーを意味しますが、その意味するところはEmacsがload-pathを使用する際のカレントディレクトリーに依存するはずなので、これを使うのは大抵間違っています(リストにnilを含めたいと思うとき、大抵の場合は、本当に望んでいるのはM-x load-fileを使用することです)。

load-pathのデフォルト値は、Emacs自身がLispコードを格納するディレクトリーのリストです。他のディレクトリーに独自のライブラリーがある場合、ロードパスにそのディレクトリーを追加できます。このマニュアルで説明されている他の大半の変数とは異なり、load-pathはCustomizeインターフェース(Easy Customizationインターフェースを参照してください)を通じての変更はできません。しかしinitファイルに以下のような行を記述して、ディレクトリーを追加できます(Emacs初期化ファイルを参照してください):

(add-to-list 'load-path "/path/to/my/lisp/library")

通例ではローカルにインストールしたライブラリーは、すでにload-pathのデフォルト値であるsite-lispディレクトリーか、site-lispのサブディレクトリーに配置します。この方法ならload-pathのデフォルト値を変更する必要はありません。

いくつかのコマンドは、自動ロード(autoload)されます。これらを実行するとき、Emacsは最初に関連するライブラリーを自動的にロードします。たとえばM-x compileコマンド(Emacs下でのコンパイルの実行を参照してください)は、自動ロードされます。これを呼び出した場合、Emacsは最初に、自動的にcompileライブラリーをロードします。対照的にコマンドM-x recompileは、自動ロードされません。そのため、このコマンドはcompileライブラリーをロードするまで利用できません。

自動的なロードは、自動ロードされたコマンドのドキュメントを探すとき(コマンドと変数名のヘルプを参照してください)にも発生します。それは、ドキュメントがライブラリーの他の関数や変数を参照する場合です(ライブラリーのロードにより*Help*バッファーのハイパーリンクが適切にセットアップされます)。この機能を無効にするには、変数help-enable-autoloadnilに変更してください。

describe-variabledescribe-functionでの名前補完時にも、接頭辞が補完されたかにもとづいて、自動ロードが発生します。この機能を無効にするには、変数help-enable-completion-autoloadnilに変更してください。

デフォルトではEmacsは、XEmacs —Emacsの変更されたバージョン — でコンパイルされたコンパイル済みのLispファイルのロードを拒絶します。なぜならそれはEmacsのクラッシュをさせるからです。これらのロードを試みる場合は、変数load-dangerous-librariestをセットしてください。

Emacsが検索、ロード可能なディレクトリーにライブラリーを一度配置したら、スタートアップ時に利用可能にしたいと思うかもしれません。これはライブラリーがオンデマンドで自動的に利用可能になる必要がある機能を定義していて、手動でのライブラリーが不便な際に有用です。この場合にはinitファイルに適切なフォーム(スタートアップ時にライブライーのロードが常に必要ならloadrequire、あるコマンドや関数の呼び出し時にEmacsがライブラリーのロードを要するならautoload)を追加して確実にライブラリーがロードされるようにしてください。たとえば:

 ;; 無条件でmy-shining-package.elcをロード
 (require 'my-shining-package)
 ;; my-func呼び出し時にmy-shining-package.elcをロード
 (autoload 'my-func "my-shining-package")

package-install (パッケージのインストールを参照)を使用したパッケージのインストールでは、Emcasが探すディレクトリーにパッケージのLispファイルを配置するように配慮するとともに、上述した手動によるカスタマイズが不要となるように必要な初期化コードをinitファイルに書き込むことに注意してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27.9 Emacs Lisp式の評価

Emacs LispモードはEmacs Lispを編集するためのメジャーモードです。これのモードコマンドはM-x emacs-lisp-modeです。

Emacsは、Emacs Lisp式を評価するためのコマンドをいくつか提供します。記述しているEmacs Lispコードをテストするために、これらのコマンドをEmacs Lispモードで使用できます。たとえば、関数を書き換えた後、以降の関数呼び出しでそれを有効にするために、関数定義を評価します。これらのコマンドはグローバルに利用可能で、Emacs Lispモード以外でも使用できます。

M-:

1つのEmacs Lisp式をミニバッファーで読み取り、それを評価して、値をエコーエリアに出力します(eval-expression)。

C-x C-e

ポイントの前のEmacs Lisp式を評価して、値をエコーエリアに出力します(eval-last-sexp)。

C-M-x (Emacs Lispモード)
M-x eval-defun

ポイントの後またはポイントを含むdefunを評価して、値をエコーエリアに出力します(eval-defun)。

M-x eval-region

リージョンのすべてのEmacs Lisp式を評価します。

M-x eval-buffer

バッファーのすべてのEmacs Lisp式を評価します。

M-: (eval-expression)は、ミニバッファーを使って式を読み取り、それを評価します(式を評価する前に、カレントバッファーは、式をタイプするためのミニバッファーではなく、M-:をタイプしたときカレントだったバッファーに切り替わります)。

コマンドC-x C-e (eval-last-sexp)は、そのバッファーのポイントの前にあるEmacs Lisp式を評価して、その値をエコーエリアに表示します。評価した結果が整数のときは、他のフォーマット(8進、16進、eval-expression-print-maximum-characterの制限を超えなければ文字)とともに値を表示します。

M-:およびC-x C-eにプレフィクス引数を与えた場合、値をエコーエリアに表示するのではなく、カレントバッファーのポイント位置に値を挿入します。プレフィクス引数が0の場合、整数出力は他のフォーマット(8進、16進、文字)と一緒に挿入されます。プレフィクス引数は、eval-expression-print-levelおよびeval-expression-print-lengthにしたがった出力の省略も防ぎます(以下参照)。同様にプレフィックス引数-1は、eval-expression-print-lengthの効果をオーバーライドします。

これはポイント位置、あるいはポイント位置に後続するトップレベルのLisp式を評価して、値をエコーエリアにプリントします。このコンテキストにおいてトップレベル式は“defun”として参照されますが、実際のdefun (関数定義)である必要はありません。こnコマンドは特にdefvar式を特別に扱います。通常、defvar式を評価しても、それが定義する変数がすでに値をもっている場合は、何も起こりません。しかし、このコマンドは無条件にdefvarで指定された初期値に変数をリセットします。これはEmacs Lispプログラムをデバッグするとき便利です。式defcustomおよびdeffaceも同様に扱われます。このセクションで説明している他のコマンドは、この特別な機能をもっていません。

プレフィクス引数を指定すると、C-M-xはEmacs LispデバッガーのEdebugのために関数定義をインストルメント(instrument: 処置)します。Instrumenting for Edebug in the Emacs Lisp Reference Manualを参照してください。

コマンドM-x eval-regionは、リージョンのテキストを1つ以上のLisp式として解析して、それらを1つずつ評価します。M-x eval-bufferも同様ですが、これはバッファー全体を評価します。

オプションeval-expression-print-levelおよびeval-expression-print-lengthは、評価コマンドが結果を出力する前に省略する、リストの最大の深さと長さを制御します。eval-expressionまたはeval-last-sexpにプレフィクス引数0を指定すると、リストはすべて出力されます。eval-expression-debug-on-errorは、これらのコマンドが使用されるとき、評価エラーによりデバッガーを呼び出すかを制御します、デフォルトはtです。eval-expression-print-maximum-characterは、文字として表示される最大の整数を超える値を抑制します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27.10 Lisp Interactionバッファー

Emacsを開始したとき、*scratch*という名前のバッファーが含まれます、これはEmacs Lisp式の対話的な評価を提供します。このバッファーのメジャーモードは、Lisp Interactionモードです。M-x lisp-interaction-modeとタイプしても、Lisp Interactionモードを有効にできます。

*scratch*バッファー、およびその他のLisp Interactionモードのバッファーでは、C-j (eval-print-last-sexp)はポイントの前のLisp式を評価して、値をポイント位置に挿入します。したがってバッファーに式をタイプするたび、その後ろでC-jをタイプすることにより、そのバッファーは式の評価とその値を記録した写しになります。その他すべてのLisp Interactionモードのコマンドは、Emacs Lispモードと同じです。

起動時には、*scratch*バッファーは、それが何かを説明するLispコメント形式の短いメッセージを含んでいます。このメッセージは変数initial-scratch-messageにより制御され、値にはドキュメント文字列またはnil(メッセージを抑止するという意味)を指定します。

Emacs Lisp式を対話的に評価する別の方法は、Inferior Emacs Lispモードを使う方法です。これはEmacs Lisp式の評価にShellモード(Shellモードを参照してください)に似たインターフェースを提供します。M-x ielmとタイプすることにより、このモードを使用する*ielm*というバッファーが作成されます。詳細は、コマンドのドキュメントを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

27.11 外部Lispの実行

Lispモードは、Common Lispのような一般用途のためのLisp方言で記述されたプログラムを記述するためのメジャーモードです。これのモードコマンドはM-x lisp-modeです。Emacsは名前が.l.lsp.lispで終わるファイルにたいして、自動的にLispモードを使用します。

外部LispセッションをEmacsのサブプロセス、または下位プロセス(inferior process)として実行して、式を評価するために渡すことができます。外部Lispセッションを開始するには、M-x run-lispとタイプします。これはlispという名前のプログラムを実行して、*inferior-lisp*という名前のEmacsバッファーを通じて入出力を行うようにセットアップします。M-x run-lispで実行されるLispプログラムの名前を変更するには、変数inferior-lisp-programを変更してください。

*lisp*バッファーのためのメジャーモードはInferior Lispモードで、これはLispモードの性質とShellモード(Shellモードを参照してください)の性質をあわせ持っています。Lispセッションに入力を送るには、*lisp*バッファーの最後に移動して、入力をタイプしてからRETをタイプします。Lispセッションからの端末出力は、自動的にそのバッファーに挿入されます。

LispプログラムをLispモードで編集する場合、C-M-x (lisp-eval-defun)とタイプして、Lispモードのバッファーから、M-x run-lispで開始したLispセッションに式を送ることができます。送信される式はポイント位置、またはポイントの後ろのトップレベルのLisp式です。結果となる値は通常どおり、*inferior-lisp*バッファーに送られます。LispモードでのC-M-xの効果は、それが評価されるEmacsに送られるのではなく、異なるLisp環境に送られる点を除けば、Emacs Lispモード(Emacs Lisp式の評価を参照してください)での効果とよく似ていることに注意してください。

Schemeコードを編集して、式をSchemeサブプロセスに送る機能は、よく似ています。Schemeソースファイルは、Schemeモードで編集されます。このモードはM-x scheme-modeで明示的に有効にできます。M-x run-schemeとタイプすることにより、Schemeセッションを開始し、C-M-xとタイプして式の送ることができます(Schemeと対話するためのバッファーは、*scheme*という名前です)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28 大きなプログラムの保守

このチャプターでは、中規模から大規模のプログラムやパッケージを保守するためのEmacsの機能を説明します。これらの機能には、以下が含まれます:

Lispの大きなプログラムをメンテナンスしている場合は、ここで説明している機能に加え、ERT(Emacs Lisp Regression Testing)ライブラリーも便利だと思うかもしれません(ERT in Emacs Lisp Regression Testingを参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1 バージョンコントロール

バージョンコントロールシステム(version control system)は、ソースファイルの複数のバージョンを記録したり、それらのバージョンの作成日時などや、誰が作成したか、何が変更されたかの説明などを記録できるプログラムのことです。

Emacsのバージョンコントロールのためのインターフェースは、VCと呼ばれます。VCコマンドは、複数の異なるバージョンコントロールシステムで機能します。現在のところ、Bazaar、CVS、Git、Mercurial、Monotone、RCS、SRC、SCCS/CSSC、Subversionがサポートされます。これらの中で、GNUプロジェクトのディストリビューションはCVS、RCS、Bazaarです。

バージョン管理システムで生成されたファイルをvisitすると、自動的にVCが有効になります。VCを無効にするには、カスタマイズ可能な変数vc-handled-backendsnilをセットします (VCのカスタマイズを参照してください)。

カレントバッファーでvisitされているファイルにたいするVC状態の情報を更新するには、コマンドvc-refresh-stateを使用します。Emacsの外(たとえばシェルプロンプト)でバージョンコントロールコマンドを実行したときや、そのバッファーのファイルを別のバージョンコントロールシステム下に置いたとき、バージョンコントロールからそのファイルを完全に削除したときに、このコマンドは有用です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.1 バージョンコントロールの紹介

VCは、Emacsからのバージョンコントロールシステムの使用、およびバージョンコントロールの操作と編集をスムーズに統合します。VCは、多くのバージョンコントロールシステムでの一般的な操作にたいする、統一されたインターフェースを提供します。

リポジトリー設定の変更など、非一般的または複雑なバージョンコントロールの操作は、VCではサポートされません。そのようなタスクは、VCの外(たとえばコマンドライン)で処理する必要があります。

このセクションは、バージョンコントロールの一般的な概観を提供し、VCがサポートするバージョンコントロールを説明します。すでに使いたいバージョンコントロールシステムをよく知っている場合、このセクションはスキップできます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.1.1 問題の背景を理解する

バージョンコントロールシステムは、3つの重要な能力を提供します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.1.2 サポートされるバージョンコントロールシステム

VCは現在のところ、多くの異なるバージョンコントロールで機能し、それらをバックエンド(back ends)として参照します:


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.1.3 バージョンコントロールの概念

ファイルがバージョンコントロールの配下にある時、それがバージョンコントロールシステムに登録されている(registered)と言います。バージョンコントロールシステムは、リポジトリー(repository)をもちます。これはファイルの現在の状態、および古いバージョンから現在のバージョンを再構成するのに充分な変更履歴の、両方を保存します。リポジトリーには、各ファイルに行われた変更の説明であるログエントリー(log entries)など、その他の情報も含まれます。

実際に編集する、バージョンコントロールされたファイルのコピーのことを、作業ファイル(work file)と呼びます。作業ファイルは、通常のファイルを同じように変更できます。一連の変更を終えた後、その変更をコミット(commit)またはチェックイン(check in)します。これにより、その変更はログエントリーの記述とともに、リポジトリーに記録されます。

作業ファイルのディレクトリツリーを、作業ツリー(working tree)と呼びます。

commitするたびに、リポジトリーに新しいリビジョン(revision)が作成されます。バージョンコントロールシステムは、過去のすべてのリビジョンと、各リビジョンで行われた変更を記録します。各リビジョンには、リビジョンID(revision ID)により名前がつけられます。リビジョンIDのフォーマットは、バージョンコントロールシステムに依存します。もっとも簡単なケースでは、リビジョンIDは単なる整数です。

これらの基本的な概念を超えるにつれ、各バージョンコントロールシステムの違いの、3つの様相を理解する必要がでてくるでしょう。以降の3つのセクションで説明するように、各バージョンコントロールシステムには、ロックベース(lock-based)とマージベース(merge-based)、ファイルベース(file-based)と変更セットベース(changeset-based)、集中型(centralized)と分散型(decentralized)の違いがあります。VCはこれらすべてのモードの操作を処理しますが、それらの違いを隠蔽することはできません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.1.4 バージョンコントロールにおけるマージベースとロックベース

バージョンコントロールシステムは通常、同じファイルを変更したい複数ユーザーを調整するために、何らかのメカニズムをもちます。これを行うには2つの方法 — マージとロック — があります。

マージを使うバージョンコントロールシステムでは、各ユーザーはいつでも作業ファイルを変更します。バージョンコントロールシステムは、コミットされていない変更を含むユーザーの作業ファイルを、他のユーザーによりコミットされた最新の変更とマージします。

古いバージョンコントロールシステムは、かわりにロック(locking)を使います。この場合、作業ファイルは通常は読み取り専用です。ファイルを編集するには、それをロックすることにより書き込み可能にできるか、バージョンコントロールシステムに尋ねます。ある時点で、そのファイルをロックできるユーザーは1人だけです。この手順は、通常のファイルの同時編集をEmacsが検知する方法と類似しているようですが、異なります(同時編集からの保護を参照してください)。変更をコミットすると、ファイルはアンロック(unlocks)され、作業ファイルは再び読み取り専用になります。他のユーザーは、変更するためにそのファイルをロックすることができます。

ロックおよびマージの両方のシステムは、複数ユーザーが同じときに同じファイルの変更を試みたときに問題が発生し得ます。ロックを使うシステムには、ロックの衝突(lock conflicts)があります。あるユーザーはファイルのチェックアウトを試みますが、それがすでにロックされている場合はロックできません。マージを使うシステムには、マージの衝突(merge conflicts)があります。これはファイルに行った変更をコミットするとき、それが後からチェックアウトした他の誰かによる変更のコミットと衝突するときに発生します。どちらの衝突も、人間の判断と意思疎通により解決する必要があります。経験から、開発者に取っての利便性と、実際に発生する衝突の重大性と数を最小にするという両方の点で、マージはロックに優ります。

SCCSは常にロックを使います。RCSはデフォルトではロックベースですが、マージスタイルで処理するように指示できます。CVSとSubversionはデフォルトではマージベースですが、ロックモードで処理するように指示できます。Git、Mercurialのような分散型のバージョンコントロールシステムは、マージベースだけです。

VCはロックとマージの両方のバージョンコントロールをサポートします。“commit(コミット)”と“update(更新)”という用語は、新しいバージョンコントロールシステムで使用されます。古いロックベースのシステムでは、“check in(チェックイン)”と“check out(チェックアウト)”という用語が使用されます。VCはこれらの違いをできる限り隠蔽します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.1.5 バージョンコントロールに置ける変更セットベースとファイルベース

SCCS、RCS、CVS、およびその他の初期のバージョンコントロールシステム(SRCも含む)では、バージョンコントロールの操作はファイルベース(file-based)です。各ファイルは、他のすべてのファイルとは別に、ファイル自身のコメントとリビジョン履歴をもちます。Subversionで始まる新しいシステムは、変更セットベース(changeset-based)です。コミットは複数ファイルにたいする変更を含むときがあり、一連の変更全体を1つの単位として扱います。変更にたいするコメントは1つのファイルではなく、変更セットに属します。

変更セットベースのバージョンコントロールは、ファイルベースのバージョンコントロールより、柔軟で強力です。通常、複数ファイルの変更を元に戻す必要がある時、それを簡単に識別してすべてを削除できます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.1.6 リポジトリーにおける分散型と集中型

初期のバージョンコントロールシステムは、集中型(centralized)モデルでデザインされていて、各プロジェクトはすべての開発者が使用するただ1つのリポジトリーをもちます。SCCS、RCS、CVS、Subversion、SRCはこの種のモデルを共有します。このモデルの欠点の1つは、リポジトリーが信頼性と効率の要衝となることです。

GNU Archは、分配型(distributed)または分散型(decentralized)のバージョンコントロールの先駆で、後にGit、Mercurial、Bazaarで実装されました。プロジェクトは複数の異なるリポジトリーをもつことができ、これらのシステムはリポジトリー間で変更履歴を調停する、ある種のスーパーマージをサポートします。開発者ごとに1つのリポジトリーがあり、リポジトリーのマージがコミット操作を代行します。

VCは個人の作業ファイルと、リポジトリーとの間で行われる通信を管理する手助けをします。VCは、リポジトリーが唯一のマスターなのか、それともネットワークのピアーのリポジトリーの1つなのかは関知しません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.1.7 ログファイルのタイプ

バージョンコントロールシステムを使うプロジェクトは、変更にたいする2つのタイプのログをもつことができます。1つはバージョンコントロールシステムで保守されるログです。変更をコミットするたびに、変更にたいするログエントリー(log entry)を入力します(Log Entryバッファーの機能を参照してください)。これはバージョンコントロールログ(version control log)と呼ばれます。

もう1つの種類のログは、ChangeLogです(変更ログを参照してください)。これはプログラムの大きな部分(通常は1つのディレクトリーと、そのサブディレクトリー)にたいする変更の記録を、年代順に記録します。小さなプログラムは、1つのChangeLogを使用するでしょう。大きなプログラムは、主要なディレクトリーごとにChangeLogをもつかもしれません。変更ログを参照してください。プログラマーは、バージョンコントロールシステムのずっと前からChangeLogを使ってきました。

変更セットベースのバージョンシステムは、通常システム全体にたいして変更セットベースの修正ログを保守します。これはChangeLogを冗長なものにします。ChangeLogを残す利点の1つは、他のディレクトリーとは別に、1つのディレクトリーの履歴トランザクションが見れるのは便利なときがあるからです。他の利点として、多くのバージョンコントロールシステムはコミットログを特定できないからです。

バージョンコントロールで管理されるプロジェクトは、バージョンコントロールログだけを使用するか、両方の種類のログを使用します。あるファイルにたいしては1つのログを使い、他のファイルにたいしては別の方法を使うこともできます。プロジェクトごとに、したがうべきポリシーがあります。

両方を使うというポリシーの場合は通常、変更にたいして1度だけエントリーを書いて、それを両方のログに書き込みたいと思うでしょう。ChangeLogにエントリーを記述して、変更をコミットするときにC-c C-aでログバッファーにコピーできます。または変更をコミットするときログバッファーにエントリーを記述して、(C-c C-wの助けを借りて)後でC-x v aコマンドでそれをChangeLogにコピーできます (変更ログとVCを参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.2 バージョンコントロールとモードライン

バージョンコントロール配下のファイルをvisitしたとき、Emacsはモードラインにそれを示します。たとえば‘Bzr-1223’と表示された場合、そのファイルにBazaarが使用され、カレントのリビジョンIDが1223であることを示します。

バックエンド名とリビジョンIDの間の文字は、作業ファイルのバージョンコントロール状態(version control status)を示します。マージベースのバージョンコントロールシステムでは、文字‘-’は作業ファイルが変更されていないことを示し、文字‘:’は作業ファイルが変更されていることを示します。文字‘!’は最新のマージ処理の結果により、そのファイルに衝突が含まれていることを示すか(ブランチのマージを参照してください)、そのファイルがバージョンコントロールから削除されたことを示します。最後に、文字‘?’は、そのファイルがバージョンコントロールの配下にあるが、作業ツリーにないことを示します。

ロックベースのシステムでは、‘-’はファイルがロックされていないことを示し、‘:’はファイルが他のユーザー(たとえば‘jim’)にロックされていることを示し、‘RCS:jim:1.3’のように表示されます。‘@’は、そのファイルがローカルに追加されたが、まだマスターリポジトリーにコミットされていないことを示します。

グラフィカルなディスプレーでは、モードラインのインジケーターの上にマウスを移動すると、ツールチップが表示され、それにはバージョンコントロール状態の、より多くの説明が表示されます。インジケーターをmouse-1でクリックすると、メニューバーの‘Tools / Version Control’と同じVCコマンドがのメニューがポップアップします。

Auto Revertモード(バッファーのリバートを参照してください)がバージョンコントロール配下のバッファーをリバートするとき、これはモードラインのバージョンコントロール情報を更新します。しかし、Auto Revertモードは、作業ファイルの変更をともなわない、カレントのEmacsセッションの外でのバージョンコントロール状態の変化の情報は、正しく更新しないかもしれません。auto-revert-check-vc-infotにセットすると、Auto Revertモードは、作業ファイル自身を変更していなくても、auto-revert-interval秒ごとにバージョンコントロール状態の情報を更新します。CPU使用率はバージョンコントロールシステムに依存しますが、通常はそれほど高価な処理ではありません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.3 バージョンコントロール下での基本的な編集

ほとんどのVCコマンドは、VCファイルセット(VC filesets)にたいして処理を行います。VCファイルセットは、VC操作が機能する1つ以上のファイルのコレクションです。バージョンコントロールされたファイルをvisitしているバッファーでVCコマンドをタイプすると、VCファイルセットは単にそのファイル1つだけになります。VC Directoryバッファーで、いくつかのファイルをマークしているときにVCコマンドをタイプしたときは、VCファイルセットはマークされたファイルです(VC Directoryモードを参照してください)。

現代的な変更セットベースのバージョンコントロールシステム(バージョンコントロールに置ける変更セットベースとファイルベースを参照してください)では、VCコマンドは複数ファイルからなるVCファイルセットを1つのグループとして扱います。たとえば複数ファイルからなるVCファイルセットをコミットすると、それらすべてのファイルにたいする変更を含む、1つのリビジョンが生成されます。CVSのような古いファイルベースのバージョンコントロールシステムでは、複数ファイルからなるVCファイルセットの各ファイルは個別に処理されます。たとえば、コミットにより、変更されたファイル後とに1つのリビジョンが生成されます。

C-x v v

カレントVCファイルセットにたいして、次の適切なバージョンコントロール操作を処理します。

重要なVCコマンドC-x v v (vc-next-action)は多目的なもので、カレントのVCファイルセットにたいして、もっとも適切な操作を処理します。このコマンドは、それをバージョンコントロールシステムに登録するか、コミットするか、ロックを外すか、変更をマージします。正確な動作の詳細は、以下のサブセクションで説明します。C-x v vは、ファイルをvisitしているバッファーと、VC Directoryバッファーの両方で使うことができます。

VCファイルセットは、ファイルを閲覧したりvisitするためのグループ機能として使用される、名前つきファイルセット(named filesets)とは別の物だということに注意してください(ファイルセットを参照してください)。名前つきファイルセットとは異なり、VCファイルセットは名前をもたず、セッションをまたいで持続しません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.3.1 マージでの基本的なバージョンコントロール

マージベースのバージョンコントロールシステム(たとえばもっとも現代的な方法の1つ。バージョンコントロールにおけるマージベースとロックベースを参照してください)では、C-x v vは以下のことを行います:

これらのルールは、変更はリポジトリーから自動的にマージされない点をのぞき、RCSを非ロックモードで使用している場合も適用されます。あなたがファイルの編集を始めた後に、他のユーザーが同じファイルをコミットした場合、何の情報も与えられません。あなたのリビジョンをコミットしたとき、他のユーザーの変更は失われます(しかし、それはリポジトリーには残るので、決定的に失われるわけではありません)。したがって、変更をコミットする前に、カレントリビジョンが変更されていないことを調べなければなりません。それに加えて、このモードでもRCSでロックすることが可能です。変更されていないファイルでのC-x v vは、RCSの通常のロックモードのようにそのファイルをロックします。(ロックでの基本的なバージョンコントロールを参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.3.2 ロックでの基本的なバージョンコントロール

ロックベースのバージョンコントロールシステム(SCCSやRCSのデフォルトモードなど)では、C-x v vは以下のことを行います:

このルールは、CVSがロックの横取りをサポートしない点をのぞき、CVSをロックモードで使用している場合も適用されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.3.3 C-x v vの高度な制御

vc-next-actionにプレフィクス引数を与えた場合(C-u C-x v v)、論理的に次のバージョンコントロール操作を処理する点に変わりはありませんが、どのように操作を行うかを正確に指定するために、追加の引数を指定できるようになります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.4 Log Entryバッファーの機能

VCに変更のコミットを指示したとき、*vc-log*という名前のバッファーがポップアップします。このバッファーには、行った変更を説明するログエントリー(log entry)を書き込みます。書き込んだらC-c C-c (log-edit-done)とタイプして, そのバッファーを抜けて、ログエントリーとともに変更をコミットします。

*vc-log*バッファーのためのメジャーモードはLog Editモードで、これはTextモードの変種です(Textモードを参照してください)。Log Editモードに入ると、Emacsはフックtext-mode-hookおよびvc-log-mode-hookを実行します(フックを参照してください)。

*vc-log*バッファーでは、1行以上のヘッダー行(header lines)を記入できます。これにはバージョンコントロールシステムにより提供される、追加の情報を指定します。各ヘッダー行は、そのバッファーの最初の1行を占めなければなりません。ヘッダー行でない最初の行は、ログエントリーの開始として扱われます。たとえば以下のヘッダー行は、その変更が他の開発者によるものだということを示します:

Author: J. R. Hacker <jrh@example.com>

Author’ヘッダーとは別に、Emacsは‘Summary’ヘッダー(changesetの1行要約)、‘Date’ヘッダー(手入力で指定されたコミット日時)、‘Fixes’ヘッダー(変更によるバグフィクスへの参照)を認識します。すべてのバージョンコントロールシステムが、すべてのヘッダーを認識するわけではありません。そのシステムでサポートされていないヘッダーを指定した場合、それはログエントリーの一部として扱われます。

*vc-log*バッファーにいる間は、カレントVCファイルセット(current VC fileset)とは、C-c C-cとタイプすることによりコミットされるファイルセットだと考えられます。そのVCファイルセットのファイル一覧を閲覧するには、C-c C-f (log-edit-show-files)とタイプします。そのVCファイルセットと、編集を開始したバージョンとのdiffを閲覧するには、C-c C-d (log-edit-show-diff)とタイプしてください。

VCファイルセットのdiffにもとづいて変更されたすべてのファイルと関数をリストする雛形ChangeLogエントリーを生成してChangeLogエントリー生成の助けとするには、C-c C-w (log-edit-generate-changelog-from-diff)とタイプします。空のままの連続したエントリーはC-q (fill-paragraph)によって結合されます。

VCファイルセットが1つ以上のChangeLog(変更ログを参照してください)ファイルを含む場合、C-c C-a (log-edit-insert-changelog)とタイプすると、関連するエントリーを、*vc-log*バッファーに引用します。各ChangeLogファイルの一番上のアイテムが、今日の日付でユーザー名があなたの場合、このコマンドはコミットされるファイルにマッチするエントリーのアイテムを検索して、それを挿入します。 CVSまたはRCSを使用している場合は、反対のこと — Log EditバッファーからChangeLogエントリーを生成 — を行います。変更ログとVCを参照してください。

コミットを中止するには、そのバッファーで単にC-c C-cタイプしないで、バッファーを切り替えて他の編集を行うことができます。他のコミットを試みなければ、編集していたエントリーは*vc-log*に残っているので、後でそのバッファーに戻ってコミットを完了できます。

コミットコメントをコピーするために、以前のログエントリーの履歴を閲覧することもできます。これは、似たようなコメントで複数のコミットを行いたいとき便利です。これを行うコマンドM-nM-pM-sM-rは、これらがミニバッファーの外で使用される点を除けば、ミニバッファーのヒストリーコマンド(ミニバッファーヒストリーを参照してください)と同様です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.5 バージョンコントロールへのファイルの登録

C-x v i

visitしているファイルを、バージョンコントロールに登録します。

コマンドC-x v i (vc-register)は、カレントVCファイルセットの各ファイルを、バージョンコントロールの配下に置きます。これは登録されていないVCファイルセットにたいして、C-x v vが行う動作と基本的に同じですが、VCファイルセットがすでに登録されているとき(バージョンコントロール下での基本的な編集を参照してください)、C-x v vは他の操作を処理しますが、C-x v iはエラーをシグナルする、という点が異なります。

ファイルを登録するために、Emacsはバージョンコントロールシステムを選択しなければなりません。複数ファイルのVCファイルセットにたいしては、VC Directoryバッファーが使用するシステムを指定します(VC Directoryモードを参照してください)。VCファイルセットのファイルが1つで、そのファイルのディレクトリーがすでにバージョンコントロールシステムに登録されたファイルを含むか、そのディレクトリーがバージョンコントロールシステムにより制御される作業ツリーの一部の場合、Emacsはそのシステムを選択します。複数のバージョンコントロールシステムが当てはまる場合、Emacsは変数 vc-handled-backendsに最初に表れるシステムを使用します(VCのカスタマイズを参照)。 Emacsがファイルを登録するバージョンコントロールシステムを見つけられなかった場合、リポジトリータイプの入力を求め、新しいリポジトリーを作成して、そのリポジトリーにファイルを登録します。

ほとんどのバージョンコントロールシステムでは、C-x v iまたはC-x v vでファイルを登録することにより、それを作業ツリー(working tree)に追加しますが、リポジトリーには追加しません。そのようなファイルは、VC Directoryバッファーでは‘added’とラベル付けされ、モードラインのリビジョンIDには‘@@’が表示されます。リポジトリーにたいして登録を有効にするには、コミットを行わなければなりません(バージョンコントロール下での基本的な編集を参照してください)。1つのコミットに、ファイルの追加と、既存ファイルの編集の両方を含むことができるのに注意してください。

ロックベースのバージョンコントロールシステム(バージョンコントロールにおけるマージベースとロックベースを参照してください)では、ファイルの登録により、ファイルはロックされていない読み取り専用の状態に留まります。編集を開始するには、C-x v vとタイプします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.6 古いリビジョンの調査と比較

C-x v =

カレントVCファイルセットの作業ファイルと、編集を開始したバージョンを比較します(vc-diff)。プレフィクス引数を指定した場合、カレントVCファイルセットの2つのリビジョンの入力を求め、それらを比較します。このコマンドをDiredバッファーから呼び出すこともできます(Dired (ディレクトリーエディター)を参照してください)。

M-x vc-ediff

C-x v =と同様ですが、Ediffを使用します。Ediff in The Ediff Manualを参照してください。

C-x v D

編集を開始したリビジョンの、作業ツリー全体を比較します(vc-root-diff)。プレフィクス引数を指定した場合、2つのリビジョンの入力を求め、それらのツリーを比較します。

C-x v ~

カレントファイルのリビジョンの入力を求め、それを別のバッファーでvisitします(vc-revision-other-window)。

C-x v g

カレントファイルの、注釈付きのバージョンを表示します。各行には、その行が変更された最新のリビジョンが表示されます(vc-annotate)。

C-x v = (vc-diff)は、diffを表示します。これはカレントVCファイルセットの各作業ファイルを、編集を開始したときのバージョンと比較します。diffは別のウィンドウに、*vc-diff*という名前のDiff modeモードのバッファー(Diffモードを参照してください)で表示されます。このバッファーでは、通常のDiffモードコマンドが利用可能です。特にg (revert-buffer)コマンドは、ファイル比較を再び行い、新しいdiffを生成します。

カレントVCファイルセットの、任意の2つのリビジョンを比較するには、C-u C-x v =のようにプレフィクス引数を指定して、vc-diffを呼び出します。これは2つのリビジョンID(バージョンコントロールの概念を参照してください)の入力を求め、ファイルセットのそれらのバージョンの間のdiffを表示します。このコマンドは、バージョンコントロールシステムが変更セットベースではなくファイルベースの場合(たとえばCVS)に、複数ファイルのVCファイルセットにたいして確実に動作しません。なぜなら同じリビジョンIDをもつ異なるファイル同士を、意味のある方法で関連させることができないからです。

リビジョンIDではなく、他のフォーマットでリビジョンを指定するバージョンコントロールシステムもいくつかあります。たとえばBazaarでは、C-u C-x v =(および関連するコマンド)に‘date:yesterday’と入力でき、これは昨日以降コミットされた最初のリビジョンを指定します。詳細については、バージョンコントロールシステムのドキュメントを参照してください。

Diredバッファー(Dired (ディレクトリーエディター)を参照してください)でC-x v =またはC-u C-x v =を呼び出すと、カレント行にリストされたファイルが、カレントVCファイルセットとして扱われます。

M-x vc-ediffは、C-x v =と同じように機能しますが、Ediffセッションを使用します。Ediff in The Ediff Manualを参照してください。

C-x v D (vc-root-diff)は、C-x v =と似ていますが、カレント作業ツリー全体の変更を表示します(たとえばカレントVCファイルセットを含む作業ツリー)。このコマンドをDiredバッファーから呼び出すと、そのディレクトリーを含む作業ツリーに適用されます。

ツリー全体の任意の2つのリビジョンを比較するには、C-u C-x v =のようにプレフィクス引数を指定してvc-root-diffを呼び出します。これは2つのリビジョンID(バージョンコントロールの概念を参照)の入力を求めて、バージョンコントロールされたディレクトリー全体のバージョン間のdiffを表示します(RCS、SCCS、CVS、SRCはこの機能をサポートしない)。

C-x v =およびC-x v Dが、diffを生成するために使用するdiffオプションをカスタマイズできます。オプションには、変数vc-backend-diff-switchesvc-diff-switchesdiff-switches(ファイルの比較を参照)の順に、最初の非nilの値が使用されます。ここでbackendは、関連するバージョンコントロールシステムで、たとえばBazaarの場合はbzrです。nilは順番に次の変数をチェックすることを意味するので、スイッチを指定しない場合は最初の2つの値をtにします。ほとんどのvc-backend-diff-switches変数のデフォルトはnilですが、いくつかのbackendのデフォルトはtです。Subversionのように、これらのバージョンコントロールシステムのdiff実装は、一般的なdiffオプションを受け付けません。

ファイルの古いバージョンを直接調べるには、作業ファイルをvisitして、C-x v ~ revision RET (vc-revision-other-window)とタイプします。これはrevisionに対応するバージョンのファイルを取得して、それをfilename.~revision~に保存してから、別のウィンドウでvisitします。

多くのバージョンコントロールシステムでは、C-x v g (vc-annotate)とタイプして、行ごとにリビジョン情報の注釈付き(annotated)でファイルを閲覧できます。これは新しい“annotate”バッファーを作成して、各行に古さを示すカラーをつけて、ファイルのテキストを表示します。赤いテキストは新しく、古いものは青、その中間色は中間のバージョンを示します。デフォルトでは、一番古い変更を青、一番新しい変更を赤で、すべてのバージョンレンジにカラーをスケーリングします。変数vc-annotate-background-modeが非nilの場合、各行の世代を表すカラーはバックグラウンドカラーに適用され、フォアグラウンドカラーはデフォルトのカラーのままです。

このコマンドにプレフィクス引数を指定した場合、Emacsはミニバッファーを使って、表示および注釈つけする(カレントファイル内容のかわりの)リビジョンと、カラーレンジがカバーすべきタイムスパンの、2つの引数を読み取ります。

“annotate”バッファーでは、‘VC-Annotate’メニューから、これら、または他のカラースケールオプションが利用可能です。このバッファーでは、過去のリビジョンの注釈の表示、diffの閲覧、ログエントリーの閲覧を行うために、以下のキーを使うこともできます:

p

前のリビジョン(たとえば現在の注釈付きのリビジョンの1つ前のリビジョン)に注釈を付けます。数引数は繰り返し回数となるので、C-u 10 pは10個前のリビジョンに注釈を付けます。

n

次のリビジョン(たとえば現在の注釈付きのリビジョンの1つ後のリビジョン)に注釈を付けます。数引数は繰り返し回数です。

j

カレント行に示されたリビジョンに解釈を付けます。

a

カレント行に示されたリビジョンの、1つ前のリビジョンに注釈を付けます。これはカレント行が変更される前の状態のファイルを見るとき便利です。

f

カレント行に示されたリビジョンのファイルを、バッファーに表示します。

d

カレント行のリビジョンと、その前のリビジョンの間のdiffを表示します。これはカレント行のリビジョンが実際にどのように変更されたか、ファイルを見るとき便利です。

D

カレント行のリビジョンと、その前のリビジョンの間で、(変更セットをサポートするバージョンコントロールシステムの)変更セットのすべてのファイルのdiffを表示します。これはカレント行のリビジョンが、実際にどのように変更されたかツリー内を見るとき便利です。

l

カレント行のリビジョンのログを表示します。これはカレント行のリビジョンの変更にたいする執筆者(author)の説明を見るのに便利です。

w

作業中のリビジョン(編集中のもの)に注釈を付けます。pnを使って他のリビジョンを表示している場合、このキーで作業中のリビジョンに戻ることができます。

v

注釈の表示・非表示を切り替えます。これは邪魔になる注釈抜きでファイル内容だけを見たいとき便利です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.7 VC Change Log

C-x v l

カレントファイルセットの変更履歴を表示します(vc-print-log)。

C-x v L

カレントリポジトリーの変更履歴を表示します(vc-print-root-log)。

C-x v I

pull操作が取り込む変更を表示します(vc-log-incoming)。

C-x v O

push操作が送信する変更を表示します(vc-log-outgoing)。

C-x v h

カレントバッファーがvisit中のファイルのリージョンにたいして行われた変更の履歴を表示します(vc-region-history)。

M-x vc-log-search RET

指定したパターンの変更履歴を検索します。

C-x v l (vc-print-log)は、*vc-change-log*という名前のバッファーを表示して、誰が変更したのか、その日時、各変更のログエントリー(これらは*vc-log*バッファーを通じて入力したログエントリーと同じです。Log Entryバッファーの機能を参照してください)を含む、カレントファイルに行われた変更の履歴を表示します。現在visitしているファイルのリビジョンに、ポイントが配されます。プレフィクス引数を指定した場合、このコマンドはポイントが配されるリビジョンと、表示するリビジョンの最大数の入力を求めます。

VC Directoryバッファー(VC Directoryモードを参照してください)、またはDiredバッファー(Dired (ディレクトリーエディター)を参照してください)からC-x v lを呼び出した場合、カレント行にリストされたファイルにたいして適用されます。

C-x v L (vc-print-root-log)はバージョンコントロールされたディレクトリーツリー全体の履歴を示す*vc-change-log*バッファーを表示します(RCS、SCCS、CVS、SRCはこの機能をサポートしない)。コマンドにプレフィクス引数を与えると表示するリビジョンの最大数の入力を求めます。プレフィクス数引数は入力を求めることなくリビジョンの最大数を指定します。C-1 C-x v LC-u 1 C-x v Lのようにプレフィクス数引数が1ならコマンドはリビジョンIDの入力を求めて、そのリビジョンで導入された変更(diff)とともにリビジョンのログエントリーを表示します(RCSやCVSのように機能に劣るバージョンコントロールシステムにはdiffとともにリビジョンログを表示するコマンドがなく、このコマンドはそれらにたいしてはログエントリーだけを表示するので、以下のdDをタイプしてdiffを要求できる)。

C-x v Lでは履歴は簡略化された形式で表示され、通常は各ログエントリーの最初の行だけが表示されます。しかし*vc-change-log*バッファーでRET (log-view-toggle-entry-display)とタイプすると、ポイント位置のリビジョンのログエントリー全体を表示します。2回目のRETで、再びそれを隠します。

分散型のバージョンコントロールシステムでは、C-x v I (vc-log-incoming)コマンドは、次回にバージョンコントロールのpullコマンドを実行するときに、他のリポジトリーから受け取る新しいリビジョンにより適用される変更を、ログバッファーに表示します(ブランチへ/からの変更のpull/pushを参照してください)。ここで他のリポジトリーとは、バージョンコントロールシステムで定義される、変更がpullされるリポジトリーのことです。プレフィクス引数を指定すると、vc-log-incomingは特定のリポジトリーの入力を求めます。同様に、C-x v O (vc-log-outgoing)は、次回にpushコマンドを実行するときに、他のリポジトリーに送る変更を表示します。プレフィクス引数を指定すると、特定の送信先リポジトリーの入力を求めます。

*vc-change-log*バッファーでは、リビジョンのログまたはファイル間の移動や、過去のリビジョン(古いリビジョンの調査と比較を参照してください)を調べたり比較するために、以下のキーを使うことができます:

p

前のリビジョンエントリーに移動します(logバッファーのリビジョンエントリーは通常、日時の降順になっているので、前のリビジョンアイテムは通常、もっと新しいリビジョンに対応します)。数引数は繰り返し回数です。

n

次のリビジョンエントリーに移動します。数引数は繰り返し回数です。

P

複数ファイルのVCファイルセットのログを表示している場合は、前のファイルのログに移動します。そうでない場合は、単にログの先頭に移動します。数引数は繰り返し回数です。

N

複数ファイルのVCファイルセットのログを表示している場合は、次のファイルのログに移動します。数引数は繰り返し回数です。

a

カレント行のリビジョンに注釈を付けます(古いリビジョンの調査と比較を参照してください)。

e

ポイント位置に表示された変更コメントを修正します。すべてのバージョンコントロールシステムが、変更コメントの修正をサポートするわけではないことに注意してください。

f

カレント行に示されたリビジョンをvisitします。

d

ポイント位置のリビジョンと、次に古いリビジョンとの間で、特定のファイルにたいするdiffを表示します。

D

ポイント位置のリビジョンと、次に古いリビジョンとの間で、変更セットのdiffを表示します。これは、そのリビジョンですべてのファイルにたいして行われた変更を表示します。

RET

簡略形式のlogバッファー(たとえばC-x v Lで作成されたバッファー)で、ポイント位置のログエントリーにたいして、完全なログエントリーの表示・非表示を切り替えます。

多くのログエントリーを取得するには時間がかかるので、*vc-change-log*バッファーは、デフォルトで2000を超えるリビジョンは表示しません。変数vc-log-show-limitはこの制限を指定します。この値を0にセットすると、制限が削除されます。既存の*vc-change-log*で、バッファーの最後のボタン‘Show 2X entries’または‘Show unlimited entries’をクリックして、表示するリビジョン数を増やすこともできます。しかしRCS、SCCS、CVS、SRCはこの機能をサポートしません。

変更履歴を確認する有用な変種はコマンドvc-region-history (デフォルトではC-x v hにバインド)により提供されます。これはカレントバッファーのファイルのポイントとマーク(マークとリージョンを参照)の間にあるリージョンに行われた変更の履歴を*VC-history*バッファーに表示します。変更履歴にはコミットログメッセージ(commit log messages)と変更自体のDiff形式も含まれます。

カレントバッファーの興味がある変更にたいしてリージョンをマークした後に、このコマンドを呼び出します。このコマンドがポップアップする*VC-history*バッファーでは、上述した*vc-change-log*バッファーで利用可能なコマンドすべてと、Diffモード(Diffモードを参照)で定義されたコマンドも使用できます。

このコマンドは現在のところGitとMercurial(hg)だけで利用可能です。

コマンドvc-log-searchにより変更ログのパターンによる検索が可能になります。これはパターン(正規表現)の入力を求めて、パターンにマッチするログメッセージをもつ変更履歴内のすべてのエントリーを表示します。プレフィクス引数とともに呼び出された際には、コマンドはこの目的にたいして実行する固有のVCSシェルコマンドの入力も求めます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.8 バージョンコントロール操作のアンドゥ

C-x v u

カレントVCファイルセットの作業ファイルを、最後のリビジョンにリバートします(vc-revert)。

カレントVCファイルセットにたいするすべての変更を破棄したい場合、C-x v u (vc-revert)とタイプします。これは作業ファイルと、編集を開始したときのリビジョンのdiffを表示して、変更を破棄するか確認を求めます。これに同意するとファイルセットはリバートされます。C-x v uでdiffを表示させたくない場合は、変数vc-revert-show-diffnilをセットします(この設定をしてもC-x v =で直接diffを表示できます。古いリビジョンの調査と比較を参照)。

ロックベースのバージョンコントロールシステムでは、C-x v uはファイルをロックしないまま残します。編集を再開するには、再度ロックしなければなりません。ファイルをロックしてから、やはりそれを変更しないと決めたときも、C-x v uでファイルのロックを開放できます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.9 バージョンコントロールファイルを無視する

C-x v G

カレントのバージョンコントロールシステム配下のファイルを無視します(vc-ignore)。

ソースツリーの多くは、エディターのバックアップや、オブジェクトファイル、バイトコードファイル、ビルドされるプログラムなどの、バージョン管理する必要のないファイルを含みます。これらは単に追加しないだけでも構いませんが、常に不明なファイルとして現れるでしょう。ツリーのトップの、無視するファイルのリストにこれらのファイルを追加して、それらを無視するようにバージョンコントロールシステムに指示することもできます。これを行うにはC-x v G (vc-ignore)が助けとなるでしょう。プレフィクス引数を指定すると、無視するファイルリストからファイルを削除できます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.10 VC Directoryモード

VC Directoryバッファーは、ディレクトリーツリーにあるファイルのバージョンコントロール状態を見て、それらのファイルにバージョンコントロール操作を実行するために特化したバッファーです。特に複数ファイルのVCファイルセットにたいして、C-x v vのようなコマンドを適用するのに使用されます(VC Directoryコマンドを参照してください)。

VC Directoryバッファーを使用するには、C-x v d (vc-dir)とタイプします。これはミニバッファーを使用してディレクトリーの名前を読み取り、そのディレクトリーにたいするVC Directoryバッファーに切り替えます。デフォルトでは、バッファーの名前は*vc-dir*です。その内容については、 VC Directoryバッファーで説明します。

vc-dirコマンドは、指定したディレクトリーで使用されているバージョンコントロールシステムを自動的に検知します。そのディレクトリーにたいして複数のバージョンコントロールシステムが使用されている場合、C-u C-x v dのようにプレフィクス引数を指定して、このコマンドを呼び出す必要があるでしょう。これはVC Directoryバッファーが使用すべきバージョンコントロールシステムの入力を求めます。

VC Directoryバッファーに加えて、EmacsにはCVSに特化したPCL-CVSと呼ばれる似た機能があります。About PCL-CVS in PCL-CVS—The Emacs Front-End to CVSを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.10.1 VC Directoryバッファー

VC Directoryバッファーは、バージョンコントロールされたファイルと、それらのバージョンコントロール状態を含みます。これは、(C-x v dを呼び出すことにより指定される)カレントディレクトリーの、注目すべき状態のファイルとサブディレクトリーをだけリストします。最新のファイル(リポジトリーのものと同じ)は省略されます。サブディレクトリーのファイルがすべて最新の場合、そのサブディレクトリーもリストされません。例外として、VCコマンドの直接の結果として最新になったファイルはリストされます。

以下はVC Directoryバッファーのリストの例です:

                     ./
    edited           configure.ac
*   added            README
    unregistered     temp.txt
                     src/
*   edited           src/main.c

2つの作業ファイル、カレントディレクトリーのconfigure.acと、サブディレクトリーsrc/main.cは、変更されていますがコミットされていません。READMEという名前のファイルは追加されましたが、まだコミットされていません。そしてtemp.txtはバージョンコントロールの配下にありません(バージョンコントロールへのファイルの登録を参照してください)。

エントリーREADMEおよびsrc/main.cの隣の‘*’という文字は、ユーザーがそれらのファイルをカレントVCファイルセットとしてマークしたことを示します (VC Directoryコマンドを参照してください)。

上記は、Bazaar、Git、Mercurialのような分散型のバージョンコントロールシステムでの典型的な例です。他のシステムでは、他の状態も見られます。たとえばCVSは、リポジトリーが変更されていて、それがまだ作業ファイルに適用されていないときは、‘needs-update’という状態を表示します。RCSとSCCSは、ロックされているファイルの状態に、ロックしているユーザーの名前を表示します。

CVSでは通常、vc-dirコマンドは更新のチェックのために、おそらくはリモートマシン上にあるであろうリポジトリーにアクセスします。変数vc-cvs-stay-localnil (CVSに特有のオプションを参照)に変更すると、EmacsはVC Directoryバッファーが生成されるときのリモートのリポジトリーへのアクセスを避けます(コミットを行うときなど、必要なときはアクセスします)。これは、オフラインで作業していたり、ネットワークが遅いときは望ましいでしょう。

VC Directoryバッファーは、変数vc-directory-exclusion-listにリストされているサブディレクトリーを省略します。この変数のデフォルト値には、バージョンコントロールシステムにより内部的に使用されるディレクトリーが含まれています。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.10.2 VC Directoryコマンド

EmacsはVC Directoryバッファーの操作と、カレントVCファイルセットに属させるために、ファイルをマークするためのコマンドをいくつか提供します。

n
SPC

次のエントリーにポイントを移動します(vc-dir-next-line)。

p

前のエントリーにポイントを移動します(vc-dir-previous-line)。

TAB

次のディレクトリーエントリーに移動します(vc-dir-next-directory)。

S-TAB

前のディレクトリーエントリーに移動します(vc-dir-previous-directory)。

RET
f

カレント行にリストされたファイル、またはディレクトリーをvisitします(vc-dir-find-file)。

o

カレント行にリストされたファイル、またはディレクトリーを別のウィンドウでvisitします(vc-dir-find-file-other-window)。

m

カレント行のファイルまたはディレクトリーをマークして、それをカレントVCファイルセットに加えます(vc-dir-mark)。リージョンがアクティブのときは、リージョンの中のすべてのファイルをマークします。

すでにマークされたディレクトリーの中のファイル、またはそのサブディレクトリーは、このコマンドではマークされません。同様に、ツリーの中のいくつかのファイルがマークされているディレクトリーは、このコマンドではマークされません。

M

ポイントがファイルエントリーにあるときは、同じ状態のすべてのファイルをマークします。ポイントがディレクトリーエントリーにあるときは、そのディレクトリーツリーのすべてのファイルをマークします(vc-dir-mark-all-files)。プレフィクス引数を指定した場合、リストされたファイルとディレクトリーのすべてをマークします。

G

ポイントの下にあるファイルをVCが無視(ignore)すべきファイルのリストに追加します(vc-dir-ignore)。たとえばVCがGitなら、そのファイル.gitignoreファイルに追加します。プレフィクスが与えられたら、マークしたすべてのファイルにこれを行います。

q

VC Directoryバッファーを終了して、隠します(quit-window)。

u

カレント行のファイル、またはディレクトリーのマークを外します(vc-dir-unmark)。リージョンがアクティブのときは、リージョンの中のすべてのファイルのマークを外します。

U

ポイントがファイルエントリーにあるときは。同じ状態のすべてのファイルのマークを外し、ポイントがディレクトリーエントリーにあるときは、そのディレクトリーツリーのすべてのファイルのマークを外します(vc-dir-unmark-all-files)。プレフィクス引数を指定した場合、すべてのファイルおよびディレクトリーのマークを外します。

x

状態が‘up-to-date’、または‘ignored’のファイルを隠します(vc-dir-hide-up-to-date)。プレフィクス引数を指定した場合、状態がポイント位置のアイテムと同じアイテムを隠します。

VC Directoryバッファーでは、m (vc-dir-mark)またはM (vc-dir-mark-all-files)でマークしたすべてのファイルが、カレントVCファイルセットになります。ディレクトリーエントリーをmでマークした場合、そのディレクトリーツリーにリストされたすべてのファイルが、カレントVCファイルセットになります。カレントVCファイルセットに属するファイルとディレクトリーは、VC Directoryではバージョンコントロール状態の隣に、文字‘*’が示されます。この方法によりC-x v v (バージョンコントロール下での基本的な編集を参照してください)、C-x v = (古いリビジョンの調査と比較を参照してください)、C-x v u (バージョンコントロール操作のアンドゥを参照してください)のようなVCコマンドが作用する、複数ファイルのVCファイルセットをセットアップできます。

VC Directoryバッファーは、C-x vというプレフィクスをもつコマンドを、1キーで入力するショートカット(=+liDLGIOv)を定義します。

たとえば、VC Directoryバッファーで開いて編集された一連のファイルは、‘edited’という状態でリストされ、それらのファイルをマークして、vまたはC-x v v (vc-next-action)でコミットできます。バージョンコントロールシステムが変更セットベースの場合、Emacsはそれらのファイルを1つのリビジョンとしてコミットします。

VC Directoryバッファーでは、以下のコマンドによりカレントVCファイルセットの検索と置換を処理することもできます:

S

ファイルセットを検索します(vc-dir-search)。

Q

ファイルセットにたいして、正規表現による問い合わせ置換を行います(vc-dir-query-replace-regexp)。

M-s a C-s

ファイルセットにたいして、インクリメンタル検索を行います(vc-dir-isearch)。

M-s a C-M-s

ファイルセットにたいして、インクリメンタルな正規表現検索を行います(vc-dir-isearch-regexp)。

複数ファイルに作用する点を除けば、これらのコマンドは1つのバッファーに作用する同等のコマンドに似ています(検索と置換を参照してください)。

VC Directoryバッファーは、追加でブランチ関連のコマンドを定義し、それらはプレフィックスBで始まります:

B c

新たなブランチを作成します(vc-create-tag)。

B l

ブランチ名の入力を求め、そのブランチの変更履歴を表示します(vc-print-branch-log)。

B s

ブランチを切り替えます(vc-retrieve-tag)。ブランチ間の切り替えを参照してください。

d

マークされたファイル、マークされたファイルがなければカレントファイルを削除します(vc-dir-clean-delete)。バージョンコントロールシステムではマークされたファイルが削除される訳ではないので、これは主としてバージョンコントロールシステムに未登録のファイルにたいして有用です。

上記のコマンドは、メニューバーおよびmouse-2によるコンテキストメニューを通じても利用可能です。さらにVCのバックエンドのいくつかは、そのバックエンド特有のコマンドを提供するメニューを使用します。たとえばGitとBazaarでは、stashes(隠してあるもの)shelves(棚)(コミットされていない変更を一時的に除外して、後でそれを戻すコマンド)を操作できます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.11 バージョンコントロールのブランチ

バージョンコントロールの活用法の1つとして、ブランチ(branches)と呼ばれる複数の独立した開発ラインのサポートがあります。中でもとりわけブランチは、プログラムの安定版(stable)と開発版(development)を個別に保守したり、関係のない機能を他の版から隔離して開発するのに使用されます。

現在のところVCのブランチ操作にたいするサポートは、かなり制限されています。分散型のバージョンコントロールシステムにたいしては、あるブランチを他のブランチのコンテンツで更新するコマンドと、2つの異なるブランチの変更をマージするコマンドを提供します。集中型のバージョンコントロールシステムにたいしては、異なるブランチからチェックアウトして、新規または異なるブランチにコミットするコマンドを提供します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.11.1 ブランチ間の切り替え

さまざまなバージョンコントロールシステムにおいて、ブランチが実装される方法は異なり、VCはこれらの違いを完全に隠蔽することはできません。

BazaarとMercurialを含む分散型バージョンコントロールシステムのいくつかは、ノーマルモードの操作では、各ブランチは自身の作業ディレクトリーツリーをもつので、ブランチの切り替えは単にディレクトリーを切り替えるだけです。Gitでは、ブランチは通常、同じディレクトリーの共通ロケーション(co-located)を使用し、ブランチの切り替えは、作業ツリーの内容をそのブランチに一致するように変更するgit checkoutを使用して行われます。Bazaarも共通ロケーションをサポートしており、この場合はコマンドbzr switchによりカレントディレクトリーでブランチを切り替えます。Subversionでは他のブランチへの切り替えにはコマンドsvn switchを使用します。Mercurialでは他のブランチへの切り替えにはコマンドhg updateを使用します。

カレントディレクトリーの他のブランチに切り替えるVCコマンドは、C-x v r branch-name RET (vc-retrieve-tag)です。

集中型のバージョンコントロールシステムでは、最新の作業ファイルでC-u C-x v vとタイプして(C-x v vの高度な制御を参照してください)、他のブランチのリビジョンIDを入力することにより、ブランチ間を切り替えることもできます。たとえばCVSでは、trunk(幹の意。開発の主要ラインを示します)のリビジョンは通常、1.1、1.2、1.3、…という形式をもち、最初のブランチがリビジョン1.2から作成された場合、リビジョン1.2は1.2.1.1、1.2.1.2、…というリビジョンIDをもち、さらに2番目のブランチが同じくリビジョン1.2から作成された場合、それは1.2.2.1、1.2.2.2、…という形式になります。ブランチのリビジョンIDから最後の部分を除いた(たとえば1.2.1)、ブランチID(branch ID)を指定して、そのブランチの最新のリビジョンに切り替えることもできます。

ロックベースのシステムでは、他のブランチに切り替えることにより、作業ツリーのロックが解除(書き込み禁止)になります。

1度ブランチを切り替えると、そのブランチを他に切り替えるまで、VCコマンドはそのブランチに適用されます。たとえば任意のVCファイルセットをコミットすると、そのブランチにコミットされるようになります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.11.2 ブランチへ/からの変更のpull/push

C-x v P

分散型のバージョンコントロールシステムでは、カレントブランチからの変更により、その変更で他のロケーションを更新(変更を“push”する、とも言います)します。この概念は集中型のバージョンコントロールシステムには存在しません。

C-x v +

分散型のバージョンコントロールシステムでは、他のロケーションから変更を“pull”することにより、カレントのブランチを更新します。

集中型のバージョンコントロールシステムでは、カレントVCファイルセットを更新します。

分散型のバージョンコントロールシステムでは、コマンドC-x v P (vc-push)は、カレントブランチからの変更により他のロケーションを更新します。プレフィクス引数を与えた場合、このコマンドは実行する正確なバージョンコントロールコマンドの入力をもとめます。これにより変更をどこにpushするか指定できます。デフォルトは、Bazaarではbzr push、Gitではgit push、Mercurialではhg pushです。デフォルトのコマンドは常に、ブランチ設定からバージョンコントロールシステムにより決定されるデフォルトのロケーションにpushします。

pullする前にC-x v O (vc-log-outgoing)を使用して、送信される変更のlogバッファーを閲覧できます。VC Change Logを参照してください。

現在のところ、このコマンドはBazaar、Git、Mercurialだけでサポートされます。“push”という概念は集中型のバージョンコントロールシステムには存在しません。なぜなら、この操作は変更セットのコミットの一部なので、集中型のVCSでこのコマンドを呼び出すと、エラーをシグナルします。Bazaarのbound branchでこのコマンドを試みたときもエラーをシグナルします。変更セットのコミットは、自動的に変更を(ローカルのブランチがバインドされている)リモートのリポジトリーにpushするからです。

分散型のバージョンコントロールシステムでは、コマンドC-x v + (vc-pull)は、カレントブランチと作業ツリーを更新します。これは通常、リモートのブランチのコピーを更新するのに使用されます。プレフィクス引数を与えた場合、このコマンドは使用する正確なバージョンコントロールコマンドの入力をもとめます。これにより変更をどこからpullするか指定できます。プレフィクス引数を指定しない場合は、バージョンコントロールシステムにより決定される、デフォルトのロケーションからpullします。

分散型のバージョンコントロールシステムの中で、現在C-x v +がサポートするのはBazaar、Git、Mercurialだけです。Bazaarでは、これは通常のブランチにたいしては、(マスターブランチをミラーリングされたブランチにpullするために) bzr pullを呼び出し、バインドされたブランチにたいしては、(中心となるリポジトリーからpullするために) bzr updateを呼び出します。Gitでは、これはリモートのリポジトリーから変更を取得して、それをカレントブランチにマージするためにgit pullを呼び出します。Mercurialでは、デフォルトのリモートリポジトリーから変更を取得して、作業ディレクトリーを更新するためにhg pull -uを呼び出します。

pullする前にC-x v I (vc-log-incoming)を使用して、適用される変更のlogバッファーを閲覧できます。VC Change Logを参照してください。

CVSのような集中型のバージョンコントロールシステムでは、C-x v +はリポジトリーからカレントVCファイルセットを更新します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.11.3 ブランチのマージ

C-x v m

分散型のバージョンコントロールシステムでは、カレントのブランチに他のブランチの変更をマージします。

集中型のバージョンコントロールシステムでは、カレントVCファイルセットに他のブランチの変更をマージします。

ブランチで開発している場合、すでに他のブランチで行われた変更をマージ(merge)する必要があるときがあります。これは2つのブランチでの変更が重なる場合もあるため、些細な操作とはいえません。

分散型のバージョンコントロールシステムでは、マージはコマンドC-x v m (vc-merge)により行われます。Bazaarでは、これはbzr mergeに渡す正確な引数の入力を求めます。そのとき、可能であれば目的にかなったデフォルトを提示します。Gitでは、これはマージするブランチ名の入力を求めます。このとき、(カレントリポジトリーが知っているブランチ名にもとづく)補完を行います。Mercurialではhg mergeに渡す引数の入力を求めます。マージコマンドの実行による出力は、他のバッファーに表示されます。

CVSのような集中型のバージョンコントロールシステムでは、C-x v mはブランチID、または2つのリビジョンIDの入力を求めます。コマンドはそのブランチからの変更点、または指定した2つのリビジョン間の差分を探して、それらの変更をカレントVCファイルセットにマージします。RETだけをタイプした場合、Emacsは単にそのファイルをチェックアウトしたブランチに行われた変更をマージします。

マージを処理した直後は、作業ツリーだけが変更されており、C-x v Dおよび関連するコマンドで、マージにより生成された変更をレビューできます(古いリビジョンの調査と比較を参照してください)。2つのブランチが重なった変更をもつ場合、マージは衝突(conflict)を生成します。その場合、マージコマンドの出力には警告が現れ。影響のある作業ファイルの、衝突する2つの変更の周囲に、衝突マーカー(conflict markers)が挿入されます。衝突を解決するには、衝突するファイルを編集しなければなりません。編集が終わったら、マージが効果を発揮するように、通常の方法により変更したファイルをコミットしなければなりません(バージョンコントロール下での基本的な編集を参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.11.4 新しいブランチの作成

CVSのような集中型のバージョンコントロールシステムでは、Emacsはコミット操作の一部として、新しいブランチの作成をサポートします。変更されたVCファイルセットをコミットするとき、C-u C-x v v (vc-next-actionのようにプレフィクス引数を指定します。C-x v vの高度な制御を参照してください).すると、Emacsは新しいリビジョンのリビジョンIDの入力を求めます。ここでカレントリビジョンから開始するブランチの。適切なブランチIDを指定する必要があります。たとえば、カレントリビジョンIDが2.5の場合、ブランチIDは2.5.1、2.5.2、...となるべきでしょう。ブランチIDは、その時点での既存のブランチの番号に依存します。

(すでにブランチのヘッドではない)古いリビジョンに新しいブランチを作成するには、最初にそのリビジョンを選択します(ブランチ間の切り替えを参照してください)。その後の手順は、ロックベースのバージョンコントロールシステムを使っているか、マージベースのものを使っているかで異なります。

ロックベースのバージョンコントロールシステムでは、C-x v vで古いリビジョンのブランチを選択します。古いリビジョンを選択する場合、本当に新しいブランチを作成したいのか確認を求めます。これにnoと応えた場合、かわりに最新のリビジョンをロックする機会が与えられます。マージベースのバージョンコントロールシステムでは、このステップはスキップします。

変更を行なってから、再びC-x v vとタイプして、新しいリビジョンをコミットします。これは選択されたリビジョンから始まる、新しいブランチを作成します。

ブランチが作成された後は、それ以降のコミットは、そのブランチに新しいリビジョンを作成します。ブランチを離れるには、C-u C-x v vで明示的に異なるリビジョンを選択しなければなりません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.12 VCのその他のコマンドと機能

このセクションでは、それほど頻繁には使用されないVCの機能を説明します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.12.1 変更ログとVC

ChangeLogファイル (変更ログを参照してください)をもつプロググラムにたいしてRCSやCVSを使用する場合、 バージョンコントロールの以前のコミットのログエントリーから、ChangeLogのエントリーを生成することができます。

これはRCSとCVSだけで機能することに注意してください。この手段は特に、現代的な変更セットベースのバージョンコントロールシステムには不適切です。なぜなら、ChangeLogファイルへの変更自体が、通常は変更セットの一部としてコミットされるからです。この場合、最初にChangeLogエントリーを記述して、コミットするときにそれを‘*vc-log*’バッファーに引用します (Log Entryバッファーの機能を参照してください)。

C-x v a

カレントディレクトリーのChangeLogファイルをvisitして、そのディレクトリーの登録されたファイルにたいして、最新のChangeLogエントリー以降にコミットされたバージョンにたいする、新しいエントリーを作成します。(vc-update-change-log)。

C-u C-x v a

上記と同様ですが、カレントバッファーのファイルにたいするエントリーだけを探します。

たとえば、ChangeLogの最初の行の日付が1999-04-10で、それ以降のチェックインは1999-05-22のNathaniel Bowditchによるrcs2logだけで、それのログエントリーが‘Ignore log messages that start with '#'.’だったとします。その場合、C-x v aChangeLogエントリーとして、以下を挿入します:

1999-05-22  Nathaniel Bowditch  <nat@apn.org>

        * rcs2log: Ignore log messages that start with '#'.

バージョンコントロールのログエントリーが、(行頭にカッコで括られて記述される)関数名を指定する場合、それはChangeLogのエントリーに反映されます。たとえばvc.elにたいするログエントリーが‘(vc-do-command): Check call-process status.’の場合、ChangeLogのエントリーは以下のようになります:

1999-05-06  Nathaniel Bowditch  <nat@apn.org>

        * vc.el (vc-do-command): Check call-process status.

C-x v aが複数のChangeLogエントリーを1度に追加するとき、それらがすべて同じ作者に、ほぼ同じ日時にチェックインされている場合、関連するログエントリーとしてそれらをグループ化します。複数のファイルにたいするログエントリーがすべての同じテキストの場合、それらを1つのエントリーにまとめます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.12.2 バージョンコントロールされたファイルの削除とリネーム

M-x vc-delete-file

ファイル名の入力を求め、そのファイルを作業ツリーから削除して、コミット時に削除するようスケジュールします。

M-x vc-rename-file

2つのファイル名oldおよびnewの入力を求め、作業ツリーのファイルをリネームし、コミット時にリネームを行うようスケジュールします。カレントバッファーのファイルがVC配下にある場合は、そのファイルがoldのデフォルトファイルになります。

バージョンコントロールされたファイルを削除したい場合、コマンドM-x vc-delete-fileを使用します。これはファイル名の入力を求め、バージョンコントロールシステムを通じてそれを削除します。ファイルは作業ツリーから削除され、VC Directoryバッファー (VC Directoryモードを参照してください) では、状態に‘removed’が表示されます。それをコミットするとき、リポジトリー内で削除が実行されます。

バージョンコントロールされたファイルをリネームするには、M-x vc-rename-fileとタイプします。これは2つの引数の入力を求めます。それはリネームしたいファイルの名前を、それの新しい名前です。そしてバージョンコントロールシステムを通じてリネームを処理します。作業ツリーではリネームは即座に行われます。リネームされたファイルをコミットするとき、リポジトリーに反映されます。

現代的なバージョンコントロールシステムは、リネームにたいするビルトインのサポートがあり、リネームされたファイルは元のファイルのすべての変更履歴を保持します。CVSおよび古いバージョンコントロールシステムでは、vc-rename-fileコマンドは、実際には古いファイルを新しい名前にコピーして、それを登録してから古いファイルを削除することにより機能します。この場合、変更履歴は保存されません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.12.3 リビジョンタグ

ほとんどのバージョンコントロールシステムは、バージョンコントロールされたツリーの特定のバージョンにたいして、リビジョンタグ(revision tag)を適用できます。現代的な変更セットベースのバージョンコントロールシステムでは、リビジョンタグは単に特定のリビジョンにたいするシンボリック名です。CVSのようなファイルベースの古いシステムで、各タグははバージョンコントロールされた一連のファイル全体に追加され、それらを1つの単位として処理できるようにします。リビジョンタグは一般的にユーザーに配布されるリリースを識別するのに使用されます。

タグにたいする2つの基本的なコマンドがあります。1つは与えられた名前でタグを作成し、もう1つは名前がつけられたタグを取得するコマンドです。

C-x v s name RET

カレントディレクトリーまたはその配下のディレクトリーの、すべての登録されたファイルの作業リビジョンにたいする、nameという名前のタグを定義します(vc-create-tag)。

C-x v r name RET

カレントディレクトリーまたはその配下のディレクトリーの、すべての登録されたファイルにたいして、リビジョンのタグがnameのものを取得します。nameがブランチ名で、バージョンコントロールシステムがタグからブランチを区別する場合、このコマンドはブランチを切り替えます。(vc-retrieve-tag).

カレントディレクトリーまたは配下のディレクトリーのファイルがロックされている場合、このコマンドは何もせずにエラーを報告します。これは作業中の上書きを避けるためです。

C-x v =またはC-x v ~の引数として、タグまたはブランチ名を与えることができます (古いリビジョンの調査と比較を参照してください)。 したがって、カレントファイルとタグ付けされたバージョンを比較したり、タグ付けされたバージョン同士を比較することができます。

SCCSでは、VC自身がタグを実装しているので、VCを通じてのみタグを見ることができます。それより新しいほとんどのシステム(CVS、Subversion、bzr、git、hgを含む)は、ネイティブのタグ機能をもっており、利用可能な場合、VCはそれを使用します。これらのタグは、VCを通さなくても見ることができます。

ファイルベースのバージョンコントロールシステムでは、登録されたファイルをリネームするとき、それのマスターもリネームする必要があります。コマンドvc-rename-fileは、これを自動的に行います (バージョンコントロールされたファイルの削除とリネームを参照してください)。 SCCSを使用している場合、、そのファイルが新しい名前になったことを告げるために、タグの記録も更新しなければなりません(vc-rename-fileもこれを行います)。記録された名前では、すでに存在しないマスターファイルを参照する古いタグは無効になります。VCはそれを取得しません。RCSおよびSCCSでのタグの手修正は、このマニュアルの範囲を超えるでしょう。vc-rename-fileを使用することにより、ファイルを取得できる有効なタグを作成できますが、それですべての問題が解決されるわけではありません。たとえば、プログラムのいくつかのファイルは、他のファイルを名前で参照するかもしれません。少なくともmakefileはリネームしたファイルを参照するでしょう。古いタグを取得した場合、リネームされたファイルは、makefileが期待しない新しい名前で取得されます。そのため、プログラムはうまく機能しないでしょう。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.12.4 バージョンコントロールヘッダーの挿入

Subversion、CVS、RCS、SCCSでは、バージョンヘッダー(version headers)と呼ばれる文字列を、ファイル内に置くことができます。そのファイルがコミットされたとき、バージョンコントロールシステムは自動的にリビジョン番号、コミットしたユーザーの名前、その他関連する情報をバージョンヘッダーに挿入します。

VCは通常、バージョンヘッダーの情報を使用しません。例外として、RCSを使用している場合、EmacsはRCSのマスターファイルより信頼できる場合が多いという理由で、ファイルのバージョンを決定するためにバージョンヘッダーを使用します。この方法でバージョンヘッダーを使用するのを禁ずるには、変数vc-consult-headersnilに変更します。その場合、VCは常に(それが信用できると推測されれば)ファイルパーミッションを使用し、それ以外はマスターファイルをチェックします。

カレントバッファーに適切なヘッダー文字列を挿入するには、コマンドM-x vc-insert-headersを使用します。このコマンドはSubversion、CVS、RCS、SCCSだけで機能します。変数vc-backend-headerには、バージョンヘッダーに挿入されるキーワードのリストが含まれます。たとえばCVSはvc-cvs-headerを使用し、これのデフォルト値は'("\$Id\$")です(余分なバックスラッシュは、もしEmacs Lispファイルがバージョンコントロールにより保守されるときに、文字列定数がヘッダーと解釈されるのを防ぐためのものです)。vc-insert-headersコマンドは。ポイント位置の新しい行にリストのタブで囲まれた各キーワードを挿入し、必要ならばコメント区切りで囲みます。

変数vc-static-header-alistは、バッファー名にもとづき追加する文字列を指定します。これの値は、(regexp . format)という形式の要素からなるリストです。regexpがバッファー名にマッチした場合、バージョンヘッダーの一部としてformatも挿入されます。formatの中の‘%s’は、そのファイルのバージョンコントロールのタイプに置換されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.13 VCのカスタマイズ

変数vc-handled-backendsは、どのバージョンコントロールシステムが処理するかを決定します。デフォルト値は(RCS CVS SVN SCCS SRC Bzr Git Hg Mtn Arch)で、これには、現在サポートされている、すべてのバージョンコントロールが含まれています。VCにこれらのシステムの1つ以上を無視させたい場合、リストからそのシステムの名前を除外します。VC全体を無効にするには、変数にnilをセットしてください。

リストのシステム順序には意味があります。これらのシステムの1つ以上に登録されているファイルをvisitした場合、デフォルトではVCはvc-handled-backendsで最初にくるシステムを使用します。ファイルを最初に登録するときも、この順序が意味をもちます (バージョンコントロールへのファイルの登録を参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.13.1 一般的なオプション

Emacsは通常、バージョンコントロールにより保守されるソースファイルのバックアップファイルを保存しません。バージョンコントロールを使用したファイルにもバックアップファイルを作成したいときは、変数vc-make-backup-filesに非nil値をセットしてください。

そのファイルがバージョンコントロールされていると知らずに、シンボリックリンクを通じてバージョンコントロールされたファイルを編集すると、予期せぬ結果を招くことがあります。変数vc-follow-symlinksは、バージョンコントロールされたファイルを指すシンボリックリンクをvisitしようと試みたときの、Emacsの振る舞いを制御します。値がask(デフォルト)の場合、Emacsは確認を求めます。値がnilの場合、Emacsは警告メッセージを表示するだけです。値がtの場合、Emacsは自動的にリンクをたどって、かわりに実際のファイルをvisitします。

vc-suppress-confirmが非nilの場合、C-x v vおよびC-x v iは確認を求めずにカレントバッファーを保存し、C-x v uも確認を求めず処理を行います。

VCモードは多くの処理を、バージョンコントロールシステムにたいする適切なシェルコマンドを実行することにより行います。vc-command-messagesが非nilの場合、VCはそれが実行するシェルコマンドを示すメッセージと、コマンドが終了したときの追加のメッセージを表示します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.13.2 RCSとSCCSにたいするオプション

デフォルトでは、複数ユーザーの活動を調停するためにRCSはロックを使用しますが、最初にファイルをロックしなくても変更をチェックインできる、厳密でないロック(non-strict locking)と呼ばれるモードもあります。特定のファイルにたいして厳密でないロックに切り替えるには、‘rcs -U’を使用します。詳細については、rcsのman-pageを参照してください。

RCSファイルのバージョンコントロール状態を推論するとき、VCは最初にそのファイルのRCSバージョンヘッダー文字列を調べます(バージョンコントロールヘッダーの挿入を参照してください)。ヘッダー文字列がない場合、VCは通常、作業ファイルのパーミッションを調べます。これは速い処理です。ファイルのパーミッションが信頼できない状況もあるかもしれません。そのような場合はマスターファイルが調べられます。これはより高価な処理です。マスターファイルから判るのは、もしそのファイルにたいして何らかのロックがある場合、作業ファイルが実際にロックされたバージョンを含むかどうか、だけです。

vc-consult-headersnilにセットすることにより、VCがファイル状態を決定するのにバージョンヘッダーを使用しないように指定できます。その場合、VCは常に、(それが信用できると思われる場合は)ファイルのパーミッションを使うか、マスターファイルをチェックします。

VCがSCCSの配下にあるファイルのバージョンコントロール状態を決定する方法は、RCSとほぼ同じです。しかしSCCSのバージョンヘッダーは考慮しません。したがって、vc-consult-headersはSCCSの使用に影響しません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.1.13.3 CVSに特有のオプション

変数vc-cvs-global-switchesで、すべてのCVS操作に渡す追加のコマンドラインオプションを指定できます。これらのスイッチはcvsコマンドの直後、呼び出す操作名の前に挿入されます。

リモートマシン上でCVSリポジトリを使用する際は、ネットワーク通信を最小に維持するようVCに試行させることができます。これは、変数vc-cvs-stay-localにより制御されます。vc-cvs-stay-localonly-file(デフォルト)の場合、VCはローカルのCVSサブディレクトリーのエントリーと、前のCVSコマンドから戻された情報だけを使って、各ファイルのバージョンコントロール状態を決定します。結果として、あなたがファイルを変更しているとき、他の誰かが他の変更をチェックインした場合、それのコミットを試みるまで衝突は通知されません。

vc-cvs-stay-localnilに変更した場合、ローカルのリポジトリーと同じように、vc-next-action (C-x v v)が何を行うか決定するに、VCはリモートのリポジトリーに問い合わせを行います。

vc-cvs-stay-localに、リポジトリーのあるホスト名にマッチする正規表現を指定することもできます。この場合、ホスト名がパターンにマッチしたときは、VCはローカルに留まります。

リモートのリポジトリーを使用する場合、Emacsは通常、編集された各ファイルのオリジナルバージョンである、自動バージョンバックアップ(automatic version backups)を作成します。これらのローカルのバックアップは、変更を最初にファイルに保存したときに作成され、リポジトリーに変更をコミットした後で削除されます(これらは通常のEmacsのバックアップファイルとは異なることに注意してください。 バックアップファイルを参照してください)。 C-x v =C-x v uのようなコマンドは、ネットワークへのアクセスを避けるため、可能な場合は自動バージョンバックアップを使用します。

vc-cvs-stay-localnilにセットすることにより、自動バージョンバックアップの作成を無効にできます。

自動バージョンバックアップは、file.~version.~という形式の名前をもちます。これはC-x v ~が古いバージョンを保存するときの名前と似ています (古いリビジョンの調査と比較を参照してください)。 例外は、バージョンの後ろにある追加のドット(‘.’)です。関連するVCコマンドは、これら両方の種類のバージョンバックアップを使用できます。主な違いは、C-x v ~により手動で作成されたバージョンバックアップは、コミットしたとき自動的に削除されないことです。

デフォルトでCVSはロックを使用しませんが、CVSREADまたはwatchの機能を使用して、ロックのような振る舞いを有効にする方法があります。詳細については、CVSのドキュメントを参照してください。そのような場合、ロックベースのバージョンコントロールシステムで行うように、EmacsでC-x v vを使用して、ロックを切り替えることができます (ロックでの基本的なバージョンコントロールを参照してください)


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.2 プロジェクトで作業する

プロジェクト(project)とは1つ以上のプログラムを生成するために使用するファイルのコレクションです。プロジェクトに属するファイルは、通常はディレクトリー階層に格納されます。この階層のトップレベルのディレクトリーはプロジェクトルート(project root)として知られています。

与えられたディレクトリーが何らかのプロジェクトのルートかどうかは、プロジェクトバックエンド(project back-end)として知られているプロジェクト固有のインフラストラクチャーにより判断されます。Emacsが現在のところサポートするバックエンドはVCSリポジトリーをプロジェクトとみなしたVC (バージョンコントロールを参照)、およびEDE (Emacs開発環境を参照)の2つです。将来的には追加のプロジェクトタイプをサポートするように拡張される予定です。

ファイルがプロジェクトに属するかどうかもプロジェクトバックエンドにより判断されます。たとえばVCバクエンドは“無視された(ignored)”ファイル(バージョンコントロールファイルを無視するを参照)をプロジェクトの一部とはみなしません。

Emacsはプロジェクトファイルを手軽に扱うためのコマンドを提供します。このセクションではそれらのコマンドについて説明します。

ここで説明するすべてのコマンドはカレントプロジェクト(current project)という概念を共有します。カレントプロジェクトはコマンド呼び出し時にカレントだったバッファーのdefault-directory (ファイルの名前を参照)により判断されます。そのディレクトリーが認識可能なプロジェクトに属していないようなら、これらのコマンドはプロジェクトディレクトリーの入力を求めます。

コマンドproject-find-fileはカレントプロジェクトに属するファイルをvisit(ファイルのvisit(訪問)を参照)する手軽な手段です。C-x C-fとは異なり、このコマンドはvisitするファイルの完全な名前のタイプを要求せず、ファイルのベース名(先頭のディレクトリー部分を省略)だけでタイプできます。それに加えてコマンドが補完候補とみなすのはカレントプロジェクトに属するファイルだけであり、それ以外は含まれません。ポイント位置にファイル名があれば、このコマンドはvisitするデフォルトとしてそのファイルを提案します。

コマンドproject-find-regexprgrep (Emacs下でのGrepによる検索を参照)と似ていますが、カレントプロジェクトに属するファイルだけを検索します。このコマンドは検索する正規表現の入力を求めて、検索結果をXrefモードのコマンドを使用してマッチの選択が可能なXrefモードのバッファーでポップアップします。このコマンドをプレフィクス引数とともに呼び出した際には、検索を開始するベースディレクトリーの入力を追加で求めます。これはたとえばプロジェクトルートの特定のサブディレクトリー配下のファイルに検索を制限することを可能にします。

M-x project-searchproject-find-regexpのインタラクティブな変種です。これはカレントプロジェクトのファイルを検索するために正規表現の入力を求めますが、すべてのマッチを探して表示するかわりに、マッチしたファイルを編集できるようにマッチを見つけたら停止してマッチしたファイルのマッチしたlocusをvisitします。マッチの残りを探すにはM-x fileloop-continue RETとタイプしてください。

M-x project-query-replace-regexpproject-searchと似ていますが、query-replace (問い合わせつき置換を参照)が行うように見つかったそれぞれのマッチにたいして置き換えるかどうかを尋ねて、それに応答した後は次のマッチへと継続します。その応答によりEmacsがquery-replaceループをexitしてしまったら、M-x fileloop-continue RETで後から継続することができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.3 変更ログ

多くのソフトウェアプロジェクトでは、変更ログ(change log)を管理します。これは通常、いつどのようにして、そのプログラムが変更されたかの日付順の記録を含む、ChangeLogという名前のファイルです。これらのファイルは、バージョンコントロールシステムに保存された変更ログエントリーから自動的に生成されたり、それらの変更ログエントリーを自動的に生成するのに使われる場合もあります。複数の変更ログファイルがあり、それぞれが1つのディレクトリー、またはディレクトリーツリーに対応する場合もあります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.3.1 変更ログコマンド

EmacsコマンドC-x 4 aは、編集しているファイルにたいする新しいエントリーを、変更ログファイルに追加します(add-change-log-entry-other-window)。そのファイルが実際にはバックアップファイルの場合、このコマンドはそのファイルの元のファイルのエントリーを適切に作成します — これはカレントバージョンから削除された関数のログエントリーを作成するとき便利です。

C-x 4 aは変更ログファイルをvisitして、一番最近のエントリーが今日の日付であなたの名前でない場合は、新しいエントリーを作成します。これはカレントファイルにたいする、新しいアイテムも作成します。このコマンドは多くの言語にたいして、変更された関数またはその他のオブジェクトを推測することすらできます。

変更ログファイルを探すために、Emacsは編集中ファイルのディレクトリーからディレクトリー構造を上方に検索します。デフォルトでは、バージョンコントロールディレクトリーのルートと思われるディレクトリーが見つかると、検索はストップします。これを変更するには、change-log-directory-filesをカスタマイズしてください。

変数add-log-keep-changes-togetherが非nilの場合、C-x 4 aは新しいアイテムを開始せず、そのファイルにたいする既存のアイテムに追加します。

同じ性質の複数の変更を1つにまとめることができます。最初のC-x 4 aの後にテキストを何も入力せずに、続けてC-x 4 aをタイプしていくと、他のシンボルが変更ログエントリーに追加されます。

add-log-always-start-new-recordが非nilの場合、最後のエントリーが同じ日付のあなたによる変更だったときでも、C-x 4 aは常に新しいエントリーを作成します。

変数change-log-version-info-enabledの値が非nilの場合、C-x 4 aは、ファイルのバージョン番号を変更ログのエントリーに追加します。これは変数change-log-version-number-regexp-listの正規表現を使用して、ファイルの最初の10%から、バージョン番号を探します。

変更ログファイルは、Change Logモードでvisitされます。このメジャーモードでは、グループ化されたアイテムの集まりは1つのパラグラフと扱われ。各エントリーはページとみなされます。これはエントリーの編集を容易にします。C-jおよびauto-fillは、新しい行を前の行と同様にインデントします。これはエントリーの内容を入力するとき便利です。

Change Logモードがオンのときには、ポイント近傍の変更ログエントリーのソース位置に移動するために、(デフォルトでC-c C-cにバインドされている) change-log-goto-sourceを使用できます。その後のnext-errorコマンド(デフォルトでM-g M-nC-x `にバインドされている)は、変更ログ間のエントリーを移動します。次の変更ログエントリーだけではなく、変更されたファイルの実際のサイトにジャンプするでしょう。ヘンコウログエントリーも戻るためにprevious-errorも使用できます。

コマンドM-x change-log-mergeを使用して、他のログファイルを、エントリーの日付順を保持したまま、Change Logモードのバッファーにマージできます。

バージョンコントロールシステムはプログラム変更の追跡と変更ログを維持する別の手段です。VCSを使用する多くのプロジェクトは、今日ではバージョンごとの変更ログファイルを個別に保持しないので、そのようなファイルをリポジトリー内に保有することを避けたいと思うかもしれません。add-log-dont-create-changelog-fileの値が非nilなら、C-x 4 a (add-change-log-entry-other-window)のようなコマンドは、すでにそのようなファイルが存在しなければファイルではなく適切に命名された一時バッファーに変更を記録します。

変更ログファイルかある場合や変更ログに一時バッファーを使用する場合のいずれにおいても、それらが存在すれば関連する変更ログエントリーを挿入するために、VC LogバッファでC-c C-a (log-edit-insert-changelog)をタイプすることができます。Log Entryバッファーの機能を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.3.2 ChangeLogの書式

変更ログエントリーは、現在の日付、名前(変数add-log-full-nameより取得)、電子メールアドレス(変数add-log-mailing-addressより取得)を含むヘッダー行から開始されます。ヘッダー行を除いた変更ログの各行は、スペースまたはタブで開始されます。エントリーの大部分は、空白文字とアスタリスクで行が開始される、アイテム(items)から構成されます。以下は2つのアイテムおよび1つのアイテムをもつ、日付が1993年5月の、2つのエントリーの例です。

1993-05-25  Richard Stallman  <rms@gnu.org>

        * man.el: Rename symbols 'man-*' to 'Man-*'.
        (manual-entry): Make prompt string clearer.

        * simple.el (blink-matching-paren-distance):
        Change default to 12,000.

1993-05-24  Richard Stallman  <rms@gnu.org>

        * vc.el (minor-mode-map-alist): Don't use it if it's void.
        (vc-cancel-version): Doc fix.

1つのエントリーで複数の変更を記述できます。変更はそれぞれアイテム、またはアイテムの中の行を占めます。アイテムの間には通常、空行があります。アイテムが関連している場合(異なる場所での同じ変更など)、それらの間に空行を置かずにそれらをグループ化します。

変更ログファイルの最後には、著作権表示と使用許諾を配すべきです。以下は例です:

Copyright 1997, 1998 Free Software Foundation, Inc.
Copying and distribution of this file, with or without modification, are
permitted provided the copyright notice and this notice are preserved.

これはもちろん、正しい年と版権所有者に置き換えて使う必要があります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.4 識別子のリファレンスを探す

識別子(identifier)とは、プログラムの構文的なサブユニットの名前であり、関数(function)、サブルーチン(subroutine)、メソッド(method)、クラス(class)、データ型(data type)、マクロ(macro)などが該当します。プログラミング言語では、識別子はその言語の構文をもつシンボルです。識別子はタグ(tags)という名前でも知られています。

プログラムの開発と保守では、プロジェクト全体を横断して識別子をリネームする等から、識別子がどこで定義されているか(defined)、どこから参照されているか(referenced)を素早く見つける能力が求められます。これらの能力は、プログラミング言語をサポートするよう定義されたモード以外のメジャーモードでも、リファレンスを見つけるために有用です。たとえばテキストやTeXドキュメントのチャプター(chapters)、セクション(sections)、アペンディクス(appendices)も同様にサブユニットとなり得るし、それらの名前も識別子として使用できます。このチャプターでは、プログラムのソース、同様に他の種類のテキストの中の、任意の種類のサブユニットの名前を正確に参照するために、“識別子(identifiers)”という用語を使用します。

これらの能力のために、Emacsは‘xref’と呼ばれる統一されたインターフェースを提供します。

xrefが処理を行なうには、そのメジャーモード特有の情報とメソッドを使用する必要があります。どのファイルから識別子を検索するか、識別子にたいするリファレンス(references: 参照)を探す方法、識別子を補完する方法、これら(およびそれ以上のこと)は、モード固有の知識です。xrefは処理のモード固有な部分を、そのモードにより提供されるバックエンド(backend)に委託します。これには、いくつかのコマンドにたいするデフォルトや、そのモード自体が提供しないモードにたいするデフォルトも含まれます。

バックエンドはこれらの能力をさまざまな方法で実装できます。いくつかの例を示します:

  1. その言語のシンボルを探すために、ビルトインの方法を提供するモードがいくつかあります。たとえばEmacs Lispのシンボルは、パッケージのロード履歴からの検索から識別され、Emacs Lispインタープリターにより保守され、ビルトインのドキュメント文字列(built-in documentation strings)で調べます。シンボル定義を探すために、Emacs Lispモードは、モードのバックエンドの中の、これらの機能を使用します(この種のバックエンドの不利な点の1つは、インタープリターにロードされたサブユニットしか認識しないことです)。
  2. 外部プログラムは関連するファイルをスキャンしてリファレンスを抽出して、これらにたいするデータベースをビルドすることができます。リファレンスをリストしたり調べるために、バックエンドは必要なときにこのデータベースにアクセスできます。Emacsのディストリビューションにはetagsが含まれています。これはプログラム中の識別子の定義にタグ付けするコマンドで、リファレンスをタグテーブル(tags tables)に抽出することにより、多くのプログラミング言語、およびHTMLのようなその他のモードをサポートします。タグテーブルの作成を参照してください。etagsによりサポートされた言語にたいするメジャーモードは、そのバックエンドの基準でタグテーブルを使用できます(この種のバックエンドの不利な点の1つは、タグテーブルは有効性を維持するために最新である必要があり、度々リビルドしなければならないことです)。

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.4.1 識別子を探す

このサブセクションでは識別子にたいするリファレンスを探したり、識別子にたいしてさまざまな問い合わせを行なうコマンドを説明します。リファレンスは識別子を定義(define)するかもしれません(プログラム内のサブユニットを実装、ドキュメントのセクションのテキストなど)。あるいは識別子を使用(use)するかもしれません(関数やメソッドの呼び出し、変数への値の割り当て、クロスリファレンスで引用されるチャプターなど)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.4.1.1 識別子の照合

xrefが可能にすることの中で一番重要なのは、指定した識別子の定義を探すことです。

M-.

識別子の最初の定義を探します(xref-find-definitions)。

C-M-. pattern RET

patternにマッチする名前の識別子を探します(xref-find-apropos)。

C-x 4 . RET

識別子の最初の定義を探して、他のウィンドウに表示します(xref-find-definitions-other-window)。

C-x 5 . RET

識別子の定義を探して、それを新しいフレームに表示します(xref-find-definitions-other-frame)。

M-x xref-find-definitions-at-mouse

マウスでクリックした識別子の最初の定義を探します。

M-,

前にM-.または同種のコマンドを呼び出した場所に戻ります(xref-pop-marker-stack)。

M-x xref-etags-mode

etagsバックエンドを使用するように、xrefを切り替えます。

M-. (xref-find-definitions)は、ポイント位置の識別子の定義を表示します。プレフィックス引数を与えた、またはポイント位置に識別子がない場合は、識別子の入力を求めます(常に識別子を尋ねるようにしたい場合は、xref-prompt-for-identifiertにカスタマイズする)。

指定された識別子の定義が1つだけの場合は、その定義にジャンプします。識別子に該当する定義が複数ある場合(たとえばオブジェクト指向言語や、同じな前の関数や変数がある場合)、*xref*バッファーに定義の候補と、その定義が見つかったファイルを表示します。候補の選択は、定義の候補でRETをタイプするかmouse-2をクリックして行い、これにより対応する定義を表示するバッファーがポップアップします。

M-.の引数に識別子を入力するとき、通常のミニバッファーの補完コマンドを使用できます(補完を参照してください)。補完では、既知の識別子の名前が補完候補になります。

バッファーを切り替えるほとんどのコマンドと同様に、xref-find-definitionsは新しいバッファーを他のウィンドウ、または新しいバッファーのために新しいフレームを作成する変種をもっています。前者はC-x 4 . (xref-find-definitions-other-window)、後者はC-x 5 . (xref-find-definitions-other-frame)です。

コマンドxref-find-definitions-at-mousexref-find-definitionsと同じように機能しますが、マウスイベントがあった箇所周辺の識別子を探します。このコマンドはたとえばC-M-mouse-1のようなマウスイベントにバインドされることを意図しています。

コマンドC-M-. (xref-find-apropos)は、指定した正規表現にマッチする1つ以上の識別子を探します。これはM-.と同じですが、固定長文字列として評価されたシンボル名にたいするマッチではなく、regexpにマッチする識別子です。

上記コマンドにより複数の定義が見つかった場合は、候補となる定義を*xref*バッファーに表示します。このバッファーでは、*xref*バッファーで利用可能なコマンドで説明されている、複数の特化されたコマンドが使用できます。

定義の検索を開始した場所に戻るには、M-, (xref-pop-marker-stack)を使用します。これは最後にM-.を呼び出したポイントにジャンプします。したがって、M-.により何らかの定義を見つけて確認したら、M-,で戻ることができます。M-,は変数xref-marker-ring-lengthにより決定される深さ(デフォルトは16)で、ステップを再トレースできます。

いくつかのメジャーモードは、特定の識別子の検索に失敗するかもしれないxrefサポート機能をインストールするかもしれません。たとえば、Emacs Lispモード(Emacs Lisp式の評価を参照)では、デフォルトではM-.はカレントEmacsセッションにロードされた、あるいは自動ロード(Autoload in The Emacs Lisp Reference Manualを参照)されるLispパッケージの関数と変数だけを検索します。M-.が何らかの識別子の検索に失敗する場合は、xrefetagsバックエンド(識別子のリファレンスを探すを参照)の使用を強制することができます。これを行うには、M-x xref-etags-modeを呼び出してXref Etagsマイナーモードをオンに切り替えて、再度M-.を呼び出します(これが機能するためには、ソースファイルのディレクトリーツリー内でtagテーブルを作成するために、必ずetagsを実行すること。タグテーブルの作成を参照されたい)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.4.1.2 *xref*バッファーで利用可能なコマンド

以下のコマンドは*xref*バッファーのXREFモードにより提供されるコマンドです:

RET
mouse-2

カレント行のリファレンスを表示します。

n
.

次のリファレンスに移動して、それを別のウィンドウに表示します(xref-next-line)。

p
,

前のリファレンスに移動して、それを別のウィンドウに表示します(xref-prev-line)。

C-o

カレント行のリファレンスを別のウィンドウに表示します(xref-show-location-at-point)。

TAB

カレント行のリファレンスを表示して、*xref*バッファーを隠し(bury)ます(xref-quit-and-goto-xref)。

r pattern RET replacement RET

patternにマッチするリファレンスにたいしてインタラクティブな問い合わせつき置換(query-replace)を行ない、マッチをreplacementに置換します。識別子の検索と置換を参照してください。

g

*xref*バッファーのコンテンツをリフレッシュします(xref-revert-buffer)。

q

*xref*バッファーを表示しているウィンドウをquitします(xref-quit)。

これらに加えて、リファレンスを表示せずにバッファー内を移動するために、C-nC-pのような、通常のナビゲーションコマンドも利用可能です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.4.1.3 識別子の検索と置換

このセクションのコマンドは、識別子自身、またはファイル内の識別子にたいするリファレンスにたいして、様々な検索と置換を行ないます。

M-?

ポイント位置の識別子にたいする、すべてのリファレンスを探します。

M-x xref-query-replace-in-results RET regexp RET replacement RET

*xref*バッファーに表示されているすべての識別子の名前にたいして、regexpreplacementにインタラクティブに置換します。

M-x tags-search RET regexp RET

選択されたタグテーブルのファイルから、regexpを検索します。

M-x tags-query-replace RET regexp RET replacement RET

選択されたタグテーブルの各ファイルにたいして、query-replace-regexpを実行します。

M-x fileloop-continue

ポイントのカレント位置から、上記コマンドの最後の2つを再開します。

M-?は、ポイント位置の識別子にたいして、必要に応じて補完つきで識別子の入力を促しつつ、すべてのリファレンスを探します。カレントのバックエンド(識別子のリファレンスを探すを参照)に依存して、ポイント位置に有効な識別子を見つけた場合でも、このコマンドは識別子の入力を促すかもしれません。プレフィクス引数が指定された場合、このコマンドは常に識別子の入力を求めます(常に入力を求めるようにしたい場合はxref-prompt-for-identifiert、ポイント位置に利用できる識別子がない場合のみ入力を求めるようにするにはnilにカスタマイズすればよい)。それからこのコマンドは、その識別子にたいするすべてのリファレンスについて、ファイル名と識別子が参照されている行を、*xref*バッファーに表示します。このバッファーではXREFモードのコマンドが利用可能です。*xref*バッファーで利用可能なコマンドを参照してください。

M-x xref-query-replace-in-resultsは、通常のM-x query-replace-regexpと同様に、識別子の名前にマッチするregexpと、置換する文字列を読み取ります。それから、その識別子が参照されている、すべてのファイルのすべての場所で、マッチする識別子の名前にたいして指定された置換を行ないます。これはリファクタリングの一部として、識別子のリネームを行なうときに有用です。このコマンドはM-?により生成された*xref*バッファーで呼び出されるべきです。

M-x tags-searchは、ミニバッファーを使用してregexpを読み取り、選択されたタグテーブルのすべてのファイルから、1ファイルずつマッチを検索します。これは検索しているファイル名を表示するので、進行状況を確認することができます。マッチが見つかった場合、tags-searchはリターンします。このコマンドには利用可能なタグテーブル(tagsテーブルを参照してください)が必要です。

tags-searchで1つのマッチが見つかったら、おそらく残りのすべてについても検索したいと思うでしょう。M-x fileloop-continueは、多くのマッチを探すためにtags-searchを再開します。これはカレントバッファーの残りの部分を検索して、その後タグテーブルの残りのファイルを検索します。

M-x tags-query-replaceは、タグテーブルのすべてのファイルにたいして、1つのquery-replace-regexpを実行します。これは、通常のM-x query-replace-regexpと同様、検索するregexpと、それを置換する文字列を読み取ります。この検索はむしろM-x tags-searchに似ていますが、入力へのマッチを繰り返し処理します。問い合わせ付き置換については、問い合わせつき置換を参照してください。

変数tags-case-fold-searchの値をカスタマイズすることにより、タグ検索コマンドの大文字小文字の扱いを制御できます。デフォルトには、case-fold-searchの値と同じ設定が使用されます(検索中のLaxマッチングを参照してください)。

1回のM-x tags-query-replaceの呼び出しで、タグテーブルのすべてのファイルを検索することが可能です。しかし、一時的に検索を抜けられると便利なときもあります。これは、問い合わせ付き置換として特別な意味をもたない入力イベントで行うことができます。つづけて問い合わせ付き置換を再開するには、M-x fileloop-continueとタイプします。このコマンドは、最後のタグ検索または置換コマンドを再開します。たとえばカレントファイルの残りをスキップするには、M-> M-x fileloop-continueとタイプします。

上記で説明したコマンドは、xref-find-definitions系の検索より広範な検索を行うことに注意してください。xref-find-definitionsコマンドは、部分文字列または正規表現にマッチする識別子の定義だけを検索します。コマンドxref-find-referencestags-searchtags-query-replaceは、通常の検索および置換コマンドがカレントバッファーにたいして行うように、識別子またはregexpにたいするマッチを検索します。

xref-find-referencestags-searchのかわりに、サブプロセスとしてgrepを実行して、Emacsにマッチした行を1つずつ表示させることができます。Emacs下でのGrepによる検索を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.4.1.4 識別子の照会

C-M-i
M-TAB

タグテーブルがロードされているときは、できるだけ選択されたタグテーブルを使って、ポイント周囲のテキストの置換を行います(completion-at-point)。

M-x xref-find-apropos RET regexp RET

regexpにマッチする、既知のすべての識別子のリストを表示します。

M-x list-tags RET file RET

プログラムファイルfileで定義されている識別子のリストを表示します。

M-x tags-next-file

選択されたタグテーブルに記録されているファイルをvisitします。

プログラミング言語のモードのほとんどでは、C-M-iまたはM-TAB (completion-at-point)とタイプして、ポイント位置のシンボルを補完できます。このコマンドのために、モードに特化した補完候補を提供するモードもあります。補完候補を提供しないモードでは、選択されたタグテーブルがある場合、補完候補を生成するためにこのコマンドを使用することができます。シンボル名の補完を参照してください。

M-x list-tagsは、選択されたタグテーブルでカバーされたファイルの名前を1つ読み取り、そのファイルで定義されたタグのリストを表示します。タグテーブルに記録されたファイル名にディレクトリーが含まれない場合は、ファイル名にディレクトリーを含めないでください。このコマンドはバックエンドがetagsのときだけ機能し、そのプロジェクトのために利用可能なタグテーブルが必要です。tagsテーブルを参照してください。インタラクティブに使用すると、カレントバッファーのファイル名がデフォルトタグとして使用されます。

M-x tags-next-fileは、選択されたタグテーブルでカバーされるファイルをvisitします。最初に呼び出したとき、テーブルでカバーされた最初のファイルをvisitします。続けて呼び出すことにより、次のカバーされたファイルをvisitしていきます。プレフィクス引数を指定した場合、最初のファイルに戻ります。このコマンドには、選択されたタグテーブルが必要です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.4.2 tagsテーブル

タグテーブル(tags table)は、特定のプログラムまたはドキュメントのソースコードをスキャンすることにより抽出されたタグ15を記録します。生成されたファイルから抽出されたタグは、タグ抽出の際にスキャンされる生成されたファイルではなく、その元になるファイルを参照します。生成されたファイルの例として、Cwebソース、Yaccパーサー、Lexスキャナー定義から生成されたCファイルや、プリプロセスされたCファイルの.i.fppソースファイルをプリプロセスすることにより生成されるFortranファイルがあります。

タグテーブルを生成するには、ドキュメントまたはソースコードファイルにたいして、シェルコマンドetagsを実行します。‘etags’プログラムは、タグテーブルファイル(tags table file)、または略記してタグファイル(tags file)にタグを書き込みます。タグファイルは慣習的にTAGSという名前です。タグテーブルの作成を参照してください(同じフォーマットでこのようなテーブルを生成できる他のコマンドを使用して、タグテーブルを作成することも可能です)。

Emacsは、xrefにたいするサポートされたバックエンドとして、etagsパッケージを通じてタグテーブルを使用します。タグテーブルはEmacsディストリビューションの一部であるetagsコマンドにより生成されるので、ここではタグテーブルについて、より詳細に説明します。

Ebrowse機能はetagsに似ていますが、C++に特化したものです。Ebrowse in Ebrowse User’s Manualを参照してください。 Semanticパッケージは、etags機能とは別の、タグを生成して使用する他の方法を提供します。Semanticとはを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.4.2.1 ソースファイルタグの構文

以下は、もっともポピュラーな言語でタグ構文が定義される方法です:

他の言語もいくつかサポートされます:

他の書式や言語を扱うために、regexpにたいするマッチにもとづいてタグを生成することもできます(etagsのregexpを参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.4.2.2 タグテーブルの作成

etagsプログラムは、タグテーブルファイルを作成するために使用されます。このコマンドは、 ソースファイルタグの構文で説明している複数の構文を理解します。 以下はetagsを実行する方法です:

etags inputfiles

etagsプログラムは、指定されたファイルを読み込んで、カレント作業ディレクトリーのTAGSという名前のファイルに、タグテーブルを書き込みます。‘--output=file’オプションを使用して、タグテーブルに異なる名前のファイル名を指定することもできます。ファイル名に-を指定すると、タグテーブルを標準出力に出力します。‘--append’オプションを使用して、既存のファイルに新たに作成したtagテーブルを追加することもできます。

指定されたファイルが見つからない場合、etagsはそれらの圧縮されたバージョンを探して、それらを解凍して読み込みます。MS-DOSでは、コマンドラインに‘mycode.c’が与えられ、‘mycode.c’が存在しないとき、etagsmycode.cgzのような名前のファイルを探します。

ファイルの内容が変更されてタグテーブルが古くなったときは、etagsを再び実行することにより、タグテーブルを更新できます。タグテーブルにタグが記録されていなかったり、間違ったファイルにたいして記録している場合、タグテーブルを更新するまで、Emacsはそれの定義を見つけることができません。しかしタグに記録されている位置が、(編集により)少し間違っているようなときは、少しの遅れは生じますがEmacsは正しい位置を見つけることができます。

したがって、編集するたびにタグテーブルを更新する必要はありません。リストしたい新しいタグを定義したときや、タグ定義をあるファイルから他のファイルへ移動したとき、または大幅な変更を施したときは、タグテーブルを更新するべきです。

etagsに‘--include=file’オプションを渡すことにより、タグテーブルに他のタグテーブルをインクルード(include)できます。これによりインクルードされたタグファイルでカバーされる、すべてのファイルをカバーできます。

etagsを実行するとき、ソースファイルを相対ファイル名で指定した場合、タグファイルには、そのタグファイルが最初に書き込まれたディレクトリーにたいする相対ファイル名が含まれます。この方法を使えば、ディレクトリーツリー全体を移動しても、タグファイルは正しくソースファイルを参照します。しかしタグファイルが-または/devのときは、ファイル名はカレント作業ディレクトリーにたいする相対ファイル名になります。これはタグを標準出力に書き込むときに便利です。

相対ファイル名を使う場合、違うディレクトリーにあるタグファイルを指すシンボリックリンクを指定するべきではありません。なぜならこれは一般的にファイル名を無効にするからです。

etagsの引数に絶対ファイル名を指定した場合、タグファイルには絶対ファイル名が含まれます。この方法では、ソースファイルが同じ場所にある限り、タグファイルを移動してもタグファイルは同じ名前を参照します。絶対ファイル名は‘/’で開始されるか、MS-DOSおよびMS-Windowsでは‘device:/’で開始されます。

非常に大きな数のファイルからタグテーブルを作成したい場合、それをコマンドラインに指定すると問題が発生するかもしれません。なぜならコマンドライン引数の長さに制限のあるシステムもあるからです。この制限は、以下のようにファイル名の場所にダッシュを指定して、etagsにファイル名を標準入力から読み込むように指示して回避することができます。

find . -name "*.[chCH]" -print | etags -

etagsはファイル名とファイル内容にもとづいて、入力ファイルで使用されている言語を認識します。これは最初に、特定の言語にたいして一般的に使用されるファイル名と拡張子にたいするマッチを試みます。いくつかの言語には、既知の名前のインタープリター(Perlのperl、Prologのplなど)があるので、etagsは次に入力ファイルの最初の行でインタープリター指定‘#!interp’を調べて、既知のインタープリターとのマッチを行います。これが失敗、または言語の自動検知をオーバーライドしたい場合は、‘--language=name’オプションで、明示的に言語を指定できます。このオプションはファイル名に混ぜることができます。各指定はその後に続くファイル名に適用されます。‘--language=auto’の指定は、ファイル名とファイル内容から言語を推測するようetagsに指示します。‘--language=none’を指定すると、言語に特有の処理を完全にオフに切り替えます。この場合、etagsはregexpのマッチングだけでタグを認識します(etagsのregexpを参照してください)。これは、etagsがまだサポートしていない言語を使用するファイルが入力の際に、etagsがデフォルト言語としてFortranおよびCにフォールバックするのを抑止します。

オプション‘--parse-stdin=file’は、etagsをプログラムから呼び出すときに便利です。これは、(1回だけ)コマンドラインからファイル名を読み取るとき使用できます。etagsは標準入力から読み取り、生成されたタグがファイルfileに属するとマークします。

etags --help’オプションはetagsが認識する言語と、言語を推測するためのファイル名ルールのリストを出力します。これは利用可能なetagsオプションと、簡単な説明のリストも出力します。このオプションの後に、1つ以上の‘--language=lang’を指定すると、langにたいするタグの生成方法の詳細を出力します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.4.2.3 etagsのregexp

--regex’オプションは、正規表現のマッチにもとづいてetagsがタグを認識できるようにします。このオプションはファイル名と混ぜることができます。オプションは、それぞれのオプション後に続くソースファイルに適用されます。複数の‘--regex’を指定した場合、それらすべては並列に使用されます。構文は以下のとおりです:

--regex=[{language}]/tagregexp/[nameregexp/]modifiers

オプション値の肝心な部分はtagregexpで、これはタグにマッチするregexpです。これは常に位置が固定されており、行の開始だけにマッチします。インデントされたタグの場合、最初の空白文字にマッチさせるために、‘[ \t]*’で始まるregexpを使用します。

これらの正規表現では、‘\’は次の文字をクォートします。またCのエスケープ文字シーケンスのすべて、すなわち‘\a’(bell)、‘\b’(back space)、‘\e’(escape)、‘\f’(formfeed)、‘\n’(newline)、‘\r’(carriage return)、‘\t’(tab)、and ‘\v’(vertical tab)がサポートされます。これらに加えて、‘\\d’はDEL文字を意味します。

理想的には、tagregexpはタグとして認識させるのに必要な文字以上にマッチさせるべきではありません。構文がそれを求める場合、タグより多くの文字にマッチするtagregexpを記述して、そのマッチからタグだけをピックアップするために、nameregexpを追加するべきです。これはEmacsがより正しくタグを見つけて、タグ名の補完をより確実にすることを可能にします。nameregexp内においてはこれは、tagregexp内でのカッコによるグループ化にたいする“後方参照(back references)” (正規表現でのバックスラッシュを参照)として有用であり、頻繁に使用されます。たとえば、‘\\1’はそのようなカッコによる最初のグループを参照します。以下でいくつかの例を見つけることができるでしょう。

modifiers(修飾子)は、etagsがマッチングを行う方法を変更するための0文字以上の文字シーケンスです。修飾子がないregexpは、大文字小文字を区別する方法で、入力ファイルの各行にたいして順番に適用されます。修飾子とその意味は以下のとおりです:

i

このregexpのマッチングで、大文字小文字を無視します。

m

この正規表現はファイル全体にマッチするので、複数行のマッチが可能です。

s

この正規表現はファイル全体にマッチし、tagregexp内の‘.’は改行にマッチします。

-R’オプションは、それの前に‘--regex’で定義されたregexpをすべて取り消します。これは後に続くファイル名にも適用されます。以下は例です:

etags --regex=/reg1/i voo.doo --regex=/reg2/m \
    bar.ber -R --lang=lisp los.er

この例では、etagsvoo.doobar.berにたいして。ファイル内容に一致する解析用の言語を選択します。etagsは、voo.doo内の追加のタグを認識するためにreg1も使用し、bar.ber内の追加のタグを認識するためにreg1reg2の両方を使用します。voo.doobar.berの各行にたいして大文字小文字を区別せずにreg1がチェックされ、bar.berのファイル全体にたいして大文字小文字を区別してreg2がチェックされ、これは複数行へのマッチが許されます。los.erのタグの認識にはユーザー指定のregexpマッチは行わず、Lispのタグルールだけが使用されます。

オプションのプレフィクス{language}を使用して、与えられた言語だけに‘--regex’オプションを制限できます(‘etags --help’でetagsが認識する言語のリストが表示されます)。これはファイルに、etagsにたいして事前に定義された多くの正規表現が含まれている場合に便利です。以下の例は、EmacsのC言語のソースファイルのDEFVARマクロにたいするタグです:

--regex='{c}/[ \t]*DEFVAR_[A-Z_ \t(]+"\([^"]+\)"/\1/'

正規表現が複雑な場合、そのリストをファイルに保存することができます。以下のオプション構文は、etagsに正規表現が保存された2つのファイルを指示します。2つ目のファイルに含まれる正規表現は、大文字小文字を区別せずにマッチします。

--regex=@case-sensitive-file --ignore-case-regex=@ignore-case-file

etagsにたいするregexファイルは、行ごとに1つの正規表現を含みます。空行およびスペースかタブで始まる行は無視されます。表の開始が‘@’の場合、etagsはその行の残りを他の正規表現ファイルとみなすので、そのようなファイルを他のファイルをインクルードできます。他のすべての行は正規表現です。最初の非空白文字が‘--’の場合、その行はコメントです。

たとえば、以下の内容の‘emacs.tags’という名前のファイルを作成できます:

        -- This is for GNU Emacs C source files
{c}/[ \t]*DEFVAR_[A-Z_ \t(]+"\([^"]+\)"/\1/

これは以下のように使用します:

etags --regex=@emacs.tags *.[ch] */*.[ch]

さらに例を示しましょう。regexpはシェルから解釈され内容にクォートされています。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.4.3 タグテーブルの選択

Emacsは常に、選択されたタグテーブルを最大で1つもちます。タグテーブルにたいして機能するすべてのコマンドは、選択されたタグテーブルを使用します。タグテーブルを選択するには引数としてタグテーブルファイル名を読み取るM-x visit-tags-tableをタイプします。この引数のデフォルトはデフォルトディレクトリーからディレクトリーを上方へ再帰的に検索してTAGSという名前のファイルを含む最初のディレクトリーです。

Emacsは、タグテーブルを使用するまでは実際にタグテーブルの内容を読み込みません。visit-tags-tableが行うのは、ファイル名を変数tags-file-nameに格納することだけです。この変数の初期値はnilです。この変数の値は、タグテーブルにたいして機能するすべてのコマンドに、使用するタグテーブルファイル名を知らせます。

タグテーブルがすでにロードされているときにvisit-tags-tableを使用すると、2つの選択肢が与えられます。つまり、タグテーブルのカレントリストに新しいタグを追加するか、あるいは新しいリストを開始することもできます。タグコマンドは、カレントリストのすべてのタグテーブルを使用します。新しいリストを開始した場合、他のもののかわりに、新しいタグテーブルが使用されます。カレントリストに新しいタグテーブルを追加した場合、それは他のものと同じように使用されます。

以下のようにして、変数tags-table-listに文字列のリストをセットすることにより、タグテーブルのリストを正確に指定できます:

(setq tags-table-list
      '("~/.emacs.d" "/usr/local/lib/emacs/src"))

This tells the tags commands to look at the TAGS files in your ~/.emacs.d directory and in the /usr/local/lib/emacs/src directory. The order depends on which file you are in and which tags table mentions that file.

tags-file-nametags-table-listの両方をセットしてはいけません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.5 Emacs開発環境

EDE(Emacs Development Environment: Emacs開発環境)は、Emacsでの大きなプログラムの作成、ビルド、デバッグなどのタスクを単純化するパッケージです。これはEmacsにおいて、IDE(Integrated Development Environment: 統合開発環境)の機能をいくつか提供します。

このセクションは、EDEの簡単な説明を提供します。 完全な詳細については、EDE in Emacs Development Environmentを参照してください。

EDEは、グローバルなマイナーモードとして実装されています(マイナーモードを参照してください)。有効にするにはM-x global-ede-modeとタイプするか、‘Tools’メニューの‘Project Support (EDE)’アイテムをクリックします。以下の行をinitファイルに追加することにより、Emacs開始時にEDEを有効にすることもできます。

(global-ede-mode t)

EDEを有効にすることにより、メニューバーに‘Development’という名前のメニューが追加されます。以下で説明するコマンドを含めて、多くのEDEコマンドをこのメニューから呼び出すことができます。

EDEは、ファイルをプロジェクト(projects)に編成します。プロジェクトはディレクトリーに対応します。プロジェクトルート(project root)は、プロジェクトの最上層のディレクトリーです。新しいプロジェクトを定義するには、プロジェクトルートのファイルをvisitして、M-x ede-newとタイプします。このコマンドはプロジェクトタイプ(project type)の入力を求めます。これはEDEがプロジェクトを背後で管理する方式です(EDE in Emacs Development Environmentを参照してください)。もっとも一般的なプロジェクトタイプは、Makefilesを使用する‘Make’、およびGNU Automake(Automake in Automakeを参照してください)を使用する‘Automake’です。どちらの場合も、EDEはプロジェクトに関する情報を格納する、Project.edeという名前のファイルを作成します。

プロジェクトには、1つ以上のターゲット(targets)を含めることができます。ターゲットとは、プロジェクトの1つ以上のファイルからビルドされるオブジェクトファイル、実行ファイル、またはその他の種類のファイルです。

プロジェクトに新しいターゲット(target)を追加するには、C-c . t (M-x ede-new-target)とタイプします。このコマンドは、カレントファイルをそのターゲットに追加するか尋ねます。これはターゲットがそのファイルからビルドされることを意味します。ターゲットを定義した後は、C-c . a (ede-add-file)とタイプすることにより、ターゲットにファイルを追加することができます。

ターゲットをビルドするには、C-c . c (ede-compile-target)とタイプします。プロジェクトのすべてのターゲットをビルドするには、C-c . C (ede-compile-project)とタイプします。EDEはターゲットがどのようにビルドされるべきか推測するために、ファイルタイプを使用します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.6 Emergeでのファイルのマージ

行き違いの指示を受けて、同じプログラムを異なる2つの方向に修正してしまうのは、プログラマーにとって珍しいことではありません。この混乱を正常な状態に戻すには、2つのバージョンをマージする必要があります。Emergeはこれを簡単にします。ファイルを比較する他の方法については、 ファイルの比較、 およびEdiff in The Ediff Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.6.1 Emergeの概要

Emergeを開始するには、以下の4つのコマンドの1つを実行します:

M-x emerge-files

指定した2つのファイルをマージします。

M-x emerge-files-with-ancestor

共通の祖先(ancestor)を参照して、指定した2つのファイルをマージします。

M-x emerge-buffers

2つのバッファーをマージします。

M-x emerge-buffers-with-ancestor

第3のバッファーにある共通の祖先を参照して、2つのバッファーをマージします。

Emergeコマンドは2つのファイルまたはバッファーを比較して、3つのバッファーにそれ表示します。最初の2つは入力テキスト(AバッファーBバッファー)で、残りの1つ(マージバッファー)はどこにマージが行われたかを表示します。マージバッファーは相違だけではなく、マージされたテキストをすべて表示します。2つの入力テキストが異なる場所では、どちらをマージバッファーに含めるか選択できます。

既存のバッファーから入力を得るEmergeコマンドは、そのバッファーがナローされている場合は、バッファーのアクセス可能な部分だけを使用します。 ナローイングを参照してください。

2つのマージされるテキストの元となる、共通の祖先となるバージョンが利用可能な場合は、Emergeはどちらが正しい候補かを推測するために、それを使用することができます。一方のカレントバージョンが祖先に一致する場合、Emergeはもう一方のカレントバージョンが、マージされたバージョンに残すべき、意図した変更であると仮定します。共通の祖先となるテキストを指定したい場合は、‘with-ancestor’がつくコマンドを使用します。これらのコマンドは3つのファイルまたはバッファーの名前 — バージョンA、バージョンB、そして共通の祖先の名前を読み取ります。

比較が終了してバッファーの準備ができた後、対話的なマージが開始されます。マージバッファーで特別なマージコマンドをタイプすることにより、マージを制御できます(マージコマンドを参照してください)。入力テキストの相違それぞれにたいして、どちらを残すか、または両方編集するか選択することができます。

マージバッファーはこれらの選択を行うために、Emergeモードという特別なメジャーモードを使用します。しかし、そのバッファーでは通常のEmacsコマンドで編集することもできます。

常にEmergeの注目は、選択された相違と呼ばれる、特定の相違に焦点を置きます。この相違は、3つのバッファーで以下のようにマークされます:

vvvvvvvvvvvvvvvvvvvv
text that differs
^^^^^^^^^^^^^^^^^^^^

Emergeはすべての相違に順番に番号をふり、モードラインには選択された相違の番号が常に表示されます。

マージバッファーは通常、バージョンAのテキストで開始されます。しかしバージョンAの相違が共通の祖先と一致する場合、その相違の初期値にはバージョンBが優先されます。

マージバッファーを抜けるとき、Emergeはマージされたテキストを残します。このとき、C-x C-wで、それをファイルに保存できます。emerge-filesまたはemerge-files-with-ancestorに数引数を与えた場合、ミニバッファーを使用して、出力するファイル名を読み取ります(これは、このコマンドが読み取るファイル名の最後のファイル名です)。その後Emergeから抜けると、マージされたテキストを出力ファイルに保存します。

通常、Emergeコマンドは終了するとき出力バッファーを、そのバッファーのファイルに保存します。EmergeをC-]で中断した場合、Emergeコマンドは出力バッファーを保存しませんが、もし保存したいときは自分で保存することができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.6.2 Emergeのサブモード

マージコマンドに与える2つのモード — FastモードとEditモードを選択することができます。Fastモードでは、基本的なマージコマンドは1文字ですが、通常のEmacsコマンドは利用不可です。これはマージコマンドだけを使いたいときは便利です。Editモードでは、すべてのマージコマンドはプレフィクスキーC-c C-cで始まり、通常のEmacsコマンドも利用可能です。これによりマージバッファーで編集することができますが、Emerge操作は遅くなります。

eでEditモード、C-c C-c fでFastモードに切り替わります。モードラインにはEditモードおよびFastモードは、‘E’と‘F’で示されます。

Emergeは、特定のマージコマンドがどのように機能するかに影響を与える、2つの追加的なサブモード — Auto AdvanceモードとSkip Prefersモードがあります。

Auto Advanceモードが効力をもつ場合、aまたはbコマンドで次の相違に移動します。これは候補を単に選んでいくだけで、素早くマージすることができます。Auto Advanceモードの場合、モードラインに‘A’が示されます。

Skip Prefersモードが効力をもつ場合、nおよびpコマンドは、状態が“prefer-A”と“prefer-B”の相違をスキップします(相違の状態を参照してください)。したがって、どちらのバージョンも正しいと推定できない相違だけを見ていくことができます。Skip Prefersモードの場合、モードラインに‘S’が示されます。このモードは祖先がある場合にだけ適しています。

Auto Advanceをセットまたはクリアーするには、コマンドs a (emerge-auto-advance)を使用します。Skip Prefersモードをセットまたはクリアーするには、s s (emerge-skip-prefers)を使用します。これらのコマンドは、正の引数の場合はモードをオンにして、負または0の引数のときはモードをオフにし、引数がないときはモードのオン・オフを切り替えます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.6.3 相違の状態

マージバッファーでは、相違は文字‘v’および‘^’のラインでマークされます。各相違は、以下の7つの状態のうち1つをもちます:

A

相違にはバージョンAが表示されています。aコマンドは常にこの状態を生成します。モードラインには‘A’が示されます。

B

相違にはバージョンBが表示されています。bコマンドは常にこの状態を生成します。モードラインには‘B’が示されます。

default-A
default-B

選択を行っていないので、相違にはデフォルトとしてAまたはBの状態が表示されています。すべての相違はdefault-A状態で開始されます(したがってマージバッファーはAバッファーのコピーとなります)が、例外として、もう一方のほうがpreferred(好ましい)な場合を除きます(以下参照)。

相違を選択したときに、状態はdefault-Aまたはdefault-Bから、AまたはBに遷移します。したがって、選択された相違が状態default-Aまたはdefault-Bをもつことはなく、これらの状態がモードラインに表示されることはありません。

コマンドd aは、デフォルトの状態にdefault-Aを選択し、d bはdefault-Bを選択します。これらで選択されるデフォルトは、まだ1度も選択していないか、好ましい候補をもたないすべての相違に適用されます。順番に移動しながらマージを行っている場合、一度も選択されていない相違とは、選択された相違の後のすべての相違です。したがって順番に移動しながら、セクションの間でd ad bを使い分けることにより、マージバッファーのあるセクションにたいしてはバージョンAをデフォルトに、他のセクションにはバージョンBを効果的に選択できます。

prefer-A
prefer-B

相違には、状態Aまたは状態Bが表示されています。なぜなら、それがpreferred(好ましい)からです。これはまだ明示的な選択を行なっていないが、一方の候補は共通の祖先と同じなので、もう一方の候補の方が正しく見えることを意味します。したがってAバッファーが共通の祖先と同じ場合、バージョンBの方が好ましいといえます。なぜなら、それは実際に変更されているからです。

これら2つの状態は、モードラインに‘A*’と‘B*’で表示されます。

combined

x cまたはx Cコマンドの結果として、相違は状態Aおよび状態Bが混合されたものを表示しています。

相違が1度この状態になると、aコマンドとbコマンドは、数引数を与えないかぎり何もしません。

モードラインには状態‘comb’が表示されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.6.4 マージコマンド

以下はFastモードのマージコマンドです。Editモードでは前にC-c C-cをつけてください:

p

前の相違を選択します。

n

次の相違を選択します。

a

この相違にバージョンAを選択します。

b

この相違にバージョンBを選択します。

C-u n j

番号nの相違を選択します。

.

ポイントを含む相違を選択します。

q

終了 — マージを終了します。

C-]

中断 — マージをexitして出力を保存しません。

f

Fastモードに移行します(Editモードでは実際にはC-c C-c fです)。

e

Editモードに移行します。

l

3つのウィンドウにたいして、(C-lのように)再センタリングをします。引数を指定すると、デフォルトの3ウィンドウ表示を再構築します。

-

数引数の一部を指定します。

digit

これも数引数の一部を指定します。

d a

ポイント位置からマージバッファーの下方へ、バージョンAをデフォルトとして選択します。

d b

ポイント位置からマージバッファーの下方へ、バージョンBをデフォルトとして選択します。

c a

この相違のバージョンAを、killリングにコピーします。

c b

この相違のバージョンBを、killリングにコピーします。

i a

この相違のバージョンAを、ポイント位置に挿入します。

i b

この相違のバージョンBを、ポイント位置に挿入します。

m

相違の周囲に、ポイントとマークを配します。

^

3つのウィンドウすべてを、(M-vのように)下にスクロールします。

v

3つのウィンドウすべてを、(C-vのように)上にスクロールします。

<

3つのウィンドウすべてを、(C-x <のように)左にスクロールします。

>

3つのウィンドウすべてを、(C-x >のように)右にスクロールします。

|

3つのウィンドウすべての水平スクロールをリセットします。

x 1

マージウィンドウを1行に縮めます(フルサイズに復元するにはC-u lを使用します)。

x c

この相違の2つのバージョンを合成します(2つのバージョンの合成を参照してください)。

x f

Emergeが操作しているファイルまたはバッファーの名前を、Helpウィンドウに表示します(ウィンドウを復元するにはC-u lを使用します)。

x j

この相違を次の相違に結合します(C-u x jは前の相違に結合します)。

x s

この相違を2つの相違に分割します。このコマンドを使う前に、3つのバッファーで、相違を分割したい位置にポイントを配してください。

x t

相違の上部と下部にある、同じ行を取り除きます。このような行は、バージョンAとバージョンBが同じでも、それらが祖先となるバージョンと異なる場合に発生します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.6.5 Emergeの終了

qコマンド(emerge-quit)はマージを終了して、指定されている場合は結果を出力ファイルに保存します。これはバッファーAおよびBの内容を正しいものに復元するか、もしそれらがEmergeにより作成され、何も変更されていないときはkillします。これによりマージバッファーでEmergeコマンドは使えなくなります。なぜならそれらを実行することにより、さまざまなバッファーの内容にダメージを与えるからです。

C-]はマージを中断します。これは出力ファイルに書き込まずに終了することを意味します。出力ファイルを指定していない場合、マージの終了と中断に実際の違いはありません。

Emergeコマンドが他のLispプログラムから呼び出された場合、正常終了の戻り値はtで、中断(abort)のときはnilです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.6.6 2つのバージョンの合成

特定の相違にたいして両方の候補を使いたいときがあります。これを行なうにはマージバッファーを以下のように編集するx cを使用します:

#ifdef NEW
version from B buffer
#else /* not NEW */
version from A buffer
#endif /* not NEW */

この例はCプリプロセッサー条件が2つのバージョン候補を区切っていますが、区切りに使う文字列は、変数emerge-combine-versions-templateに選択した文字列をセットすることにより、指定することができます。この文字列で‘%a’はバージョンA、‘%b’はバージョンBです。上記の結果を生成するデフォルトのセッティングは、以下のようなものです:

"#ifdef NEW\n%b#else /* not NEW */\n%a#endif /* not NEW */\n"

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

28.6.7 Emergeの細かい注意点

マージの間、AおよびBバッファーを自分で編集してはいけません。Emergeは一時的にこれらを変更しますが、最終的には元の内容に戻します。

複数のマージを一度に行うことができます — ただし、ある1つのバッファーを複数のマージの入力として使用しないでください。なぜなら、これらのバッファーに加えられる一時的な変更が、1つのバッファーに加えられてしまうからです。

ファイル全体を比較する必要があるため、Emergeの開始には時間がかかることもあります。Emacsは、diffが終了するまで他のことを行なえません。入力ファイルが大きいときはバックグラウンドで比較を行なうように、誰かがEmergeを変更するかもしれません — そうなればEmergeがコマンドを受け付けられるようになるまでの間、Emacsで他の作業を続けることができるでしょう。

マージをセットアップした後、Emergeはフックemerge-startup-hookを実行します。 フックを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

29 abbrev(略語)

定義されたabbrev(abbreviation: 略語の意)とは、挿入したとき他のテキストに展開される単語のことです。abbrevは、特別な方法で展開されるようにユーザーにより定義されます。たとえば‘foo’を、‘find outer otter’に展開されるように定義したとします。その後、f o o SPCとタイプすることにより、バッファーに‘find outer otter ’を挿入できます。

略語機能の2番目の種類は、動的abbrev展開(dynamic abbrev expansion)と呼ばれます。ポイントの前の文字で始まる単語をバッファーから探して、その文字を展開するために、明示的なコマンドで動的abbrev展開を使用します。動的abbrev展開を参照してください。

3番目の種類のhippie expansion(ヒッピー展開)は、略語展開を一般化したものです。Hippie Expansion in Features for Automatic Typingを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

29.1 abbrevの概念

abbrevとは、特定の展開結果展開されるために定義された単語のことです。abbrevの後ろに単語の区切りとなる文字を挿入したとき、それはabbrevを展開し、abbrevを展開結果に置き換えます。たとえば‘foo’が‘find outer otter’に展開されるabbrevとして定義された場合、f o o .とタイプすると‘find outer otter.’が挿入されます。

abbrevは、バッファーローカルなマイナーモードのAbbrevモードが有効なときだけ展開されます。Abbrevモードを無効にすると、定義したabbrevは忘れられますが、再びAbbrevモードを有効にすると展開されます。コマンドM-x abbrev-modeは、Abbrevモードを切り替えます。数引数を指定した場合、引数が正のときはAbbrevモードをオン、他の場合はオフに切り替えます。マイナーモードを参照してください。

abbrevは、あるメジャーモードのときだけアクティブになる、モード特有(mode-specific)な定義をもつことができます。abbrevは、すべてのメジャーモードでアクティブになる、グローバル(global)な定義をもつこともできます。同じabbrevが、グローバルな定義と、異なるメジャーモードのための、さまざまなモード特有の定義をもつことができます。カレントのメジャーモードにたいするモード特有の定義は、グローバルな定義をオーバーライドします。

Abbrevモードが有効かにかかわらず、編集セッションの間に対話的にabbrevを定義できます。それ以降のセッションでリロードして使用するために、ファイルにabbrev定義のリストを保存することもできます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

29.2 abbrevの定義

C-x a g

ポイントの前の1つ以上の単語を使用して、それが展開結果となるabbrevを定義します(add-global-abbrev)。

C-x a l

同じですが、カレントメジャーモードに特有のabbrevを定義します(add-mode-abbrev)。

C-x a i g

バッファーの単語をabbrevとして定義します(inverse-add-global-abbrev)。

C-x a i l

バッファーの単語を、モード特有のabbrevとして定義します(inverse-add-mode-abbrev)。

M-x define-global-abbrev RET abbrev RET exp RET

abbrevを、expに展開されるabbrevとして定義します。

M-x define-mode-abbrev RET abbrev RET exp RET

abbrevを、expに展開されるモード特有のabbrevとして定義します。

M-x kill-all-abbrevs

すべてのabbrev定義を削除して、白紙状態にします。

abbrevを定義する通常の方法は、abbrevに展開させたいテキストを入力して、ポイントをその後ろに配し、C-x a g (add-global-abbrev)とタイプします。これはミニバッファーを使ってabbrev自身を読み取り、ポイントの前の1つ以上の単語にたいするabbrevとして定義します。数引数を使用してポイントの前のいくつの単語が展開結果となるかを指定します。たとえば、上述したabbrevの‘foo’を定義するには、‘find outer otter’とテキストをタイプしてから、C-u 3 C-x a g f o o RETとタイプします。

C-x a gの引数に0を指定すると、それは定義するabbrevの展開結果として、リージョンの内容を使用することを意味します。

C-x a l (add-mode-abbrev)は似ていますが、これはカレントのメジャーモードにたいする、モード特有のabbrevを定義します。引数の機能はC-x a gと同じです。

C-x a i g (inverse-add-global-abbrev)とC-x a i l (inverse-add-mode-abbrev)は、逆のことを行ないます。abbrevとなるテキストがすでにバッファーに存在する場合、これらのコマンドはミニバッファーに展開結果を指定することにより、abbrevを定義します。これらのコマンドは、この定義を使ってabbrevテキストを展開します。

abbrevまたは展開結果をバッファーに入力せずに、コマンドdefine-global-abbrevで定義することができます。これは2つの引数 — abbrevと展開結果を読み取ります。コマンドdefine-mode-abbrevは、モード特有のabbrevにたいして同様のことを行います。

abbrevの定義を変更するには、単に新しい定義を作成するだけです。abbrevがすでに定義をもつ場合、abbrev定義コマンドはそれを置換する前に確認を求めます。

abbrev定義を削除するには、C-u - C-x a gC-u - C-x a lのように、abbrev定義コマンドに負の引数を与えます。前者はグローバルな定義を削除し、後者はモード特有の定義を削除します。M-x kill-all-abbrevsは、すべてのabbrevにたいしてグローバルとローカルの両方の定義を削除します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

29.3 abbrev展開の制御

Abbrevモードが有効な場合、バッファーのポイントの前にabbrevがあり、そこで自己挿入文字として空白文字か区切り文字(SPCやカンマなど)を挿入したときは、常にabbrevが展開されます。より正確には、単語を構成しない任意の文字はabbrevを展開し、単語を構成する任意の文字はabbrevの一部となります。もっとも一般的なabbrevの使用法は、まずabbrevを挿入し、それから区切り文字か空白文字を挿入してabbrevを展開する方法です。

abbrevの展開は、大文字小文字を維持します。つまり‘foo’は‘find outer otter’に、‘Foo’は‘Find outer otter’に展開されます。デフォルトでは‘FOO’は‘Find Outer Otter’に展開されますが、変数abbrev-all-capsを非nil値に変更した場合は、‘FIND OUTER OTTER’に展開されます。

以下はabbrevの展開を制御するコマンドです:

M-'

プレフィクスと、その後の展開されるabbrevを分割します(abbrev-prefix-mark)。

C-x a e

ポイントの前のabbrevを展開します。(expand-abbrev)。これはAッbレvモードが有効でなくても効果があります。

M-x unexpand-abbrev

最後に展開したabbrevをアンドゥします。

M-x expand-region-abbrevs

リージョンで見つかったいくつか、またはすべてのabbrevを展開します。

abbrevを展開して、その展開結果にプレフィクスをつけたい場合があるかもしれません。たとえば、‘cnst’が‘construction’に展開されるとき、これを使って‘reconstruction’を入力したいと思うかもしれません。しかし、recnstとタイプしてもうまくいきません。なぜなら、それがabbrevとして定義される必要があるからです。これは、プレフィクス‘re’とabbrevの‘cnst’の間で、コマンドM-' (abbrev-prefix-mark)を使うことにより行なうことができます。最初にまず‘re’を挿入します。そこでM-'をタイプします。これにより、コマンドが機能していることを示すためバッファーにハイフンが挿入されます。その後、abbrevの‘cnst’を入力します。このときバッファーには‘re-cnst’が含まれます。そこで単語を構成しない文字を挿入すると、abbrevの‘cnst’が‘construction’に展開されます。この展開ステップでは、M-'が使用中であることを示していたハイフンも削除されます。結果は期待した通り‘reconstruction’となります。

abbrevを展開せずにabbrevのテキストをバッファーに残したい場合、abbrevの後ろの区切り文字をC-qで挿入して、これを行なうことができます。したがってfoo C-q ,とタイプすると、それは展開されず、バッファーには‘foo,’が残ります。

間違ってabbrevを展開した場合、C-/ (undo)で展開をアンドゥできます。これはabbrev展開による挿入をアンドゥし、それをabbrevテキストに戻します。期待する結果が展開されないabbrevと終端となる非単語文字の場合、C-qでクォートして終端文字を再挿入しなければなりません。M-x unexpand-abbrevを使えば終端文字を削除せずに、最後の展開を取り消すことができます。

M-x expand-region-abbrevsは、リージョン内の定義されたabbrevを検索し、見つかったabbrevそれぞれにたいして、abbrevを展開結果に置き換えるか尋ねます。このコマンドはabbrevを使ってテキストを挿入したが、最初にAbbrevモードをオンにするのを忘れたときに便利です。これは特別なabbrev定義のセットで、複数のグローバルな置き換えを一度に行なうときにも便利です。このコマンドは、Abbrevモードが有効でなくても効果があります。

関数expand-abbrevは、abbrev-expand-functionが指定する関数を呼び出すことにより展開を行ないます。この関数を変更することにより、abbrevの展開を自由に変更できます。Abbrev Expansion in The Emacs Lisp Reference Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

29.4 abbrevのテストと編集

M-x list-abbrevs

すべてのabbrev定義のリストを表示します。数引数を指定した場合は、ローカルなabbrevのリストだけを表示します。

M-x edit-abbrevs

abbrevのリストを編集します。定義の追加、変更、削除ができます。

M-x list-abbrevsの出力は以下のようなものです:

他のさまざまなテーブル…
(lisp-mode-abbrev-table)
"dk"          0    "define-key"
(global-abbrev-table)
"dfn"         0    "definition"

(空行に意味はありません。また他のabbrevテーブルは省略しています。)

カッコで括られた名前を含む行は、特定のabbrevテーブルのabbrevにたいするヘッダーです。global-abbrev-tableはすべてのグローバルなabbrevを含み、その他のメジャーモードの後ろについたabbrevテーブルは、モード特有のabbrevを含みます。

それぞれのabbrevテーブルで、空行でない行は1つのabbrevの定義です。行の先頭の単語はabbrevです。その後ろの数字は、そのabbrevが展開された回数です。Emacsはこれを追跡することにより、実際に使用されているabbrevを調べて、ときどきしか使わないものを削除するのを助けます。行の最後の文字列はabbrevの展開結果です。

(sys)’とマークされているabbrevもいくつかあります。これらはsystem abbrevs(システムの略語)で、さまざまなモードにたいして事前に定義されており、ユーザーのabbrevファイルには保存されません(Abbrevs in The Emacs Lisp Reference Manualを参照してください)。systemのabbrevを無効にするには、同じ名前で展開結果がabbrev自身と同じになるabbrevを定義し、それをabbrevファイルに保存してください。

M-x edit-abbrevsを使うと、Emacsバッファーでabbrevのリストを編集することにより、abbrev定義の追加、変更、killができます。リストの書式は、上記で説明した書式を同じです。abbrevのバッファーは*Abbrevs*と呼ばれ、モードはEdit-Abbrevsモードです。このバッファーでC-c C-cをタイプすると、そのバッファーで指定されたabbrev定義がインストールされ、リストに定義されていないabbrevは削除されます。

コマンドedit-abbrevsは、実際にはlist-abbrevsと同じですが、list-abbrevsが単に*Abbrevs*を他のウィンドウに表示するのに比べ、このコマンドはそのバッファーを選択する点が異なります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

29.5 abbrevの保存

以下のコマンドにより、編集セッション間でabbrev定義を維持できます。

M-x write-abbrev-file RET file RET

すべてのabbrev定義の記述を、ファイルfileに書き込みます。

M-x read-abbrev-file RET file RET

ファイルfileを読み込み、そこで指定されているabbrevを定義します。

M-x define-abbrevs

カレントバッファーの定義からabbrevを定義します。

M-x insert-abbrevs

すべてのabbrevとそれらの展開結果を、カレントバッファーに挿入します。

M-x write-abbrev-fileは、ミニバッファーを使用してファイル名を読み取り、すべてのカレントのabbrev定義の記述を、そのファイルに書き込みます。これは後のセッションで使用するために、abbrev定義を保存するのに使われます。ファイルに保存されるテキストは一連のLisp式で、それが実行されると保存したときと同じabbrevを定義します。

M-x read-abbrev-fileは、ミニバッファーを使用してファイル名を読み取り、ファイル内容に対応するabbrevを定義します。関数quietly-read-abbrev-fileも同様ですが、これはエコーエリアにメッセージを表示しません。これを対話的に呼び出すことはできず、主にinitファイル(Emacs初期化ファイルを参照してください)で使用されます。どちらの関数も引数にnilが指定されると、変数abbrev-file-nameで与えられるファイルを使用します。この変数のデフォルトは~/.emacs.d/abbrev_defsです。これは標準のabbrev定義ファイルで、Emacsは起動時にこのファイルから自動的にabbrevをロードします(例外としてEmacsがバッチモードで開始されたときはabbrevファイルをロードしません。バッチモードについての説明は、初期化オプションを参照してください)。

abbrevのどれかを変更した場合、Emacsは((C-x sC-x C-cなどで)、すべてのファイルの保存するか尋ねるときにabbrevについても尋ねます。これはabbrev-file-nameで指定したファイルに、それらを保存します。この機能は変数save-abbrevsnilにセットすることにより抑止できます。silentlyにセットすることにより、確認なしでabbrevが保存されるようになります。

コマンドM-x insert-abbrevsおよびM-x define-abbrevsは、前のコマンドと似ていますが、Emacsバッファーのテキストにたいして機能します。M-x insert-abbrevsは、カレントのabbrev定義の記述をカレントバッファーのポイントの後ろにテキストとして挿入します。M-x define-abbrevsは、カレントバッファー全体を解析して、対応するabbrevを定義します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

29.6 動的abbrev展開

上記で説明したabbrev機能は、テキストの挿入にしたがい自動的に処理されますが、すべてのabbrevを明示的に定義しなければなりません。対照的に、動的abbrev(dynamic abbrevs)は、バッファーの内容から略語の展開結果を自動的に決定することができます、しかし動的abbrevの展開は、明示的に要求したときだけ行なわれます。

M-/

バッファーのポイントの前の単語を動的abbrevとして、その略語で始まる単語を検索することにより展開します(dabbrev-expand)。

C-M-/

ポイントの前の単語を動的abbrevとして補完します(dabbrev-completion)。

たとえばバッファーが‘does this follow ’が含んでいて、f o M-/とタイプすると、これは‘follow’を挿入します。なぜならそれが‘fo’で始まる、そのバッファーの最後の単語だからです。M-/に数引数を指定すると、それはポイントから後方に検索して2番目、3番目、...の異なる展開結果を検索します。M-/を繰り返すと他の展開結果を後方に検索します。ポイントの前のテキストをすべて検索した後は、ポイントの後のテキストを検索します。変数dabbrev-limitが非nilの場合、それはバッファーの中で展開結果を探す範囲を指定します。

カレントバッファーを検索した後、通常M-/は他のバッファーを検索します。dabbrev-check-all-buffersdabbrev-check-other-buffersは、他のバッファー(もし存在するなら)のどれが検索されたか決定するのに使用できます。

どのバッファーを検索するかを制御するには、変数dabbrev-ignored-buffer-namesおよびdabbrev-ignored-buffer-regexpsをカスタマイズします。前者の値は、スキップするバッファー名のリストです。後者の値は正規表現のリストで、バッファー名がこれらの正規表現のどれかにマッチした場合、動的abbrev展開はそのバッファーをスキップします。

C-u - M-/のようにM-/に負の引数を指定すると、これは最初にポイントの後ろの展開結果を検索し、その後は他のバッファーを検索し、ポイントの前の展開結果は最後に報告します。他の展開結果を探すためにM-/を繰り返す場合は、引数に何もしていしないでください。M-/を繰り返すことにより、ポイントの後、その後はポイントの前の展開結果を巡回します。

動的abbrevを展開した後、その展開結果の元のコンテキストで展開結果の後ろに続く、追加の単語をコピーすることができます。コピーしたい追加の単語ごとに、単にSPC M-/とタイプします。単語間のスペースおよび区切り文字は、単語とともにコピーされます。

M-/が展開する単語を決定する方法と、それを展開する方法を制御できます。動的abbrevのカスタマイズを参照してください。

コマンドC-M-/ (dabbrev-completion)は、動的abbrevの補完を行ないます。利用可能な展開結果を1つずつ試すかわりに、これはすべてを検索して、それらがもつ共通のテキストを挿入します。共通部分がない場合、C-M-/は、通常の方法で選択することができる補完リストを表示します。補完を参照してください。

動的abbrev展開は、Abbrevモードとは完全に独立しています。M-/での単語の展開は、その単語が通常のabbrevとして定義されていることとは無関係です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

29.7 動的abbrevのカスタマイズ

動的abbrev展開は通常、展開結果の検索で大文字小文字を無視します。したがって、展開結果と展開する単語は、大文字小文字が一致する必要はありません。

この機能は変数dabbrev-case-fold-searchにより制御されます。この値がtの場合、検索で大文字小文字は無視されます。nilの場合、単語と展開結果は大文字小文字が一致していなければなりません。値がcase-fold-search(デフォルト)の場合、変数case-fold-searchが展開結果の検索で、大文字小文字を無視するかどうかを制御します(検索中のLaxマッチングを参照してください)。

動的abbrev展開は通常、大文字小文字のパターンにしたがって展開結果を変換することにより、展開する動的abbrevの大文字小文字のパターンを維持します。

変数dabbrev-case-replaceは、動的abbrevの大文字小文字のパターンを維持するかどうかを制御します。この値がtの場合、動的abbrevの大文字小文字のパターンはほとんどのケースで維持されます。nilの場合、展開結果は常にそのままコピーされます。値がcase-replace(デフォルト)の場合、変数case-replaceが展開結果をそのままコピーするかどうかを制御します(置換コマンドとLaxマッチを参照してください)。

しかし、展開結果が複雑にミックスされた大文字小文字のパターンを含む場合、そして動的abbrevがそのパターンにある程度マッチする場合、これらの変数の値にかかわらず、展開結果は常にそのままコピーされます。したがって、たとえばバッファーがvariableWithSillyCasePatternというテキストを含む場合、v a M-/とタイプすると、大文字小文字のパターンを含めて展開結果をコピーします。

変数dabbrev-abbrev-char-regexpが非nilの場合、これは動的展開の目的のために、どの文字を単語の一部とするかを制御します。正規表現は2文字以上ではなく、ただ1文字だけにマッチしなければなりません。同じ正規表現が、どの文字が展開結果の一部となるかも決定します。値がnil(デフォルト)の場合は特別な意味をもちます。動的abbrev(たとえばポイント位置の単語)は単語構成文字から構成されますが、それらの展開結果は単語とシンボル文字のシーケンスから取得されます。これはプログラムソース内、および多くの言語による人間が読むことができるテキストにたいするシンボルの展開にたいして、一般的にこれは適切ですが、一般的ではない句読点を含むテキストバッファーにおいては、おそらくあなたが望むものではないかもしれません。そのような場合は、値\"\\\\sw\"がよい結果を生成するかもしれません。

シェルスクリプトおよびmakefileでは、変数名にプレフィクス‘$’があるときと、ないときがあります。このタイプのテキストのためのメジャーモードは、オプションのプレフィクスを扱うために、変数dabbrev-abbrev-skip-leading-regexpをセットして、動的abbrev展開をカスタマイズできます。この値には、動的abbrev展開が無視すべきオプションのプレフィクスにマッチする正規表現を指定します。デフォルトはnilで、これは文字をスキップしないことを意味します


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30 Dired (ディレクトリーエディター)

Diredはディレクトリー、およびオプションでそれのサブディレクトリーのリストを含む、Emacsバッファーを作成します。このバッファー内を移動するために、通常のEmacsコマンドと、リストされたファイルを操作するための、特別なコマンドを使うことができます。Diredはローカルとリモートの両方のディレクトリーで機能します。

通常はDiredバッファーは読み取り専用で、テキストの挿入はできません(とはいえWdiredモードではそれが可能。Diredバッファーの編集を参照されたい)。dxのような通常のプリント文字は、特別なDiredコマンドに再定義されています。Diredコマンドには、カレントファイル(カレント行のファイルのこと)をマークしたり、フラグをつけるものがいくつかあり、他のコマンドは、マークされたファイルやフラグがつけられたファイルにたいして処理を行ないます。最初に特定のファイルをマークして、それらすべてにたいして1つのコマンドで操作を行なうのです。

Dired-Xパッケージは、Diredモードのためのさまざまな特別の機能を提供します。Dired-X in Dired Extra User’s Manualを参照してください。

ディレクトリーのファイルのリストは、C-x C-d (list-directory)でも閲覧することができます。Diredとは異なり、このコマンドではリストされたファイルにたいする操作はできません。ファイルディレクトリーを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.1 Diredの起動

Diredを呼び出すには、C-x d (dired)とタイプします。これはミニバッファーを使用してディレクトリー名を読み取り、そのディレクトリーのファイルを一覧するするDiredバッファーを開きます。ミニバッファーの引数に、ワイルドカードによるファイル名パターンを与えることもできます。この場合、Dliredバッファーには、そのパターンにマッチする、すべてのファイルが一覧されます。ディレクトリー部分にワイルドカードが出現することもあります。たとえば、

C-x d  ~/foo/*.el  RET
C-x d  ~/foo/*/*.el  RET

1つ目の例は、ディレクトリー‘foo’内の、拡張子‘.el’のすべてのファイルをリストします。2つ目の例は、‘foo’のすべてのサブディレクトリー内の、拡張子‘.el’のファイルをリストします。

ミニバッファー内では、通常のヒストリー、および補完のコマンドが使用できます。特に、M-nは(もしあれば)visitされているファイルの名前を配します(ミニバッファーヒストリーを参照)。

C-x C-f (find-file)にディレクトリー名を与えて、Diredを呼び出すこともできます。

変数dired-listing-switchesは、ディレクトリーをリストするために、lsに与えるオプションを指定します。この文字列には、‘-l’が含まれていなければなりませんdiredコマンドにプレフィクス引数を使用した場合、ディレクトリーの指定の前に、lsのためのスイッチを指定できます。スイッチが指定される方法は問いません。lsのスイッチには、引数を要求しない短いオプション(1文字)と、長いオプション(‘--’で始まり、引数は‘=’で指定される)を含めることができます。

システムのlsコマンドが‘--dired’オプションをサポートする場合、Diredは自動的にそのオプションを渡します。これにより、Diredが名前を解析できないという特殊なファイル名にたいして、lsが特別なエスケープシーケンスを付します。Emacsセッションで最初にDiredを実行するとき、lsコマンドに‘--dired’オプションを指定して呼び出すことにより、そのスイッチをサポートするかどうかチェックします。exitコードが0の場合、それ以降Diredは‘--dired’オプションを使用し、それ以外の場合は使用しません。変数dired-use-ls-diredをカスタマイズすることにより、このチェックを抑止することができます。値unspecified(デフォルト)は、チェックを行なうことを意味します。その他の非nil値は、‘--dired’オプションを使用することを意味します。nilは、‘--dired’オプションを使用しないことを意味します。

MS-WindowsやMS-DOSシステム、およびいくつかのリモートシステムでは、Emacsがlsをエミュレートします。このエミュレーションのオプションと特性については、MS-Windowsでのlsのエミュレーションを参照してください。

Diredバッファーを他のウィンドウに表示するには、C-x 4 d (dired-other-window)を使用します。C-x 5 d (dired-other-frame)は、Diredバッファーを別のフレームに表示します。

q (quit-window)とタイプすると、Diredバッファーは隠され(bury)ます。ウィンドウがそのバッファーのためだけに作成された場合は、そのウィンドウを削除します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.2 Diredバッファーでの移動

Emacsの通常のカーソル移動コマンドは、Diredバッファーでも利用可能です。キーC-nC-pはそれぞれdired-next-linedired-previous-lineを実行して、行の先頭ではなくファイル名の先頭にカーソルを配するように、再定義されています。

特に利便性のために、DiredでのSPCおよびnは、C-nと等価になっています。pC-pと等価です(行の移動はDiredでは一般的な操作なので、タイプしやすいようにするべきです)。DEL(上に移動してフラグを外す)は、単なる上への移動でも便利なときがあります(Diredでのファイルの削除についてを参照してください)。

j (dired-goto-file)は、ミニバッファーを使用してファイル名の入力を求め、Diredバッファーで、そのファイルが記述されている行にポイントを移動します。

M-s f C-s (dired-isearch-filenames)は、Diredバッファーで前方へのインクリメンタル検索を行ないます。これはファイル名にたいするマッチだけを検索し、それ以外のバッファーのテキストは無視します。M-s f M-C-s (dired-isearch-filenames-regexp)も同じことを行ないますが、これは正規表現による検索です。変数dired-isearch-filenamestに変更した場合、通常の検索コマンドも検索対象がファイル名だけに制限されるようになります。たとえばC-sは、M-s f C-sと同様に振る舞います。変数の値がdwimの場合、ポイントの最初の位置がファイル名にあるときだけ、検索コマンドはファイル名にマッチします。インクリメンタル検索についての情報は、検索と置換を参照してください。

複数ディレクトリーにたいするものも含めて、Diredバッファーでは追加の移動コマンドが利用可能です。サブディレクトリー間の移動を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.3 Diredでのファイルの削除について

もっともよく使われるDiredの使用法は、最初にファイルを削除するためにフラグ(flag)をつけて、その後にフラグがつけられたファイルを削除をする方法です。

d

削除するために、このファイルにフラグをつけます(dired-flag-file-deletion)。

u

削除フラグを外します(dired-unmark)。

DEL

その行の削除フラグを外して、ポイントを前の行に移動します(dired-unmark-backward)。

x

削除のフラグがつけられたファイルを削除します(dired-do-flagged-delete)。

ファイルが記述されている行に移動して、d (dired-flag-file-deletion)とタイプすることにより、ファイルを削除するためのフラグをつけることができます。削除フラグは行頭に‘D’が表示されます。このコマンドはポイントを次の行に移動するので、dコマンドを繰り返すことにより、連続してファイルにフラグをつけることができます。数引数は繰り返し回数を指定します。負の引数は前のファイルにフラグをつけることを意味します。

リージョンがアクティブの場合、dコマンドはリージョンのすべてのファイルに削除のフラグをつけます。この場合、コマンドはポイントを移動せず、プレフィクス引数も無視します。

ファイルを即座に削除せず、削除のフラグをファイルにつける理由は、意図しないファイルを削除する危険を軽減するためです。フラグがついたファイルをDiredに削除をさせる前に、コマンドuまたはDELで、削除フラグを外すことができます。u (dired-unmark)はdと同じように機能しますが、これはフラグをつけるのではなくフラグを外します。DEL (dired-unmark-backward)は、上に移動してフラグを外します。これはuに引数-1を指定するのと同じです。どちらのコマンドも、数引数は繰り返し回数で、負の引数は反対方向にフラグを外していくことを意味します。リージョンがアクティブの場合、ポイントを移動せずにリージョン内のすべてのファイルのフラグを外します。

フラグがついたファイルを削除するには、x (dired-do-flagged-delete)とタイプします。このコマンドは削除フラグがついた、すべてのファイルのリストを表示して、確認を求めます。もしこれにyesと応えた場合、Diredはフラグがついたファイルを削除して、それらのファイルにたいするDiredバッファーの行を削除します。Diredバッファーの行数は少し減り、バッファーは選択されたまま残ります。

確認を求められたときnoと応えるか、C-gで中断した場合は、即座にDiredに戻ります。バッファーの削除フラグはそのまま残り、実際に削除されたファイルはありません。

空ディレクトリーは他のファイルと同様に削除できますが、Diredは通常、空でないディレクトリーは削除できません。しかし変数dired-recursive-deletesが非nilの場合には、Diredはディレクトリーの内容も含めて、空でないディレクトリーを削除できます。dired-recursive-deletesnilにセットしている場合でも、ディレクトリーの内容すべてについて問い合わせされることなく、ディレクトリーを再帰的に削除したいこともあるかもしれません。これには若干の危険が伴います。変数の値がalwaysの場合は、さらに危険性は増すとはいえ、Diredは空でないディレクトリーを再帰的に削除するでしょう。

dired-recursive-deletesnilにセットしている場合でも、ディレクトリーの内容すべてについて問い合わせされることなく、ディレクトリーを再帰的に削除したいこともあるかもしれません。たとえば、多くのディレクトリーにたいして、それらすべてを安全に削除できると確信がもてるときは、それらに削除のマークを付与したいと思うかもしれません。空でないディレクトリーすべてにたいして、確認が求められますが、allと応えた場合は、それ以上の問い合わせなしで残りすべてのディレクトリーが削除されます。

変数delete-by-moving-to-trashtに変更した場合、上記の削除コマンドは対象となるファイルおよびディレクトリーを削除するかわりに、システムのTrash(ゴミ箱)に移動します。その他のファイル操作を参照してください。

ファイルを削除する代替手段は、それらをmでマークしてDで削除する方法です。ファイルにたいする操作を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.4 大量のファイルに一度にフラグをつける

コマンド#~.% &% dは、ファイル名にもとづき多くのファイルにフラグをつけます。

#

すべての自動保存ファイル(名前の最初と最後が‘#’のファイル)にたいして、削除のフラグをつけます(自動保存-災害にたいする防御を参照してください)。

~

すべてのバックアップファイル(名前の最後が‘~’のファイル)にたいして、削除のフラグをつけます(バックアップファイルを参照してください)。

. (ピリオド)

余分な番号付きバックアップファイルに、削除のフラグをつけます。一番古いものと、一番新しいバックアップのいくつかは除外され、その中間のファイルにフラグがつけられます。

% &

簡単にファイルを再作成できることを示唆する、特定の種類の名前をもつすべてのファイルに削除のフラグをつけます。

% d regexp RET

正規表現regexpにマッチする名前の、すべてのファイルに削除のフラグをつけます。

# (dired-flag-auto-save-files)は、名前が自動保存ファイルに見える — つまり名前の最初と最後が‘#’の、すべてのファイルにフラグをつけます。自動保存-災害にたいする防御を参照してください。

~ (dired-flag-backup-files)は、名前がバックアップファイルであることを告げる — つまり名前の最後が‘~’の、すべてのファイルにフラグをつけます。バックアップファイルを参照してください。

. (ピリオド、dired-clean-directory)は、いくつかのバックアップファイルだけに削除のフラグをつけます。つまり、最古と最新のいくつかのファイルを除く、すべてのファイルです。残すべき最新バージョンの数は通常、変数dired-kept-versions(kept-new-versionsではありません。これは保存時だけ適用されます)で与えられます。残すべき最古バージョンの数は、変数kept-old-versionsにより与えられます。

C-u 3 .のように、ピリオドに正の数引数を指定すると、dired-kept-versionsをオーバーライドして、残すべき最新バージョンの数を指定します。負の引数はkept-old-versionsをオーバーライドします。引数の値にマイナスをつけると、残すべき最古バージョンの数を指定します。

% & (dired-flag-garbage-files)は、変数dired-garbage-files-regexpで指定される正規表現に、名前がマッチするファイルにフラグをつけます。デフォルトでは、TeXにより生成される‘.bak’ファイルと、patchにより生成される‘.orig’ファイルと‘.rej’ファイルにマッチします。

% dは、指定された正規表現に名前がマッチするすべてのファイルにフラグをつけます(dired-flag-files-regexp)。マッチングにはファイル名の非ディレクトリー部分だけが使用されます。マッチのアンカーとして‘^’と‘$’を使用できます。% dを使用するとき、特定のサブディレクトリーを隠して除外できます。サブディレクトリーを隠すを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.5 Diredのファイルをvisitする

Diredバッファーにリストされたファイルをvisitしたり、調べるためのDiredコマンドが、いくつかあります。これらのコマンドは、すべてカレント行のファイルに適用されます。そのファイルが実際にはディレクトリーの場合、これらのコマンドは(別のDiredバッファーを作成して)、そのサブディレクトリーにたいしてDiredを呼び出します。

f

C-x C-fとタイプしてファイル名を指定したときと同じように、カレント行に記述されたファイルをvisitします(dired-find-file)。ファイルのvisit(訪問)を参照してください。

RET
e

fと等価です。

o

fと同じですが、そのファイルのバッファーに別のウィンドウを使用します(dired-find-file-other-window)。Diredバッファーは、最初のウィンドウに表示されたまま残ります。これはC-x 4 C-fを使用して、ファイルをvisitするのと似ています。複数ウィンドウを参照してください。

C-o

カレント行に記述されたファイルをvisitし、そのバッファーを別のウィンドウで表示しますが、そのウィンドウを選択しません(dired-display-file)。

mouse-1
mouse-2

クリックした名前のファイルをvisitします(dired-mouse-find-file-other-window)。これはoコマンドのように、ファイルの表示に別のウィンドウを使います。

v

カレント行に記述されたファイルを、Viewモードで表示します(dired-view-file)。Viewモードは、バッファーを移動するための便利なコマンドを提供しますが、バッファーの変更はできません。Viewモードを参照してください。

^

カレントディレクトリーの親ディレクトリーをvisitします(dired-up-directory)。これは、..の行に移動してfをタイプするのと等価です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.6 Diredでのマークとフラグ

ファイルに‘D’というフラグをつけるのではなく、他の文字(通常は‘*’)でファイルをマークすることもできます。ほとんどのDiredコマンドは、‘*’でマークされたファイルにたいしてコマンドを処理します。フラグ付けされたファイルだけに作用するコマンドは、それらのファイルを削除するxだけです。

以下は‘*’でマークしたり、マークを外したり、マークにたいして操作を行なうコマンドです(ファイルにたいしてフラグをつけたり外すコマンドについては、Diredでのファイルの削除についてを参照してください)。

m
* m

カレントファイルを‘*’でマークします(dired-mark)。リージョンがアクティブの場合、かわりにリージョン内のすべてのファイルをマークします。そうでない場合、数引数nが与えられたときは、カレント行から数えて、次のn個のファイルまでをマークします(nが負の場合、前の-n個のファイルをマークします)。サブディレクトリーのヘッダー行(subdirectory header line: Diredでのサブディレクトリーを参照)で呼び出さた場合、このコマンドはそのサブディレクトリー内のすべてのファイルをマークします。

* N

マークしたファイルの数とサイズを報告します(dired-number-of-marked-files)。

* *

すべての実行ファイルを‘*’でマークします(dired-mark-executables)。数引数を指定すると、それらのファイルのマークを外します。

* @

すべてのシンボリックリンクを、‘*’でマークします(dired-mark-symlinks)。数引数を指定すると、それらのファイルのマークを外します。

* /

...を除く、すべてのディレクトリーを‘*’でマークします(dired-mark-directories)。数引数を指定すると、それらのディレクトリーのマークを外します。

* s

...を除く、カレントのサブディレクトリー内のすべてのファイルをマークします(dired-mark-subdir-files)。

u
* u

この行の任意のマークを外します(dired-unmark)。リージョンがアクティブの場合は、かわりにリージョン内のすべてのファイルのマークを外します。そうでない場合、数引数nが与えられた場合は、カレントファイルから数えて、次のn個のファイルのマークを外します(nが負の場合、前の-n個のファイルのマークを外します)。

DEL
* DEL

ポイントを前の行に移動して、その行のマークを外します(dired-unmark-backward)。リージョンがアクティブの場合、かわりにリージョン内のすべてのファイルのマークを外します。そうでない場合、数引数nが与えられたときは、カレントファイルから数えて、前のn個のファイルのマークを外します(nが負の場合、次の-n個のファイルのマークを外します)。

* !
U

Diredバッファーの、すべてのファイルのマークを外します(dired-unmark-all-marks)。

* ? markchar
M-DEL

文字markcharを使用する、すべてのマークを外します(dired-unmark-all-files)。M-DELで呼び出された場合、このコマンドはmarkcharの入力を求めます。markcharは1文字です — これを終了させるためにRETを使用しないでください。以下の* cの説明を参照してください。これは1つのマーク文字を、他の文字に置換します。

数引数を指定した場合、このコマンドはマークされたファイルごとに、マークを外すか確認します。yはyes(はい)で、nはno(いいえ)、!は残りのファイルにたいして確認を行なわずにマークを外します。

* C-n
M-}

次にマークされたファイルへ下に移動します(dired-next-marked-file)。“マークされた”ファイルとは、任意の種類のマークがついているファイルです。

* C-p
M-{

前のマークされたファイルへ、上に移動します(dired-prev-marked-file)。

t
* t

すべてのマークを切り替えます(dired-toggle-marks)。つまり、‘*’でマークされたファイルのマークを外し、マークされていないファイルを‘*’でマークします。他の方法でマークされたファイルは影響を受けません。

* c old-markchar new-markchar

文字old-markcharを使ったすべてのマークを、文字new-markcharを使ったマークに置き換えます(dired-change-marks)。このコマンドは主に‘*’や‘D’以外の文字を使用したマークを作成するのに使われます。引数は1文字です — 終了させるためにRETを使用しないでください。

このコマンドは、マーク文字としてほとんどの任意の文字を使用できるので、ファイルをさまざまなクラスに分類することができます。old-markcharがスペース(‘ ’)の場合、このコマンドは、すべてのマークされていないファイルにたいして処理を行ないます。new-markcharがスペースの場合、このコマンドは対象となるファイルのマークを外します。

このコマンドの威力を知る例として、以下ではマークされていないファイルすべてにフラグ‘D’をセットして、すでに‘D’フラグがついているものはフラグを外しています:

* c D t  * c SPC D  * c t SPC

この例では、すでに‘t’でマークされたファイルがないと仮定しています。

% m regexp RET
* % regexp RET

名前が正規表現regexpにマッチするすべてのファイルを、(‘*’で)マークします(dired-mark-files-regexp)。このコマンドは% dと似ていますが、‘D’のフラグをつけるかわりに、‘*’でマークします。

マッチングには、ファイル名のディレクトリー部分以外だけが使用されます。マッチのアンカーとして、‘^’と‘$’が使用できます。サブディレクトリーを一時的に隠すことにより、それらを除外できます(サブディレクトリーを隠すを参照してください)。

% g regexp RET

内容(contents)に正規表現regexpにたいするマッチを含むすべてのファイルを、(‘*’で)マークします(dired-mark-files-containing-regexp)。このコマンドは% mと似ていますが、ファイル名ではなくファイル内容を検索する点が異なります。ファイルがEmacsバッファーでvisitされていて、dired-always-read-filesystemnil(デフォルト)なら、このコマンドはファイルを再visitせずにバッファーの内容を調べるので、ディスク上のファイル内容が、最後にvisitしたときから変更されている場合は、矛盾した結果になるかもしれません。これを望まない場合は、このコマンドを呼び出す前に、バッファーでvisitされているファイルをリバートしたり、それらのバッファーにたいしてAuto-Revertモードをオンに切り替えたいと思うかもしれません。バッファーのリバートを参照してください。ファイルをリバートしたりAuto-Revertモードをオンにせずに、このコマンドに常にファイルを再visitさせたい場合は、dired-always-read-filesystemを非nilにセットしたいと思うかもしれません。

C-/
C-x u
C-_

Diredバッファーでの、マークの追加や削除などの変更をアンドゥします(dired-undo)。このコマンドは実際のファイル操作をリバートしたり、失われたファイルを回復しません! これは単にバッファー自身にたいする変更をアンドゥするだけです。

ファイルを操作するコマンドの後でこれを使用することにより、問題が起こる場合もあります。たとえば1つ以上のファイルをリネームしてから、Diredバッファーでdired-undoにより元の名前にリストアした場合、Diredバッファーと、そのディレクトリーの実際の内容が、同期しなくなります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.7 ファイルにたいする操作

このセクションでは、1つまたは複数のファイルを操作する、基本的なDiredコマンドを説明します。これらのコマンドはすべて大文字で、引数を読み取ったり、実際に動作する前に確認を求めるのに、ミニバッファーを使用します。これらのコマンドはすべて、以下の方法により操作するファイルを指定します:

コマンド!や‘%’のような他のDiredコマンドにも、操作対象となるファイルを決定するのに、同じ規則を使うものがあります。

ファイルのコピーやリネーム、それらにたいするリンクを作成するような、対象ディレクトリーを尋ねるコマンドは、操作のためにデフォルトの対象ディレクトリーの推論を試みます。これらのコマンドは通常、Diredバッファーのデフォルトディレクトリーを提案しますが、オプションdired-dwim-targetが非nilで、何らかのウィンドウに別のDiredバッファーが存在しない場合には、その他のバッファーのディレクトリーをかわりに提案します。dired-dwim-targetによりDiredバッファーを表示する次のウィンドウ、Diredバッファーを表示するもっとも最近使用されたウィンドウ、あるいはそれ以外の関数の使用のどれを優先するかをカスタマイズできます。値が関数ならそれは引数なしで呼び出されて、デフォルト(デフォルトターゲットおよび“future history”)として使用するディレクトリーのリストをリターンすることが期待されます。

以下は、ファイルにたいして操作を行なうDiredコマンドです。

C new RET

指定されたファイルをコピーします(dired-do-copy)。引数newはコピー先のディレクトリー、または(1つのファイルをコピーする場合は)新しいファイル名です。これはシェルコマンドcpと似ています。

オプションdired-create-destination-dirsはDiredがファイルのコピーやリネームで対象先に存在しないディレクトリーがある場合に、それを作成するかどうかを制御します。デフォルト値のnilはそのような存在しないディレクトリーを作成しないことを意味します。値alwaysはDiredが自動的にそれらを作成すること、値askはそれらを作成する前にDiredが確認を求めることを意味します。

dired-copy-preserve-timeが非nilの場合、このコマンドでコピーすることにより、‘cp -p’でコピーしたときのように、古いファイルの最終修正時刻(modification time)が保持されます。

変数dired-recursive-copiesは、(‘cp -r’のように)ディレクトリーを再帰的にコピーするかを制御します。デフォルトはtopで、これはディレクトリーを再帰的にコピーする前に、確認を求めることを意味します。

D

指定されたファイルを削除します(dired-do-delete)。これはシェルコマンドrmと似ています。

このセクションの他のコマンドと同様、このコマンドはマークされたファイル、または次のn個のファイルを操作します。対照的にx (dired-do-flagged-delete)は、フラグがついたすべてのファイルを削除します。

R new RET

指定されたファイルをリネームします(dired-do-rename)。1つのファイルをリネームする場合、引数newはファイルの新しい名前です。複数のファイルをリネームする場合、引数newはファイルを移動するディレクトリーです(これはシェルコマンドmvと似ています)。

オプションdired-create-destination-dirsはDiredがnew内に存在しないディレクトリーを作成するかどうかを制御します。

Diredはリネームされたファイルに関連付けられたバッファーによりvisitされたファイルの名前を自動的に変更するので、これらのバッファーは新しい名前を参照します。

変数dired-vc-rename-fileの値が非nilなら、 vc-rename-file (バージョンコントロールされたファイルの削除とリネームを参照)を通じて背後にあるVCSのコマンドを使用してファイルをリネームします。

H new RET

指定されたファイルのハードリンクを作成します(dired-do-hardlink)。これはシェルコマンドlnと似ています。引数newはリンクを中に作成するディレクトリー、または(1つのリンクだけを作成する場合は)リンクに与える名前です。

S new RET

指定されたファイルのシンボリックリンクを作成します(dired-do-symlink)。これは‘ln -s’と似ています。引数newはリンクを中に作成するディレクトリー、または(1つのリンクだけを作成する場合は)リンクに与える名前です。

M modespec RET

指定されたファイルのモード(パーミッションビットとも呼ばれる)を変更します(dired-do-chmod)。modespecには、chmodプログラムで扱われる引数のような、8進かシンボル表記を指定できます。

G newgroup RET

指定されたファイルのグループを、newgroupに変更します(dired-do-chgrp)。

O newowner RET

指定されたファイルの所有者を。newownerに変更します(dired-do-chown。ほとんどのシステムでは、これを行なうことができるのはスーパーユーザーだけです)。

変数dired-chown-programは、処理を行なうために使用するプログラムの名前を指定します(システムが異なると、chownが違う場所に配されている場合があるので、この変数が必要)。

T timestamp RET

指定されたファイルにtouchします。これはファイルの修正時刻を、現在時刻で更新することを意味します。これはシェルコマンドtouchに似ています。

P command RET

指定されたファイルを印刷します(dired-do-print)。それらを印刷するためのコマンドを指定しなければなりませんが、ミニバッファー開始時には、変数lpr-commandおよびlpr-switches(lpr-bufferが使用するのと同じ変数。ハードコピーの印刷を参照してください)を使用することにより推定された、適切な初期値が示されます。

Z

指定されたファイルを圧縮します(dired-do-compress)。そのファイルがすでに圧縮されたように見える場合は、かわりにそれを解凍します。マークされたファイルはそれぞれ、自身のアーカイブ内に圧縮されます。これには利用可能ならgzip、それ以外ではcompressが使用されます。ディレクトリー名にたいしては、このコマンドはtarコマンドの出力にgzipをパイプして実行することにより、そのディレクトリーのすべてのファイルを含む、圧縮アーカイブ.tar.gzを生成します。圧縮されたディレクトリーの解凍は、アーカイブファイル.tar.gz.tgz上でZをタイプすることにより、ファイル名から拡張子を除いた名前のディレクトリー内にアーカイブ内のすべてのファイルが解凍されます。

c

指定されたファイルを、ファイルシステム上のどこかにある1つのアーカイブに圧縮します(dired-do-compress-to)。圧縮アルゴリズムはアーカイブの拡張子により決定されます。dired-compress-files-alistを参照してください。

:d

指定されたファイルを復号化します(epa-dired-do-decrypt)。Dired integration in EasyPG Assistant User’s Manualを参照してください。

:v

指定されたファイルのデジタル署名を検証します(epa-dired-do-verify)。Dired integration in EasyPG Assistant User’s Manualを参照してください。

:s

指定されたファイルにデジタル署名します(epa-dired-do-sign)。Dired integration in EasyPG Assistant User’s Manualを参照してください。

:e

指定されたファイルを暗号化します(epa-dired-do-encrypt)。Dired integration in EasyPG Assistant User’s Manualを参照してください。

L

指定されたEmacs Lispファイルをロードします(dired-do-load)。EmacsのためのLispコードによるライブラリーを参照してください。

B

指定されたEmacs Lispファイルをバイトコンパイルします(dired-do-byte-compile)。Byte Compilation in The Emacs Lisp Reference Manualを参照してください。

A regexp RET

指定されたすべてのファイルにたいして、正規表現regexpを検索します(dired-do-find-regexp)。

このコマンドはxref-find-references (識別子の検索と置換を参照)の変種で、必要に応じて、*xref*バッファーで利用可能なコマンドで説明されているコマンドを使用することにより、マッチ間を移動したり、それらを表示することができる*xref*バッファーを表示します。

マークされたファイルやディレクトリーがある場合、このコマンドはそれらのディレクトリーにあるすべてのファイルとサブディレクトリーを再帰的に検索します。ただし名前がgrep-find-ignored-filesにマッチするファイルと、grep-find-ignored-directoriesにマッチするサブディレクトリーは除外されます。

Q regexp RET to RET

指定された各ファイルにたいしてquery-replace-regexpを行い、regexpにたいするマッチを、文字列toに置換します(dired-do-find-regexp-and-replace)。

このコマンドはxref-query-replace-in-resultsの変種です。これはregexpにたいするすべてのマッチをリストする*xref*バッファーを表示します。このバッファーでは特別なコマンド(*xref*バッファーで利用可能なコマンドを参照)を使用できます。特に、問い合わせつき置換のループ(query replace loop)をexitした場合は、そのバッファーで更に置換を行なうためにrを使用できます。識別子の検索と置換を参照してください。

dired-do-find-regexpと同様に、マークされたファイルがディレクトリーの場合、このコマンドはそれらのディレクトリー内、およびそれらのサブディレクトリーのすべてのファイルの置換を再帰的に行います。ただし、名前がgrep-find-ignored-filesにマッチするファイル、および名前がgrep-find-ignored-directoriesにマッチするサブディレクトリーは除外されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.8 Diredでのシェルコマンド

Diredコマンド! (dired-do-shell-command)は、ミニバッファーでシェルのコマンド文字列を読み取り、そのシェルコマンドを1つ以上のファイルにたいして実行します。シェルコマンドが処理するファイルは、Diredコマンドが操作するファイルを決定する方法と同じです(ファイルにたいする操作を参照してください)。コマンドXは、!の別名です。

コマンド& (dired-do-async-shell-command)は同じことを行ないますが、これはシェルコマンドを非同期で実行する点が異なります(!でシェルコマンドの最後に文字‘&’を追加しても、同じことを行なうことができます)。コマンドが複数のファイルを処理する場合、ファイルごとに指定したシェルコマンドの複数コピーを並行で実行します。例外として、指定されたシェルコマンドが‘;’または‘;&’で終わる場合、バックグラウンドで実行されるシェルコマンドは、各ファイルにたいして順番に実行されます。Emacsは次のコマンドを実行する前に、呼び出したシェルコマンドが終了するのを待ちます。

!&のどちらも、シェルコマンドの作業ディレクトリーは、Diredバッファーのトップレベルのディレクトリーです。

!または&に複数ファイルを処理させる場合、シェルコマンド文字列は、シェルコマンドにそれらのファイルを渡す方法を決定します。

もっと複雑な方法でファイル名を繰り返すには、明示的なシェルループを使用したいと思うかもしれません。たとえば以下は、各ファイルをuuencodeして、入力ファイル名に‘.uu’を追加して出力ファイル名を作成する例です:

for file in * ; do uuencode "$file" "$file" >"$file".uu; done

以下は、‘`?`’表記による同じ例です:

uuencode ? ? > `?`.uu

コマンド!および&は、新しいファイル、または変更されたファイルを表示するために、Diredバッファーを更新しようとはしません。なぜならこれらのコマンドは、どのファイルが変更されたかを知らないからです。Diredバッファーを更新するには、gを使用します(Diredバッファーの更新を参照してください)。

Diredの外でシェルコマンドを実行する情報に関しては、単一のシェルコマンドを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.9 Diredでのファイル名の変更

このセクションでは、ファイル名を系統的な方法で変更する、Diredコマンドを説明します。各コマンドは、既存の名前を変換することにより作成される新しい名前を使って、マークされたファイルのいくつか、またはすべてのマークされたファイルを操作します。

基本的なDiredのファイル操作コマンド(ファイルにたいする操作を参照してください)と同じように、ここで説明するコマンドは次のnファイル、または‘*’でマークされたすべてのファイル、またはカレントファイルにたいして操作を行ないます(ファイルをマークする方法はDiredでのマークとフラグで説明されています)。

このセクションで説明するすべてのコマンドは、対話的に機能します。つまり候補となるファイルごとに確認を求めます。したがって、実際に操作が必要なファイルより多くのファイルを選択(たとえばregexpにより多くのファイルを選択)して、コマンドが確認を求めるときにyまたはnをタイプすることにより、選択されたファイルを絞り込むことができます。

% u

選択されたファイルを、大文字の名前にリネームします(dired-upcase)。古いファイル名がFoobarの場合、新しい名前はFOOBARになります。

% l

選択されたファイルを、小文字の名前にリネームします(dired-downcase)。古いファイル名がFoobarの場合、新しい名前はfoobarになります。

% R from RET to RET
% C from RET to RET
% H from RET to RET
% S from RET to RET

これら4つのコマンドは、それぞれリネーム、コピー、ハードリンクの作成、ソフトリンクの作成を行い、古いファイル名にたいして正規表現による置換を行って、新しい名前を作成します。

正規表現の置換を行なう4つのコマンドは、実際には選択されたファイルの名前にたいして検索と置換を行ないます。これらのコマンドは2つの引数を読み取ります。それは式fromと、置換パターンtoです。これらは古いファイル名にマッチしたfromを、toに置き換えます。replace-regexp (正規表現の置換を参照してください)のように、古い名前にマッチしたパターンの全体または一部を参照するために、toの中で‘\&’や‘\digit’を使用できます。正規表現がファイル名の複数の箇所にマッチする場合は、最初のマッチだけが置換されます。

たとえば% R ^.*$ RET x-\& RETは、選択された各ファイルの名前の前に‘x-’を追加してリネームします。逆に各ファイル名の前の‘x-’を削除することも可能です。1つは% R ^x-\(.*\)$ RET \1 RETとする方法です。他にも% R ^x- RET RETとする方法もあります(ファイル名の範囲を指定するために、アンカーへのマッチ‘^’および‘$’を使用しています)。

置換処理は通常、ファイルのディレクトリー名は考慮しません。これはディレクトリーにあるファイル名だけを操作します。しかし数引数を0にした場合、置換はディレクトリー名を含めた絶対ファイル名に作用します(非0の引数は、操作するファイルの個数を指定します)。

一連のファイルを操作対象に選択するために、それらを操作するときに使うのと同じ正規表現fromを使いたいと思うかもしれません。これを行なうには% m from RETでそれらのファイルをマークして、それらのファイルを操作するコマンドで同じ正規表現を使用します。もっと便利にするために、ファイルを操作する%コマンドは、最後の%コマンドで指定された正規表現をデフォルトで使用します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.10 Diredでのファイル比較

= (dired-diff)コマンドは、diffプログラムを使用して、カレントファイル(ポイント位置のファイル)と他のファイル(ミニバッファーを使用して指定)を比較します。ミニバッファーで指定されたファイルは、diffの1番目の引数となり、ポイント位置のファイルは2番目の引数になります。diffプログラムの出力は、Diffモードを使用するバッファーで表示されます(ファイルの比較を参照してください)。

リージョンがアクティブの場合、ミニバッファーを使って読み取られるファイル名のデフォルトは、マーク(Diredのマークではなく、Emacsの通常のマークのこと。マークのセットを参照してください)の位置のファイルになります。リージョンがアクティブでない場合、ポイント位置のファイルがバックアップファイル(バックアップファイルを参照してください)のときは、それがデフォルトになります。

ediff-filesを使用してファイルを比較することもできます。Major Entry Points in Ediff User’s Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.11 Diredでのサブディレクトリー

Diredバッファーは通常、1つのディレクトリーだけを表示しますが、オプションでサブディレクトリーも同様に含めることができます。

1つのDiredバッファーに複数のディレクトリーを含める一番簡単な方法は、lsにオプション‘-lR’を指定して実行する方方です(Diredを実行するとき数引数を指定すると、ミニバッファーでこれらのオプションを指定できます)。これはすべてのサブディレクトリーの、すべてのレベルにたいして、再帰的にディレクトリーを一覧します。

特定のサブディレクトリーだけを見たいときもあります。これはi (dired-maybe-insert-subdir)により行なうことができます:

i

サブディレクトリーの内容を、バッファーの最後に挿入します。

ディレクトリーを記述する行でこのコマンドを使用した場合、同じDiredバッファーにそのディレクトリーの内容を挿入して、そこに移動します。サブディレクトリーの内容は、‘ls -lR’の出力と同じように、Diredバッファーのトップレベルのディレクトリーの後に挿入されます。

サブディレクトリーの内容がすでにバッファーに表示されている場合、iコマンドはそこに移動するだけです。

どちらの場合もmiは移動する前にマークをセットするので、C-u C-SPCでDiredバッファーの元の位置に戻ることができます(マークのセットを参照してください)。‘^’を使って、同じDiredバッファーの親ディレクトリーに戻ることもできます(Diredのファイルをvisitするを参照してください)。

l (dired-do-redisplay)コマンドを使用すると、サブディレクトリーの内容を更新し、サブディレクトリーのヘッダー行でC-u kを使用すると、サブディレクトリーのリストを削除します(Diredバッファーの更新を参照してください)。挿入したサブディレクトリーを、隠したり表示したりすることもできます(サブディレクトリーを隠すを参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.12 Diredでのサブディレクトリーにたいするスイッチ

C-u iを使うことにより、lsのスイッチを指定して、Diredバッファーにサブディレクトリーを挿入できます。すでに挿入されたサブディレクトリーのlsスイッチを変更するには、その位置でC-u lを使用します。

バッファーをリバートしたとき、Diredはこれらのスイッチを保持します。サブディレクトリーを削除すると、それにたいするスイッチは忘れられます。

dired-undo (Diredでのマークとフラグを参照してください) を使用することにより、スイッチを明示的に指定して挿入されたサブディレクトリーにたいして、それらのスイッチを記憶する(または忘れる)ためのDiredの機構をバイパスして、それらのサブディレクトリーの再挿入または削除を行なうことができます。dired-undoを使用してサブディレクトリーを削除しても、それのスイッチは記憶されています。後でiを使ってサブディレクトリーを再挿入すると、これは古いスイッチを使用してサブディレクトリーを再挿入します。(dired-undoではなく)通常のDiredコマンドを使って削除されたサブディレクトリーを、dired-undoを使って再挿入すると、最初は古いスイッチを使ってサブディレクトリーを挿入します。しかしバッファーをリバートすると。バッファーのデフォルトのスイッチを使って再リストします。これが問題な場合、C-u iC-u lで、この状況を正すことができます。

DiredはRスイッチを記憶しません。Rスイッチを含むスイッチでサブディレクトリーを挿入すると、それはそのサブディレクトリーの各サブディレクトリーそれぞれにたいして、残りのスイッチを使用して挿入を行なうのと等価です。たとえばRで挿入されたサブディレクトリを更新またはkillしても、それのサブディレクトリーは更新またはkillされません。

バッファーのデフォルトスイッチは、明示的にスイッチを指定して挿入されたサブディレクトリーに影響を与えません。特にバッファーのスイッチを変更するsのようなコマンドは、そのようなサブディレクトリーに影響を与えません(しかし明示的にスイッチを割り当てられていないサブディレクトリーには影響します)。

M-x dired-reset-subdir-switchesを使うことにより、Diredにサブディレクトリーにたいするスイッチをすべて忘れさせて、すべてのサブディレクトリーを再びリストさせることができます。これはDiredのバッファーもリバートします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.13 サブディレクトリー間の移動

Diredバッファーがサブディレクトリーを一覧している場合、ディレクトリー全体を移動するためのページ移動コマンドC-x [およびC-x ]を使用することができます。

以下のコマンドは、ディレクトリー単位で移動したり、Diredバッファーのディレクトリーツリーを上下に移動します。これらのコマンドは、ディレクトリーヘッダー行に移動します。ディレクトリーヘッダー行とは、ディレクトリーの名前を示す行で、ディレクトリー内容の最初に表示されます。

C-M-n

ディレクトリーのレベルに関係なく、次のサブディレクトリーのヘッダー行に移動します(dired-next-subdir)。

C-M-p

ディレクトリーのレベルに関係なく、前のサブディレクトリーのヘッダー行に移動します(dired-prev-subdir)。

C-M-u

親ディレクトリーのヘッダー行に移動します(dired-tree-up)。

C-M-d

次のサブディレクトリーのヘッダー行に、ディレクトリーツリーを下に移動します(dired-tree-down)。

<

前のディレクトリーファイル行に、上へ移動します(dired-prev-dirline)。これは親ディレクトリーのファイルとして、ディレクトリーが記述されている行のことです。

>

次のディレクトリーファイル行に、下へ移動します(dired-next-dirline)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.14 サブディレクトリーを隠す

サブディレクトリーを隠すとは、ヘッダー行を除きそれを非表示にすることを意味します。

$

ポイント位置のサブディレクトリーを隠す、または表示します(dired-hide-subdir)。これは切り替えコマンドです。数引数は繰り返し回数として機能します。

M-$

Diredバッファーのすべてのサブディレクトリーを、ヘッダー行だけを残して隠します(dired-hide-all)。1つでも隠されたサブディレクトリーがある場合、すべてのサブディレクトリーを再表示します。非常に深いディレクトリーツリーの概観を得たり、離れた場所のサブディレクトリーに素早く移動するために、このコマンドを使うことができます。

通常のDiredコマンドは、隠されたサブディレクトリーの中のファイルは考慮しません。たとえばマークされたファイルを操作するコマンドは、たとえファイルがマークされていても、それが隠されたディレクトリーの中にある場合は、それらを無視します。したがって、サブディレクトリーのファイルにつけられたDiredマークを外さなくても、そのサブディレクトリーを一時的に隠せば、操作対象から除外することができます。

サブディレクトリーのリストを挿入する方法についてはDiredでのサブディレクトリーを、それを削除する方法についてはDiredバッファーの更新を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.15 Diredバッファーの更新

このセクションでは、外部(Diredではない)のディレクトリーやファイルに対する変更を反映してDiredバッファーを更新したり、Diredバッファーの一部を削除するコマンドを説明します。

g

Diredバッファーの内容全体を更新します(revert-buffer)。

l

指定したファイルを更新します(dired-do-redisplay)。lにたいするファイルの指定は、ファイル操作にたいするファイル指定と同じ方法で行ないます。

k

指定したファイル行(ファイルではなく、その行だけ)を削除します(dired-do-kill-lines)。

s

並び替えをアルファベット順、日時順に切り替えます(dired-sort-toggle-or-edit)。

C-u s switches RET

switchesdired-listing-switchesに使用して、Diredバッファーを更新します。

g (revert-buffer)とタイプすると、リストされたファイルやディレクトリーにたいする変更にもとづき、Diredバッファーの内容を更新します。消されたファイルを除き、すでにあるマークはすべて保持されます。隠されたサブディレクトリーも更新されますが、隠されたまま残ります。

いくつかのファイルだけ更新するには、l (dired-do-redisplay)とタイプします。Diredのファイル操作コマンドと同様に、このコマンドは次のnファイル(または前の-nファイル)、または(もしあれば)マークされたファイル、またはカレントファイルを操作します。ファイルの更新とは、ファイルの現在の状態を読み取り、バッファーの対応する行がその状態を示すように、その行を更新することを意味します。

サブディレクトリーのヘッダー行でlを使用した場合、対応するサブディレクトリーの内容を更新します。

C-x dや他のDiredコマンドを使用して、すでにDiredバッファーで表示されているディレクトリーをvisitする場合、Diredはそのバッファーに切り替えますが更新はしません。そのバッファーが最新でない場合、Diredはgをタイプして更新するよう警告を表示します。再visitしたとき、自動的にDiredバッファーをリバートするようEmacsに指示するには、変数dired-auto-revert-bufferを非nil値にセットしてください。

バッファーからファイル行 — 実際のファイルではなく ーーー を削除するには、k (dired-do-kill-lines)とタイプします。ファイル操作コマンドと同じように、このコマンドは次のnファイル、またはもしあればマークされたファイルを操作します。しかし、間違ってkをタイプしたとき面倒なので、カレントファイルは操作しません。

すでにDiredバッファーにサブディレクトリーとして挿入したディレクトリーファイル行で、k(Diredでのサブディレクトリーを参照)とタイプすると、これはサブディレクトリーのリストも同様に削除します。サブディレクトリーのヘッダー行でC-u kとタイプしても、Diredバッファーからサブディレクトリーの行を削除できます。

この方法でkillした個別の行はgで元通り表示されますが、サブディレクトリーについては、iを使ってサブディレクトリーを再挿入しなければなりません。

Diredバッファーのファイルは通常、ファイル名のアルファベット順で一覧されます。かわりにDiredは日時順でソートすることもできます。Diredコマンドs (dired-sort-toggle-or-edit)は2、つのソートモードを切り替えます。Diredバッファーのモードラインには、現在のソート方法がby nameやby dateのように示されます。

C-u s switches RETで、dired-listing-switchesに新しい値を指定できます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.16 Diredとfind

ファイルを選択するためにfindユーティリティーを使うことにより、Diredバッファーに表示する一連のファイルを、より柔軟に選択できます。

ワイルドカードパターンに名前がマッチするファイルを検索するには、M-x find-name-diredを使います。これは引数directorypatternを読み取り、directoryおよびそのサブディレクトリーで、名前がpatternにマッチするすべてのファイルを選択します。

これにより選択されたファイルはDiredバッファーに表示され、通常のDiredコマンドが利用可能です。

ファイルの名前ではなく内容をテストしたいときは、M-x find-grep-diredを使用します。ものコマンドはミニバッファーで2つの引数directoryregexpを読み取ります。これはdirectoryまたはそれのサブディレクトリーで、内容がregexpにマッチするすべてのファイルを選択します。このコマンドは、プログラムfindおよびgrepを実行することにより機能します。Emacs下でのGrepによる検索M-x grep-findも参照してください。正規表現を記述するときは、Emacsにたいしてではなく、grepにたいして記述することを忘れないでください(与えられたregexpに内容がマッチするファイルを表示する別の方法として、% g regexpがあります。Diredでのマークとフラグを参照してください)。

この系列でもっとも一般的なコマンドはM-x find-diredで、これはfindがテストできる任意の条件を指定することができます。これはミニバッファーで2つの引数directoryfind-argsを受け取ります。このコマンドは、findがどのような条件でテストを行なうかを指定するfind-argsを引数として、directoryfindを実行します。このコマンドを使うためには、findの使い方を理解する必要があります。

これらのコマンドで生成されるリストの書式は変数find-ls-optionにより制御されます。これは一対のオプションです。1番目にファイル一覧を生成するためにfindをどのように呼び出すか、2番目にその出力をDiredが解析するかを指定します。

コマンドM-x locateは、locateプログラムと似たインターフェースを提供します。M-x locate-with-filterも同様ですが、与えられた正規表現に名前がマッチするファイルだけを保持します。

これらのバッファーは、通常のDiredバッファーと完全に同じようには機能しません。ファイル操作は機能しますが、常にバッファーを自動的に更新するわけではありません。gでバッファーをリバートすると、挿入されたサブディレクトリーは削除され、フラグとマークはすべてリセットされます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.17 Diredバッファーの編集

Wdiredは、Diredバッファーを直接変更することによりファイル操作を行なうことができる、特別なモードです(“Wdired”の“W”は、“writable: 書き込み可能”が由来です)。Wdiredモードに入るには、DiredバッファーでC-x C-q (dired-toggle-read-only)とタイプします。かわりに、メニューアイテムの‘Immediate / Edit File Names’を使うこともできます。

Wdiredモードでは、Diredバッファーに表示されているファイルの名前を編集することにより、ファイルをリネームできます。矩形操作やquery-replaceも含めて、通常のEmacs編集コマンドがすべて利用できます。編集を終えたらC-c C-c (wdired-finish-edit)とタイプします。これにより変更が適用され、通常のDiredモードに戻ります。

単なるファイルのリネーム以外に、ファイルの新しい名前をタイプすることにより(絶対ファイル名でも相対ファイル名でも可)、ファイルを他のディレクトリーに移動することもできます。ファイルに削除のマークをつけるには、ファイル名全体を削除します。シンボリックリンクのリンク先を変更するには、リンク名の隣に表示されているリンク先の名前を編集します。

新たなサブディレクトリーを作成するためにファイル名を編集する場合、Wdiredはそれらの新たなディレクトリーを自動的に作成するでしょう。この振る舞いを抑止したい場合は、wdired-create-parent-directoriesnilにセットしてください。

ファイルサイズや修正時刻など、バッファーの残りのテキストは読み込み専用にマークされているので、編集できません。しかしwdired-allow-to-change-permissionstにセットした場合、ファイルのパーミッションを編集できます。たとえば‘-rw-r--r--’を‘-rw-rw-rw-’に変更することにより、そのファイルを誰でも書き込めるようにできます。これらの変更は、C-c C-cをタイプしたときに効果をもちます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.18 Diredでのイメージとサムネイルの閲覧

Image-Diredはイメージファイルをブラウズする機能です。これはイメージファイルにたいして、Emacs内または外部ビューアーを用いたサムネイルまたはフルサイズでの閲覧を提供します。これはEmacsバッファー内でイメージファイルをvisitするImageモードとは異なります(イメージファイルのvisitを参照)。

Image-Diredに入るには、Diredバッファーで見たいイメージファイルを、通常のようにmを使ってマークします。それからC-t d (image-dired-display-thumbs)とタイプします。これはマークしたファイルに対応するimage-diredのバッファーを作成して切り替えます。

M-x image-diredとタイプすることにより、直接Image-Diredに入ることもできます。これはディレクトリーの入力を求めるので、イメージファイルがあるディレクトリーを指定します。これによりそのディレクトリーにある、すべてのイメージファイルのサムネイルが作成され、それらはthumbnailバッファーに表示されます。ディレクトリーに大量のイメージファイルがある場合は長時間を要するため、イメージファイルの数が、image-dired-show-all-from-dir-max-filesを越える場合は確認を求めます。

thumbnailバッファーのサムネイルにポイントを移動して、RET (image-dired-display-thumbnail-original-image)とタイプすると、サイズ調整されたバージョンを別のウィンドウに表示します。これはイメージをウィンドウにフィットするようにサイズ調整します。バッファー内の移動は矢印キーを使用します。簡単にブラウズするには、次のイメージに移動して、それを表示するSPC (image-dired-display-next-thumbnail-original)を使用します。DEL (image-dired-display-previous-thumbnail-original)とタイプすると、前のサムネイルに戻って、かわりにそれを表示します。

イメージをオリジナルのサイズで閲覧するには、RETを押す前にプレフィクス引数(C-u)を与えるか、C-RET (image-dired-thumbnail-display-external)とタイプして、イメージを外部ビューアーで表示します。これは最初に、image-dired-external-viewerを設定しなければなりません。

Image-Diredを通じて、イメージを削除することもできます。d (image-dired-flag-thumb-original-file)とタイプすると、Diredバッファーでそのイメージに削除のフラグをつけます。thumbnailバッファーでC-d (image-dired-delete-char)とタイプすることにより、サムネイルイメージを削除することもできます。

さらに上級の機能として、イメージタグ(image tags)があります。これはイメージをカテゴリー分けするために使用されるメタデータです。このタグは、image-dired-db-fileにより設定されるプレーンテキストファイルに格納されます。

イメージファイルにタグ付けするには、それらをDiredバッファーでマークして(thumbnailバッファーでmをタイプして、Diredのファイルをマークすることもできます)、C-t t (image-dired-tag-files)とタイプします。このコマンドはミニバッファーでタグ名読み取ります。特定のタグをもつファイルをマークするには、C-t f (image-dired-mark-tagged-files)とタイプします。特定のタグをもつイメージファイルをマークした後は、C-t dを使ってそれらを閲覧することができます。

thumbnailバッファーから直接ファイルにタグ付けするにはt tとタイプし、タグを削除するにはt rとタイプします。各ファイルにたいして、“コメント”と呼ばれる特別なタグがあります(コメントは他のタグと正確に同じ意味でのタグではありません。コメントは若干異なる扱いをされるからです)。コメントタグは、イメージについてのコメントや説明を入力するのに使用されます。thumbnailバッファーでコメントするには、cとタイプします。これはコメントの入力を求めます。Diredからコメントを追加するには、C-t c (image-dired-dired-comment-files)とタイプしてください。

Image-Diredは、シンプルなイメージ操作も提供します。thumbnailバッファーでLとタイプすると、オリジナルのイメージを反時計回りに90度ローテートし、Rで時計回りにローテートします。このローテーションは損失がなく、jpegtranと呼ばれる外部ユーティリティーを使用し、これは最初にインストールする必要があります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

30.19 その他のDiredの機能

コマンド+ (dired-create-directory)はディレクトリー名を読み取り、そのディレクトリーを作成します。そのディレクトリーがすでに存在する場合は、エラーをシグナルします。

このコマンド(dired-create-empty-file)はファイル名を読み取りファイルを作成します。そのファイルがすでに存在すればエラーをシグナルします。

コマンドM-s a C-s (dired-do-isearch)は、マークされたファイルにたいして、複数ファイルにたいするインクリメンタル検索を開始します。ファイル終端で検索が失敗した場合、C-sとタイプすると、マークされた次のファイルで検索を繰り返します。マークされた最後のファイルの終端に達すると、マークされた最初のファイルに戻って検索します。コマンドM-s a M-C-s (dired-do-isearch-regexp)は、同じことを正規表現検索で行ないます。検索の繰り返しに関する情報は、インクリメンタル検索の繰り返しを参照してください。

コマンドw (dired-copy-filename-as-kill)は、マークされたファイル(または次のnファイル)の名前を、あたかもC-wでkillしたかのように、killリングに配します。ファイル名はスペースで区切られます。

プレフィクス引数に0を指定した場合、マークされた各ファイルの絶対ファイル名を使用します。プレフィクス引数にC-uだけを指定した場合、Diredバッファーのデフォルトディレクトリーからの相対ファイル名を使用します(サブディレクトリーから行なった場合はスラッシュが含まれます)。特別なケースとして、ポイントがディレクトリーのヘッダー行にある場合、wで、そのディレクトリーの絶対パスを得ることができます。この場合、プレフィクス引数とマークされたファイルは無視されます。

このコマンドの主な目的は、他のEmacsコマンドの引数として、ファイル名をyankすることです。これはkillリングに何が追加されたかも表示するので、現在マークされているファイルを、エコーエリアに表示するためにも使用できます。

ファイルリストの中にHTMLファイルがある場合は、そのファイルをブラウザで閲覧できると便利かもしれません。W (browse-url-of-dired-file)コマンドは、そのファイルの閲覧に標準に設定されたブラウザを使用します。

コマンド( (dired-hide-details-mode)は、カレントのDiredバッファーでの、ファイル所有者やファイルパーミッションなどの、詳細表示を切り替えます。デフォルトでは、シンボリックリンクのリンク先や、ヘッダー行とファイルやディレクトリーの一覧以外のすべての行も隠します。これを変更するには、オプションdired-hide-details-hide-symlink-targetsdired-hide-details-hide-information-linesをカスタマイズしてください。

visitしているディレクトリーが、バージョンコントロール(バージョンコントロール)の配下にある場合、選択されたファイルにたいして、通常のVC diffおよびVC logコマンドが処理を行ないます。

コマンドM-x dired-compare-directoriesは、カレントのDiredバッファーと、他のディレクトリーを比較するために使用されます。2つのディレクトリーで異なる、すべてのファイルがマークされます。カレントのDiredバッファーも含めて、それらのファイルをリストする、すべてのDiredバッファーでマークが付されます。

(入力を求められたときRETをタイプすると使用される)デフォルトの比較方法では、ファイル名だけを比較します — つまり別のディレクトリーに存在しないファイルは、異なります。Lisp式を入力して、より厳密な比較を指定することができます。この場合、変数size1size2はファイルサイズ、mtime1mtime2は最終修正時刻を秒で表した浮動小数点数、fa1fa2はファイルの属性リスト(関数file-attributesで返される形式)です。この比較は、同じ名前のファイルごとに評価され、式の値が非nilの場合、それらのファイルは異なります。

たとえばシーケンスM-x dired-compare-directories RET (> mtime1 mtime2) RETは、別のディレクトリーよりこのディレクトリーのファイルが新しい場合はマークし、このディレクトリーより別のディレクトリーのファイルが古い場合にマークします。相手がいないファイルも、両方のディレクトリーでマークが付されます。

X Windowシステムでは、Emacsはドラッグアンドドロップをサポートします。ファイルオブジェクトを他のプログラムにドラッグしたり、Diredバッファーにドロップできます。これは、そのディレクトリーのファイルの移動、コピー、またはリンクを作成します。正確に言うと、どのアクションが選択されるかは、プログラムの動作により決定されます。Diredバッファーの外へのファイルのドラッグは、現在のところサポートされていません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31 カレンダーとダイアリー

Emacsは、過去のイベントや将来のプランのためのダイアリーをもつ、卓上カレンダー機能を提供します。これにはアポイントメントを管理したり、特定のプロジェクトにどれだけ時間を費やしているか追跡する機能もあります。

カレンダーを起動するには、M-x calendarとタイプします。これは3ヶ月分のカレンダーを表示します。当月が中央に表示され、今日の日付にポイントが配されます。C-u M-x calendarのように数引数を指定すると、3ヶ月カレンダーの中央に表示する、月と年の入力を求めます。カレンダーは自身のバッファーを使用し、メジャーモードはCalendarモードです。

カレンダーの中でmouse-3をクリックすると、特定の日付にたいする操作メニューが表示されます。mouse-2をクリックすると、特定の日付とは関係のない、一般的に使用されるカレンダー機能のメニューが表示されます。カレンダーを終了するには、qとタイプします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.1 カレンダーでの移動

Calendarモードは日、週、月、年のような論理的な単位で、カレンダーを移動するコマンドを提供します。最初に表示されている3ヶ月の外に移動すると、カレンダーの表示は選択された日付が表示されるように、自動的にスクロールします。ある日付に移動することにより、その日が何の休日かを表示したり、ダイアリーのエントリーを表示したり、他のカレンダーに変換できます。単にカレンダーをスクロールするのは、長い期間を移動するのにも便利です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.1.1 標準的な時間間隔での移動

カレンダーバッファーでの移動コマンドは、テキスト内での移動コマンドと似ています。日、週、月、年を前方および後方に移動できます。

C-f

ポイントを、1日前方に移動します(calendar-forward-day)。

C-b

ポイントを、1日後方に移動します(calendar-backward-day)。

C-n

ポイントを、1週前方に移動します(calendar-forward-week)。

C-p

ポイントを、1週後方に移動します(calendar-backward-week)。

M-}

ポイントを、1月前方に移動します(calendar-forward-month)。

M-{

ポイントを、1月後方に移動します(calendar-backward-month)。

C-x ]

ポイントを、1年前方に移動します(calendar-forward-year)。

C-x [

ポイントを、1年後方に移動します(calendar-backward-year)。

dayおよびweekのコマンドは、文字単位または行単位で移動するためのEmacsコマンド、自然に類似しています。通常C-nは、後続の行の同じ列に移動しますが、Calendarモードでは翌週の同じ日に移動します。C-pは、前の週の同じ日に移動します。

他のモードで通常振る舞うように、矢印キーはC-fC-bC-nC-pと等価です。

月単位および年単位の移動のためのコマンドは、週単位の移動コマンドに似ていますが、より長い期間を移動します。monthコマンドのM-}およびM-{は、月全体を前方または後方に移動します。yearコマンドのC-x ]およびC-x [は、年全体を前方または後方に移動します。

これらのコマンドを簡単に覚える方法は、月および年が、テキストのパラグラフとページに類似するものだと考えることです。しかし、カレンダーの移動コマンド自体は、テキスト間の移動コマンドと非常に類似している訳ではありません。Emacsのパラグラフコマンドは通常、パラグラフの先頭または最後に移動しますが、月コマンドと年コマンドは、月または年の同じ日を保ちながら、月単位または年単位で移動します。

これらのコマンドは、繰り返し回数として数引数を受け取ります。Calendarモードでは便宜上、メタ修飾なしの数字キーとマイナス記号で、数引数を指定できます。たとえば100 C-fは、現在の位置から100日前方へポイントを移動します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.1.2 週、月、年の開始と終了

週(または月や年)は、単に日が集まったものではなく、特定に日付から開始されると考えます。そのためCalendarモードは週、月、年の、最初と最後に移動するコマンドを提供します。

C-a

週の最初にポイントを移動します(calendar-beginning-of-week)。

C-e

週の最後にポイントを移動します(calendar-end-of-week)。

M-a

月の最初にポイントを移動します(calendar-beginning-of-month)。

M-e

月の最後にポイントを移動します(calendar-end-of-month)。

M-<

年の最初にポイントを移動します(calendar-beginning-of-year)。

M->

年の最後にポイントを移動します(calendar-end-of-year)。

これらのコマンドは繰り返し回数として数引数を受け取り、繰り返し回数で、何週、何ヶ月、何年前方または後方へ移動するかを示します。

デフォルトでは、週は日曜日から開始されます。週が月曜日から開始されるようにするには、変数calendar-week-start-dayを1にセットします。どの日付ヘッダーを週末としてハイライトするか変更するには、変数calendar-weekend-daysをセットしてください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.1.3 日付の指定

Calendarモードは、さまざまな方法で、指定された特定の日付へ移動するコマンドを提供します。

g d

指定した日付にポイントを移動します(calendar-goto-date)。

g D

年の指定された日にポイントを移動します(calendar-goto-day-of-year)。

g w

年の指定された週にポイントを移動します(calendar-iso-goto-week)。

o

指定された月をカレンダーの中央にします(calendar-other-month)。

.

今日の日付にポイントを移動します(calendar-goto-today)。

g d (calendar-goto-date)は年、月、月の何日目かの入力を求め、その日付に移動します。カレンダーは西暦の最初からすべての日付を含むので、年は全部タイプしなければなりません。つまり、‘10’ではなく‘2010’とタイプしてください。

g D (calendar-goto-day-of-year)は、年と日数の入力を求め、その日付に移動します。負の日数は年の最後から後方に数えます。g w (calendar-iso-goto-week)は、年と週数の入力を求め、その週に移動します。

o (calendar-other-month)は、月と年の入力を求め、3ヶ月カレンダーの中央にその月を配します。

. (calendar-goto-today)で今日の日付に戻ることができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.2 カレンダーでのスクロール

カレンダーの表示は、ポイントが表示部分の外に移動すると、自動的にスクロールします。手動でスクロールすることもできます。カレンダーのウィンドウに、月が書き込まれた細長い紙が含まれているのを想像してみてください。カレンダーのスクロールとは、この紙を水平方向に動かして、そのウィンドウに新しい月を表示することを意味します。

>

カレンダーを1月前方にスクロールします(calendar-scroll-left)。

<

カレンダーを1月後方にスクロールします(calendar-scroll-right)。

C-v
PageDown
next

カレンダーを3月前方にスクロールします(calendar-scroll-left-three-months)。

M-v
PageUp
prior

カレンダーを3月後方にスクロールします(calendar-scroll-right-three-months)。

もっとも基本的なカレンダーのスクロールコマンドは、1度に1月スクロールします。これはコマンドの前後の表示で、2月がオーバーラップして表示されることを意味します。>は内容を、1度に1月前方にスクロールします。<は内容を、1度に1月後方にスクロールします。

コマンドC-vおよびM-vは、カレンダーを画面全体 — つまり3月スクロールします。この動作は、これらのコマンドが通常意味する動作と類似しています。C-vは後の日付を表示し、M-vは前の日付を表示します。これらのコマンドは、繰り返し回数として数引数を受け取ります。特にC-uは次のコマンドを4倍するので、C-u C-vは1年前方にカレンダーをスクロールし、C-u M-vは1年後方にカレンダーをスクロールします。

他のモードのときと同様に、ファンクションキーのPageDown (またはnext)とPageUp (またはprior)は、C-vM-vと等価です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.3 日付のカウント

M-=

カレントリージョン内の日数を表示します(calendar-count-days-region)。

ある範囲の日数を数えるには、C-SPCで日付をマークし、他の日付にポイントを移動して、M-= (calendar-count-days-region)とタイプします。表示される日数は包括的(inclusive)です。つまりマークとポイントで指定された日も、日数に含まれます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.4 その他のカレンダーコマンド

p d

day-in-year(1年で何日目か)を表示します(calendar-print-day-of-year)。

C-c C-l

カレンダーウィンドウを再生成します(calendar-redraw)。

SPC

次のウィンドウを上にスクロールします(scroll-other-window)。

DEL
S-SPC

次のウィンドウを下にスクロールします(scroll-other-window-down)。

q

カレンダーをexitします(calendar-exit)。

年の初めからの経過日数と、年の最後までの残り日数を表示するには、p d command (calendar-print-day-of-year)とタイプします。これは、それら両方の日数をエコーエリアに表示します。経過日数には選択された日付も含まれます。残り日数に、その日は含まれません。

カレンダーウィンドウのテキストがおかしくなった場合は、再描画するためにC-c C-l (calendar-redraw)とタイプします(これはCalendarモード以外のモードの編集コマンドを使ったときだけ発生します)。

Calendarモードでは、SPC (scroll-other-window)とDEL (scroll-other-window-down)を使って、(もしあれば)他のウィンドウを上または下にスクロールします。これは休日のリストやダイアリーのエントリーを他のウィンドウに表示しているときなどに便利です。

カレンダーからexitするには、q (calendar-exit)とタイプします。これはカレンダーに関連するすべてのバッファーを隠し(bury)、他のバッファーを選択します(フレームがカレンダー専用のウィンドウを含む場合、カレンダーをexitすることによりそのフレームは、削除またはアイコン化されます。これは変数calendar-remove-frame-by-deletingの値に依存します)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.5 カレンダーファイルの記述

カレンダーとダイアリーのエントリーを、HTMLやLaTeXに書き出すことができます。

Calendar HTMLコマンドは、カレンダー、休日、ダイアリーのエントリーを含む、HTMLコードのファイルを生成します。各ファイルは1ヶ月に対応し、yyyy-mm.htmlという形式の名前をもちます。ここでyyyyは4桁の年、mmは2桁の月です。変数cal-html-directoryは、HTMLファイルのためのデフォルトの出力先ディレクトリーを指定します。休日が表示されないようにするには、cal-html-holidaysをカスタマイズしてください。

<>で囲まれたダイアリーのエントリー(たとえば、this is a diary entry with <font color=”red”>some red text</font>)は、HTMLタグと解釈されます。HTMLファイルを含むディレクトリーの中にあるスタイルシートcal.cssを通じて、表示されるHTMLページの全体的な外観を変更できます(関連するスタイルセッティングについては、変数cal-html-css-defaultの値を参照してください)。

H m

1ヶ月のカレンダーを生成します(cal-html-cursor-month)。

H y

1年の各月のカレンダーファイルを生成し、同様にインデックスページも生成します(cal-html-cursor-year)。デフォルトでは、このコマンドはファイルをサブディレクトリーyyyyに書き込みます。これを変更した場合、各年の間のハイパーリンクは機能しなくなるでしょう。

変数cal-html-print-day-number-flagが非nilの場合、マンスリーカレンダーにはday-of-the-year(年の何日目か)の数字が表示されます。変数cal-html-year-index-colsは、年のインデックスページの列数を指定します。

Calendar LaTeXコマンドは、カレンダーとしてプリントされるLaTeXコードのバッファーを生成します。どのコマンドを使うかにより、プリントされるカレンダーは、ポイントのある日、週、月、年をカバーします。

t m

1ヶ月のカレンダーを生成します(cal-tex-cursor-month)。

t M

横向き印刷(sideways-printing)で、1ヶ月のカレンダーを生成します(cal-tex-cursor-month-landscape)。

t d

1日のカレンダーを生成します(cal-tex-cursor-day)。

t w 1

時間を併記した、1週間の1ページカレンダーを生成します(cal-tex-cursor-week)。

t w 2

時間を併記した、1週間の2ページカレンダーを生成します(cal-tex-cursor-week2)。

t w 3

時間なしで、1週間のISOスタイルのカレンダーを生成します(cal-tex-cursor-week-iso)。

t w 4

時間を併記した、月曜で始まる1週間のカレンダーを生成します(cal-tex-cursor-week-monday)。

t w W

時間なしで、1週間の2ページカレンダーを生成します(cal-tex-cursor-week2-summary)。

t f w

2週間を見開きする、Filofaxスタイルのカレンダーを生成します(cal-tex-cursor-filofax-2week)。

t f W

1週間を見開きする、Filofaxスタイルのカレンダーを生成します(cal-tex-cursor-filofax-week)。

t y

1年のカレンダーを生成します(cal-tex-cursor-year)。

t Y

横向き印刷(sideways-printing)で、1年のカレンダーを生成します(cal-tex-cursor-year-landscape)。

t f y

1年のFilofaxスタイルのカレンダーを生成します(cal-tex-cursor-filofax-year)。

これらのコマンドの中には、カレンダーを(ランドスケープモードで)横向きに印刷するものがあり、その場合は縦長ではなく横長になります。Filofaxの用紙サイズ(3.75in x 6.75in)を使うものもあります。これらのコマンドはすべてプレフィクス引数を指定でき、これは何日、何週間、何ヶ月、何年分を印刷するかを指定します(常に選択された日付から開始されます)。

変数cal-tex-holidaysが非nil(デフォルト)の場合、プリンとされたカレンダーにはcalendar-holidaysの休日が表示されます。変数cal-tex-diaryが非nil(デフォルトはnil)の場合、ダイアリーのエントリーも含まれます(マンスリー、Filofax、isoの週カレンダーのみ)。変数cal-tex-rulesが非nil(デフォルトはnil)の場合、カレンダーは充分な空間のある、罫線ページのスタイルで表示されます。そのカレンダーがどんな機能をサポートするかは、個別のcal-tex関数のドキュメントを参照してください。

必要なら、変数cal-tex-preamble-extraを使用して、生成されたドキュメントのプリアンブル(preamble)に、追加のLaTeXコマンドを挿入できます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.6 休日

Emacsのカレンダーは、多くのメジャーおよびマイナーな休日を知っており、それらを表示することができます。デフォルトリストに、あなた自身の休日を追加できます。

mouse-3 Holidays
h

選択された日付の休日を表示します(calendar-cursor-holidays)。

x

カレンダーウィンドウの休日をマークします(calendar-mark-holidays)。

u

カレンダーウィンドウのマークを外します(calendar-unmark)。

a

表示された3ヶ月の休日を別のウィンドウにリストします(calendar-list-holidays)。

M-x holidays

今日を含む3ヶ月の休日を別のウィンドウにリストします。

M-x list-holidays

年の指定した範囲の休日を別のウィンドウにリストします。

ある日付が休日かどうか見るには、カレンダーウィンドウのその日付にポイントを置いて、hコマンドを使用します。その日付をmouse-3でクリックして表示されるメニューで、Holidaysを選択しても見ることができます。どちらの方法も、その日付にたいする休日を、エコーエリアか、エコーエリアに収まらない場合は別のウィンドウに表示します。

カレンダーに表示された、すべての日付にたいする休日の分布を閲覧するには、xコマンドを使用します。これは休日を異なるフェイスで表示します。 calendar-holiday-markerを参照してください。 このコマンドは、現在表示されている月と、スクロールすることにより見ることができる他の月の両方に適用されます。マークをオフにして現在のマークを消すには、uをタイプします。これはダイアリーマークも消します(ダイアリーを参照してください)。変数calendar-mark-holidays-flagが非nilの場合、カレンダーの作成または更新により、自動的に休日がマークされます。

さらに詳細な情報を得るには、aコマンドを使用します。これはカレントの3ヶ月の範囲のすべての休日を含むリストを、別のバッファーに表示します。カレンダーウィンドウでSPCおよびDELを使用することにより、そのリストを上または下にスクロールできます。

コマンドM-x holidaysは、今月および前月と来月の休日のリストを表示します。これはカレンダーウィンドウがないときでも機能します。変数calendar-view-holidays-initially-flagが非nilの場合、カレンダーの作成により、休日がこの方法で表示されます。違う月を中心にした3ヶ月の休日リストが欲しい場合は、月と年の入力を求めるC-u M-x holidaysを使用してください。

Emaceが知っている休日には、United States、major Bahá’í、Chinese、Christian、Islamic、Jewishの休日、および夏至と冬至(solstices)、春分と秋分(equinoxes)が含まれます。

M-x holiday-listは、ある年の範囲にたいする休日のリストを表示します。この関数は年の開始と終了の入力を求め、すべての休日、または複数のカテゴリーの中の1つのカテゴリーに属する休日を選択することができます。このコマンドは、カレンダーウィンドウがないときでも使用することができます。

休日に使用される日付は、歴史的事実ではなく、現在の慣習(current practice)にもとづきます。たとえばVeteran’s Day(退役軍人の日)は1919年に始まった休日ですが、それより前の年でも表示されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.7 日の出と日の入りの時刻

特別なカレンダーコマンドにより、任意の日付にたいする日の出(sunrise)と日の入り(sunset)の時刻を、1、2分の範囲で調べることができます。

mouse-3 Sunrise/sunset
S

選択された日付の、日の出と日の入りの時刻を表示します(calendar-sunrise-sunset)。

M-x sunrise-sunset

今日の日の出と日の入りの時刻を表示します。

C-u M-x sunrise-sunset

指定した日付の日の出と日の入りの時刻を表示します。

M-x calendar-sunrise-sunset-month

選択された月の日の出と日の入りの時刻を表示します。

カレンダーからは、見たい日付にポイントを移動してSをタイプすると、エコーエリアに日の出と日の入りの時刻を、地方時間で表示します。日付をmouse-3でクリックし、表示されたメニューの‘Sunrise/sunset’を選択しても表示することができます。今日、または指定した日付にたいしてこの情報を表示するために、カレンダーの外からでも、コマンドM-x sunrise-sunsetが利用可能です。今日以外の日付を指定するには、年、月、日の入力を求めるC-u M-x sunrise-sunsetを使用してください。

C-u C-u M-x sunrise-sunsetにより、任意の地域の任意の日付にたいして、日の出と日の入りの時刻を表示できます。これは経度(longitude)、緯度(latitude)、調整済みグリニッジ平均時(Coordinated Universal Time)との分差、日付の入力を求め、その地域の、その日付の日の出と日の入りの時刻を表示します。

日の出と日の入りの時刻は地球上の位置に依存するので、これらのコマンドを使用する前に、Emacsに経度(latitude)、緯度(longitude)、地域名(location name)を指定する必要があります。以下は何をセットするかの例です:

(setq calendar-latitude 40.1)
(setq calendar-longitude -88.2)
(setq calendar-location-name "Urbana, IL")

calendar-latitudecalendar-longitudeには、小数点以下1位までの数値を使用します。

タイムゾーン(time zone)も、地方時間での日の入りと日の出の時刻に影響を与えます。Emacsは通常、タイムゾーンの情報をオペレーティングシステムから得ますが、その情報が間違っている場合(またはオペレーティングシステムがその情報を提供しない場合)、これらを自分でセットしなければなりません。以下は例です:

(setq calendar-time-zone -360)
(setq calendar-standard-time-zone-name "CST")
(setq calendar-daylight-time-zone-name "CDT")

calendar-time-zoneの値は地方標準時(local standard time)と、調整済みグリニッジ平均時(Coordinated Universal Time)、またはグリニッジ時(Greenwich time: GMT)との分差です。calendar-standard-time-zone-namecalendar-daylight-time-zone-nameの値は、あなたのタイムゾーンで使用される略語です。Emacsは、サマータイム(daylight saving time)で調整済みの、日の出と日の入りの時刻を表示します。サマータイムが決定される方法については、サマータイムを参照してください。

ユーザーとしては.emacsで、普段いる場所をカレンダーの位置変数にセットすると便利だと思うかもしれません。システム管理者としては、default.elで、すべてのユーザーにたいして、これらの変数をセットしたいと思うかもしれません。Emacs初期化ファイルを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.8 月の位相

以下のカレンダーコマンドは、月の位相(phases of the moon)、つまり新月(new moon)、上弦(first quarter)、満月(full moon)、下弦(last quarter)の日付と時刻を表示します。この機能は、月の位相に依存する問題をデバッグするのに便利です。

M

表示されている3ヶ月にたいして、月のすべての4位相の日付と時刻を表示します(calendar-lunar-phases)。

M-x lunar-phases

今日を含む3ヶ月にたいして、月のすべての4位相の日付と時刻を表示します。

カレンダーからはMを使用して、カレントの3ヶ月の範囲での月の位相を、別のバッファーに表示します。数分の誤差で、日付と時刻がリストされます。

カレンダーの外からは、コマンドM-x lunar-phasesで今月と前後1ヶ月の、月の位相のリストが表示されます。違う月についての情報は、月と年の入力を求めるC-u M-x lunar-phasesを使用してください。

月の位相にたいして与えられる日付と時刻は、(それが適切なときはサマータイム調整されて)地方時間で与えられます。前のセクションの議論を参照してください。日の出と日の入りの時刻を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.9 他のカレンダーとの間の変換

Emacsのカレンダーは、常にグレゴリオ暦(Gregorian calendar)で表示されます。これは、新暦(New Style calendar)と呼ばれることもあり、今日では世界のほとんどで使用されています。しかし、このカレンダーは16世紀より前には存在しておらず、、18世紀より前は広く使われていませんでした。ユリウス暦(Julian calendar)を置き換えて、世界的に受け入れられたのも20世紀初頭です。Emacsカレンダーは、西暦1年1月から任意の月を表示できますが、グレゴリオ歴がまだ存在しない日付にたいしても、カレンダーは常にグレゴリオ暦で表示されます。

Emacsは他のカレンダーを表示できませんが、日付を他のカレンダーに変換することができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.9.1 サポートされるカレンダーシステム

ISO商用暦(ISO commercial calendar)は、ビジネスで使われることがあります。

ユリウス暦(Julian calendar)は、ジュリアス・シーザー(Julius Caesar)から名前がつけられたカレンダーで、中世ヨーロッパで使用され、19世紀まで多くの国で使用されてきました。

天文学者は、ユリウス歴のBC4713年1月1日正午からの、単純な通算日を使用します。この経過日はユリウス日(Julian day: JD)、または天文日(Astronomical day)と呼ばれます。

ヘブライ暦(Hebrew calendar)は伝統的にユダヤ教(Jewish religion)で使用されます。EmacsのカレンダープログラムはJewishの休日を決定するためにヘブライ暦を使用します。ヘブライ暦では日没が1日の開始と終了です。

イスラム暦(Islamic calendar)は、主にIslamic国で広く使用されます。EmacsはIslamicの休日の日付を決定するのに、これを使用します。Islamicの世界では、カレンダーについての世界的な取り決めが存在しません。Emacsは広く受け入れられているバージョンを使用しますが、Islamicの休日の正確な日付は、計算によってではなく、宗教的な権威による公告に依存することがしばしばあります。結果として、行事の正確な日付はEmacsが計算する日付と若干違う場合があります。イスラム暦では、日没が1日の開始と終了です。

フランス革命暦(French Revolutionary calendar)は、より非宗教的で自然にもとづいた観点により1年のサイクルを表すために、1789年の革命後にジャコバン派(Jacobins)により作成されました。これはメートル法のような、合理的な目安により1週が10日に設定されます。フランス政府は1805年の終わりに、このカレンダーを公式に放棄しました。

中央アメリカのマヤには、互いに個別で重複した3つのカレンダーシステムlong counttzolkinhaabがあります。Emacsはこれら3つのカレンダーすべてを知っています。専門家はマヤのカレンダーと私たちのカレンダーとの正確な関連を議論しています。Emacsは、Goodman-Martinez-Thompsonの相関関係を使用して計算を行ないます。

コプト教徒(Copts: エジプト教会のクリスチャン)は、エジプト古代の太陽暦にもとづいたカレンダーを使用します。彼らのカレンダーは30日からなる12の月と、その後に余分の5日が含まれます。4年に1度、余分な5日に閏日を加えて6日とします。エチオピア暦は構造的に同じですが、異なる年数と月の名前をもちます。

ペルシャ人は、Omar Khayyamのデザインにもとづく太陽暦を使用します。かれらのカレンダーは12の月を含み、最初の6ヶ月は31日、次の5ヶ月は30日、最後の月は、通常の年は29日で、閏年は30日です。閏年は4年または5年後との複雑なパターンで発生します。ここで実装されているカレンダーは、Birashkにより指示されている数学的なペルシャ歴で、2820年周期にもとづいています。天文学的なペルシャ暦との違いは、それが天文学的なイベントにもとづいている点です。これを記述している時点で、2つの歴に最初に矛盾が発生すると予測されるのは、2025年の3月20日です。現時点では、そのときのイランの公式カレンダーが何になるかは、明確ではありません。

旧暦(Chinese calendar)は、太陽年に太陰月を組み込んだ複雑なシステムです。年は60周期で、各年は通常の年は12ヶ月、閏年は13ヶ月です。各月は通常の月は29日または30日です。年、通常月、日は10のcelestial stemsと、12のterrestrial branchesの組み合わせにより名前がつけられ、これが合計で60個の名前となり、60回周期で繰り返されます。

Bahá’íのカレンダーシステムは、19日を持つ19ヶ月の太陽周期にもとづきます。のこり4日の閏日(intercalary days)は、18ヶ月目と19ヶ月目の間に配されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.9.2 他のカレンダーへの変換

以下のコマンドは、選択された日付(ポイント位置の日付)をさまざまなカレンダーシステムで記述します:

mouse-3 Other calendars
p o

選択された日付を、他のさまざまなカレンダーで表示します(calendar-print-other-dates)。

p c

選択された日付を、ISO商用暦(ISO commercial calendar)で表示します(calendar-iso-print-date)。

p j

選択された日付を、ユリウス日(Julian date)で表示します(calendar-julian-print-date)。

p a

選択された日付を、ユリウス日にもとづく天文日(astronomical day)で表示します(calendar-astro-print-day-number)。

p h

選択された日付を、ヘブライ暦の日付(Hebrew date)で表示します(calendar-hebrew-print-date)。

p i

選択された日付を、イスラム暦の日付(Islamic date)で表示します(calendar-islamic-print-date)。

p f

選択された日付を、フランス革命暦の日付(French Revolutionary date)で表示します(calendar-french-print-date)。

p b

選択された日付を、Bahá’í dateで表示します(calendar-bahai-print-date)。

p C

選択された日付を、旧暦の日付(Chinese date)で表示します(calendar-chinese-print-date)。

p k

選択された日付を、Coptic dateで表示します(calendar-coptic-print-date)。

p e

選択された日付を、Ethiopic dateで表示します(calendar-ethiopic-print-date)。

p p

選択された日付を、ペルシャ暦の日付(Persian date)で表示します(calendar-persian-print-date)。

p m

選択された日付を、マヤ暦の日付(Mayan date)で表示します(calendar-mayan-print-date)。

変換したい日付にポイントを移動して、上記のテーブルからpで始まる適切なコマンドをタイプします。プレフィクスのpは、“print”のニーモニックです。これは、Emacsが」変換した日付を、エコーエリアに“プリント”するからです。p oは日付を、Emacsが知るすべての形式で表示します。mouse-3でクリックして表示されるメニューから、Other calendarsを選択することもできます。これは、日付をEmacsが知るすべての形式でメニュー形式で表示します(メニュー形式で表示されるさまざまな形式の日付を選択しても、何もおこりません。この場合、メニューは表示のためだけに使用されます)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.9.3 他のカレンダーからの変換

サポートされている他のカレンダーで日付を指定して、その日付に移動することができます。このセクションでは、マヤ暦以外のカレンダーを使用してこれを行なうコマンドを説明します。マヤ暦については、以降のセクションを参照してください。

g c

ISO商用暦(ISO commercial calendar)で指定された日付に移動します(calendar-iso-goto-date)。

g w

ISO商用暦で指定された週に移動します(calendar-iso-goto-week)。

g j

ユリウス暦(Julian calendar)で指定された日付に移動します(calendar-julian-goto-date)。

g a

ユリウス暦にもとづく天文日で指定された日付に移動します(calendar-astro-goto-day-number)。

g b

Bahá’í calendarで指定された日付に移動します(calendar-bahai-goto-date)。

g h

ヘブライ暦(Hebrew calendar)で指定された日付に移動します(calendar-hebrew-goto-date)。

g i

イスラム暦(Islamic calendar)で指定された日付に移動します(calendar-islamic-goto-date)。

g f

フランス革命暦(French Revolutionary calendar)で指定された日付に移動します(calendar-french-goto-date)。

g C

旧暦(Chinese calendar)で指定された日付に移動します(calendar-chinese-goto-date)。

g p

ペルシャ暦(Persian calendar)で指定された日付に移動します(calendar-persian-goto-date)。

g k

コプト暦(Coptic calendar)で指定された日付に移動します(calendar-coptic-goto-date)。

g e

エチオピア暦(Ethiopic calendar)で指定された日付に移動します(calendar-ethiopic-goto-date)。

これらのコマンドは、他のカレンダーの日付の入力を求め、その日付と等価なグレゴリオ暦(Ethiopic calendar)の日付に移動して、他のカレンダーの日付をエコーエリアに表示します。Emacsは月の名前を入力するとき、常に強い補完(補完の終了を参照してください)を使うので、ヘブライ、イスラム、フランスの名前のスペルを心配する必要はありません。

ヘブライ暦に関する一般的な問題として、yahrzeitと呼ばれる死亡日にたいする記念日の計算があります。Emacsのカレンダーには、そのような計算の機能が含まれています。カレンダーにいるときは、コマンドM-x calendar-hebrew-list-yahrzeitsにより、まず年の範囲の入力を求め、ポイント位置の日付により、それらの年のyahrzeitの日付のリストを表示します。カレンダーにいないときは、このコマンドは最初に死亡日、次に年の範囲の入力を求め、yahrzeitの日付の一覧を表示します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.10 ダイアリー

Emacsのダイアリーはカレンダーと共に、日常のアポイントメントやその他のイベントを管理します。ダイアリー機能を使うには、最初にイベントとその日付を含むダイアリーファイル(diary file)を作成しなければなりません。Emacsは今日、近い将来、指定された日付のイベントを自動的にピックアップして表示します。

ダイアリーの作成を手作業で行なおうと考えているかもしれませんが、Emacsはダイアリーのエントリーを閲覧、追加、変更するいくつかのコマンドを提供します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.10.1 ダイアリーファイル

ダイアリーファイル(diary file)とは、特定の日付に関連付けられたイベントを記録するファイルです。ダイアリーファイルの名前は、変数diary-fileにより指定されます。デフォルトは~/.emacs.d/diaryですが、古いバージョンのEmacsとの互換性のため、~/diaryが存在する場合は、それを使用します。

ダイアリーファイルの各エントリーは、1つ以上の行からなる1つのイベントを記述します。エントリーは、常に左端の日付指定で開始されます。エントリーの残りの部分は、イベントを説明するテキストです。エントリーが複数行の場合、2行目以降はそれが前のエントリーの継続行であることを示すために、空白文字で開始しなければなりません。有効な日付で開始されておらず、前のエントリーの継続行でもない行は無視されます。以下は例です:

12/22/2015  Twentieth wedding anniversary!
10/22       Ruth's birthday.
* 21, *:    Payday
Tuesday--weekly meeting with grad students at 10am
         Supowit, Shen, Bitner, and Kapoor to attend.
1/13/89     Friday the thirteenth!!
thu 4pm     squash game with Lloyd.
mar 16      Dad's birthday
April 15, 2016 Income tax due.
* 15        time cards due.

この例では、ほとんどのエントリーにたいして、余分なスペースでイベント説明を位置揃えしています。このようなフォーマットは、純粋に好みの問題です。

ダイアリーエントリーの最初の行が、日付または曜日名(後にブランクも句読点もない)だけの形式を使うこともできます。たとえば:

02/11/2012
      Bill B. visits Princeton today
      2pm Cognitive Studies Committee meeting
      2:30-5:30 Liz at Lawrenceville
      4:00pm Dentist appt
      7:30pm Dinner at George's
      8:00-10:00pm concert

このエントリーは、シンプルなダイアリー表示を使ったときは、異なる表示になります (ダイアリーの表示を参照してください)。 シンプルなダイアリー表示は最初の日付行を省略して、継続行だけが表示されます。このスタイルのエントリーは、1日分だけのエントリーを表示するときはうまく表示されますが、複数日のエントリーの場合は混乱するかもしれません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.10.2 ダイアリーの表示

1度ダイアリーファイルを作成すると、カレンダーを使ってそれを閲覧できます。Calendarモードの外で、今日のイベントを閲覧することもできます。以下はCalendarバッファーで参照されるキーバインドです。

mouse-3 Diary
d

選択された日付の、すべてのダイアリーエントリーを表示します(diary-view-entries)。

s

ダイアリーファイル全体を表示します(diary-show-all-entries)。

m

表示されている日付で、ダイアリーエントリーをもつものをすべてマークします(diary-mark-entries)。

u

カレンダーウィンドウのマークを外します(calendar-unmark)。

M-x diary-print-entries

表示されているダイアリーのハードコピーを印刷します。

M-x diary

今日の日付の、すべてのダイアリーエントリーを表示します。

M-x diary-mail-entries

近づきつつあるダイアリーエントリーのリマインダーとして、あなた自身にメールします。

dでダイアリーエントリーを表示すると、カレンダーで選択された日付のダイアリーエントリーが別のバッファーに表示されます。新しいバッファーのモードラインには、ダイアリーエントリーの日付が表示されます。休日はバッファーとモードラインの両方で表示され、それは選択した表示方法に依存します (ダイアリーの表示を参照してください)。 dに数引数を指定した場合、選択した日付から指定した日数までのすべてのダイアリーエントリーを表示します。したがって、2 dは選択された日と、その次の日のすべてのエントリーを表示します。

ある日付にたいするダイアリーエントリーを表示する別の方法は、日付をmouse-3でクリックして、表示されるメニューからDiary entriesを選択する方法です。変数calendar-view-diary-initially-flagが非nilの場合、カレンダーの作成により、その日のダイアリーエントリーがリストされます(その日が表示されている場合)。

より広い視点でダイアリーが記載されている日を知るには、mコマンドを使用します。これはダイアリーエントリーをもつ日付を、異なるフェイスでマークします。 diary-entry-markerを参照してください。

このコマンドは現在表示されている月と、スクロールすることにより表示される月の両方に適用されます。マークを消すにはuをタイプします。これにより休日のマークもオフになります(休日を参照してください)。変数calendar-mark-diary-entries-flagが非nilの場合、カレンダーの作成または更新により、ダイアリーの日付が自動的にマークされます。

カレンダーで、特定のダイアリーエントリーのマークを抑止するには、エントリーの開始、日付の前に、diary-nonmarking-symbolで指定された文字列(デフォルトは‘&’)を挿入します。これはエントリーをダイアリーバッファーで表示する場合は、影響ありません。カレンダーウィンドウで日付をマークするときだけ影響があります。マークされないエントリーは、マークの数が多くなりすぎるような、一般的なエントリーにたいして有用かもしれません。

限られたエントリーだけでなく、ダイアリーファイル全体を参照するには、sコマンドを使用します。

コマンドM-x diaryは、カレンダーの表示とは独立に、その日のダイアリーエントリーと、オプションでその後の何日かのダイアリーエントリーも同様に表示します。何日分を含めるかは変数diary-number-of-entriesで指定してください。 diary-number-of-entriesを参照してください。

.emacsファイルに(diary)を記述した場合、Emacsを開始したときに、その日のダイアリーエントリーのウィンドウを自動的に表示します。

ダイアリーのイベント通知を、メールで受けとるのを好む人もいます。そのようなメールをあなた自身に送るには、コマンドM-x diary-mail-entriesを使用します。プレフィクス引数は、(今日から開始して)何日分をチェックするかを指定します。プレフィクス引数を指定しない場合、変数diary-mail-daysにより、何日分をチェックするかが指定されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.10.3 日付のフォーマット

以下は、異なる方法でフォーマットされた日付を説明するために、ダイアリーエントリーの例をいくつか示したものです。この例では、日付はすべてアメリカ形式(月、日、年)ですが、Calendarモードは、オプションでヨーロッパ形式(日、月、年)と、ISO形式(年、月、日)をサポートします。

4/20/12  Switch-over to new tabulation system
apr. 25  Start tabulating annual results
4/30  Results for April are due
*/25  Monthly cycle finishes
Friday  Don't leave without backing up files

最初のエントリーは、2012年4月20日に1度だけ表示されます。2番目と3番目のエントリーは毎年、指定した日に表示され、4番目のエントリーは月にワイルドカード(アスタリスク)を使っているので、毎月25日に表示されます。最後のエントリーは毎週、金曜日に表示されます。

month/day’や‘month/day/year’のように、日付を表すのに数字だけを使うこともできます。この場合、その後に続く文字は数字以外の文字でなければなりません。日付のmonthdayは、1桁または2桁の数字です。オプションのyearも数字で、省略形として最後の2桁を使うこともできます。つまり、‘11/12/2012’または‘11/12/12’を使うことができます。

日付は、‘monthname day’または‘monthname day, year’という形式をもつこともできます。月の名前のスペルには完全形、または省略形(最後のピリオドはあってもなくてもよい)を指定できます。月または曜日の優先される省略形は、変数calendar-abbrev-lengthcalendar-month-abbrev-arraycalendar-day-abbrev-arrayを使ってセットできます。デフォルトは、名前の最初の3文字を省略形として使用します。大文字小文字に違いはありません。

日付はジェネリック(generic) — つまり指定されていない部分があっても構いません。この場合、エントリーは日付に指定された部分にマッチする、すべての日付に適用されます。日付が年を含まない場合、これはジェネリックで、任意の年に適用されます。かわりにmonthdayyearに‘*’を使用することもできます。これは任意の月、任意の日、任意の年にマッチします。したがって、日付は‘3/*/*’のダイアリーエントリーは任意の年の3月の任意の日にマッチします。‘march *’も同じです。

ヨーロッパ形式(月の前に日を記述する)、またはISO形式(年、月、日の順で記述する)で日付を記述したい場合は、カレンダーでM-x calendar-set-date-styleとタイプするか、変数calendar-date-styleをカスタマイズします。これはダイアリーの日付がどのように解釈されるか、日付の表示、コマンドが与えられた引数に要求する順序に影響を与えます。

週のある曜日に適用されるジェネリックな日付として、曜日名を使うことができます。曜日名は完全なスペルを記述するか、上述した省略形を使用できます。大文字小文字に違いはありません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.10.4 ダイアリーに追加するコマンド

カレンダーでは、ダイアリーのエントリーを作成するコマンドがいくつかあります。以下は基本的なコマンドの一覧です。より複雑なコマンドは次のセクションで説明します((特別なダイアリーエントリーを参照してください))。エントリーにはグレゴリオ暦以外も使用できます。 非グレゴリオ暦を使用するカレンダーエントリーを参照してください。

i d

選択された日付のダイアリーエントリーを追加します(diary-insert-entry)。

i w

選択された曜日のダイアリーエントリーを、各週に追加します(diary-insert-weekly-entry)。

i m

選択された日のダイアリーエントリーを、各月に追加します(diary-insert-monthly-entry)。

i y

選択された日のダイアリーエントリーを、各年に追加します(diary-insert-yearly-entry)。

カレンダーウィンドウで日付を選択して、i dコマンドをタイプすることにより、特定の日付にたいするダイアリーエントリーを作成することができます。このコマンドは、ダイアリーファイルの最後の部分を別のウィンドウに表示して、その日付を追加します。その後、ダイアリーエントリーの残りの部分をタイプできます。

毎週、特定の曜日に適用されるダイアリーエントリーを作成したいときは、その曜日(同じ曜日ならどの日でも構いません)を選択して、i wとタイプします。これは曜日をジェネリックな日付として挿入します。そのあとダイアリーエントリーの残りの部分をタイプできます。月ごとのダイアリーエントリーも同じやり方で作成できます。まず月のある日付を選択して、i mコマンドを使い、その後エントリーの残りの部分をタイプします。同様にi yコマンドで、年ごとのダイアリーエントリーを挿入できます。

上記のすべてのコマンドは、デフォルトでマークされるダイアリーエントリーを作成します。マークされないダイアリーエントリーを作成するには、コマンドにプレフィクス引数を与えます。たとえば、C-u i wは、マークされない週次のダイアリーエントリーを作成します。

ダイアリーファイルを変更したときは、Emacsを終了する前にそのファイルを保存してください。上記の挿入コマンドを使用した後でダイアリーファイルを保存することにより、それが適切な場合は、カレンダーウィンドウのダイアリーのマークを自動的に更新します。随時に更新させるには、コマンドcalendar-redrawを使うことができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.10.5 特別なダイアリーエントリー

カレンダーの日付にもとづくエントリーに加え、ダイアリーファイルは記念日のような定期的なイベントにたいする、sexpエントリー(sexp entries: S式エントリー)を含むことができます。これらのエントリーは、Emacsがダイアリーファイルをスキャンすることにより評価される、Lisp式(sexp)にもとづきます。日付のかわりに、sexpエントリーは‘%%’と、その後ろに続くLisp式を含んでおり、Lisp式はカッコで始まりカッコで終わらなければなりません。Lisp式は、エントリーが適用される日付を決定します。

Calendarモードは、一般的に使用される特定のsexpエントリーを挿入するためのコマンドを提供します:

i a

選択された日付にたいして、記念日ダイアリーエントリー(anniversary diary entry)を追加します。

i b

カレントリージョンにたいして、ブロックダイアリーエントリー(block diary entry)を追加します。

i c

その日付に開始される、周期的ダイアリーエントリー(cyclic diary entry)を追加します。

特定の日付の記念日に適用されるダイアリーエントリーを作成したい場合は、ポイントをその日付に移動してi aコマンドを使用します。これはダイアリーファイルの最後の部分を別のウィンドウに表示して、記念日の記述を追加します。その後ダイアリーエントリーの残りの部分をタイプできます。エントリーは以下のようになります:

%%(diary-anniversary 10 31 1988) Arthur's birthday

このエントリーは、1988年以降の任意の年の10月31日に適用されます。‘10 31 1988’は日付を指定します(ヨーロッパ形式またはISO形式を使用している場合、入力順は月、日、年とは異なります)。この式が開始年を要求する理由は、ダイアリーの上級機能が、経過年数を計算できるようにするためです。

ブロックダイアリーエントリーは、特定の連続する日付範囲に適用されます。以下は2012年6月24日から2012年7月10日までの、すべての日付に適用されるブロックダイアリーエントリーです:

%%(diary-block 6 24 2012 7 10 2012) Vacation

6 24 2012’は開始日付を示し、‘7 10 2012’は終了日付を示します(繰り返しになりますが、ヨーロッパ形式またはISOカレンダー形式を使用している場合、月、日、年の順は異なります)。

ブロックエントリーを入力するには、開始と終了の範囲となる2つの日付にポイントとマークを配し、i bとタイプします。このコマンドは、ダイアリーファイルの最後の部分を別のウィンドウに表示して、ブロックの記述を挿入します。その後で、ダイアリーエントリーをタイプすることができます。

周期的(cyclic)ダイアリーエントリーは、ある固定された日数の期間繰り替えされるエントリーです。これを作成するには、開始日を選択してi cコマンドを使用します。コマンドは期間の長さの入力を求め、それから以下のようなエントリーを挿入します:

%%(diary-cyclic 50 3 1 2012) Renew medication

このエントリーは、2012年3月1日以降の50日間適用されます。‘3 1 2012’は開始日の指定です(ヨーロッパ形式またはISOカレンダー形式を使用している場合、月、日、年の入力順は異なります)。

これら3つのコマンドはすべて、ダイアリーエントリーをマークします。マークしないダイアリーエントリーを挿入するには、プレフィクス引数を与えます。たとえばC-u i aは、マークされない記念日ダイアリーエントリーを作成します。

カレンダーでsexpダイアリーエントリーを作成すると、カレンダーウィンドウで表示されているすべての日付にたいして個別にチェックしなければならないので、時間がかかるかもしれません。そのため、可能ならsexpダイアリーエントリーを、(‘&’を使って)マークされないようにするのがよいでしょう。

その他の複雑なsexpエントリーとして、浮動(floating)ダイアリーエントリーがあります。これは日、週、年のオフセットで指定される、定期的に発生するイベントを指定するためのものです。これはcronにより解釈されるcrontabエントリーに類似しています。以下はマークされない、浮動ダイアリーエントリーで、11月の第4木曜日に適用されます。

&%%(diary-float 11 4 4) American Thanksgiving

11は11月(11番目の月)を指定し、4は木曜日(週の第4日。日曜日は0)、2番目の4は第4週(1は第1週、2は第2週、-2は最終週から2番目の週)を指定します。月は1つの月、または月のリストを使用できます。したがって上記の11を‘'(1 2 3)’に変更すると、このエントリーは1月、2月、3月の第4木曜日に適用されることになります。月がtの場合、そのエントリーは年の各月に適用されます。

標準的なsexpダイアリーエントリーは、フェイス名またはカレンダーをマークするときに使用する1文字の文字列を指定する、オプションのパラメーターを受け取ります。一般的には、sexpダイアリーエントリーは、それらが適用されるときを決定するために、任意の計算を処理することができます。 sexpエントリーとFancy Diary表示を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.10.6 アポイントメント

アポイントメント(appointment: 約束、予約)にたいするダイアリーエントリーがある場合、そのダイアリーエントリーが認識可能な日時で開始されていれば、Emacsは保留されたアポイントメントがあることを警告することができます。Emacsは、変数appt-display-formatで選択されたフォーマットでメッセージを表示して、アポイントメントにたいする注意を喚起します。appt-audibleの値が非nilの場合、警告には音によるリマインダーも含まれます。加えて、appt-display-mode-lineが非nilの場合、Emacsはアポイントメントまで何分あるかを、モードラインに表示します。

appt-display-formatの値がwindowの場合、変数appt-display-durationがリマインダーウィンドウを表示する長さを制御します。変数appt-disp-window-functionおよびappt-delete-window-functionは、ウィンドウを生成または破棄する関数の名前を与えます。

アポイントメントの通知を有効にするには、M-x appt-activateとタイプします。正の引数は通知を有効に、負の引数は通知を無効に、引数を指定しない場合は通知のオンとオフを切り替えます。通知を有効にすることにより、ダイアリーファイルから見つかった、認識可能な日時をもつすべてのダイアリーエントリーにより、今日のアポイントメントリストをセットアップし、それらのアポイントメントの直前に注意を促します。

たとえば、ダイアリーファイルに以下のような行が含まれているとします:

Monday
  9:30am Coffee break
 12:00pm Lunch

月曜日には、9:20am頃にコーヒーブレーク、11:50am頃にランチの注意が促されます。変数appt-message-warning-timeには、前もって何分前(デフォルトは12)に警告するかを指定します。これはデフォルトの警告タイムです。appt-warning-time-regexpに部分マッチングを追加することにより、各アポイントメントに異なる警告タイムを指定できます(詳細は、この変数のドキュメントを参照してください)。

時刻はam/pmスタイル(‘12:00am’は真夜中で、‘12:00pm’は正午)、またはヨーロッパ/軍隊の24時間制で記述できます。どちらを使うか一貫性がある必要はありません。ダイアリーファイルで、この2つのスタイルを混交させることができます。時刻が認識されるためは、それがダイアリーエントリーの最初に記述されていなければなりません。

Emacsは、真夜中直後にダイアリーファイルから自動的にアポイントメントリストを更新します。アポイントメント通知を再度有効にすることにより、随時に更新させることができます。appt-display-diarynilにセットしていなければ、これらのアクションはその日のダイアリーバッファーにも表示されます。アポイントメントリストは、ダイアリーファイル(またはそれをインクルードするファイル。 Fancy Diary表示を参照) に保存されます。Orgモードを使用していて、アポイントメントをOrgアジェンダファイルに保持したい場合は、org-agenda-to-apptコマンドを使用して、アポイントメントをアジェンダファイルのリストに追加できます。このコマンドについての詳細は、Appointment reminders in The Org Manualを参照してください。

アラーム時計のように、アポイントメント通知機能を使うこともできます。コマンドM-x appt-addは、ダイアリーファイルに影響を与えずに、アポイントメントリストにエントリーを追加します。アポイントメントリストからエントリーを削除するには、M-x appt-deleteを使います。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.10.7 ダイアリーエントリーのインポートとエクスポート

Emacsのダイアリーファイルと、他のさまざまなフォーマットの間で、ダイアリーエントリーを変換できます。

Outlookが生成したアポイントメントメッセージから、ダイアリーエントリーをインポートできます。そのようなメッセージをRmailやGnusで閲覧しているときは、エントリーをインポートするためにM-x diary-from-outlookを実行します。変数diary-outlook-formatsをカスタマイズすることにより、このコマンドに追加のアポイントメッセージ形式を認識させることができます。他のメールクライアントは、diary-from-outlook-functionを適切な値にセットできます。

icalendarパッケージにより、Emacsダイアリーファイルと、RFC 2445 — Internet Calendaring and Scheduling Core Object Specification (iCalendar)で定義されるiCalendarとの間で、データを変換することができます(初期のvCalendar形式も同様)。

コマンドicalendar-import-bufferは、カレントバッファーからiCalendarデータを抽出して、それをダイアリーファイルに追加します。この関数は、iCalendarデータを自動的に抽出するためにも適しています。たとえばRmailメールクライアントは、以下を使用できます:

(add-hook 'rmail-show-message-hook 'icalendar-import-buffer)

コマンドicalendar-import-fileは、iCalendarファイルをインポートして、その結果をEmacsダイアリーファイルに追加します。たとえば:

(icalendar-import-file "/here/is/calendar.ics"
                       "/there/goes/ical-diary")

もし違うファイルが存在する場合は、インポートファイルの内容を追加するために、#includeディレクティブを使うことができます。 Fancy Diary表示を参照してください。

icalendar-export-fileを使って、Emacsダイアリーファイル全体をiCalendar形式にエクスポートできます。ダイアリーファイルの一部をエクスポートするには、関連する領域をマークして、icalendar-export-regionを呼び出します。どちらの場合も、Emacsは結果をターゲットファイルに追加します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.11 サマータイム

Emacsは、標準時とサマータイムの違いを理解します。日の出、日の入り、夏至、冬至、春分、秋分、月の位相では、時刻を補正しています。サマータイムのルールは、場所によりさまざまで、歴史的にも異なります。処理を正しく行なうには、Emacsが使用するルールを知る必要があります。

どこにいるかにより適用されるルールを、追跡するオペレーティングシステムもあります。そのようなシステムでは、Emacsはそのシステムから必要な情報を取得します。これらの情報の一部またはすべてが欠落している場合、Emacsは現在マサチューセッツのケンブリッジで使用されているルールで、そのギャップを埋めます。その結果としてのルールが望むものでない場合、変数calendar-daylight-savings-startsおよびcalendar-daylight-savings-endsをセットすることにより、Emacsに使用するルールを指定できます。

これらの値は、変数yearを参照するLisp式で、サマータイムが開始または終了される、(month day year)という形式のリストによる、グレゴリオ暦の日付として評価されます。その地域がサマータイムを使用しない場合、値はnilであるべきです。

Emacsは、サマータイムの開始を決定するためにこれらの式を使い、休日リスト、太陽および月に関する時刻の補正を行ないます。

マサチューセッツのケンブリッジにたいする値は、以下のとおりです:

(calendar-nth-named-day 2 0 3 year)
(calendar-nth-named-day 1 0 11 year)

つまり、yearで指定される年の、3番目の月(3月)の、第2週の0番目の曜日(日曜日)と、、その年の11番目の月(11月)の、第1週の日曜日です。サマータイムが10月1日から開始されるように変更する場合、calendar-daylight-savings-startsを以下のように変更します:

(list 10 1 year)

その地域でサマータイムがない、またはすべての時刻を標準時にしたい場合は、calendar-daylight-savings-startscalendar-daylight-savings-endsを、nilにセットします。

変数calendar-daylight-time-offsetは、サマータイムと標準時の差を、分で指定します。マサチューセッツのケンブリッジでは60です。

最後に、2つの変数calendar-daylight-savings-starts-timecalendar-daylight-savings-ends-timeは、サマータイムの開始と終了の遷移時に、地方時の真夜中から何分ずれるかを指定します。マサチューセッツのケンブリッジでは、変数の値は両方とも120です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.12 時間間隔の加算

timeclockパッケージは、時間間隔を加算していくので、(たとえば)特定のプロジェクトにどれだけ時間を費やしているか、追跡することができます(より上級の代替手段はOrgモードの時間計測機能の使用である。Clocking Work Time in The Org Manualを参照)。

プロジェクトの作業を開始したときM-x timeclock-inコマンドを使用し、作業を終えたらM-x timeclock-outコマンドを使用します。これを行なうたびに、プロジェクトの記録に時間間隔を追加します。違うプロジェクトの作業に変更する場合は、M-x timeclock-changeを使用します。

いくつかの時間間隔をからデータを収集したら、M-x timeclock-workday-remainingを使って、その作業にたいして今日の残り時間を見ることができ(1日の作業時間の平均は通常8時間とみなします)、M-x timeclock-when-to-leaveで作業を終了する時間を計算します。

Emacsにたいして、モードラインに作業日の残り時間を表示させたいときは、変数timeclock-mode-line-displaytにセットするか、コマンドM-x timeclock-mode-line-displayを呼び出します。

Emacsのカレントセッションを終了することは、そのプロジェクトの作業を終えることを意味するか不明なので、デフォルトではEmacsは確認を求めます。しかし変数timeclock-ask-before-exitingの値をnilにカスタマイズすることにより、確認を無視できます。その場合、明示的にM-x timeclock-outM-x timeclock-changeを呼び出した場合だけ、カレントの時間間隔が終了したとEmacsに告げます。

timeclock関数は、~/.emacs.d/timelogと呼ばれるファイルに、データを集積することにより機能します。変数timeclock-fileをカスタマイズすることにより、このファイルに違う名前を指定できます。手作業でtimeclockを編集したり、timeclockのカスタマイズ可能な変数の値を変更したときは、コマンドM-x timeclock-reread-logを実行するべきです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.13 カレンダーとダイアリーの上級な機能

このセクションでは、カレンダーとダイアリーの、より上級で特別な機能をいくつか説明します。まず最初に、個人的な好みに合うようにカレンダーをカスタマイズする、多くの方法を紹介します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.13.1 カレンダーのカスタマイズ

残念ながら、カレンダーの表示が3ヶ月であるのを変更することはできませんが、変数calendar-left-margincalendar-day-header-widthcalendar-day-digit-widthcalendar-column-widthcalendar-intermonth-spacingをカスタマイズすることにより、使用される空白文字をカスタマイズすることはできます。各月の間に、たとえば週の番号を表示するには、変数calendar-intermonth-headercalendar-intermonth-textを、変数のドキュメントに記載されているようにカスタマイズします。

変数calendar-month-headerは、カレンダーの各月の上に表示されるテキストを制御します。デフォルトでは月と年を表示します。変数calendar-day-header-arrayは、各月の各曜日の上に表示されるテキストを制御します。デフォルトでは、各曜日の名前の最初の2文字を表示します。

変数calendar-holiday-markerは、休日をどのようにマークするか指定します。この変数は、日付の隣に挿入する1文字の文字列か、その日付を表示するのに使用するフェイス名です。同様に、変数diary-entry-markerは、ダイアリーエントリーをもつ日を、どのようにマークするか指定します。関数calendar-mark-todayは、今日の日付をマークするのにcalendar-today-markerを使用します。デフォルトでは、この目的のためにカレンダーはholidaydiarycalendar-todayという名前のフェイスを使います。

カレンダーの開始により、ノーマルフックcalendar-initial-window-hookが実行されます。カレンダー表示の再計算では、このフックは実行されません。しかしqでカレンダーを離れ、再度カレンダーに入ると、このフックが再び実行されます。

変数calendar-today-visible-hookは、カレンダーバッファーがカレンダーのために準備された後、カレント日付がウィンドウで表示されるときに実行されるノーマルフックです。このフックの用途の1つは、今日の日付のマークです。これを行なうには、関数calendar-mark-todayまたはcalendar-star-dateを使います:

(add-hook 'calendar-today-visible-hook 'calendar-mark-today)

同様のノーマルフックcalendar-today-invisible-hookは、カレント日付がウィンドウに表示されなくなるとき実行されます。

カレンダーのカーソル移動コマンドは、カーソルを移動した後に、フックcalendar-move-hookを実行します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.13.2 休日のカスタマイズ

Emacsが知る、デフォルト休日のリスト変数がいくつかあります。それはholiday-general-holidaysholiday-local-holidaysholiday-solar-holidaysholiday-bahai-holidaysholiday-christian-holidaysholiday-hebrew-holidaysholiday-islamic-holidaysholiday-oriental-holidaysholiday-other-holidaysです。変数の名前は自己説明的であるべきです。たとえば、holiday-solar-holidaysは、太陽と月に関連した休日のリストです。

これらの休日リストにたいして、必要に応じて、下記で説明しているように休日を削除したり追加してカスタマイズできます。これらをnilにセットすると、関連する休日は表示されなくなります。

一般的な休日、すなわちholiday-general-holidaysは、デフォルトではUnited Statesで一般的な休日です。対照的に、holiday-local-holidaysholiday-other-holidaysは、デフォルトでは空です。前者はシステムワイドなセッティング、後者は個人的な使用を意図しています。

デフォルトでは、Emacsは世俗的なカレンダーに一般的に見出されるものを除き、宗教的な休日のすべてを含んではいません。宗教的な休日の、より広範なコレクションのために、変数calendar-bahai-all-holidays-flagcalendar-christian-all-holidays-flagcalendar-hebrew-all-holidays-flagcalendar-islamic-all-holidays-flagのどれか(またはすべて)をtにセットできます。

それぞれの休日の変数はholiday formsのリストです。各formは休日(休日のリストの場合もある)を記述します。以下は利用可能なholiday formの表です。日付と月は1から数えますが、曜日名(dayname)は日曜日を0として数えます。引数stringは、その休日を説明する文字列です。

(holiday-fixed month day string)

グレゴリオ暦(Gregorian calendar)の固定日付です。

(holiday-float month dayname k string &optional day)

グレゴリオ暦のmonthday日の前または後のk番目の曜日dayname(dayname=0の場合は日曜日)です。kが負の場合、月の最後から数えます。オプションのdayのデフォルトは、kが正のときは1、負のときはmonthの最後の日になります。

(holiday-chinese month day string)

旧暦(Chinese calendar)の固定日付です。

(holiday-hebrew month day string)

ヘブライ暦(Hebrew calendar)の固定日付です。

(holiday-islamic month day string)

イスラム暦(Islamic calendar)の固定日付です。

(holiday-julian month day string)

ユリウス暦(Julian calendar)の固定日付です。

(holiday-sexp sexp string)

Lisp式sexpにより計算される日付です。式は計算に変数yearを使い、(month day year)の形式のリストを返すか、その年に休日が発生しない場合はnilを返すべきです。

(if condition holiday-form)

条件conditionが真のときだけ休日が発生します。

(function [args])

引数argsを指定して関数functionを呼び出すことにより計算される日付のリストです。

たとえばフランスで有名な7月14日のパリ革命記念日(Bastille Day)を追加したいとしましょう。以下でこれを行なうことができます:

(setq holiday-other-holidays '((holiday-fixed 7 14 "Bastille Day")))

多くの休日は、特定の月の特定の曜日に発生します。以下はVirgin Islandsで有名な7月第4月曜日のHurricane Supplication Dayを記述します。

(holiday-float 7 1 4 "Hurricane Supplication Day")

ここで7は7月、1は月曜日(日曜日は0、火曜日は2です)、4はその月の4番目(1は1番目、2は2番目、-1は最後、-2は最後から2番目)を指定しています。

Bahá’í暦、旧暦、ヘブライ暦、イスラム暦、ユリウス暦の固定日付に発生する休日を指定することもできます。たとえば、

(setq holiday-other-holidays
      '((holiday-hebrew 10 2 "Last day of Hanukkah")
        (holiday-islamic 3 12 "Mohammed's Birthday")
        (holiday-julian 4 2 "Jefferson's Birthday")))

これは、Hanukkahの最後の日(ヘブライ暦の月はNisanを1として数えられます)、Mohammedの誕生日を祝うイスラムの祭日(イスラム暦の月はMuharramを1として数えられます)、そしてユリウス暦の1743年4月2日のThomas Jeffersonの誕生日を記述したものです。

条件付きの休日を含めるには、Emacs Lispのifか、holiday-sexp形式を使用します。たとえばアメリカ大統領選挙は、4で割りきれる年の11月の第1月曜日の後の、最初の火曜日に発生します:

(holiday-sexp '(if (zerop (% year 4))
                   (calendar-gregorian-from-absolute
                    (1+ (calendar-dayname-on-or-before
                          1 (+ 6 (calendar-absolute-from-gregorian
                                  (list 11 1 year)))))))
              "US Presidential Election")

または

(if (zerop (% displayed-year 4))
    (holiday-fixed 11
           (calendar-extract-day
             (calendar-gregorian-from-absolute
               (1+ (calendar-dayname-on-or-before
                     1 (+ 6 (calendar-absolute-from-gregorian
                              (list 11 1 displayed-year)))))))
           "US Presidential Election"))

休日の決定に特別な計算が含まれるために、上記の形式に当てはまらない休日もあります。そのような場合は、その計算を行なうLisp関数を記述しなければなりません。たとえば食(eclipses)を含めるにはholiday-other-holidays(eclipses)を追加して、以下のような、カレンダーウィンドウに表示されている月に関連するグレゴリオ暦の日付のリスト(空の場合もあり得る)を返す、Emacs Lisp関数(eclipses)を記述します。

(((6 4 2012) "Lunar Eclipse") ((11 13 2012) "Solar Eclipse") ... )

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.13.3 マヤ暦からの変換

以下は、マヤ暦(Mayan calendar)にもとづく日付を選択するコマンドです:

g m l

long countカレンダーで指定された日付に移動します(calendar-mayan-goto-long-count-date)。

g m n t

tzolkinカレンダーの次の周期の日付に移動します(calendar-mayan-next-tzolkin-date)。

g m p t

tzolkinカレンダーの前の周期の日付に移動します(calendar-mayan-previous-tzolkin-date)。

g m n h

haabカレンダーの次の周期の日付に移動します(calendar-mayan-next-haab-date)。

g m p h

haabカレンダーの前の周期の日付に移動します(calendar-mayan-previous-haab-date)。

g m n c

マヤ暦の次の周期の日付に移動します(calendar-mayan-next-calendar-round-date)。

g m p c

マヤ暦の前の周期の日付に移動します(calendar-mayan-previous-calendar-round-date)。

これらのコマンドを理解するためには、マヤ暦(Mayan calendars)を理解する必要があります。long countは以下の単位にもとづいて日数を計算します:

1 kin = 1日   1 uinal = 20 kin   1 tun = 18 uinal
1 katun = 20 tun   1 baktun = 20 katun

したがってlong countの日付12.16.11.16.6は、12baktunの16katunの11tunの16uinalの6kinを意味します。Emacsのカレンダーはマヤ暦のlong countを7.17.18.13.3まで遡ることができます。g m lコマンドを使うときはマヤ暦のlong countの日付baktun、katun、tun、uinal、kinをピリオドで区切って入力します。

マヤ暦のtzolkinは、13日と20日の独立した周期を組み合わせた形式からなる260日周期のカレンダーです。この周期が永遠に繰り替えされるので、Emacsはこのサイクルの前または次の位置に、後方または前方に移動するコマンドを提供します。g m p tは前のtzolkin日付に移動します。Emacsはtzolkin日付の入力を求め、前の周期のその日付にポイントを移動します。同様に、g m n tとタイプすると、次の周期のtzolkin日付に移動します。

マヤ暦のhaabは、20日からなる18の月と、月に属さない5日間からなる365日周期のカレンダーです。tzolkinの周期と同様に、この周期は永遠に繰り返されるので、この周期の前または次の位置へ後方または前方に移動するコマンドがあります。g m p hは前のhaab日付に移動します。Emacsはhaab日付の入力を求め、前の周期のその日付にポイントを移動します。同様に、g m n hとタイプすると次の周期のhaab日付に移動します。

マヤ暦ではtzolkin日付とhaab日付を組み合わせた日付も使用されていました。この組み合わせやcalendar roundと呼ばれる、約52年の周期です。g m p cとタイプすると、Emacsはhaab日付とtzolkin日付の入力を求め、前の周期のその組み合わせの日付にポイントを移動します。g m n cを使用すると、次の周期のsぽの組み合わせの日付にポイントを移動します。あり得ないhaab日付とtzolkin日付の組み合わせをタイプした場合は、エラーをシグナルします。

EmacsはMaya暦の名前の入力を求めるときは強い補完 (補完の終了を参照してください) を使うので、スペルについて心配する必要はありません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.13.4 日付の表示フォーマット

calendar-date-display-formをセットすることにより、ダイアリー、モードライン、メッセージに表示される日付をカスタマイズできます。この変数は、文字列形式の数字をもつ変数monthdayyearと、アルファベット文字列をもつmonthnamedaynameを含む式のリストを保持します。アメリカ様式では、このリストのデフォルト値は以下のようになります:

((if dayname (concat dayname ", ")) monthname " " day ", " year)

ヨーロッパ様式では、この値のデフォルトは以下のようになります:

((if dayname (concat dayname ", ")) day " " monthname " " year)

デフォルトのISO日付は以下のようになります:

((format "%s-%.2d-%.2d" year (string-to-number month)
         (string-to-number day)))

他の典型的なアメリカ様式は以下のものです:

(month "/" day "/" (substring year -2))

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.13.5 時刻の表示フォーマット

カレンダーとダイアリーは、デフォルトで1日の時刻を、‘am’または‘pm’と、1から12の時刻と分によるアメリカ様式の慣習にしたがって表示します。00から23の時刻による、ヨーロッパ様式(US軍用様式とも呼ばれる)にしたい場合は、変数calendar-time-display-formを変更することができます。この変数は式のリストです。このリストには文字列形式の数字をもつ変数12-hours24-hoursminutesと、アルファベット文字列をもつam-pmtime-zoneを含めることができます。デフォルト値は以下のとおりです:

(12-hours ":" minutes am-pm
          (if time-zone " (") time-zone (if time-zone ")"))

以下の値はヨーロッパ形式の時刻を提供します:

(24-hours ":" minutes
          (if time-zone " (") time-zone (if time-zone ")"))

1日の時刻を返すカレンダー関数は少ないことに注意してください(現在のところsolar関数のみ)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.13.6 ダイアリーのカスタマイズ

ダイアリーウィンドウは通常、ダイアリーエントリーの日付が休日に相当する場合は、モードラインとバッファー自身にそれを示します。休日をチェックするプロセスは時間がかかることがあり、それは定義された休日に依存します。このような場合、diary-show-holidays-flagnilにセットすることにより、ダイアリーの表示を速くすることができます。

変数diary-number-of-entriesは、1度に表示されるダイアリーエントリーの日数を制御します。これはcalendar-view-diary-initially-flagtのときの初期表示と、コマンドM-x diaryに影響します。たとえば値1(デフォルト)は、その日のダイアリーエントリーだけを表示し、値2は翌日のエントリーも表示します。値には7つの整数のvectorも指定できます。たとえば値が[0 2 2 2 2 4 1]の場合、日曜日にはダイアリーエントリーは表示されず、月曜日から木曜日までは当日と翌日のダイアリーエントリーが表示され、金曜日には金曜日から月曜日のエントリーが表示され、土曜日にはその日のエントリーだけが表示されます。

変数diary-date-formsをセットすることにより、ダイアリーファイルの日付形式をカスタマイズできます。この変数は日付を認識するパターンのリストです。各日付パターンは、要素が正規表現(Regular Expressions in the Emacs Lisp Reference Manualを参照してください)、またはシンボルmonthdayyearmonthnamedaynameのリストです。これらすべての要素は、ダイアリーファイルの特定の種類のテキストにマッチするパターンに供されます。日付パターン全体がマッチするためには、リストの各要素が連続してマッチしなければなりません。

日付パターンの正規表現は、標準の構文テーブルを変更してそれ自身の通常の方法でマッチするので、‘*’は単語の構成要素になります。

シンボルmonthdayyearmonthnamedaynameは、日付と考えられる月番号、日付番号、年番号、月の名前、曜日名にマッチします。数字にマッチするシンボルは、0で開始することもできます。名前にマッチするものは、大文字名と、(calendar-month-abbrev-arraycalendar-day-abbrev-arrayで指定されるような)省略形を許容します。ダイアリーエントリーの‘*’は“任意の月”の‘任意の日付”などを意味するので、すべてのシンボルは‘*’にマッチすることができ、日付とみなされないものにもマッチするべきです。

アメリカ様式でのdiary-date-formsのデフォルト値は、diary-american-date-formsにより提供されます:

((month "/" day "[^/0-9]")
 (month "/" day "/" year "[^0-9]")
 (monthname " *" day "[^,0-9]")
 (monthname " *" day ", *" year "[^0-9]")
 (dayname "\\W"))

変数diary-european-date-formsおよびdiary-iso-date-formsは、他のデフォルト様式を提供します。

このリストの日付パターンは、相互排他的(mutually exclusive)でなければならず、ダイアリーエントリーの任意の部分にマッチせず、日付と1文字の空白文字だけにマッチしなければなりません。相互排他的であるならば、パターンは日付を終端する空白文字を越えて、ダイアリーエントリーの一部にマッチしなければならず、日付パターンの最初の要素はバックアップ(backup)されなければなりません。これにより日付識別処理はマッチお終えた後、ダイアリーエントリーの先頭の単語をバックアップします。backupを使う場合でも、日付パターンはダイアリーエントリーの最初の単語の部分を越えてマッチしてはなりません。たとえばdiary-european-date-formsは以下のようなデフォルト値です:

((day "/" month "[^/0-9]")
 (day "/" month "/" year "[^0-9]")
 (backup day " *" monthname "\\W+\\<\\([^*0-9]\\|\\([0-9]+[:aApP]\\)\\)")
 (day " *" monthname " *" year "[^0-9]")
 (dayname "\\W"))

3番目のパターンでのbackupの使用に注目してください。これは4番目のパターンと区別するために、日付自体を越えて単語の一部にマッチする必要があるからです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.13.7 非グレゴリオ暦を使用するカレンダーエントリー

グレゴリオ暦にもとづくエントリーと同様に、ダイアリーはBahá’í、Chinese、Hebrew、Islamicの日付にもとづくエントリーをもつことができます。そのようなエントリーの識別は時間がかかる場合がありますが、これらを使用する人はほとんどいないので、使用する場合は明示的に有効にしなければなりません。ダイアリーが、ダイアリーエントリーのHebrew日付を識別するようにしたい場合、たとえば以下のようにして、これを行なわなければなりません:

(add-hook 'diary-nongregorian-listing-hook 'diary-hebrew-list-entries)
(add-hook 'diary-nongregorian-marking-hook 'diary-hebrew-mark-entries)

同様にIslamic、Bahá’í、Chineseのエントリーにたいしては、diary-islamic-list-entriesdiary-islamic-mark-entries、またはdiary-bahai-list-entriesdiary-bahai-mark-entries、またはdiary-chinese-list-entriesdiary-chinese-mark-entriesを追加します。

これらのダイアリーエントリーは、グレゴリオ日付のダイアリーエントリーと同じフォーマットをもちます。例外は、Bahá’í日付の前にはdiary-bahai-entry-symbol(デフォルトは‘B’)、Chinese日付の前にはdiary-chinese-entry-symbol(デフォルトは‘C’)、Hebrew日付の前にはdiary-hebrew-entry-symbol(デフォルトは‘H’)、Islamic日付の前にはdiary-islamic-entry-symbol(デフォルトは‘I’)が前置されなければならないことです。さらに、非グレゴリオの月の名前は省略できません(最初の3文字では一意にならないものがあるからです。一般的なHebrew年のAdarを使いたい場合は、“Adar I”を使わなければならないことにも注意してください。) たとえばHebrew日付のHeshvan 25にたいするダイアリーエントリーは、以下のようになります:

HHeshvan 25 Happy Hebrew birthday!

これはヘブライ暦のHeshvan 25に対応する日付のダイアリーに表示されます。以下はIslamic日付のDhu al-Qada 25にマッチするダイアリーエントリーです:

IDhu al-Qada 25 Happy Islamic birthday!

グレゴリオ日付のダイアリーエントリーのように、非グレゴリオのエントリーも前にdiary-nonmarking-symbol(デフォルトは‘&’)が前置されている場合はマークされません。

以下は、選択された日付または他の日付にたいして、Bahá’í、Chinese、Hebrew、Islamicの日付によるダイアリーエントリーを作成するコマンドの表です:

i h d

diary-hebrew-insert-entry

i h m

diary-hebrew-insert-monthly-entry

i h y

diary-hebrew-insert-yearly-entry

i i d

diary-islamic-insert-entry

i i m

diary-islamic-insert-monthly-entry

i i y

diary-islamic-insert-yearly-entry

i B d

diary-bahai-insert-entry

i B m

diary-bahai-insert-monthly-entry

i B y

diary-bahai-insert-yearly-entry

i C d

diary-chinese-insert-entry

i C m

diary-chinese-insert-monthly-entry

i C y

diary-chinese-insert-yearly-entry

i C a

diary-chinese-insert-anniversary-entry

これらのコマンドは、通常のダイアリーエントリーの対応するコマンドに似ています。これらはカレンダーウィンドウのポイント位置の日付に適用され、これらのコマンドが行なうのはダイアリーファイルの最後にダイアリーエントリーの日付部分を挿入することだけです。その後、ダイアリーエントリーの残りを挿入しなければなりません。特定の非グレゴリオ日付のエントリーを追加する基本的なコマンドとして、与えられた非グレゴリオ日を各月に追加する‘monthly’コマンド、与えられた非グレゴリオの月日を各年に追加する‘yearly’コマンドがあります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.13.8 ダイアリーの表示

ダイアリーの表示は、ダイアリーエントリーのリストを準備して、変数diary-display-functionで指定された関数を実行することにより機能します。デフォルト値のdiary-fancy-displayは、ダイアリーエントリーを表示するためだけに存在する特別なバッファーにコピーして、ダイアリーエントリーと休日を表示します。ダイアリーエントリーを別のバッファーにコピーすることにより、表示されるテキストの見栄えをよくする機会 — たとえばダイアリーエントリーに適用される日付順にソートするなど — が提供されます。

通常、fancy diary(装飾的なダイアリー)バッファーは、たとえその日が休日であっても、ダイアリーエントリーがない日は表示しません。そのような日をfancy diaryバッファーに表示したいときは、変数diary-list-include-blankstにセットします。

fancy diaryバッファーはViewモードを有効にします (Viewモードを参照してください)。

他の表示方法のdiary-simple-displayは、実際のダイアリーバッファーを表示して、適合しないエントリーを隠すために非表示のテキストを使います。休日はモードラインに表示されます。この方法の有利な点は、ダイアリーファイルを直接編集して、変更を保存できることです。しかし、この方法はfancy方式のように柔軟ではありません。たとえば、これはエントリーのソートはできません。他の不利な点としては、非表示のテキストが混乱の元となることがある点です。たとえば、他の場所に張り付けるためにリージョンのテキストをコピーした場合、非表示のテキストも含まれます。同様に、目に見えるダイアリーバッファーは一種の幻影なので、単にバッファーを印刷しても、スクリーンで表示されているものが印刷されるわけではありません。

この理由により、ダイアリーバッファーのハードコピーを見た通りに印刷する特別なコマンドM-x diary-print-entriesがあります。これは、どちらの表示方式でも機能します(たとえfancy displayバッファーが他のバッファーと同じようにプリントできるとしても)。週の各曜日のハードコピーを印刷するには、ポイントを週の初めの曜日に移動して7 dとタイプし、それからM-x diary-print-entriesを実行します。通常のように、休日が含まれる場合、表示は若干遅くなります。変数diary-show-holidays-flagnilにセットすることにより、速度を改善することができます。

このコマンドは、ダイアリーバッファーで現在可視なダイアリーエントリーだけを含んだ一時的なバッファーを作成します。単なる表示とは異なり、他の無関係なエントリーは隠されるだけではなく、まったく含まれません。バッファーを作成したら、フックdiary-print-entries-hookが実行されます。このフックのデフォルト値はコマンドlpr-bufferで、これはデータを直接プリンターに送信します (ハードコピーの印刷を参照してください)。 違うコマンドを印刷に使いたい場合は、単にこのフックの値を変更するだけです。他のコマンドには、たとえば行を日付と時刻順に再配置することなどが含まれるかもしれません。

simpleダイアリーウィンドウで表示されているときと同じように、ダイアリーエントリーを編集できますが、表示されているバッファーには、表示から隠されている部分が含まれていることを覚えておくのは重要です。これは、たとえばC-f (forward-char)は表示されている最後の行にポイントを移動できますが、実際は隠されている行の途中かもしれないことを意味します。

simple表示でダイアリーエントリーを編集するときは注意してください。表示されている行の途中での行の追加、文字の追加や削除は問題になりませんが、行の最後で編集する場合は、意図した通りにはならないでしょう。行の削除は、それに続く他の非表示のエントリーを削除するかもしれません。simple diaryバッファーで編集する前に、s (diary-show-all-entries)でファイル全体を表示するのが最善です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.13.9 Fancy Diary表示

以下の機能は、fancy diary表示だけで機能します。

ノーマルフックdiary-list-entries-hookを使用して、各曜日のダイアリーエントリーを日時順でソートできます。以下はその方法です:

(add-hook 'diary-list-entries-hook 'diary-sort-entries t)

これは各曜日にたいして、認識可能は日時で始まるダイアリーエントリーをソートします。時刻がないダイアリーエントリーは、各曜日の最初に配置されます。ソートコマンドがフックリストの最後に配置されているわけに注意してください。リストの最初の方に配置されている場合、これはダイアリーエントリーの順序を変更したり、アイテムを追加します。

コメント区切りとなる文字列をdiary-comment-startdiary-comment-endにセットすることにより、ダイアリーエントリーに‘コメント’を記述できます。fancy表示はコメントを印刷しません。他のパッケージ(たとえばappointmentパッケージ。 アポイントメントを参照してください) で使用するメタデータをコメント内に記述したいと思うかもしれません。

メインとなるダイアリーファイルに、他のファイルをインクルードできます。これにより、グループのメンバー全員に適用されるイベント用のダイアリーファイルを、共有することができます。ダイアリーファイルで、diary-include-stringで開始される行:

#include "filename"

は、ファイルfilenameからダイアリーエントリーをfancy diaryバッファーにインクルードします。インクルードの仕組みは再帰的なので、インクルードされたファイルは他のファイルをインクルードできます(もちろん循環的なインクルードについては注意しなければなりません)。インクルード機能を有効にするには、以下のようにします:

(add-hook 'diary-list-entries-hook 'diary-include-other-diary-files)
(add-hook 'diary-mark-entries-hook 'diary-mark-included-diary-files)

インクルード機能はfancy diaryだけで機能します。なぜならsimple diary表示は、エントリーをダイアリーファイルから直接表示するからです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

31.13.10 sexpエントリーとFancy Diary表示

sexp( s-expression: S式)ダイアリーエントリーにより、どのダイアリーエントリーに適用するか、複雑な条件判定以上のことができます。sexpエントリーは、ダイアリーファイルでdiary-sexp-entry-symbol(デフォルトは‘%%’)が前置されている行です。fancy diary表示では、sexpエントリーはエントリーの日付に応じて、エントリーのテキストを生成できます。

たとえば記念日のダイアリーエントリーでは、記念日から経過した年数をダイアリーエントリーのテキストに挿入できます。したがって、以下のダイアリーエントリーの‘%d’:

%%(diary-anniversary 10 31 1948) Arthur's birthday (%d years old)

は年齢に置換されるので、1990年10月31日のfancy diaryバッファーでは、以下のように表示されます:

Arthur's birthday (42 years old)

かわりに、ダイアリーファイルに以下のようなエントリーが含まれている場合:

%%(diary-anniversary 10 31 1948) Arthur's %d%s birthday

は1990年10月31日のfancy diaryバッファーで、以下のように表示されます:

Arthur's 42nd birthday

同様に、周期的なダイアリーエントリーは、それが繰り返し発生した回数を挿入できます:

%%(diary-cyclic 50 1 1 2012) Renew medication (%d%s time)

これは以下のように表示されます:

Renew medication (5th time)

これは2012年9月7日のfancy diary表示です。

発生する日付だけでなく、それより前のダイアリーエントリーを含めるための、事前リマインダー(early-reminder)となるsexpダイアリーエントリーもあります。たとえば記念日の1週間前にリマインダーが欲しいときは、以下を使用します

%%(diary-remind '(diary-anniversary 12 22 1968) 7) Ed's anniversary

これにより、fancy diaryは12月15日と12月22日に、‘Ed's anniversary’を表示します。

関数diary-dateは、整数またはt(すべての値を意味します)からなるmonth、day、yearの組み合わせで日付を指定します。たとえば、

%%(diary-date '(10 11 12) 22 t) Rake leaves

これによりfancy diaryは

Rake leaves

を毎年10月22日、11月22日、12月22日に表示します。

関数diary-floatを使って、11月の第3金曜日や、4月の最後の火曜日といった日付をダイアリーエントリーに記述することができます。パラメーターはmonthdayname、およびインデックスnです。エントリーはmonthの最初の日の後のn番目の曜日daynameに表示されます。ここでdayname=0は日曜日、1は月曜日、…です。nが負の場合、monthの最後から後方に数えます。monthの値に指定できるのは、月のリスト、単一の月、tの場合はすべての月を意味します。オプションのパラメーターdayを使用して、monthday日目の後または前の、n番目の曜日daynameを指定することもできます。dayのデフォルト値は、nが正のときは1で、nが負のときはと気はの最後の日です。たとえば、

%%(diary-float t 1 -1) Pay rent

これによりfancy diaryは

Pay rent

を毎月最後の月曜日に表示します。

sexpダイアリーエントリーの一般性により、アルゴリズム的に記述したダイアリーエントリーを指定できます。sexpダイアリーエントリーには、任意の与えられた日付にたいして、エントリーを適用するかどうかを計算する式が含まれます。値が非nilの場合はその日付にエントリーが適用され、そうでない場合は適用されません。式では判定する日付を変数dateで使用することができます。この変数の値は、グレゴリオ暦を参照するリスト(month day year)です。

sexpダイアリーエントリーは、式の値が非nilのときはその日付に適用されますが、いくつかの値は特別な意味をもちます。値が文字列の場合、その文字列はその日に発生するイベントを説明する文字列です。値は(mark . string)という形式をもつこともできます。markは、カレンダーでその日をどのようにマークするかを指定し、stringはそのイベントの説明です。markが1文字の文字列の場合、その文字はカレンダーの日付の隣に表示されます。markがフェイス名の場合、その日はそのフェイスで表示されます。marknilの場合、その日を特にハイライト表示しません。

21日がウィークデイのときは21日、21日が週末のときは前の日の金曜日に給料が支払われるとしましょう。以下はそのような日付にマッチするsexpダイアリーエントリーです:

&%%(let ((dayname (calendar-day-of-week date))
         (day (cadr date)))
      (or (and (= day 21) (memq dayname '(1 2 3 4 5)))
          (and (memq day '(19 20)) (= dayname 5)))
         ) Pay check deposited

以下のsexpダイアリーエントリーは、(fancy diary表示において)日付により異なるテキストをもつダイアリーエントリーを作成することができます:

%%(diary-sunrise-sunset)

地方時で、今日の日の出と日の入りの時刻のダイアリーエントリーを作成します。

%%(diary-lunar-phases)

月の位相にたいするダイアリーエントリーを作成します。

%%(diary-day-of-year)

その年での通算日数と、その年の残り日数でダイアリーエントリーを作成します。

%%(diary-iso-date)

今日と等価な、ISO商用日付のダイアリーエントリーを作成します。

%%(diary-julian-date)

今日と等価な、ユリウス暦日のダイアリーエントリーを作成します。

%%(diary-astro-day-number)

今日と等価な、天文日(ユリウス日)のダイアリーエントリーを作成します。

%%(diary-bahai-date)

今日と等価な、Bahá’í暦日のダイアリーエントリーを作成します。

%%(diary-chinese-date)

今日と等価な、旧暦日のダイアリーエントリーを作成します。

%%(diary-coptic-date)

今日と等価な、Copticカレンダー日のダイアリーエントリーを作成します。

%%(diary-ethiopic-date)

今日と等価な、エチオピア暦日のダイアリーエントリーを作成します。

%%(diary-french-date)

今日と等価な、フランス革命暦の日付のダイアリーエントリーを作成します。

%%(diary-hebrew-date)

今日と等価な、ヘブライ暦の日付のダイアリーエントリーを作成します。

%%(diary-islamic-date)

今日と等価な、イスラム暦の非助のダイアリーエントリーを作成します。

%%(diary-mayan-date)

今日と等価な、マヤ暦の日付のダイアリーエントリーを作成します。

%%(diary-persian-date)

今日と等価な、Persian calendarの日付のダイアリーエントリーを作成します。

例えば、以下のようなダイアリーエントリーを含めると

&%%(diary-hebrew-date)

fancy diary表示を使用している場合は、毎日のダイアリー表示に、その日に対応するヘブライ暦の日付が含まれるようになります(simple diary表示を使用している場合は、任意の日付のダイアリーにリテラル行‘&%%(diary-hebrew-date)’が表示されます)。

以下の関数は、特定の標準的なヘブライsexpダイアリーエントリーを構築するために使用されます:

%%(diary-hebrew-rosh-hodesh)

新しいヘブライ月にたいして、礼拝の発生と告知を告げるダイアリーエントリーを作成します。

%%(diary-hebrew-parasha)

毎週のシナゴーグ経典(synagogue scripture)の読書会を告げる、土曜日のダイアリーエントリーを作成します。

%%(diary-hebrew-sabbath-candles)

安息日のキャンドルライトを告げる、地方時のダイアリーエントリーを作成します。

%%(diary-hebrew-omer)

適切な場合は、omerを数えるダイアリーエントリーを作成します。

%%(diary-hebrew-yahrzeit month day year) name

命日をマークするダイアリーエントリーを作成します。命日の日付はグレゴリオ暦の日付です。ダイアリーエントリーは適切なヘブライ暦の命日、およびその前日に表示されます(カレンダーの日付様式に対応してパラメーターの順序は変化します。たとえばヨーロッパ標識ではdaymonthyearの順です)。

%%(diary-hebrew-birthday month day year)

ヘブライ暦での誕生日のダイアリーエントリーを作成します。

上記でドキュメントされたすべての関数は、オプションの引数markを受け取ります。これはカレンダー表示で、その日をどのようにマークするかを指定します。上記の関数の1つが特定の日付に適用されると決定された場合、上述したようにmarkを含んだ値を戻します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

32 メールの送信

Emacsから電子メールのメッセージを送信するには、C-x mとタイプします。これはメッセージのテキストとヘッダーを編集できる、*unsent mail*という名前のバッファーに切り替えます。編集が終了したらC-c C-sまたはC-c C-cとタイプして、それを送信します。

C-x m

メールの作成を開始します(compose-mail)。

C-x 4 m

同様ですが、他のウィンドウで行ないます(compose-mail-other-window)。

C-x 5 m

同様ですが、新しいフレームで行ないます(compose-mail-other-frame)。

C-c C-s

メールバッファーでは、メッセージを送信します(message-send)。

C-c C-c

メールバッファーでは、メッセージを送信して、そのバッファーを隠し(bury)ます(message-send-and-exit)。

メールバッファーは通常のEmacsバッファーなので、メールの作成中に他のバッファーに切り替えることができます。現在のメールを終了する前に他のメールを送信したい場合は、再度C-x mとタイプして新しいメールバッファーを開きます、このバッファーは異なる数字が後ろについた名前をもちます(その他のバッファー操作を参照)。(これはメール作成にデフォルトのMessageモードを使用する場合のみ機能する。メールコマンドを参照のこと。) 編集中の未送信メッセージの作成を継続したいと判っている場合には、C-u C-x mのようにコマンドにプレフィクス引数を与えれば、Emacsは使用していた最後のメールバッファーに切り替えて、終了する前にメッセージの編集ができるように計らいます。

コマンドC-x 4 m (compose-mail-other-window)は、C-x mと同じことを行ないますが、これはメールバッファーを別のウィンドウに表示します。コマンドC-x 5 m (compose-mail-other-frame)は、新しいフレームでこれを行ないます。

C-c C-cまたはC-c C-sとタイプしてメールを送信するとき、Emacsはどのようにしてメールを送信するべきか — SMTPを通じて直接送信するか、またはほかの方法を使うか — を尋ねます。詳細は、メールの送信を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

32.1 メールバッファーのフォーマット

以下はメールバッファーの内容の例です(訳注: 出典はコナン・ザ・グレートらしいです):

To: subotai@example.org
CC: mongol.soldier@example.net, rms@gnu.org
Subject: Re: What is best in life?
From: conan@example.org
--text follows this line--
To crush your enemies, see them driven before you, and to
hear the lamentation of their women.

メールバッファーのトップは、一連のヘッダーフィールド(header fields)です。これは電子メールの受取人、subject(題目)などに関する情報を指定するのに使用されます。上記のバッファー例には‘To’、‘CC’、‘Subject’、‘From’のヘッダーフィールドが含まれています。いくつかのヘッダーフィールドは、それが適切なときは、事前に自動的に初期化されます。

--text follows this line--’という行は、ヘッダーフィールドとメッセージのbody(本文、またはtext)を分割します。この行の上にあるすべては、ヘッダーの一部として扱われます。下にあるすべては、bodyとして扱われます。区切り行自体は、実際に送信されるメッセージには含まれません。

通常の編集コマンドで、ヘッダーフィールドの挿入と編集ができます。ヘッダーフィールドを編集するための特定のコマンドについては、メールヘッダーの編集を参照してください。‘Date’や‘Message-Id’のような特定のヘッダーは、通常はメールバッファーでは省略され、メッセージを送信するとき自動的に作成されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

32.2 メールヘッダーフィールド

メールバッファーのヘッダーフィールドは、行の最初がフィールド名で始まります。フィールド名はコロンで終端されます。フィールド名で大文字小文字は区別されません。コロンとオプションの空白文字の後に、フィールドの内容を記述します。

好きな名前のヘッダーフィールドを使用できますが、多くの人は通常、一般に認められた意味をもつは、標準的なフィールド名だけを使用します。

ヘッダーフィールド‘From’は、電子メールを送信した人(あとえばあなた)を識別します。これは有効なメールアドレスである必要があります。なぜなら、通常はそのアドレスに返信されるからです。このヘッダーフィールドのデフォルトの内容は、変数user-full-name(あなたのフルネームを指定します)とuser-mail-address(あなたの電子メールアドレス)から計算されます。いくつかのオペレーティングシステムでは、Emacsはこの2つの変数を環境変数から初期化します(一般的な変数を参照してください)。この情報が利用不可能か間違っている場合、変数を自分でカスタマイズする必要があります(Easy Customizationインターフェースを参照してください)。

以下は‘From’以外の、一般的に使用されるフィールドの表です:

To

メッセージを送信するメールアドレスです。複数のアドレスを記述するには、それらを区切るのにカンマを使用します。

Subject

メッセージのsubjectです。

CC

メッセージを送信する追加のメールアドレスです。これは‘To’と似ていますが、受取人はそのメッセージが自分宛だと思うべきではありません。

BCC

実際に送信するメッセージのヘッダーには現れない、追加のメッセージ送信先のメールアドレスです。‘BCC’はblind carbon copiesが由来です。

FCC

送信されたメッセージのコピーが追加されるべき、ファイルの名前です。ファイルがBabyl形式(Emacs23以前のRmailで使用されていました)の場合、EmacsはBabyl形式で書き込み、それ以外はmbox形式で書き込みます。Rmailバッファーがそのファイルをvisitしている場合、Emacsはそれに合わせて更新します。複数のファイルを指定するには、複数の‘FCC’フィールドを使用して、各フィールドに1つのファイル名を記述します。

Reply-To

From’のかわりとなる、返信が送信されるべきアドレスです。これは何らかの理由により、‘From’のアドレスが返信を受け取れないときに使用します。

Mail-Reply-To

このフィールドは‘Reply-To’より優先されます。メーリングリストの中には、‘Reply-To’を独自の目的(問題の多い、何らかの方法)のために使用しているものがあるため、これが使用されます。

Mail-Followup-To

follow-upメッセージのための、デフォルトの受取人のために使用する1つ以上のアドレスです。これは通常、登録しているメーリングリストからメッセージを受信するとき、余分なコピーを送らせないようにしたいときに使用します。

In-Reply-To

返信するメッセージのための識別子です。ほとんどのメールリーダーは、関連するメッセージをまとめてグループ化するためにこの情報を使用します。このヘッダーは通常、Emacsに組み込まれた任意のメールプログラムでメッセージに返信するとき、自動的に充填されます。

References

以前の関連するメッセージのための識別子です。‘In-reply-To’と同じように、これは通常、自動的に充填されます。

To’、‘CC’、‘BCC’のフィールドは何回記述してもよく、また各フィールドにはカンマで括って複数のアドレスを含めることができます。この方法により、メッセージを送信する複数の場所を指定できます。これらのフィールドには継続行も使用できます。フィールドの開始行に続く、空白文字で始まる1行以上の行は、そのフィールドの一部とみなされます。以下は継続行を使用した‘To’フィールドの例です:

To: foo@example.net, this@example.net,
  bob@example.com

変数mail-default-headersに文字列をセットすることにより、特定のデフォルトヘッダーを挿入するよう、Emacsに指示できます。これによりC-x mでメッセージヘッダーにその文字列が挿入されます。たとえば以下は、各メッセージにヘッダー‘Reply-To’と‘FCC’を追加する例です:

(setq mail-default-headers
      "Reply-To: foo@example.com\nFCC: ~/Mail/sent")

デフォルトのヘッダーフィールドが、特定のメッセージにたいして適切でない場合、メッセージを送信する前にそれらを編集する必要があります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

32.3 メールエイリアス

メールエイリアス(mail aliases)を定義することができます。これは1つ以上のメールアドレスを意味する短い呼び名です。デフォルトでは、メールエイリアスはファイル~/.mailrcで定義されます。変数mail-personal-alias-fileをセットすることにより、異なるファイル名を指定できます。

~/.mailrcでエイリアスを定義するには、以下のように記述します:

alias nick fulladdresses

これはnickfulladdressesに展開されるという意味で、fulladdressesは単一のアドレス、またはスペースで区切られた複数のアドレスです。たとえばmaingnuが、gnu@gnu.orgとあなた自身のローカルのアドレスを意味するよう定義するには、以下の行を記述します:

alias maingnu gnu@gnu.org local-gnu

アドレスにスペースが含まれる場合は、以下のようにダブルクォートでアドレス全体をクォートします:

alias jsmith "John Q. Smith <none@example.com>"

その人の名前の部分などのような、アドレスの特定の部分をダブルクォートで括る必要はないことに注意してください。Emacsは必要に応じてそれらを挿入します。たとえば上記のアドレスは‘"John Q. Smith" <none@example.com>’のように挿入されます。

Emacsは、~/.mailrcでのincludeコマンドも識別します。これらは以下のようなものです:

source filename

ファイル~/.mailrcは、Emacsだけのものではありません。他の多くのメールを閲覧するプログラムが、メールアドレスのためにこれを使用し、他にもさまざまなコマンドが含まれます。しかしEmacsは、エイリアスの定義とインクルードコマンド以外のすべてを無視します。

メールエイリアスはabbrevのように — つまり、エイリアスの後で単語区切り文字をタイプするとすぐに — 展開されます。この展開はヘッダーフィールド‘To’、‘From’、‘CC’、‘BCC’、‘Reply-To’(およびそれらの‘Resent-’の変種)だけで展開されます。‘Subject’のような、他のヘッダーフィールドでは展開されません。

コマンドM-x mail-abbrev-insert-aliasを使って、エイリアスされたアドレスを直接挿入することもできます。これは補完つきでエイリアス名を読み取り、ポイント位置にそれの定義を挿入します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

32.4 メールコマンド

*mail*バッファーのデフォルトのメジャーモードは、Messageモードと呼ばれます。これはTextモードのように振る舞いますが、メッセージをより快適に編集するために、C-cプレフィクスを伴う、追加のコマンドをいくつか提供します。

このセクションでは、Messageモードで利用可能な、もっとも一般的に使用されるコマンドを説明します。 Messageモードにはそれ自身のマニュアルがあり、その機能についてより詳細に説明されています。Message in Messageを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

32.4.1 メールの送信

C-c C-c

そのメッセージを送信して、メールバッファーを隠し(bury)ます(message-send-and-exit)。

C-c C-s

そのメッセージを送信して、メールバッファーを選択されたまま残します(message-send)。

メッセージを送信するために通常使用されるコマンドは、C-c C-c (message-send-and-exit)です。これはメッセージを送信して、メールバッファーを隠す(bury) — つまりバッファーを再選択するときもっとも低い優先順位になるようにします。かわりにメールバッファーをkillしたい場合は、変数message-kill-buffer-on-exittに変更してください。

コマンドC-c C-s (message-send)はメッセージを送信して、そのバッファーを選択されたまま残します。(たとえば新しい送信先のために)メッセージを変更して、再度送信したい場合に、このコマンドを使用します。

メッセージの送信により、フックmessage-send-hookが実行されます。メールバッファーがファイルをvisitしているバッファーの場合をのぞき、送信によりメールバッファーは変更なし(unmodified)とマークされます(ファイルをvisitしている場合は、そのファイルを保存したときだけ変更なしとマークされます。このため、同じメッセージを2回送信しても警告はされません)。

変数message-send-mail-functionはメッセージの配送方法を制御します(send-mail-functionはMailモードで使用される)。send-mail-functionの値は以下の関数のいずれかを指定します:

sendmail-query-once

配送方法(このリストの他の項目のうちの1つ)を尋ね、このメッセージにその方法を使用します。smtpmail-send-itを通じてすでにメールの配送方法を変数にセットしていない場合(以下参照)、これがデフォルトです。

smtpmail-send-it

インターネットサービスプロバイダーの対外SMTPメールサーバーのような、外部のメールホストを通じてメールを送信します。そのSMTPサーバーに接続する方法をEmacsに指示していない場合、コマンドはこの情報の入力を求め、それは変数smtpmail-smtp-serverと、ファイル~/.authinfoに保存されます。Emacs SMTP Library in Sending mail via SMTPを参照してください。

sendmail-send-it

システムのデフォルトのsendmailプログラム、またはそれと等価なプログラムを使用してメールを送信します。これは、そのシステムがSMTPで直接メールを配送できるように、セットアップされている必要があります。

mailclient-send-it

メールバッファーを、システムで指定されたメールクライアントに渡します。詳細はファイルmailclient.elの、コメントセクションを参照してください。

feedmail-send-it

これはsendmail-send-itと同様ですが、後で送信するためにメッセージをキューできます。詳細は、ファイルfeedmail.elの、コメントセクションを参照してください。

ASCII文字を含むメッセージを送信する場合、それらはコーディングシステムでエンコードされる必要があります。コーディングシステムは通常、選択された言語環境(言語環境を参照してください)により、自動的に指定されます。変数sendmail-coding-systemをセットすることにより、対外に送信するメールのコーディングシステムを明示的に指定することができます(コーディングシステムの認識を参照してください)。そのようにして決定されたコーディングシステムで扱えない文字が、特定のメッセージに含まれる場合、Emacsは利用可能なコーディングシステムのリストを表示して、使用するコーディングシステムの選択を求めます。出力のためのコーディングシステムの選択を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

32.4.2 メールヘッダーの編集

Messageモードは、特定のヘッダーフィールドに移動したり、ヘッダーのアドレスを補完する、以下の特別なコマンドを提供します。

C-c C-f C-t

To’ヘッダーに移動します(message-goto-to)。

C-c C-f C-s

Subject’ヘッダーに移動します(message-goto-subject)。

C-c C-f C-c

CC’ヘッダーに移動します(message-goto-cc)。

C-c C-f C-b

BCC’ヘッダーに移動します(message-goto-bcc)。

C-c C-f C-r

Reply-To’ヘッダーに移動します(message-goto-reply-to)。

C-c C-f C-f

Mail-Followup-To’ヘッダーフィールドに移動します(message-goto-followup-to)。

C-c C-f C-w

ファイル名の補完つきで、新しい‘FCC’ヘッダーフィールドを追加します(message-goto-fcc)。

C-c C-b

メッセージ本文の先頭に移動します(message-goto-body)。

TAB

メールアドレスを補完します(message-tab)。

特定のヘッダーフィールドにポイントを移動するコマンドは、すべてC-c C-fというプレフィクスを指定します(‘C-f’は“field”が由来です)。指定したフィールドが存在しない場合、コマンドは新たにそれを作成します(例外はmail-fccで、これは毎回新たなフィールドを作成します)。

コマンドC-c C-b (message-goto-body)は、ポイントをヘッダー区切り行の下 — つまり本文の先頭にポイントを移動します。

To:’、‘CC:’、‘BCC:’のようなアドレスを含むヘッダーフィールドを編集しているときは、TAB (message-tab)をタイプすることにより、アドレスを補完できます。これは2つの方法にもとづいて、そのアドレスにタイプするフルネームを挿入しようと試みます。まず複数のディレクトリーサーバープロトコルを認識するEUDCライブラリーを試み(EUDC in The Emacs Unified Directory Clientを参照してください)、それに失敗したときはメールエイリアスによりアドレスの展開を試みます(メールエイリアスを参照してください)。メール本文のような、アドレスを要求しないヘッダーフィールドにポイントがあるとき、TABはタブ文字を挿入するだけです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

32.4.3 メールの引用

C-c C-y

選択されたメッセージを、引用のためにメールリーダーからyankします(message-yank-original)。

C-c C-q

他のメッセージから引用された各パラグラフをフィルします(message-fill-yanked-message)。

C-c C-y (message-yank-original)を使用して、返信するメッセージから“引用(cite)”することができます。これは、そのメッセージのテキストをメールバッファーに挿入します。このコマンドは、Rmailのように、Emacsから実行されるメールリーダーから呼び出されたときだけ機能します。

デフォルトでは、Emacsは引用されたテキストの各行の前に、文字列‘>’を挿入します。このプレフィクス文字列は、変数message-yank-prefixで指定されます。プレフィクス引数を指定してmessage-yank-originalを呼び出した場合、引用のためのプレフィクスは挿入されません。

C-c C-yを使用した後で、C-c C-q (message-fill-yanked-message)とタイプして、引用されたメッセージのパラグラフをフィルできます。C-c C-qの1つの使い方としては、そのようなパラグラフのすべてを個別にフィルすることです。クォートされたメッセージの1つのパラグラフをフィルするには、M-qを使います。フィルが、あなたが使用している引用プレフィクスを自動的に処理しない場合は、フィルプレフィクスを明示的にセットしてみてください。テキストのフィルを参照してください。

フックmail-citation-hookを通じて、メールの引用をカスタマイズできます。たとえば、より柔軟な引用を提供するSuperciteパッケージを使うことができます(Introduction in Superciteを参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

32.4.4 メール、その他

メールバッファーでC-c C-a (mml-attach-file)とタイプすることにより、送信するメッセージに、ファイルを添付(attach)できます。添付は、MIME(Multipurpose Internet Mail Extensions)標準を使って行なわれます。

mml-attach-fileコマンドはファイル名と、添付ファイルのcontent type(内容のタイプ)description(説明)disposition(性質)の入力を求めます。通常content typeは自動的に検知されます。単にRETとタイプすると、そのデフォルトが適用されます。descriptionは1行のテキストで、そのメールの受取人には添付ファイルの隣に表示されます。これは空にすることもできます。dispositionは‘inline’、または‘attachment’のどちらかです。‘inline’の場合、メッセージ本文に添付ファイルへのリンクが表示され、‘attachment’の場合は、本文とは別にリンクが表示されます。

mml-attach-fileコマンドは、Messageモードに特有なコマンドです。Mailモードではかわりに、mail-add-attachmentを使用します。これはファイル名の入力だけを求め、content typeとdispositionは自動的に決定されます。添付ファイルの説明を含めたい場合は、それをメッセージの本文にタイプしてください。

添付ファイルの実際の内容は、メールバッファーには挿入されません。かわりに、以下のような代替テキストがメールバッファーに挿入されます:

<#part type="text/plain" filename="~/foo.txt" disposition=inline>
<#/part>

C-c C-cまたはC-c C-sでメッセージを送信するとき、それと一緒に添付ファイルも送信されます。

メッセージを作成しているとき、M-x ispell-messageとタイプして、メッセージテキストのスペル訂正を行なうことができます。受信メッセージから送信用の下書きにyankした場合、このコマンドはyankされたテキストをスキップして、あなた自身が挿入したテキストだけをチェックします(このコマンドはインデント、またはあなたの入力と引用された行を区別するmail-yank-prefixを調べます)。スペルのチェックと訂正を参照してください。

Messageモードをオンに切り替えると(C-x mは自動的にこれを行ないます)、ノーマルフックのtext-mode-hookmessage-mode-hookが自動的に実行されます。新しい送信メッセージの初期化では、ノーマルフックmessage-setup-hookが実行されます。メールバッファーの外観を変更したい場合は、このフックを使うことができます。フックを参照してください。

これらのフックの主な違いは、それらが呼び出されるタイミングだけです。C-x m, message-mode-hookとタイプしたときは、メールバッファーが作成された直後にmessage-mode-hookが実行されます。その後message-setup関数がそのバッファーのデフォルトの内容を挿入します。これらのデフォルトの内容が挿入された後に、message-setup-hookが実行されます。

既存のメッセージにたいして、C-x mで作成を継続する場合、そのメールバッファーに切り替えた直後に、message-mode-hookが実行されます。バッファーが変更されていない場合、またはそれを削除して新たに作成を開始する場合には、デフォルトの内容が挿入された後に、message-setup-hookが実行されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

32.5 メール署名

各メッセージの最後に標準的なテキストの断片 — メール署名(mail signature) — を追加できます。この署名には、あなたの電話番号や住所などの情報を含めることができます。変数message-signatureは、Emacsがメール署名を扱う方法を決定します。

message-signatureのデフォルト値はtです。これはメール署名をファイル~/.signatureから探すことを意味します。ファイルが存在する場合、そのファイルの内容がメールバッファーの最後に自動的に挿入されます。変数message-signature-fileを通じて署名ファイルを変更できます。

message-signatureを文字列に変更すると、それは署名のテキストを直接指定することになります。

message-signaturenilに変更した場合、Emacsはメール署名を自動的に挿入しません。メールバッファーでC-c C-w (message-insert-signature)とタイプすることにより、メール署名を挿入できます。この場合も、Emacsは署名ファイルから署名を探します。

メールを作成するのにMessageモードではなくMailモードを使用する場合、どのようにして署名を送るか決定する変数は、mail-signaturemail-signature-fileになります。

慣例により、メール署名は行の内容が‘-- ’であることによりマークされるべきです。署名にこのプレフィクスがない場合、このプレフィクスが追加されます。署名は4行を超えないようにするべきです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

32.6 アミューズメント

M-x spookは、送信するメールメッセージに、ランダムに選択されたキーワードの行を追加します。これらのキーワードは、あなたが何らかの破壊活動を企てていると思わせるような単語のリストから選択されます。

この機能の背後にあるアイデアは、NSA16や他の情報機関が、かれらが関心をもつキーワードを含むすべてのインターネットメールのメッセージを監視しているという疑惑です(そのような政府機関は、“やっていない”と言いますが、もちろんかれらはそう言うでしょう)。このアイデアは、もし多くの人々がメッセージに不審な単語を含めれば、政府機関は不審な入力で手一杯になり、やがて最後はそれらを読むのを止めるだろうというものです。これが本当かどうかはわかりませんが、少なくとも人々を楽しませることができます。

fortuneプログラムを使用して、送信メールにフォーチューンクッキー(fortune cookie)メッセージを追加できます。これを行なうにはmail-setup-hookfortune-to-signatureを追加してください。

(add-hook 'mail-setup-hook 'fortune-to-signature)

多分、これを使う前に変数fortune-fileをセットする必要があるでしょう。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

32.7 メール作成方法

このチャプターでは、メールを編集したり送信する通常のEmacsモードである、Messageモードを説明してきました。これは、いくつかの利用可能なモードのうちの1つに過ぎません。Emacs23.2以前では、デフォルトのモードはMailモードで、これは多くの点でMessageモードに似ていますが、MIMEサポートのような機能がありません。その他の利用可能なモードはMH-Eです(MH-E in The Emacs Interface to MHを参照してください)。

これらのメールユーザーエージェント(mail user agents)から、メールを編集したり送信するための、好みの方法を選択できます。コマンドC-x mC-x 4 mC-x 5 mは指定されたエージェントを使用するので、Emacsでメールを送信する他の様々な部分(たとえばバグリポーターなど、バグの報告を参照してください)もこれを行ないます。メールユーザーエージェントを指定するには、変数mail-user-agentをカスタマイズします。現在のところ、正式な値にはmessage-user-agent(Messageモード)、sendmail-user-agent(Mailモード)、gnus-user-agentmh-e-user-agentが含まれます。

他のメール作成方法を選択した場合、メールバッファーとMessageモードに関するこのチャプターの情報は適用できません。他の方法は違うバッファーで異なるフォーマットのテキストを使用し、コマンドも異なります。

同様に、メールを読むための好みの方法を指定するには、変数read-mail-commandをカスタマイズします。デフォルトはrmailです(Rmailでメールを読むを参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33 Rmailでメールを読む

Rmailは、メールを閲覧したり処理するための、Emacsのサブシステムです。Rmailは、Rmailファイルを呼ばれるファイルに、メールメッセージを保存します。Rmailファイルの中のメッセージの閲覧は、Rmailモードという特別なメジャーモードで行なわれます。このモードはメールを管理するために実行するコマンドのために、多くの文字を再定義します。

Emacsには、より複雑かつ柔軟なGnusと呼ばれるメールを読むためのサブシステムが同梱されています。Gnusは巨大なパッケージなので、独自のマニュアルTop in The Gnus Newsreaderで説明されているので、それを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33.1 Rmailの基本的な概念

もっとも簡単な方法でRmailを使用するには、メールが保存される~/RMAILというRmailファイルを使用します。これはプライマリーRmailファイル(primary Rmail file)と呼ばれます。コマンドM-x rmailはプライマリーRmailファイルを読み込み、inbox(受信箱)から新しいメールをマージして、未読の最初のメッセージを表示して、それを閲覧出きるようにします。変数rmail-file-nameはプライマリーRmailファイルの名前を指定します。

Rmailは、Rmailファイルのメッセージを、1度に1つだけ表示します。表示されているメッセージは、カレントメッセージ(current message: 現在のメッセージ)と呼ばれます。Rmailモードの特別なコマンドは、カレントメッセージの削除、他のファイルへのコピー、返信、他のメッセージへの移動を行なうことができます。複数のRmailファイル(ファイルの処理を参照)を作成して、それらの間でメッセージの移動をするのに、Rmailを使用することができます(外部ファイルへのメッセージのコピーを参照)。

Rmailファイルでは通常、メッセージは受信した順になっています。それらをソートする他の方法を指定できます(Rmailファイルのソートを参照してください)。メッセージは連続する整数で識別され、それはメッセージナンバー(message numbers)と呼ばれます。カレントメッセージのナンバーはRmailのモードラインに表示され、その後にはファイル内のメッセージの総数が続きます。jでメッセージナンバーを指定して、そのメッセージに移動できます(メッセージ間の移動を参照してください)。

通常のEmacsの慣例にしたがい、Rmailでの変更は、そのファイルを保存したときだけ永続化されます。s (rmail-expunge-and-save)で、ファイルを保存することができます、これは最初に削除されたメッセージをファイルから完全に削除します(メッセージの削除を参照してください)。完全な削除を行なわずにファイルを保存するには、C-x C-sを使用します。Rmailは、inboxファイルから新しいメールをマージした後に、自動的にRmailファイルを保存します。

Rmailをexitするには、q (rmail-quit)を使用します。これはRmailにたいして完全な削除と保存を行い、Rmailバッファーと、(表示されていれば)サマリーバッファーを隠します(サマリーを参照してください)。しかし正式にexitする必要はありません。Rmailから他のバッファーを編集するために切り替えて、2度とRmailに戻らなければ、それはexitしたことになります。(他の変更したファイルと同様に)最終的にRmailファイルを確実に保存することだけが重要です。これを行なうにはC-x sが適しています(ファイルを保存するコマンドを参照してください)。Rmailコマンドのb rmail-buryは、Rmailファイルにたいする完全な削除と保存を行なわずに、Rmailバッファーとサマリーを隠します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33.2 メッセージのスクロール

Rmailが画面に収まらないメッセージを表示しているときは、残りを読むためにスクロールしなければなりません。通常のスクロールコマンドC-vM-vM-< (スクロールを参照)などでこれを行なうことができますが、Rmailでのスクロールは頻繁に行なわれるので、簡単に行なえるようにする価値があります。

SPC

前方にスクロールします(scroll-up-command)。

DEL
S-SPC

後方にスクロールします(scroll-down-command)。

.

メッセージの最初にスクロールします(rmail-beginning-of-message)。

/

メッセージの最後にスクロールします(rmail-end-of-message)。

メッセージを読むときにもっとも一般的に行なうのは、画面単位でメッセージをスクロールすることなので、RmailはSPCDEL(またはS-SPC)で、C-v (scroll-up-command)とM-v (scroll-down-command)と同じことを行なうようにしています。

コマンド. (rmail-beginning-of-message)は、選択されたメッセージの最初に、後方へスクロールします。これはM-<とまったく同じではありません。このコマンドはマークをセットしません。他にも、カレントメッセージのバッファー境界を変更していた場合(たとえば編集により。メッセージの編集を参照されたい)は、それをリセットします。同様に、コマンド/ (rmail-end-of-message)は、選択されたメッセージの最後に、前方へスクロールします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33.3 メッセージ間の移動

メッセージにたいして行なうもっとも基本的なことは、それを読むことです。Rmailでこれを行なうために、そのメッセージをカレントにします。通常の方法はファイルを、受信したメッセージ順に移動していく方法です(その最初のメッセージは‘unseen’(未読)の属性をもちます。Rmailの属性を参照してください)。他の新しいメッセージを読むには、前方に移動します。古いメッセージを再読するには後方に移動します。

n

間にある削除されたメッセージをスキップして、次の削除されていないメッセージに移動します(rmail-next-undeleted-message)。

p

前の削除されていないメッセージに移動します(rmail-previous-undeleted-message)。

M-n

削除されたメッセージも含めて、次のメッセージに移動します(rmail-next-message)。

M-p

削除されたメッセージも含めて、前のメッセージに移動します(rmail-previous-message)。

C-c C-n

カレントメッセージと同じsubjectの、次のメッセージに移動します(rmail-next-same-subject)。

C-c C-p

カレントメッセージと同じsubjectの、前のメッセージに移動します(rmail-previous-same-subject)。

j

最初のメッセージに移動します。引数nを指定すると、n番目のメッセージに移動します(rmail-show-message)。

>

最後のメッセージに移動します(rmail-last-message)。

<

最初のメッセージに移動します(rmail-first-message)。

M-s regexp RET

regexpへのマッチを含む、次のメッセージに移動します(rmail-search)。

- M-s regexp RET

regexpへのマッチを含む、前のメッセージに移動します(これは負の引数によるM-sである)。

npは、Rmailでメッセージを移動する通常の方法です。これらは、(通常そうしたいように)削除されたメッセージをスキップして、メッセージを順番に移動していきます。これらのコマンドの定義には、rmail-next-undeleted-messageおよびrmail-previous-undeleted-messageという名前がつけられています。削除されたメッセージをスキップしたくない場合 — たとえばメッセージの削除を取り消すために — は、変種のM-nM-p(rmail-next-messagermail-previous-message)を使います。これらのコマンドへの数引数は、繰り返し回数を指定します。

Rmailでは数引数の指定は、単に数字をタイプして行なうことができます。最初にC-uをタイプする必要はありません。単に-とタイプして、負の引数を指定することもできます。

M-s (rmail-search)は、Rmail版の検索コマンドです。通常のインクリメンタル検索C-sは機能しますが、これはカレントメッセージだけを検索します。M-sの目的は、他のメッセージにたいする検索です。これは非インクリメンタルに正規表現(正規表現の構文を参照してください)を読み取り、後続のメッセージの先頭から検索を開始して、見つかったらそのメッセージを選択します。regexpが空の場合、M-sは前回使用したregexpを再使用します。

ファイルの中の他のメッセージにたいして後方に検索するには、M-sに負の引数を与えます。Rmailでは- M-sでこれを行なうことができます。これは前のメッセージの最後から検索を開始します。

ラベルにもとづく検索も可能です。ラベルを参照してください。

C-c C-n (rmail-next-same-subject)コマンドは、カレントメッセージと同じsubjectをもつ、次のメッセージに移動します。プレフィクス引数は繰り返し回数として使用されます。負の引数を指定すると、C-c C-p (rmail-previous-same-subject)のように、後方に移動します。subjectを比較するとき、subjectへの返信に通常付加されるようなプレフィクスは無視します。これらのコマンドは、同じsubjectに関するすべてのメッセージ、いわゆるthreadを読むときに有用です。

メッセージの絶対番号を指定してメッセージに移動するには、メッセージ番号を引数として、j (rmail-show-message)を使用します。引数を与えない場合、jは最初のメッセージに移動します。< (rmail-first-message)も最初のメッセージを選択します。> (rmail-last-message)は最後のメッセージを選択します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33.4 メッセージの削除

メッセージを残す必要がなくなったとき、それを削除(delete)できます。これはそのメッセージを無視するフラグをつけ、いくつかのRmailコマンドは、そのメッセージが存在しないかのように振る舞います。しかし、そのメッセージはまだRmailファイルの中にあり、メッセージ番号ももっています。

Rmailファイルにたいして完全な削除(expunging)を行なうことにより、削除されたメッセージを実際に消去します。残ったメッセージには新たに連番が振られます。

d

カレントメッセージを削除して、次の削除されていないメッセージに移動します(rmail-delete-forward)。

C-d

カレントメッセージを削除して、前の削除されていないメッセージに移動します(rmail-delete-backward)。

u

カレントメッセージの削除を取り消すか、前の削除されたメッセージに後方へ移動して、そのメッセージの削除を取り消します(rmail-undelete-previous-message)。

x

Rmailファイルにたいして完全な削除を行ないます(rmail-expunge)。

Rmailには、メッセージを削除するためのコマンドが2つあります。両方ともカレントメッセージを削除して、他のメッセージを選択します。d (rmail-delete-forward)は、すでに削除されたメッセージをスキップして次のメッセージに移動し、C-d (rmail-delete-backward)は、前の削除されていないメッセージに移動します。指定方向に、移動先となる削除されていないメッセージが存在しない場合は、単にそのメッセージを削除するだけで、カレントメッセージはそのメッセージのままです。数引数は繰り返し回数を指定します。これにより1つのコマンドで複数のメッセージを削除できます。負の引数はdC-dの意味を逆転します。

Rmailがメッセージを削除するときは、フックrmail-delete-message-hookが実行されます。フック関数が呼び出されるとき、そのメッセージは削除とマークされますが、そのメッセージがRmailバッファーのカレントメッセージのままです。

すべての削除されたメッセージを最終的にRmailファイルから消すには、x (rmail-expunge)とタイプします。これを行なうまでは、削除されたメッセージの削除を取り消す(undelete)ことができます。削除の取り消しコマンドu (rmail-undelete-previous-message)は、ほとんどのケースにおいてdコマンドの効果を取り消すようにデザインされています。カレントメッセージが削除されている場合は、カレントメッセージの削除を取り消します。そうでない場合は、削除されたメッセージが見つかるまで後方に移動して、そのメッセージの削除を取り消します。数引数は繰り返し回数を指定します。これにより1つのコマンドで複数のメッセージ削除を取り消すことができます。。

通常、duで取り消すことができます。なぜならuは後方に移動して、dで削除されたメッセージの削除を取り消すからです。しかしこれは、削除するメッセージの前にすでに削除されたメッセージがある場合、dはこれらのメッセージをスキップするのでうまく機能しません。その後でuコマンドを実行すると、スキップされた最後のメッセージの削除を取り消すからです。この問題を避ける明解な方法はありません。しかしuコマンドを繰り返すことにより、削除を取り消したいメッセージに戻ることができます。M-pコマンドで特定の削除されたメッセージを選択してから、uをタイプして削除を取り消すこともできます。

削除されたメッセージは‘deleted’の属性をもち、結果として、カレントメッセージが削除されている場合はモードラインに‘deleted’が表示されます。実際のところ、メッセージの削除と削除の取り消しは、この属性の追加または削除に過ぎません。Rmailの属性を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33.5 Rmailファイルとinbox

ローカルでメールを受信したとき、オペレーティングシステムは受信メールを、私たちがinboxと呼ぶファイルに配します。Rmailを開始したとき、movemailと呼ばれるCプログラムを実行して、inboxから新しいメッセージを、RmailセッションのRmailファイルにコピーします。このRmailファイルには、以前のRmailセッションの他のメッセージも含まれています。Rmailで実際に読むメールは、このファイルの中にあります。この操作は新しいメールの取得(getting new mail)と呼ばれます。gとタイプすることにより、いつでも新しいメールを取得できます。

変数rmail-primary-inbox-listは、プライマリーRmailファイルにたいするinboxファイルのリストを含みます。この変数を明示的にセットしない場合、Rmailは環境変数MAILを使用するか、最後の手段としてrmail-spool-directoryにもとづく、デフォルトのinboxを使用します。デフォルトのinboxはオペレーティングシステムに依存し、それは/var/mail/username/var/spool/mail/username/usr/spool/mail/usernameなどです。

コマンドset-rmail-inbox-listで、カレントセッションでの任意のRmailファイルにたいするinboxファイルを指定できます。複数のRmailファイルを参照してください。

inboxとは別にRmailファイルをもつべき理由が2つあります。

  1. inboxファイルのフォーマットは、オペレーティングシステムと、それを使用する他のメールソフトによりさまざまです。Rmailの一部だけがそれらの候補を理解していればよく、それらすべてをRmail自身のフォーマットに変換する方法だけを理解すればよいからです。
  2. メールを紛失せずにinboxにアクセスするのは厄介です。なぜならそれはメール配信とインターロック(連動)する必要があるからです。さらにオペレーティングシステムごとに、異なるインターロック技術が使用されています。inboxから別のRmailファイルに1度メールを移動する方法により、Rmailの残りのすべてがインターロックの必要性を無視できます。なぜならRmailはRmailファイルだけを操作すればよいからです。

Rmailは、Rmailファイルの内部フォーマットとして、UnixおよびGNUシステムに取り入れられた、標準的な‘mbox’フォーマットを使用します(実際のところ、mboxフォーマットとは若干の違いがあります。その違いは重要ではありませんが、変数rmail-mbox-formatをセットすることにより、あなたのシステムが使用するフォーマットをRmailに指定できます。詳細は、変数のドキュメントを参照してください)。

新しいメールを受信したとき、Rmailは最初にその新しいメールをinboxファイルからRmailファイルにコピーします。それからRmailファイルを保存して、その後でinboxファイルからそれをクリアーします。この方法では、システムのクラッシュにより、inboxとRmailファイルの間でメールの重複は発生するかもしれませんが、メールを失うことはあり得ません。rmail-preserve-inboxが非nilの場合、Rmailは新しいメールを受信したときにinboxファイルをクリアーしません。旅行の際など、携帯用のコンピューターでPOPを通じてメールをチェックするときは、この変数をセットすれば、メールはサーバーに残るので、後であなたがメインに使用するワークステーションのデスクトップに保存することができます。

Rmailがinboxファイルから間接的に新しいメールをコピーするケースがあります。最初にmovemailプログラムを実行してinboxから、Rmailファイルと同じディレクトリーにある、.newmail-inboxnameと呼ばれる中間ファイルにメールを移動します。その後、Rmailは、そのファイルから新しいメールをマージして、Rmailファイルを保存し、中間ファイルの削除はその後にだけ行なわれます。悪いタイミングでクラッシュが発生した場合、中間ファイルは残っているので、Rmailは次にinboxファイルから新しいメールを取得するとき、それを再使用します。

Rmailが.newmail-inboxnameの中のデータをmbox形式に変換できない場合、ファイルをRMAILOSE.n(nはファイル名を一意にするために選ばれます)にリネームするので、Rmailはそのデータで再度問題を起こすことはなくなります。メッセージの何がRmailを混乱させたか調べて、それを削除すべきです(大抵は8進コード037のcontrol-underscoreがメッセージに含まれている場合です)。その後、修正されたファイルから1 gを使って新しいメールを取得できます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33.6 複数のRmailファイル

Rmailはデフォルトで、あなたのプライマリーRmailファイル(primary Rmail file)を操作します。これは~/RMAILというファイルで、inboxファイルからメールを受け取ります。しかし他のRmailファイルを所有して。Rmailでそれを編集することができます。これらのファイルは、それら自身のinboxからメールを受け取ったり、明示的なRmailコマンドでメッセージを移動することができます(外部ファイルへのメッセージのコピーを参照してください)。

i file RET

fileをEmacsに読み込んで、それにたいしてRmailを実行します(rmail-input)。

g

カレントRmailファイルのinboxから、新しいメールをマージします(rmail-get-new-mail)。

C-u g file RET

inboxファイルfileから新しいメールをマージします。

プライマリーRmailファイル以外のファイルでRmailを実行するために、Rmailでi (rmail-input)コマンドを使用できます。これは、そのファイルをRmailモードでvisitします。Rmailの外からでもM-x rmail-inputを使用することができますが、同じことを行なうC-u M-x rmailの方が簡単にタイプできます。

通常iで読み込むファイルは、有効なmboxファイルであるべきです。そうでない場合、Rmailはそのファイルのテキストをmbox形式に変換しようと試み、そのバッファーで変換されたテキストをvisitします。バッファーを保存すると、そのファイルが変換されます。

存在しないファイル名を指定した場合、iは新しいRmailファイルを作成するために、新しいバッファーを初期化します。

メニューからRmailファイルを選択することもできます。メニューClassifyの、アイテムInput Rmail Fileを選択して、Rmailファイルを選択します。変数rmail-secondary-file-directoryおよびrmail-secondary-file-regexpは、メニューがどのファイルを表示するかを指定します。最初の変数はファイルを探すディレクトリーを指定し、2番目の変数はそのディレクトリーのどのファイル(正規表現にマッチするファイルすべて)を表示するかを指定します。マッチするファイルがない場合、このメニューアイテムは選択できません。これらの変数は、出力するファイルの選択にも適用されます(外部ファイルへのメッセージのコピーを参照してください)。

使用するinboxファイルは変数rmail-inbox-listにより指定され、これはRmailモードではバッファーローカルな変数です。特別な例外として、プライマリーRmailファイルにinboxを指定していない場合、これは環境変数MAIL、またはシステム標準のinboxを使用します。

g (rmail-get-new-mail)コマンドは、inboxのメールを、カレントRmailファイルにマージします。Rmailファイルにinboxがない場合、gは何もしません。コマンドM-x rmailも、新しいメールをプライマリーRmailファイルにマージします。

通常のinboxではないファイルからメールをマージするには、C-u gのようにgキーに数引数を与えます。するとファイル名を読み取り、そのファイルからメールをマージします。引数を使用してgを使用しても、inboxファイルの削除・変更はされません。したがって、これはあるファイルのメッセージを、他のファイルにマージする一般的な方法です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33.7 外部ファイルへのメッセージのコピー

以下はRmailファイルから他のファイルにメッセージをコピーするコマンドです。

o file RET

カレントメッセージの完全なコピーを、ファイルfileに追加します(rmail-output)。

C-o file RET

カレントメッセージの表示にしたがい、ファイルfileに追加します(rmail-output-as-seen)。

w file RET

メッセージの本文だけをファイルfileに出力します。デフォルトのファイル名は、そのメッセージの‘Subject’ヘッダーからとられます。

コマンドoC-oはカレントメッセージを指定したファイルの後尾に追加することによりコピーします。正のプレフィクス引数は繰り返し回数として振る舞います。カレントメッセージから開始して削除済みメッセージを無視しつつ後続のメッセージをその個数分コピーします。

2つのコマンドの主な違いは、どれだけコピーするかです。C-oが現在表示されているヘッダーだけをコピーするのにたいし、oはヘッダーがすべて表示されていなくても、メッセージヘッダーを完全にコピーします。メッセージの表示を参照してください。加えて、ファイルがBabylフォーマットのとき、oはメッセージをBabylフォーマットに変換しますが、C-oはBabylファイルを出力できません。

Emacsバッファーで出力ファイルをvisitしていた場合、出力コマンドはメッセージをそのバッファーに追加します。最終的にそのバッファーをファイルに保存するかは、あなた次第です。

本文にファイル内容がそのまま記載されているようなメッセージを受信することがあるかもしれません。そのような場合、w (rmail-output-body-to-file)コマンドで、本文を(メッセージヘッダーを除いて)ファイルに保存できます。そのようなメッセージは‘Subject’フィールドにファイル名を意図した内容を含んでいる場合があるので、wコマンドは(ファイル名に可搬的に使用できないいくつかの文字を置換した後)デフォルトの出力ファイル名に‘Subject’フィールドを使用します。しかし、ファイル名はミニバッファーを使って読み取られるので、異なる名前を指定できます。

メニューからRmailファイルを選択して、メッセージを出力することもできます。メニューClassifyの、メニューアイテムOutput Rmail Fileを選択して、出力したいRmailファイルを選択します。これはoコマンドのように、カレントメッセージをそのファイルに出力します。変数rmail-secondary-file-directoryおよびrmail-secondary-file-regexpは、メニューがどのファイルを表示するかを指定します。最初の変数はファイルを探すディレクトリーを指定し、2番目の変数はそのディレクトリーのどのファイル(正規表現にマッチするファイルすべて)を表示するかを指定します。マッチするファイルがない場合、このメニューアイテムは選択できません。

oまたはC-oでメッセージをコピーすることにより、メッセージのオリジナルコピーには属性‘filed’が与えられるので、そのメッセージがカレントのときは、モードラインに‘filed’が表示されます。

各メールメッセージにたいして1つのコピーを保持したい場合は、変数rmail-delete-after-outputtをセットします。その場合、コマンドoC-oおよびwは、コピー後にオリジナルのメッセージを削除します(望むなら後で削除を取り消すことができる。メッセージの削除を参照されたい)。

デフォルトではoは出力したメッセージの削除ステータスを元メッセージのままに留めます。したがって出力される前に削除済みのメッセージは出力ファイル中に削除済みとして現われます。変数rmail-output-reset-deleted-flagを非nil値にセットすることによりこれを回避できます。メッセージのコピーは削除ステータスがリセットされるので出力ファイル中には未削除として現れます。さらにこの変数が非niloに正の引数を指定すると、後続メッセージから出力メッセージを探す際に削除済みメッセージを無視しなくなります。

変数rmail-output-file-alistは、カレントメッセージの内容にもとづいて、理にかなったデフォルトの出力ファイルを指定できます。値は以下の形式をもつ要素のリストです:

(regexp . name-exp)

カレントメッセージにregexpにたいするマッチが存在する場合、デフォルトの出力ファイルはname-expになります。複数の要素がそのメッセージにマッチする場合、最初にマッチした要素がデフォルトのファイル名を決定します。式name-expは使用するファイル名を与える文字列定数、またはより一般的に、ファイル名を文字列として取得する任意のLisp式を指定できます。rmail-output-file-alistは、oC-oの両方に適用されます。

Rmailは、(rmail-file-nameで指定される)プライマリーRmailファイルから、(変数rmail-automatic-folder-directivesの値にもとづいて)他のファイルにメッセージを自動的に保存できます。この変数は、どのメッセージをどこに保存するかを指定する要素(‘directives’)のリストです。各directiveは出力ファイルからなるリストで、ヘッダー名と正規表現の組が1つ以上後に続きます。メッセージのヘッダーが指定された正規表現にマッチする場合、そのメッセージは与えられたファイルに保存されます。directiveが複数のヘッダーエントリーをもつ場合、それらすべてがマッチしなければなりません。Rmailはファイルrmail-file-nameからメッセージを表示するときdirectiveをチェックして、(もしあれば)最初のマッチに適用します。出力ファイルがnilの場合、そのメッセージは削除され、保存されません。たとえば特定のアドレスや、特定のsubjectのメッセージを保存するのに、この機能を使用することができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33.8 ラベル

各メッセージは、分類(classification)のために割り当てられる、さまざまなラベル(labels)をもつことができます。各ラベルは名前をもち、名前が異なると違うラベルになります。任意のラベルは、特定のメッセージにたいして、付いているか付いていないかのどちらかです。標準的な意味をもつラベル名がいくつかあり、それが適切なときは、Rmailにより自動的にメッセージに付与されます。これらの特別なラベルは、属性(attribute)と呼ばれます (Rmailの属性を参照してください)。 それ以外のすべてのラベルは、ユーザーにより付与されます。

a label RET

カレントメッセージに、ラベルlabelを割り当てます(rmail-add-label)。

k label RET

カレントメッセージから、ラベルlabelを外します(rmail-kill-label)。

C-M-n labels RET

複数のラベルlabelsのどれか1つをもつ、次のメッセージに移動します(rmail-next-labeled-message)。

C-M-p labels RET

複数のラベルlabelsのどれか1つをもつ、前のメッセージに移動します(rmail-previous-labeled-message)。

l labels RET
C-M-l labels RET

複数のラベルlabelsのどれかを含む、すべてのメッセージのサマリーを作成します(rmail-summary-by-labels)。

コマンドa (rmail-add-label)およびk (rmail-kill-label)で、カレントメッセージにたいして任意のラベルを割り当てたり、外すことができます。引数labelが空の場合、もっとも最近割り当てられた(または外された)ラベルを割り当てる(または外す)ことを意味します。

メッセージを分類するためにラベルを割り当てた後、ラベルを使用する3つの方法 — 移動、サマリー、ソート — があります。

C-M-n labels RET (rmail-next-labeled-message)は、複数のラベルlabelsのうちどれか1つをもつ、次のメッセージに移動します。引数labelsには、カンマで区切られた1つ以上のラベル名を指定します。C-M-p (rmail-previous-labeled-message)も同様ですが、前のメッセージに後方へ移動します。どちらのコマンドも、数引数は繰り返し回数を指定します。

コマンドC-M-l labels RET (rmail-summary-by-labels)は、指定された複数のラベルのうち、少なくとも1つをもつメッセージだけを含むサマリーを表示します。引数labelsはカンマで区切られた1つ以上のラベル名です。サマリーについての詳細は、サマリーを参照してください。

C-M-nC-M-pC-M-lにたいして引数labelsが空の場合は、それらのコマンドにたいして、もっとも最近に指定されたlabelsを使うことを意味します。

ラベルでメッセージをソートする情報については、Rmailファイルのソートを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33.9 Rmailの属性

deleted’や‘filed’のようないくつかのラベルはビルトインの意味をもち、Rmailは適切なときに、それらをメッセージに割り当てます。これらのラベルは属性(attributes)と呼ばれます。以下はRmailの属性のリストです:

unseen

そのメッセージが1度もカレントになっていないことを意味します。inboxからメッセージが到着したとき割り当てられ、そのメッセージがカレントになったときに外されます。Rmailを開始したとき、この属性をもつメッセージを最初に表示します。

deleted

メッセージが削除されたことを意味します。削除コマンドにより割り当てられ、削除を取り消すコマンドで外されます(メッセージの削除を参照してください)。

filed

そのメッセージが他のファイルにコピーされたことを意味します。ファイル出力コマンドoおよびC-oにより割り当てられます(外部ファイルへのメッセージのコピーを参照してください)。

answered

メッセージへの返信をメールしたことを意味します。r (rmail-reply)コマンドにより割り当てられます。返信の送信を参照してください。

forwarded

メッセージを転送したことを意味します。f (rmail-forward)コマンドにより割り当てられます。返信の送信を参照してください。

edited

メッセージのテキストをRmailで編集したことを意味します。メッセージの編集を参照してください。

resent

メッセージを再送したことを意味します。コマンドM-x rmail-resendにより割り当てられます。返信の送信を参照してください。

retried

送信に失敗したメッセージを再試行したことを意味します。コマンドM-x rmail-retry-failureにより割り当てられます。返信の送信を参照してください。

これ以外のすべてのラベルは、ユーザーだけが割り当てたり外すことができ、それらのラベルは標準的な意味をもちません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33.10 返信の送信

Rmailには、送信メールを送るための複数のコマンドがあります。Messageモードの使い方(Rmailでも動作する特別な機能を含む)に関する情報は、メールの送信を参照してください。このセクションでは、送信メッセージ作成に使用する、mailバッファーに入るエンターするためのRmailの特別なコマンドを説明します。メールを送信するための通常のキー — C-x mC-x 4 mC-x 5 m — は、Rmailモードでも通常どおり機能することに注意してください。

m

メッセージを送信します(rmail-mail)。

c

すでに編集を開始した送信メッセージの編集を続けます(rmail-continue)。

r

カレントRmailメッセージにたいする返信を送信します(rmail-reply)。

f

カレントメッセージを他のユーザーに転送します(rmail-forward)。

C-u f

カレントメッセージを他のユーザーに再送します(rmail-resend)。

M-m

送信に失敗して戻ってきたメッセージにたいして、2回目の送信を試みます(rmail-retry-failure)。

Rmailにいるときにメッセージを送信する理由でもっとも一般的なのは、読んでいるメールに返信するときでしょう。これを行なうには、r (rmail-reply)とタイプします。これはC-x 4 mのように、別ウィンドウにメール作成バッファーを表示しますが、ヘッダーフィールド‘Subject’、‘To’、‘CC’、‘In-reply-To’、‘References’は、返信するメッセージにもとづいて、事前に初期化されています。‘To’フィールドには、返信するメッセージを送信した人のアドレスがセットされ、‘CC’にはそのメッセージを受け取った、他のすべての人のアドレスがセットされます。

変数mail-dont-reply-to-namesを使用して、自動的に返信に含まれる受信者から、特定の受信者を除外することができます。この変数の値には正規表現を指定します。正規表現にマッチする受信者は、‘CC’フィールドから除外されます。その受信者を除外することにより‘To’フィールドが空になる場合を除き、‘To’フィールドからも除外されます。この変数がnilの場合、最初に返信を作成するときに、あなた自身のアドレスにマッチするデフォルト値に初期化されます。

元メッセージの送信者だけにリプライするには、C-u rまたは1 rのように、数引数とともに返信コマンドをエンターします。特定の返信にたいして‘CC’フィールドを完全に省略するには、返信コマンドに数引数を指定します。これは、元のメッセージを送信した人だけに返信することを意味します。

1度メール作成バッファーが初期化されると、後は通常どおりメールの編集と送信を行なうことができます(メールの送信を参照してください)。事前にセットされたヘッダーフィールドが適切でない場合は、それを編集することができます。C-c C-yのようなコマンドを使うこともできます。これは返信するメッセージをyankします(メールコマンドを参照してください)。Rmailバッファーに切り替えて、異なるメッセージを選択してから、また戻って新しいカレントメッセージにyankすることもできます。

メッセージが送信先に届かないこともあります。そのような場合メーラーは通常、失敗メッセージ(failure message)をあなたに返信します。RmailコマンドのM-m (rmail-retry-failure)は、同じメッセージの2回目の送信を準備をします。これは前と同じテキストとヘッダーフィールドで、メール作成バッファーをセットアップします。そこですぐにC-c C-cをタイプすると、初回とまったく同じメッセージを再送します。テキストやヘッダーを編集してから送信することもできます。変数rmail-retry-ignored-headersは、失敗したメッセージを再試行するとき除外するヘッダーを制御し、フォーマットはrmail-ignored-headers (メッセージの表示を参照してください)と同じです。

Rmailからメールを送信する他のよくある理由に、カレントメッセージを他のユーザーに転送(forward)することです。f (rmail-forward)は、メール作成バッファーのテキストとsubjectを、カレントメッセージで事前に初期化することにより、これを簡単に行なえるようにします。subjectは[from: subject]という形式で初期化されます。fromsubjectには、元のメッセージの送信者とsubjectが入ります。あなたが行なう必要があるのは、送信先を記述して、それを送信することだけです。メッセージを転送するとき、受信者が受け取るメッセージのfromはあなたになり、メールの内容は元のメッセージと同じになります。

Rmailは転送メッセージにたいして2つのフォーマットを提供します。デフォルトはMIMEフォーマットを使用します(メッセージの表示を参照してください)。これは元のメッセージを別の部分に含めます。変数rmail-enable-mime-composingnilにセットすることにより、もっと簡単なフォーマットを使うこともできます。この場合、Rmailは元のメッセージを2つの区切り行で囲むだけです。これは各行の行頭に‘- を挿入することにより、各行の変更も行ないます。このフォーマットによる転送メッセージを受信した場合、それに普通のテキスト以外の何か — たとえばプログラムのソースコード — が含まれている場合、この変更を取り消せたら便利だと思うかもしれません。これを行なうには、転送されたメッセージを選択して、M-x unforward-rmail-messageとタイプします。このコマンドは、挿入された文字列‘- を削除して、転送されたメッセージのオリジナルを抽出し、カレントメッセージの直後に、別のメッセージとしてRmailファイルに挿入します。

再送(Resending)は、転送と似た別の方法です。違いは、再送により送信されるメッセージは、あなたが受け取ったときのように、元の送信者がfromになり、追加のヘッダーフィールド(‘Resent-From’と‘Resent-To’)により、それがあなたを通じて送られたことを示すことです。Rmailでメッセージを再送するには、C-u fを使用します(frmail-forwardを実行し、数引数を指定するとrmail-resendを呼び出します)。

m (rmail-mail)を使用することにより、返信ではない送信用のメールの編集を開始します。これはヘッダーフィールドを空のままにします。C-x 4 mとの違いは、rのようにC-c C-yでRmailにアクセスできることです。

c (rmail-continue)コマンドは、既に編集を開始した送信用メッセージの編集を終えるために、または送信したメッセージを変更するために、メール作成バッファーでの編集を再開します。

変数rmail-mail-new-frameを非nilにセットした場合、メッセージの送信を開始するすべてのコマンドは、それを編集するために新しいフレームを作成します。このフレームは、そのメッセージを送信すると削除されます。

メッセージを送信するすべてのRmailコマンドは、選択されたメール作成方法を使用します(メール作成方法を参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33.11 サマリー

サマリー(summary)は、Rmailファイルのメールを概観するために、メッセージごとに1つの行を含むバッファーです。各行にはメッセージ番号、日付、送信者、行数、ラベル、subjectが表示されます。サマリーバッファーでポイントを移動することにより、そのサマリー行のメッセージを選択することができます。ほとんどのRmailコマンドはサマリーバッファーでも有効です。それらのコマンドを使うと、サマリーのカレント行に記述されているメッセージに適用されます。

サマリーバッファーは、1つのRmailファイルだけに適用されます。複数のRmailファイルを編集している場合、それぞれが自身のサマリーバッファーをもつことができます。サマリーバッファーの名前は、Rmailバッファーの名前に‘-summary’を追加して作成されます。通常は1度に1つだけのサマリーバッファーが表示されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33.11.1 サマリーの作成

以下は、カレントRmailバッファーでサマリーを作成するコマンドです。Rmailバッファーが1度サマリーされると、Rmailバッファーでの変更(メッセージの削除や完全な削除、新しいメールの受信など)により、サマリーも自動的に更新されます。

h
C-M-h

すべてのメッセージをサマリーします(rmail-summary)。

l labels RET
C-M-l labels RET

1つ以上の指定したラベルをもつメッセージをサマリーします(rmail-summary-by-labels)。

C-M-r rcpts RET

指定した受信者にマッチするメッセージをサマリーします(rmail-summary-by-recipients)。

C-M-t topic RET

指定した正規表現topicにマッチするsubjectをもつメッセージをサマリーします(rmail-summary-by-topic)。

C-M-s regexp RET

指定した正規表現regexpにマッチするヘッダーをもつメッセージをサマリーします(rmail-summary-by-regexp)。

C-M-f senders RET

指定した送信者にマッチするメッセージをサマリーします(rmail-summary-by-senders)。

コマンドhまたはC-M-h (rmail-summary)は、カレントRmailバッファーにたいする、すべてのメッセージのサマリーを、サマリーバッファーに表示します。その後、別のウィンドウにサマリーバッファーを表示して、それを選択します。

C-M-l labels RET (rmail-summary-by-labels)は、1つ以上のラベルlabelsをもつメッセージの、部分的なサマリーを作成します。labelsには、カンマで区切られたラベル名を指定します。

C-M-r rcpts RET (rmail-summary-by-recipients)は、正規表現rcptsにマッチする、1つ以上の受信者をもつメッセージのサマリーを作成します。これはヘッダー‘To’、‘From’、‘CC’にたいしてマッチを行ないます(プレフィクス引数を与えた場合は‘CC’ヘッダーを除外する)。

C-M-t topic RET (rmail-summary-by-topic)は、正規表現topicにマッチするsubjectをもつメッセージの、部分的なサマリーを作成します。プレフィクス引数を指定した場合、subjectだけでなく、メッセージ全体にたいしてマッチを行ないます。

C-M-s regexp RET (rmail-summary-by-regexp)は、正規表現regexpにマッチするヘッダー(日付とsubject行を含む)をもつメッセージの、部分的なサマリーを作成します。

C-M-f senders RET (rmail-summary-by-senders)は、正規表現sendersにマッチする‘From’フィールドをもつメッセージの、部分的なサマリーを作成します。

1つのRmailバッファーにたいして、1つのサマリーしか存在しないことに注意してください。他の種類のサマリーを作成すると、以前のサマリーは破棄されます。

変数rmail-summary-window-sizeは、サマリーウィンドウに何行使用するかを指定します。変数rmail-summary-line-count-flagは、メッセージのサマリー行に、メッセージの総行数を含めるかを制御します。このオプションにnilをセットすると、サマリーの生成が速くなるかもしれません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33.11.2 サマリーでの編集

Rmailバッファーで行なえることのほとんどは、Rmailサマリーバッファーでも使用できます。実際、1度サマリーバッファーを作成すれば、Rmailバッファーに戻る必要はありません。

サマリーバッファーで異なる行にポイントを移動するだけで、サマリーバッファーからメッセージを選択して、Rmailバッファーに表示することができます。ポイントを移動するEmacsコマンドが何であるかは問題になりません。コマンドの最後でポイントのある行のメッセージが、Rmailバッファーに表示されます。

ほとんどのRmailコマンドは、Rmailバッファーと同様に機能します。したがって、サマリーバッファーでは、dがカレントメッセージの削除、uは削除の取り消し、xで完全に削除します(しかし、サマリーバッファーでは関連する方向に削除されていないメッセージが存在しない場合、削除コマンドはカレントメッセージに留まるのではなく、最初または最後のメッセージに移動します)。oC-oは、カレントメッセージをファイルに出力します。他にも、rはそれにたいする返信を開始する、などです。サマリーバッファーでSPCDELを使用することにより、カレントメッセージをスクロールできます。しかし、サマリーバッファーでSPCまたはDELにより、メッセージの終端または先頭を超えてスクロールすると、削除されていない次または前のメッセージに移動します。rmail-summary-scroll-between-messagesオプションをnilにカスタマイズすれば、次または前のメッセージへのスクロールが無効になります。

M-u (rmail-summary-undelete-many)は、サマリーで削除されたすべてのメッセージの削除を取り消します。プレフィクス引数を指定した場合、以前に削除された、指定した数のメッセージの削除を取り消すことを意味します。

メッセージ間を移動するRmailコマンドはサマリーバッファーでも機能しますが、動作が少し異なります。これらのコマンドはサマリーに含まれる一連のメッセージ間を移動します。これらのコマンドは、常にRmailバッファーがスクリーンに表示されるようにします(カーソル移動コマンドはRmailバッファーの内容を更新しますが、これらのコマンドはウィンドウにすでにそれが表示されているのでなければ、表示しません)。以下はそれらのコマンドのリストです:

n

“deleted”の行をスキップして次の行に移動し、その行のメッセージを選択します(rmail-summary-next-msg)。

p

“deleted”の行をスキップして前の行に移動し、その行のメッセージを選択します(rmail-summary-previous-msg)。

M-n

次の行に移動して、その行のメッセージを選択します(rmail-summary-next-all)。

M-p

前の行に移動して、その行のメッセージを選択します(rmail-summary-previous-all)。

>

最後の行に移動して、その行のメッセージを選択します(rmail-summary-last-message)。

<

最初の行に移動して、その行のメッセージを選択します(rmail-summary-first-message)。

j
RET

(Rmailバッファーがスクリーンに確実に表示されるようにして)カレント行のメッセージを選択します(rmail-summary-goto-msg)。引数nを指定した場合、メッセージ番号nのメッセージを選択し、サマリーバッファーのそのメッセージの行に移動します。そのメッセージがサマリーバッファーにリストされていない場合は、エラーをシグナルします。

M-s pattern RET

メッセージからpatternを検索します。検索はカレントメッセージから開始されます。マッチが見つかったらそのメッセージを選択して、サマリーバッファーのそのメッセージの行にポイントを移動します(rmail-summary-search)。プレフィクス引数は繰り返し回数として機能します。負の引数は後方に検索を行なうことを意味します(rmail-summary-search-backwardと等価です)。

C-M-n labels RET

指定した1つ以上のラベルのうち、少なくとも1つをもつ次のメッセージに移動します(rmail-summary-next-labeled-message)。labelsはカンマで区切られたラベルのリストです。プレフィクス引数は繰り返し回数として機能します。

C-M-p labels RET

指定した1つ以上のラベルのうち、少なくとも1つをもつ前のメッセージに移動します(rmail-summary-previous-labeled-message)。

C-c C-n RET

カレントメッセージと同じsubjectをもつ、次のメッセージに移動します(rmail-summary-next-same-subject)。プレフィクス引数は繰り返し回数として機能します。

C-c C-p RET

カレントメッセージと同じsubjectをもつ、前のメッセージに移動します(rmail-summary-previous-same-subject)。

削除、削除の取り消し、新しいメールの取得はもちろん、異なるメッセージの選択でも、それらの操作をRmailバッファーで行なったとき、サマリーバッファーは更新されます。変数rmail-redisplay-summaryが非nilの場合、これらの操作はサマリーバッファーをスクリーンに表示します。

サマリーの使用を終了するときは、Q (rmail-summary-wipe)とタイプして、サマリーバッファーのウィンドウを削除します。サマリーからRmailを終了することもできます。q (rmail-summary-quit)はサマリーウィンドウを削除して、Rmailファイルを保存してからRmailを終了してから、他のバッファーに切り替えます。かわりにb (rmail-summary-bury)とタイプすると、単にRmailとRmailサマリーバッファーを隠し(bury)ます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33.12 Rmailファイルのソート

C-c C-s C-d
M-x rmail-sort-by-date

カレントRmailバッファーのメッセージを、日付順にソートします。

C-c C-s C-s
M-x rmail-sort-by-subject

カレントRmailバッファーのメッセージを、subject順にソートします。

C-c C-s C-a
M-x rmail-sort-by-author

カレントRmailバッファーのメッセージを、送信者順にソートします。

C-c C-s C-r
M-x rmail-sort-by-recipient

カレントRmailバッファーのメッセージを、受信者の名前順にソートします。

C-c C-s C-c
M-x rmail-sort-by-correspondent

カレントRmailバッファーのメッセージを、他の受信者名順にソートします。

C-c C-s C-l
M-x rmail-sort-by-lines

カレントRmailバッファーのメッセージを、行数順にソートします。

C-c C-s C-k RET labels RET
M-x rmail-sort-by-labels RET labels RET

カレントRmailバッファーのメッセージを、ラベル順にソートします。引数labelsは、カンマで区切られたラベルのリストです。ラベルの順序は、メッセージの順序を指定します。最初のラベルをもつメッセージが最初に、2番目のラベルをもつメッセージが次に、というようになります。ラベルをもたないメッセージは最後になります。

Rmailのソートコマンドは安定ソート(stable sort)を行ないます。2つのメッセージのどちらを先にするか特に理由がない場合、メッセージの順序は変更されません。これを使用して複数のソート条件を使用できます。たとえば、rmail-sort-by-dateの後にrmail-sort-by-authorを使用すれば、メッセージは作者ごとに日付順にソートされます。

プレフィクス引数を指定した場合、これらのコマンドは逆順で比較をします。これはメッセージが新しいものから古いものへ、大きいものから小さいものへ、アルファベットの逆順でソートされることを意味します。

同じキーをサマリーバッファーで使うと、似た関数が実行されます。たとえばC-c C-s C-lは、rmail-summary-sort-by-linesを実行します。これらのコマンドは、たとえサマリーがメッセージの一部しか表示していなくても、Rmailバッファー全体をソートします。

ソートのアンドゥはできないことに注意してください。そのため、ソートをする前にRmailバッファーを保存したいと思うかもしれません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33.13 メッセージの表示

このセクションではRmailが、メールヘッダー、MIMEのセクションと添付、URL、暗号化されたメッセージを表示する方法を説明します。

t

ヘッダーの完全表示を切り替えます(rmail-toggle-header)。

各メッセージを最初に表示する前に、Rmailは余分な物を減らすために、重要でないヘッダーを隠して、メッセージのヘッダーを再フォーマットします。t (rmail-toggle-header)コマンドは、これを切り替えます。つまり再フォーマットされたヘッダーフィールドと、完全な元のヘッダーの間で、表示を切り替えます。正の引数を指定した場合、このコマンドは再フォーマットされたヘッダーを表示します。0または負の引数を指定した場合、完全なヘッダーを表示します。メッセージを再選択することにより、必要な場合は再フォーマットします。

変数rmail-ignored-headersは、隠すべきヘッダーフィールドを指定する正規表現を保持します。これにマッチするヘッダー行は隠されます。変数rmail-nonignored-headersは、これをオーバーライドします。この変数の正規表現にマッチするヘッダーフィールドは、たとえそれがrmail-ignored-headersにマッチしても、表示されます。変数rmail-displayed-headersは、これら2つの変数のかわりに使用されます。非nilの場合、その値には表示するヘッダーを指定する正規表現を指定します(デフォルトはnilです)。

Rmailは特に重要なヘッダーフィールド — デフォルトでは‘From’と‘Subject’フィールドをハイライトします。ハイライトにはrmail-highlightフェイスが使用されます。変数rmail-highlighted-headersは、ハイライトするヘッダーフィールドを指定する正規表現を保持します。これがヘッダーフィールドの先頭にマッチした場合、フィールド全体がハイライトされます。この機能を無効にするには、rmail-highlighted-headersnilをセットしてください。

メッセージがMIME(Multipurpose Internet Mail Extensions)形式で、複数パート(MIMEエンティティー)が含まれている場合、Rmailは各パートにタグライン(tagline)を表示します。タグラインはそのパートのインデックス、サイズ、コンテントタイプを要約します。コンテントタイプに依存して、1つ以上のボタンが含まれる場合があります。これらのボタンは、そのパートをファイルに保存する、などの処理を行ないます。

RET

ポイント位置のMIMEパートを隠す、または表示します(rmail-mime-toggle-hidden)。

TAB

次のMIMEタグラインのボタンにポイントを移動します(rmail-mime-next-item)。

S-TAB

前のMIMEパートにポイントを移動します(rmail-mime-previous-item)。

v

MIME表示とrawメッセージの表示を切り替えます(rmail-mime)。

プレーンテキストのMIMEパートは、最初タグラインの直後に表示され、Rmailバッファーの他のタイプのMIMEパートは、Rmailバッファーの一部としてタグラインだけが表示され(メッセージがHTMLパートをもたない場合。以下参照)、実際のコンテンツは隠されています。どちらの場合も、MIMEパートのどこか、またはそれのタグラインでRETをタイプすることにより、表示と非表示を切り替えることができます(他の処理を行なうボタンがある場合を除きます)。RETとタイプするかマウスでクリックすることにより、タグラインボタンをアクティブにでき、TABでタグラインのボタンにたいして循環的にポイントを移動できます。

v (rmail-mime)コマンドは、上記で説明したデフォルトのMIME表示と、MIMEでデコードされていないrawデータの表示を切り替えます。プレフィクス引数を指定した場合は、ポイント位置にあるものの表示だけを切り替えます。

メッセージにHTMLMIMEパートがあり、EmacsがHTMLを表示できる場合、Rmailはそれをplain-textパートより優先して表示します17。これを抑制してかわりにplain-textパートを表示するには、変数rmail-mime-prefer-htmlnilにカスタマイズしてください。

RmailからMIMEでデコードされたメッセージの処理を抑止するには、変数rmail-enable-mimenilに変更します。この場合、v (rmail-mime)は、カレントMIMEメッセージを表示するために、一時的なバッファーを作成します。

カレントメッセージが暗号化されている場合、復号化するためにコマンドM-x rmail-epa-decryptを使用します。これはEasyPGライブラリーを使用します(EasyPG in EasyPG Assistant User’s Manualを参照)。

RmailバッファーでGoto Addressモードを使用して、URLのハイライトとアクティブ化ができます:

(add-hook 'rmail-show-message-hook 'goto-address-mode)

このモードを使用すると、そのURLをmouse-2でクリック(またはmouse-1で素早くクリック)するか、ポイントをそこに移動してC-c RETとタイプすることにより、それらのURLをブラウズできます。Activating URLsを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33.14 Rmailとコーディングシステム

Rmailは、Emacsがファイルをvisitしたりサブプロセスの出力にたいして行なうように、非ASCII文字を含むメッセージを自動的にデコードします。Rmailはメッセージで標準の‘charset=charset’ヘッダーを使用し、もしそれがあれば、送信者によりメッセージがどのようにエンコードされたか決定します。これはcharsetを、対応するEmacsコーディングシステム(コーディングシステムを参照してください)にマップして、メッセージテキストをデコードするために、そのコーディングシステムを使います。メッセージヘッダーに‘charset’指定がない場合、またはcharsetが認識されなかった場合、Rmailは通常のEmacsの経験則とデフォルトに則ったコーディングシステムを選択します(コーディングシステムの認識を参照してください)。

メッセージが間違ってデコードされることもあります。これは‘charset’指定がないためにEmacsが間違ったコーディングシステムを推測したか、そもそも指定が間違っているかです。たとえば間違って設定されたメーラーが、メッセージが実際にはkoi8-rでエンコードされているのに、‘charset=iso-8859-1’というヘッダーでメッセージを送るかもしれません。メッセージテキストが文字化けしていたり、文字が16進コードや空ボックスで表示されているときは、おそらくこれが発生しています。

正しいコーディングシステムを解決または推測できる場合、正しいコーディングシステムを使ってメッセージを再デコードすることにより、問題を訂正することができます。これを行なうにはM-x rmail-redecode-bodyコマンドを呼び出します。これはコーディングシステムの名前を読み取り、指定したコーディングシステムを使って、メッセージを再デコードします。正しいコーディングシステムを指定した場合、デコード結果は読めるようになるでしょう。

Rmailで新しいメールを受信したとき、各メッセージは、それらがあたかも個別のファイルであるかのように、それぞれが記述されたコーディングシステムに自動的に変換されます。これは指定されたコーディングシステムの優先順を使用します。MIMEメッセージが文字セットを指定している場合、Rmailはその指定にしたがいます。Rmailファイルの読み込みと保存にたいして、Emacsは、変数rmail-file-coding-systemで指定されたコーディングシステムを使用します。デフォルト値はnilで、これはRmailファイルが変換されないことを意味します(これらはEmacsの内部文字セットで読み書きされます)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33.15 メッセージの編集

通常のEmacsのキーバインドのほとんどはRmailモードで利用可能ですが、C-M-nC-M-hのように、他の目的のためにRmailにより再定義されているものもあります。しかしRmailバッファーは通常読み取り専用で、ほとんどの文字はRmailコマンドに再定義されています。メッセージのテキストを編集したい場合、Rmailのeコマンドを使わなければなりません。

e

カレントメッセージを通常のテキストとして編集します。

e command (rmail-edit-current-message)は、Rmailモードから、Rmail Editモードという、Textモードと類似した、別のメジャーモードに切り替えます。メジャーモードの変更はモードラインに示されます。

Rmail Editモードでは、文字は通常どおり文字自身を挿入し、Rmailコマンドは利用できません。メッセージの本文とヘッダーフィールドを編集することができます。メッセージの編集を終えたら、C-c C-c (rmail-cease-edit)でRmailモードに戻ります。かわりにC-c C-] (rmail-abort-edit)とタイプすれば、編集をキャンセルしてRmailモードに戻ることができます。

Rmail Editモードに入ることにより、フックtext-mode-hook、その後にフックrmail-edit-mode-hookが実行されます(フックを参照してください)。通常のRmailモードにもどると、メッセージを変更した場合には、そのメッセージに属性‘edited’が追加されます(Rmailの属性を参照)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33.16 ダイジェストメッセージ

ダイジェストメッセージ(digest message)は、複数の他のメッセージを含み、それを運ぶために存在するメッセージです。ダイジェストは、いくつかのメーリングリストで使用されています。1日というような一定の期間の間にメーリングリストに到着したすべてのメッセージが、1つのダイジェストにまとめられて、メーリングリストに登録した人に送られます。1つのダイジェストを送信するのにかかるコンピューター時間は、たとえ合計サイズが同じでも個別にメッセージを送信するより短くなります。なぜならネットワークでのメール送信において、メッセージ単位のオーバーヘッドがあるからです。

ダイジェストメッセージを受信したとき、それを読むもっとも便利な方法は、それを非ダイジェスト化(undigestify)することです。これはダイジェストを複数のメッセージに戻します。それから個別にメッセージを読んだり削除できます。これを行なうにはダイジェストメッセージを選択して、コマンドM-x undigestify-rmail-messageをタイプします。これはダイジェストに含まれるメッセージを個別のRmailメッセージに抽出し、ダイジェストの後に挿入します。ダイジェストメッセージ自身には、削除のフラグがつけられます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33.17 Rot13メッセージを読む

読む人を怒らせたり不快にするかもしれないメーリングリストのメッセージは、rot13と呼ばれる単純なコードでエンコードされているときがあります。この名前は、エンコードの方法がアルファベットを13文字分巡回させることに由来します。このコードに機密性はなく、それを提供もしません。むしろ、実際のテキストを見るのを避けたいと思う人のためのものです。たとえばビデオの講評などでは、重要なあらすじを隠すためにrot13を使います。

rot13を使ったバッファーを閲覧するには、コマンドM-x rot13-other-windowを使用します。これはカレントバッファーを他のウィンドウで表示します。このウィンドウではテキストを表示するときこのコードを適用します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33.18 movemail program

Rmailは、inboxからRmailファイルにメールを移動するために、movemailプログラムを使用します。最初にロードされたとき、Rmailはmovemailプログラムを探して、そのバージョンを判断します。movemailプログラムには2つのバージョンがあります。それはGNU Mailutilsバージョン(movemail in GNU mailutilsを参照)と、--with-mailutilsでEmacsをconfigureしたときにインストールされるEmacs固有バージョンです。これらのコマンドは、同じコマンドラインシンタックスをもち、同じ基本的なサブセットオプションをもちます。しかしMailutilsバージョンは、追加の機能を提供します。

Emacsバージョンのmovemailは、通常のUnix mailbox形式のmailboxからメールを取得することができます。警告: これはPOP3プロトコルの使用も可能ですが、暗号化されたTLSチャンネルを通じたPOP3をサポートしないので、推奨しません。

Mailutilsバージョンは、プレーンUnix mailbox、maildirおよびMHのメールボックスなどの、より広範なmailbox形式を処理することができます。これはPOP3またはIMAP4プロトコルを使用してリモートのmailboxにアクセスでき、TLS暗号化チャンネル(TLS encrypted channel)を使用してメールを取得できます。これはURL形式でのmailbox引数を受けとることもできます。mailboix URLの詳細な説明は、URL in Mailbox URL Formatsで見ることができます。短く言うと、URLは以下のようなものです:

proto://[user[:password]@]host-or-file-name[:port]

角カッコ(bracket)はオプションの要素を意味します。

proto

mailboxプロトコル、または使用するフォーマットを指定します。URLの残りの要素の正確な意味は、protoの実際の値に依存します(以下参照)。

user

リモートmailboxにアクセスするためのユーザー名です。

password

リモートmailboxにアクセスするためのユーザーパスワードです。

host-or-file-name

リモートmailboxのリモートサーバーのホスト名、またはローカルmailboxのファイル名です。

port

そのプロトコルのデフォルト以外のポート番号をオプションで指定します。

protoには以下の1つを指定します:

mbox

通常のUnix mailbox形式です。この場合userpassportは使用せず、host-or-file-nameはmailboxファイルのファイル名を意味します(例: mbox:///var/spool/mail/smith)。

mh

MH形式のローカルmailboxです。userpassportは使用せず、host-or-file-nameMHフォルダーのファイル名を意味します(例: mh:///Mail/inbox)。

maildir

maildir形式のローカルmailboxです。userpassportは使用せず、host-or-file-namemaildir mailboxの名前を意味します(例: maildir:///mail/inbox)。

file

mailbox形式の任意のローカルファイルです。実際の形式はmovemailにより自動的に決定されます。

pop
pops

POP3プロトコルを通じてアクセスされるリモートmailboxです。userは使用するリモートのユーザー名を指定し、passはユーザーパスワードを指定するのに使用され、host-or-file-nameは接続するリモートメールサーバーのホスト名かIPアドレス、portはポート番号です(例: pop://smith:guessme@remote.server.net:995)。サーバーがサポートする場合、movemailは暗号化された接続 — 暗号化接続に要求される‘pops’の使用を試みます。

imap
imaps

IMAP4プロトコルを通じてアクセスされるリモートmailboxです。userは使用するリモートのユーザー名を指定し、passはユーザーパスワードを指定するのに使用され、host-or-file-nameは接続するリモートメールサーバーのホスト名かIPアドレス、portはポート番号です(例: imap://smith:guessme@remote.server.net:993)。サーバーがサポートする場合、movemailは暗号化された接続 — 暗号化接続に要求される‘imaps’の使用を試みます。"

かわりに、使用するmailboxのファイル名を指定できます。これはプロトコルに‘file’を指定するのと等価です:

/var/spool/mail/user ≡ file:///var/spool/mail/user

変数rmail-movemail-programは、どのバージョンのmovemailを使用するかを制御します。文字列の場合、それはmovemail実行ファイルの絶対ファイル名を指定します。nilの場合、Rmailはrmail-movemail-search-pathexec-path(Emacsからのシェルコマンドの実行を参照してください)、exec-directoryの順で、これらの変数にリストされたディレクトリーから、movemailを検索します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33.19 リモートmailboxからのメールの取得

inboxファイルにデータを格納するかわりに、POP3と呼ばれる手法を使用してユーザーのinboxデータにアクセスするサイトがいくつかあります。Mailutilsのmovemailは、デフォルトでTLS暗号化されたPOP3をサポートします。警告: たとえEmacs movemailがPOP3をサポートしていても、Mailutilsバージョンがサポートする暗号化された接続をサポートしないので、これを使用することは推奨しません。どちらのバージョンのmovemailも、POP3にたいしてだけ機能し、POPの古いバージョンにたいしては機能しません。

どちらのmovemailを使用するかにかかわらず、POP3 URL(movemail programを参照)を使用してPOP3 inboxを指定できます。POP3 URLは、‘pop://username@hostname:port’という形式で、hostnameportはリモートメールサーバーのホスト名(またはIPアドレス)とポート番号、usernameはそのサーバーでのユーザー名です。これに加えて‘pop://username:password@hostname:port’のようなmailbox URLでパスワードを指定することもできます。この場合、passwordrmail-remote-password (以下参照)で指定された値より優先されます。これは複数のリモートメールサーバーで異なるパスワードを指定するとき、特に便利です。

後方互換のため、RmailはリモートのPOP3 mailboxを指定する他の方法もサポートします。‘po:username:hostname:port’によるinbox名の指定は、‘pop://username@hostname:port’と等価です。:hostnameの部分を省略した場合は、環境変数MAILHOSTで、どのマシンのPOP3サーバーを探すか指定します。

リモートmailboxesにアクセスする他の方法に、IMAPがあります。この方法はMailutils movemailだけでサポートされます。inboxリストでIMAP mailboxを指定するには、‘imap://username[:password]@hostname:port’の形式のmailbox URLを使用します。上記で説明したように、passwordの部分はオプションです。‘imap’の箇所に‘imaps’を使用したいと思うかもしれません。

リモートmailboxへのアクセスにはパスワードが要求されます。これを取得するためにRmailは以下のアルゴリズムを使います:

  1. mailbox URL(上記参照)でpasswordが与えられた場合はそれを使います。
  2. 変数rmail-remote-password-requirednilの場合、Rmailはパスワードが要求されないと想定します。
  3. 変数rmail-remote-passwordが非nilの場合はその値を使います。
  4. 上記以外の場合、Rmailはパスワードの入力を求めます。

追加のコマンドラインフラグをmovemailに渡す必要がある場合は、使いたいフラグのリストを変数rmail-movemail-flagsにセットします。inboxの内容を保持するために。この変数を使ってフラグ‘-p’を渡さないでください。かわりにrmail-preserve-inboxを使用してください。

あなたのサイトにインストールされたmovemailプログラムは、ケルベロス認証(Kerberos authentication)をサポートするでしょう。もしサポートされている場合、rmail-remote-passwordおよびrmail-remote-password-requiredがセットされていないときに、POP3メールの取得を試みたときは、デフォルトでケルベロス認証を使います。

メッセージを逆順に保存するPOP3サーバーもあります。あなたのサーバーがこれを行なっている場合、到着した順にメールを読みたいときは、rmail-movemail-flagsに‘-r’フラグを追加することにより、逆順でメッセージをダウンロードするよう、movemailに指示できます。

Mailutils movemailは、TLS暗号化(TLS encryption)をサポートします。これを使いたい場合は、rmail-movemail-flagsに‘--tls’フラグをセットしてください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

33.20 さまざまな形式のローカルmailboxからのメールの取得

受信したメールがローカルマシンのUnix mailbox以外の形式に保存される場合、これを取得するためにMailutils movemailを使う必要があるでしょう。movemailのバージョンについての詳細な説明は、movemail programを参照してください。たとえば/var/spool/mail/inにあるmaildir形式のinboxのメールにアクセスするには、Rmailのinboxリストに以下を含める必要があるでしょう:

maildir:///var/spool/mail/in

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34 GnusによるEメールとUsenetニュース

Gnusは、主にUsenetニュースを読んだりポストするためにデザインされた、Emacsパッケージです。これはいくつかの異なるソース — 電子メール、リモートディレクトリー、ダイジェスト、などを読んだり、メッセージを返すためにも使うことができます。以下はGnusの紹介と、いくつかの基本的な機能の説明です。 完全な詳細に付いては、Gnus in The Gnus Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.1 Gnusバッファー

Gnusは、情報を表示したり返信コマンドのために、複数のバッファーを使用します。もっとも一般的に使用される3つのGnusバッファーはグループバッファー(group buffer)サマリーバッファー(summary buffer)アーティクルバッファー(article buffer)です。

グループバッファーは、アーティクルソースのリスト(たとえばニュースグループや電子メールのinbox)を含んでおり、それらはグループとして参照されます。これはGnusを開始したときに最初に表示されるバッファーです。これは通常、あなたが登録したグループと、未読のアーティクルだけを表示します。このバッファーから、読みたいグループを選択できます。

サマリーバッファーは1つのグループのアーティクルをリストし、1行に1つのアーティクルを表示します。デフォルトでは、アーティクルの作者、subject、 行数が表示されますが、これはカスタマイズできます。Summary Buffer Format in The Gnus Manualを参照してください。 サマリーバッファーは、グループバッファーでグループを選択すると作成され、グループを抜けるとkillされます。

サマリーバッファーから、閲覧するアーティクルを選択できます。アーティクルはアーティクルバッファーで表示されます。通常のGnusの使い方では、このバッファーを閲覧はしますが選択はしません — すべての便利なGnusコマンドはサマリーバッファーから呼び出すことができます。しかし望むなら、アーティクルバッファーを選択して、そこからGnusコマンドを実行することもできます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.2 Gnusを起動したとき

あなたのシステムがUsenetニュースをよむためにセットアップされていれば、Gnusを始めるのは簡単です — M-x gnusとタイプするだけです。

起動時に、Gnusはホームディレクトリーにある.newsrcという名前のニュース初期化ファイル(news initialization file)を読み込みます。これにはあなたのUsenetニュースグループと購読状況がリストされています(これはGnus固有のファイルではありません。他の多くのニュースリーダープログラムにより使用されています)。その後システムのデフォルトのニュースサーバーへの接続を試みます。これは通常、環境変数NNTPSERVERにより指定されます。

あなたのシステムがデフォルトのニュースサーバーをもっていない場合、または電子メールを読むためにGnusを使いたい場合は、M-x gnusを呼び出す前に、どこでニュースおよび/またはメールを取得するか、Gnusに指示する必要があります。これを行なうには、変数gnus-select-methodおよび/またはgnus-secondary-select-methodsをカスタマイズします。 Finding the News in The Gnus Manualを参照してください。

1度Gnusを開始すると、グループバッファーを表示します。デフォルトでは少数のsubscribedグループ(subscribed groups: 登録されたグループ)だけが表示されます。他の状態 — unsubscribedkilledzombie — のグループは表示されません。最初にGnusを開始したとき、登録していないグループはkilledグループになります。その後にニュースサーバーに現れたグループはzombieグループになります。

先に進むには、グループバッファーでグループを選択して、そのグループのサマリーバッファーを開かなければなりません。その後サマリーバッファーのアーティクルを選択して、別のウィンドウでアーティクルバッファーを閲覧します。以下のセクションでは、これを行なうための、グループバッファーとサマリーバッファーの使用について説明します。

Gnusを終了するには、グループバッファーでqとタイプします。これは自動的にグループの状態をファイル.newsrc.newsrc.eldに記録するので、その後のGnusセッションでも効果があります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.3 Gnus Groupバッファーの使用

以下のコマンドは、Gnusグループバッファーで利用可能です:

SPC

カレント行のグループの、サマリーバッファーに切り替えます(gnus-group-read-group)。

l
A s

eグループバッファーでは、未読のアーティクルを含む登録したグループだけをリストします(gnus-group-list-groups。これはデフォルトの一覧方法である)。

L
A u

すべてのsubscribed(登録)およびunsubscribed(未登録)のグループをリストしますが、killedまたはzombieのグループは表示しません(gnus-group-list-all-groups)。

A k

killされたグループをリストします(gnus-group-list-killed)。

A z

ゾンビ状態のグループをリストします(gnus-group-list-zombies)。

u

カレント行のグループの登録状態を切り替えます((gnus-group-unsubscribe-current-group。たとえばsubscribedグループをunsubscribedグループにしたり、その逆を行なう)。killedまたはzombieのグループにたいしてこれを呼び出すと、そのグループをunsubscribedグループにします。

C-k

カレント行のグループをkillします(gnus-group-kill-group)。killedとなったグループは.newsrcファイルに記録され、lまたはLのリストには表示されなくなります。

DEL

未読アーティクルを含む、前のグループにポイントを移動します(gnus-group-prev-unread-group)。

n

次の未読グループにポイントを移動します(gnus-group-next-unread-group)。

p

前の未読グループにポイントを移動します(gnus-group-prev-unread-group)。

q

Gnusのセッティングを更新してGnusを終了します(gnus-group-exit)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.4 Gnus Summaryバッファーの使用

以下のコマンドは、Gnusサマリーバッファーで利用可能です:

SPC

選択されたアーティクルがない場合、カレント行のアーティクルを選択して、それをアーティクルバッファーに表示します。そうでない場合、選択されたアーティクルバッファーのウィンドウでスクロールを試みます。バッファーの最後に到達した場合、次の未読アーティクルを選択します(gnus-summary-next-page)。

したがって、繰り返しSPCをタイプすることにより、すべてのアーティクルを読むことができます。

DEL

アーティクルのテキストを後方にスクロールします(gnus-summary-prev-page)。

n

次の未読アーティクルを選択します(gnus-summary-next-unread-article)。

p

前の未読アーティクルを選択します(gnus-summary-prev-unread-article)。

s

選択されたアーティクルバッファーで、あたかもそのバッファーに切り替えてC-s(インクリメンタル検索を参照してください)とタイプしたかのように、インクリメンタル検索を行ないます(gnus-summary-isearch-article)。

M-s regexp RET

regexpへのマッチを含むアーティクルを、前方に検索します(gnus-summary-search-article-forward)。

M-r regexp RET

regexpへのマッチを含むアーティクルを、後方に検索します(gnus-summary-search-article-backward)。

q

サマリーバッファーをexitして、グループバッファーに戻ります(gnus-summary-exit)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

35 ホストのセキュリティ

EmacsはGNU/Linuxのようなオペレーティングシステムの内部で実行され、ファイルアクセスのようなセキュリティー制限のチェックはオペレーティングシステムに依存します。Emacsのデフォルトセッティングは、通常の使用のためにデザインされています。通常よりセキュリティーが重要な場合、または重要でない環境では、何らかの調整が必要になるでしょう。たとえばファイルローカル変数(file-local variables)が危険な場合もあるので、変数enable-local-variables:safeや、(より安全に)nilをセットできます。ファイルがすべて信用でき、それらの変数にたいするデフォルトのチェックが煩わしいときには、enable-local-variables:allをセットできます。安全なファイル変数を参照してください。

大きなアプリケーションの一部としてEmacsを使用する場合の、セキュリティー考慮についての情報は、Security Considerations in The Emacs Lisp Reference Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

36 ネットワークのセキュリティ

Emacsがネットワーク接続を確立するときは、常にその確立された接続をNSM(Network Security Manager)に渡します。NSMは、あなたのコントロールのもとにセットワークセキュリティーを実施する責任があります。現在のところ、これはTLS(Transport Layer Security)の機能を使用して動作します。

変数network-security-levelNSMが実施するセキュリティーレベルを決定します。変数の値がlowならセキュリティーのチェックは行なわれません。これは必須ではなく。基本的にはそのネットワーク接続が信頼できないことを意味しています。しかしネットワークの問題テスト時のように制限された状況ではこのセッティングは便利かもしれません。

この変数がmedium(デフォルト)の場合、いくつかのチェックが行なわれます。チェックの結果、NSMがそのネットワーク接続を信頼できないと判断した場合は、それを知らせて、そのネットワーク接続にたいして何を行なうか尋ねます。

証明されていない接続(unverified connection)にたいして、永続的なセキュリティー例外(security exception)を登録したり、一時的な例外(temporary exception)とするか、接続を完全に拒絶することができます。

証明書の基本的な正当性チェック加えて、いくつかのTLSアルゴリズムによるチェックが利用可能です。 以前は安全だと思われていたいくつかの暗号化技術で脆弱性が判明しているものについては、(デフォルトでは)Emacsは問題に関して警告します。

プロトコルネットワークのチェックはnetwork-security-protocol-checks変数を介して制御されます。

これは各連想値の最初の要素がチェックの名前、2つ目の要素がチェックの使用を要するセキュリティレベルであるようなalistです。

関数nsm-protocol-check--rc4の結果内の(rc4 medium)のような要素は(nsm-protocol-check--rc4 host port status settings)のように呼び出します。この関数は接続を継続するなら非nil、それ以外は非nilをリターンします。

以下はデフォルトのmediumで行なわれるチェックのリストです。

TLS認証が検証できない(unable to verify a TLS certificate)

その接続がTLSSSLSTARTTLS接続の場合、NSMは接続しようとしているサーバーの同一性(identity)を証明するために使用される認証が、検証できるかどうかチェックします。

無効な認証が懸念される場合(Man-in-the-Middleによりネットワーク接続がハイジャックて、あなたのパスワードが盗まれるかもしれません)や、とにかく接続を行なう正当な理由があるかもしれません。たとえばサーバーが自己署名された認証(self-signed certificate)を使用していたり、認証の期限が切れている場合もあるでしょう。接続の継続を容認するかどうかの決定は、あなたに任されています。

自己署名された認証が変更されている(a self-signed certificate has changed)

以前自己署名された認証を許容したが、今回はそれが変更されていて、それはそのサーバーが単に認証を変更しただけかもしれませんが、ネットワーク接続がハイジャックされている可能性もあります。

以前は暗号化されていた接続が、暗号化されていない(previously encrypted connection now unencrypted)

接続が暗号化されていないが、以前のセッションでは暗号化されていた場合、あなたとそのサーバーの間にSTARTTLSアナウンス(STARTTLS announcements)を剥奪して、接続を非暗号化するプロキシーがあることを意味するかもしれません。これは通常とても疑わしいです。

パスワードを送信するとき暗号化されていないサービスと通信する(talking to an unencrypted service when sending a password)

IMAPPOP3のサーバーに接続するとき、ネットワーク越しにパスワードを送信するのが一般的なので、接続は通常暗号化されています。同様に、パスワードを要求するSMTPを通じてemailを送信する場合は通常、その接続が暗号化されていることを望むでしょう。その接続が暗号化されていない場合、NSMは警告します。

Diffie-Hellmanロープライムビット(Diffie-Hellman low prime bits)

パグリックキーの交換を行なう際、そのチャンネルが第三者により盗聴できないことを確実にするために、プライムビット(prime bits)の数は十分に高くあるべきです。この数があまりに低い(low)場合にはEmacsは警告を発するでしょう(これはnetwork-security-protocol-checksdiffie-hellman-prime-bitsチェック)。

RC4ストリーム暗号(RC4 stream cipher)

RC4ストリーム暗号は低品質とされており、第三者による盗聴を許すかもしれません(これはnetwork-security-protocol-checksrc4チェック)。

ホスト証明書や中間証明書のSHA1

中間証明書(intermediate certificate)がSHA1ハッシュアルゴリズムを使用していれば、第三者がその発行インスタンスを偽装して証明書を発行できると考えられています。したがってこれらの接続は中間者攻撃にたいして脆弱です(これらはnetwork-security-protocol-checkssignature-sha1intermediate-sha1チェック)。

SSL1SSL2SSL3

TLS1.0より古いプロトコルは、様々な攻撃にたいして脆弱とされており、あなたが行なうことがより高いセキュリティーを要する場合は、使用を避けたいと思うかもしれません(これはnetwork-security-protocol-checkssslチェック)。

network-security-levelhighの場合、上記に加えて以下のチェックが行なわれます:

3DES暗号

3DESストリーム暗号は最大112ビットの効果的なセキュリティーを提供してローエンド向きと考えられています(これはnetwork-security-protocol-checks3desチェック)。

有効な認証がパブリックキーを変更した(a validated certificate changes the public key)

サーバーはキーを変更するときがあり、通常それは心配することはありません。しかし、サードパーティーのサービスにたいして新しい認証を発行する、偽装しやすい証明期間(pliable Certificate Authorities)へのアクセスをもつエージェントにより、ネットワーク接続がハイジャックされているか心配なときは、これらの変更を追跡したいと思うかもしれません。

最後に、network-security-levelparanoidの場合は、最初にNSMが新たな認証に遭遇したときに、それが通知されます。これによりEmacsによるすべての接続のすべての認証を検証することができるでしょう。

以下の追加の変数は、NSM操作の詳細を制御するために使用できます。

nsm-settings-file

これはNSMが接続の詳細を保存するファイルです。デフォルトは~/.emacs.d/network-security.dataです。

nsm-save-host-names

デフォルトでは、非STARTTLS接続ではホスト名は保存されません。接続の識別には、かわりにホストとポートによるハッシュ値(host/port hash)が使用されます。ユーザーがどのサーバーに接続しているか確認するために、誰かが気軽に設定ファイルを読めないことを意味します。この変数がtの場合、NSMnsm-settings-fileにもホスト名を保存します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

37 ドキュメントの閲覧

DocViewモードは、DVI、PostScript(PS)、PDF、OpenDocument、Microsoft Officeドキュメントを閲覧するためのメジャーモードです。このモードはスライス、ズーム、ドキュメント内の検索などの機能を提供します。これは、gs(GhostScript)、またはmudraw/pdfdraw(MuPDF)、およびその他の外部ツール18を使用して、ドキュメントを一連のイメージに変換し、それらのイメージを表示することにより機能します

DocViewモードで表示可能なドキュメントをvisitすると、Emacsは自動的にそのモードを使用します19。例外として、PostScriptファイルをvisitしたとき、EmacsはPostScriptファイルをテキストとして編集するためのメジャーモードの、PSモードに切り替わります。しかし、これはDocView minorモードも有効にするので、C-c C-cとタイプして、そのドキュメントを閲覧することができます。DocViewモードまたはDocView minorモードでは、C-c C-c (doc-view-toggle-display)を繰り返すことにより、DocViewとその背後にあるファイル内容を切り替えることができます。

いくつかの要件が満たされないとき(たとえばテキスト端末のフレームを操作していたり、そのEmacsはPNGをサポートしないときなど)に、通常DocViewモードで処理されるファイルをvisitした場合は、そのドキュメントの内容をプレーンテキストとして閲覧したいか問い合わせます。これに同意すると、そのバッファーはtextモードとなり、DocView minorモードがアクティブになります。したがってC-c C-cとタイプすることにより、fallbackモードに切り替わります。もう1度C-c C-cとタイプすると、DocViewモードに戻ります。DocViewモードでC-c C-t (doc-view-open-text)とタイプすることにより、プレーンテキストで内容を表示することもできます。

コマンドM-x doc-view-modeで、DocViewモードを明示的に有効にすることができます。また、M-x doc-view-minor-modeで、DocView minorモードに切り替えることができます。

DocViewモードを開始したときは、ウェルカム画面を表示して、そのファイルを1ページずつフォーマットしていきます。最初のページがフォーマットされると、そのページを表示します。

DocViewバッファーをkillするには、k (doc-view-kill-proc-and-buffer)とタイプします。バッファーを隠す(bury)には、q (quit-window)とタイプします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

37.1 DocViewの操作

DocViewモードでは通常のEmacs移動キー、つまりC-pC-nC-bC-f、および矢印キーを使って、ページをスクロールできます。

デフォルトでは、行移動キーのC-pC-nは、カレントページの先頭または最後でスクロールを止めます。しかし、変数doc-view-continuousを非nil値に変更した場合、カレントページの先頭でC-pとタイプすると前のページを表示し、カレントページの最後でC-nとタイプすると次のページを表示します。

nPageDownnextC-x ]をタイプすることにより、次のページを表示することもできます(doc-view-next-page)。前のページを表示するには、pPageUppriorC-x [をタイプします(doc-view-previous-page)。

SPC (doc-view-scroll-up-or-next-page)は、ドキュメントを順に読んでいくのに便利な方法です。これはカレントページをスクロールするか、次のページに移動します。DEL (doc-view-scroll-down-or-previous-page)は、同様の方法で後方に移動します。

最初のページに移動するには、M-< (doc-view-first-page)とタイプします。最後のページに移動するには、M-> (doc-view-last-page)とタイプします。ページ番号を指定して移動するには、M-g M-gまたはM-g g (doc-view-goto-page)とタイプしてください。

+ (doc-view-enlarge)と- (doc-view-shrink)で、ドキュメントを拡大したり縮小することができます。これらのコマンドはデフォルトではすでに描画済みのイメージを再スケールします。かわりにイメージを新たなサイズに再描画するにはdoc-view-scale-internallynilにセットしてください。DocViewにたいするデフォルトサイズを指定するには、変数doc-view-resolutionをカスタマイズしてください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

37.2 DocViewの検索

DocViewモードでは、ファイルのテキストにたいして正規表現の検索を行なうことができます(正規表現の構文を参照してください)。検索のインターフェースはisearchが元になっています(インクリメンタル検索を参照してください)。

検索を開始するには、C-s (doc-view-search)またはC-r (doc-view-search-backward)とタイプします。これはミニバッファーを使用して正規表現を読み取り、そのドキュメントでマッチした数をエコーします。C-sまたはC-rとタイプすることにより、マッチ間を前方または後方に移動できます。DocViewモードはページイメージの中でマッチを表示できません。かわりに、カレントページのマッチするすべての行を一覧するツールチップを、(マウス位置に)表示します。このツールチップを強制的に表示するにはC-t (doc-view-show-tooltip)とタイプしてください。

新しい検索を開始するには、たとえば前方検索ではC-u C-s、後方検索ではC-u C-rのように、検索コマンドにプレフィクス引数を使用します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

37.3 DocViewのスライス

印刷のために広い余白をもつドキュメントもあります。これらはスクリーンでドキュメントを読むとき邪魔になることがあります。なぜならこれらは画面スペースを消費して、スクロールが不便になるからです。

DocViewでは、表示するページのスライス(slice)を選択することにより、これらの余白を隠すことができます。スライスはページ内の矩形領域です。DocViewで1度スライスを指定すると、閲覧するすべてのページに適用されます。

数値でスライスを指定するには、c s (doc-view-set-slice)とタイプします。その後、スライスの左上のピクセル位置(pixel position)と、スライスの幅(width)と高さ(height)を入力します。

スライスを指定するための、もっと便利でグラフィカルな方法は、c m (doc-view-set-slice-using-mouse)で、スライスの選択にマウスを使う方法です。これは単に、スライスにしたいリージョンの左上隅で左マウスボタンを押して、そのまま右下隅にマウスポインターを移動してマウスボタンを離します。

最適なスライスをセットする一番簡単な方法は、c b (doc-view-set-slice-from-bounding-box)とタイプすることにより、そのドキュメントから自動的に判断されるBoundingBox情報を使う方法です。

選択されたスライスを取り消すには、c r (doc-view-reset-slice)とタイプします。するとDocViewは、余白全体を含めたページ全体を表示します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

37.4 DocViewの変換

効率のために、DocViewはgsにより生成されたイメージをキャッシュします。イメージをキャッシュするディレクトリーの名前は、変数doc-view-cache-directoryにより与えられます。M-x doc-view-clear-cacheとタイプすることにより、キャッシュディレクトリーをクリアーできます。

現在閲覧中のドキュメントを強制的に再変換するには、type rまたはg (revert-buffer)とタイプします。カレントバッファーに関連付けられた変換プロセスをkillするには、K (doc-view-kill-proc)とタイプします。コマンドk (doc-view-kill-proc-and-buffer)は、変換プロセスとDocViewバッファーをkillします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

38 Emacsからのシェルコマンドの実行

Emacsには、シェルサブプロセスに1つのコマンドラインを渡したり、入出力にEmacsバッファーを使用して対話的にシェルを実行するコマンドや、端末エミュレーターウィンドウでシェルを実行するコマンドがあります。

M-! cmd RET

シェルコマンドcmdを実行して、出力を表示します(shell-command)。

M-| cmd RET

リージョンの内容を入力としてシェルコマンドcmdを実行します。オプションでリージョンを出力で置き換えます(shell-command-on-region)。

M-& cmd RET

シェルコマンドcmdを非同期で実行し、出力を表示します(async-shell-command)。

M-x shell

Emacsバッファーを通じて入出力を行なう、サブシェルを実行します。その後で、コマンドを対話的に与えることができます。

M-x term

Emacsバッファーを通じて入出力を行なう、サブシェルを実行します。その後でコマンドを対話的に与えることができます。完全な端末エミュレーションが利用できます。

(上記のコマンドのcmd引数、または他のコンテキストにおいて)実行可能プログラムとして相対ファイル名を指定したときは、Emacsは変数exec-pathにより指定されるディレクトリーのプログラムを検索します。この変数の値は、ディレクトリーのリストでなければなりません。デフォルト値は、Emacsが開始されたときの環境変数PATHにより初期化されます(一般的な変数を参照してください)。

M-x eshellは、Emacsで完全に実装されたシェルを呼び出します。eshellについては、自身のマニュアルにドキュメントされています。 Eshell in Eshell: The Emacs Shellを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

38.1 単一のシェルコマンド

M-! (shell-command)は、ミニバッファーを使って1行のテキストを読み取り、それをシェルコマンドとして、そのコマンドのためだけに作成されたサブシェルで実行します。そのコマンドの標準入力はnullデバイスです。シェルコマンドが出力を生成する場合、その出力はエコーエリア(出力が短い場合)、または別ウィンドウに表示される‘"*Shell Command Output*"’という名前のEmacsバッファー(出力が長い場合)に表示されます(shell-command-buffer-name)。変数resize-mini-windowsmax-mini-window-heightは、出力がエコーエリアにたいして長過ぎるとEmacsが判断した場合に、ウィンドウのサイズ変更を制御します(ミニバッファーでの編集を参照)。

たとえばfoo.gzという名前のファイルを解凍する1つの方法は、M-! gunzip foo.gz RETとタイプすることです。このシェルコマンドは通常、ファイルfooを作成して、端末出力を生成しません。

たとえばM-1 M-!のようにshell-commandに数引数を指定した場合、別のバッファーではなく、カレントバッファーに端末出力を挿入します。これはデフォルトではポイントを出力の前、出力の後にマークを配置します(しかし以下の非デフォルト値shell-command-dont-erase-bufferでこれを変更できます)。たとえばM-1 M-! gunzip < foo.gz RETは、カレントバッファーにファイルfoo.gzの解凍された内容を挿入します。

最後が‘&’でないシェルコマンドを指定した場合、コマンドは同期(synchronously)で実行され、Emacsを継続して使用するには、コマンドがexitするのを待たなければなりません。待つのを中止するには、C-gとタイプします。これはシェルコマンドを終了するために、シグナルSIGINTを送ります(これは通常、シェルでC-cとタイプしたときに生成されるのと同じシグナルです)。その後、Emacsはコマンドが実際に終了するまで待ちます。シェルコマンドが終了しない場合(そのコマンドがシグナルSIGINTを無視する場合)は、再度C-gとタイプします。これは そのコマンドにたいして、無視することが不可能なシグナルSIGKILLを送ります。

&’で終わるシェルコマンドは非同期(asynchronously)で実行され、それを実行した後でも、継続してEmacsを使用できます。シェルコマンドを非同期で実行する前に、M-& (async-shell-command)とタイプすることもできます。これは最後の‘&’が必要ない点を除き、最後に‘&’を指定してM-!を呼び出すことと同じです。非同期シェルコマンド出力にたいするデフォルトバッファーの名前は‘*Async Shell Command*’です。このバッファーがウィンドウに表示されているかに関わらず、Emacsは出力をこのバッファーに挿入します。

同時に複数の非同期シェルコマンドを実行した場合、出力バッファーが競合します。この場合どのようにするか — たとえば既存の出力バッファーをリネームしたり、新しいコマンドに異なるバッファーを使用する — を、オプションasync-shell-command-bufferで指定できます。他の可能なオプションについては、この変数のドキュメントを参照してください。

非同期シェルコマンドが出力を生成したときだけ出力バッファーが表示されるようにしたい場合は、async-shell-command-display-buffernilにセットしてください。

オプションasync-shell-command-widthは非同期シェルコマンドの出力に利用可能な表示列数を定義します。正の整数はコマンド出力にその列数を使用するようシェルに指示します。デフォルト値nilはシェルが提供する列数と同じ列数の使用を意味します。

上記コマンドにプロンプトにカレントディレクトリーを表示するようにさせるには変数shell-command-prompt-show-cwdを非nil値にカスタマイズしてください。

M-| (shell-command-on-region)はM-!と同様ですが、入力を与えないかわりに、リージョンの内容をシェルコマンドの標準入力として渡します。数引数を指定した場合、古いリージョンの内容を、シェルコマンドの出力で置き換えます。

たとえばM-|gpgプログラムを使用して、そのバッファーのキーが何かを見ることができます。そのバッファーがGnuPGキーを含む場合、C-x h M-| gpg RETとタイプして、バッファー全体の内容をgpgに送ることができます。これはキーのリストを*Shell Command Output*バッファーに出力します。

上記のコマンドは、変数shell-file-nameで指定されたシェルを使用します。この変数のデフォルト値は、Emacsが開始されたときの環境変数SHELLにより決定されます。相対ファイル名の場合、Emacsはexec-pathにリストされたディレクトリーを検索します(Emacsからのシェルコマンドの実行を参照してください)。

デフォルトディレクトリーがリモート(リモートファイルを参照)ならデフォルト値は/bin/shです。これは接続ローカルにshell-file-nameを宣言することにより変更可能です(▼接続ごとのローカル変数を参照)。

M-!またはM-|にたいするコーディングシステムを指定するには、あらかじめコマンドC-x RET cを使用します。プロセス間通信にたいするコーディングシステムを参照してください。

デフォルトでは、出力バッファーではエラー出力と標準出力が混ざって出力されます。しかし変数shell-command-default-error-bufferの値を文字列に変更すると、エラー出力はその名前のバッファーに出力されます。

デフォルトではカレントバッファーに出力される場合を除き、シェルコマンド間に出力バッファーは消去されます。オプションshell-command-dont-erase-bufferの値をeraseに変更すると出力バッファーは常に消去されます。それ以外の非nil値なら出力バッファーの消去は抑制されて、(出力バッファーがカレントバッファーでなければ)シェルコマンドの出力の挿入後にポイントを配置する位置を制御します:

beg-last-out

ポイントを最後のシェルコマンドの出力の先頭に配置します。

end-last-out

ポイントを最後のシェルコマンドの出力の最後(出力バッファー終端)に配置します。

save-point

シェルコマンドの出力の挿入前の位置にポイントをリストアします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

38.2 対話的なサブシェル

対話的にサブシェルを実行するには、M-x shellとタイプします。これは*shell*という名前のバッファーを作成(または再使用)して、そのバッファーにたいして入出力を行なう、シェルのサブプロセスを実行します。つまりサブシェルからの端末出力はポイントの後に挿入されてポイントを進め、サブシェルにたいする端末入力はそのバッファーのテキストになります。サブシェルにたいして入力を与えるには、バッファーの最後に移動して入力をタイプし、RETで終了します。

デフォルトでは、サブシェルが対話的に呼び出された際、カレントウィンドウですでに*shell*バッファーを表示していない場合は、新たなウィンドウに*shell*バッファーが表示されます。この動作はdisplay-buffer-alist(display-bufferが機能する方法を参照)を通じてカスタマイズできます。

サブシェルがコマンドの実行を待つ間、ウィンドウまたはバッファーを切り替えてEmacsで他の編集を行なうことができます。Emacsはそれを処理するときがきたら(たとえばキーボード入力待ちになったとき)、サブシェルからの出力をShellバッファーに挿入します。

Shellバッファーでは、プロンプトはフェイスcomint-highlight-promptで表示され、サブミットされた入力行はフェイスcomint-highlight-inputで表示されます。これにより入力行とシェル出力を容易に区別することができます。テキストのフェイスを参照してください。

複数のサブシェルを作成するには、(C-u M-x shell)のように)プレフィクス引数を指定してM-x shellを呼び出します。その後、このコマンドはバッファー名を読み取り、そのバッファーでサブシェルを作成(または再使用)します。M-x rename-uniquelyを使用して*shell*バッファーをリネームしてから、M-x shellで新しい*shell*バッファーを作成することもできます。異なるバッファーのサブシェルは、並行して独立に実行されます。

M-x shellによりシェルファイル名を指定するには、変数explicit-shell-file-nameをカスタマイズします。これがnil(デフォルト)の場合、もし存在すればEmacsは環境変数ESHELLを使用します。そうでない場合は通常、変数shell-file-nameを使用します(単一のシェルコマンドを参照してください)。しかしデフォルトディレクトリーがリモートの場合(リモートファイルを参照してください)、シェルファイル名の入力を求めます。リモートファイル名を正しくタイプする方法に関するヒントは、ミニバッファーでのファイル名を参照してください。

Emacsは新しいシェルにたいする入力として、もしそれが存在すればファイル~/.emacs_shellnameの内容を送ります。ここでshellnameは、そのシェルがロードされたファイルの名前です。たとえばbashを使う場合、送られるファイルは~/.emacs_bashになります。ファイルが見つからない場合、Emacsは~/.emacs.d/init_shellname.shの使用を試みます。

シェルにたいしてコーディングシステムを指定するには、M-x shellの直前にコマンドC-x RET cを使用します。C-x RET pとタイプすることにより、実行されているサブシェルにたいするコーディングシステムを変更することもできます。プロセス間通信にたいするコーディングシステムを参照してください。

サブシェルでは、Emacsは環境変数INSIDE_EMACSに‘version,comint’をセットします。ここでversionは、Emacsのバージョン(たとえば‘24.1’)です。プログラムはこの変数をチェックして、Emacsの内部で実行されているかを判断することができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

38.3 Shellモード

ShellバッファーのためのメジャーモードはShellモードです。このモードの特別なコマンドはC-cプレフィクスにバインドされており、最初にC-cをタイプしなければならない点を除けば、通常のシェルでの編集やジョブ制御文字と共通点があります。以下はShellモードのコマンドのリストです:

RET

サブシェルの入力にカレント行を送ります(comint-send-input)。行頭のシェルプロンプトは省略されます(Shellプロンプトを参照してください)。ポイントがバッファーの最後にある場合、これは通常の対話的なシェルにおいてコマンド行をサブミットするのに似ています。しかし、シェルバッファーの他の場所でも、RETを呼び出してカレント行を入力としてサブミットできます。

TAB

シェルバッファーのポイントの前のコマンド名、またはファイル名を補完します(completion-at-point)。これは通常のEmacs補完ルールを使用します(補完を参照してください)。ファイル名、環境変数名、シェルコマンドヒストリー、ヒストリー参照が補完候補になります(Shellヒストリーの参照を参照してください)。補完を制御するオプションについては、Shellモードのオプションを参照してください。

M-?

ポイントの前のファイル名にたいして、可能性のある補完リストを一時的に表示します(comint-dynamic-list-filename-completions)。

C-d

delete文字、またはEOF文字を送ります(comint-delchar-or-maybe-eof)。シェルバッファーの最後でこれをタイプすると、サブシェルにEOFが送られます。バッファーの他の場所でタイプすると、通常どおり文字を削除します。

C-c C-a

行の先頭に移動しますが、プロンプトがある場合はプロンプトの後に移動します(comint-bol-or-process-mark)。このコマンドを連続して繰り返すと、2回目はプロセスマーク(process mark)に戻ります。これはサブシェルにまだ送信されていない入力の開始位置のことです(通常これは同じ場所 — その行のプロンプトの最後 — ですが、C-c SPCの後では、プロセスマークは前の行にあるかもしれません)。

C-c SPC

複数行の入力を累積して、それらを合わせて送ります(comint-accumulate)。このコマンドはポイントの前に改行を挿入しますが、その前のテキストをサブシェルの入力として — 少なくともその時点では — 送りません。改行の前後の行は両方、(それらを分割する改行も含めて)RETをタイプしたとき一緒に送られます。

C-c C-u

まだ入力として送られていない、バッファーの最後のすべてのテキストをkillします(comint-kill-input)。ポイントがバッファーの最後にない場合、これはポイントの前のテキストだけをkillします。

C-c C-w

ポイントの前の単語をkillします(backward-kill-word)。

C-c C-c

シェルまたは(もしあれば)カレントのサブジョブに割り込み(interrupt)ます(comint-interrupt-subjob)。このコマンドはシェルバッファーの最後の、まだ送られていない任意のシェル入力もkillします。

C-c C-z

シェルまたは(もしあれば)カレントのサブジョブを停止(stop)します。(comint-stop-subjob)。このコマンドはシェルバッファーの最後の、まだ送られていない任意のシェル入力もkillします。

C-c C-\

シェルまたは(もしあれば)カレントのサブジョブに、シグナルQUITを送ります(comint-quit-subjob)。このコマンドはシェルバッファーの最後の、まだ送られていない任意のシェル入力もkillします。

C-c C-o

前のシェルコマンドからの出力の一群を削除します(comint-delete-output)。これはシェルコマンドが大量の出力を吐くときに便利です。

C-c C-s

前のシェルコマンドからの出力の一群をファイルに書き込みます(comint-write-output)。プレフィクス引数を指定した場合は、ファイルに追加で書き込みます。出力の最後のプロンプトは書き込まれません。

C-c C-r
C-M-l

前の一群の出力の最初がウィンドウの最上部になるようにスクロールし、カーソルもそこに移動します(comint-show-output)。

C-c C-e

バッファーの最後の行がウィンドウの最下部になるようにスクロールします(comint-show-maximum-output)。

C-c C-f

シェルコマンド1つ分、前方に移動しますが、カレント行を超えては移動しません(shell-forward-command)。変数shell-command-regexpは、コマンドの最後を認識する方法を指定します。

C-c C-b

シェルコマンド1つ分、後方に移動しますが、カレント行を超えて移動はしません(shell-backward-command)。

M-x dirs

シェルに作業ディレクトリーを尋ね、Shellバッファーのデフォルトディレクトリーを更新します。ディレクトリーの追跡を参照してください。

M-x comint-send-invisible RET text RET

エコーなしでtextを読み取った後、それをシェルの入力として送ります。これはシェルコマンドでパスワードを尋ねるプログラムを実行するとき便利です。

デフォルトではEmacsはパスワードをエコーしないことに注意してください。もし本当にエコーさせたいときは、以下のLisp式を評価します(Emacs Lisp式の評価を参照してください):

(remove-hook 'comint-output-filter-functions
             'comint-watch-for-password-prompt)
M-x comint-continue-subjob

シェルプロセスを継続します。これは間違ってシェルプロセスをサスペンドしてしまったときなどに便利です。20

M-x comint-strip-ctrl-m

シェル出力のカレントグループから、すべてのcontrol-M文字を破棄します。このコマンドを使うもっとも便利な方法は、サブシェルからの出力を受け取ったときに自動的に実行されるようにする方法です。これを行なうには、以下のLisp式を評価します:

(add-hook 'comint-output-filter-functions
          'comint-strip-ctrl-m)
M-x comint-truncate-buffer

このコマンドはシェルバッファーを、変数comint-buffer-maximum-sizeにより指定される、特定の最大行数に切り詰めます。以下は、サブシェルから出力を受けとるとき、毎回自動的にこれを行なう方法です:

(add-hook 'comint-output-filter-functions
          'comint-truncate-buffer)

Shellモードは、サブプロセスと対話的に通信を行なう一般的な用途向けのComintモードから派生したモードです。上記のコマンド名からも判るとおり、Shellモードのほとんどの機能は、実際にはComintモードが由来です。Shellモードの特別な機能には、ディレクトリー追跡機能、およびいくつかのユーザーコマンドが含まれます。

Comintモードの変種を使う他のEmacs機能には、GUD (Emacs下でのデバッガーの実行を参照してください)や、M-x run-lisp (外部Lispの実行を参照してください)が含まれます。

サブプロセスとして選択した任意のプログラムを実行するために、Shellモードに特化しない未修正のComintモードを使用するには、M-x comint-runを使用することができます。プログラムに引数を渡すにはC-u M-x comint-runを使用します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

38.4 Shellプロンプト

プロンプトとは、新しいユーザー入力を受け取る準備ができたことを表す、プログラムによるテキスト出力のことです。Comintモード(したがってShellモードも)は通常、サブプロセスからの出力にもとづいて、バッファーの一部をプロンプトとして自動的に判断します(具体的には、改行で終端されていない任意の出力行を受け取ったときは、プロンプトとみなします)。

Comintモードは、バッファーを2つのタイプのフィールド(fields)に分けます。1つは入力フィールド(ユーザーの入力がタイプされるところ)で、もう1つは出力フィールド(入力フィールド以外)です。プロンプトは出力フィールドの一部です。ほとんどのEmacs移動コマンドは、そのコマンドが複数行を移動しない限り、フィールド境界を超えることはありません。たとえば、ポイントがシェルコマンドの入力フィールドにある場合、C-aはポイントを入力フィールドの先頭、プロンプトの後に配します。内部的には、フィールドはテキストプロパティーfieldを使って実装されています(Text Properties in the Emacs Lisp Reference Manualを参照してください)。

変数comint-use-prompt-regexpを非nil値に変更した場合、Comintモードは正規表現を使ってプロンプトを認識します(正規表現の構文を参照してください)。Shellモードでは、その正規表現は変数shell-prompt-patternにより指定されます。comint-use-prompt-regexpのデフォルト値はnilです。なぜならプロンプト認識のためのこの方法は信頼性が低いためです。しかし特殊な状況では、これを非nil値にセットしたいと思うこともあるでしょう。そのような場合、EmacsはComintバッファーをフィールドに分割しないので、一般的な移動コマンドは、テキストプロパティーを使用せず、それらのコマンドがバッファーで通常行なうように振る舞います。しかし、バッファーを便利に操作するために、パラグラフ移動コマンドを使うことができます(パラグラフを参照してください)。Shellモードでは、Emacsはパラグラフ境界にshell-prompt-patternを使用します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

38.5 Shellコマンドヒストリー

Shellバッファーは、以前のコマンドを繰り返す3つの方法をサポートします。1つ目はミニバッファーヒストリーにたいして使うのと同じようなキーを使う方法です。つまり、これらはミニバッファーで行なうのと同じように、前のコマンドからテキストを挿入して、ポイントを常にバッファーの最後に保ちます。2つ目は、バッファーを移動して元の場所から前の入力を取得して、それらを再実行したり、バッファーの最後にコピーする方法です。3つ目は‘!’スタイルのヒストリー参照を使う方法です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

38.5.1 Shellヒストリーリング

M-p
C-UP

以前のシェルコマンドから、次に古いコマンドを取り出します(comint-previous-input)。

M-n
C-DOWN

以前のシェルコマンドから、次に新しいコマンドを取り出します(comint-next-input)。

M-r

以前のシェルコマンドにたいして、インクリメンタルregexp検索を開始します(comint-history-isearch-backward-regexp)。

C-c C-x

ヒストリーから次のコマンドを取り出します(comint-get-next-from-history)。

C-c .

以前のシェルコマンドから引数を1つ取り出します(comint-input-previous-argument)。

C-c C-l

そのバッファーのシェルコマンドのヒストリーを、別のウィンドウに表示します(comint-dynamic-list-input-ring)。

Shellバッファーは、以前に入力したシェルコマンドのヒストリーを提供します。ヒストリーからシェルコマンドを再利用するには、編集コマンドM-pM-nM-rを使用します。これらは、ミニバッファーではなくShellバッファーを操作する点を除き、ミニバッファーヒストリーコマンド(ミニバッファーヒストリーを参照してください)と同じように機能します。またShellバッファー内でのM-rは、シェルコマンドヒストリーにたいするインクリメンタル検索を呼び出します。

M-pは、シェルバッファーの最後から以前のシェルコマンドを取り出します。連続してM-pを使用すると、古いシェルコマンドを連続して取り出し、その度にシェル入力の候補として表示されているテキストを置き換えます。M-nも同様に機能しますが、これはバッファーから、より新しいシェルコマンドを連続して探します。C-UPM-pと同様に機能し、C-DOWNM-nと同様に機能します。

ヒストリー検索コマンドM-rは、以前のシェルコマンドにたいしてインクリメンタル正規表現検索を開始します。M-rとタイプした後に、検索したい文字列か正規表現のタイプを開始します。するとマッチする最後のシェルコマンドがカレント行に表示されます。インクリメンタル検索コマンドは通常の効果をもちます — たとえばC-sおよびC-rは前方または後方に、次のマッチを検索します(インクリメンタル検索を参照してください)。探している入力が見つかったら、検索を終了するためにRETをタイプします。これにより、入力がコマンドラインに配されます。ヒストリーリストを操作する前にタイプしていた入力の一部は、ヒストリーリングの先頭または最後に達したときに復元されます。

以前に実行した一連のシェルコマンドを、同じ順番で再実行できたら便利なこともあります。これを行なうには、最初に順番に再実行する1番目のコマンドを検索します。その後C-c C-xとタイプします。これは次のコマンド — つまり再実行したコマンドの次のコマンドを取り出します。それからRETでそのコマンドを実行します。C-c C-x RETを繰り返しタイプすることにより、連続する複数のコマンドを再実行することができます。

コマンドC-c . (comint-insert-previous-argument)は、BashのESC .のように、以前のコマンドから個別に引数をコピーします。一番簡単な使い方は、以前のシェルコマンドから最後の引数をコピーする方法です。プレフィクス引数nを指定すると、n番目の引数をコピーします。繰り返しC-c .とタイプすることにより、さらに古いシェルコマンドからコピーします。この場合、常に同じnの値を使用します(C-c .を繰り返すときは、プレフィクス引数を与えないでください)。

comint-insert-previous-argument-from-endを非nil値にセットすると、C-c .はかわりに最後から数えてn番目の引数をコピーします。これはzshESC .をエミュレートしたものです。

これらのコマンドは、以前のシェルコマンドのテキストを、シェルバッファー自身からではなく、特別なヒストリーリストから取得します。したがってシェルバッファーを編集したり、広い範囲をkillしても、これらのコマンドがアクセスするヒストリーに影響はありません。

シェルの中には、コマンドヒストリーをファイルに保存して、以前のシェルセッションからコマンドを参照できるようにするものがあります。Emacsは選択されたシェルにたいして、コマンドヒストリーを初期化するために、コマンドヒストリーファイルを読み込みます。ヒストリーファイル名は、bashでは~/.bash_history、kshでは~/.sh_history、他のシェルでは~/.historyです。

リモートホストでシェルを実行した場合には、このセッティングは変数tramp-histfile-overrideに上書きされるかもしれません。この変数はnilにセットすることを推奨します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

38.5.2 Shellヒストリーのコピー

C-c C-p

前のプロンプトにポイントを移動します(comint-previous-prompt)。

C-c C-n

次のプロンプトにポイントを移動します(comint-next-prompt)。

C-c RET

ポイント位置の入力コマンドをコピーして、そのコピーをバッファーの最後に挿入します(comint-copy-old-input)。これは以前のコマンドにポイントを移動したときに便利です。コマンドをコピーした後、RETでそのコピーを入力として実行することができます。再実行する前に、そのコピーを編集することもできます。このコマンドを出力行で使用した場合、その行をバッファーの最後にコピーします。

mouse-2

comint-use-prompt-regexpnil(デフォルト)の場合、クリックした以前の入力コマンドをコピーして、そのコピーをバッファーの最後に挿入します(comint-insert-input)。comint-use-prompt-regexpが非nil、または以前の入力以外の場所をクリックしたときは、通常のようにyankします。

以前の入力に移動して、C-c RETまたはmouse-2でコピーすることは、M-pを充分な回数使用して、ヒストリーリングから以前の入力を取り出したときと同じ結果 — つまり同じバッファー内容 — を生成します。しかしC-c RETは、バッファーからテキストをコピーするので、入力をシェルに送信した後に入力テキストを編集していた場合は、ヒストリーリストと異なります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

38.5.3 Shellヒストリーの参照

cshやbashを含むさまざまなシェルは、‘!’や‘^’で始まるヒストリー参照(history references)をサポートします。Shellモードはこれらを認識して、ヒストリーの置き換える処理をします。

ヒストリー参照を挿入してTABとタイプすると、これは入力ヒストリーからマッチするコマンドを検索して、必要なら置換を行い、結果をバッファー内のヒストリー参照の場所に配します。たとえば、一番最近の‘mv’で始まるコマンドを取り出すには、! m v TABとタイプします。必要ならコマンドを編集して、RETでシェルにたいしてコマンドを再実行できます。

Shellモードはヒストリー参照をシェルに送るとき、オプションでヒストリー参照を展開できます。これを行なうには、変数comint-input-autoexpandinputにセットします。SPCcomint-magic-spaceにバインドすれば、SPCでヒストリー参照を展開できます。対話的なキーバインディングの変更を参照してください。

Shellモードは、ヒストリー参照がプロンプトの後にあればヒストリー参照を認識します。Shellモードがプロンプトを認識する方法については、Shellプロンプトを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

38.6 ディレクトリーの追跡

Shellモードは、Shellバッファーのデフォルトディレクトリー(ファイルの名前を参照してください)をシェルの作業ディレクトリーと同一に保つために、サブシェルに与えられる‘cd’、‘pushd’、‘popd’のコマンドを追跡します。これは、送信する入力行を調べることにより認識されます。

これらのコマンドにたいしてエイリアスを使用する場合、変数shell-pushd-regexpshell-popd-regexpshell-cd-regexpに適切な正規表現(正規表現の構文を参照してください)をセットすることにより、それらも認識するようEmacsに指示できます。たとえば、shell-pushd-regexpがシェルコマンドラインの先頭にマッチした場合、その行はpushdコマンドとして記録されます。これらのコマンドは、シェルコマンドラインの先頭だけで認識されます。

Emacsが作業ディレクトリーの変更に際して混乱した場合は、M-x dirsを試してください。このコマンドはシェルに作業ディレクトリーを尋ねて、それに対応してデフォルトディレクリーを更新します。これは、一般的なコマンド構文のほとんどをサポートするシェルでは機能しますが、特殊なシェルでは機能しないかもしれません。

シェルの作業ディレクトリーを追跡する他の方法を実装した、バッファーローカルなマイナーモードの、Dirtrackモードを使うこともできます。この方法を使うには、シェルプロンプトに常に作業ディレクトリーが含まれていなければならず、プロンプトのどの部分が作業ディレクトリーを含むか認識するための正規表現を与えなければなりません。詳細は、変数dirtrack-listのドキュメントを参照してください。Dirtrackモードを使用するには、ShellバッファーでM-x dirtrack-modeとタイプするか、shell-mode-hookdirtrack-modeを追加します(フックを参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

38.7 Shellモードのオプション

変数comint-scroll-to-bottom-on-inputが非nilの場合、挿入およびyankコマンドは、挿入する前に選択されたウィンドウを、バッファーの最後までスクロールします。デフォルトはnilです。

comint-scroll-show-maximum-outputが非nilの場合、ポイントが最後にあるとき到着した出力は、可能な限り有用なテキストを表示するために、テキストの最後の行がウィンドウの一番下になるようなスクロールを試みます(これはほとんどの端末のスクロール動作を真似た動作です)。デフォルトはtです。

comint-move-point-for-outputをセットすることにより、出力が到着したときにバッファーの最後にポイントをジャンプさせることができます — その前にポイントがバッファーのどこにあろうと関係ありません。値がthisの場合、選択されたウィンドウ内でポイントがジャンプします。値がallの場合、Comintバッファーを表示するすべてのウィンドウでポイントがジャンプします。値がotherの場合、カレントバッファーを表示する、選択されていないすべてのウィンドウでポイントがジャンプします。デフォルト値はnilで、これはポイントが最後にジャンプしないことを意味します。

comint-prompt-read-onlyをセットした場合、Comintバッファーのプロンプトは読み取り専用になります。

変数comint-input-ignoredupsは、連続する同じ入力を入力ヒストリーに保存するかを制御します。非nil値は、入力が前の入力と同じ場合は省略することを意味します。デフォルトはnilで、これは入力が前の入力と同じでも保存することを意味します。

ファイル名の補完をカスタマイズする3つの変数があります。変数comint-completion-addsuffixは、完全に補完されたファイル名またはディレクトリー名の最後にスペースまたはスラッシュを挿入するかを制御します(非nilは、スペースまたはスラッシュを挿入することを意味します)。comint-completion-recexactが非nilの場合、通常のEmacs補完アルゴリズムが1文字も追加できないようなときは、TABで一番短い利用可能な補完を選択するよう指示します。comint-completion-autolistが非nilの場合、補完が完全でないときは、利用可能なすべての候補をリストするよう指示します。

コマンド補完は通常、実行可能ファイルだけを考慮します。shell-completion-execonlynilにセットした場合は、実行可能ファイル以外も同様に考慮します。

変数shell-completion-fignoreは、Shellモードで無視するファイル名の拡張子のリストを指定します。デフォルトはnilですが、‘~’、‘#’、‘%’で終わるファイル名を無視するために("~" "#" "%")をセットするユーザーもいます。他のComintモードに関連するモードは、かわりに変数comint-completion-fignoreを使用します。

シェルコマンド補完の実装の詳細は、shell-dynamic-complete-command関数のlispドキュメントで見ることもできます。

pushd’の動作を設定することができます。shell-pushd-tohomeは、引数を与えない場合に‘pushd’が‘cd’のように振る舞うかを制御します。shell-pushd-dextractは、数引数を与えたときローテートするのではなくpopするかを制御します。shell-pushd-duniqueは、ディレクトリースタックにディレクトリーがない場合だけ追加するかを制御します。もちろん選択する値は背後のシェルに適合する必要があります。

Comintモードは、環境変数TERMの値を安全なデフォルト値にセットしますが、この値はいくつかの有用な機能を無効にします。たとえば、カラーがサポートされているかの判断にTERMを使用するため、アプリケーションではカラーが無効になっています。したがって、Emacsはオプションcomint-terminfo-terminalを提供します。そのため、その端末の高度な機能を利用するために、システムのterminfoデータベースにより提供される端末にセットできます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

38.8 Emacsの端末エミュレーター

テキスト端末エミュレーターでサブシェルを実行するには、M-x termを使用します。これは*terminal*という名前のバッファーを作成(または再利用)して、キーボードを入力とするサブシェルを実行し、出力はそのバッファーになります。

端末エミュレーターは、2つの入力モードをもつTermモードを使用します。lineモード(line mode)では、Termは基本的にShellモードのように振る舞います(Shellモードを参照してください)。charモード(char mode)では、文字は端末入力として直接サブシェルに送られます。唯一の例外は端末エスケープ文字で、デフォルトはC-cです(Termモードを参照してください)。入力をエコーするのはサブシェルの役目です。サブシェルからの端末出力は、バッファーのポイントの後に送られます。

(Emacsのような)いくつかのプログラムでは、端末スクリーンで詳細に外観を制御する必要があります。これらのプログラムは特別な制御コードを送ることによりこれを行ないます。Termモードは、xtermを含むほとんどの現代的な端末で使用できる、ANSI標準のVT100スタイルのエスケープシーケンスを認識・処理します(したがって、実際にEmacsのTermウィンドウ内でEmacsを実行することもできます)。

termフェイスは、端末エミュレーターのテキストのデフォルトの外観を指定します(デフォルトはdefaultフェイスと同じ外観です)。端末の制御コードがテキストの外観を変更するために使用される場合、これらは端末エミュレーター内で、フェイスterm-color-blackterm-color-redterm-color-greenterm-color-yellowterm-color-blueterm-color-magentaterm-color-cyanterm-color-whiteterm-color-underlineterm-color-boldで表示されます。テキストのフェイスを参照してください。

シリアルポートに接続されたデバイスと通信するために、Termモードを使うこともできます。シリアル端末を参照してください。

サブシェルをロードするために使用されるファイル名は、Shellモードと同じ方法で決定されます。複数の端末エミュレーターを作成するには、Shellモードと同じように、M-x rename-uniquelyを使って、バッファー*terminal*を違う名前にリネームします。

Shellモードとは異なり、Termモードは入力を調べてカレントディレクトリーを追跡することはしません。しかし、いくつかのシェルはカレントディレクトリーをTermに告げることができます。これはbashのバージョン1.15以降では自動的に行なわれます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

38.9 Termモード

Termモードでlineモードとcharモードを切り替えるには、以下のコマンドを使用します:

C-c C-j

lineモードに切り替えます(term-line-mode)。すでにlineモードのときは何もしません。

C-c C-k

charモードに切り替えます(term-char-mode)。すでにcharモードのときは何もしません。

以下のコマンドはcharモードだけで利用可能です:

C-c C-c

サブシェルに、リテラルのC-cを送ります(term-interrupt-subjob)。

C-c char

これは通常のEmacsでのC-x charと等価です。たとえばC-c oは、通常C-x oにグローバルにバインドされている‘other-window’を呼び出します。

Termモードにはpage-at-a-time(1度に1ページ)機能があります。これが有効な場合、出力の画面の最後で一時停止します。

C-c C-q

page-at-a-time機能を切り替えます(term-pager-toggle)。このコマンドはlineモードとcharモードの両方で機能します。この機能が有効な場合、モードラインには単語‘page’が表示され、Termが1画面に収まらない出力を受け取ったときは、一時停止してモードラインに‘**MORE**’を表示します。SPCとタイプすると次の1画面分の出力を表示し、?でオプションを見ることができます。このインターフェースは、moreプログラムと同様です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

38.10 リモートホストのシェル

Termウィンドウから、通常の端末から使うコマンド(たとえばsshtelnetrlogin)で、リモートコンピューターにログインすることができます。

パスワードを尋ねるようなプログラムは、通常パスワードをエコーしないので、パスワードはバッファーにも表示されません。バッファーがcharモードの場合、実際の端末で使用しているのと同じ動作になります。lineモードの場合、パスワードは一時的に表示されますが、リターンをタイプするとパスワードは消去されます(これは自動的に行なわれます。特別なパスワード処理は行なっていません)。

別のマシンにログインしているときは、リモートログインコマンドのために、環境変数TERMをセットすることにより、端末タイプを指定する必要があります(bashを使用している場合、リモートログインコマンドの前に、カンマで区切らず値割り当てを記述することにより、これを行なうことができます)。端末タイプ‘ansi’または‘vt100’は、ほとんどのシステムで動作するでしょう。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

38.11 シリアル端末

コンピューターに、シリアルポートに接続されたデバイスがあるとき、M-x serial-termとタイプすることにより、デバイスと通信することができます。このコマンドは新しいTermモードのバッファーのために、ポート番号、スピード、スイッチを尋ねます。Emacsは、通常のTermモードの端末で行なうのと同じように、このバッファーを通じてシリアルデバイスと通信します。

シリアルポートのスピードはビット毎秒で計ります。もっとも一般的なスピードは9600ビット毎秒です。モードラインをクリックすることにより、このスピードを対話的に変更できます。

シリアルポートはモードラインの‘8N1’をクリックしても設定できます。デフォルトでは、シリアルポートは‘8N1’に設定されており、これは各バイトは8ビットからなり、パリティービットチェックなし、ストップビットが1であることを意味します。

スピードや設定が間違っている場合、デバイスと通信できず、おそらくウィンドウにはゴミが出力されるでしょう。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

39 サーバーとしてのEmacsの使用

さまざまなプログラムが、特定のテキスト断片を編集するために、あなたが選択したエディターを呼び出すことができます。たとえば、バージョンコントロールシステム(バージョンコントロールを参照してください)は、バージョンコントロールログを入力するためのエディターを呼び出し、Unixのmailユーティリティーは送信メッセージの入力にエディターを呼び出します。慣例により、選択するエディターは、環境変数EDITORで指定されます。しかしEDITORを‘emacs’にセットした場合、Emacsが呼び出されますが、これは便利な方法ではありません — なぜなら新しいEmacsプロセスが開始されるからです。なぜこれが不便かというと、新たなEmacsプロセスは、既存のEmacsプロセスのバッファー、コマンドヒストリー、その他の情報を共有しないからです。

Emacsをedit server(編集サーバー)としてセットアップして、Emacsが外部からの編集リクエストを“listen”し、それに応じて動作させることにより、この問題を解決できます。Emacsサーバーを開始するにはさまざまな方法があります:

Emacsサーバーを一度開始すると、emacsclientというシェルコマンドを使用してEmacsに接続して、ファイルをvisitするよう指示できます。環境変数EDITORに‘emacsclient’をセットすれば、外部プログラムは編集のために既存のEmacsプロセスを使用できます。21

変数server-nameを使って、一意なサーバー名を与えることにより、同一マシン上で複数のEmacsサーバーを実行することができます。たとえばM-x set-variable RET server-name RET "foo" RETは、サーバー名を‘foo’にセットします。emacsclientプログラムはTCPソケット使用の有無に応じて‘-s’オプション、または‘-f’オプション(emacsclientのオプションを参照)で、名前によりサーバーを指定できます(emacsclientのオプションを参照)。

複数のEmacsデーモン(初期化オプションをい参照してください)を実行したい場合、以下のようにデーモンごとにそれぞれ、独自のサーバー名を与えることができます:

  emacs --daemon=foo

一意なサーバー名によりサーバーを定義した場合、他のEmacsインスタンスからそのサーバーに接続し、server-eval-at関数を使用して、そのサーバーでLisp式を評価できます。たとえば(server-eval-at "foo" '(+ 1 2))は、式(+ 1 2)をサーバー‘foo’で評価して、3を返します(そのような名前のサーバーが存在しない場合はエラーをシグナルします)。現在のところ、これは主に開発者に有用な機能です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

39.1 TCP Emacs server

Emacsサーバーは通常、接続にたいしてローカルのUnixドメインソケットをlistenします。 MS-Windowsのようないくつかのオペレーティングシステムは、ローカルソケットをサポートしません。そのような場合、サーバーはかわりにTCPソケットをlistenします。ローカルソケットがサポートされている場合でも、サーバーにTCPソケットをlistenさせるほうが便利な場合があります(たとえばリモートマシンからEmacsサーバーに接続する必要がある場合)。ローカルソケットのかわりにTCPソケットをEmacsにlistenさせる場合は、server-use-tcpに非nilをセットできます。これはOSがローカルソケットをサポートしない場合は、デフォルトです。

EmacsサーバーがTCPを使うように設定されている場合は、デフォルトではlocalhostインターフェイスのランダムなポートをlistenします。server-hostserver-portを使用して、これを他のインターフェイス、および/または固定されたポートに変更できます。

TCPソケットは、ファイルシステムのパーミッションの対象ではありません。TCPソケットを通じて、誰がEmacsサーバーと通信できるか何らかの制御を得るには、emacsclientプログラムがサーバーに認証キーを送信しなければなりません。このキーは通常、Emacsサーバーによりランダムに生成されます。これが推奨されるモードです。

必要なら、server-auth-key変数をセットすることにより、認証キーに静的な値をセットできます。このキーは、スペースを除くプリント可能な64文字のASCII文字(これは‘!’から‘~’、10進コードの33から126を意味します)から構成されなければなりません。ランダムキーを得るために、M-x server-generate-keyを使用できます。

TCP Emacsサーバーを開始したとき、Emacsはemacsclientがサーバーに接続するために使用する、TCP情報を含むサーバーファイル(server file)を作成します。変数server-auth-dirは、サーバーファイルを含むデフォルトディレクトリーを指定します。デフォルトでは、これは~/.emacs.d/server/です。アクセス権限(file permission)をもつlocalソケットが存在しない場合は、このディレクトリーのパーミッションにより、どのユーザーのemacsclientプロセスがEmacsサーバーと対話(talk)できるか判断されます。server-nameがー絶対ファイル名なら、サーバーファイルはそのファイル名で作成されます。

特定のserverファイルによりTCPサーバーに接続するようemacsclientに指示するには、オプション‘-f’または‘--server-file’を使用するか、環境変数EMACS_SERVER_FILEをセットします(emacsclientのオプションを参照)。server-auth-dirが非標準的な値にセットされていたり、server-nameに絶対ファイル名がセットされていると、デフォルトのserver-auth-dirは、相対ファイル名を解決するために使用するディレクトリーとして、emacsclient内にハードコーディングされているため、serverファイルにたいする絶対ファイル名が必要になります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

39.2 emacsclientの呼び出し

emacsclientプログラムを使う一番簡単な方法は、シェルコマンド‘emacsclient file’を実行する方法です。ここでfileはファイル名です。これはEmacsサーバーに接続して、Emacsプロセスの既存のフレームの1つ — グラフィカルなフレーム、またはテキスト端末のフレーム(フレームとグラフィカルなディスプレーを参照してください) — でfileをvisitするよう指示します。それから、そのフレームを選択して編集を開始できます。

Emacsサーバーが存在しない場合、emacsclientはエラーメッセージと共に終了します(このハプニングによるエラー終了は、emacsclientにたいして‘--alternate-editor=\"\"’オプションを使用して回避できる。emacsclientのオプションを参照されたい)。Emacsプロセスに既存のフレームがない場合 — これはサーバーがデーモン(サーバーとしてのEmacsの使用を参照してください)として開始されたときに発生し得ます — は、emacsclientを呼び出した端末でEmacsフレームをオープンします。

オプション‘-c’でグラフィカルなディスプレー、‘-t’を使用しテキスト端末で新しいフレームを開くように、emacsclientに強制することもできます。emacsclientのオプションを参照してください。

単一のテキスト端末で実行している場合、emacsclientのシェルとEmacsサーバーを、次の2つの方法で切り替えることができます。1つ目は、Emacsサーバーと、別の仮想端末でemacsclientを実行して、emacsclientを呼び出した後にEmacsサーバーの仮想端末に切り替える方法です。2つ目は、Emacsサーバー自身からShellモード(対話的なサブシェルを参照してください)、またはTermモード(Termモードを参照してください)を使ってemacsclientを呼び出す方法です。emacsclientは、Emacs配下のサブシェルのときだけブロックするので、依然としてファイルの編集にEmacsを使用できます。

Emacsサーバーでfileの編集を終えたら、そのバッファーでC-x # (server-edit)とタイプします。これはファイルを保存して、emacsclientプログラムに終了を告げるメッセージを送り返します。通常、EDITORを使うプログラムは、何か他のことを行なう前にエディター — この場合はemacsclient — の終了を待ちます。

複数のファイル名を引数にしてemacsclientを呼び出すこともできます。‘emacsclient file1 file2 ...’は、Emacsサーバーにfile1file2、...をvisitするよう指示します。Emacsはfile1をvisitしているバッファーを選択して、他のバッファーをバッファーリストの最後に隠します(複数バッファーの使用を参照してください)。指定されたすべてのファイルを終了したら(たとえば各サーバーバッファーでC-x #をタイプしたら)、emacsclientプログラムは終了します。

サーバーバッファーを終了すると、そのバッファーがサーバーバッファーを作成する前から存在していたバッファーでないかぎり、そのバッファーもkillされます。しかしserver-kill-new-buffersnilにセットした場合、別の基準が使用されます。この場合、サーバーバッファーの終了は、ファイル名が正規表現server-temp-file-regexpにマッチするときは、バッファーをkillします。これはある種の一時ファイルを区別するための仕組みです。

C-x #は、さまざまなファイルを編集する、保留されている外部要求が他にないかチェックして、次のそのようなファイルを選択します。サーバーバッファーに辿り着くのに、C-x #だけを使わなければならない訳ではありません。サーバーバッファーに手動で切り替えることもできます。しかしC-x #は、emacsclientに終了したことを告げる方法なのです。

変数server-windowの値をウィンドウやフレームにした場合、C-x #は常に次のサーバーバッファーを、そのウィンドウまたはそのフレームに表示します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

39.3 emacsclientのオプション

以下のようなオプション引数をemacsclientプログラムに渡すことができます:

emacsclient -c +12 file1 +4:3 file2

引数‘+line’および‘+line:column’は、その後に続くファイルの行番号、または行番号と列番号を指定します。これらはEmacs自身に対するコマンドライン引数と同じように機能します。 動作引数を参照してください。

その他のemacsclientにより認識されるオプション引数を以下にリストします:

-a command
--alternate-editor=command

emacsclientが、Emacsとの接続に失敗したとき実行するシェルコマンドを指定します。これはスクリプト内でemacsclientを実行するとき便利です。このコマンドには、\"like this\"のようにクォートされた引数が含まれるかもしれません。現在のところ、クォートのエスケープはサポートされていません。

特別な例外として、commandが空文字列の場合、接続に失敗したらemacsclientは(‘emacs --daemon’のように)Emacsをデーモンモードで開始して、再度接続を試みます。

環境変数ALTERNATE_EDITORは、‘-a’オプションと同じ効果をもちます。両方が指定された場合は、後者のオプションが優先されます。

-c
--create-frame

既存のEmacsフレームを使うかわりに、新しいグラフィカルなクライアントフレーム(client frame)を作成します。クライアントフレームでの、C-x C-cの特別な振る舞いについては、以下を参照してください。(Xサーバーに接続できない等で)新たにグラフィカルなフレームを作成しない場合、あたかも‘-t’オプションが指定されたかのように、テキスト端末でクライアントフレームの作成を試みます。

MS-Windowsでは、単一のEmacsセッションがグラフィカルなフレームとテキスト端末のフレームの両方を表示することはできず、複数のテキスト端末のフレームを表示することもできません。したがってEmacsサーバーがテキスト端末で実行されている場合、‘-c’オプションは‘-t’オプションのように、サーバーのカレントテキスト端末で新たなフレームを作成します。MS-WindowsでEmacsを開始する方法を参照してください。

-c’オプションを指定するときに、ファイル名の引数を省略した場合、新しいフレームはデフォルトで*scratch*バッファーを表示します。変数initial-buffer-choiceでこの振る舞いをカスタマイズできます(Emacsの起動を参照してください)。

-F alist
--frame-parameters=alist

新たに作成される、グラフィカルなフレームのパラメーターをセットします(フレームパラメーターを参照してください)。

-d display
--display=display

与えられたファイルを、(複数のXディスプレーがあることを想定して)Xディスプレーdisplayで開くようEmacsに指示します。

-e
--eval

ファイルをvisitするかわりに、Emacs Lispコードを評価するようEmacsに指示します。このオプションが与えられた場合、emacsclientは引数をvisitするファイルではなく、式のリストと解釈します。

-f server-file
--server-file=server-file

TCPを通じてEmacsサーバーに接続するためのserverファイル(TCP Emacs serverを参照)を指定します。かわりにserverファイルを示すように、環境変数EMACS_SERVER_FILEをセットできます(コマンドラインオプションは、環境変数をオーバーライドする)。

Emacsサーバーは通常は接続にたいしてローカルソケットをlistenしますが、TCPを通じた接続もサポートします。TCPによりEmacsサーバーに接続するためには、emacsclientがEmacsサーバーへの接続に関する詳細を含むserverファイル(server file)を読み込む必要があります。このオプションでserverファイル名を指定します。これは~/.emacs.d/serverからの相対ファイル名か、絶対ファイル名です。TCP Emacs serverを参照してください。

-n
--no-wait

すべてのサーバーバッファーが終了するのを待つかわりに、emacsclientが即座に終了するようにします。Emacsのサーバーバッファーで編集したいときに、このオプションを指定します。C-x #をタイプしても、これらはkillされません。

--parent-id id

XEmbedプロトコルを通じて、IDがidの親Xウィンドウでクライアントフレームとして、emacsclientフレームをオープンします。現在のところ、これは主に開発者に有用なオプションです。

-q
--quiet

emacsclientがEmacsを待つメッセージ、またはリモートのサーバーソケットに接続するメッセージを表示しないようにします。

-u
--suppress-output

サーバーからリターンされた結果を、emacsclientが表示しないようにします。これは主に‘-e’と併用し、評価が結果ではなく副作用を目的としているとき有用です。

-s server-name
--socket-name=server-name

名前がserver-nameのEmacsサーバーに接続します(このオプションはMS-Windowsではサポートされない)。サーバー名は、Emacsサーバー上の変数server-nameにより与えられます。このオプションが省略された場合、emacsclientは見つかったサーバーに接続します。Emacsサーバーのserver-nameに絶対ファイル名をセットした場合は、emacsclientがそのサーバーに接続するよう指示するために、server-nameに同じ絶対ファイル名を与えてください。Emacsをデーモンとして開始(初期化オプションを参照)して、そのデーモンにより開始されたサーバーに名前を指定した場合には、このオプションを使用する必要があります。

かわりにserverソケットを示すように、環境変数EMACS_SOCKET_NAMEをセットできます(コマンドラインオプションは環境変数をオーバーライドする)。

-t
--tty
-nw

既存のEmacsフレームを使うかわりに、カレントテキスト端末に新たなクライアントフレームを作成します。これはテキスト端末のフレームを作成する点を除き、上記で説明した‘-c’と同じように振る舞います(非ウィンドウ端末を参照してください)。

MS-Windowsでは、Emacsサーバーがグラフィカルなディスプレーを使っている場合は‘-c’のように振る舞いますが、Emacsサーバーがテキスト端末で実行されている場合は、カレントテキスト端末に新たなフレームを作成します。

-T tramp-prefix
--tramp-prefix=tramp-prefix

EmacsがTRAMP (The Tramp Manual in The Tramp Manualを参照)を使用してリモートマシンにファイルを配すとき(リモートファイルを参照)、ファイル名に追加されるプレフィクスをセットします。これは主に、TCP上でのEmacsサーバーの使用と併用すると有用です(TCP Emacs serverを参照)。listenするポートをsshフォワードして、リモートマシンでserver-fileを利用可能にすることにより、リモートマシン上のプログラムはEDITOR、および同種の環境変数にたいする値にemacsclientを使用できますが、リモートマシンからEmacsサーバーと通信するかわりに、そのファイルはTRAMPを使用してローカルのEmacsセッションによりvisitされます。

環境変数EMACSCLIENT_TRAMPは、‘-T’オプションと同じ効果をもちます。両方が指定された場合は、コマンドラインのオプションが優先されます。

たとえば2つのホスト‘local’および‘remote’があり、ローカルのEmacsはTCPポート12345をlistenしているとします。さらに/homeが共有ファイルシステム上にあるとすると、serverファイル~/.emacs.d/server/serverは両方のホストから読み込めることになります。

local$ ssh -R12345:localhost:12345 remote
remote$ export EDITOR="emacsclient \
        --server-file=server \
        --tramp=/ssh:remote:"
remote$ $EDITOR /tmp/foo.txt #Should open in local emacs.

オプション‘-c’または‘-t’で作成された、グラフィカルなフレームおよびテキスト端末のフレームは、クライアントフレーム(client frames)とみなされます。クライアントフレームから作成した新たなフレームも、クライアントフレームとみなされます。クライアントフレームでC-x C-c (save-buffers-kill-terminal)とタイプした場合、それが通常行なうようなEmacsセッションのkill(Emacsからのexitを参照してください)は行なわれません。かわりにEmacsはクライアントフレームを削除します。さらに、制御を取り戻すために待っているemacsclientをクライアントフレームがもつ場合(たとえば‘-n’オプションを与えなかった場合)、Emacsは同じくクライアントの他のすべてのフレームを削除し、(それらすべてにたいしてC-x #をタイプしたかのように)クライアントのサーバーバッファーが終了したとマークします。クライアントフレームが削除された後、残ったフレームが存在しない場合、Emacsセッションは終了します。

例外として、Emacsがデーモンとして開始された場合、すべてのフレームはクライアントフレームとみなされ、C-x C-cがEmacsをkillすることはありません。デーモンセッションを終了するには、M-x kill-emacsとタイプします。

-t’と‘-n’は、矛盾するオプションであることに注意してください。‘-t’はカレントテキスト端末に新たにクライアントフレームを作成して制御することを指示し、‘-n’はテキスト端末で制御を行なわないことを指示するからです。両方のオプションを与えた場合、‘-t’の効果は打ち消されて、Emacsは新たにフレームを作成せず、既存のフレームで指定されたファイルをvisitします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

40 ハードコピーの印刷

Emacsは、バッファーの全体、または一部のハードコピーを印刷するコマンドを提供します。以下で詳しく述べるとおり、直接印刷コマンドを呼び出したり、メニューバーの‘File’メニューを使うことができます。

このセクションで説明するコマンドとは別に、Dired(ファイルにたいする操作を参照してください)からハードコピーを印刷したり、ダイアリー(ダイアリーの表示を参照してください)から印刷することもできます。コマンドM-x htmlfontify-bufferで、EmacsバッファーをHTMLに“印刷”することもできます。これはEmacsのフェイスをCSSベースのマークアップに置換して、カレントバッファーをHTMLに変換します。さらにOrgモード(Orgモードを参照してください)では、OrgファイルをPDFのような様々なフォーマットに印刷できます。

M-x print-buffer

ファイル名を含むページヘッダーとともに、カレントバッファーのハードコピーを印刷します。

M-x lpr-buffer

ページヘッダーなしで、カレントバッファーのハードコピーを印刷します。

M-x print-region

print-bufferと同様ですが、カレントリージョンだけを印刷します。

M-x lpr-region

lpr-bufferと同様ですが、カレントリージョンだけを印刷します。

ほとんどのオペレーティングシステムでは、上記のハードコピーコマンドは、lprプログラムを呼び出して、印刷のためにファイルをサブミットします。印刷プログラムを変更するには、変数lpr-commandをカスタマイズします。追加のスイッチを指定して、印刷プログラムにに与えるには、リスト変数lpr-switchesをカスタマイズします。この変数の値はオプション文字列のリストで、それぞれが‘-’で始まります(たとえばオプション文字列"-w80"は1行に80列を指定します)。デフォルトは、空リストnilです。

使用するプリンターを指定するには、変数printer-nameをセットします。デフォルトはnilで、これはデフォルトプリンターを指定します。これにプリンター名(文字列)をセットした場合、その名前は‘-P’スイッチとともにlprに渡されます。lprコマンドを使用しない場合は、スイッチをlpr-printer-switchで指定する必要があります。

同様に変数lpr-headers-switchesは、ページヘッダーを作成するために使用する追加のスイッチを指定します。変数lpr-add-switchesは、印刷プログラムに‘-T’および‘-J’オプション(lpr向きのオプションです)を渡すかどうかを制御します。nilは、これらを追加しないことを意味します(印刷プログラムがlpr)互換でない場合は、この値を使用するべきです)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

40.1 PostScriptのハードコピー

これらのコマンドはバッファーの内容をPostScriptに変換して、それを印刷または別のEmacsバッファーに出力します。

M-x ps-print-buffer

PostScript形式で、カレントバッファーのハードコピーを印刷します。

M-x ps-print-region

PostScript形式で、カレントリージョンのハードコピーを印刷します。

M-x ps-print-buffer-with-faces

PostScript形式で、カレントバッファーのハードコピーを印刷し、テキストで使用されているフェイスはPostScript機能により表示します。

M-x ps-print-region-with-faces

PostScript形式で、カレントリージョンのハードコピーを印刷し、テキストで使用されているフェイスで表示します。

M-x ps-spool-buffer

カレントバッファーのテキストにたいするPostScriptイメージを生成およびスプールします。

M-x ps-spool-region

カレントリージョンにたいするPostScriptイメージを生成およびスプールします。

M-x ps-spool-buffer-with-faces

カレントバッファーにたいするPostScriptイメージを生成およびスプールし、使用されているフェイスで表示します。

M-x ps-spool-region-with-faces

カレントリージョンにたいするPostScriptイメージを生成およびスプールし、使用されているフェイスで表示します。

M-x ps-despool

Send the spooled PostScript to the printer.

M-x handwrite

カレントバッファーにたいして、手書きされたようなPostScriptを生成・印刷します。

ps-print-bufferおよびps-print-regionコマンドは、バッファーの内容をPostScript形式で印刷します。一方はバッファー全体を印刷し、もう一方はリージョンだけを印刷します。コマンドps-print-buffer-with-facesおよびps-print-region-with-facesも同様に振る舞いますが、バッファーテキストのフェイス(フォントとカラー)を表示するためにPostScript機能を使用します。

プレフィクス引数(C-u)を使用した場合、これらのコマンドは対話的にユーザーにファイル名の入力を求め、PostScriptイメージをプリンターに送るかわりに、そのファイルに保存します。

print’のかわりに‘spool’が名前につくコマンドは、PostScript出力をプリンターに送るかわりに、Emacsバッファーに出力することを意味します。

コマンドps-despoolを使用して、スプールされたイメージをプリンターに送ります。このコマンドは‘-spool-’コマンド(上記コマンド参照)により生成されたPostScriptをプリンターに送ります。プレフィクス引数(C-u)を指定した場合は、ファイル名の入力を求め、スプールされたPostScriptイメージをプリンターに送るかわりに、そのファイルに保存します。

M-x handwriteはもっと他愛ない機能です。これはカレントバッファーのPostScript表現を、草書体の手書きドキュメントのように生成します。これはグループhandwriteでカスタマイズできます。この関数はISO 8859-1文字だけサポートします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

40.2 PostScriptハードコピーにたいする変数

すべてのPostScriptハードコピーコマンドは、どのように出力を印刷するかの指定に、変数ps-lpr-commandps-lpr-switchesを使用します。ps-lpr-commandは実行するコマンド名、ps-lpr-switchesは使用するコマンドラインオプション、ps-printer-nameはプリンターを指定します。最初の2つの変数をセットしない場合、変数の初期値をlpr-commandlpr-switchesから取得します。ps-printer-namenilの場合、printer-nameが使用されます。

変数ps-print-headerは、これらのコマンドが各ページにヘッダー行を追加するかを制御します。これをnilにセットするとヘッダーはオフになります。

プリンターがカラーをサポートしない場合は、ps-print-color-pnilにセットして、カラー処理をオフにするべきです。デフォルトでは、ディスプレーがカラーをサポートしていれば、Emacsはカラー情報をもったハードコピー出力を生成します。モノクロプリンターでは、カラーはグレーの濃淡でエミュレートされます。スクリーンカラーがグレーの濃淡だけしか使用していなくても、これはほとんど読み取れないか、読みにくい出力を生成するかもしれません。

モノクロプリンターでより良いカラー表示を得るために、ps-print-color-pblack-whiteをセットすることもできます。これはboldとitalicのフェイス属性で補強された、カスタマイズ可能なグレースケールのリストによりカラーを表現するためのps-black-white-facesお情報を使用することにより機能します。

デフォルトでは、変数ps-use-face-backgroundが非nilでなければ、PostScript印刷はフェイスのバックグラウンドカラーは無視します。これは望ましくないゼブラストライプや、バックグラウンドイメージとテキストの干渉を避けるためです。

変数ps-paper-typeは、フォーマットする用紙サイズを指定します。妥当な値にはa4a3a4smallb4b5executiveledgerlegalletterletter-smallstatementtabloidが含まれます。デフォルトはletterです。変数ps-page-dimensions-databaseを変更することにより、追加の用紙サイズを定義できます。

変数ps-landscape-modeは、ページの印刷向きを指定します。デフォルトはnilで、これは縦向き印刷モード(portrait mode)を意味します。非nil値は横向き印刷モード(landscape mode)を指定します。

変数は列番号を指定します。この変数は横向きモードと縦向きモードの両方で効果をもちます。デフォルトは1です。

変数ps-font-familyは、通常のテキストを印刷するために使用するフォントファミリーを指定します。妥当な値には、CourierHelveticaNewCenturySchlbkPalatinoTimesが含まれます。変数ps-font-sizeは、通常のテキストのためのフォントサイズを指定し、デフォルトは8.5ポイントです。ps-font-sizeの値には、2つの浮動小数点によるコンスでも指定できます。その場合、1つは縦向き印刷モード、もう一方は横向き印刷モードでの指定です。

Emacsは、通常のPostScriptプリンターより多くのスクリプトと文字をサポートします。したがってバッファーのいくつかの文字は、プリンターに組み込まれたフォントを使って印刷できないかもしれません。プリンターが提供するフォントをGNU Intlfontsパッケージのフォントで増強したり、EmacsにIntlfontsフォントだけを使うように命令できます。変数ps-multibyte-bufferがこれを制御します。デフォルト値のnilは、ASCIIおよびLatin-1文字を印刷するのに適しています。non-latin-printerは、プリンターにASCII、Latin-1、Japanese、Korean文字にたいするフォントが組み込まれている場合の値です。すべての文字にたいして使用される、IntlfontsパッケージのBDFフォントのための値がbdf-fontです。最後に値bdf-font-except-latinは、ASCIIおよびLatin-1文字にたいしては組み込みフォントを使用し、それ以外の文字にたいしてはIntlfontsのBDFフォントを使用するよう指示します。

BDFフォントを使えるようにするには、それをどこで見つけることができるかを、Emacsが知る必要があります。変数bdf-directory-listは、Emacsがこれらのフォントを探すべきディレクトリーのリストを保持します。デフォルト値には、1つのディレクトリー/usr/local/share/emacs/fonts/bdfが含まれます。

これらのコマンドに対する、その他多くのカスタマイズ変数は、Lispファイルps-print.elおよびps-mule.elで定義・説明されています。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

40.3 印刷のためのパッケージ

ハードコピーを印刷するためのEmacsの基本的な機能は、Printingパッケージを使って拡張できます。これは何を印刷するかの選択、印刷前のPostScriptファイルのプレビュー、プリントヘッダーなどのさまざまな印刷オプションの設定、横向きモードや縦向きモード、duplexモードにたいする使いやすいインターフェースを提供します。GNU/LinuxシステムまたはUnixシステムでは、Printingパッケージは、GhostScriptプログラムの一部として配布される、gsおよびgvユーティリティーに依存しています。MS-Windowsでは、Ghostscriptのポート版のgstoolsが使用されます。

Printingパッケージを使用するには、initファイル(Emacs初期化ファイルを参照してください)に(require 'printing)を追加して、その後に(pr-update-menus)と記述します。この関数はメニューバーの通常の印刷コマンドを、さまざまな印刷オプションを含む‘Printing’サブメニューに置き換えます。M-x pr-interface RETとタイプすることもできます。これはカスタマイズバッファーに似た*Printing Interface*バッファーを作成し、そこで印刷オプションをセットできます。何をどのようにして印刷するかセットした後、‘Print’ボタン(それをmouse-2でクリックするか、その上にポイントを移動してRETをタイプします)で印刷ジョブを開始します。さまざまなオプションについての詳細は、‘Interface Help’ボタンを使用してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

41 テキストのソート

Emacsは、バッファーのテキストをソートするためのコマンドをいくつか提供しています。これらはすべて、リージョンの内容にたいして処理を行ないます。これらのコマンドはリージョンのテキストを、多数のソートレコード(sort records)に分割し、各レコードをソートキー(sort key)で識別した後、ソートキーにより決定される順序にレコードを並び替えます。レコードは並び替えられ、レコードのキーはアルファベット順、または数値ソートでは数値順になります。アルファベット順のソートでは、ASCII文字順にしたがい、‘A’から‘Z’のすべての大文字は、小文字の‘a’の前になります。(しかし、以下で説明するsort-fold-caseはこれを変更する)。

種々のソートコマンドは、テキストをどのようにソートレコードに分割するか、そして各レコードのどの部分がソートキーとして使用されるかという点で異なります。ほとんどのコマンドは行ごとにソートレコードを分割しますが、ソートレコードとしてパラグラフやページを使うコマンドもあります。ほとんどのソートコマンドは、ソートレコード全体をソートキーとして使用しますが、レコードの一部をソートキーとして使用するものもあります。

M-x sort-lines

リージョンを行に分割して、行のテキスト全体を比較してソートします。数引数は降順でソートすることを意味します。

M-x sort-paragraphs

リージョンをパラグラフに分割して、パラグラフのテキスト全体(先頭の空行は除く)を比較してソートします。数引数は降順にソートすることを意味します。

M-x sort-pages

リージョンをページに分割して、ページのテキスト全体(先頭の空行は除く)を比較してソートします。数引数は降順にソートすることを意味します。

M-x sort-fields

リージョンを行に分割して、各行のあるフィールドの内容を比較することによりソートします。フィールドは空白で区切ることにより定義されるので、ある行の最初の連続する非空白文字がフィールド1を構成し、2番目のそのような文字構成がフィールド2、...となります。

どのフィールドでソートするかは数引数で指定します。1はフィールド1、2はフィールド2、...となります。デフォルトは1です。負の引数はフィールドを左からではなく右から数えることを意味します。したがって、-1は最後のフィールドでソートするという意味です。ソートされるフィールドの内容が同じ行が複数存在する場合、バッファーの元の並び順が維持されます。

M-x sort-numeric-fields

M-x sort-fieldsと同様ですが、各行の指定されたフィールドを整数に変換して、その数字を比較します。テキストとして比較したとき‘10’は‘2’の前になりますが、数字として比較すると‘2’の後になります。デフォルトでは、数字はsort-numeric-baseにより解釈されますが、‘0x’または‘0’で始まる数字は16進および8進で解釈されます。

M-x sort-columns

M-x sort-fieldsと同様ですが、各行で比較に使用されるテキストは固定長の列範囲です。プレフィクス引数を指定した場合は、逆順でソートします。このコマンドの詳細は以下を参照してください。

M-x reverse-region

リージョンの行を逆順にソートします。フィールドでソートするコマンドは降順でソートする機能がないので、フィールドまたは列で降順にソートできるのは便利です。

たとえば、以下のようなバッファー内容のとき:

On systems where clash detection (locking of files being edited) is
implemented, Emacs also checks the first time you modify a buffer
whether the file has changed on disk since it was last visited or
saved.  If it has, you are asked to confirm that you want to change
the buffer.

バッファー全体にM-x sort-linesを適用すると以下のようになります:

On systems where clash detection (locking of files being edited) is
implemented, Emacs also checks the first time you modify a buffer
saved.  If it has, you are asked to confirm that you want to change
the buffer.
whether the file has changed on disk since it was last visited or

大文字の‘O’はすべての小文字の前にソートされます。かわりにC-u 2 M-x sort-fieldsを使用すると、以下が得られます:

implemented, Emacs also checks the first time you modify a buffer
saved.  If it has, you are asked to confirm that you want to change
the buffer.
On systems where clash detection (locking of files being edited) is
whether the file has changed on disk since it was last visited or

ここで、ソートキーは‘Emacs’、‘If’、‘buffer’、‘systems’、‘the’です。

M-x sort-columnsは説明が必要でしょう。ある列にポイントを配し、別の列をマークして、ソート列を指定します。ソートしたいテキストの最初の行の先頭にポイントまたはマークを配すことはできないので、このコマンドは特殊な“リージョン”の定義を使用します。ポイントがある行はすべてリージョンの一部と判断されます。マークがある行もすべてリージョンの一部と判断されます。同様にその間にあるすべての行もリージョンの一部となります。

たとえば、10列目から15列目までの情報でテーブルをソートするには、テーブルの最初の行の10列目にマークを置き、最後の行の15列目にポイントを置いて、sort-columnsを実行します。最初の行の15列目にマークを置き、最後の行の10列目にポイントを置いても、同じように実行できます。

これはポイントとマークで指定された矩形領域をソートすると考えることができます。1つ違うのは、各行の矩形領域の左右にあるテキストも、矩形領域内のテキストとともに移動するという点です。矩形領域(Rectangles)を参照してください。

sort-fold-caseが非nilの場合、多くのソートコマンドは比較時の大文字小文字の違いを無視します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

42 ピクチャーの編集

テキスト文字で作られたピクチャー(たとえばプログラムのコメントにあるような、レジスターをフィールドに分割したピクチャーなど)を編集するには、コマンドM-x picture-modeを使用してPictureモードに入ります。

Pictureモードでは、編集はテキストのquarter-plane(1/4平面)モデルにもとづき、テキスト文字は、右方および下方に無限に広がる領域に点在します。このモデルには、行の終端という概念は存在しません。せいぜい言えるのは、その行の空白でない最後の文字がどこにあるかぐらいです。

もちろん、実際にはEmacsはテキストを文字シーケンスとして考え、行は終端をもちます。しかしPictureモードは、もっともよく使われるコマンドを、テキストのquarter-planeモデルをシミュレートする変種に置き換えます。これらのコマンドはスペースの挿入、またはタブをスペースに置き換えることにより、これを行ないます。

Emacsのほとんどの基本的な編集コマンドは、本質的には同等なことをquarter-planeの方法で行なうように、Pictureモードにより再定義されます。それに加えてPictureモードは、C-cプレフィクスで始まる、特別なピクチャー編集コマンドを実行する、さまざまなキーを定義します。

これらのキーのうち特に重要なのはC-c C-cです。ピクチャーが、通常は他のメジャーモードで編集する、大きなファイルの一部ということもあります。Pictureモードは以前のメジャーモードを記録するので、後でC-c C-c (picture-mode-exit)コマンドでそのモードに戻ることができます。C-c C-cは数引数を与えなければ、行末のスペースの削除も行ないます。

Pictureモードの特別なコマンドのすべては、(pictureライブラリーがロードされていれば)他のモードでも機能しますが、Pictureモード以外ではキーにバインドされません。以下の説明では、“1列”移動...のような言い方をしますが、通常の同等なコマンドと同じように、Pictureモードのコマンドは数引数を扱うことができます。

Pictureモードをオンにすることにより、フックpicture-mode-hookが実行されます。Pictureモードにたいする追加の拡張は、artist.elで見ることができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

42.1 Pictureモードでの基本的な編集

ほとんどのキーは、Pictureモードでも通常と同じことを、quarter-planeスタイルで行ないます。たとえばC-fは、picture-forward-columnを実行するようにリバインドされます。これはポイントを1列右に移動します。必要ならスペースを挿入するので実際の行末は関係ありません。C-bは、picture-backward-columnを実行するようにリバインドされます。必要ならタブを複数のスペースに変換して、常に1列ポイントを左に移動します。C-nC-pは、picture-move-downpicture-move-upを実行するようにリバインドされ、どちらもポイントが同じ列に留まるように、必要に応じてスペースの挿入とタブの変換を行ないます。C-eは、picture-end-of-lineを実行します。これは、その行の最後の非空白文字の後に移動します。C-aは、picture-beginning-of-lineを実行します(スクリーンモデルの選択は行の開始に影響を与えません。このコマンドが行なう追加事項は、カレントピクチャー列を0に更新することです)。

テキストの挿入は、Overwriteモードを通じてquarter-planeモデルに適合されます (マイナーモードを参照してください)。 自己挿入文字は既存のテキストを右にずらすのではなく、列ごとに既存のテキストを置き換えます。RETpicture-newlineを実行し、これは単に次の行の先頭に移動するので、新しいテキストでその行を置き換えることができます。

Pictureモードでは、通常は削除やkillを行なうコマンドは、かわりにテキストを消去(スペースで置き換え)します。DEL (picture-backward-clear-column)は、前の文字を削除するのではなく、スペースで置き換えます。これはポイントを後方に移動します。C-d (picture-clear-column)は、次の文字をスペースで置き換えますが、ポイントは移動しません(文字をクリアーして前方に移動したいときはSPCを使用します)。C-k (picture-clear-line)は、実際に行の内容をkillしますが、バッファーから改行は削除しません。

実際に挿入を行なうには、特別なコマンドを使わなければなりません。C-o (picture-open-line)は、カレント行の後に空行を作成します。行の分割はしません。PictureモードでもC-M-o (split-line)は意味があるので、変更されていません。C-j (picture-duplicate-line)は、カレント行の下に同じ内容の行を挿入します。

Pictureモードで実際の削除を行なうには、C-wC-c C-d(これは他のモードではC-dにバインドされているdelete-charにバインドされています)、またはピクチャー矩形コマンドの1つを使用します(Pictureモードの矩形領域コマンドを参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

42.2 挿入後の移動の制御

Pictureモードでは、自己挿入文字(self-inserting characters)は上書きとポイント移動を行なうので、ポイントを移動する方法に、本質的に制限はありません。ポイントは通常右に移動しますが、自己挿入文字の後に移動する方向は、直行方向と対角方向の8つのうちから任意の方向を指定できます。これはバッファーに線を描くとき便利です。

C-c <
C-c LEFT

挿入の後、左に移動します(picture-movement-left)。

C-c >
C-c RIGHT

挿入の後、右に移動します(picture-movement-right)。

C-c ^
C-c UP

挿入の後、上に移動します(picture-movement-up)。

C-c .
C-c DOWN

挿入の後、下に移動します(picture-movement-down)。

C-c `
C-c Home

挿入の後、左上(“北西”)に移動します(picture-movement-nw)。

C-c '
C-c PageUp
C-c prior

挿入の後、右上(“北東”)に移動します(picture-movement-ne)。

C-c /
C-c End

挿入の後、左下(“南西”)に移動します(picture-movement-sw)。

C-c \
C-c PageDown
C-c next

挿入の後、右下(“南東”)に移動します(picture-movement-se)。

カレントPicture挿入方向にもとづき移動を行なうコマンドは2つです。1つはコマンドC-c C-f (picture-motion)で、その時点で挿入後に移動すると定められた方向と同じ方向に移動するのがC-c C-f (picture-motion)で、逆方向へはC-c C-b (picture-motion-reverse)です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

42.3 Pictureモードでのタブ

Pictureモードでは、タブのような動作が2つ提供されます。コンテキストベースのタブ動作には、M-TAB (picture-tab-search)を使用します。引数を与えないと、前の空でない行で、空白の後の次の“意味をもつ”文字の下にポイントを移動します。ここで“次”とは、“開始した位置から水平方向に大な位置”という意味です。C-u M-TABのようにプレフィックス引数を指定した場合、このコマンドはカレント行で次の意味のある文字に移動します。M-TABはテキストを変更せず、ポイントだけを移動します。“意味のある”文字は変数picture-tab-charsにより定義され、これは一連の文字で定義されます。この変数の構文は正規表現での‘[…]’の内側で使用される構文と似ていますが、‘[’と‘]’はありません。デフォルト値は"!-~"です。

TABpicture-tabを実行し、これはカレントのタブストップの設定にもとづき動作します。Pictureモードではtab-to-tab-stopと等価です。通常はポイントを移動するだけですが、数引数を指定した場合は、移動先までのテキストをクリアーします。

コンテキストベースとタブストップベースのタブ動作形式は、C-c TAB (picture-set-tab-stops)で合わせることができます。このコマンドは、カレント行にたいして、M-TABが意味をもつと判断するであろう位置に、タブストップをセットします。このコマンドの使い方としては、TABと合わせて、コンテキストベースの効果を得ることができます。しかしM-TABで充分な場合は、そちらのほうが便利です。

ピクチャー内では、実際のタブ文字を抑止するほうが便利かもしれません。たとえば、これによりC-x TABがピクチャーをめちゃくちゃにするのを防ぐことができます。変数indent-tabs-modenilにセットすることにより、これを行なうことができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

42.4 Pictureモードの矩形領域コマンド

Pictureモードは、quarter-planeモデルに適合する方法で、テキストの矩形部分に作用するコマンドを定義します。標準の矩形領域コマンドも便利でしょう 矩形領域(Rectangles)を参照してください。

C-c C-k

矩形領域をスペースでクリアーします(picture-clear-rectangle)。プレフィクス引数を指定した場合、テキストを削除します。

C-c C-w r

同様ですが、最初にレジスターrに矩形領域の内容を保存します(picture-clear-rectangle-to-register)。 レジスターを参照してください。

C-c C-y

ポイント位置を左上隅として、最後にkillされた矩形領域をバッファーに上書きコピーします。引数を指定した場合は、上書きではなく挿入します。

C-c C-x r

同様ですが、レジスターrの矩形領域を使用します(picture-yank-rectangle-from-register)。

ピクチャー矩形領域コマンドのC-c C-k (picture-clear-rectangle)とC-c C-w (picture-clear-rectangle-to-register)が、標準の矩形領域コマンドと異なる点は、通常は矩形領域を削除するかわりにクリアーすることです。これはPictureモードでC-dが変更された方法と類似しています。

しかしPictureモードで矩形領域を削除するのが便利なときもあるかもしれないので、これらのコマンドは数引数を与えたときは矩形領域を削除します。数引数の指定の有無に関わらず、C-c C-kC-c C-yのために矩形領域を保存します。

矩形領域をyankするPictureモードのコマンドは、挿入ではなく上書きするという点で、標準の矩形領域コマンドと異なります。これはPictureモードでのテキストの挿入方法が他のモードと異なるのと同じです。C-c C-y (picture-yank-rectangle)は、一番最近killされた矩形領域を(上書きにより)挿入し、C-c C-x (picture-yank-rectangle-from-register)は、指定されたレジスターの矩形領域で同様のことを行ないます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

43 バイナリーファイルの編集

バイナリーファイルを編集する特別なメジャーモードに、Hexlモードがあります。これを使用するには、ファイルをvisitするためにC-x C-fのかわりに、M-x hexl-find-fileを使用します。このコマンドはファイル内容を16進に変換して、その変換結果を編集できるようにします。ファイルを保存するときは、自動的にバイナリーに変換されます。

既存のバッファーを16進(hex)に変換するために、M-x hexl-modeを使用することもできます。これは普通にファイルをvisitしてから、それがバイナリーファイルだと気づいた場合などに便利です。

Hexlモードでは、テキスト挿入は常に上書きとなります。これは、アクシデントによりファイル内データのアラインメントを破壊する危険を軽減します。通常のテキスト文字は、それらの文字自身をを挿入(それらの文字で上書き)します。文字コードにより特殊文字を挿入するコマンドあります。Hexlモードでは、ほとんどのカーソル移動キー、同様にC-x C-sは、同じ効果を生むコマンドにバインドされています。以下は、特にHexlモードで重要なその他コマンドです:

C-M-d

10進でタイプされたバイトコードを挿入します。

C-M-o

8進でタイプされたバイトコードを挿入します。

C-M-x

16進でタイプされたバイトコードを挿入します。

C-M-a

512バイトページの先頭に移動します。

C-M-e

512バイトページの最後に移動します。

C-x [

1Kバイトページの先頭に移動します。

C-x ]

1Kバイトページの最後に移動します。

M-g

16進で指定されたアドレスに移動します。

M-j

10進で指定されたアドレスに移動します。

C-c C-c

Hexlモードを抜けて、hexl-modeモードを呼び出す前の、このバッファーのメジャーモードに戻ります。

他のHexlコマンドには、バイナリーバイトの文字列(シーケンス)の挿入、shortint単位での移動などがあります。詳細については、C-h a hexl-RETとタイプしてください。

テキストファイルの編集にもHexlモードを使用できます。これはテキストファイルに通常はないような文字が含まれていたりエンコーディング(コーディングシステムを参照)が使用されている場合には便利かもしれません。この目的のためにHexlモードのバイト挿入コマンドはASCII文字、マルチバイト文字を含む非ASCII文字も挿入できます。Hexlモードでテキストファイルを編集するには通常どおりにファイルをvisitしてから、Hexlモードに切り替えるためにM-x hexl-mode RETとタイプします。これでテキスト文字をタイプすれば挿入できます。ただし無効なマルチバイトシーケンスの作成といy危険を避けるために、マルチバイト文字の挿入には特別な配慮が要求されます。そのような文字は、ファイル内のマルチバイトシーケンスの最初のバイトにポイントがあるときにタイプを開始する必要があります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

44 Emacsセッションの保存

Emacsの状態を1つのセッションから別のセッションのために保存するためには、desktopライブラリーを使用します。1度Emacsのデスクトップ(desktop) — バッファーと、それらのファイル名、メジャーモード、バッファーでの位置など — を保存すると、後のEmacsセッションで、保存されたデスクトップをリロードできます。デフォルトでは、デスクトップはフレームとウィンドウ設定も保存しようと試みます。これを無効にするには、desktop-restore-framesnilにセットします(この振る舞いを調整するためにマスタマイズできる関連オプションについては、変数のドキュメントを参照してください)。

デフォルトでは、リモートファイルをvisitしているバッファーに関する情報は保存されません。変数desktop-files-not-to-saveをカスタマイズして、これを変更することができます。

desktopがフレームとウィンドウの設定をリストアするときは、フレームパラメーターの記録された値を使用し、initファイル(Emacs初期化ファイルを参照)でそれらのパラメーターに何をセットしていても無視されます。これは、リストアされたフレームにたいするフォントやフェイスのようなフレームパラメーターは、前のEmacsセッションを終了したときに保存されたdesktopファイルから取得され、initファイルでのそれらのパラメーターにたいするセッティングは無視されることを意味します。これを無効にするには、リストアしたくないフレームパラメーターを除外するように、frameset-filter-alistの値をカスタマイズしてください。

コマンドM-x desktop-saveで、デスクトップを手動で保存できます。Emacs終了時のデスクトップの自動保存を有効にすることもできます。またEmacs開始時に最後に保存されたデスクトップを自動的に復元することもできます。将来のセッションのためには、Customizationバッファー(Easy Customizationインターフェースを参照してください)を使用して、desktop-save-modetにセットするか、initファイル(Emacs初期化ファイルを参照してください)に以下の行を追加します:

(desktop-save-mode 1)

initファイルでdesktop-save-modeをオンにした場合、Emacsはカレントディレクトリーで保存されたデスクトップを探します(より正確には、desktop-pathで指定されたディレクトリーを探して、最初に見つかったデスクトップを使用します)。したがって異なるディレクトリーに別のデスクトップを保存でき、開始ディレクトリーによりEmacsがリロードするデスクトップを決定できます。M-x desktop-change-dirとタイプすることにより、カレントデスクトップを保存して、他のディレクトリーに保存されたデスクトップをリロードできます。M-x desktop-revertとタイプすることにより、前にリロードされたデスクトップをリバートできます。

保存されたデスクトップをリロードしたくないときは、コマンドラインでオプション‘--no-desktop’を指定します。これはカレントセッションにたいして、desktop-save-modeをオフにします。‘--no-init-file’オプションを指定してEmacsを開始することにより、通常desktop-save-modeをオンにしているinitファイルをバイパスして、デスクトップのリロードを無効にすることもできます。

デフォルトでは、デスクトップのすべてのバッファーは1度に復元されます。しかし、デスクトップにたくさんのバッファーがあるときは遅くなるかもしれません。変数desktop-restore-eagerで、即座に復元するバッファーの最大数を指定できます。残りのバッファーはEmacsのアイドル時に、ゆっくり(lazily)と復元されます。

Emacsのデスクトップを空にするには、M-x desktop-clearとタイプします。これは内部バッファーを除いてすべてのバッファーをkillし、desktop-globals-to-clearにリストされたグローバル変数をクリアーします。特定のバッファーを残したい場合は、変数desktop-clear-preserve-buffers-regexpをカスタマイズします。この変数の値には、killしないバッファーの名前にマッチする正規表現を指定します。

あるセッションから別のセッションへ、ミニバッファーのヒストリーを保存したい場合は、savehistライブラリーを使用してください。

desktop-save-modeがオンの状態でEmacsが実行されているとき、デフォルトでは何らかの変更があった際は、常にデスクトップを自動保存します。変数desktop-auto-save-timeoutは、デスクトップ変更をEmacsがチェックする頻度を決定します。

Emacsがデスクトップを保存するファイルは、他のEmacsセッションによる不意の上書きを防ぐために、そのセッションの実行中はロックされます。このロックは、通常はEmacsのexit時に解除されますが、Emacsまたはシステムがクラッシュした場合、そのロックは残り、Emacsを再スタートする際に、デフォルトではロックされたデスクトップファイルのどちらを使用するか尋ねます。この質問は、変数desktop-load-locked-desktopnil(その場合はデスクトップをロードしない)、またはt(確認なしでデスクトップをロードする)のいずれかにカスタマイズすることにより、抑止することができます。

Emacsがデーモンモードで起動する際はユーザーに質問することができないので、ロックされたデスクトップが見つかった場合は、desktop-load-locked-desktopt以外であれば、それをロードしません。デーモンモードでのデスクトップのリストアは、その他の理由により問題になりがちなことに注意してください。たとえば、デーモンはGUI機能を使用できないので、フレーム位置やサイズ、装飾のようなパラメーターはリストアできません。この理由により、デスクトップのリストアを、server-after-make-frame-hookにフック関数desktop-readを追加して、それが呼び出されることにより、最初のクライアントが接続するまで、遅延させたいと思うかもしれません(Creating Frames in The Emacs Lisp Reference Manualを参照)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

45 再帰編集レベル

再帰編集(recursive edit)とは、あるEmacsコマンドの途中で、別のEmacsコマンドを使用して自由に編集を行なうような状況を指します。たとえばquery-replaceの途中でC-rをタイプすると、カレントバッファーを変更することができる再帰編集に入ります。再帰編集から抜けると、query-replaceに戻ります。問い合わせつき置換を参照してください。

再帰編集を抜ける(exit)とは、実行を継続中の、終了していないコマンドに戻ることを意味します。再帰編集を抜けるコマンドはC-M-c (exit-recursive-edit)です。

再帰編集を中断(abort)することもできます。これはexitと似ていますが、終了していないコマンドも即座に終了します。これを行なうには、コマンドC-] (abort-recursive-edit)を使用します。中止と中断を参照してください

モードラインで常にメジャーモードとマイナーモードの周りを囲む丸カッコ(parentheses)を、さらに角カッコ(square brackets)で囲んで表示することにより、再帰編集中であることが示されます。再帰編集は特定のウィンドウやバッファーにたいするものではなく、Emacs全体が再帰編集中であるため、すべてのウィンドウのモードラインは同じように表示されます。

再帰編集中に、さらに再帰編集に入ることも可能です。たとえばquery-replaceの途中でC-rとタイプした後、デバッガーに入るコマンドをタイプしたとします。これはC-rにたいする再帰編集レベルから、デバッガーにたいする再帰編集を開始します。モードラインには、現在進行中の再帰編集レベルが角カッコのペアで表示されます。

(デバッガーでのcコマンドのように)内側の再帰編集を抜けると、次に上のレベルのコマンドの実行が再開されます。コマンドが終了したら、他の再帰編集レベルに抜けるためにC-M-cを使用することができます。exitは最内レベルだけに適用されます。abortも1レベルの再帰編集だけを抜けて、前の再帰編集レベルのコマンドに即座に戻ります。もし望むなら次の再帰編集レベルもabortできます。

かわりにコマンドM-x top-levelは、すべてのレベルの再帰編集をabortして、即座にトップレベルのコマンドリーダーに戻ります。ミニバッファーがアクティブなときは、ミニバッファーも抜けます。

再帰編集の中で編集されるテキストは、トップレベルで編集しているテキストと同じである必要はありません。これは、何にたいしての再帰編集かに依存します。再帰編集を呼び出したコマンドが最初に別のバッファーを選択する場合、そのバッファーが再帰編集を行なうバッファーになります。どんな場合でも再帰編集中に、(バッファーを切り替えるキーがリバインドされていないかぎり)通常の方法でバッファーを切り替えることができます。再帰編集の中で、ファイルをvisitしたりその他のことを行ない、残りのすべての編集を行なうことも、おそらく可能です。しかしこれは、(スタックオーバーフローのような)驚くべき効果をもたらすことがあります。そのため必要なくなったときは、再帰編集をexitまたはabortすることを忘れないでください。

一般的に、わたしたちはGNU Emacsでは再帰編集レベルを最小限にしようと努めています。これは、特定の順 — 最内のレベルからトップレベルに向かって — で戻ることをあなたに強いるからです。可能な場合は、異なる作業には別のバッファーを供し、それらを切り替えられるようにします。いくつかのコマンドは、元のメジャーモードに戻るコマンドを提供する、新しいメジャーモードに切り替えます。これらの試みは、あなたの選択にしたがい、まだ終了していないタスクにもどる、柔軟性を与えます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

46 ハイパーリンクとWebナビゲーション機能

以下のサブセクションでは、URLや、Emacsバッファーのテキスト内にある他の種類のリンクを扱う便利な機能を説明します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

46.1 EWWによるウェブブラウズ

EWW(Emacs Web Wowser)は、Emacs用のウェブブラウザーのパッケージです。これはEmacsバッファーでURLブラウズすることを可能にします。コマンドM-x ewwにより、URLを開いたり、ウェブを検索します。コマンドM-x eww-open-fileを使用して、ファイルを開くことができます。browse-urlにたいするウェブブラウザーとして。EWWを使うことができます(URLのフォローを参照してください)。完全な詳細に付いては、EWW in The Emacs Web Wowser Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

46.2 埋め込みWebKitウィジェット

Emacsが適切なサポートパッケージとともにコンパイルされている場合、Emacsのバッファーにブラウザーウィジェット(browser widgets)を表示できます。コマンドM-x xwidget-webkit-browse-urlは、ブラウザーウィジェットに表示するURLを尋ねます。通常はポイント位置、またはポイント位置の前にあるURLがデフォルトのURLになります。しかしアクティブなリージョン(マークとリージョンを参照してください)がある場合は、余分な空白文字を削除してから、そのリージョンからデフォルトのURLを取得します。コマンドはその後、指定されたURLを表示するめ込みブラウザー(embedded browser)をもつ、新しいバッファーを作成します。このパッファーはXwidget-WebKitモード(Imageモードと似ています。see section イメージファイルのvisitを参照してください)で、ウィジェットのスクロール、サイズ変更、リロードを1-keyで行なうコマンドを提供します。キーバインドを確認するには、そのバッファーでC-h bとタイプしてください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

46.3 URLのフォロー

M-x browse-url RET url RET

ウェブブラウザーへのURLのロード。

Browse-URLパッケージは、Emacsで簡単にURLをフォロー(辿る)することを可能にします。ほとんどのURLは、ウェブブラウザーを呼び出すことによりフォローされます。‘mailto:’のURLは、指定されたアドレスにメールを送るために、Emacsコマンドのcompose-mailでフォローされます。

コマンドM-x browse-urlは、URLの入力を求め、それをフォローします。ポイントがURLのようなテキストの近くにある場合、そのURLがデフォルトとして提示されます。Browse-URLパッケージは、browse-url-at-pointbrowse-url-at-mouseのような、キーにバインドしたいと思うような、他のコマンドも提供します。

Customizeグループbrowse-urlの、さまざまなオプションを通じて、Browse-URLの振る舞いをカスタマイズできます。特にオプションbrowse-url-mailto-functionでは‘mailto:’のURLをフォローする方法の定義、browse-url-browser-functionでは別タイプのURLをフォローする方法を定義できます。詳細はC-h P browse-url RETとタイプしてパッケージのコメントを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

46.4 URLのアクティブ化

M-x goto-address-mode

カレントバッファーのURLとメールアドレスをアクティブにします。

M-x goto-address-modeとタイプすることにより、EmacsにカレントバッファーのURLを特別にマークさせることができます。このバッファーローカルなマイナーモードが有効な場合、バッファーのすべてのURLを探して、それらをハイライトするとともに、クリックできるボタンに変更します。そのようなテキストの上にポイントを移動してC-c RET (goto-address-at-point)とタイプするか、mouse-2をクリック、またはmouse-1を素早くクリックすることにより(マウスで参照をフォローするを参照してください)、そのURLをフォローできます。URLのフォローは、browse-urlをサブルーチンとして呼び出すことにより行なわれます(URLのフォローを参照してください)。

モードフックや受信メッセージを表示するフック(たとえばRmailのrmail-show-message-hook)にgoto-address-modeを追加するのは便利かもしれません。GnusやMH-Eには独自に類似の機能があるので必要ありません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

46.5 ポイント位置のファイルやURLを開く

FFAPパッケージは、C-x C-fのようなファイルを探すためのキーにバインドされているコマンドを、より直感的なデフォルトを提供するコマンドに置き換えます。これらのコマンドにプレフィクス引数を与えたときは、通常のコマンドと同様に振る舞います。それ以外の場合、ポイント周辺のテキストからデフォルトのファイル名を取得します。バッファーから見つかったのがファイル名ではなくURLの場合、このコマンドはそれを閲覧するためにbrowse-urlを使用します(URLのフォローを参照してください)。

この機能は、メールバッファーやニュースバッファー内の参照、READMEファイル、MANIFESTファイルなどをフォローするのに便利です。詳細については、C-h P ffap RETとタイプして、パッケージのコメントを参照してください。

FFAPを有効にするには、M-x ffap-bindingsとタイプします。これにより、以下のキーバインドが作成され、Rmail、Gnus、VMアーティクルバッファーでの、追加FFAP機能にたいするフックもインストールされます。

C-x C-f filename RET

filenameを検索します(find-file-at-point)。デフォルトのファイル名は、ポイント周辺のテキストから推測します。

C-x C-r filename RET

ffap-read-onlyfind-file-read-onlyに相当します。

C-x C-v filename RET

ffap-alternate-filefind-alternate-fileに相当します。

C-x d directory RET

ポイント位置のディレクトリーをデフォルトとして、directoryでDiredを開始します(dired-at-point)。

C-x C-d directory RET

ffap-list-directorylist-directoryに相当します。

C-x 4 f filename RET

ffap-other-windowfind-file-other-windowに相当します。

C-x 4 r filename RET

ffap-read-only-other-windowfind-file-read-only-other-windowに相当します。

C-x 4 d directory RET

ffap-dired-other-windowdired-other-windowと同様です。

C-x 5 f filename RET

ffap-other-framefind-file-other-frameに相当します。

C-x 5 r filename RET

ffap-read-only-other-framefind-file-read-only-other-frameに相当します。

C-x 5 d directory RET

ffap-dired-other-framedired-other-frameに相当します。

M-x ffap-next

バッファーから次のファイル名またはURLを検索して、そのファイルまたはURLを開きます。

S-mouse-3

ffap-at-mouseは、マウスがクリックされた周辺のテキストから推測されたファイルを開きます。

C-S-mouse-3

カレントバッファーに記述されたファイルとURLのメニューを表示して、選択されたものを開きます(ffap-menu)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

47 ゲーム、その他の娯楽

animateパッケージは、テキストをダンスさせます(たとえばM-x animate-birthday-present)。

M-x blackboxM-x mpuzM-x 5x5はパズルです。blackboxはボックス内のボールの位置を、トモグラフィー(断層撮影)により当てるパズルです。mpuzは掛け算パズルを表示します。掛け算の中の英字が何の数字かを当てなければなりません。数字を入力するには、英字をタイプしてから、その数字をタイプします。5x5の目標は、すべてのマスを埋めることです。

M-x bubblesは、より少ない回数の移動で、多くのbubble(シャボン玉)を取り除くゲームです。

M-x decipherは、単純なアルファベット置換で暗号化されたバッファーを解読するのに役立ちます。

M-x dissociated-pressは、Emacsのカレントバッファーのテキストをスクランブルします。スクランブルは単語単位または文字単位で行なわれ、*Dissociation*という名前のバッファーに出力されます。正の引数は文字単位での操作を指定し、数にはオーバーラップする文字数を指定します。負の引数は単語単位での操作を指定し、数にはオーバーラップする単語数を指定します。Dissociated Pressはマルコフ連鎖と酷似した結果を生成しますが、それとは独自のigオリジナルな創案です。手法としては、単語または文字の後ろにランダムにジャンプするマルコフ連鎖とは異なり、ランダムなジャンプの間にあるサンプルから、連続する複数の文字をコピーします。ユーザーに受け入れられ、正確でありたいなら、ドキュメントにはdissociwordsを使用しないでください。

M-x dunnetは、テキストベースのアドベンチャーゲームを開始します。

個人的な満足感を得たいなら、M-x gomokuに挑戦してみてください。これはあなたと五目並べゲームを対戦します。

少し退屈していたらM-x hanoiに挑戦してみてください。かなり退屈しているなら、数引数を指定します。とてもとても退屈なら、引数9に挑戦してみましょう。さあ、座って眺めましょう。

M-x lifeは、ConwayのLife cellular automatonを実行します。

M-x morse-regionは、リージョンのテキストをモールス信号に変換し、M-x unmorse-regionで元に戻します。M-x nato-regionは、リージョンのテキストをNATO発音記号(NATO phonetic alphabet)に変換し、M-x denato-regionで元に戻します。

M-x pongM-x snakeM-x tetrisは、有名なPong、Snake、Tetrisの実装です。

M-x solitaireはソリティアーゲームをプレーします。これはピンを他のピンを超えてジャンプさせるゲームです。

M-x zoneは、Emacsがアイドル時にプレーするゲームです。

円盤状記憶媒体のビットのフリップにbutterflies(蝶々)を使用する“真のプログラマー”は、M-x butterflyをデプロイします。https://xkcd.com/378を参照してください。

最後に、もし不満を感じているときは、有名な精神分析医のElizaに問題の説明を試みてください。これはM-x doctorとタイプするだけです。各入力の最後には、RETを2回タイプしてください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

48 Emacs Lispパッケージ

EmacsはEmacs Lispライブラリーであるパッケージ(packages)で追加機能を実装することにより拡張可能です。これらは自分で記述することも、他の人が提供することもあります。そのようなパッケージを将来のEmacsセッションで利用できるようにインストールしたい場合には、それらをコンパイルしてEmacsがLispライブラリーを探すディレクトリーに配置する必要があります。手動によるインストール手法の詳細はEmacsのためのLispコードによるライブラリーを参照してください。多くのパッケージにはLispファイルの先頭付近にインストールと使用方法の手順が大きくコメントされています。パッケージのインストールと使用方法の微調整にこれらの手順を使用できます。

パッケージは巨大なEmacs Lispパッケージのコレクションであるパッケージアーカイブ(package archives)から提供されることもあります。それぞれのパッケージは個別のEmacs Lispプログラムと、Infoマニュアルのような別のコンポーネントを含むこともあります。Emacsにはそのようなアーカイブから簡単にパッケージをダウンロードしてインストールする機能が含まれています。このチャプターの残りの部分ではその機能について説明します。

パッケージアーカイブからのインストールで利用可能なパッケージをリストするにはM-x list-packages RETとタイプします。M-x list-packagesにより、すべてのパッケージのリストを含む、*Packages*という名前のバッファーが表示されます。このバッファーを通じてパッケージをインストールしたりアンインストールできます。Package Menuバッファーを参照してください。

コマンドC-h P (describe-package)はパッケージ名の入力を求め、そのパッケージの属性や、実装する機能を説明するヘルプバッファーを表示します。

デフォルトでは、Emacsはemacs開発者により保守されGNUプロジェクトによりホスティングされるパッケージアーカイブからパッケージをダウンロードします。オプションでサードパーティーにより保守されるアーカイブから、パッケージをダウンロードすることもできます。パッケージのインストールを参照してください。

Emacs Lispのプログラムをインストール可能なパッケージに変更する情報に関しては、Packaging in The Emacs Lisp Reference Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

48.1 Package Menuバッファー

コマンドM-x list-packagesは、パッケージメニュー(package menu)を立ち上げます。これはEmacsが把握するすべてのパッケージをリストするバッファーです。リストの各行には以下の情報が表示されます:

list-packagesは、パッケージアーカイブサーバーから利用可能なパッケージのリストを取得するために、ネットワークにアクセスします。ネットワークが利用できない場合、一番最近取得したリストにフォールバックします。

パッケージメニューでは、以下のコマンドが利用可能です:

h

パッケージメニューの使い方を要約した短いメッセージを表示します(package-menu-quick-help)。

?
RET

カレント行のパッケージにたいして、C-h Pコマンド(Emacs Lispパッケージを参照してください)により表示されるヘルプウィンドウと同様の、ヘルプバッファーを表示します(package-menu-describe-package)。

i

カレント行のパッケージをインストールのためにマークします(package-menu-mark-install)。パッケージのステータスが‘available’の場合、行の先頭に文字‘I’を追加します。xとタイプすると、パッケージをダウンロードしてインストールします(以下参照)。

d

カレント行のパッケージを削除のためにマークします(package-menu-mark-delete)。パッケージのステータスが‘installed’の場合、行の先頭に文字‘D’を追加します。xとタイプすると、パッケージを削除します(以下参照)。パッケージ削除の結果、何が起こるかについての情報は、パッケージのファイルとディレクトリーを参照してください。

~

削除のためにすべての時代遅れのパッケージobsolete packagesをマークします(package-menu-mark-obsolete-for-deletion)。これは状態が‘obsolete’の、すべてのパッケージを削除のためにマークします。

u
DEL

idコマンドによりカレント行に追加された、以前のインストールや削除マークを外します(package-menu-mark-unmark)。

U

新たに利用可能になったすべてのパッケージを、更新のためにマークします(package-menu-mark-upgrades)。これは新たに利用可能になったバージョンにインストールのマークをつけ、インストール済みの古いバージョン(‘obsolete’のテータスにマークされている)に削除のマークをつけます。

x

iでマークされたすべてのパッケージをダウンロードしてインストールするとともに、dでマークされたすべてのパッケージを削除します(package-menu-execute)。これによりマークは削除されます。

g
r

パッケージリストを更新します(revert-buffer)。これは再度パッケージアーカイブから利用可能なパッケージのリストを取得してパッケージリストを再表示します。

/ k

パッケージリストをキーワードでフィルターします(package-menu-filter-by-keyword)。これはキーワード(例: ‘games’)の入力を求めてキーワードに関係のあるパッケージだけを表示します。

/ n

名前によりパッケージリストをフィルターします(package-menu-filter-by-name)。これは文字列の入力を求めて、そのregexp値にマッチする名前のパッケージだけを表示します。

/ /

カレントで適用されたパッケージリストのフィルターをクリアします(package-menu-clear-filter)。

H

名前がregexpにマッチするパッケージを非表示にします(package-menu-hide-package)。これはregexpの入力を求めて名前がマッチするパッケージを非表示にします。regexpのデフォルト値はポイント位置の名前のパッケージだけを非表示にするので、プロンプトで単にRETを押下するとカレントパッケージだけを非表示にします。

(

古いバージョンのパッケージ、および優先度低のアーカイブから取得したバージョンの可視性を切り替えます(package-menu-toggle-hiding)。

たとえばパッケージをインストールするには、そのパッケージの行でiをタイプしてから、xをタイプします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

48.2 パッケージのステータス

パッケージは以下のステータスのいずれかを保有できます:

available

パッケージは未インストールだがパッケージアーカイブからのダウンロードとインストールが可能。

avail-obso

インストールするためにパッケージは利用可能だが新たなバージョンも利用可能。このステータスのパッケージはデフォルトでは非表示。

built-in

パッケージはデフォルトでEmacsに同梱されている。これはパッケージメニューからは削除できずアップグレード対象とはみなされない。

dependency

別パッケージの依存関係を満足するために自動的にインストールされたパッケージ。

disabled

パッケージはpackage-load-list変数を使用して無効化された。

external

このパッケージはbuilt-inではなく、package-user-dirで指定されたディレクトリーのものではない(パッケージのファイルとディレクトリーを参照)。外部パッケージは‘built-in’と同様に扱われて削除できない。

held

パッケージはheld(固定)されている。パッケージのインストールを参照のこと。

incompat

何らかの理由(たとえばインストール不可能なパッケージに依存)によりパッケージはインストール不能。

installed

パッケージはインストール済み。

new

available’と等価だが最後にM-x list-packagesを呼び出した後にパッケージがパッケージアーカイブで新たに利用可能になった点が異なる。

obsolete

パッケージはインストール済みの古いバージョン。パッケージの当該バージョンに加えて、新たなバージョンもインストール済み。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

48.3 パッケージのインストール

パッケージを一番便利にインストールするのはパッケージメニューを使う方法(Package Menuバッファーを参照してください)ですが、コマンドM-x package-installを使用することもできます。これはステータスが‘available’のパッケージ名の入力を求め、それをダウンロードしてインストールします。

他のパッケージが提供する機能に依存するために、それらのパッケージがインストール済みであることを必要(require)とするパッケージもあるでしょう。Emacsがそのようなパッケージをインストールするときは、必要なパッケージがインストールされていなければ、それらのパッケージのダウンロードとインストールも自動に行ないます(必要なパッケージが何らかの理由で利用できない場合、Emacsはエラーをシグナルしてインストールを中止します)。パッケージの必要条件リスト(requirements list)は、そのパッケージのヘルプバッファーに表示されます。

デフォルトでは、パッケージはEmacs開発者により保守される単一のパッケージアーカイブからダウンロードされます。これは変数package-archivesにより制御されます。この変数の値は、Emacsが認識するパッケージアーカイブのリストです。リストの各要素は(id . location)という形式でなければなりません。ここで、idはパッケージアーカイブの名前、locationはパッケージアーカイブディレクトリーのURLか名前です。サードパーティーのアーカイブを使用したい場合はこのリストを変更できます — が、自己責任で行い、信用できるサードパーティーだけを使用してください!

パッケージアーカイブのメンテナーは、パッケージにサイン(signing)を付して、信頼度を増すことができます。これらはプライベートとパブリックのペアーからなる暗号化キーにより生成されます。プライベートキーは各パッケージにたいする署名ファイル(signature file)を作成するのに使用されます。パブリックキーにより、署名ファイルを使用してそのパッケージ作成者と、それが改ざんされていないかを確認できます。署名の検証は、EasyPGインターフェイス(EasyPG in Emacs EasyPG Assistant Manualを参照)を通じてthe GnuPG packageを使用します(EasyPG in Emacs EasyPG Assistant Manualを参照)。有効な署名であっても、それが悪意がないパッケージであることを厳正に保証する訳ではなく、用心するべきです。パッケージアーカイブは、パブリックキーの入手方法について、説明を提供するべきです。http://pgp.mit.edu/のようなサーバーからキーをダウンロードするのも1つの方法です。Emacsにキーをインポートするには、M-x package-import-keyringを使用します。Emacsは変数package-user-dirで指定されるディレクトリー(デフォルトはpackage-gnupghome-dirのサブディレクトリーgnupg)にパッケージキーを格納します。これにより、Emacsが署名を検証する際に、オプションgnupgでGnuPGを呼び出すようになります。package-gnupghome-dirnil,の場合は、GnuPGのオプション‘--homedir’は省略します。GNUパッケージアーカイブにたいするパブリックキーはEmacsと共に配布され、etc/package-keyring.gpgにあります。Emacsはこれを自動的に使用します。

ユーザーオプションpackage-check-signatureが非nilの場合、Emacsはパッケージのインストール時に署名の検証を試みます。このオプションが値allow-unsignedをもち、使用可能なOpenPGP設定が見つかったらサインされたパッケージはチェックされますが、未サインのパッケージもまだインストールができます。パッケージにサインしないアーカイブを使用する場合には、それらをpackage-unsigned-archivesに追加できます(値がallow-unsignedで使用可能なOpenPGPが見つからなければこのオプションはあたかも値がnilであるかのように扱われる)。値がtなら少なくとも1つの署名が有効でなければならず、allならすべての署名が有効でなければなりません。

暗号化キーとサインについての詳細は、GnuPG in The GNU Privacy Guard Manualを参照してください。EmacsのGNU Privacy Guardにたいするインターフェースについては、EasyPG in Emacs EasyPG Assistant Manualを参照してください。

複数のパッケージアーカイブが有効で、同じパッケージにたいして異なるバージョンを提供する場合は、オプションpackage-pinned-packagesが便利かもしれません。指定したパッケージが指定されたアーカイブだけからダウンロードされるように、このリストにパッケージとアーカイブのペアーを追加できます。

複数の有効なパッケージアーカイブがあるときに便利な他のオプションとして、package-archive-prioritiesがあります。これは各アーカイブにたいして、優先度(高い数字は高い優先度のアーカイブを指定します)を指定します。このオプションにより指定されない限り、アーカイブの優先度はデフォルトの0です。優先度高のアーカイブのパッケージが利用可能な場合、優先度低のアーカイブのパッケージはメニューに表示されません(これはpackage-menu-hide-low-priorityの値により制御されます)。

一度パッケージをダウンロードしてインストールすると、そのパッケージはカレントEmacsセッションで利用可能になります。 パッケージを利用可能にするにはパッケージのディレクトリーをload-pathに追加してパッケージのautoloadをロードします。パッケージのautoloadの効果はパッケージごとにさまざまです。ほとんどのパッケージは、いくつかの新たなコマンドを利用可能にするだけですが、Emacsセッションにたいして広範な影響を及ぼすものもあります。この種の情報についてはパッケージのヘルプバッファーを参照してください。

パッケージをインストール後にはその後のすべてのEmacsセッションで自動的にロードされます。これはEmacs開始時のinitファイル処理前、早期initファイル(早期初期化ファイルを参照)の処理後に行なわれます。例外として‘-q’か‘--no-init-file’オプション(初期化オプションを参照してください)で呼び出されたときは、Emacs開始時にパッケージを利用可能にしません。

スタートアップ時にEmacsが自動的にパッケージを利用可能しないようにするためには変数package-enable-at-startupnilに変更してください。この変数は正規のinitファイル(regular init file)のロード前に読み込まれるので早期initファイル(early init file)で行うようにしてください。現在のところこの変数はCustomizeを通じてセットできません。

package-enable-at-startupnilにセットしてもスタートアップ中およびスタートアップじにパッケージを利用可能にすることはできます。インストール済みパッケージをスタートアップ中に利用可能にするにはinitファイル内で関数package-activate-allを呼び出し手ください。スタートアップ後に利用可能にするにはコマンドM-: (package-activate-all) RETを呼び出してください。

スタートアップ時に利用可能になるようにパッケージのロードをより精密に制御するために、変数package-load-listを使用することができます。この変数の値にはリストを指定します。(name version)という形式のリスト要素は、nameという名前のパッケージのバージョンversionを利用可能にするように指示します。ここでversionには、(そのパッケージの特定のバージョンに対応する)バージョン文字列、t (任意のインストール済みのバージョンを意味する)、またはnil (バージョンを意味しない。パッケージを利用可能にすることを抑止してパッケージを無効にする)を指定します。リストの要素にはシンボルallも指定でき、これは他のリスト要素で名前指定されていない任意のパッケージのインストール済みバージョンを利用可能にすることを意味します。デフォルト値は単に'(all)となっています。

たとえばpackage-load-list'((muse "3.20") all)にセットするとEmacsは‘muse’のバージョン3.20のみ、および‘muse’以外のパッケージのインストール済みの任意のバージョンをロードします。‘muse’の他のバージョンがインストールされていたとしてもそれらは無視されます。‘muse’パッケージは‘held’というステータスでパッケージメニューにリストされるはずです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

48.4 パッケージのファイルとディレクトリー

各パッケージはパッケージアーカイブから単一ファイル形式 --- 1つのEmacs Lispソースファイル、または複数のEmacs Lispソースと他のファイルを含むtarファイル — でダウンロードされます。パッケージファイルは、パッケージをインストールするEmacsコマンドにより自動的に取得、処理、配置されます。パッケージを作成する(Packaging in The Emacs Lisp Reference Manualを参照してください)のでない限り、通常これらを直接扱う必要はないでしょう。パッケージファイルから直接パッケージをインストールする必要があるときは、コマンドM-x package-install-fileを使用してください。

1度インストールされると、パッケージの内容はそのサブディレクトリーに配置されます(変数package-user-dirを変更することにより、ディレクトリーの名前を変更できます)。パッケージのサブディレクトリーはname-versionという名前で、nameはパッケージ名、versionはバージョン文字列です。

package-user-dirに加えて、Emacsはpackage-directory-listにリストされたディレクトリーからインストール済みパッケージを探します。これらのディレクトリーはシステム管理者のためのディレクトリーで、Emacsパッケージをシステムワイドに利用可能にするためのものです。Emacs自身がこれらのディレクトリーにパッケージをインストールすることはありません。package-directory-listにたいするパッケージのサブディレクトリーは、package-user-dirと同じ方法で配置されます。

パッケージの削除(Package Menuバッファーを参照してください)は、対応するパッケージのサブディレクトリーを削除します。これはpackage-user-dirにインストールされたパッケージだけに機能します。システムワイドなパッケージディレクトリーにたいして呼び出された場合、削除コマンドはエラーをシグナルします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49 カスタマイズ

このチャプターでは、Emacsの振る舞いをカスタマイズするシンプルな方法をいくつか説明します。

ここで説明する方法とは別に、EmacsをカスタマイズするためにX resourcesを使用する情報についてはXのオプションとリソース、キーボードマクロの記録と再生についてはキーボードマクロを参照してください。より広範で制限のない変更を行なうには、Emacs Lispコードを記述する必要があります。 Emacs Lisp in The Emacs Lisp Reference Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.1 Easy Customizationインターフェース

Emacsには変更できる多くのセッティング(settings)があります。ほとんどのセッティングはカスタマイズ可能な変数(customizable variables。変数を参照してください)で、これらはユーザーオプション(user options)とも呼ばれます。非常にたくさんのカスタマイズ可能な変数があり、それらはEmacsの振る舞いを数々の側面から制御します。このマニュアルにドキュメントされている変数は、Variable Indexにリストされています。セッティングの別のクラスにはフェイス(faces)があり、これはフォント、カラー、その他のテキスト属性を決定します(テキストのフェイスを参照してください)。

セッティング(変数およびフェイスの両方)を閲覧したり変更するには、M-x customizeとタイプします。これは論理的に組織化されたセッティングのリストの操作、値の編集とセット、永続的な保存を行なうことができる、カスタマイズバッファー(customization buffer)を作成します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.1.1 カスタマイズグループ

カスタマイズセッティングは、カスタマイズグループ(customization groups)に組織化されています。これらのグループはより大きなグループに集められ、最終的にEmacsと呼ばれるマスターグループに集約されます。

M-x customizeは、トップレベルのEmacsグループを表示するカスタマイズバッファーを作成します。これは、部分的には以下のようなものです:

For help using this buffer, see [Easy Customization] in the [Emacs manual].

________________________________________ [ Search ]

 Operate on all settings in this buffer:
 [ Revert... ] [ Apply ] [ Apply and Save ]


Emacs group: Customization of the One True Editor.
      [State]: visible group members are all at standard values.
      See also [Manual].

[Editing]      Basic text editing facilities.
[Convenience]  Convenience features for faster editing.

...more second-level groups...

このバッファーも表示されている主要な部分は‘Emacs’カスタマイズグループで、これはいくつかの他のグループ(‘Editing’、‘Convenience’など)を含みます。これらのグループの内容はここではリストされず、それぞれにたいして1行のドキュメントだけが表示されています。

グループのstate(ステート、状態)には、そのグループ内のセッティングが、編集されているか(edited)、セットされているか(set)、保存されているか(saved)が示されます。変数の変更を参照してください。

カスタマイズバッファーのほとんどは読み取り専用ですが、編集できるいくつかの編集可能フィールド(editable fields)が含まれています。たとえばカスタマイズバッファーの最上部にある編集可能フィールドは、セッティングを検索するためのものです(セッティングのブラウズと検索を参照してください)。マウスでクリック、またはポイントをそこに移動してRETをタイプすることによりアクティブにできる、ボタン(buttons)リンク(links)もあります。たとえば‘[Editing]’のようなグループ名はリンクで、これらのリンクをアクティブにすることにより、そのグループにたいするカスタマイズバッファーが立ち上がります。

カスタマイズバッファーでは、TAB (widget-forward)とタイプすると、次のボタンまたは編集可能フィールドに前方へ移動します。S-TAB (widget-backward)は、前のボタンまたは編集可能フィールドに後方へ移動します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.1.2 セッティングのブラウズと検索

M-x customizeにより作成されたトップレベルのカスタマイズバッファーから、カスタマイズグループ‘Emacs’のサブグループへのリンクをフォローできます。これらのサブグループは、カスタマイズするためのセッティングを含んでいるでしょう。また、これらのサブグループには、Emacsのより特化したサブシステムを扱うサブグループが、さらに含まれているかもしれません。カスタマイズグループの階層を移動していけば、カスタマイズしたい、いくつかのセッティングが見つかるでしょう。

特定のセッティングまたはカスタマイズグループのカスタマイズに興味がある場合は、コマンドM-x customize-optionM-x customize-faceM-x customize-groupで直接移動することもできます。特定のアイテムのカスタマイズを参照してください。

どのグループまたはセッティングをカスタマイズしたいか確信がもてない場合、各カスタマイズバッファーの上部にある、編集可能なサーチフィールドを使用して、それらを検索できます。このフィールドで検索条件 — 1つの単語またはスペースで区切られた複数の単語、または正規表現(正規表現の構文を参照してください) — をタイプできます。それからそのフィールドでRETをタイプするか、となりの‘Search’ボタンをアクティブにすることにより、その条件にマッチするグループとセッティングを含むカスタマイズバッファーに切り替わります。しかし、この機能はカレントEmacsセッションにロードされたグループ、またはセッティングだけを探すことに注意してください。

カスタマイズバッファーにサーチフィールドを表示したくない場合は、変数custom-search-fieldnilに変更してください。

コマンドM-x customize-aproposは、同じようにサーチフィールドを使用しますが、これはミニバッファーを使用して検索条件を読み取ります。特定のアイテムのカスタマイズを参照してください。

M-x customize-browseは、利用可能なセッティングをブラウズする別の方法です。このコマンドは、グループまたはセッティングの名前だけを、構造化されたレイアウトで表示する、特別なカスタマイズバッファーを作成します。グループ名のとなりの‘[+]’ボタンを呼び出すことにより、同じバッファーでグループの内容を表示できます。グループの内容が表示されている場合、ボタンは‘[-]’に変化し、それを呼び出すことにより、再びグループ内容を隠すことができます。このバッファーのグループまたはセッティングには、それぞれ‘[Group]’、‘[Option]’、‘[Face]’というリンクがあります。このリンクを呼び出すことにより、そのグループ、オプション、フェイスだけを表示する、通常のカスタマイズバッファーが作成されます。M-x customize-browseでは、この方法によりセッティングを変更します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.1.3 変数の変更

以下は変数またはユーザーオプションが、カスタマイズバッファーではどのように表示されるかの例です:

[Hide] Kill Ring Max: 60
   [State]: STANDARD.
   Maximum length of kill ring before oldest elements are thrown away.

最初の行には、この変数の名前がkill-ring-maxであることが、見やすいよう‘Kill Ring Max’のようにフォーマットされてに表示されています。この変数の値は‘60’です。‘[Hide]’というラベルのボタンは、アクティブにした場合は、この変数の値とステートを隠します。これは、変数がもし非常に長い値をもつ場合、カスタマイズバッファーが見にくくなるのを避けるために便利です(この理由により、非常に長い値をもつ変数は、最初は隠されています)。‘[Hide]’ボタンを使用すると、ボタンは‘[Show Value]’に変化し、これをアクティブにすると値とステートが表示されます。グラフィカルなディスプレーでは、‘[Hide]’と‘[Show Value]’ボタンは、下向きまたは右向きのグラフィカルな三角形で置き換えられます。

変数名の次の行は、変数のカスタマイズ状態(customization state)を示します。この例では‘STANDARD’で、これは変数を変更していないので、値はデフォルトのままだということを意味します。‘[State]’ボタンは、変数をカスタマイズするためのオペレーションメニューを提供します。

カスタマイズのステートの下は、変数のドキュメントです。これはC-h vコマンド(変数の確認とセットを参照してください)で表示されるのと同じドキュメントです。ドキュメントが複数行の場合、1行だけが表示されます。この場合、その行の最後に‘[More]’ボタンが表示されるので、これをアクティブにすれば完全なドキュメントを表示できます。

Kill Ring Max’に新しい値を入力するには、値にポイントを移動してそれを編集するだけです。たとえばM-dとタイプして‘60’を削除して、別の値をタイプします。テキストの変更を開始すると、‘[State]’行が変化します:

[State]: EDITED, shown value does not take effect until you
         set or save it.

値を編集してもすぐに変更は反映されません。変更を反映するには、‘[State]’をアクティブにして、‘Set for Current Session’を選択することにより、変数をセット(set)しなければなりません。すると変数のステートは以下のようになります:

[State]: SET for current session only.

無効な値を指定してしまうことを心配する必要はありません。‘Set for Current Session’オペレーションは正当性をチェックして、不当な値はインストールしません。

ファイル名、ディレクトリー名、Emacsコマンドのようなタイプの値を編集するときは、C-M-i (widget-complete)、または等価なキーM-TABESC TABで補完を行なうことができます。これはミニバッファーでの補完と同じように振る舞います(補完を参照してください)。

編集可能な値フィールドでRETとタイプすることにより、TABのように、次のフィールドまたはボタンに移動できます。したがってフィールドの編集を終えたらRETとタイプして、次のボタンまたはフィールドに移動できます。編集可能なフィールドに改行を挿入するには、C-oまたはC-q C-jを使用します。

あらかじめ決められた値しかセットできず、値を直接編集することができない変数もいくつかあります。そのような変数の値の前には、かわりに‘[Value Menu]’ボタンが表示されます。このボタンをアクティブにすると、値の選択肢が表示されます。“onかoff”のブーリーン値にたいしては、‘[Toggle]’ボタンが表示され、このボタンにより値のオンとオフを切り替えることができます。‘[Value Menu]’ボタンや‘[Toggle]’ボタンを使用した後は、変数をセットして、選択した値を反映するために、再度値をセットしなければなりません。

複雑な構造の値をもつ変数もいくつか存在します。たとえば、minibuffer-frame-alistの値は連想配列(association list、alist)です。これはカスタマイズバッファーでは、以下のように表示されます:

[Hide] Minibuffer Frame Alist:
[INS] [DEL] Parameter: width
            Value: 80
[INS] [DEL] Parameter: height
            Value: 2
[INS]
   [ State ]: STANDARD.
   Alist of parameters for the initial minibuffer frame. [Hide]
   […more lines of documentation…]

この場合、リストの各association要素は2つのアイテムからなり、1つは‘Parameter’というラベルがつき、もう1つは‘Value’というラベルがつき、両方とも編集可能フィールドです。となりにある‘[DEL]’ボタンでリストからassociationを削除できます。associationを追加するには、挿入したい位置の‘[INS]’ボタンを使用します。一番最後の‘[INS]’ボタンはリストの最後に挿入します。

変数をセットした場合、新しい値はカレントEmacsセッションでだけ効果があります。将来のセッションのために値を保存(save)するには、‘[State]’ボタンを使用して、‘Save for Future Sessions’オペレーションを選択します。カスタマイズの保存を参照してください。

[State]’ボタンを使用して‘Erase Customization’オペレーションを選択することにより、変数の値をその変数の標準値に復元することもできます。実際には4つのリセットオペレーションがあります:

Undo Edits

値を変更したが、まだ変数をセットしていない場合は、実際の値にマッチするようにバッファーのテキストを復元します。

Revert This Session's Customizations

これは、変更された変数がある場合は、変数の値を最後に保存された値に復元し、それ以外は標準の値に復元します。テキストも復元された変数に合わせて更新します。

Erase Customization

これは変数をその変数の標準値にセットします。保存した値も削除します。

Set to Backup Value

これはこのセッションでカスタマイズバッファーでセットされる前の値に、変数をリセットします。変数をカスタマイズしてからリセットすると、これはカスタマイズした値を破棄するので、このオペレーションにより、破棄した値に戻すことができます。

特定のカスタマイズにたいして、コメントを記録できれば便利なこともあります。コメントを入力するフィールドを作成するには、‘[State]’メニューの‘Add Comment’アイテムを使用します。

カスタマイズバッファーの上部には2行のボタン行があります:

 Operate on all settings in this buffer:
 [Revert...] [Apply] [Apply and Save]

[Revert...]’ボタンは、上述で説明したうち、最初の3つのリセット操作をドロップダウンします。‘[Apply]’ボタンは、カレントセッションにセッティングを適用します。‘[Apply and Save]’ボタンはセッティングを適用して、将来のセッションのためにそれらのセッティングを保存します。このボタンは、Emacsが-qまたは-Qのオプションで開始された場合は表示されません(初期化オプションを参照)。

コマンドC-c C-c (Custom-set)は、‘[Set for Current Session]’ボタンを使用するのと等価です。コマンドC-x C-s (Custom-save)は、‘[Save for Future Sessions]’ボタンを使用するのと同様です。

[Exit]’ボタンはカスタマイズバッファーを、バッファーリストの最後のバッファーに隠し(bury)ます。カスタマイズバッファーをkillさせるようにするには、変数custom-buffer-done-killtに変更します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.1.4 カスタマイズの保存

カスタマイズバッファーでは、カスタマイズしたセッティングの‘[State]’ボタンで‘Save for Future Sessions’を選択することにより、それを保存(save)できます。C-x C-s (Custom-save)コマンド、またはカスタマイズバッファーのトップにある‘[Apply and Save]’ボタンで、そのバッファー内で適用可能なすべてのセッティングが保存されます。

ファイル(通常は初期化ファイル。Emacs初期化ファイルを参照してください)にコードを書き込むことにより保存は機能します。将来のEmacsセッションは、開始時に自動的にこのファイルを読み込んで、カスタマイズを再びセットします。

初期化ファイル以外の他のファイルにカスタマイズを保存する選択もできます。これが機能するには、変数custom-fileに保存したいファイル名をセットして、そのファイルをロードするコード行を追加しなければなりません。たとえば:

(setq custom-file "~/.config/emacs-custom.el")
(load custom-file)

以下のようにして、Emacsのバージョンごとに違うカスタマイズファイルを指定することさえ可能です:

(cond ((< emacs-major-version 22)
       ;; Emacs 21用カスタマイズ
       (setq custom-file "~/.config/custom-21.el"))
      ((and (= emacs-major-version 22)
            (< emacs-minor-version 3))
       ;; Emacs 22、バージョン22.3以前のためのカスタマイズ
       (setq custom-file "~/.config/custom-22.el"))
      (t
       ;; Emacs バージョン22.3以降
       (setq custom-file "~/.config/emacs-custom.el")))

(load custom-file)

Emacsが-qまたは--no-init-fileオプションで呼び出されたときは、カスタマイズを初期化ファイルに保存しません。なぜならそのようなセッションからカスタマイズを保存することにより、初期化ファイルに記述されていた他のすべてのカスタマイズが消されてしまうからです。

将来のセッションのために保存することを選択しなかった場合、そのカスタマイズはEmacsの終了とともに失われてしまうことに注意してください。終了時に保存されていないカスタマイズにたいするメッセージを表示させたい場合は、初期化ファイルに以下を追加してください:

(add-hook 'kill-emacs-query-functions
          'custom-prompt-customize-unsaved-options)

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.1.5 フェイスのカスタマイズ

フェイス(テキストのフェイスを参照してください)をカスタマイズできます。フェイスは、異なる種類のテキストをEmacsがどのように表示するか決定します。カスタマイズグループは、変数とフェイスの両方を含むことができます。

たとえばプログラミング言語のモードでは、ソースコードのコメントはフェイスfont-lock-comment-faceで表示されます(Font Lockモードを参照してください)。カスタマイズバッファーでは、‘[Show All Attributes]’リンクをクリックした後は、このフェイスについて以下のように表示されます:

[Hide] Font Lock Comment Face:[sample]
   [State] : STANDARD.
   Font Lock mode face used to highlight comments.
   [ ] Font Family: --
   [ ] Font Foundry: --
   [ ] Width: --
   [ ] Height: --
   [ ] Weight: --
   [ ] Slant: --
   [ ] Underline: --
   [ ] Overline: --
   [ ] Strike-through: --
   [ ] Box around text: --
   [ ] Inverse-video: --
   [X] Foreground: Firebrick     [Choose]  (sample)
   [ ] Background: --
   [ ] Stipple: --
   [ ] Inherit: --
   [Hide Unused Attributes]

最初の3行にはフェイス名、‘[State]’ボタン、そのフェイスにたいするドキュメントが表示されます。その下は、フェイス属性(face attributes)のリストです。それぞれの属性の前にはチェックボックスがあります。チェックされているチェックボックスは‘[X]’と表示され、このフェイスがその属性に値を指定していることを意味します。空のチェックボックスは‘[ ]’と表示され、このフェイスがその属性に特に値を指定していないことを意味します。チェックボックスをアクティブにすることにより、その属性を指定または未指定にできます。

フェイスにすべての属性を指定する必要はありません。実際のところ、ほとんどのフェイスは少しの属性しか指定していません。上記の例では、font-lock-comment-faceはフォアグラウンドカラーだけを指定しています。未指定の属性にたいしては、すべての属性が指定された特別なフェイスdefaultの属性が使用されます。defaultフェイスは、明示的にフェイスが割り当てられていない任意のテキストを表示するために使用されるフェイスです。さらに、このフェイスのバックグラウンドカラー属性には、フレームのバックグラウンドカラーが使用されます。

属性リストの最後にある‘[Hide Unused Attributes]’ボタンは、このフェイスの未指定の属性を隠します。隠された属性があるとき、ボタンは‘[Show All Attributes]’に変化し、これはすべての属性リストを表示します。カスタマイズバッファーは、インターフェースが見にくくなるのを避けるため、未指定の属性が隠された状態で開始されるでしょう。

属性を指定するときは、通常の方法で値を変更できます。

フォアグラウンドカラーとバックグラウンドカラーは、カラーネームとRGBトリプレットの両方を使用して指定できます(フェイスのカラーを参照してください)。カラーネームのリストに切り替えるために、‘[Choose]’ボタンも使用できます。そのバッファーでRETでカラーを選択すると、値フィールドにそのカラーネームが入ります。

フェイスのセット・保存。リセットは、変数にたいする操作と同様に機能します(変数の変更を参照してください)。

フェイスは、異なるタイプのディスプレーにたいして、違う外観を指定できます。たとえば、カラーディスプレーではテキストを赤にして、モノクロディスプレーでは太字フォントを使うようにフェイスを設定できます。フェイスにたいして複数の外観を指定するには、‘[State]’で呼び出されるメニューで‘For All Kinds of Displays’を選択してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.1.6 特定のアイテムのカスタマイズ

M-x customize-option RET option RET
M-x customize-variable RET option RET

1つのユーザーオプションoptionにたいするカスタマイズバッファーをセットアップします。

M-x customize-face RET face RET

1つのフェイスfaceにたいするカスタマイズバッファーをセットアップします。

M-x customize-group RET group RET

1つのグループgroupにたいするカスタマイズバッファーをセットアップします。

M-x customize-apropos RET regexp RET

regexpにマッチする、すべてのセッティングとグループにたいするカスタマイズバッファーをセットアップします。

M-x customize-changed RET version RET

Emacsのバージョンversion以降に意味が変更されたすべてのセッティングとグループでカスタマイズバッファーをセットアップします。

M-x customize-changed-options RET version RET

Emacsのバージョンversion以降に意味やデフォルト値が変更されたすべてユーザーオプションでカスタマイズバッファーをセットアップします。

M-x customize-saved

カスタマイズバッファーを使って保存された、すべてのセッティングを含むカスタマイズバッファーをセットアップします。

M-x customize-unsaved

セットしたが保存していない、すべてのセッティングを含むカスタマイズバッファーをセットアップします。

特定のユーザーオプションをカスタマイズしたい場合は、M-x customize-optionとタイプします。これは変数名を読み取り、そのユーザーオプション1つだけのためのカスタマイズバッファーをセットアップします。ミニバッファーから変数名を入力するときは、補完が利用可能ですが、Emacsにロードされた変数名だけが補完されます。

同様にM-x customize-faceを使用して、特定のフェイスをカスタマイズできます。M-x customize-groupを使用して、特定のカスタマイズグループにたいするカスタマイズバッファーをセットアップできます。

M-x customize-aproposは検索条件 — 1つの単語か、スペースで区切られた複数の単語、または正規表現 — の入力を求め、名前がそれにマッチする、ロードされたすべてのセッティングとグループにたいするカスタマイズバッファーをセットアップします。これはカスタマイズバッファーのトップにあるサーチフィールドを使用するのと同様です(カスタマイズグループを参照してください)。

新しいバージョンのEmacsにアップグレードしたとき、新しいセッティングをカスタマイズしたり、意味やデフォルト値が変更されたものをセッティングしたいと思うかもしれません。これを行なうにはM-x customize-changedを使用して、ミニバッファーから以前のEmacsのバージョンを指定します。これは指定されたバージョンから変更されたすべてのセッティングとグループを表示するカスタマイズバッファーを作成し、必要ならそれらをロードします。

セッティングを変更した後、その変更が間違いだと気づいたときは、変更を戻すために2つのコマンドを使用できます。保存されたカスタマイズのセッティングには、M-x customize-savedを使用します。セットしたが保存していないカスタマイズのセッティングには、M-x customize-unsavedを使用します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.1.7 カスタムテーマ

カスタムテーマ(Custom themes)は、1つの単位として有効または無効にできる、セッティングのコレクションです。カスタムテーマを使用して、さまざまなセッティングコレクション間を簡単に切り替えることができ、あるコンピューターから別のコンピューターへそのようなコレクションを持ち運ぶことができます。

カスタムテーマは、Emacs Lispソースファイルとして保存されています。カスタムテーマの名前がnameなら、そのテーマのファイル名はname-theme.elです。テーマファイルのフォーマットと、それを作成する方法については、カスタムテーマの作成を参照してください。

M-x customize-themesとタイプすると、Emacsが認識するカスタムテーマをリストする、*Custom Themes*という名前のバッファーに切り替わります。デフォルトでは、Emacsは2つの場所からテーマファイルを探します。1つはcustom-theme-directoryにより指定されるディレクトリー(デフォルトは~/.emacs.d/))で、もう1つはEmacsがインストールされた場所(変数data-directoryを参照してください)のetc/themesというディレクトリーです。後者にはEmacsと共に配布されるいくつかのカスタムテーマが含まれており、これらはさまざまなカラースキーム(color schemes)に適合するように、Emacsフェイスをカスタマイズします(しかし、カスタムテーマの目的はこれだけに制限される必要はなく、変数をカスタマイズするのにも使用できることに注意してください)。

Emacsに他の場所からカスタムテーマを探させたい場合は、リスト変数custom-theme-load-pathにディレクトリーを追加します。この変数のデフォルト値は(custom-theme-directory t)です。ここでシンボルcustom-theme-directoryは、変数custom-theme-directoryの値を指定するという特別な意味をもち、tはビルトインのテーマディレクトリーetc/themesを意味します。custom-theme-load-pathで指定されるディレクトリーにあるテーマが、*Custom Themes*バッファーにリストされます。

*Custom Themes*バッファーでは、カスタムテーマの隣のチェックボックスをアクティブにすることにより、カレントEmacsセッションで、そのテーマを有効または無効にできます。カスタムテーマが有効な場合、そのテーマのすべてのセッティング(変数とフェイス)がEmacsセッションで効果をもちます。選択したテーマを将来のEmacsセッションに適用するには、C-x C-s (custom-theme-save)とタイプするか、‘[Save Theme Settings]’ボタンを使用してください。

最初にカスタムテーマを有効にするとき、Emacsはテーマファイルの内容を表示して、本当にロードするか確認を求めます。これはカスタムテーマのロードにより不定なLispコードが実行されるからで、テーマが安全だと判っているときだけyesと答えるべきです。この場合、Emacsは将来のセッションのために、そのテーマが安全だということを記憶するか尋ねます(これは変数custom-safe-themesにテーマファイルのSHA-256ハッシュ値を保存することにより行なわれます)。すべてのテーマを安全なものとして扱いたい場合は、変数の値をt)に変更します。(ディレクトリーetc/themesの)Emacsと共に配布されるテーマは、このチェックから除外されていて、常に安全だと判断されます。

カスタムテーマのセッティングと保存は、変数custom-enabled-themesをカスタマイズすることにより機能します。この変数の値は、カスタムテーマ名(tangoのようなLispシンボル)のリストです。custom-enabled-themesのセットに*Custom Themes*バッファーを使用するかわりに、たとえばM-x customize-optionのような通常のカスタマイズインターフェースを使用して、変数をカスタマイズできます。カスタムテーマ自身では、custom-enabled-themesをセットできないことに注意してください。

カスタマイズバッファーを通じて行なう任意のカスタマイズは、テーマのセッティングより優先されます。これによりテーマのセッティングを簡単にオーバーライドできます。2つの異なるテーマのセッティングがオーバーラップする場合には、custom-enabled-themesで先に指定されたテーマが優先されます。カスタマイズバッファーでは、カスタムテーマによりセッティングがデフォルトから変更されているときは、‘State’には‘STANDARD’ではなく‘THEMED’が表示されます。

M-x load-themeとタイプすることにより、カレントEmacsセッションで特定のカスタムテーマを有効にできます。これはテーマ名の入力を求め、テーマファイルからテーマをロードし、それを有効にします。すでにテーマファイルがロードされているときは、M-x enable-themeとタイプすることにより、ファイルをロードせずにテーマを有効にできます。カスタムテーマを無効にするには、M-x disable-themeとタイプしてください。

カスタムテーマの説明を見るには、*Custom Themes*バッファーのその行で、?とタイプするか、Emacsの任意のバッファーでM-x describe-themeとタイプしてテーマ名を入力してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.1.8 カスタムテーマの作成

M-x customize-create-themeとタイプすることにより、カスタマイズバッファーと似たインターフェースを使用して、カスタムテーマを定義できます。これは*Custom Theme*という名前のバッファーに切り替えます。これは、一般的なEmacsフェイスをそのテーマに挿入するかも尋ねます(カスタムテーマは、フェイスをカスタマイズするのに使用される場合があるので便利です)。これにnoと答えると、そのテーマには最初は何もセッティングが含まれません。

*Custom Theme*バッファーの上部には、テーマ名と説明を入力できる、編集可能フィールドがあります。‘user’を除く任意の名前を指定できます。説明は、テーマにたいしてM-x describe-themeを呼び出したときに表示される文です。最初の行は1センテンスの概要であるべきです。M-x customize-themesにより作成されたバッファーでは、このセンテンスがテーマ名のとなりに表示されます。

テーマに新しいセッティングを追加するには、‘[Insert Additional Face]’ボタンか、‘[Insert Additional Variable]’ボタンを使用します。これらのボタンはミニバッファーを使用して、補完つきでフェイス名または変数名を読み取り、そのフェイスまたは変数にたいするカスタマイズエントリーを挿入します。通常のカスタマイズバッファーと同じ方法で、変数の値またはフェイスの属性を編集できます。テーマからフェイスまたは変数を削除するには、名前の横のチェックボックスのチェックを外してください。

カスタムテーマのフェイスや変数を指定した後は、C-x C-s (custom-theme-write)とタイプするか、そのバッファーの‘[Save Theme]’ボタンを使用します。これはcustom-theme-directoryのディレクトリーに、name-theme.el(nameはテーマ名)という名前で、テーマファイルを保存します。

*Custom Theme*バッファーから、‘[Visit Theme]’ボタンをアクティブにしてテーマ名を指定することにより、既存のカスタムテーマの閲覧と編集ができます。‘[Merge Theme]’ボタンを使用して、他のテーマのセッティングをバッファーに追加することもできます。‘[Merge Theme]’ボタンを使用して、‘user’という名前の特別なテーマ名を指定することにより、非テーマセッティングをカスタムテーマにインポートできます。

テーマファイルは単なるEmacs Lispソースファイルで、カスタムテーマのロードはLispファイルをロードすることにより機能します。したがって*Custom Theme*バッファーを使用するかわりに、テーマファイルを直接編集することもできます。詳細は、Custom Themes in The Emacs Lisp Reference Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.2 変数

変数(variable)とは、値をもつLipシンボルです。このようなシンボルの名前は、変数名(variable name)とも呼ばれます。変数名には、ファイルに記述できる任意の文字を含めることもできますが、ほとんどの変数名は通常の単語をハイフンで区切って構成されます。

変数の名前には、その変数の役割を簡単に説明する役目があります。ほとんどの変数はドキュメント文字列(documentation string)ももっていて、これは変数の目的、どのような種類の値をもつべきか、値がどのように使用されるかを説明します。ヘルプコマンドC-h v (describe-variable)を使用して、このドキュメントを閲覧できます。変数の確認とセットを参照してください。

Emacsは内部の記録維持のために多くのLisp変数を使用しますが、非プログラマーに一番興味があるのはユーザーが変更することを意図したLisp変数であり、これらはカスタマイズ可能変数(customizable variables)ユーザーオプション(user options)と呼ばれます(Easy Customizationインターフェースを参照してください)。以下のセクションでは、カスタマイズのためのインターフェース以外から変数をセットする方法など、他の観点からEmacs変数を説明します。

(少数の例外を除き)Emacs Lispでは、任意の変数は任意のタイプの値をもつことができます。しかし多くの変数は、特定のタイプの値を割り当てられた場合だけ意味をもちます。たとえばkillリングの最大長さを指定するkill-ring-maxの値としては、数字だけが意味をもちます。kill-ring-maxの値として文字列を与えた場合、C-y (yank)のようなコマンドはエラーをシグナルするでしょう。一方、タイプを気にしない変数もあります。たとえば、変数の値がnilのときはある効果をもたらし、非nilのときは別の効果をもたらす場合、シンボルnil以外の任意の値は、そのタイプに関わらず2番目の効果をもたらします(慣例により、非nil値を指定するために、通常は値t — これは“true”が由来です — を使用します)。カスタマイズバッファーを使用して変数をセットする場合、無効なタイプを与えてしまう心配はありません。カスタマイズバッファーでは通常、意味のある値しか入力できないからです。判別がつかないときは、その変数が期待するどの種類の値かを見るために、C-h v (describe-variable)を使用して、変数のドキュメント文字列をチェックしてください(変数の確認とセットを参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.2.1 変数の確認とセット

C-h v var RET

変数varの値とドキュメントを表示します(describe-variable)。

M-x set-variable RET var RET value RET

変数varの値をvalueに変更します。

変数の値を調べるには、C-h v (describe-variable)を使用します。これはミニバッファーを使用して補完つきで変数名を読み取り、、変数の値とドキュメントの両方を表示します。たとえば、

C-h v fill-column RET

これは以下のような出力を表示します:

fill-column is a variable defined in ‘C source code’.
Its value is 70

  Automatically becomes buffer-local when set.
  This variable is safe as a file local variable if its value
  satisfies the predicate ‘integerp’.
  Probably introduced at or before Emacs version 18.

Documentation:
Column beyond which automatic line-wrapping should happen.
Interactively, you can set the buffer local value using C-x f.

You can customize this variable.

You can customize the variable’の行は、この変数がユーザーオプションであることを示します。C-h vはユーザーオプションだけに制限されません。これはカスタマイズ可能でない変数にも使用できます。

特定のカスタマイズ可能な変数をセットする一番簡単な方法は、M-x set-variableです。これはミニバッファーで変数名を読み取り(補完つき)、次にミニバッファーを使用して新しい値にたいするLisp式を読み取ります(M-nを使用してミニバッファーで編集するために、古い値を挿入することができます)。たとえば、

M-x set-variable RET fill-column RET 75 RET

これはfill-columnを75にセットします。

M-x set-variableはカスタマイズ可能な変数に制限されていますが、以下のようなLisp式で任意の変数をセットできます:

(setq fill-column 75)

このような式を実行するには、M-: (eval-expression)とタイプして、ミニバッファーで式を入力します(Emacs Lisp式の評価を参照してください)。かわりに*scratch*バッファーに移動して、式をタイプしてからC-jとタイプすることもできます(Lisp Interactionバッファーを参照してください)。

変数のセットは、Emacsのカスタマイズと同様、特に明記しない限りは、カレントEmacsセッションだけに影響します。将来のセッションのために変数を変更する唯一の方法は、初期化ファイルにそれを記述することです(Emacs初期化ファイルを参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.2.2 フック

フック(hook)とは、Emacsをカスタマイズするための重要な仕組みです。フックは関数のリストを保持するLisp変数で、これらの関数は、ある定められたタイミングで呼び出されます(これは、フックを実行する(running the hook))、と呼ばれます)。リストの中の個別の関数は、そのフックのフック関数(hook functions)と呼ばれます。たとえばフックkill-emacs-hookは、Emacsを終了する直前に実行されます(Emacsからのexitを参照してください)。

ほとんどのフックはノーマルフック(normal hooks)です。これは、Emacsがフックを実行するとき、フック関数が引数なしで順に呼び出します。わたしたちは、ほとんどのフックをノーマルフックに保つために努力しているので、あなたはこれらのフックを一貫した方法で使用することができます。変数名の最後が‘-hook’の変数は、ノーマルフックです。

多くはありませんが、アブノーマルフック(abnormal hooks)もあります。アブノーマルフックは、名前の最後が‘-hook’ではなく‘-functions’です(古いコードの中には時代遅れのサフィックス‘-hooks’を使うものもあります)。これらのフックがアブノーマルな理由は、関数が呼び出される方法にあります — もしかしたら引数が与えられているかもしれず、ことによると関数が返す値が何かに使用されるかもしれません。たとえばfind-file-not-found-functionsはアブノーマルです。なぜならフック関数のうちの1つが非nil値を返した場合、残りの関数は呼び出されないからです(ファイルのvisit(訪問)を参照してください)。アブノーマルフック変数のドキュメントには、フック関数がどのように使用されるかの説明があります。

他のLisp変数と同じように、setqでフック変数をセットすることもできますが、フック(ノーマルとアブノーマルの両方)に関数を追加するための推奨される方法は、以下の例で示されるような、add-hookを使う方法です。詳細は、Hooks in The Emacs Lisp Reference Manualを参照してください。

ほとんどのメジャーモードは初期化の最終ステップで、1つ以上のモードフック(mode hooks)を実行します。モードフックは個々のモードの振る舞いをカスタマイズするための便利な方法で、常にノーマルフックです。たとえば、以下はTextモードと、Textモードを基礎とする他のモードで、Auto Fillモードをオンにするフックをセットアップする方法です:

(add-hook 'text-mode-hook 'auto-fill-mode)

これは、引数を与えられない場合にマイナーモードを有効にするauto-fill-modeを呼び出すことにより機能します(マイナーモードを参照してください)。次に、Textモードを基礎とするLaTeXモードではAuto Fillモードをオンにしたくない場合、以下の行を追加してこれを行なうことができます:

(add-hook 'latex-mode-hook (lambda () (auto-fill-mode -1)))

ここでは、無名関数(anonymous function。Lambda Expressions in The Emacs Lisp Reference Manualを参照してください)を構築するために、特別なマクロlambdaを使用しており、auto-fill-mode-1を与えて呼び出すことにより、マイナーモードを無効にしています。LaTeXモードは、text-mode-hookを実行した後に、latex-mode-hookモードを実行するので、その結果Auto Fillモードが無効になります。

以下はもっと複雑な例で、Cコードのインデントをカスタマイズするのにフックを使う方法です:

(setq my-c-style
  '((c-comment-only-line-offset . 4)
    (c-cleanup-list . (scope-operator
                       empty-defun-braces
                       defun-close-semi))))

(add-hook 'c-mode-common-hook
  (lambda () (c-add-style "my-style" my-c-style t)))

メジャーモードフックは、それを元のモードとして派生された(derived)他のメジャーモードにも適用されます(Derived Modes in The Emacs Lisp Reference Manualを参照してください)。たとえばHTMLモード(SGMLモードとHTMLモードを参照してください)はTextモードから派生しており、HTMLモードが有効になるときは、html-mode-hookを実行する前にtext-mode-hookが実行されます。これは1つのフックを複数の関連するモードに作用させるための便利な方法を提供します。特に任意のプログラミング言語にたいしてフック関数を適用したい場合は、それをprog-mode-hookモードに追加します。Progモードは、それを継承する他のメジャーモードと比較すると、ほとんど何も行なわないメジャーモードで、まさにこの目的のために存在します。

実行される順番に依存しないようにフック関数をデザインするのがベストです。実行順への依存はトラブルを招きます。しかし実行順は予測可能です。フック関数はフックに登録された順に実行されます。

何度もadd-hookを呼び出すことにより、さまざまな異なるバージョンのフック関数を追加した場合、追加されたすべてのバージョンのフック関数がフック変数に残ることを忘れないでください。remove-hookを呼び出すことにより関数を個別にクリアーするか、(setq hook-variable nil)ですべてのフック関数を削除できます。

フック変数がバッファーローカルな場合、グローバル変数のかわりにバッファーローカル変数が使用されます。しかしバッファーローカル変数が要素tを含む場合は、グローバル変数も同様に実行されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.2.3 ローカル変数

M-x make-local-variable RET var RET

変数varが、カレントバッファーでローカル値をもつようにします。

M-x kill-local-variable RET var RET

変数varが、カレントバッファーでグローバル値を使うようにします。

M-x make-variable-buffer-local RET var RET

変数varがセットされた時点で、カレントバッファーにたいしてローカルになるようマークします。

ほとんどの変数は、特定のEmacsバッファーにたいしてローカル(local)にすることができます。これは、そのバッファーでの変数の値が、他のバッファーでの変数の値とは、独立していることを意味します。多くはありませんが、常にバッファーごとにローカルな変数もあります。他のすべてのEmacs変数は、バッファーで変数をローカルにしていないかぎりは、すべてのバッファーに効果を及ぼすグローバル(global)な値をもちます。

M-x make-local-variableは変数名を読み取り、それをカレントバッファーにたいしてローカルにします。その後、このバッファーで変数の値を変更しても他のバッファーには影響せず、変数のグローバル値を変更してもこのバッファーには影響しなくなります。

M-x make-variable-buffer-localは、変数がセットされたとき自動的にローカルになるように、変数をマークします。より正確には、1度この方法で変数がマークされると、通常の方法による変数のセットは、最初に自動的にmake-local-variableを呼び出します。このような変数をパーバッファー(per-buffer: バッファーごと)変数と呼びます。Emacsの多くの変数は、通常はパーバッファーです。変数のドキュメント文字列には、いつこれを行なうかが記述されています。パーバッファー変数のグローバル値は、通常は任意のバッファーには影響しませんが、それでもまだ意味があります。グローバル値は、新しいバッファーにたいする、この変数の初期値として使用されます。

メジャーモード(メジャーモードを参照してください)は常に変数をセットする前に、変数をローカルにします。あるバッファーでメジャーモードを変更しても、他のバッファーに影響がないのは、これが理由です。マイナーモードは変数をセットすることにより機能します — 通常、各マイナーモードは1つの制御変数(controlling variable)をもっていて、この変数が非nilの場合はモードが有効になります(マイナーモードを参照してください)。多くのマイナーモードにたいして制御変数はパーバッファーであり、したがって常にバッファーローカルです。そうでない場合、他の変数と同様に特定のバッファーで変数をローカルにできます。

多くはありませんが、バッファーでローカルにできない(かわりに各ディスプレーにたいして常にローカル。複数ディスプレーを参照してください)変数も存在します。そのような変数をバッファーローカルにしようとすると、エラーメッセージが表示されます。

M-x kill-local-variableは、指定された変数が、カレントバッファーにたいしてローカルであることを終了させます。その後は、そのバッファーにたいして、その変数のグローバル値が効力をもちます。メジャーモードのセットにより、数少ないパーマネントローカル(permanent locals: 永久にローカル)な変数を除いて、そのバッファーのすべてのローカル変数はkillされます。

変数がカレントバッファーでローカル値をもつかに関わらず、変数にグローバル値をセットするには、Lispコンストラクトsetq-defaultを使用することができます。このコンストラクトはsetqと同じように使用されますが、(もしあれば)ローカル値のかわりにグローバル値をセットします。カレントバッファーがローカル値をもつ場合、新しいグローバル値は他のバッファーに切り替えるまで見えないでしょう。以下は例です:

(setq-default fill-column 75)

setq-defaultは、make-variable-buffer-localでマークされた変数のグローバル値をセットする唯一の方法です。

Lispプログラムは変数のデフォルト値を得るために、default-valueを使用することができます。この関数はシンボルを引数として受け取り、それのデフォルト値を返します。引数は評価されるので、通常は明示的にクォートする必要があります。たとえば、以下はfill-columnのデフォルト値を得る方法です:

(default-value 'fill-column)

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.2.4 ファイル内のローカル変数

ファイルに、Emacsでそのファイルを編集するときに使用するローカル変数の値を指定できます。ファイルをvisitするか、メジャーモードをセットすることにより、Emacsはローカル変数指定をチェックします。これは自動的にこれらの変数をバッファーにたいしてローカルにし、ファイルで指定された値にセットします。

あるファイルのディレクトリーにたいしてディレクトリーローカル変数(ディレクトリーごとのローカル変数を参照)が指定されている場合、ファイルローカル変数はそれをオーバーライドします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.2.4.1 ファイル変数の指定

ファイルローカル変数を指定するには2つの方法があります。1つは最初の行に記述する方法で、もう1つはローカル変数リストを使用する方法です。以下は最初の行でこれらを指定する方法の例です:

-*- mode: modename; var: value; … -*-

この方法により、任意の数の変数/値(variable/value)ペアーを指定できます。各ペアーはコロンとセミコロンで区切ります。特別な変数/値ペアーmode: modename;が与えられた場合、これはメジャーモードを指定します。valueは文字列として使用され、評価はされません。

手作業でエントリーを追加するかわりに、M-x add-file-local-variable-prop-lineを使用することができます。このコマンドは変数と値の入力を求め、適切な方法で最初の行にこれらを追加します。M-x delete-file-local-variable-prop-lineは変数の入力を求め、最初の行から変数のエントリーを削除します。コマンドM-x copy-dir-locals-to-file-locals-prop-lineは、カレントのディレクトリーローカル変数を最初の行にコピーします(ディレクトリーごとのローカル変数を参照してください)。

以下は、最初の行でLispモードを指定して、2つの変数に数値をセットする例です:

;; -*- mode: Lisp; fill-column: 75; comment-column: 50; -*-

modeの他に、ファイル変数として特別な意味をもつキーワードはcodingunibyteevalです。これらは以下で説明します。

シェルスクリプトでは、最初の行はスクリプトのインタープリターの識別に使用されるので、ローカル変数をそこに置くことはできません。これに対処するために、Emacsは最初の行がインタープリターを指定しているときは、2行目からローカル変数指定を探します。man pagesにも同じことが言えます。man pagesはtroffプリプロセッサーのリストを指定するマジック文字列‘'\"’で始まるからです(しかし、すべてがこれを行なう訳ではありません)。

-*-’行を使用するのではなく、ファイルの終端付近でローカル変数リスト(local variables list)を使用することにより、ファイルローカル変数を定義することもできます。ローカル変数リストは、ファイル終端から3000文字以内で開始され、ファイルがページに分かれているときは最後のページになければなりません。

ファイルにローカル変数リストと‘-*-’の両方がある場合、Emacsは最初に‘-*-’行のすべてを処理してから、ローカル変数リストのすべてを処理します。例外はメジャーモード指定です。Emacsはメジャーモード指定がどこにあろうと、まずそれを適用します。なぜならほとんどのメジャーモードは、初期化部分ですべてのローカル変数をkillするからです。

ローカル変数リストは、文字列‘Local Variables:’を含む行で開始され、文字列‘End:’を含む行で終了します。この間には、以下のように1行に変数名と値のペアーが記述されます:

/* Local Variables:  */
/* mode: c           */
/* comment-column: 0 */
/* End:              */

この例では、各行はプレフィクス‘/*’で始まり、サフィックス‘*/’で終了します。Emacsは、リストの最初の行のマジック文字列‘Local Variables:’を囲む文字列から、プレフィクスとサフィックスを識別します。その後はリストの他の行で自動的にこれらを破棄します。プレフィクスおよび/またはサフィックスを使用する通常の理由は、そのファイルが意図する他のプログラムが混乱しないように、ローカル変数をコメントに埋め込むためです。上記は、コメントが‘/*’で始まり‘*/’で終わるCプログラミング言語での例です。

Emacsのローカル変数リストではないが、そのように見えるテキストがある場合は、そのテキストの後にフォームフィード文字(ページ区切りです。ページを参照してください)を挿入して、それを取り消すことができます。Emacsはファイルの最後のページ(つまり最後のページ区切りの後)にあるファイルローカル変数だけを調べます。

ローカル変数を直接タイプするかわりに、コマンドM-x add-file-local-variableを使用することができます。これは変数と値の入力を求め、それらをリストに追加し、‘Local Variables:’と、必要なら開始・終了マーカーも追加します。コマンドM-x delete-file-local-variableは、リストから変数を削除します。M-x copy-dir-locals-to-file-localsは、ディレクトリーローカル変数をリストにコピーします(ディレクトリーごとのローカル変数を参照してください)。

-*-’行と同じように、ローカル変数リストの変数は文字列として使用され、最初に評価されることはありません。長い文字列値をファイル内で複数行に分割したい場合、改行とバックスラッシュを使用できます(Lisp文字列定数では無視されます)。各行には、プレフィクスとサフィックスを記述するべきです。たとえ行がその文字列で開始または終了していても、それらはリストを処理するとき取り除かれます。以下は例です:

# Local Variables:
# compile-command: "cc foo.c -Dfoo=bar -Dhack=whatever \
#   -Dmumble=blaah"
# End:

いくつかの名前は、ローカル変数リスト内で特別な意味をもちます:

これら4つのキーワードは、実際には変数ではありません。他のコンテキストでこれらをセットしても、特別な意味はありません。

マイナーモードにたいしてmodeキーワードを使用しないでください。ローカル変数リストでマイナーモードを有効または無効にするには、evalでモードコマンドを実行するLisp式を指定します(マイナーモードを参照してください)。たとえば以下のローカル変数リストは、引数なし(引数に1を指定しても同じことを行ないます)でeldoc-modeを呼び出すことにより、ElDocモード(Emacs Lispドキュメントの照会を参照してください)を有効にし、引数-1でfont-lock-mode(Font Lockモードを参照してください)を呼び出すことにより、Font Lockモードを無効にする例です。

;; Local Variables:
;; eval: (eldoc-mode)
;; eval: (font-lock-mode -1)
;; End:

しかしこの方法でマイナーモードを指定するのは、間違っている場合もあることに注意してください。マイナーモードは個人の好みを表しており、そのファイルを編集するユーザーにあなたの好みを強制するのは、不適切かもしれません。状況に依存して自動的にマイナーモードを有効または無効にしたい場合は、たいていメジャーモードフックでこれを行なう方がよいのです(フックを参照してください)。

ローカル変数と、ファイル名とファイル内容にしたがったバッファーのメジャーモード(もしあればローカル変数リストも)をリセットするには、コマンドM-x normal-modeを使用します。ファイルのモードを選択するを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.2.4.2 安全なファイル変数

ファイルローカル変数が危険な場合もあります。他の誰かのファイルをvisitするとき、そのファイルのローカル変数リストがEmacsに何を行なうか、告げるものはありません。eval “variable”や、その他のload-pathなどにたいする不正な値は、実行する意図がないLispコードを実行するかもしれません。

したがって、安全と判っていないファイルローカル変数を発見した場合、Emacsはファイルのローカル変数リスト全体を表示して、それらをセットする前に継続するか尋ねます。yまたはSPCをタイプすると、ローカル変数リストは効果をもち、nの場合は無視します。Emacsがバッチモード(初期化オプションを参照してください)で実行されている場合、Emacsは確認することができないので、nと応えられたとみなします。

Emacsは通常、特定の変数/値ペアーが安全だと認識できます。たとえばcomment-columnfill-columnには、任意の整数値を与えても安全です。ファイルが安全だと判っている変数/値ペアーだけを指定する場合、Emacsはそれらをセットする前に確認を求めません。そうでない場合、確認プロンプトで!とタイプすることにより、このファイル内のすべての変数/値ペアーが安全なことを記録するようEmacsに指示できます。その後、Emacsが同じファイルまたは別のファイルで、これらの変数/値ペアーに出会うと、これらを安全だとみなします。

load-pathのようないくつかの変数は、特に危険だと判断されます。これらをローカル変数として指定すべき理由はほとんどなく、それらを変更するのは危険です。ファイルに危険なローカル変数だけが含まれる場合、Emacsは確認プロンプトで!の選択肢を提示することも、それを受け入れることもしません。ファイル内のいくつかのローカル変数が危険で、いくつかの変数は潜在的に安全ではない場合は、プロンプトで!を入力できます。これはすべての変数に適用されますが、危険ではない変数だけを将来のセッションのために安全とマークします。もし危険な変数を安全な値として記録したいと本当に望むなら、‘safe-local-variable-values’をカスタマイズすることによりこれを行ないます(Easy Customizationインターフェースを参照してください)。

変数enable-local-variablesにより、Emacsがローカル変数を処理する方法を変更できます。デフォルト値はtで、これは上述の振る舞いを指定します。nilの場合、Emacsは単にすべてのファイルローカル変数を無視します。:safeは安全な値だけを使用して、残りは無視します。他の値の場合、安全と判っている値かどうかの決定を試みずに、ローカル変数をもつ各ファイルごとに尋ねます。

変数enable-local-evalは、Emacsがeval変数を処理するかどうかを制御します。enable-local-variablesのように、変数に対する可能な値は3つで、tnil、およびそれ以外です。デフォルトは、tnilではないmaybeで、通常Emacsはeval変数を処理するときに確認を求めます。

例外として、評価する任意のeval形式が、変数safe-local-eval-formsで指定された形式の場合、Emacsは確認を求めません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.2.5 ディレクトリーごとのローカル変数

大きなソフトウェアプロジェクトでのディレクトリーツリーのような、特定のディレクトリーや、それのサブディレクトリーのすべてのファイルにたいして、同じローカル変数を定義したいことがあるかもしれません。これはディレクトリーローカル変数(directory-local variables)で行なうことができます。ファイルローカル変数はディレクトリーローカル変数をオーバーライドするので、あるディレクトリー内のファイルに特別なセッティングが必要な場合は、ディレクトリー変数でそのディレクトリー内の大多数にたいするセッティングを指定してから、ファイルローカル変数により、少数のファイルにたいしてオーバーライドを要する一般的なセッティングを定義できます。

ディレクトリーローカル変数を定義する通常の方法は、そのディレクトリーに.dir-locals.el22を配す方法です。そのディレクトリー、またはそれのサブディレクトリーの任意のファイルをEmacsがvisitするとき、.dir-locals.elで指定されたディレクトリーローカル変数が、あたかもそのファイルのファイルローカル変数(ファイル内のローカル変数を参照してください)として定義されたかのように、ファイルに適用されます。Emacsはvisitされたファイルのディレクトリーから、ディレクトリーツリーを上に移動しながら.dir-locals.elを検索します。スローダウンを避けるために、検索はリモートファイルをスキップします。必要なら、変数enable-remote-dir-localstにセットして、検索範囲をリモートファイルに広げることができます。

Emacsが追加でロードする.dir-locals-2.elが存在する場合は、それを使用することもできます。これは.dir-locals.elがバージョンコントロールの共有ディレクトリー配下にあり、個人的なカスタマイズに使用できないときに有用です。

.dir-locals.elは、特別な構成のリストをもちます。これはモード名(シンボルで指定)をalist(Association Lists: 連想リスト。Association Lists in The Emacs Lisp Reference Manualを参照してください)にマップします。各alistエントリーは、変数名と、指定されたメジャーモードが有効なときに、その変数に割り当てるディレクトリーローカル値からなります。モード名のかわりに‘nil’を指定でき、これはalistが任意のモードで適用されることを意味します。サブディレクトリー(文字列で指定)を指定することもできます。この場合、そのサブディレクトリーのすべてのファイルにalistが適用されます。

以下は、.dir-locals.elファイルの例です:

((nil . ((indent-tabs-mode . t)
         (fill-column . 80)
         (mode . auto-fill)))
 (c-mode . ((c-file-style . "BSD")
            (subdirs . nil)))
 ("src/imported"
  . ((nil . ((change-log-default-name
              . "ChangeLog.local"))))))

これはディレクトリーツリーの任意のファイルにたいして変数‘indent-tabs-mode’およびfill-columnをセットして、任意のCソースファイルにたいしてインデントスタイルをセットします。特別な要素modeは有効にするマイナーモードを指定します。したがって(mode . auto-fill)えはマイナーモードauto-fill-modeの有効化が必要なことを指定します。特別な要素subdirsは変数ではありません。これは特別なキーワードで、Cモードのセッティングがカレントディレクトリーだけに適用され、任意のサブディレクトリーには適用されないことを示します。最後に、これはsrc/importedサブディレクトリー内の任意のファイルにたいして、違うChangeLogファイル名を指定します。

異なるモード名やディレクトリーを使用する変数にたいして、.dir-locals.elファイル内に複数の値が含まれる場合には、汎用的なモードと比較してより特化したモードにたいする値が優先して適用されるでしょう。更にディレクトリー下に指定された値は、より高い優先度をもちます。たとえば:

((nil . ((fill-column . 40)))
 (c-mode . ((fill-column . 50)))
 (prog-mode . ((fill-column . 60)))
 ("narrow-files" . ((nil . ((fill-column . 20))))))

c-modeprog-modeから派生しているので、c-modeを使用するファイルはprog-modeにもマッチします。しかしCのファイルはprog-modeより特化したモード名なので、fill-columnに使用される値は50になるでしょう。prog-modeから派生する他のモードを使用するファイルは、60を使用します。narrow-filesディレクトリー配下のファイルでは、モードエントリーよりディレクトリーエントリーが優先されるので、たとえc-modeを使用するファイルでも、値20が使用されることになります。

.dir-locals.el内ではmodeevalunibyteを指定できます。これらの変数は、ファイルローカル変数のときとオ同じ意味をもちます。codingは、ディレクトリーローカル変数としては指定できません。ファイル内のローカル変数を参照してください。

.dir-locals.elファイルを手で編集するかわりに、コマンドM-x add-dir-local-variableを使用できます。これはモード名またはサブディレクトリー、および変数名と値の入力を求め、ディレクトリーローカル変数を定義するエントリーを追加します。M-x delete-dir-local-variableは、エントリーを削除します。M-x copy-file-locals-to-dir-localsは、カレントファイル内のファイルローカル変数を、.dir-locals.elにコピーします。

ディレクトリーローカル変数を指定する他の方法は、dir-locals-set-class-variables関数を使用して、ディレクトリークラス(directory class)の中に、変数/値ペアーのグループを定義する方法です。その後、dir-locals-set-directory-class関数を使用して、そのクラスに対応するディレクトリーをEmacsに指示します。これらの関数呼び出しは通常、初期化ファイルで行なわれます(Emacs初期化ファイルを参照してください)。この方法は、何らかの理由でディレクトリーに.dir-locals.elを置けないときに便利です。たとえば、この方法で書き込み不可なディレクトリーにセッティングを適用できます:

(dir-locals-set-class-variables 'unwritable-directory
   '((nil . ((some-useful-setting . value)))))

(dir-locals-set-directory-class
   "/usr/include/" 'unwritable-directory)

変数にたいしてディレクトリーローカル値とファイルローカル値の両方が指定された場合、ファイルローカル値が効果をもちます。安全ではないディレクトリーローカル値は、安全でないファイルローカル値と同じ方法で扱われます(安全なファイル変数を参照してください)。

ディレクトリーローカル変数は、Diredバッファー(Dired (ディレクトリーエディター)を参照してください)のような、ファイルを直接visitしていないが、ディレクトリーで処理を行なうバッファーにたいしても効果があります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.2.6 ▼接続ごとのローカル変数

ほとんどの変数はローカルマシンの状況を反映します。リモートのデフォルトディレクトリーをもつバッファー操作時には、それらの変数が異なる値を使用しなければならないときが時折あります。shellの呼び出し時に適用するシェルについて考えてみてください。ローカルマシンでは/bin/bashでリモートマシンでは/bin/kshかもしれません。

これは接続ローカル変数(connection-local variables)で実現することができます。ディレクトリーローカル変数とファイルローカル変数は接続ローカル変数をオーバーライドします。安全ではない接続ローカル値は、安全でないファイルローカル値と同じ方法で扱われます(安全なファイル変数を参照してください)。

接続ローカル変数はconnection-local-set-profile-variables関数を使用して変数/値ペアのグループとしてプロファイル(profile)内に宣言されます。関数connection-local-set-profilesはリモートマシンを識別する与えられた条件にたいしてプロファイルをアクティブにします。

(connection-local-set-profile-variables 'remote-ksh
   '((shell-file-name . "/bin/ksh")
     (shell-command-switch . "-c")))

(connection-local-set-profile-variables 'remote-bash
   '((shell-file-name . "/bin/bash")
     (shell-command-switch . "-c")))

(connection-local-set-profiles
   '(:application tramp :machine "remotemachine") 'remote-ksh)

このコードはremote-kshremote-bashという2つの異なるプロファイルを宣言しています。プロファイルremote-kshはホスト名としてregexpの"remotemachineにマッチするリモートデフォルトディレクトリーをもつすべてのバッファーに適用されます。このような条件はプロパティ:protocol (Trampの手法)や:user (リモートユーザー名)も区別できます。nilという条件はリモートデフォルトディレクトリーをもつすべてのバッファーにマッチします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.3 キーバインディングのカスタマイズ

このセクションでは、キーをコマンドにマップするキーバインド(key bindings)と、そのキーバインドを記録するキーマップ(keymaps)を説明します。それにinitファイルを編集して、キーバインドをカスタマイズする方法も説明します(initファイル内でのキーのリバインドを参照してください)。

ほとんどのモードは自身のキーバインディングを定義するので、モードをアクティブにすることにより、あなたのカスタムキーバインディングがオーバーライドされるかもしれません。いくつかのキーはユーザー定義バインディングのために予約されており、モードはそれらを使用してはならないので、これらのキーはこの問題にたいして安全です。予約済みのキーは、C-cと英字(大文字と小文字の両方)、修飾キーなし(修飾キーを参照)のファンクションキーのF5からF9です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.3.1 キーマップ

キーとコマンドで説明されているように、各Emacsコマンドは、対話的に使用することを条件として定義されたLisp関数です。すべてのLisp関数と同様に、コマンドは小文字とハイフンからなる関数名をもちます。

キーシーケンス(key sequence) — 短くはキー(key) — とは、1つの単位として意味をもつ、連続する入力イベント(input events)のことです。入力イベントとは文字、ファンクションキー、マウスボタン — つまりコンピューターに送ることができるすべての入力のことです。キーシーケンスは、それが何のコマンドを実行するかを指示するバインディング(binding)により、意味をもちます。

キーシーケンスとコマンド関数との間のバインディングは、keymaps(キーマップ)と呼ばれるデータ構造に記録されます。Emacsには多くのkeymapsがあり、それぞれが特別の機会に使用されます。

一番重要なキーマップは、グローバルキーマップ(global keymap)です。なぜならグローバルキーマップは常に効果があるからです。グローバルキーマップはFundamentalモードにたいしてキーを定義します(メジャーモードを参照してください)。これらの定義のほとんどは、、ほとんどすべてのメジャーモードでは一般的です。メジャーモードまたはマイナーモードは、いくつかのキーにたいするグローバル定義をオーバーライドするために、それぞれ独自のkeymapをもつことができます。

たとえばgのような自己挿入文字(self-inserting character)は、グローバルキーマップがそれをコマンドcommand self-insert-commandにバインドするので、自己挿入を行なうのです。C-aのような標準的なEmacsの編集文字もグローバルキーマップから、それらの標準的な意味を取得します。M-x global-set-keyのような、キーをリバインドするコマンドは、新しいバインディングをグローバルマップの適切な位置に保存することにより機能します(対話的なキーバインディングの変更を参照)。カレントのキーバインディングを閲覧するにはC-h bコマンドを使用してください。

ほとんどの現代的なキーボードは、文字キーと同じようにファンクションキーをもちます。ファンクションキーは文字キーが行なうように入力イベントを送り、キーマップはファンクションキーにたいするバインディングをもつことができます。キーシーケンスにはファンクションキーと文字をミックスすることもできます。たとえば、キーボードにファンクションキーHomeがある場合、EmacsはC-x Homeのようなキーシーケンスを認識できます。S-down-mouse-1のように、マウスイベントとキーボードイベントをミックスすることさえ可能です。

テキスト端末では、ファンクションキーをタイプすることにより、文字シーケンスがコンピューターに送られます。シーケンスの正確な詳細は、ファンクションキーと端末タイプに依存します(シーケンスがESC [で始まることもしばしばあります)。Emacsが端末タイプを理解する場合、自動的にそのようなシーケンスを1つの入力イベントとして処理します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.3.2 プレフィクスキーマップ

内部的には、Emacsは各キーマップの1つのイベントだけを記録します。複数イベントのキーシーケンスの解釈は、キーマップの連鎖を生じます。最初のイベントにたいして最初のキーマップが定義を与え、シーケンス内の2番目のイベントを探すのに他のキーマップが使用され...と連鎖していきます。したがってC-xESCなどのプレフィクスキーは独自のキーマップをもち、それらはプレフィクスの直後のイベントにたいする定義を保持します。

プレフィクスキーの定義は通常、それに続くイベントを探すのに使用するキーマップです。プレフィクスキーの定義として、関数定義がキーマップであるようなLispシンボルを指定することもできます。効果は同じですが、そのプレフィクスキーが何のためなのか説明するためのコマンド名を提供します。たとえば、C-xのバインディングはシンボルControl-X-prefixで、このシンボルの関数定義は、C-xコマンドにたいするキーマップです。プレフィクスキーとしてのC-cC-xC-hESCは、グローバルキーマップに定義されているので、これらのプレフィクスキーは常に利用できます。

通常のプレフィクスキー以外に、“架空のプレフィクスキー(fictitious prefix key)”もあり、これらはメニューバーを表します。メニューバーのキーバインディングについての特別な情報は、Menu Bar in The Emacs Lisp Reference Manualを参照してください。ポップアップメニューを呼び出すマウスボタンイベントもプレフィクスキーです。詳細については、Menu Keymaps in The Emacs Lisp Reference Manualを参照してください。

いくつかのキーマップは、名前のついた変数に格納されています:


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.3.3 ローカルキーマップ

ここまではグローバルマップの詳細を説明してきました。メジャーモードは、ローカルキーマップ(local keymaps)で独自のキーバインディングを提供することにより、Emacsをカスタマイズします。たとえばCモードは、C言語のためにカレント行をインデントするために、TABをオーバーライドします。マイナーモードもローカルキーマップをもつことができます。マイナーモードが効力をもつとき、マイナーモードのキーマップの定義は、メジャーモードのローカルキーマップとグローバルキーマップの両方をオーバーライドします。それに加えて、バッファーの一部のテキストに、他のすべてのキーマップをオーバーライドする独自のキーマップを指定できます。

ローカルキーマップは、あるキーをプレフィクスキーマップとして定義することにより、そのキーをプレフィクスキーとして再定義できます。そのキーがグローバルでもプレフィクスとして定義されている場合、そのキーのグローバルおよびローカルの定義(両方のキーマップ)が、相乗して効果をもちます。つまりプレフィクスキーに続くイベントを探すのに、両方の定義が使用されます。たとえばローカルキーマップがC-cをプレフィクスキーマップとして定義し、そのキーマップがC-zをコマンドとして定義する場合、これはC-c C-zにローカルな意味を提供します。これはC-cで始まる他のシーケンスには影響を与えません。これらのシーケンスが独自のローカルバインディングをもたない場合、グローバルバインディングが効果をもちます。

これを別の方法で考えると、Emacsはキーシーケンス全体のバインディングにたいして、複数のキーマップを1つずつ探して、複数イベントキーシーケンスを処理すると考えることができます。最初にマイナーモードが有効な場合はマイナーモードのキーマップをチェックして、次にメジャーモードのキーマップをチェックして、それからグローバルキーマップをチェックするのです。これはキーの照合が機能する正確な方法ではありませんが、通常の場面における結果を理解するには充分です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.3.4 ミニバッファーキーマップ

ミニバッファーは独自のローカルキーマップのセットをもちます。これにはさまざまな補完やexitコマンドが含まれます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.3.5 対話的なキーバインディングの変更

Emacsがキーを再定義する方法は、キーマップのそのキーのエントリーを変更する方法です。グローバルキーマップを変更できます。この場合すべてのメジャーモードで変更が効果をもちます(ただし同じキーにたいしてそれをオーバーライドする独自のローカルバインディングをもつ場合を除きます)。ローカルキーマップを変更することもできます。これは同じメジャーモードを使用するすべてのバッファーに効果があります。

このセクションでは、現在のEmacsセッションでキーをリバインドする方法を説明します。将来のEmacsセッションで効果をもつようにキーをリバインドする方法については、initファイル内でのキーのリバインドを参照してください。

M-x global-set-key RET key cmd RET

cmdを実行するkeyをグローバルに定義します。

M-x local-set-key RET key cmd RET

cmdを実行するkeyを、(そのとき効力をもつメジャーモードで)ローカルに定義します。

M-x global-unset-key RET key

グローバルマップでkeyを未定義にします。

M-x local-unset-key RET key

(そのとき効力をもつメジャーモードで)ローカルにkeyを未定義にします。

たとえば以下は、通常のC-zにたいするグローバルな定義を置き換えて、C-zshellコマンド(対話的なサブシェルを参照してください)にバインドします:

M-x global-set-key RET C-z shell RET

global-set-keyコマンドは、キーの後にコマンド名を読み取ります。キーを押した後、以下のようなメッセージが表示されるので、そのキーにバインドしたいコマンドを入力できます:

Set key C-z to command:

ファンクションキーとマウスイベントも同じ方法で再定義できます。リバインドするキーを指定するときに、ファンクションキーをタイプするか、マウスをクリックするだけです。

複数のイベントを含むキーも、同じ方法で再定義できます。Emacsは、(プレフィクスキーではない)完了キーまで、リバインドするキーの読み取りを続けます。したがってkeyC-fをタイプすると、それで完了です。これによりミニバッファーに入って、すぐにcmdを読み取ります。しかしC-xをタイプした場合、これはプレフィクスなので、他の文字を読み取ります。それが4の場合、これもプレフィクス文字なので、さらに文字を読み取ります。たとえば、

M-x global-set-key RET C-x 4 $ spell-other-window RET

これは、(架空のコマンド)spell-other-windowを実行するように、C-x 4 $を再定義します。

global-unset-keyで、キーのグローバルな定義を削除できます。これはそのキーを未定義(undefined)にします。その後このキーをタイプしても、Emacsはビープ音を鳴らすだけです。同様にlocal-unset-keyは、カレントメジャーモードのキーマップでキーを未定義にして、メジャーモードにおいて、そのキーにたいするグローバル定義(またはグローバル定義に無い状態)が有効になります。

あるキーを再定義(または未定義に)してから、後でその変更を取り消したくなった場合、キーを未定義にしても上手くいきません — そのキーを標準の定義に再定義する必要があります。そのキーの標準の定義の名前を見つけるには、フレッシュなEmacsのFundamentalモードで、C-h cを使用します。このマニュアルのキーのドキュメントにも、それらのコマンド名がリストされています。

間違ってコマンドを呼び出すことから自分を守りたい場合、そのキーを未定義にするより、コマンドを無効にするほうがよいでしょう。無効にされたコマンドは、実際にそれを実行したくなったとき、少しの手間で呼び出すことができます。コマンドの無効化を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.3.6 initファイル内でのキーのリバインド

いつでも使いたいキーバインドがある場合、初期化ファイルにLispコードを記述することにより、それらを指定できます。初期化ファイルの説明については、Emacs初期化ファイルを参照してください。

Lispを使用してキーバインディングを記述するには、いくつかの方法があります。一番簡単なのはkbd関数を使う方法で、これはキーシーケンスのテキスト表現 — このマニュアルでキーシーケンスを記述するのと同様な方法 — を、global-set-keyの引数として渡す形式に変換します。たとえば以下は、C-zshellコマンド(対話的なサブシェルを参照してください)にバインドする方法の例です:

(global-set-key (kbd "C-z") 'shell)

コマンド名shellの前のシングルクォートは、それを変数ではなくシンボル定数としてマークします。クォートを省略した場合、Emacsはshellを変数として評価しようとします。これはおそらくエラーを引き起こし、もちろんあなたはそれを望まないはずです。

以下に、ファンクションキーやマウスイベントなどを含めた、追加の例を示します:

(global-set-key (kbd "C-c y") 'clipboard-yank)
(global-set-key (kbd "C-M-q") 'query-replace)
(global-set-key (kbd "<f5>") 'flyspell-mode)
(global-set-key (kbd "C-<f5>") 'display-line-numbers-mode)
(global-set-key (kbd "C-<right>") 'forward-sentence)
(global-set-key (kbd "<mouse-2>") 'mouse-save-then-kill)

kbdを使うかわりに、キーシーケンスの指定にLisp文字列やベクターを使用することができます。文字列を使用するのは単純ですが、これはASCII文字とメタ修飾されたASCII文字だけで機能します。たとえば以下は、C-x M-lmake-symbolic-link(ファイルのコピー、命名、リネーム。を参照)にバインドする方法の例です:

(global-set-key "\C-x\M-l" 'make-symbolic-link)

TABRETESCDELを含むキーシーケンスにバインドするには、文字列はEmacs Lispのエスケープシーケンス‘\t’、‘\r’、‘\e’、‘\d’を含むべきです。以下は、C-x TABindent-rigidly(インデントを参照)にバインドする例です:

(global-set-key "\C-x\t" 'indent-rigidly)

キーシーケンスがファンクションキーやマウスボタンイベント、またはC-=H-aのような非ASCII文字を含む場合、キーシーケンスを指定するのにベクターを使用することができます。ベクター内の各要素は入力イベントを意味します。要素はスペースで区切られ、一対の角カッコ(square brackets)で囲まれます。ベクターの要素が文字の場合は、それをLisp文字定数、つまり‘?’の後ろにその文字を、文字列内で表記されるような方法で記述します。ファンクションキーはシンボルで表され(ファンクションキーのリバインドを参照してください)、他の区切り文字や句読点なしで、単にシンボル名を記述します。以下に例をいくつか示します:

(global-set-key [?\C-=] 'make-symbolic-link)
(global-set-key [?\M-\C-=] 'make-symbolic-link)
(global-set-key [?\H-a] 'make-symbolic-link)
(global-set-key [f7] 'make-symbolic-link)
(global-set-key [C-mouse-1] 'make-symbolic-link)

単純な場合でもベクターを使用できます:

(global-set-key [?\C-z ?\M-l] 'make-symbolic-link)

ASCII文字にたいするキーバインディングは、言語とコーディングシステムに問題を起こすかもしれません。 initファイル内の非ASCII文字を参照してください。

ローカルキーマップで説明したように、メジャーモードとマイナーモードはローカルキーマップを定義できます。これらのキーマップは、セッションで最初にそのモードがロードされるときに構築されます。特定のキーマップで変更を行うために関数define-keyを使用できます。この関数はバインディングとしてnilを渡すことによりキーのセット解除もできます。これらのキーマップを変更したい場合は、モードフック(mode hook)を使用しなければなりません(フックを参照してください)。

モードのキーマップはモードがロードされるまで構築されないので、キーマップを変更するコードをモードフック(mode hook)に配置することにより実行を遅延しなければなりません(フックを参照)。たとえばTexinfoモードは、フックtexinfo-mode-hookを実行します。以下はTexinfoモードでC-c nC-c pにローカルバインディングを追加、C-c C-x xのローカルバインディングを削除するために、どのようにフックを使用できるかの例です:

(add-hook 'texinfo-mode-hook
          (lambda ()
            (define-key texinfo-mode-map "\C-cp"
                        'backward-paragraph)
            (define-key texinfo-mode-map "\C-cn"
                        'forward-paragraph)))
            (define-key texinfo-mode-map "\C-c\C-xx" nil)

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.3.7 修飾キー

Emacsでは、デフォルトのキーバインディングがセットアップされているので、修飾されたアルファベット文字は大文字小文字が区別されません。つまりC-AC-aと同じことを行い、M-AM-aと同じことを行ないます。これはアルファベット文字だけに当てはまり、他のキーのシフトキーが押された(shifted)バージョンには適用されません。たとえば、C-@C-2と同じではありません。

Control修飾されたアルファベット文字は、一般的に大文字小文字が区別されません。Emacsは常にC-AC-aC-BC-b、...として扱います。これは歴史的な理由によります。非グラフィカルな環境ではこれらのキーストロークに差異はありません。しかしGUIフレームではshiftしたControlのアルファベットキーストロークをバインドできます。

(global-set-key (kbd "C-S-n") #'previous-line)

他の修飾キーではEmacsをカスタマイズするとき修飾されたアルファベットの大文字小文字を区別するようにできます(非グラフィカルなフレームでも可)。たとえばM-aM-Aで別のコマンドを実行できます。

一般的に使用される修飾キーはControlMetaだけですが、Emacsは他の修飾キーもサポートします。これらはSuperHyperAltと呼ばれます。これらの修飾キーを使用する方法を提供する端末の数は多くありません。ほとんどのキーボードでAltとラベルされたキーは、通常はAltではなくMeta修飾を発行します。Emacsの標準のキーバインディングにはSuperHyperは含まれず、少数の標準キーバインディングだけがAltを使用します。これらのキーで修飾された文字は含まれません。しかしこれらの修飾を使用するキーバインディングに意味を割り当てるようにEmacsをカスタマイズできます。修飾ビットはそれぞれ‘s-’、‘H-’、‘A-’になります。

これらの追加的な修飾キーがキーボードになくても、C-x @を使用して入力できます。C-x @ hはHyperフラグ、C-x @ sはSuperフラグ、C-x @ aはAltフラグを次の文字に加えます。たとえばHyper-Control-aを入力するには、C-x @ h C-aとタイプします(残念なことに同じ文字にたいしてC-x @を使用して、2つの修飾を追加する方法はありません。なぜなら最初の1つは2回目のC-xにたいして作用するからです)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.3.8 ファンクションキーのリバインド

キーシーケンスには、通常の文字と同じようにファンクションキーを含めることができます。Lisp文字(実際は整数です)がキーボードの文字を表すように、Lispシンボルはファンクションキーを表します。ファンクションキーのラベルに示された単語が、それにタイプするLispシンボルの名前になります。以下は一般的なファンクションキーにたいする、慣例的なLisp名です:

leftuprightdown

カーソル矢印キーです。

beginendhomenextprior

その他のカーソルを再配置するキーです。

selectprintexecutebacktab
insertundoredoclearline
insertlinedeletelineinsertchardeletechar

その他のファンクションキーです。

f1f2、…、f35

(キーボード上部にある)番号つきのファンクションキーです。

kp-addkp-subtractkp-multiplykp-divide
kp-backtabkp-spacekp-tabkp-enter
kp-separatorkp-decimalkp-equal
kp-priorkp-nextkp-endkp-home
kp-leftkp-upkp-rightkp-down
kp-insert kp-delete

(標準的なキーボードでは右側にある)キーパッドの名前や句読点のキーです。

kp-0kp-1、…、kp-9

キーパッドの数字キーです。

kp-f1kp-f2kp-f3kp-f4

キーパッドのPFキーです。

これらの名前は便利ですが、いくつかのシステム(特にXを使用するシステム)では、異なる名前を使用するかもしれません。端末のファンクションキーにたいして、どのシンボルが使用されているか確認するには、C-h cとタイプして、その後にそのファンクションキーを入力してください。

ファンクションキーにバインドする例については、initファイル内でのキーのリバインドを参照してください。

多くのキーボードの右手側には、テンキーボード(numeric keypad)があります。キーパッドのテンキーは‘Num Lock’とラベルされたキーで切り替えるにことにより、カーソル移動キーにもなります。デフォルトでは、Emacsはこれらのキーを、メインのキーボードの対応するキーに変換します。たとえば‘Num Lock’がオンの場合、テンキーのlabeled ‘8’のラベルがついたキーはkp-8を生成し、これは8に変換されます。また‘Num Lock’がオフの場合、このキーはkp-upを生成し、これはUPに変換されます。8UPのようなキーをリバインドした場合、それはキーパッドの対応するキーにも影響します。しかし直接‘kp-’をリバインドした場合、これはメインのキーボードの等価なキーに影響を与えません。修飾されたキーは変換されないことに注意してください。たとえばMetaキーを押したまま、テンキーの‘8’を押すと、これはM-kp-8を生成します。

Emacsは変数keypad-setupkeypad-numlock-setupkeypad-shifted-setupkeypad-numlock-shifted-setupを使用することにより、テンキーのキーをバインドするための便利な方法を提供します。これらの変数は‘keyboard’カスタマイズグループで見つけることができます(Easy Customizationインターフェースを参照してください)。キーをリバインドして、数引数を発行するなど、他のタスクを行なうことができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.3.9 名前のあるASCIIコントロール文字

当初TABRETBSLFDESCDELは、特定のASCIIコントロール文字の名前として使用され、多用されるために自身の特別なキーをもつようになりました。たとえばTABC-iの別の名前です。その後、ユーザーはEmacsでこれらのキーと、Ctrlキーと一緒にタイプするコントロール文字を区別できると便利なことに気づきました。したがってほとんどの現代的な端末では、これらは同じではありません。つまりTABC-iと異なります。

これら2種類の入力を、キーボードが区別するなら、Emacsも区別することができます。Emacsは特別なキーをtabreturnbackspacelinefeedescapedeleteという名前のファンクションキーとして扱います。これらのファンクションキーは、そのキー自体に何もバインドされていない場合は、対応するASCII文字に自動的に変換されます。結果として、ユーザーもLispプログラマーも、彼らがそうしたいと望まない限りは、これらの区別に注意を払う必要はありません。

(たとえば)TABC-iを区別したくない場合は、ASCII文字のTAB(8進コード011)だけにたいしてバインディングを1つ指定します。これらを区別したいときは、ASCII文字にたいして1つのバインディング、ファンクションキーのtabにたいして別のバインディングを指定します。

通常のASCII端末では、TABC-i(および同じような他のペアー)を区別する方法はありません。なぜなら端末はどちらの場合も同じ文字を送るからです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.3.10 マウスボタンのリバインド

Emacsはマウスボタンを表すためにもLispシンボルを使用します。Emacsで通常のマウスイベントは、クリック(click)イベントです。これはボタンを押して、マウスを移動せずにボタンを離すと発生します。ドラッグ(drag)イベントも取得できます。これはボタンを押したままマウスを移動したとき発生します。ドラッグイベントは、最後にボタンを離したときにも発生します。

基本的なクリックイベントにたいするシンボルは、一番左のボタンがmouse-1、次がmouse-2、…となります。以下は、カレントウィンドウを2番目のマウスボタンで分割するように再定義する方法です:

(global-set-key [mouse-2] 'split-window-below)

ドラッグイベントにたいするシンボルも同様ですが、単語‘mouse’の前にプレフィクス‘drag-’がつきます。たとえば左ボタンでのドラッグはdrag-mouse-1イベントを生成します。

マウスボタンが押されたときに発生するイベントにたいして、バインディングを定義することもできます。これらのイベントは‘drag-’ではなく‘down-’で始まります。このようなイベントは、それらにキーがバインドされているときだけ生成されます。ボタンダウンイベントを受け取った場合、その後に常にそれに対応するクリックまたはドラッグイベントが続きます。

もし望むならシングルクリック、ダブルクリック、トリプルクリックを区別することもできます。ダブルクリックとは、マウスボタンをほぼ同じ場所で2回クリックすることを意味します。最初のクリックは通常のクリックイベントを生成します。2回目のクリックが充分早ければ、かわりにダブルクリックイベントを生成します。ダブルクリックイベントにたいするイベントタイプは、たとえばdouble-mouse-3のように、‘double-’で始まります。

これは同じ場所での2回目のクリックに特別な意味を与えることができることを意味しますが、それは最初のクリックを受け取ったときに実行される、通常のシングルクリックにたいする定義も実行されることを前提にしなければなりません。

これはダブルクリックで行なえることを制限しますが、ユーザーインターフェースデザイナーはこの制限は任意のケースにおいて従うべき制限だと言います。ダブルクリックは、シングルクリックで行なう何かを、よりもっと行なうためのものであるべきです。ダブルクリックイベントにたいするコマンドは、ダブルクリックにたいして追加の作業を処理するべきです。

ダブルクリックイベントにバインディングがない場合、これは対応するシングルクリックイベントに変化します。したがって、特にダブルクリックイベントを定義していない場合、これはシングルクリックコマンドを2回実行します。

Emacsはトリプルクリックイベントもサポートし、それらの名前は‘triple-’で始まります。Emacsはクワドループルクリック(quadruple clicks: 4連クリック)をイベントタイプとして区別しません。3回目以降のクリックは、追加のトリプルクリックイベントを生成します。しかしクリックされた数はすべてイベントリストに記録されるので、Emacs Lispを知っていて、本当にそれを使いたい場合はそれらを区別できます(Click Events in The Emacs Lisp Reference Manualを参照してください)。わたしたちは3連クリックを超えるクリックに明確な意味を与えるのは推奨しませんが、連続するクリックが同じ3つの意味のセットを巡回する — たとえば4連クリックは1クリックに等しく、5連クリックは2連クリックに等しく、6連クリックは3連クリックに等しい、とするのが便利なときがあるかもしれません。

Emacsはドラッグおよびボタンダウンイベントで、複数回ボタンが押されたことも記録します。たとえば、ボタンを2回押して、それからボタンを押したままマウスを移動した場合、Emacsは‘double-drag-’イベントを受け取ります。2回目にボタンを押した瞬間、Emacsは‘double-down-’イベントを受け取ります(そしてすべてのボタンダウンイベントと同様に、なにもバインドされていなければ無視されます)。

変数double-click-timeは、複数回のクリックをグループ化するのに、クリックの間にどれだけの時間経過を許すかを指定します。変数の値の単位はミリ秒です。値がnilの場合、ダブルクリックは検知されません。値がtの場合、時間の制限はありません。デフォルトは500です。

変数double-click-fuzzは、複数回のクリックをグループ化するのに、クリックの間にどれだけマウスが移動できるかを指定します。変数の値はウィンドウ化されたディスプレーではピクセル単位で、テキストモード端末では文字セルの1/8を単位とし、デフォルトは3です。

マウスイベントにたいするシンボルは、修飾キーの状態も示し、‘C-’、‘M-’、‘H-’、‘s-’、‘A-’、‘S-’のプレフィクスが通常つきます。‘double-’や‘triple-’は常に‘drag-’や‘down-’の前にきますが、これらのプレフィクスは常にそれより前にきます。

フレームにはバッファーのテキストを表示しない、モードラインやスクロールバーのような領域が含まれます。スクリーンの特別な領域でマウスボタンが押されたかどうかは、ダミーのプレフィクスキーで知ることができます。たとえばモードラインでマウスをクリックした場合、通常のマウスボタンシンボルの前にプレフィクスキーmode-lineを受け取ります。したがって、以下はモードラインで左ボタンをクリックしたときにscroll-up-commandを実行する方法です:

(global-set-key [mode-line mouse-1] 'scroll-up-command)

以下はダミーのプレフィクスキーと、その意味の完全なリストです:

mode-line

マウスはウィンドウのモードラインにあります。

vertical-line

マウスは横に並んだウィンドウを分ける垂直ラインにあります(スクロールバーを使用している場合は、垂直ラインに表示されます)。

vertical-scroll-bar

マウスは垂直スクロールバーにあります(これはEmacsが現在サポートしているスクロールバーにたいしてだけです)。

menu-bar

マウスはメニューバーにあります。

tab-bar

マウスはタブバーにあります。

tab-line

マウスはタブラインにあります。

header-line

マウスはヘッダーラインにあります。

キーシーケンスにマウスボタンを複数配することもできますが、これは通常行なわれません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.3.11 コマンドの無効化

コマンドを無効にするとは、そのコマンドを対話的に呼び出しユーザーに確認を求めることを意味します。コマンドを無効にする目的は、ユーザーが間違ってコマンドを実行するのを防ぐためです。わたしたちは初心者を混乱させるようなコマンドにたいして、これを行なっています。

無効なコマンドを呼び出そうとすると、Emacsはコマンド名、コマンドのドキュメント、すぐに何を行なうかの手引きを対話的に表示します。その後、Emacsはコマンドを要求されたとおり実行するか、そのコマンドを有効にしてから実行するか、キャンセルするか入力を求めます。コマンドを有効にすると決めた場合は、他の質問 — 永続的に有効にするか、それともカレントセッションでだけ有効にするか — にも応えなければなりません(永続的に有効にする場合、これは自動的に初期化ファイルを編集することにより機能します)。!とタイプして、カレントセッションだけにたいして、すべてのコマンドを有効にすることもできます。

コマンド無効化の直接的なメカニズムは、コマンドにたいするLispシンボルのdisabledプロパティーに非nilをputすることです。以下はこれを行なうLispプログラムです:

(put 'delete-region 'disabled t)

disabledプロパティーの値が文字列の場合、その文字列はコマンドが使用されたときに表示されるメッセージに含まれます。

(put 'delete-region 'disabled
     "It's better to use `kill-region' instead.\n")

初期化ファイルを直接編集するか、初期化ファイルを編集するM-x disable-commandコマンドにより、コマンドを無効にできます。同様にM-x enable-commandはコマンドを永続的に有効にするために、初期化ファイルを編集します。Emacs初期化ファイルを参照してください。

Emacsが-qまたは--no-init-fileオプション(初期化オプションを参照してください)で呼び出された場合、これらのコマンドは初期化ファイルを編集しません。Emacsは初期化ファイルを読み込んでいないので、これを行なうと情報が失われるかもしれないからです。

コマンドが無効にされているかどうかは、それを呼び出すのに使用されるキーとは独立しています。M-xを使用してコマンドを呼び出しても、無効化は適用されます。しかしLispプログラムから関数として呼び出す場合、コマンドの無効化は効力をもちません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.4 Emacs初期化ファイル

Emacsを開始したとき、Emacsは通常、初期化ファイル(initialization file)、短くはinitファイルから、Lispプログラムのロードを試みます。このファイルは、もし存在する場合は、Emacsをどのように初期化するかを指定します。Emacsが~/.emacs.el~/.emacs.d/init.el~/.config/emacs/init.el、またはその他の場所を探すにしても、伝統的に~/.emacsはinitファイルとして扱われます。Emacsがinitファイルを探す方法を参照してください。

Emacsのすべての設定が1つのディレクトリーにあると便利だと思うかもしれません。その場合には~/.emacs.d/init.el、またはXDG互換の~/.config/emacs/init.elを使用する必要があります。

コマンドラインスイッチ‘-q’により、initファイルのロードを抑止でき、‘-u’ (または‘--user’)で、別のユーザーのinitファイルを指定できます(初期化オプションを参照してください)。

デフォルトinitファイルが存在する場合もあります。これはdefault.elという名前のライブラリーで、ライブラリーにたいする標準の検索パスから探されます。Emacsディストリビューションには、そのようなライブラリーは含まれていませんが、あなたのサイトは、ローカルなカスタマイズのためにこれを作成しているかもしれません。このライブラリーが存在する場合、Emacsを開始したときは常にこれがロードされます(ただし‘-q’を指定した場合は除きます)。しかしinitファイルがあれば、それが最初にロードされるので、そこでinhibit-default-initに非nilをセットすれば、デフォルトinitファイルはロードされません。

あなたのサイトにはサイトスタートアップファイル(site startup file)もあるかもしれません。もし存在する場合、これはsite-start.elという名前です。default.elと同様に、Emacsはこのファイルを、Lispライブラリーにたいする標準の検索パスから探します。Emacsはこのライブラリーをinitファイルの前にロードします。このライブラリーのロードを抑止するには、オプション‘--no-site-file’を使用します。初期化オプションを参照してください。わたしたちは何かを変更する場合、site-start.elの使用を推奨しません。これを好まないユーザーもいるからです。変更をdefault.elに記述すれば、ユーザーはもっと簡単にそれをオーバーライドできます。

default.elsite-start.elは、EmacsがLispライブラリーを検索する任意のディレクトリーに配置できます。変数load-path (EmacsのためのLispコードによるライブラリーを参照してください)は、これらのディレクトリーを指定します。多くのサイトはこれらのファイルを、Emacsのインストールディレクトリーの中の、site-lisp(たとえば/usr/local/share/emacs/site-lisp)に配置します。

initファイルにたいするバイトコンパイル(Byte Compilation in the Emacs Lisp Reference Manualを参照してください)は推奨されていません。一般的にこれは開始時のスピードの大幅な改善はせず、ファイルをリコンパイルするのを忘れたときに問題を起こすことが多いのです。よりよい解決策は、Emacsサーバー(サーバーとしてのEmacsの使用を参照してください)を使用して、Emacsを開始する回数を減らすことです。initファイルで多くの関数を定義している場合、これらを(バイトコンパイルされた)別のファイルに移動して、それをinitファイルでロードします。

マイナーなカスタマイズを超えるような、実際のEmacs Lispプログラムを記述するつもりなら、Emacs Lisp Reference Manualを読むべきでしょう。 Emacs Lisp in the Emacs Lisp Reference Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.4.1 initファイルの構文

initファイルには、1つ以上のLisp式が含まれています。式のそれぞれは引数をともなう関数名で、それらはすべてカッコで括られています。たとえば(setq fill-column 60)は、変数fill-column(テキストのフィルを参照してください)を60にセットするために、関数setqを呼び出します。

setqで任意のLisp変数をセットできますが、initファイルの特定の変数にたいして、setqは多分あなたの望むとおりには動作しないでしょう。いくつかの変数はsetqでセットしたとき、自動的にバッファーローカルになります。あなたが望むのは、initファイルでデフォルト値をセットすることなので、setq-defaultを使用します。マイナーモードのカスタマイズ可能な変数のいくつかは、それをCustomizeでセットすると、そのモードを有効にするために特別なことを行ないますが、通常のsetqではそれを行ないません。initファイルでモードを有効にするには、マイナーモードコマンドを呼び出します。以下のセクションには、これらの両方の方法の例があります。

setqの2番目の引数は、変数にたいする新しい値の式です。これには、定数、変数、関数呼び出し式を指定できます。initファイルでは、定数が使用される場合がほとんどです。これは以下のとおりです:

数字:

数字は10進で記述され、オプションで最初にマイナス記号がある場合があります。

文字列:

Lispの文字列構文は、少数の例外を除き、Cの文字列構文と同じです。文字列定数の開始と終了にはダブルクォートを使用します。

文字列には改行を含む、特別なリテラル文字を含めることができます。しかし、それらにたいして、バックスラッシュシーケンスを使う方が明確になる場合が多くあります。改行は‘\n’、バックスペースは‘\b’、キャリッジリターンは‘\r’、タブは‘\t’、フォームフィード(control-L)は‘\f’、エスケープは‘\e’、バックスラッシュは‘\\’、ダブルクォートは‘\"’、そして8進コードがoooの文字は‘\ooo’です。バックスラッシュとダブルクォートだけは、バックスラッシュシーケンスが必須な文字です。

\C-’はコントロール文字のプレフィクスとして使用でき、‘\C-s’はASCIIのcontrol-Sです。‘\M-’はメタ文字のプレフィクスとして使用でき、‘\M-a’はMeta-Aで、‘\M-\C-a’はCtrl-Meta-Aです。

initファイルに非ASCII文字を含めるための情報は、initファイル内の非ASCII文字を参照してください。

文字:

Lispの文字定数の構文は、たとえば?x?\n?\"?\)のように、文字‘?’と、その後ろに文字または‘\’で始まるエスケープシーケンスからなります。Lispでは、文字列と文字は置き換え可能ではないことに注意してください。あるコンテキストでは一方が、他のコンテキストでは他方が要求されます。

ASCII文字を送るキーにコマンドをバインドする情報については、initファイル内の非ASCII文字を参照してください。

True:

tは“true(真)”という意味です。

False:

nilは“false(偽)”という意味です。

その他のLispオブジェクト:

シングルクォートに続けてLispオブジェクトを記述します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.4.2 initファイルの例

以下はLisp式で一般的に行ないたいような事柄の例です:


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.4.3 端末固有の初期化

各端末タイプは、Emacsをその端末タイプで実行するときEmacsにロードされるLispライブラリーをもつことができます。termtypeという名前の端末タイプにたいして、そのライブラリーはterm/termtypeと呼ばれます(term-file-aliasesの連想配列(association list)の中に(termtype . alias)という形式のエントリーがある場合、Emacsはtermtypeのところにaliasを使用します)。このライブラリーは通常のようにディレクトリーload-pathを検索することにより見つけられ、サフィックスは‘.elc’と‘.el’です。通常はほとんどのEmacsライブラリーがあるディレクトリーの、サブディレクトリーtermにあります。

端末固有ライブラリーの通常の目的は、input-decode-mapを使用して、その端末のファンクションキーで使用されるエスケープシーケンスを、より意味のある名前にマップすることです。これがどのように行なわれるかの例は、ファイルterm/lk201.elを参照してください。多くのファンクションキーは、Termcapデータベースの情報にしたがい、自動的にマップされます。端末固有ライブラリーは、Termcapが指定しないファンクションキーだけをマップすればよいのです。

端末タイプがハイフンを含む場合、最初のハイフンの前の部分だけが、ライブラリーの選択で意味をもちます。したがって端末タイプ‘aaa-48’と‘aaa-30-rv’は、両方ともライブラリーterm/aaaを使用します。ライブラリー内のコードは、(getenv "TERM")を使用して、完全なタイプ名を取得できます。

ライブラリーの名前は、変数term-file-prefixの値と、端末タイプを結合することにより構築されます。.emacsterm-file-prefixnilにセットすることにより、端末固有ライブラリーのロードを抑止できます。

Emacsは初期化の最後、.emacsと端末固有ライブラリーの両方が読み込まれた後に、フックtty-setup-hookを実行します。端末固有ライブラリーの任意の部分をオーバーライドしたい場合や、ライブラリーをもたない端末の初期化を定義したい場合は、このフックにフック関数を追加します。フックを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.4.4 Emacsがinitファイルを探す方法

Emacsは通常はホームディレクトリー配下でinitファイルを探します。Emacs初期化ファイルを参照してください。

Emacsは~/.emacs.el~/.emacs~/.emacs.d/init.elというファイル名で、この順序でinitファイルを探します。これらの名前のどれを使用するか選択できます(ホームディレクトリー直下の場所だけが場所のベース名として先頭にドットをもつことに注意)。

EmacsはXDG互換の場所でもinit.elを探します。デフォルトはディレクトリー~/.config/emacsです。これは環境変数XDG_CONFIG_HOMEをセットしてオーバーライドできます。この値はデフォルトのXDG initファイルの名前の~/.configを置き換えます。しかし~/.emacs.d~/.emacs~/.emacs.elが存在する場合には常に優先されます。これはXDGロケーションを使用するためには、それらの削除やリネームを行わなければならないことを意味します。

XDGロケーションと~/.emacs.dがいずれも存在しなければEmacsが~/.emacs.dを作成(したがって以降の呼び出しの間もそれが使用される)することにも注意してください。

Emacsは使用を決定したディレクトリーをuser-emacs-directoryんセットします。

これがたとえ古いバージョンのEmacsにたいする後方互換性のためだとしても、モダンなPOSIXプラットフォームは初期化ファイルを~/.configの配下に配置することを優先するので、誤ったinitファイルに起因する問題のトラブルシューティングやinitファイルコレクションのアーカイブはそのディレクトリーのリネームにより行うことができます。古いバージョンのEmacsがそれらのカレントのデフォルト位置で設定ファイルを見つけるのを助けるために、以下のEmacs Lispコードを実行することができます:

(make-symbolic-link ".config/emacs" "~/.emacs.d")

しかしsuで開始されたシェルからEmacsを実行して環境変数XDG_CONFIG_HOMEが未セットなら、Emacsは現在の見かけのユーザーではなく、あなた自身の初期化ファイルを探すことを試みます。このアイデアは、たとえスーパーユーザーとして実行しているときでも、自分のエディターカスタマイズを取得するべきだという考えです。

より正確には、最初にEmacsはどのユーザーのinitファイルを使用するか決定します。Emacsは環境変数LOGNAMEUSERからユーザー名を取得します。どちらも存在しない場合、実効ユーザーIDを使用します。ユーザー名が実ユーザーIDとマッチしたとき、EmacsはHOMEを使用します。そうでない場合、Emacsはシステムのユーザーデータベースの、そのユーザー名に対応するホームディレクトリーを探します。

簡略化のためにEmacsドキュエントの残りの部分では、一般的にはinitファイルにたいして単にカレントデフォルト位置~/.emacs.d/init.elを使用します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.4.5 initファイル内の非ASCII文字

initファイルの文字列やキーバインディングに、アクセントつき文字などの非ASCII文字が含まれる場合、それは言語やコーディングシステムに問題を起こすかもしれません。

initファイルで非ASCII文字を使用したい場合、initファイルの最初の行に‘-*-coding: coding-system-*-タグを配して、問題となる文字をサポートするコーディングシステムを指定するべきです。コーディングシステムの認識を参照してください。なぜなら、非ASCIIテキストのでコーディングにたいするにたいするデフォルトのコーディングシステムは、Emacsがinitファイルでそのような文字列を使用する個所を読み込むまでに、セットアップされていないかもしれないので、Emacsがその文字列を間違ってデコードする可能性があるからです。‘-*-coding: coding-system-*-を記述した場合、set-language-environmentを呼び出す等、他の方法でコーディングシステムを変更するEmacs Lispコードの追加は避けるべきです。

ASCIIキーをバインドするには、ベクターを使用しなければなりません(initファイル内でのキーのリバインドを参照してください)。非ASCII文字はメタキーとして解釈されるので、文字列構文は使用できません。たとえば:

(global-set-key [?char] 'some-function)

charを挿入するには、C-qとタイプしてからバインドしたいキーをタイプします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.4.6 早期初期化ファイル

Emacsのほとんどのカスタマイズは通常のinitファイルに配置するべきです。Emacs初期化ファイルを参照してください。しかしEmacsのスタートアップで通常のinitファイルを処理するより早い段階で効果をもつカスタマイズが望ましい場合があります。そのようなカスタマイゼーションは早期initファイル~/.config/emacs/early-init.elまたは~/.emacs.d/early-init.elに配置することができます。このファイルはパッケージシステムとGUIの初期化前にロードされるので、フレームの外見やpackage-enable-at-startuppackage-load-listpackage-user-dirのようなパッケージ初期化プロセスに影響を与える変数をカスタマイズできます。新たなパッケージのインストールだけに影響があるpackage-archivesのような変数やインストール済みパッケージを利用可能にするプロセス以外は正規のinitファイルでカスタマイズできます。パッケージのインストールを参照してください。

通常のinitファイルに残すことができるカスタマイゼーションをearly-init.elに移動することは推奨できません。早期initファイルはGUIの初期化前に読み込まれるので。GUI機能に関連するカスタマイゼーションはearly-init.elでは信頼性をもって機能しないからです。対照的に通常のinitファイルはGUIの初期化後に読み込まれます。GUI機能に依存するカスタマイズを早期initファイルで行わなければならない場合には、Emacsがスタートアップ時に提供するwindow-setup-hooktty-setup-hookのようなフックを外して実行してください。フックを参照してください。

早期initファイルの詳細な情報はInit File in The Emacs Lisp Reference Manualを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

49.5 永続的に認証情報を保つ

他のサービスに接続するEmacsパッケージには、たとえばGnus in The Gnus ManualTramp in The Tramp Manualで見られるように、認証(パスワードの入力を参照)を要求するものがいくつかあります。同じユーザー名とパスワードを何度も提供するのは煩わしいかもしれないので、Emacsはauth-sourceライブラリーを通じて、認証情報を永続的に保つことを提案します。

デフォルトでは、認証情報はファイル~/.authinfo~/.authinfo.gpg、または~/.netrcから取得されます。これらのファイルは以下のような、ftpプログラム由来として知られる、netrcファイルと同様の構文をもちます:

machine mymachine login myloginname password mypassword port myport

同様にauth-sourceライブラリーは現在のところ、クラシックなnetrcバックエンド、JSONファイル、Secret Service API、および標準的なUnixパスワードマネージャーのpassという、複数のストレージバックエンドをサポートしています。

これらの選択肢はすべて、ユーザーオプションauth-sourcesを通じてカスタマイズできます。Emacs auth-source in Emacs auth-sourceを参照してください。

設定されたバックエンドで見つからないようなパスワードがインタラクティブに入力された場合、いくつかのバックエンドはそれの永続的な保存を提案します。これはユーザーオプションauth-source-save-behaviorをカスタマイズして、変更することができます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

50 中止と中断

C-g
C-Break (MS-DOSのみ)

quit(中止): コマンドの実行、または途中までタイプしたコマンドをキャンセルします。

C-]

最内の再帰編集レベル(recursive editing level)をabort(中断)して、それを呼び出したコマンドをキャンセルします(abort-recursive-edit)。

ESC ESC ESC

quitまたはabortのどちらか、意味のあるほうを行ないます(keyboard-escape-quit)。

M-x top-level

現在実行中のすべての再帰編集レベルをabortします。

C-/
C-x u
C-_

バッファー内容にたいする直前の変更をキャンセルします(undo)。

完了する前のコマンドをキャンセルする方法は2つあります。それはC-gによるquitと、C-]M-x top-levelによるabortです。quitは途中までタイプしたコマンド、または実行中のコマンドをキャンセルします。abortは再帰編集レベルを抜けて、再帰編集を呼び出したコマンドをキャンセルします(再帰編集レベルを参照してください)。

C-gによるquitは、途中までタイプしたコマンドから抜けたり、望まない数引数から抜け出す方法です。さらに、あるコマンドが実行中の場合、C-gは比較的安全にコマンドを停止します。たとえば、長い時間がかかるkillコマンドをquitした場合、すべてのテキストがバッファーに残るか、またはすべてのテキストがkillリングに残るか、もしかしたらその両方かもしれません。リージョンがアクティブの場合、Transient Markモードがオフでなければ、C-gはマークを非アクティブにします(Transient Markモードを無効にするを参照してください)。インクリメンタル検索の途中では、C-gは特別に振る舞います。検索を抜けるには2回連続してC-gをタイプします。詳細は、インクリメンタル検索を参照してください。

MS-DOSでは、文字C-BreakC-gのような文字の役割をします。MS-DOSではユーザーとの相互作用を行なうとき以外に、実行中のコマンドでC-gを認識できないのが理由です。それとは対照的に、C-Breakは常に認識できます。 MS-DOSでのキーボードの使用方法を参照してください。

C-gをタイプした瞬間に変数quit-flagtにセットすることにより、C-gは機能します。Emacs Lispはこの変数を頻繁にチェックして、これが非nilのときはquitします。Emacsが入力待ちのときにタイプしたときだけ、C-gは実際にコマンドとして実行されます。この場合に実行されるコマンドは、keyboard-quitです。

テキスト端末では、最初のC-gが認識される前に2回目のC-gでquitした場合は、emergency escape(緊急エスケープ)機能がアクティブになり、シェルに戻ります。緊急エスケープを参照してください。

quitできない状況もいくつか存在します。Emacsがオペレーティングシステムが何か行なうのを待つような場合、待ちが発生する箇所で特定のシステムコールにたいして、Emacsが特別な対処をしない場合、quitは不可能です。ユーザーがquitしたいと望むようなシステムコールにたいして、わたしたちはこれを行なっていなすが、それでも処理できないケースに出会う場合もあります。とても一般的なケースの1つは、NFSを使用したファイルへの入出力待ちです。Emacs自体はquitする方法を知っていますが、多くのNFS実装は、NFSサーバーがハングしたとき、ユーザープログラムがNFSを待つのを止めることを、単に許していません。

C-] (abort-recursive-edit)によるabortは、再帰編集レベルを抜けて、それを呼び出したコマンドをキャンセルするのに使用されます。C-gによるquitはこれを行なわず、行なうこともできません。なぜならこれは再帰編集レベルので、途中までタイプされたコマンドをキャンセルするからです。どちらの操作も有用です。たとえば再帰編集中に、数引数を入力するためにC-u 8とタイプした場合、C-gでその引数をキャンセルして、その再帰編集レベルに留まることができます。

シーケンスESC ESC ESC (keyboard-escape-quit)は、quitかabortのどちらかを呼び出します(多くのPCプログラムでESCは“抜け出す”ことを意味するので、このような定義にしました)。これはC-gのように、プレフィクス引数のキャンセル、選択されたリージョンのクリアー、また問い合わせつき置換から抜け出すこともできます。またC-]のように、ミニバッファーから抜け出したり、再帰編集から抜け出すこともできます。これはC-x 1のように、フレームの複数ウィンドウ分割から抜け出すこともできます。これが行なうことができないのは、実行中のコマンドの停止です。これは通常のコマンドとして実行されるので、Emacsが次のコマンドのために準備ができるまで、これを認識しないからです。

コマンドM-x top-levelは、現在の再帰編集レベルからすべての再帰編集レベルを抜けるための、充分な回数のC-]コマンドと等価です。ミニバッファーがアクティブなときは、ミニバッファーも抜けます。C-]は、1度に1レベル再帰編集レベルを抜けますが、M-x top-levelは、1度ですべての再帰編集レベルを抜けます。C-]M-x top-levelの両方とも、他のすべてのコマンドと同様(そしてC-gとは異なり)、Emacsがコマンドにたいして準備ができているときだけ効果があります。C-]は通常のキーで、このキーが意味をもつのは、それがキーマップでバインドされているときだけです。再帰編集レベルを参照してください。

厳密に言えばC-/ (undo)はキャンセルコマンドではありませんが、すでに実行を終えたコマンドをキャンセルすると考えることができます。undo機能についての詳細は、Undo(取り消し)を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

51 Emacsのトラブルへの対処

このセクションでは、キーボードコードのミクスアップ(mixup)、文字化け、メモリー不足、クラッシュやハングなど、Emacsが期待したとおりに動作しない状況の認識と対処法について説明します。

Emacsでバグを見つけたと思ったら何をすればよいかについては、バグの報告を参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

51.1 DELで削除できない場合

すべてのキーボードには多くのキーがありますが、通常BACKSPACEとラベルされたキーは、最後にタイプした文字を削除するのに使用されます。Emacsでは、このキーはDELに等しいと想定されています。

グラフィカルなディスプレーでEmacsを開始したとき、EmacsはどのキーがDELなのか自動的に決定します。いくつかの特殊なケースでは、Emacsがシステムから間違った情報を取得して、BACKSPACEが後方ではなく前方に削除する場合があります。

Deleteというキーをもつキーボードもあります。これは通常、前方に削除するために使用されます。Emacsでこのキーが後方に削除を行なう場合も、Emacsが間違った情報 — ただし反対の意味の — を受け取ったことを意味します。

テキスト端末で、BACKSPACEが文字を削除するかわりに、Control-hのようなヘルプコマンドのプロンプトを表示する場合、それはこのキーが実際は‘BS’文字を送っていることを意味します。EmacsはBSDELと扱うべきですが、そうしていないのです。

これらのケースのすべてにおいて、直ちに改善できることは同じでで、それはコマンドM-x normal-erase-is-backspace-modeを使用する方法です。これはEmacsがDELの処理をサポートする2つのモードを切り替えるので、もしEmacsが間違ったモードで開始された場合、正しいモードに切り替えることができます。テキスト端末では、BSDELとして扱われる場合にヘルプを見たいときは、C-hのかわりにF1を使用します。C-?が文字コード127を送る場合は、このキーも機能するでしょう。

すべてのEmacsセッションで問題を解決するには、初期化ファイル(Emacs初期化ファイルを参照してください)に以下の行の1つを記述します。上記の最初のケースでは、BACKSPACEが後方ではなく前方に削除を行なうので、BACKSPACEDELとして動作するように、以下の行を使用します:

(normal-erase-is-backspace-mode 0)

他の2つのケースでは、以下の行を使用します:

(normal-erase-is-backspace-mode 1)

すべてのEmacsセッションで問題を解決する別の方法は、変数normal-erase-is-backspaceをカスタマイズする方法です。BSまたはBACKSPACEDELとなるようにモードを指定するには値t、他のモードにたいしてはnilを指定します。Easy Customizationインターフェースを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

51.2 再帰編集レベル

再帰編集レベルは、Emacsの重要かつ便利な機能ですが、それを理解していない場合は、うまく機能していないように見えるかもしれません。

モードラインの、メジャーモードやマイナーモードを囲む丸カッコ(parentheses)の周囲に、角カッコ(square brackets)‘[…]’がある場合、それは再帰編集レベルにいることを意味します。もしこれが目的でない場合、またはその意味を理解していない場合は、すぐに再帰編集レベルを抜けるべきです。これを行なうには、M-x top-levelとタイプします。再帰編集レベルを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

51.3 スクリーン上のゴミ

テキスト端末でテキストが間違って見える場合、まず行なうことはバッファーのテキストが間違っていないか確かめることです。画面全体を再描画するために、C-l (recenter-top-bottom)とタイプしてください。この後でスクリーンが正常に表示される場合、問題は前のスクリーンの更新にあります(そうでない場合は、以下のセクションを参照してください)。

ディスプレー更新の問題は、使用している端末にたいする間違ったterminfoエントリーの結果であることがしばしばあります。Emacsディストリビューションのファイルetc/TERMSは、この種の既知の問題にたいする解決を与えます。INSTALLのセクションの中の1つは、これらの問題にたいする一般的なアドバイスを含みます。正しいterminfoエントリーを使用しているようなら、それはterminfoエントリーにバグがあるか、特定の端末タイプで発生するEmacsのバグである可能性があります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

51.4 テキスト内のゴミ

C-lがそのテキストが間違っていることを示す場合、最初に実際の結果を生成するのに何のコマンドをタイプしたか見るために、C-h l (view-lossage)とタイプします。それからC-x u (undo)を使用して、正しいと思える状態まで、1つずつ変更をundoします。

バッファーの先頭または最後の大量のテキストが失われているように見える場合は、モードラインに単語‘Narrow’が表示されていないかチェックします。もしこれが表示されている場合、表示されていないテキストはまだ存在しますが、一時的に制限されています。これに再びアクセスできるようにするには、C-x n w (widen)とタイプします。ナローイングを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

51.5 メモリー不足

Virtual memory exceeded’というエラーメッセージが表示された場合は、C-x s (save-some-buffers)で変更されたバッファーを保存してください。この方法は、バッファーを保存するのに最小限の追加メモリーを必要とします。Emacsはこのエラーが発生したときでも利用可能な予備メモリーを保持しており、それはC-x sが処理を完了するのに充分なはずです。予備メモリーを使用したとき、モードラインの先頭に‘!MEM FULL!’が表示された場合、それは予備メモリーも使い切ったことを意味します。

変更されたバッファーを変更したら、このEmacsセッションを終了して別のセッションを開始するか、M-x kill-some-buffersを使用して、カレントEmacsジョブのスペースを開放できます。これにより充分なスペースが開放された場合、予備メモリーは再充填され、モードラインから‘!MEM FULL!’の表示が消えます。これは同じEmacsセッションで、安全に編集を継続できることを意味します。

メモリー不足のときは、バッファーの保存やkillにM-x buffer-menuを使用しないでください。Buffer Menuはかなりの量のメモリーを必要とするので、予備メモリーの供給では不充分でしょう。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

51.6 Emacsがクラッシュしたとき

Emacsはクラッシュを前提としていませんが、もしクラッシュした場合、exitする前にクラッシュレポート(crash report)を生成します。クラッシュレポートは標準エラーストリームにプリントされます。EmacsがGNUシステムまたはUnixシステムでグラフィカルなデスクトップから開始された場合、標準エラーストリームは一般的に~/.xsession-errorsのようなファイルにリダイレクトされるので、そこでクラッシュレポートを探すことができます。MS-Windowsでは、クラッシュレポートは標準エラーストリームに加え、Emacsプロセスのカレントとディレクトリーの、emacs_backtrace.txtという名前のファイルに書き込まれます。

クラッシュレポートのフォーマットは、プラットフォームに依存します。GNU Cライブラリーを使用するいくつかのプラットフォームでは、クラッシュレポートには、クラッシュ前の実行状態を説明するbacktraceが含まれ、これはクラッシュをデバッグする助けとなります。以下はGNUシステムの例です:

Fatal error 11: Segmentation fault
Backtrace:
emacs[0x5094e4]
emacs[0x4ed3e6]
emacs[0x4ed504]
/lib64/libpthread.so.0[0x375220efe0]
/lib64/libpthread.so.0(read+0xe)[0x375220e08e]
emacs[0x509af6]
emacs[0x5acc26]
…

数字‘11’ はクラッシュにたいするシステムのシグナル番号 — このケースではsegmentation fault — です。16進数字はプログラムのアドレスで、これによりデバッグツールを使用して、ソースコード行に関連付けることができます。たとえばGDBコマンド‘list *0x509af6’は、‘emacs[0x509af6]’エントリーにたいするソースコード行をプリントします。システムにaddr2lineユーティリティーがある場合、以下のシェルコマンドはソースコードの行番号とともに、backtraceを出力します:

sed -n 's/.*\[\(.*\)]$/\1/p' backtrace |
  addr2line -C -f -i -p -e bindir/emacs-binary

ここで、backtraceはbacktraceのコピーを含むテキストファイル名、bindirはEmacs実行可能ファイルを含むディレクトリー名、emacs-binaryはEmacs実行可能ファイル(GNUおよびUnixシステムでは通常はemacs、MS-WindowsおよびMS-DOSではemacs.exe)です。-pオプションがない古いバージョンのaddr2lineでは、このオプションを省略してください。

coreファイルをサポートするシステムでは、Emacsはオプションでコアダンプ(core dump)を生成します。コアダンプはクラッシュ前のプログラムの状態に関する多くのデータを含むファイルで、通常GDBのようなデバッガーにロードして調べられます。多くのプラットフォームでは、コアダンプはデフォルトで無効になっているので、(たとえばシェルのスタートアップスクリプトで)シェルコマンド‘ulimit -c unlimited’を実行して、明示的に有効にしなければなりません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

51.7 クラッシュ後のリカバリー

Emacs、またはコンピューターがクラッシュした場合、クラッシュしたとき編集していたファイルを、自動保存ファイルからリカバリーすることができます。これを行なうには、再びEmacsを開始して、コマンドM-x recover-sessionとタイプしてください。

このコマンドはm最初に中断されたセッションのファイルを、ファイルの日付とともにリストするバッファーを表示します。そこからリカバリーするファイルを、選択しなければなりません。通常リカバリーしたいファイルは、一番最近のセッションでしょう。選択したファイルにポイントを移動して、C-c C-cとタイプしてください。

その後recover-sessionは、そのセッション中に編集していた各ファイルについて、検討を行ないます。そのようなファイルそれぞれについて、そのファイルをリカバリーするか尋ねるのです。あるファイルにたいしてyと応えると、コマンドはファイルとファイルの自動保存ファイルの日付を表示して、再度そのファイルをリカバリーするか尋ねます。この2回目の質問にたいして同意するには、yesと応えなければなりません。yesと応えた場合、Emacsはそのファイルをvisitしますが、テキストは自動保存ファイルから取得します。

recover-sessionが終了すると、リカバリーを選択したファイルがEmacsバッファーに表示されます。そこでファイルを保存する必要があります。それらを保存することだけが、そのファイル自身を更新するのです。

ファイルに関連付けられていないバッファーをリカバリーしたいときや、自動保存が重要な更新を記録するほど最新でなかった場合、最後の手段として — コアダンプが保存されていて、Emacsの実行ファイルからデバッグシンボルがストリップされていないという条件の元に — コアダンプからそれらを取得するために、GDB(GNUデバッガー)でetc/emacs-buffer.gdbスクリプトを使用することができます。

コアダンプを入手したら、すぐにcore.emacsのような別の名前にリネームします。これにより、他のクラッシュによるコアダンプの上書きを防ぎます。

このスクリプトを使用するには、Emacs実行ファイル名とコアダンプのファイル名を、‘gdb /usr/bin/emacs core.emacs’のように指定します。(gdb)プロンプトで、‘source /usr/src/emacs/etc/emacs-buffer.gdb’としてリカバリースクリプトをロードします。それから利用可能なバッファーを見るために、コマンドybuffer-listとタイプします。これは各バッファーにたいして、バッファー番号をリストします。バッファーを保存するには、ysave-bufferを使用します。ここでバッファー番号とそのバッファーを書き込むファイル名を指定します。すでに存在するファイル名を使用するべきではありません。ファイルがすでに存在する場合、このスクリプトはそのファイルの古い内容のバックアップを作成しません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

51.8 緊急エスケープ

テキスト端末では、1回目のC-gにたいしてEmacsが実際に反応してquitする前に、2回目のC-gをタイプすると、緊急エスケープ(emergency escape)が、Emacsを即座にサスペンドします。これにより、どんなにひどくハングしていても、常にGNU Emacsを抜け出すことができます。物事が正しく処理されている場合、Emacsは最初のC-gを素早く認識・処理するので。2回目のC-gは緊急エスケープを引き起こしません。しかし何らかの問題が、Emacsが最初のC-gを処理するのを妨げる場合、2回目のC-gでシェルに戻ります。

緊急エスケープによるサスペンドからEmacsを再開する場合、サスペンド前に行なっていた何かに戻る前に、Emacsは回復の報告と、以下の2つの質問をします:

Emacs is resuming after an emergency escape.
Auto-save? (y or n)
Abort (and dump core)? (y or n)

質問に応えるには、それぞれにたいしてyまたはnの後に、RETをタイプします。

Auto-save?’にたいしてyと応えると、自動保存が有効なすべての編集されたバッファーの自動保存を、即座に行ないます。nと応えると、これをスキップします。この質問は、Emacsが安全に自動保存を行えないような、何らかの状況にある場合は省略されます。

Abort (and dump core)?’にたいしてyと応えると、Emacsはクラッシュしてコアダンプします。これは専門家(wizard)が、なぜEmacsが最初のC-gでquitしなかったかを見つけ出すことを可能にします。コアダンプの後、実行は継続されません。

この質問にnと応えた場合、Emacsは実行を再開します。運がよければ、Emacsは最終的にquit要求を行なうでしょう。そうでない場合、連続してC-gをタイプして、緊急エスケープを再度呼び出します。

実際はEmacsがハングしているのではなく、遅いだけの場合、本当に意味するところを意図せずに、2連C-gの機能を呼び出してしまうかもしれません。この場合は、2つの質問の両方にnを応えれば、前の状態に戻ることができます。やがて要求したquitが行なわれるでしょう。

緊急エスケープはテキスト端末だけでアクティブになっています。グラフィカルなディスプレーでは、マウスを使用してEmacsをkillしたり、他のプログラムに切り替えることができます。

MS-DOSでは緊急エスケープを発生させるために、C-Breakを2回タイプしなければなりません — しかしシステムコールがハングしたり、EmacsがCコードのタイトなループにハマっているときは機能しないケースがあります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

51.9 長い行

種々の理由(いくつかはEmacsの再表示コードと処理する可能性がある複雑な範囲が根本にあり、それ以外は稀な状況では同様に調整されないモードと機能にある)により、非常に長い行が存在するとEmacsのパフォーマンスは貧弱になり得ます(“非常に長い”とは通常は少なくとも数千文字を意味する)。

特に問題となるのは非常に長い行のファイルをvisitした時点でEmacsが長時間“hang”するかもしれないことです。これはso-longライブラリーを有効にして緩和される可能性があります。このライブラリーは異常に長い行を含むファイルのvisit時に検知して、その状況下で低速化をもたらす原因となる機能を無効化するステップを実行します。このライブラリーを有効にするにはM-x global-so-long-mode RETとタイプするか、initファイルでglobal-so-long-modeをオンにしたり(Emacs初期化ファイルを参照)、global-so-long-modeオプションをカスタマイズしてください。変数so-long-actionをカスタマイズすることによって、このモードの操作を調整できます。

so-longライブラリーは長い行をもつバッファーでの移動や編集の際にもパフォーマンスを有意に改善できます。依然として行が長くなるほどパフォーマンスはおそらく劣化するでしょうが、それにも関わらずライブラリーの使用によって実質的に改善される可能性があります。

このライブラリーのドキュメントの閲覧と、有効化と設定の方法に関する詳細はM-x so-long-commentaryを使用してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

52 バグの報告

Emacsでバグを見つけたと思ったときは、それを報告してください。それをfixすることは約束できませんし、それがバグであると常に認める訳ではありませんが、もちろんそれについて知りたいのです。追加したいと考える機能についても、同じことが言えます。以下のセクションは、有効なバグレポートを作成する助けとなるでしょう。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

52.1 既存のバグレポートの既知の問題を読む

バグを報告する前に、少しでも可能なら、それが既知のものか確認してください。実際には、それがもっと後のEmacsリリースや、Emacsの開発バージョンですでにfixされているかもしれません。以下は、既知の問題について読むことができる、主な場所のリストです:


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

52.2 バグがあったとき

Emacsが不正なメモリー位置にアクセスする場合(“segmentation fault”と呼ばれます)、または(“disk full”のようなメッセージではなく)プログラムに問題があることを示す、オペレーティングシステムのエラーメッセージとともに終了する場合、それは確実にバグです。

Emacsがバッファーの内容を正しく対応して表示しないとき、それはバグです。しかしバッファーのナローイング(ナローイングを参照してください)チェックするべきです。これはバッファーの一部を隠して、表示される方法を変更できるので、バグではありません。

コマンドが永久に完了しないなら、それはバグですが、本当にEmacsのせいか確認しなくてはなりません。コマンドの中には単に長時間かかるものがいくつかあります。C-g (MS-DOSではC-Break)をタイプしてから、C-h lで、Emacsが受け取った入力が、あなたがタイプしようと意図したものなのか確認します。その入力が、あなたが素早く処理されるべきだとわかっているものだった場合は、バグを報告してください。そのコマンドが長時間かかるものか判らない場合は、マニュアルを調べるか、協力してくれる人に尋ねてください。

あなたの親しんでいるコマンドが、コマンドの通常の定義が正当なのに、Emacsのエラーメッセージを表示する場合、それはおそらくバグです。

コマンドが間違ったことを行なうなら、それはバグです。しかしそのコマンドが何を行なうべきか確実に知っているか確認してください。そのコマンドに詳しくない場合、コマンドは実際は正しく動いているのでしょう。疑うなら、コマンドのドキュメント(コマンドと変数名のヘルプを参照してください)を参照してください。

あるコマンドの意図された定義が、それを編集するための最良の定義ではないこともあります。これはとても重要な問題の一種ですが、判断の問題でもあります。いくつかの既存の機能にたいする無知から、そのような決定を行なうのは簡単でもあります。通常の方法でドキュメントをチェックして、それを理解したと確信し、あなたがやりたいことが不可能だと確実に判るまでは、そのような問題にたいして不満を言わないのが、おそらく最良です。他のEmacsユーザーにも尋ねてみましょう。マニュアルを注意深く読んだ後でも、そのコマンドが何を想定しているか確信がもてないときは、不明解な単語をindex(索引)やglossary(用語集)でチェックしましょう。

注意深くマニュアルを読んだ後でも、そのコマンドが何を行なうべきか判らないとき、それは報告すべきマニュアルのバグであることを示します。Emacsのエクスパートでない人 — あなたを含めて — にたいして、すべてを明解にするのがマニュアルの役目です。プログラムのバグと同様に、ドキュメントのバグレポートは重要です。

関数や変数のビルトインドキュメントがマニュアルと異なる場合、どちらか一方が間違っていなければならないので、これはバグです。

Emacsの一部ではないパッケージについての問題は、そのパッケージの開発者にそれらを報告することにより開始したほうが良いでしょう。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

52.3 バグレポートの理解

バグがあると判断したときは、それを報告すること、そして有用な方法で報告することが重要です。もっとも有用なのは、Emacsを起動するシェルコマンドから、問題が発生するまでに、何のコマンドをタイプしたかの正確な記述です。

バグレポートのもっとも重要な原理は、事実を報告することです。仮定や口頭の説明は、詳細な生データの代替にはなりません。事実の報告は簡単ですが、多くの人は事実のかわりに仮定の説明をしようと懸命に努め、それを報告するのです。その説明がEmacsが実装されている方法にたいする仮定にもとづく場合、それらは使い道がありません。その一方で事実の欠落により、わたしたちはバグについての実際の情報を得られないでしょう。実際に問題をデバッグして、推定を超える説明を報告したい場合、それは有用です — しかし、どうか生の事実も同様に含めてください。

たとえば、C-x C-f /glorp/baz.ugh RETとタイプして、ファイルをvisitしたとき、そのファイルが偶然大きい(とあなたは知っている)ファイルで、Emacsが‘I feel pretty today’と表示したとします。バグレポートにはすべての情報が必要になります。あなたは問題がファイルのサイズにあると仮定して、“大きなファイルをvisitしたら、Emacsが‘I feel pretty today’と表示します”、などと報告すべきではありません。これはわたしたちが“推測説明(guessing explanations)”と呼ぶものです。ファイル名に‘z’があるという事実が、問題の原因かもしれません。もしそうなら、あなたの報告を受け取ったとき、わたしたちは大きなファイルで問題の再現を試み、それらのファイル名にはおそらく‘z’が含まれておらず、問題を確認できないでしょう。名前に‘z’が含まれるファイルをvisitしてみるべきだと、推測できる方法はありません。

C-x C-fのではなく、“ファイルをvisit”とさえ言うべきではありません。同様にテキストを入力する方法では、“その行に3文字あるとき”ではなく、“RET A B C RET C-pとタイプした後”と書いてください。

可能なら、すぐにバグを再現するためにemacs -Q(Emacsは初期のカスタマイズなしで開始されます。初期化オプションを参照してください)でEmacsを呼び出して、バグを発生させるステップを繰り返してみてください。この方法でバグを再現できたら、あなたの個人的なカスタマイズをバグから除外できます。バグレポートは、Emacsをemacs -Qで開始したことから始まり、バグを再現させる正確な一連のステップを続けるべきです。可能ならバグを再現するのに必要な、正確なファイル内容を報告してください。

emacs -Qでは再現できないバグもいくつかあります。結局は再現するのが難しいバグもあります。そのような場合、何を行なったかを報告すべきです — が、前述したように、どうか最初にバグを発生させた生の事実を固持してください。

報告したい複数の問題がある場合は、どうかそれらを個別のバグとしてそれぞれ報告してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

52.4 バグレポートのためのチェックリスト

バグを報告する前に、まずその問題がすでに報告されていないか、確認を試みてください(既存のバグレポートの既知の問題を読むを参照してください)。

もし可能なら、その問題がすでにfixされていないか、最新リリース版のEmacsも試してみてください。同様に、最新の開発版を試してみるのもよいでしょう。これがある人にとっては簡単でないことは認識しているので、バグを報告する前に、絶対にこれを行なわなければならないと思わないでください。

Emacsでバグレポートを書くベストな方法は、コマンドM-x report-emacs-bugを使用する方法です。これはメールバッファー(メールの送信を参照してください)をセットアップして、自動的にいくつかの重要な情報を挿入します。しかし、すべての必要な情報は提供できません。だから以下のガイドラインを読んで、それに従うべきです。そうすればメッセージを送る前に、他の重大な情報を手で入力できます。M-x report-emacs-bugによって挿入されたいくつかの情報は、適切ではないと感じるかもしれませんが、完全に確信があるのでなければそれを残してください。そうすれば開発者たちがそれを判断できます。

レポートを記述し終えたら、C-c C-cとタイプすると、それはEmacsメンテナー bug-gnu-emacsに送られます (新たな機能を提案したい場合にも同じアドレスを使用する)。Emacsの中からメールを送れなければ、バグレポートのテキストを普段使用しているメールクライアントにコピーして、そのアドレスに送信できます(システムがサポートしていればC-c M-iでEmacsに行なわせることができる)。または、そのアドレスに問題を説明する簡単なメールを送ることもできます。

レポートは‘bug-gnu-emacs’メーリングリストに送られてhttps://debbugs.gnu.orgのGNU Bug Trackerに保管されます。報告について、より詳細な情報を尋ねる必要がある場合のために、どうか有効な返信用アドレスを含めてください。提出されたレポートは調停されるので、レポートが見られるようになるまで遅れが生じることもあります。

バグを報告するためにGNU Bug Trackerがどのように機能するか知る必要はありませんが、もし望むなら、トラッカーのオンラインドキュメントで、使用できるさまざま機能を見ることができます。

bug-gnu-emacs’メーリングリストに送られたすべてのメールは、‘gnu.emacs.bug’ニュースグループにもゲートウェイされます。この逆も真ですが、バグレポート(または返信)をニュースグループにポストしないでください。これにより、さらに情報を尋ねるためにあなたに連絡するのが困難になるのと、それがバグトラッカーと充分に統合されていないからです。

データが500,000バイトを超える場合は、どうかそれを直接レポートに含めないでください。要求されたら送るという提案に留めるか、データをオンラインで利用可能にしてその場所を知らせてください。

GNU Bug Trackerはあなたの報告にたいしてバグ番号を付与するでしょう。以下のディスカッションでは、その番号を使用するようお願いいたします。

メンテナーがバグを詳細に調べられるように、レポートには以下の事項を含めるべきです:

以下はバグレポートには不要な事柄です:


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

52.5 GNU Emacsへのパッチの送付

GNU Emacsを改善するためにバグfixを書きたいなら、それはとても助けになります。変更を送るとき、メンテナーがそれらを使うのが簡単になるように、どうか以下のガイドラインにしたがってください。これらのガイドラインにしたがわない場合でも、あなたの情報はまだ有用でしょうが、それを使用するのに余分な作業が必要になります。GNU Emacsの保守は最良の状況でも多くの作業を要すので、わたしたちを助けるのにあなたがベストをすくさなければ、わたしたちはそれを維持できないのです。

各パッチは、わたしたちがそれを正しく評価するために、簡単な情報をもたなければなりません。

そのような情報がすべてあるなら、それらをメールメッセージにまとめて、開発者に送ってください。推奨される送信先は、bug-gnu-emacs@gnu.orgです(これはバグおよび機能のためのリストです)。なぜなら、このリストにはパッチを簡単に確認するための追跡システム(tracking system)があるからです。そのパッチが完全ではなく、さらに議論が必要だと思うときは、かわりにそれをemacs-devel@gnu.orgに送りたいと思うかもしれません。パッチを改訂したら、それを最初のトピックにたいするfollowupとして送ってください。

わたしたちはそのパッチをプレーンテキストとして受けとるのを好みます。それはインライン(メールクライアントが行ブレークを変更しないように注意してください)、またはMIMEアタッチメントのどちらでも構いません。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

53 Emacs開発への貢献

Emacsは共同制作によるプロジェクトであり、わたしたちは誰でも貢献できことを励行します。

Emacsに貢献する多くの方法があります:

Emacsを改善する作業をしたい場合は、 emacs-develメーリングリストのメンテナーに連絡してください。 提案されたプロジェクトを尋ねたり、あなたのアイデアを提案することができます。

Emacsにたいする機能の要望や改善方法についての提案を送る場合には、 bug-gnu-emacsが最善の場所です。 どのような変更を望むのか、そしてなぜ、どのようにすればそれがEmacsを改善すると思うかを、可能なかぎり明快に説明するようにお願いします。

すでに改善を記述したことがある場合は、それについて教えてください。まだ作業を開始していなければ、作業を開始する前に、 emacs-devel に連絡をとるのが有益です。Emacsの他の部分にたいして、あなたの拡張がより適合する方法を提案することが可能かもしれません。

機能を実装するときは、Emacs coding standardsに従ってください。コーディング規約を参照してください。くわえて、些細とは言えないような貢献にたいしてはFSFへの著作権の譲渡が必要になります。著作権の割り当てを参照してください。

Emacsの開発バージョンは、開発者グループにより活発にメンテされている、レポジトリーからダウンロードできます。アクセスの詳細についてはEmacsプロジェクトのページhttps://savannah.gnu.org/projects/emacs/を参照してください。

カレントワーキングバージョンにたいしてパッチを記述することは重要です。古いバージョンから開始した場合、パッチは時代遅れかもしれず(そのためメンテナーはそれを適用するのが難しくなります)、Emacsの変更によりあなたのパッチを不必要になっているかもしれません。リポジトリーソースからダウンロードした後は、ビルド手順についてファイルINSTALL.REPOを読むべきです(ビルド手順が通常のビルドとは異なります)。

より広範な貢献をしたい場合は、Emacs開発者になる方法についての情報を得るために、EmacsディストリビューションのCONTRIBUTEファイルを参照してください。

(望む変更を実装する方法を理解するために)、以下のEmacsドキュメントを参照してください:


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

53.1 コーディング規約

貢献されたコードはGNUコーディング規約(GNU Coding Standards: https://www.gnu.org/prep/standards/)にしたがうべきです。これはシステムのinfoでも利用可能かもしれません。

これにしたがっていない場合、わたしたちがそれを使えるように、そのコードをfixする誰かを探す必要があるでしょう。

Emacsには追加のスタイルとコーディング規約があります:


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

53.2 著作権の割り当て

FSF(Free Software Foundation)は、GNU Emacsの著作権所有者です。FSFはコンピューターユーザーの自由の促進、およびすべてのフリーソフトウェアーユーザーの権利を守るという、世界的な使命をもつ、非営利団体です。一般的な情報については、ウェブサイトhttps://www.fsf.org/を参照してください。

一般的には、GNU Emacs、およびGNU ELPAに格納されているパッケージにたいする些細とは言えない貢献にたいして、わたしたちは著作権をFSFに譲渡することを求めます。この背景にある理由については、http://www.gnu.org/licenses/why-assign.htmlを参照してください。

著作権譲渡はシンプルなプロセスです。いくつかの国の住民は、これを完全にコンピューター上で行なうことができます。わたしたちはemacs-devel@gnu.orgメーリングリストにおいて、著作権譲渡を満足するために必要なフォームを送ったり、あなたがもつであろうさまざまな疑問にたいして回答(または回答をもつ人物を掲示)することで、あなたの着手を助けることができます。

(どうか注意してください: なぜいくつかのGNUプロジェクトは版権譲渡を求めるかについての一般的な議論は、emacs-develではoff-topicです。かわりにgnu-misc-discussを参照してください)

著作権放棄も可能ですが、好ましいのは譲渡です。著作権放棄者は、著作権譲渡者と同様に、FSFにサインされた書類を送ることが必要になります(単に“this is in the public domain”というだけでは充分ではありません)。著作権放棄は将来の作業には適用できないので、新しい何かを送りたいときは、毎回これを繰り返す必要があります。

わたしたちは、譲渡なしで小さな変更(大雑把に言うと15行以下)を受けとることができます。これはあなたの貢献全体にたいする蓄積的な制限です(たとえば5行パッチを3つ)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

54 GNU Emacsにたいして助けを得る方法

インストール、使用方法、またはGNU Emacsの変更について助言を必要とする場合は、それを探す2つの方法があります:


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Appendix A GNU GENERAL PUBLIC LICENSE

Version 3, 29 June 2007
Copyright © 2007 Free Software Foundation, Inc. https://fsf.org/

Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.

Preamble

The GNU General Public License is a free, copyleft license for software and other kinds of works.

The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program—to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.

When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.

To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.

For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.

Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.

For the developers’ and authors’ protection, the GPL clearly explains that there is no warranty for this free software. For both users’ and authors’ sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.

Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users’ freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.

Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.

The precise terms and conditions for copying, distribution and modification follow.

TERMS AND CONDITIONS

  1. Definitions.

    “This License” refers to version 3 of the GNU General Public License.

    “Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.

    “The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.

    To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.

    A “covered work” means either the unmodified Program or a work based on the Program.

    To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.

    To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.

    An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.

  2. Source Code.

    The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.

    A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.

    The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.

    The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work’s System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.

    The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.

    The Corresponding Source for a work in source code form is that same work.

  3. Basic Permissions.

    All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.

    You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.

    Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.

  4. Protecting Users’ Legal Rights From Anti-Circumvention Law.

    No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.

    When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work’s users, your or third parties’ legal rights to forbid circumvention of technological measures.

  5. Conveying Verbatim Copies.

    You may convey verbatim copies of the Program’s source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.

    You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.

  6. Conveying Modified Source Versions.

    You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:

    1. The work must carry prominent notices stating that you modified it, and giving a relevant date.
    2. The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.
    3. You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
    4. If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.

    A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation’s users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.

  7. Conveying Non-Source Forms.

    You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:

    1. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
    2. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
    3. Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
    4. Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
    5. Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.

    A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.

    A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.

    “Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.

    If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).

    The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.

    Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.

  8. Additional Terms.

    “Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.

    When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.

    Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:

    1. Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
    2. Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
    3. Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
    4. Limiting the use for publicity purposes of names of licensors or authors of the material; or
    5. Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
    6. Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.

    All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.

    If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.

    Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.

  9. Termination.

    You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).

    However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.

    Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.

    Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.

  10. Acceptance Not Required for Having Copies.

    You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.

  11. Automatic Licensing of Downstream Recipients.

    Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.

    An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party’s predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.

    You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.

  12. Patents.

    A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor’s “contributor version”.

    A contributor’s “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.

    Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor’s essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.

    In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.

    If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient’s use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.

    If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.

    A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.

    Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.

  13. No Surrender of Others’ Freedom.

    If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.

  14. Use with the GNU Affero General Public License.

    Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.

  15. Revised Versions of this License.

    The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

    Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.

    If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy’s public statement of acceptance of a version permanently authorizes you to choose that version for the Program.

    Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.

  16. Disclaimer of Warranty.

    THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  17. Limitation of Liability.

    IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

  18. Interpretation of Sections 15 and 16.

    If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.

END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Programs

If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.

To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.

one line to give the program's name and a brief idea of what it does.
Copyright (C) year name of author

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or (at
your option) any later version.

This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see https://www.gnu.org/licenses/.

Also add information on how to contact you by electronic and paper mail.

If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:

program Copyright (C) year name of author
This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’.
This is free software, and you are welcome to redistribute it
under certain conditions; type ‘show c’ for details.

The hypothetical commands ‘show w’ and ‘show c’ should show the appropriate parts of the General Public License. Of course, your program’s commands might be different; for a GUI interface, you would use an “about box”.

You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see https://www.gnu.org/licenses/.

The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read https://www.gnu.org/licenses/why-not-lgpl.html.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Appendix B GNU Free Documentation License

Version 1.3, 3 November 2008
Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
https://fsf.org/

Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
  1. PREAMBLE

    The purpose of this License is to make a manual, textbook, or other functional and useful document free in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

    This License is a kind of “copyleft”, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

    We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

  2. APPLICABILITY AND DEFINITIONS

    This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The “Document”, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as “you”. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

    A “Modified Version” of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

    A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

    The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

    The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

    A “Transparent” copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not “Transparent” is called “Opaque”.

    Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.

    The “Title Page” means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, “Title Page” means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text.

    The “publisher” means any person or entity that distributes copies of the Document to the public.

    A section “Entitled XYZ” means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.) To “Preserve the Title” of such a section when you modify the Document means that it remains a section “Entitled XYZ” according to this definition.

    The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

  3. VERBATIM COPYING

    You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

    You may also lend copies, under the same conditions stated above, and you may publicly display copies.

  4. COPYING IN QUANTITY

    If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

    If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

    If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

    It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

  5. MODIFICATIONS

    You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

    1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
    2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.
    3. State on the Title page the name of the publisher of the Modified Version, as the publisher.
    4. Preserve all the copyright notices of the Document.
    5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
    6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
    7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice.
    8. Include an unaltered copy of this License.
    9. Preserve the section Entitled “History”, Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled “History” in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
    10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the “History” section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
    11. For any section Entitled “Acknowledgements” or “Dedications”, Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
    12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
    13. Delete any section Entitled “Endorsements”. Such a section may not be included in the Modified Version.
    14. Do not retitle any existing section to be Entitled “Endorsements” or to conflict in title with any Invariant Section.
    15. Preserve any Warranty Disclaimers.

    If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles.

    You may add a section Entitled “Endorsements”, provided it contains nothing but endorsements of your Modified Version by various parties—for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

    You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

    The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

  6. COMBINING DOCUMENTS

    You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.

    The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

    In the combination, you must combine any sections Entitled “History” in the various original documents, forming one section Entitled “History”; likewise combine any sections Entitled “Acknowledgements”, and any sections Entitled “Dedications”. You must delete all sections Entitled “Endorsements.”

  7. COLLECTIONS OF DOCUMENTS

    You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

    You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

  8. AGGREGATION WITH INDEPENDENT WORKS

    A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an “aggregate” if the copyright resulting from the compilation is not used to limit the legal rights of the compilation’s users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.

    If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document’s Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

  9. TRANSLATION

    Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.

    If a section in the Document is Entitled “Acknowledgements”, “Dedications”, or “History”, the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

  10. TERMINATION

    You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License.

    However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.

    Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.

    Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it.

  11. FUTURE REVISIONS OF THIS LICENSE

    The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See https://www.gnu.org/licenses/.

    Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License “or any later version” applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy’s public statement of acceptance of a version permanently authorizes you to choose that version for the Document.

  12. RELICENSING

    “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A “Massive Multiauthor Collaboration” (or “MMC”) contained in the site means any set of copyrightable works thus published on the MMC site.

    “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization.

    “Incorporate” means to publish or republish a Document, in whole or in part, as part of another Document.

    An MMC is “eligible for relicensing” if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008.

    The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.

ADDENDUM: How to use this License for your documents

To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

  Copyright (C)  year  your name.
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3
  or any later version published by the Free Software Foundation;
  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
  Texts.  A copy of the license is included in the section entitled ``GNU
  Free Documentation License''.

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with…Texts.” line with this:

    with the Invariant Sections being list their titles, with
    the Front-Cover Texts being list, and with the Back-Cover Texts
    being list.

If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.

If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Appendix C Emacs呼び出しにたいするコマンドライン引数

Emacsは、Emacsを開始するとき、様々な動作を要求するための、コマンドライン引数をサポートします。これらのコマンド引数の中には、他のエディターとの互換性のためのものや、高度な動作を指定するものがあります。通常の編集にこれらを使用することはお勧めしません(コマンドラインから既存のEmacsジョブにアクセスする方法は、サーバーとしてのEmacsの使用を参照してください)。

-’で始まる引数はオプションで、‘+linenum’もオプションです。Emacsは、スタートアップ時に指定されたファイルをvisitします。コマンドラインで最後に指定されたファイルがカレントバッファーになり、それ以外のファイルも別のバッファーでvisitされます。ほとんどのプログラムと同様に、特別な引数‘--’は、それ以降のすべての引数が、(名前が‘-’で始まっていても)オプションではなくファイル名であることを指定します。

Emacsのコマンドオプションは、XウィンドウでEmacsが使用するウィンドウのサイズや位置、カラーなど、多くのことを指定できます。多くはありませんが、ファイルのLisp関数をバッチモードで実行するなど、高度な使い方をサポートするためのオプションもあります。このチャプターの各セクションでは、利用可能なオプションを、その目的に合わせて整理して説明します。

オプションを記述するには2つの方法があります。それは1つの‘-’で始まる短い形式と、‘--’で始まる長い形式です。たとえば、短い形式が‘-d’で、それに対応する長い形式は‘--display’です。

--’の長い形式は、覚えるのが簡単ですが、多くタイプしなければなりません。しかしオプション名全体を綴る必要はありません。あいまいさのない省略形で充分です。長いオプションが引数を要求する場合に、オプション名とそのオプションにたいする引数を区切るには、スペースとイコール記号の両方を使用することができます。したがって‘--display’オプションにたいしては、‘--display sugar-bombs:0.0’と‘--display=sugar-bombs:0.0’の、どちらでも記述することができます。関連性が明確になるのでイコール記号を推奨します。以下の表では、常にイコール記号で記すことにします。

ほとんどのオプションは、Emacsを初期化する方法や、Emacsセッションのパラメーターを指定します。これらを初期化オプション(initial options)と呼びます。多くはありませんが、ライブラリーのロードや、Lisp関数の呼び出しなど、動作を指定するオプションもあります。これらを動作オプション(action options)と呼びます。これらとファイル名を合わせたものを、動作引数(action arguments)と呼びます。動作引数は、変数command-line-argsに、文字列のリストとして保管されます(実際のところ、Emacsスタートアップ時には、コマンドラインで渡されたすべての引数が、command-line-argsに含まれていますが、初期化を行なう間に、初期化引数は処理されるごとにこのリストから削除され、動作引数だけが残ります)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.1 動作引数

以下は動作引数の表です:

file
--file=file
--find-file=file
--visit=file

指定されたfileをvisitします。ファイルのvisit(訪問)を参照してください。

Emacsスタートアップ時、1つのウィンドウでスタートアップバッファーを表示し、fileをvisitするバッファーを別のウィンドウで表示します(複数ウィンドウを参照してください)。複数のファイル引数を与えた場合、コマンドラインの最後に指定されたファイルが表示され、他のファイルもvisitされますが、表示はされません。

スタートアップバッファーが無効(Emacsの起動を参照)の場合、ファイル引数が1つのときは1つのウィンドウでfileをvisitするバッファーを表示し、ファイル引数が2つのときは、Emacsはファイルを2つの別のウィンドウに表示します。ファイル引数が3つ以上の場合、Emacsは最後に指定されたファイルを1つのウィンドウに表示して、別のウィンドウにその他すべてのファイルを表示するバッファーメニュー(複数バッファーにたいする操作を参照)を表示します。このバッファーメニューの使用を抑制するには、変数inhibit-startup-buffer-menutに変更してください。

+linenum file

指定されたfileをvisitし、行番号linenumに移動します。

+linenum:columnnum file

指定されたfileをvisitし、行番号linenumに移動して、列番号columnnumにポイントを置きます。

-l file
--load=file

関数loadで、fileという名前のLispライブラリーをロードします。fileが絶対ファイル名でない場合、Emacsは最初にカレントディレクトリーを探して、次にload-path (EmacsのためのLispコードによるライブラリーを参照してください)にリストされたディレクトリーを探します。

警告: 前のコマンドライン引数にvisitされたファイルがある場合、カレントディレクトリーは最後にvisitされたファイルのディレクトリーになります。

-L dir
--directory=dir

変数load-pathにリストされたディレクトリーの前に、ディレクトリーdirを追加します。複数の‘-L’オプションを指定した場合、Emacsはその順番を保持します。たとえば‘-L /foo -L /bar’を使用すると、load-path("/foo" "/bar" …)となります。dirが‘:’で始まる場合、Emacsは‘:’を削除した残りを、load-pathにリストされたディレクトリーの(前ではなく)後ろに追加します(MS Windowsでは‘:’のかわりに、path-separatorの値‘;’を使用します)。

-f function
--funcall=function

Lisp関数functionを呼び出します。それがインタラクティブな関数(コマンド)の場合、同じ関数をキーシーケンスで呼び出したときのように、引数を対話的に読み取ります。そうでない場合は、その関数を引数なしで呼び出します。

--eval=expression
--execute=expression

Lisp式expressionを評価します。

--insert=file

fileの内容を、コマンドライン引数が処理されるときにカレントのバッファーに挿入します。これは通常、*scratch*バッファー(Lisp Interactionバッファーを参照してください)ですが、コマンドラインの前の引数がファイルをvisitしたりバッファーを切り替えるときは、別のバッファーになるでしょう。このコマンドライン引数の効果は、M-x insert-fileが行なうのと同様です(その他のファイル操作を参照してください)。

--kill

確認なしでEmacsを終了します。

--help

利用可能なすべてのオプションがリストされたUsageメッセージをプリントしてから、正常終了します。

--version

Emacsのバージョンをプリントしてから、正常終了します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.2 初期化オプション

初期化オプションは、Emacsセッションにたいするパラメーターを指定します。このセクションでは、より一般的な初期化オプションを説明します。いくつかのオプションは、厳密には以降のセクションで説明するXウィンドウシステムに関連したオプションです。

いくつかの初期化オプションは、初期化ファイルのロードに影響します。Emacsは通常、site-start.elが存在する場合は最初にそれをロードし、ユーザーの初期化ファイルが存在すれば次にそれをロードして、デフォルト初期化ファイルdefault.elが存在すれば最後にそれをロードします(Emacs初期化ファイルを参照してください)。それらのファイルのロードを抑制したり、それらのファイルを別のファイルで置き換えるオプションもあります。

-chdir directory
--chdir=directory

他のことを行なう前にまず、カレントディレクトリーをdirectoryに変更します。これはEmacsが停止したのと同じディレクトリーで開始されるように、主にXでのセッション管理に使用されます。これによりデスクトップの保存と復元が簡単になります。

-t device
--terminal=device

端末の入出力にdeviceをデバイスとして使用します。このオプションは暗に‘--no-window-system’を含みます。

-d display
--display=display

Emacs初期フレームを開くために、Xウィンドウシステムとdisplayという名前のディスプレーを使用します。詳細は、ディスプレー名の指定を参照してください。

-nw
--no-window-system

環境変数DISPLAYがセットされていても、ウィンドウシステムと直接やりとりしません。これはEmacsが、Emacsのすべての表示と出力のために、開始された端末を使用することを意味します。

-batch
--batch

Emacsをバッチモード(batch mode)で実行します。バッチモードは、シェルスクリプトやmakeファイルから、Emacs Lispで記述されたプログラムを実行するために使用されます。Lispプログラムを呼び出すには、‘-batch’オプションと併せて、1つ以上の‘-l’、‘-f’、‘--eval’を使用します(動作引数を参照してください)。使用例は、コマンド引数の例を参照してください。

バッチモードでは、Emacsは編集されるテキストを表示せず、C-zC-cのような、標準の端末割り込みが通常の効果をもちます。通常はエコーエリアにメッセージをプリントするEmacs関数は、かわりに標準出力ストリーム(stdout)、または標準エラーストリーム(stderr)にメッセージをプリントします(正確に言うと、prin1princprintのような関数はstdoutにプリントし、messageerrorstderrにプリントします)。通常はミニバッファーからキーボード入力を読み取る関数は、かわりに端末の標準入力ストリーム(stdin)から入力を受け取ります。

--batch’は暗に‘-q’(初期化ファイルをロードしません)を含みますが、それでもsite-start.elはロードされます。これはすべてのコマンドオプションを処理した後に、Emacsを終了します。それに加えて、自動保存が明示的に要求された場合を除き、自動保存を無効にします。また自動保存が要求されていない場合は、ファイルの保存でのfsyncシステムコールを省略します。

--script file

--batch’と同様に、Emacsをバッチモードで実行してから、fileのLispコードを読み込み実行します。

このオプションは通常、Emacsを実行する実行可能スクリプトの中で使用します。これは以下のテキストを最初の行に記述します:

#!/usr/bin/emacs --script

これは‘--script’でEmacsを呼び出し、スクリプトファイル名はfileです。それからEmacs Lispは最初の行の‘#!’をコメント区切りとして扱います。

--no-build-details

Emacs実行可能形式からシステム名やビルド日時などの詳細を取り除き、そのビルドがより決定論的になります。このスイッチによりsystem-nameのようなコマンドはnilをリターンするようになるので、これは通常(またはインタラクティブ)の使用を意図していません。

-q
--no-init-file

初期化ファイルをロードしません(Emacs初期化ファイルを参照してください)。Emacsがこのオプションで呼び出された場合、Customize機能は、保存のオプションを受け付けません(Easy Customizationインターフェースを参照してください)。このオプションはsite-start.elのロードは無効にしません。

--no-site-file
-nsl

site-start.elをロードしません(Emacs初期化ファイルを参照してください)。‘-Q’オプションもこれを行ないますが、‘-q’のような他のオプションはこれを行ないません。

--no-site-lisp

load-pathsite-lispディレクトリーを含めません(Emacs初期化ファイルを参照してください)。‘-Q’オプションもこれを行ないます。

--no-splash

スタートアップ画面を表示しません。初期化ファイルで変数inhibit-startup-screenを非nilにセットしても、この効果を得ることができます(Emacsの起動を参照してください)。

--no-x-resources

Xリソースをロードしません。初期化ファイルで変数inhibit-x-resourcestにセットしても、この効果を得ることができます(Xリソースを参照してください)。

-Q
--quick

最小のカスタマイズでEmacsを開始します。これは‘-q’、‘--no-site-file’、‘--no-site-lisp’、‘--no-x-resources’、‘--no-splash’を一緒に使用したのと同様です。

-daemon
--daemon[=name]
--bg-daemon[=name]
--fg-daemon[=name]

Emacsをデーモンとして開始します。これはフレームをオープンせずに、Emacsサーバーを開始します。その後にemacsclientコマンドを使用して、編集のためにEmacsに接続できます(オプションでサーバーに明示的にnameを指定できる。これを行った際には、emacsclient呼び出し時に--socket-nameオプションで、同じnameを指定する必要があるだろう。emacsclientのオプションを参照されたい)。デーモンとしてのEmacsの使用についての情報は、サーバーとしてのEmacsの使用を参照してください。“バックグラウンド”のデーモンは端末から切り離され、バックグラウンドで実行されます(‘--daemon’は‘--bg-daemon’のエイリアス)。

--no-desktop

保存されたデスクトップをリロードしません。Emacsセッションの保存を参照してください。

-u user
--user=user

あなたの初期化ファイルのかわりに、userの初期化ファイルをロードします。23

--debug-init

initファイルのエラーにたいして、Emacs Lispデバッガーを有効にします。Entering the Debugger on an Error in The GNU Emacs Lisp Reference Manualを参照してください。

--module-assertions

動的ロードモジュールを処理する際に、高価な正当性チェックを有効にします。これは、作成したモジュールがモジュールAPI仕様に従っているか検証したいモジュール作者を意図したものです。モジュール関連のassertが発生した場合、Emacsはabortします。Writing Dynamically-Loaded Modules in The GNU Emacs Lisp Reference Manualを参照してください。

--dump-file=file

fileという名前のファイルからダンプされたEmacs状態をロードします。デフォルトではインストールされたEmacsはダンプ状態を、Emacsのインストールがアーキテクチャー依存のファイルを配置するディレクトリー内でemacs.pdmpという名前のファイルから探します。変数exec-directoryはそのディレクトリーの名前を保持します。emacsはEmacs実行可能ファイルの名前であり、通常は単なるemacsです(インストールせずにビルドしたディレクトリーsrcからEmacsを呼び出す際には実行可能形式のディレクトリーでダンプファイルを探す)。違う場所にダンプファイルのリネームや移動を行なった場合には、ファイルを探す場所をEmacsに指示するために、このオプションを使用できます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.3 コマンド引数の例

以下は、引数とオプションを指定してEmacsを使用する例です。ここでは、ロードすることにより、Cプログラムをvisitしたカレントバッファーにたいして、何か便利な操作を行なう、hack-c.elという名前のLispプログラムファイルがあるとしましょう。

emacs --batch foo.c -l hack-c -f save-buffer >& log

これはfoo.cをvisitしてから、hack-c.el(これはvisitされたファイルに何らかの変更を行ないます)をロードし、foo.cを保存(save-bufferC-x C-sにバインドされた関数であることに注意してください)した後に、(‘--batch’オプションなので)Emacsを終了してシェルに戻ります。‘--batch’は、出力をlogにリダイレクトしても問題がないことが保証されます。なぜならEmacsは作業するためのディスプレー端末をもたないと想定されるからです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.4 環境変数

環境(environment)とは、オペレーティングシステムの機能です。これは値と名前をもつ変数のコレクションからなります。それぞれの変数は環境変数(environment variable)と呼ばれます。環境変数名は大文字小文字を区別し、慣習では大文字だけを使用します。値はすべてテキスト文字列です。

何が環境を便利にしているかというと、それはサブプロセスが親プロセスから自動的に環境を継承できることです。これはログインシェルで環境変数をセットして、実行するすべて(Emacsを含む)のプログラムが、それを参照できることを意味します。Emacsのサブプロセス(シェル、コンパイラー、バージョンコントロールシステムなど)も、Emacsから環境を継承します。

Emacsの中では、コマンドM-x getenvは環境変数の名前を読み取って、その値をエコーエリアにプリントします。M-x setenvはEmacs環境で変数をセットし、C-u M-x setenvは変数を削除します(‘$’による環境変数の置き換えは、ファイル名にたいする値と同様に機能します。File Names with $を参照してください)。変数initial-environmentは、Emacsにより継承された初期環境を保管します。

Emacsの外で環境変数をセットする方法は、オペレーティングシステム、特に使用しているシェルに依存します。たとえば以下はBashを使用して、環境変数ORGANIZATIONに‘not very much’をセットする例です:

export ORGANIZATION="not very much"

以下はcshまたはtcshでこれを行なう方法の例です:

setenv ORGANIZATION "not very much"

EmacsがXウィンドウシステムを使用している場合、Xを制御するさまざまな環境変数は、Emacsも同様に制御します。詳細は、Xのドキュメントを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.4.1 一般的な変数

以下は、Emacsで特別な意味をもつ環境変数の、アルファベット順のリストです。これらの変数のほとんどは、他のプログラムでも使用されます。Emacsはこれらの環境変数がセットされていることを要求しませんが、セットされている場合はその値を使用します。

CDPATH

相対ディレクトリーを指定したときに、指定したディレクトリーを検索するために、cdコマンドにより使用されます。

DBUS_SESSION_BUS_ADDRESS

D-BusサポートつきでEmacsがコンパイルされている場合、D-Busにより使用されます。通常これを変更する必要はありません。‘unix:path=/dev/null’のようなダミーアドレスをセットすることにより、D-Busセッションバスとの接続を抑止し、同様にD-Busセッションバスがまだ実行されていないときは自動的に開始します。

EMACSDATA

Emacsに含まれるアーキテクチャーに独立なファイルのディレクトリーです。これは変数data-directoryの初期化に使用されます。

EMACSDOC

ドキュメント文字列ファイル(documentation string file)にたいするディレクトリーで、Lisp変数doc-directoryの初期化に使用されます。

EMACSLOADPATH

Emacs Lispファイルを検索する、コロンで区切られたディレクトリーのリスト24です。セットされている場合は、変数load-pathの初期値です(EmacsのためのLispコードによるライブラリーを参照してください)。空の要素は、load-pathのデフォルト値を意味します。たとえば‘EMACSLOADPATH="/tmp:"’を使用すると、デフォルトのload-pathの前に/tmpを追加します。リストの中間に空の要素を指定するには、‘EMACSLOADPATH="/tmp::/foo"’のように、2つのコロンを続けます。

EMACSPATH

実行可能ファイルを検索するための、コロンで区切られたディレクトリーのリストです。セットされている場合、Emacsは変数exec-path(Emacsからのシェルコマンドの実行を参照してください)を初期化するときに、PATH(以下参照)に加えてこれをを使用します。

EMAIL

メールアドレスです。Lisp変数user-mail-addressを初期化するために使用されます。Emacsのメールインターフェースは、送信メッセージの‘From’ヘッダーにこれを使用します(メールヘッダーフィールドを参照してください)。

ESHELL

シェルモードで、環境変数SHELLをオーバーライドするために使用されます(対話的なサブシェルを参照してください)。

HISTFILE

ログインしている間のシェルコマンドが保存されるファイルの名前です。この変数のデフォルトは、Bashを使用している場合は~/.bash_history、kshのときは~/.sh_history、それ以外では~/.historyです。

HOME

ディレクトリーツリー上で、あなたのファイルがある場所です。チルダ(~)で始まるファイル名の展開に使用されます。セットする場合には絶対ファイル名をセットする必要があります(相対ファイル名をセットするとEmacsはEmacsが開始されたディレクトリーから相対的なディレクトリーと解釈するが、この機能の使用は推奨しない)。未セットならHOMEのデフォルトはLOGNAMEUSER、またはユーザーIDにより与えられるユーザーのホームディレクトリー、いずれも失敗したら/になります。MS-DOSでは、この変数のデフォルトはEmacsが開始されたディレクトリーで、そのディレクトリー名が‘/bin’で終わる場合、‘/bin’は取り除かれます。Windowsでは、HOMEのデフォルト値は、ユーザープロファイルディレクトリーのApplication Dataサブディレクトリー(つまり通常はC:/Documents and Settings/username/Application Datausernameはユーザー名)ですが、後方互換のため、C:/.emacsがある場合は、かわりにC:/がデフォルト値になります。

HOSTNAME

Emacsが実行されているホストの名前です。

INFOPATH

コロンで区切られた、Infoファイルを検索するディレクトリーのリストです。

LC_ALL
LC_COLLATE
LC_CTYPE
LC_MESSAGES
LC_MONETARY
LC_NUMERIC
LC_TIME
LANG

そのユーザーの優先されるlocaleです。localeには6つのカテゴリーがあり、それぞれ環境変数で指定されます。ソートはLC_COLLATE、文字エンコーディングはLC_CTYPE、システムメッセージはLC_MESSAGES、通貨形式はLC_MONETARY、数字はLC_NUMERIC、日時はLC_TIMEでlocaleを指定します。これらの変数の1つがセットされていない場合、そのカテゴリーのデフォルトは環境変数LANGの値、LANGがセットされていない場合は‘C’ localeになります。しかしLC_ALLが指定された場合、これは他のすべてのlocale環境変数のセッティングをオーバーライドします。

MS-WindowsとmacOSでは、環境でLANGがまだセットされていない場合、Emacsはシステムワイドなデフォルト言語にもとづき、LANGをセットします。MS-Windowsのいくつかのバージョンでは、これはコントロールパネルの‘Regional Settings’でセットでき、macOSではSystem Preferenceの“Language and Region”でセットできます。

LC_CTYPEカテゴリーの値は、デフォルトの言語環境(language environment)とコーディングシステム(coding system)を選択するために、locale-language-nameslocale-charset-language-nameslocale-preferred-coding-systemsのエントリーにたいしてマッチされます。言語環境を参照してください。

LOGNAME

ユーザーのログイン名です。USERも参照してください。

MAIL

システムのメールinbox名です。

MH

mhシステムのセットアップファイル名です。MH-E in The Emacs Interface to MHを参照してください。

NAME

あなたの現実世界での名前です。これは変数user-full-nameを初期化するために使用されます(メールヘッダーフィールドを参照してください)。

NNTPSERVER

ニュースサーバーの名前です。Gnusパッケージで使用されます。

ORGANIZATION

あなたが属する組織の名前です。Gnusパッケージで、ポストの‘Organization:’ヘッダーをセットするために使用されます。

PATH

コロンで区切られた、実行可能ファイルを含むディレクトリーのリストです。これは変数exec-pathを初期化するために使用されます(Emacsからのシェルコマンドの実行を参照してください)。

PWD

セットされている場合、これはEmacsが開始されたときのデフォルトディレクトリーになるはずです。

REPLYTO

セットされている場合は、変数mail-default-reply-toの初期値になります(メールヘッダーフィールドを参照してください)。

SAVEDIR

新しいアーティクルがデフォルトで保存されるディレクトリーの名前です。Gnusパッケージにより使用されます。

SHELL

Emacsの中からプログラムのパースや実行に使用されるインタープリターの名前です。

SMTPSERVER

送信メールサーバーの名前です。これは変数smtpmail-smtp-serverを初期化するために使用されます(メールの送信を参照してください)。

TERM

Emacsが使用する端末タイプです。Emacsがバッチモードで実行されていないとき、この変数はセットされていなければなりません。MS-DOSでは、デフォルトは‘internal’で、これはその機種固有のディスプレーを扱う、ビルトインの端末エミュレーションを指定します。

TERMCAP

TERMで指定された端末をどのようにプログラムするかを記述する、termcapライブラリーファイルの名前です。デフォルトは/etc/termcapです。

TMPDIR
TMP
TEMP

これらの環境変数は、変数temporary-file-directoryを初期化するために使用されます。これは一時ファイルを置く場所を指定します(バックアップファイルを参照してください)。Emacsは最初にTMPDIRの使用を試みます。これがセットされていない場合、通常Emacsは/tmpにフォールバックします。しかしMS-WindowsとMS-DOSでは、かわりにTMP、次にTEMP、最後にc:/tempにフォールバックします。

TZ

これはデフォルトのタイムゾーン(もしかしたらサマータイムの情報も)を指定します。Time Zone Rules in The GNU Emacs Lisp Reference Manualを参照してください。MS-DOSでは、Emacsを開始したときの環境でTZがセットされていない場合、EmacsはDOSが返す国コードにたいして、適切なデフォルト値を定義します。MS-Windowsでは、EmacsはTZを使用しません。

USER

ユーザーのログイン名です。LOGNAMEも参照してください。MS-DOSでは、デフォルトは‘root’です。

VERSION_CONTROL

変数version-controlの初期化に使用されます(単一または番号つきバックアップを参照してください)。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.4.2 その他の変数

これらの変数は、特定の設定だけにたいして使用されます:

COMSPEC

MS-DOSとMS-Windowsで、バッチファイルとシェルの内部コマンドを呼び出すときに使用する、コマンドインタープリターの名前です。MS-DOSでは、環境変数SHELLのデフォルト値のためにも使用されます。

NAME

MS-DOSで、この変数は変数USERのデフォルト値として使用されます。

EMACSTEST

MS-DOSで、内部端末エミュレーターの操作ログに使用するファイルを指定します。この機能はバグレポートを送るときに便利です。

EMACSCOLORS

MS-DOSで、スクリーンカラーを指定します。Emacsは開始時の数瞬、デフォルトカラーを表示するので、それらの指定にこの方法が便利です。

この変数の値は2文字のエンコーディングで指定し、それぞれデフォルトフェイスにたいして、1文字目はフォアグラウンドカラー、2文字目はバックグラウンドカラーを指定します。それぞれの文字は、標準のPCテキストモードディスプレーのカラーを記述する、16進コードを指定します。たとえばlight grayの背景色でblueのテキストを得たい場合は、‘EMACSCOLORS=17’を指定します。ここで1はカラーblue、7はカラーlight grayを指定しています。

PCディスプレーは通常、8色のバックグラウンドカラーだけをサポートします。しかしバックグラウンドカラーにたいして、16色すべてを使用できるDOSディスプレーにモードを切り替えるので、実際には4ビットのバックグラウンドカラーすべてが使用されます。

PRELOAD_WINSOCK

MS-Windowsでこの変数をセットしている場合、Emacsは開始時に、最初に要求されたときまで待たずに、ネットワークライブラリーのロードと初期化を行ないます。

emacs_dir

MS-Windowsでは、emacs_dirは特別な環境変数で、これはEmacsがインストールされたディレクトリーのフルパスを指します。Emacsが標準的なディレクトリー構造にインストールされた場合、この変数の値は自動的に計算されます。他の環境変数とは異なり、これは開始時にEmacsによりオーバーライドされるので、標準的なインストールをした場合には、あなた自身がこの変数のセッティングを使用することは、あまりないでしょう。EMACSLOADPATHのような他の環境変数をセットするとき、絶対パスをハードコーディングするより、emacs_dirを使う法が便利だと気づくでしょう。これにより複数バージョンのEmacsが、同じ環境変数のセッティングを共有することが可能になり、環境やレジストリーのセッティングを変更せずに、Emacsのインストールディレクトリーを変更できるようになります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.4.3 MS-Windowsのシステムレジストリー

MS-Windowsでは、インストールプログラムaddpm.exeが、システムレジストリーのHKEY_LOCAL_MACHINEセクションの、/Software/GNU/Emacsの下のemacs_dirEMACSLOADPATHEMACSDATAEMACSPATHEMACSDOCSHELLTERMの値を追加します。これを行なうのは、異なるバージョンのWindowsにたいして環境変数をセットする、標準的な場所がないからです。最近のバージョンのEmacsでは、addpm.exeの実行は絶対に必要ではなくなりましたが、古いバージョンからアップグレードする場合、addpm.exeは以前のインストールから、(おそらく最新のEmacsと互換性がない)古いレジストリーエントリーを取得しないことを保証します。

Emacsを開始したときは、環境のチェックと同様に、システムレジストリーの、これらの変数とHOMELANGPRELOAD_WINSOCKもチェックします。

これらの変数の値を決定するために、Emacsは次の手順にしたがいます。最初に環境がチェックされます。そこで変数が見つからない場合、Emacsは/Software/GNU/Emacsのレジストリーキーを名前で探します。最初にレジストリーのHKEY_CURRENT_USERセクション、そこで見つからなければ、HKEY_LOCAL_MACHINEセクションを探します。それでもなおEmacsが値を決定できない場合、コンパイルされたときのデフォルトが使用されます。

上記の環境変数に加えて、Xリソース(Xのオプションとリソースを参照)を指定するために/Software/GNU/Emacsのレジストリーキーにセッティングを追加することもできます。.Xdefaultsファイル内で指定可能なほとんどのセッティングを、そのレジストリキーからセットできます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.5 ディスプレー名の指定

環境変数DISPLAYは、Emacsを含むすべてのXクライアントに、ウィンドウをどこに表示するかを指定します。通常の状況では、この変数の値は、Xサーバーを開始してローカルでジョブを実行したとき、デフォルトにセットされます。ディスプレーを自分で指定することもできます。これを行なう理由の1つは、他のシステムにログインして、そこでEmacsを実行し、ウィンドウはローカル端末のウィンドウに表示させたい場合です。

DISPLAYは、‘host:display.screen’という構文をもちます。ここでhostはXウィンドウシステムのサーバー機のホスト名、displayは、あなたのサーバー(Xサーバー)を、同一機種上の他のサーバーと区別するために任意に割り当てられる数字、そしてscreenフィールドは、Xサーバーが複数の端末スクリーンを制御することを可能にします。ピリオドとscreenフィールドはオプションです。screenが含まれる場合、通常は0です。

たとえば、あなたのホスト名が‘glasperle’で、あなたのサーバーが設定にリストされた最初の(もしかしたら唯一の)サーバーの場合、DISPLAYは‘glasperle:0.0’になります。

Emacsを実行するとき、変数DISPLAYを変更するか、オプション‘-d display’または‘--display=display’で、明示的にディスプレーを指定できます。以下は例です:

emacs --display=glasperle:0 &

-nw’オプションで、Xウィンドウシステムの使用を抑止できます。その場合、Emacsはディスプレーとして制御テキスト端末を使用します。初期化オプションを参照してください。

セキュリティーの規制により、リモートシステムのプログラムが、ローカルシステムで表示を行なうのを禁ずることがあります。この場合、Emacsは以下のようなメッセージを出力します:

Xlib:  connection to "glasperle:0.0" refused by server

ローカル機でxhostコマンドを使用することにより、リモート機からアクセスする権限を与えれば、この問題を解決できるでしょう。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.6 フォント指定オプション

デフォルトのフォントを指定するために、コマンドラインオプション‘-fn font’(または‘--font’。これは‘-fn’のエイリアスです)を使用できます。

-fn font
--font=font

fontをデフォルトフォントとして使用します。

コマンドラインでフォント名をEmacsに渡す場合、フォント名にシェルが特別に扱う文字(たとえばスペース)が含まれる場合は、クォーテーションマークで囲んでクォートする必要があるでしょう。たとえば:

emacs -fn "DejaVu Sans Mono-12"

フォント名やデフォルトフォントを指定する別の方法についての詳細は、フォントを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.7 ウィンドウカラーオプション

Emacsディスプレーのさまざまな場所で使用するカラーを指定するために、以下のコマンドラインオプションを使用できます。カラーは、カラーネーム(color names)か、RGBトリプレット(RGB triplets)のどちらかを使用して、指定します。

-fg color
--foreground-color=color

フォアグラウンドカラーを指定します。defaultフェイス(テキストのフェイスを参照してください)で指定されたカラーをオーバーライドします。

-bg color
--background-color=color

バックグラウンドカラーを指定します。defaultフェイスで指定されたカラーをオーバーライドします。

-bd color
--border-color=color

Xウィンドウのボーダーカラーを指定します。EmacsがGTK+サポートつきでンパイルされいてる場合、効果はありません。

-cr color
--cursor-color=color

ポイントがある位置を示すEmacsのカーソルカラーを指定します。

-ms color
--mouse-color=color

Emacsウィンドウにマウスがあるときの、マウスカーソルカラーを指定します。

-r
-rv
--reverse-video

フォアグラウンドカラーとバックグラウンドカラーを入れ替えて、反転表示します。

--color=mode

Emacsをテキスト端末で実行するときの、カラーサポートモード(color support mode)をセットします。その文字端末のterminfoデータベースまたはtermcapで示される、いくつかのサポートされたカラーをオーバーライドします。パラメーターmodeには、以下の1つを指定できます:

never
no

端末の能力がカラーをサポートすると指定していても、カラーを使用しません。

default
auto

--colorを指定しないときと同じです。Emacsは開始時に端末がカラーをサポートするか検知して、もしサポートされていれば、カラーディスプレーをオンに切り替えます。

always
yes
ansi8

無条件にカラーサポートをオンに切り替えて、標準的な8カラーにたいするANSIエスケープシーケンスによるカラーコマンドを使用します。

num

num個のカラーにたいするカラーモードを使用します。numが-1の場合、カラーサポートをオフに切り替えます(‘never’と同じです)。0の場合、この端末にたいするデフォルトのカラーサポートを使用します(‘auto’と同じです)。そうでない場合、num個のカラーにたいする適切な標準モードを使用します。端末の能力により、numの値に応じて、Emacsは8色、16色、88色、256色のカラーモードに切り替えることができるでしょう。numカラーをサポートするモードが存在しない場合、Emacsはあたかもnumに0が指定された場合のように、その端末のデフォルトのカラーサポートを使用します。

modeが省略された場合のデフォルトは、ansi8です。

たとえばcoralのマウスカーソルと、slate blueのテキストカーソルを使用するには、以下のように入力します:

emacs -ms coral -cr 'slate blue' &

-rv’オプションを指定するか、Xリソースの‘reverseVideo’で、フォアグラウンドとバックグラウンドのカラーを反転できます。

-fg’、‘-bg’、‘-rv’オプションの機能は、テキスト端末でも、グラフィカルなディスプレーと同様です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.8 ウィンドウのサイズと位置にたいするオプション

以下は、Emacsの初期フレームのサイズと位置を指定する、コマンドラインオプションのリストです:

-g widthxheight[{+-}xoffset{+-}yoffset]]
--geometry=widthxheight[{+-}xoffset{+-}yoffset]]

サイズwidthheight(文字の列数と行数)、および位置xoffsetyoffset(ピクセル)を指定します。パラメーターwidthheightはすべてのフレームに適用されますが、xoffsetyoffsetは初期フレームだけに適用されます。

-fs
--fullscreen

スクリーンのサイズになるように、幅と高さを指定します。通常は、ウィンドウマネージャーによる装飾は表示されません(Emacsを起動した後に、F11 toggle-frame-fullscreenを使用して、この状態を切り替えることができます)。

-mm
--maximized

Emacsのフレームが最大化されるよう指定します。これは通常、そのフレームがウィンドウマネージャーによる装飾をもつことを意味します(Emacsを起動した後に、M-F10 toggle-frame-maximizedを使用して、この状態を切り替えることができます)。

-fh
--fullheight

高さがスクリーンの高さになるように指定します。

-fw
--fullwidth

幅がスクリーンと同じ幅になるように指定します。

--geometry’オプションでは、{+-}は、プラス記号かマイナス記号のどちらかを意味します。xoffsetの前のプラス記号はスクリーンの左端からの距離、マイナス記号は右端からの距離を意味します。yoffsetの前のプラス記号はスクリーンの上端からの距離、マイナス記号は下端からの距離を意味します。xoffsetyoffsetの値自体に正または負の値を指定できますが、それはこれらの意味を変更するものではなく、方向だけを変更します。

Emacsは、xtermがジオメトリーを解釈するのと同じ単位を使用します。widthheightは文字で数えられるので、大きなフォントは、小さなフォントより大きなフレームを作成します(プロポーショナルフォントを指定した場合、Emacsは幅の単位として、そのプロポーショナルフォントの最大幅を使用します)。xoffsetyoffsetはピクセルで数えます。

ジオメトリー指定で、すべてのフィールドを指定する必要はありません。xoffsetyoffsetの両方を省略した場合、ウィンドウマネージャーがEmacsフレームをどこに配置するかを決定するか、もしかしたらマウスでその場所を指定できるかもしれません。たとえば‘164x55’は、ウィンドウの幅が164(通常のウィンドウを横に2つ並べられる幅)で、55行分の高さを指定します。

デフォルトのフレーム幅は80文字、デフォルトの高さは35行から40行です。幅と高さの、どちらか一方、または両方を省略できます。ジオメトリーが整数で開始される場合、Emacsはそれを幅と解釈します。ジオメトリーの開始が‘x’でその後に整数が続く場合、Emacsはそれを高さと解釈します。したがって‘81’は幅だけを指定し、‘x45’は高さだけを指定します。

ジオメトリーを‘+’か‘-’で開始した場合、それはオフセットを示し、幅と高さの両方のサイズが省略されたことを意味します。したがって‘-3’はxoffsetだけを指定します(オフセットを1つだけ与えたとき、それは常にxoffsetになります)。‘+3-3’はxoffsetyoffsetの両方を指定し、フレームをスクリーンの左下に配置します。

Xリソースファイル(Xリソースを参照してください)で、任意またはすべてのフィールドにたいするデフォルトを指定できます。それらにたいしてフィールドを選択して、‘--geometry’オプションでオーバーライドできます。

モードラインとエコーエリアはフレームの2行を占めるので、初期のテキストウィンドウの高さは、ジオメトリーで指定した高さより、2つ少なくなります。非X-toolkitバージョンのEmacsでは、指定した数から、メニューバーの占める1行が引かれます。しかしX-toolkitバージョンでは、メニューバーは付加的で、指定された高さにたいして数えられません。ツールバーがある場合も、それは付加的です。

メニューバーやツールバーを有効または無効にすることにより、通常のテキストが利用できるスペースが変わります。したがって、Emacsがツールバーつき(デフォルト)で開始しされ、ツールバーがあることを前提にジオメトリー指定を処理して、それを初期化ファイルでツールバーを無効にしていた場合、あなたが指定したのと異なるフレームジオメトリーになるでしょう。ツールバーがないサイズを得るには、Xリソースで“no tool bar”を指定します(EmacsにたいするXリソースの表を参照してください)。そうすれば、Emacsは指定されたジオメトリーを処理するときに、ツールバーがないことを知ることができます。

--fullscreen’、‘--maximized’、‘--fullwidth’、‘--fullheight’のどれか1つを使用するとき、フレームが本当に最大化またはフルスクリーンに見えるようにするために、変数frame-resize-pixelwiseを非nil値にすることを要求するウィンドウマネージャーがいくつかあります。

位置にたいする、プログラム指定とユーザー指定の両方を無視するようにできるオプションをもつウィンドウマネージャーがいくつかあります。これらのオプションがセットされている場合、Emacsはウィンドウを正しく配置するのに失敗します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.9 内枠ボーダーと外枠ボーダー

1つのEmacsフレームは内枠ボーダー(internal border)と、外枠ボーダー(outer border)をもちます。内枠ボーダーはフレームのテキスト部分の周囲にある、バックグラウンドカラーによる追加の縁取り(extra strip)です。内枠ボーダーはEmacs自身が描画します。外枠ボーダーはフレームのツールバーとメニューバーの外側にあり、Xにより描画されます。ウィンドウマネージャーにより描画される外部ボーダー(external border)も存在します。外部ボーダーのサイズは、Emacs内からセットすることはできません。

-ib width
--internal-border=width

内枠ボーダー(フレームのテキストエリア周辺)の幅に、ピクセル単位でwidthを指定します。

-bw width
--border-width=width

外枠ボーダーの幅に、ピクセル単位でwidthを指定します。

フレームのサイズを指定するとき、ボーダーは含まれません。フレームの位置は、外枠ボーダーの縁端から測られます。

ピクセル幅nの内枠ボーダーを指定するには、‘-ib n’オプションを使用します。デフォルトは1です。外枠ボーダーの幅を指定するには、‘-bw n’を使用します(ウィンドウマネージャーはその指定に注意を払わないかもしれませんが)。外枠ボーダーのデフォルト幅は2です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.10 フレームタイトル

Emacshフレームは常に指定されたタイトルをもち、それはウィンドウ装飾とアイコンに、フレームの名前として表示されます。デフォルトのタイトルは‘invocation-name@machine’という形式(フレームが1つだけのとき)か、選択されたウィンドウのバッファー名(複数のフレームがある場合)になります。

コマンドラインオプションで、Emacsの初期フレームにデフォルト以外のタイトルを指定できます:

-T title
--title=title

Emacs初期フレームのタイトルとしてtitleを指定します。

--name’オプション(Xリソースを参照してください)でも、Emacs初期フレームのタイトルを指定できます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.11 アイコン

-iconic
--iconic

Emacsをアイコン化した状態で開始します。

-nbi
--no-bitmap-icon

Emacsアイコンの使用を無効にします。

ほとんどのウィンドウマネージャーでは、Emacsフレームをアイコン化(または“最小化”)して、見えなくすることができます。いくつかのウィンドウマネージャーでは、他のウィンドウマネージャーがアイコン化されたウィンドウを完全に見えなくするのにたいして、アイコン化されたウィンドウを小さなアイコンでおきかえるものもあります。‘-iconic’オプションは、フレームをすぐに表示するのではなく、アイコン化された状態で実行を開始するよう、Emacsに指示します。テキストフレームはアイコン化の解除(または“最小化の解除”)をするまで表示されません。

デフォルトでは、EmacsはEmacsロゴを含むアイコンを使用します。Gnomeのようなデスクトップ環境では、このアイコンは他のコンテキスト、たとえばEmacsフレームに切り替えるときにも表示されます。‘-nbi’または‘--no-bitmap-icon’オプションは、使用するアイコンの種類をウィンドウマネージャーに選択させるよう、Emacsに指示します。通常これはフレームのタイトルを含んだ、ただの矩形です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C.12 その他のディスプレーオプション

--parent-id id

XEmbedプロトコルを通じて、idを親XウィンドウIDとする、クライアントXウィンドウとして、Emacsを開始します。現在のところ、このオプションは開発者にとって有用です。

-vb
--vertical-scroll-bars

垂直スクロールバーを有効にします。

-lsp pixels
--line-spacing=pixels

行間の追加のスペースpixelsを、ピクセルで指定します。

-nbc
--no-blinking-cursor

グラフィカルなディスプレーで、点滅カーソルを無効にします。

-D
--basic-display

メニューバー、ツールバー、スクロールバー、ツールチップを無効、font-lock-modeと点滅カーソルをオフに切り替えます。これは表示問題のデバッグするテストケースを簡単にするのに有用です。

--xrm’オプション(Xリソースを参照してください)は、追加のXリソース値を指定します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Appendix D Xのオプションとリソース

Xを使用するプログラムにたいして通常行なうように、Xリソースを使用してEmacsのXに関連する外観をカスタマイズできます。

EmacsがGTK+サポートつきでコンパイルされている場合、メニューバー、スクロールバー、ダイアログボックスなどの、さまざまなグラフィカルウィジェットの外観は GTK+リソースで決定されるので、これについても説明します。 EmacsがGTK+のサポートなしでビルドされた場合、これらのウィジェットの外観は追加のXリソースにより決定されます。

MS-Windowsでは、システムレジストリー(MS-Windowsのシステムレジストリーを参照してください)を使用して、いくつかの外観を同じようにカスタマイズできます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

D.1 Xリソース

Xウィンドウシステムの下で実行されているプログラムは、クラスとリソースの階層の下にユーザーオプションを組織化します。これらのオプションにたいして、Xリソースファイル(X resource file)でデフォルト値を指定できます。Xリソースファイルは、通常~/.Xdefaultsまたは~/.Xresourcesという名前です。このファイルの内容を変更しても、変更は即座に効果をもちません。これはXサーバーが独自にリソースのリストを保持しているからです。これを更新するには、たとえば‘xrdb ~/.Xdefaults’のように、コマンドxrdbを使用します。

一般的にXリソースを通じて指定されたセッティングは、特に初期フレームのパラメーター(フレームパラメーターを参照)に関して、Emacsのinitファイル(Emacs初期化ファイルを参照)のセッティングをオーバーライドします。

(MS-WindowsシステムはXリソースファイルをサポートしません。そのようなシステムでは、EmacsはWindowsレジストリーの中からXリソースを探します。最初にキー‘HKEY_CURRENT_USER\SOFTWARE\GNU\Emacs’の下を探します。これはカレントユーザーだけに影響し、システムワイドなセッティングをオーバーライドします。次にキー‘HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs’の下を探します。これはシステムのすべてのユーザーに影響します。メニューとスクロールバーは、MS-Windowsのネイティブなウィジェットなので、Display Control Panelのシステムワイドなセッティングからしかカスタマイズできません。以下で説明するように、コマンドラインオプション‘-xrm’を使用して、リソースをセットすることもできます。)

Xリソースファイルの各行は、1つのオプション、または関連するオプションのコレクションにたいして値を指定します。ファイル内で行が出現する順番に意味はありません。各リソース指定は、プログラム名(program name)リソース名(resource name)から構成されます。これらの名前の大文字小文字は区別されます。以下は例です:

emacs.cursorColor: dark green

プログラム名は、そのリソースが適用される実行可能ファイルの名前です。Emacsでは通常、‘emacs’です。Emacsの実行可能ファイル名の如何にかかわらずに、Emacsのすべてのインスタンスに適用される定義を指定するには、‘Emacs’を使用します。

リソース名はプログラムセッティングの名前です。たとえばEmacsは、‘cursorColor’リソースを、テキストカーソルのカラーを制御するリソースと認識します。

リソースは、名前のついたクラスにグループ化されます。たとえば‘Foreground’クラスには、リソース‘cursorColor’、‘foreground’、‘pointerColor’が含まれます(EmacsにたいするXリソースの表を参照してください)。以下のように、リソース名を使用するかわりに、クラス内のすべてのリソースにたいしてデフォルト値を指定するのに、クラス名を使用できます:

emacs.Foreground: dark green

変数inhibit-x-resourcesを非nil値にセットした場合、EmacsはXリソースを処理しません。コマンドラインオプション‘-Q’ (または‘--quick’)でEmacsを呼び出した場合、inhibit-x-resourcesは自動的にtにセットされます(初期化オプションを参照してください)。

これに加えて、Xリソースファイルをオーバーライドするために、以下のコマンドラインオプションが使用できます:

-name name
--name=name

このオプションは初期Emacsフレームのプログラム名をnameにセットします。これは初期フレームのタイトルもnameにセットします。このオプションは、それ以降のフレームには影響しません。

このオプションを指定しない場合、プログラム名としてEmacs実行可能ファイル名をデフォルトとして使用されます。

整合性のため、‘-name’は、特定のフレームに属さない、他のリソース値にたいして使用する名前も指定します。

Emacs呼び出しの名前がつくリソースは、‘Emacs’という名前のクラスにも所属します。‘emacs’のかわりに‘Emacs’と記述した場合、実行可能ファイル名にかかわらず、そのリソースは、すべてのEmacsジョブのすべてのフレームに適用されます。

-xrm resource-value
--xrm=resource-value

このオプションは、現在のEmacsジョブにたいして、Xリソース値を指定します。

resource-valueは、Xリソースファイルの内部で使用するのと同じ形式をもつ必要があります。複数のリソース指定を含めるために、複数の‘-xrm’オプションを利用可能です。‘#include \"filename\"’を使用して、ファイルのリソース指定をすべてインクルードすることもできます。‘-xrm’で指定されたリソース値は、他のすべてのリソース指定に優先します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

D.2 EmacsにたいするXリソースの表

以下のテーブルは、Emacsが認識するXリソース名です。いくつかのリソースは、Emacsが種々のXツールキット(GTK+、Lucid、...等)とともにコンパイルされていなければ効果がないことに注意してください(以下ではそのような場合は個々にを示す)。

background (class Background)

バックグラウンドカラーです(フェイスのカラーを参照してください)。

bitmapIcon (class BitmapIcon)

on’のときはEmacsアイコンを表示し、‘off’のときは表示しないように、ウィンドウマネージャーに指示します。アイコンの説明は、アイコンを参照してください。

borderColor (class BorderColor)

フレームの外枠ボーダーのカラーです。EmacsがGTK+サポートつきでコンパイルされている場合、効果はありません。

borderWidth (class BorderWidth)

フレームの外枠ボーダーの幅(ピクセル)です。EmacsがGTK+サポートつきでコンパイルされている場合、効果はありません。

cursorBlink (class CursorBlink)

開始時に、このリソースの値が‘off’、‘false’、‘0’の場合、EmacsはBlink Cursorモードを無効にします(カーソルの表示を参照してください)。

cursorColor (class Foreground)

テキストカーソルのカラーです。Emacs開始時にこのリソースが指定されている場合、Emacsはその値をcursorフェイス(テキストのフェイスを参照してください)のバックグラウンドカラーとしてセットします。

font (class Font)

defaultフェイスにたいするフォント名です(フォントを参照してください)。フォントセット名(フォントセットを参照してください)を指定することもできます。

fontBackend (class FontBackend)

フォントの描画に使用するバックエンドを、優先順にカンマ区切りで記述したリストです。たとえば値‘x,xft’は、EmacsにXコアフォントドライバー(X core font driver)を使用してフォントを描画し、それに失敗したときはXftフォントドライバー(Xft font driver)にフォールバックするよう指示します。このリソースは通常、セットしないでおくべきです。その場合、Emacsは利用可能なすべてのバックエンドの使用を試みます。

foreground (class Foreground)

テキストにたいするデフォルトのフォアグラウンドカラーです。

fullscreen (class Fullscreen)

望ましいフルスクリーンサイズを指定します。値はfullbothmaximizedfullwidthfullheightのうちどれか1つを指定でき、これらはコマンドラインオプションの‘-fs’、‘-mm’、‘-fw’、‘-fh’に相当します(ウィンドウのサイズと位置にたいするオプションを参照してください)。これは初期フレームだけに適用されることに注意してください。

geometry (class Geometry)

ウィンドウのサイズと位置です。値にはコマンドラインオプション‘-g’または‘--geometry’と同じ形式で、サイズと位置を指定します。

サイズはEmacsセッションのすべてのフレームに適用されますが、位置は初期フレーム(特定のフレームにたいするリソースの場合は、そのフレーム)だけに適用されます。

このリソースを、‘emacs*geometry’のように指定しないように気をつけてください。これはEmacsのメインのフレームと同じように、個別のメニューにも影響します。

horizontalScrollBars (class ScrollBars)

このリソースの値が‘off’、‘false’、‘0’の場合、Emacsは開始時にHorizontal Scroll Barモードを無効にします(スクロールバーを参照)。

iconName (class Title)

アイコンに表示する名前です。

internalBorder (class BorderWidth)

フレームの内枠ボーダーの幅(ピクセル)です。

lineSpacing (class LineSpacing)

行間の追加のスペース(ピクセル)です。

menuBackground (class Background)

ツールキット版でないEmacsの、メニューのバックグラウンドカラーです(ツールキット版の場合はMotifメニューのXリソースGTK+リソースを参照してください)。

menuBar (class MenuBar)

このリソースの値が‘off’、‘false’、‘0’の場合、Emacsは開始時にMenu Barモードを無効にします(メニューバーを参照してください)。

minibuffer (class Minibuffer)

none’の場合、Emacsはこのフレームにミニバッファーを作成しません。かわりに別のミニバッファーフレームを使用します。

paneFont (class Font)

ツールキット版でないEmacsの、メニューペインタイトルのフォント名です(ツールキット版の場合はLucidのメニューとダイアログMotifメニューのXリソースGTK+リソースを参照)。

paneForeground (class Foreground)

ツールキット版でないEmacsの、メニューペインタイトルのフォント名です(ツールキット版の場合はLucidのメニューとダイアログMotifメニューのXリソースGTK+リソースを参照)。

pointerColor (class Foreground)

マウスカーソルのカラーです。多くのグラフィカルなデスクトップ環境では、この方法でEmacsがマウスカーソルを変更するのを許さないので、効果はありません。

privateColormap (class PrivateColormap)

on’の場合、Emacsが使用するクラスPseudoColorのdefault visualが使用されている場所で、プライベートなカラーマップを使用します。

reverseVideo (class ReverseVideo)

on’の場合はデフォルトのフォア九ラウンドカラーとバックグラウンドカラーを切り替え、‘off’の場合は指定されたカラーを使用します。

screenGamma (class ScreenGamma)

カラーのガンマ補正で、フレームパラメーターのscreen-gammaと等価です。

scrollBar (class ScrollBar)

このリソースの値が‘off’、‘false’、‘0’の場合、Emacsは開始時にScroll Barモードを無効にします(スクロールバーを参照してください)。

scrollBarWidth (class ScrollBarWidth)

スクロールバーの幅(ピクセル)で、フレームパラメーターのscroll-bar-widthと等価です。EmacsがGTK+サポートつきでコンパイルされている場合は、このリソースをセットしないでください。

selectionFont (class SelectionFont)

ツールキット版でないEmacsの、ポップアップメニューアイテムのフォント名です(ツールキット版の場合はLucidのメニューとダイアログMotifメニューのXリソースGTK+リソースを参照)。

selectionForeground (class SelectionForeground)

ツールキット版でないEmacsの、ポップアップメニューアイテムのフォアグラウンドカラーです(ツールキット版の場合はLucidのメニューとダイアログMotifメニューのXリソースGTK+リソースを参照してください)。

selectionTimeout (class SelectionTimeout)

選択にたいする応答を待つ時間(ミリ秒)です。選択したオーナーが、この時間内に応答しない場合は諦めます。値0は必要なだけ待つことを意味します。

synchronous (class Synchronous)

on’の場合、Emacsを同期モード(synchronous mode)で実行します。同期モードはXに関する問題のデバッグに有用です。

title (class Title)

初期Emacsフレームのタイトルバーに表示する名前です。

toolBar (class ToolBar)

このリソースの値が‘off’、‘false’、‘0’の場合、Emacsは開始時にTool Barモードを無効にします(ツールバーを参照してください)。

tabBar (class TabBar)

このリソースの値が‘on’、‘yes’、‘1’なら、Emacsは開始時にTab Barモードを無効にします(タブバーを参照してください)。

useXIM (class UseXIM)

false’または‘off’の場合、X入力メソッド(XIM: X input methods)の使用を無効にします。これはEmacsがXIMサポートつきでビルドされた場合だけ関係があります。Xのクライアント/サーバーのリンクが遅いときは、XIMをオフにするのが便利かもしれません。

verticalScrollBars (class ScrollBars)

left’の場合はフレームの左側、‘right’の場合は右側、‘off’のときはスクロールバーをもちません(スクロールバーを参照)。

visualClass (class VisualClass)

Xカラーディスプレーのvisual classです。指定する場合、値は‘TrueColor’、‘PseudoColor’、‘DirectColor’、‘StaticColor’、‘GrayScale’、‘StaticGray’で始まり、その後に‘-depth’が続きます。ここでdepthは色平面の数です。

特定のEmacsフェイスのカスタマイズに、Xリソースを使用することもできます(テキストのフェイスを参照してください)。たとえば‘face.attributeForeground’をセットするのは、フェイスfaceの‘foreground’属性をカスタマイズするのと等価です。しかし、わたしたちはXリソースを使用してフェイスのカスタマイズするかわりに、Emacs内でフェイスをカスタマイズする方法を推奨します。フェイスのカスタマイズを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

D.3 Lucidのメニューとダイアログ

EmacsがLucidウィジェットを使用したXツールキットサポートつきでコンパイルされた場合、メニューバー(メニューバーを参照)、ポップアップメニュー、ダイアログボックス(ダイアログボックスの使用を参照)の外観をカスタマイズするために、Xリソースを使用できます。メニューバーにたいするリソースは、‘pane.menubar’クラスの中に集められています(例のごとくEmacs実行可能ファイル名または、すべてのEmacs呼び出しに対応する‘Emacs’の後に続けて記述します)。ポップアップメニューにたいするリソースは、‘menu*’クラスの中です。ダイアログボックスにたいするリソースは、‘dialog*’クラスの中です。

たとえばメニューバーエントリーを‘Courier-12’フォントで表示するには、以下のように記述します:

Emacs.pane.menubar.font: Courier-12

Lucidウィジェットは、あなたのlocaleで他国語テキストを表示できます。これを有効にするには、fontリソースのかわりに、fontSetリソースを指定します。fontfontSetの両方のリソースが指定された場合は、fontSetリソースが使用されます。

以下はメニューバー、ポップアップメニュー、ダイアログにたいするリソースのリストです:

font

メニューアイテムのテキストにたいするフォントです。

fontSet

メニューアイテムのテキストにたいするフォントセットです。

background

バックグラウンドカラーです。

buttonForeground

選択されたアイテムのフォアグラウンドカラーです。

foreground

フォアグラウンドカラーです。

horizontalSpacing

アイテム間の水平間隔(ピクセル)です。デフォルトは3です。

verticalSpacing

アイテム間の垂直間隔(ピクセル)です。デフォルトは2です。

arrowSpacing

(サブメニューを示す)矢印と、それに付随するテキストの間の水平間隔です。デフォルトは10です。

shadowThickness

3Dのボタン、矢印、その他グラフィカルな要素の陰線(shadow lines)の厚さです。デフォルトは1です。

margin

メニューバーの余白(文字数)です。デフォルトは1です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

D.4 MotifメニューのXリソース

EmacsがMotifまたはLessTifのウィジェットを使用するXツールキットサポートつきでコンパイルされた場合、メニューバー(メニューバーを参照)、ポップアップメニュー、ダイアログボックス(ダイアログボックスの使用を参照)の外観をカスタマイズするために、Xリソースを使用できます。しかし、これらのリソースは、Lucidウィジェットとは組織方法が異なります。

メニューバーにたいするリソース名は‘pane.menubar’クラスの中にあり、それらは以下の形式で指定しなければなりません:

Emacs.pane.menubar.subwidget.resource: value

ポップアップメニューにたいするリソースは、‘pane.menubar’ではなく、‘menu*’クラスの中にあります。ダイアログボックスにたいするリソースは‘dialog’クラスの中です。どの場合でも、それぞれのメニュー文字列がサブウィジェットです。サブウィジェットの名前は、メニューアイテム文字列と同じです。たとえば、メニューバーの中の‘File’メニューは、‘emacs.pane.menubar.File’という名前のサブウィジェットです。

通常は、メニューバー全体に同じリソースを指定したいでしょう。これを行なうには、特定のウィジェット名のかわりに‘*’を使用します。たとえば、サブメニューを含むすべてのメニューバーアイテムに、フォント‘8x16’を指定するには、以下のように記述します:

Emacs.pane.menubar.*.fontList: 8x16

サブメニューの中の各アイテムは、Xリソースにたいする独自の名前をもちます。たとえば‘File’サブメニューは、‘Save (current buffer)’という名前のアイテムをもちます。サブメニューアイテムにたいするリソース指定は以下のようになります:

Emacs.pane.menubar.popup_*.menu.item.resource: value

たとえば、以下は‘Save (current buffer)’アイテムにフォントを指定する方法です:

Emacs.pane.menubar.popup_*.File.Save (current buffer).fontList: 8x16

Tools’の下の、‘Spell Checking’の下の‘Complete Word’のような、第2レベルのアイテムには、以下のテンプレートが当てはまります:

Emacs.pane.menubar.popup_*.popup_*.menu.resource: value

たとえば、

Emacs.pane.menubar.popup_*.popup_*.Spell Checking.Complete Word: value

(これは長い1行で記述する必要があります。)

サブメニューアイテムにメニューバー自体とは異なる外観を与えたい場合、最初にすべてにたいしてリソースを指定してから、そのサブメニューにたいする値をオーバーライドしなければなりません。以下は例です:

Emacs.pane.menubar.*.fontList: 9x18
Emacs.pane.menubar.popup_*.fontList: 8x16

LessTifのファイル選択ボックスにたいしてリソースを指定するには、以下のように‘fsb*’を使用します:

Emacs.fsb*.fontList: 8x16

以下はLessTifのメニューバーとポップアップメニューにたいするリソースのリストです:

armColor

アームドボタン(armed button: 押されてまだ離されていないボタン)を表示するカラーです。

fontList

使用するフォントです。

marginBottom
marginHeight
marginLeft
marginRight
marginTop
marginWidth

アイテムの周囲に残すスペースの量を、ボーダーも含めて指定します。

borderWidth

メニューアイテムの各辺のボーダーの幅です。

shadowThickness

ボーダーの影の幅です。

bottomShadowColor

ボーダーの影の底辺と右辺のカラーです。

topShadowColor

ボーダーの影の上辺と左辺のカラーです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

D.5 GTK+リソース

EmacsがGTK+サポートつきでコンパイルされた場合、EmacsのGTK+ウィジェット(例: メニュー、ダイアログ、ツールバー、スクロールバー)をカスタマイズする一番簡単な方法は、たとえばGNOME theme selectorなどで適切なGTK+テーマを選択する方法です。

GTK+バージョン2では、Emacsで使用されるGTK+ウィジェットの外観をカスタマイズするために、GTK+リソースも使用できます。これらのリソースは、ファイル~/.emacs.d/gtkrc(Emacs固有のGTK+リソース用)、またはファイル~/.gtkrc-2.0(一般的なGTK+リソース用)のどちらかで指定されます。GTK+は、GNOMEでGConfを実行するとき~/.gtkrc-2.0を無視するように思われるため、わたしたちは~/.emacs.d/gtkrcの使用を推奨します。しかし~/.emacs.d/gtkrcによるカスタマイズをオーバーライドするGTK+テーマがあることに注意してください。これにたいして、わたしたちができることはありません。GTK+リソースは、EmacsのGTK+ウィジェットと関係のない側面、たとえばEmacsのメインウィンドウのフォントやカラーにたいしては影響しません。これらは通常のXリソースに管理されます(Xリソースを参照してください)。

以下のセクションでは、EmacsにたいしてGTK+リソースをカスタマイズする方法を説明します。GTK+リソースについての詳細は、https://developer.gnome.org/gtk2/stable/gtk2-Resource-Files.htmlのGTK+ APIドキュメントを参照してください。

GTK+バージョン3では、GTK+リソースは完全に異なるシステムに置き換えられました。GTK+ウィジェットの外観は、今やCSS-likeなスタイルのファイル、すなわちGTK+をインストールしたディレクトリーのgtk-3.0/gtk.css、およびローカルなスタイルセッティングにたいしては~/.themes/theme/gtk-3.0/gtk.cssで決定されます(themeはカレントGTK+テーマの名前です)。したがってこのセクションのGTK+リソースの説明は、GTK+3に適合しません。GTK+3スタイリングシステムについての詳細は、https://developer.gnome.org/gtk3/3.0/GtkCssProvider.htmlを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

D.5.1 GTK+ Resource Basics

GTK+2リソースファイル(通常は~/.emacs.d/gtkrc)で、リソースをセットする一番簡単な方法は、単に変数に値を割り当てる方法です。たとえば以下の行を利ソースファイルに置くことにより、すべてのGTK+ウィジェットのフォントが‘courier-12’に変更されます:

gtk-font-name = "courier 12"

この場合、フォント名はFontconfigスタイルのフォント名やXLFDではなく、GTKフォントパターン(Pangoフォント名とも呼ばれます)で記述しなければなりません。フォントを参照してください。

ウィジェットをカスタマイズするには、最初にスタイルを定義して、そのスタイルをウィジェットに適用します。以下はメニューにたいしてフォントをセットする例です(文字‘#’はコメントを示します):

# Define the style ‘my_style’.
style "my_style"
{
  font_name = "helvetica bold 14"
}

# Specify that widget type ‘*emacs-menuitem*’ uses ‘my_style’.
widget "*emacs-menuitem*" style "my_style"

この例のウィジェット名にはワイルドカードが含まれるので、このスタイルは‘*emacs-menuitem*’にマッチするすべてのウィジェットに適用されます。ウィジェットは、外側のウィジェットから内側のウィジェットへと、それが含まれる方法により、名前がつけられます。以下はEmacsメニューバーに‘my_style’を指定して適用する例です:

widget "Emacs.pane.menubar.*" style "my_style"

以下はスクロールバーを部分的に変更する方法を示す、より複雑な例です:

style "scroll"
{
  fg[NORMAL] = "red"     # Arrow color.
  bg[NORMAL] = "yellow"  # Thumb and background around arrow.
  bg[ACTIVE] = "blue"    # Trough color.
  bg[PRELIGHT] = "white" # Thumb color when the mouse is over it.
}

widget "*verticalScrollBar*" style "scroll"

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

D.5.2 GTK+ウィジェット名

GTK+ウィジェットはウィジェット名(widget name)ウィジェットクラス(widget class)により指定されます。ウィジェット名は特定のウィジェット(たとえば‘emacs-menuitem’)を参照し、ウィジェットクラスは似通ったウィジェット(たとえば‘GtkMenuItem’)のコレクションを参照します。ウィジェットは常にクラスをもちますが、名前をもつ必要はありません。

絶対名(absolute names)とは、一連のウィジェット名またはウィジェットクラスで、他のウィジェットに埋め込まれたウィジェットの階層に対応します。たとえば、topという名前のGtkWindowが、boxという名前のGtkVBoxを含み、それがさらにmenubarという名前のGtkMenuBarを含む場合、メニューバーウィジェットの完全クラス名はGtkWindow.GtkVBox.GtkMenuBarで、完全ウィジェット名はtop.box.menubarになります。

GTK+リソースファイルには、ウィジェットの外観を指定する2種類のコマンドを含めることができます:

widget

クラス名または単にクラスにもとづいてウィジェットのスタイルを指定します。

widget_class

クラス名にもとづいてウィジェットのスタイルを指定します。

widgetコマンドを使用する例は、前のセクションを参照してください。widget_classコマンドも同じように使用されます。ウィジェット名/ウィジェットクラスとスタイルはダブルクォートで囲わなければならないこと、そしてこれらのコマンドはGTK+リソースファイルのトップレベルに記述しなければならないことに注意してください。

前に記したように、ウィジェット名とウィジェットクラスはシェルのワイルドカード構文で指定することができます。‘*’は0文字以上にマッチし、‘?’は1文字にマッチします。以下はすべてのウィジェットにスタイルを割り当てる例です:

widget "*" style "my_style"

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

D.5.3 EmacsでのGTK+ウィジェット名

Emacsフレームが使用するGTK+ウィジェットを以下にリストします:

Emacs (class GtkWindow)
pane (class GtkVBox)
menubar (class GtkMenuBar)
[menu item widgets]
[unnamed widget] (class GtkHandleBox)
emacs-toolbar (class GtkToolbar)
[tool bar item widgets]
emacs (class GtkFixed)
verticalScrollBar (class GtkVScrollbar)

Emacsウィンドウの内容は、emacsウィジェットにより描画されます。複数のEmacsウィンドウがある場合でも、それぞれのスクロールバーウィジェットの名前はverticalScrollBarであることに注意してください。

たとえば、以下はメニューバーのスタイルをセットする、2つの異なる方法の例です:

widget "Emacs.pane.menubar.*" style "my_style"
widget_class "GtkWindow.GtkVBox.GtkMenuBar.*" style "my_style"

GTK+ダイアログにたいしては、EmacsはクラスGtkDialogの、emacs-dialogという名前のウィジェットを使用します。ファイル選択にたいしては、EmacsはクラスGtkFileSelectionの、emacs-filedialogという名前のウィジェットを使用します。

ポップアップメニューとダイアログのウィジェットは独立したウィンドウであり、Emacsウィジェットに含まれていないので、それらのGTK+完全名は‘Emacs’で始まりません。これらのウィジェットをカスタマイズするには、以下のようにワイルドカードを使用します:

widget "*emacs-dialog*" style "my_dialog_style"
widget "*emacs-filedialog* style "my_file_style"
widget "*emacs-menuitem* style "my_menu_style"

Emacsのすべてのメニューにスタイルを適用したい場合は、以下を使用します:

widget_class "*Menu*" style "my_menu_style"

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

D.5.4 GTK+スタイル

以下は2つのGTK+スタイル宣言の例です:

pixmap_path "/usr/share/pixmaps:/usr/include/X11/pixmaps"

style "default"
{
  font_name = "helvetica 12"

  bg[NORMAL] = { 0.83, 0.80, 0.73 }
  bg[SELECTED] = { 0.0, 0.55, 0.55 }
  bg[INSENSITIVE] = { 0.77, 0.77, 0.66 }
  bg[ACTIVE] = { 0.0, 0.55, 0.55 }
  bg[PRELIGHT] = { 0.0, 0.55, 0.55 }

  fg[NORMAL] = "black"
  fg[SELECTED] = { 0.9, 0.9, 0.9 }
  fg[ACTIVE] = "black"
  fg[PRELIGHT] = { 0.9, 0.9, 0.9 }

  base[INSENSITIVE] = "#777766"
  text[INSENSITIVE] = { 0.60, 0.65, 0.57 }

  bg_pixmap[NORMAL] = "background.xpm"
  bg_pixmap[INSENSITIVE] = "background.xpm"
  bg_pixmap[ACTIVE] = "background.xpm"
  bg_pixmap[PRELIGHT] = "<none>"

}

style "ruler" = "default"
{
  font_name = "helvetica 8"
}

スタイル‘ruler’は‘default’を継承します。この方法により、既存のスタイルを元にすることができます。フォントとカラーの構文は以下に記述されています。

この例が示すように、ウィジェットの状態にもとづいてフォアグラウンドとバックグラウンドのカラーに複数の値を指定することが可能です。以下の状態が利用できます:

NORMAL

ウィジェットのフォルトの状態です。

ACTIVE

ウィジェットが何かを行なう準備ができた状態です。これはスクロールバーの溝(trough)にも適用できます。たとえばbg[ACTIVE] = "red"はスクロールバーの溝を赤にセットします。ボタンのarmed(ボタンが押されてまだ離されていない状態)も、この状態です。

PRELIGHT

マウスポインターがその上にきたとき、ウィジェットが操作可能な状態です — たとえばマウスがスクロールバーのハンドルの上やメニューアイテムの上にきたときの状態です。押されていないボタンの上にマウスがくると、そのボタンはこの状態になります。

SELECTED

ユーザーにより選択されたデータにたいする状態です。それは選択されたテキストやリストの選択されたアイテムの場合もあります。この状態はEmacsでは使用されません。

INSENSITIVE

ウィジェットが可視だが通常の方法では操作できない状態 — たとえば押せないボタンや、無効なメニューアイテムなどです。無効なメニューアイテムを黄色で表示するには、fg[INSENSITIVE] = "yellow"を使用します。

以下をスタイル宣言に記述できます:

bg[state] = color

ウィジェットのバックグラウンドカラーを指定します。編集可能なテキストはbgではなくbaseを使用することに注意してください。

base[state] = color

編集可能なテキストのバックグラウンドカラーを指定します。Emacsでは、ファイルダイアログのテキストフィールドのバックグラウンドに、このカラーが使用されます。

bg_pixmap[state] = "pixmap"

(バックグラウンドカラーのかわりに)バックグラウンドイメージを指定します。pixmapはイメージファイル名です。GTK+はXPM、XBM、GIF、JPEG、PNGヲ含む、いくつかのイメージファイルを使用することができます。親ウィジェットと同じイメージをウィジェットに使用したい場合は、‘<parent>’を使用します。イメージを使わない場合は、‘<none>’を使用します。‘<none>’で、親スタイルから継承されたバックグラウンドイメージをキャンセルできます。

ファイル名は絶対ファイル名で指定できません。GTK+はpixmap_pathで指定されたディレクトリーのpixmapファイルを探します。pixmap_pathは、ダブルクォートされたファイルをコロンで区切ったリストで、gtkrcファイルのトップレベルで指定します(スタイル定義の中ではありません。上記の例を参照してください)。

pixmap_path "/usr/share/pixmaps:/usr/include/X11/pixmaps"
fg[state] = color

使用するウィジェットのフォアグラウンドカラーを指定します。これはメニューやボタンのテキストのカラー、スクロールバーの矢印のカラーです。編集可能なテキストにたいしては、textを使用します。

text[state] = color

編集可能なテキストのカラーです。Emacsでは、ファイルダイアログのテキストフィールドに使用されるカラーです。

font_name = "font"

ウィジェット内のテキストのフォントを指定します。fontは、‘Sans Italic 10’のような、GTK(Pango)スタイルのフォント名です。フォントを参照してください。名前は大文字小文字を区別しません。

カラーを指定する3つの方法があります。それはカラーネーム、RGBトリプレット、GTKスタイルRGBトリプレットです。カラーネームとRGBトリプレットについては、フェイスのカラーを参照してください。カラーネームは‘"red"’のように、ダブルクォートで囲む必要があります。RGBトリプレットは‘#ff0000’のように、ダブルクォートで囲う必要がありません。GTKスタイルRGBトリプレットはrgb }という形式をもち、rgbは、0から65535の整数か、0.0から1.0の浮動小数点数です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Appendix E Emacs 26 アンチニュース

時代に逆らって生きるユーザーのために、以下はEmacsバージョン26.3へのダウングレードに関する情報です。Emacs 27.2機能の不在による結果としての偉大なる単純さを、ぜひ堪能してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Appendix F EmacsとmacOS / GNUstep

このセクションでは、GNU/Linuxまたはその他のオペレーティングシステムでGNUstepライブラリーとともにビルドされたEmacs、またはmacOSでネイティブウィンドウシステムのサポートつきでビルドされたEmacsを使用する際の特性を説明します。macOSでは、Emacsはウィンドウシステムサポートなし/あり、X11、Cocoaインターフェースのいずれかでビルドできます。このセクションはCocoaビルドだけに適合します。バージョン10.6より前のmacOSはサポートしません。

GNUstepはフリーソフトウェアであり、macOSはそうではありません。非フリーなオペレーティングシステムのため、macOSはすべてのコンピューターユーザーが享受すべき自由を、ユーザーに与えません。これは不当です。あなたの自由のために、わたしたちはフリーなオペレーティングシステムへの切り替えを強く推奨します。

わたしたちは、商業オペレーティングシステム上のGNU Emacsをサポートします。なぜならそれは、この自由の経験が、商業オペレーティングシステムから脱却するよう、ユーザーを奮起するだろうからです。

さまざまな歴史的、技術的な理由により、Emacsは内部的に“Cocoa”や“macOS”ではなく、‘Nextstep’という用語を使用します。たとえばこのセクションで説明するほとんどのコマンドや変数は‘ns-’で始まりますが、これは‘Nextstep’を短縮したものです。NeXTstepは1980年代にNeXT Inc.からリリースされたアプリケーションインターフェースで、Cocoaはそれの直系の子孫です。Cocoaとは別に、他にもNeXTstepスタイルのシステムのGNUstepがあり、これはフリーソフトウェアです。これを記述している時点で、EmacsのGNUstepサポートはアルファ状態(GNUstepにたいするサポートを参照してください)ですが、わたしたちは、将来これを改善したいと望んでいます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

F.1 macOSおよびGNUstepでのEmacsの基本的な使い方

デフォルトでは、キーAltOptionは、Metaと同じです。MacのCmdキーはSuperと同じで、Emacsは他のMac/GNUstepアプリケーション(macOSおよびGNUstepでのウィンドウシステムイベントを参照してください)を模倣するこれらの修飾キーを使用した、一連のキーバインドを提供します。これらのキーバインドは通常の方法で変更できます(キーバインディングのカスタマイズを参照)。修飾キー自体はカスタマイズできます。Mac/GNUstepでのカスタマイズを参照してください。

S-mouse-1mouse-3と同様に、クリックした位置にリージョンを調整します(mouse-save-then-kill)。S-mouse-1が通常行なうように、デフォルトフェイスを変更するためのポップアップメニュー(テキストのスケールを参照してください)は表示しません。この変更は、Emacsが他のMac/GNUstepアプリケーションと同じように動作させるためです。

メニューを使用してファイルを開いたり保存するときや、Cmd-oCmd-Sといったキーバインドを使用する場合、Emacsはファイル名の読み取りにグラフィカルなファイルダイアログを使用します。しかしC-x C-fのような標準のEmacsのキーシーケンスを使用する場合、Emacsはミニバッファーを使用してファイル名を読み取ります。

GNUstepでは、X-windows環境においてテキストをXのプライマリー選択(primary selection)に転送するために、C-wM-wのかわりに、Cmd-cを使用する必要があります。そうでない場合、Emacsはクリップボード選択を使用します。同様に(C-yのかわりに)Cmd-yは、killリングやクリップボードではなく、Xのプライマリー選択からyankします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

F.1.1 環境変数の取得

latexやmanのような、Emacsの下で実行される多くのプログラムは、環境変数のセッティングに依存します。Emacsがシェルから起動された場合、自動的にこれらの環境変数を継承し、Emacsのサブプロセスもそれらを継承します。しかしEmacsがFinderから起動された場合は、シェルの子プロセスではないので、環境変数はセットされません。これによりサブプロセスの振る舞いが、シェルから実行したときと異なることが起こり得ます。

変数PATHおよびMANPATHにたいしては、macOSではPATHをセットするシステムワイドな手法は、/etc/pathsファイルと/etc/paths.dディレクトリーを使用することが推奨されています。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

F.2 Mac/GNUstepでのカスタマイズ

多くはありませんが、Nextstepポートに特有のカスタマイズオプションがいくつかあります。たとえば修飾キーやフルスクリーン動作に影響するオプションです。そのようなオプションをすべて閲覧するには、M-x customize-group RET ns RETを使用します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

F.2.1 修飾キー

以下の変数は実際の修飾キーの挙動を制御します:

ns-alternate-modifier
ns-right-alternate-modifier

左および右のOptionキーまたはAltキー。

ns-command-modifier
ns-right-command-modifier

左および右のCommandキー。

ns-control-modifier
ns-right-control-modifier

左および右のControlキー。

ns-function-modifier

Functionキー(fnキー)。

各変数の値は目的にたいしてキーを記述するシンボル、通常のキーとともに使用された際の修飾を記述する(:ordinary symbol :function symbol :mouse symbol)という形式のリスト、ファンクションキー(矢印キーのように文字を生成しない)、マウスクリックのいずれかです。

symbolcontrolmetaaltsuperhyperのいずれかなら、それを表すEmacs修飾を記述すします。symbolnoneならEmacsはそのキーを使用せず標準的な挙動のままとなります。たとえばmacOSのOptionキーなら追加の文字の合成に使用されます。

ns-right-alternate-modifierのような右手側のキーにたいする変数は、対応する左手側のキーと同じ振る舞いの使用を意味するleftにもセットできます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

F.2.2 フレーム変数

ns-use-proxy-icon

この変数はtitlebarにproxyアイコンを表示するかどうかを指定します。

ns-confirm-quit

この変数はquit時にグラフィカルなconfirmationダイアログを表示するかどうかを指定します。

ns-auto-hide-menu-bar

この変数はEmacsフレーム選択時にmacOSのメニューバーを隠すかどうかを指定します。非nilならマウスポインターがスクリーン上端近傍に移動するまでメニューバーは表示されません。

ns-use-native-fullscreen

この変数はネィティブフルスクリーンか非ネイティブフルスクリーンを使用するかどうかを制御します。ネイティブフルスクリーンはmacOS 10.7以降でのみ利用可能です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

F.2.3 macOSのトラックパッドとマウスホイールの変数

これらの変数はmacOS 10.7(Lion)以降にのみ適用されます。

ns-use-mwheel-acceleration

この変数はEmacsがシステムのマウスホイールアクセラレーションを無視するかどうかを制御します。nilならマウスホイールの‘クリック’はそれぞれ正確に1つのマウスホイールイベントに対応します。非nil(デフォルト)ならマウスホイールの‘クリック’はそれぞれユーザー入力に依存して1つ以上のマウスホイールイベントに対応するかもしれません。

ns-use-mwheel-momentum

この変数はトラックパッドを使用したスクロール時にEmacsがシステムの‘momentum’を無視するかどうかを制御します。非nil(デフォルト)なら高速にスクロールするとユーザーがトラックパッドから指を離した後も少しの間バッファーがスクロールを継続するかもしれません。

ns-mwheel-line-height

この変数はトラックパッドによるスクロールの感度を制御します。Appleのトラックパッドは行単位ではなくピクセル単位でスクロールするので、Emacsがシステムのピクセル値を行に変換します。数値をセットすると、この変数はそれをEmacsが1行とみなすピクセル数としてセットします。nilか非数値ならデフォルトの行高さを使用します。

低い数値をセットするとトラックパッドはより高感度に、高い数値では低感度になります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

F.2.4 フォントパネル

標準のMac/GNUstepのフォントパネルにアクセスするには、M-x ns-popup-font-panelを使用します。これは一番最近使用された、またはクリックされたフレームの、デフォルトフォントをセットします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

F.3 macOSおよびGNUstepでのウィンドウシステムイベント

Nextstepアプリケーションは、Xでは同等なものがない、特別なイベントを受け取ります。これらは、対応するキーストロークのシーケンスとしてではなく、特別に定義されたキーイベントとして送られます。Emacsでは、これらのキーイベントを、通常のキーストロークのように、関数にバインドできます。以下はこのようなイベントのリストです。

ns-open-file

このイベントは、他のNextstepアプリケーションがEmacsにファイルを開くよう要求したときに発生します。これの典型的な理由としては、ユーザーがFinderアプリケーションでファイルをダブルクリックしたときなどです。デフォルトでは、Emacsはこのイベントにたいして、新しいフレームを開いて、そのフレームでファイルをvisitして応答します(ns-find-file)。例外として、選択されたバッファーが*scratch*バッファーの場合、Emacsは選択されたフレームでファイルをvisitします。

Emacsがns-open-fileイベントにたいしてどのように応答するかは、ns-pop-up-framesを変更することにより、変えることができます。デフォルト値は‘fresh’で、これは上で説明したとおりの動作を行ないます。値tは、ファイルを常に新しいフレームでvisitすることを意味します。値nilは、ファイルを常に選択されたフレームでvisitすることを意味します。

ns-open-temp-file

このイベントは、他のアプリケーションがEmacsに一時ファイルを開くように要求したとき発生します。デフォルトでは、単にns-open-fileイベントを生成することにより処理され、結果は上で説明したとおりになります。

ns-open-file-line

ProjectBuilderやgdbのようないくつかのアプリケーションは、特定のファイルだけではなく、そのファイルの特定の行、または一連の行を要求します。Emacsはそのファイルをvisitして要求された行をハイライトすることにより、これを処理します(ns-open-file-select-line)。

ns-drag-n-drop

このイベントは、ユーザーが他のアプリケーションから、Emacsフレームにファイルをドラッグしたとき発生します。デフォルトの動作は、マウスの下にあるウィンドウでファイルをオープンするか、マウスの下にあるウィンドウのポイント位置にテキストを挿入します。

送信オブジェクトをEmacsが処理する方法を送信アプリケーションが判断する能力にはいくつかの制限がありますが、ユーザーは1つ以上の修飾キーを押し続けることによりデフォルトの挙動をオーバーライドできます。

control

テキストとしてカレントバッファーに挿入します。オブジェクトがファイルならファイル名を挿入します。

alt/option

オブジェクトがファイルかURLであるかのようにオープンを試みます。

super/command

そのタイプにたいするデフォルトのアクションを行います。これはアプリケーションがデフォルトの挙動をオーバーライドしている場合に有用かもしれません。

上記にリストした修飾キーはmacOSが定義したもので、ユーザーによるEmacs内での修飾の変更は影響を受けません。

ns-change-font

このイベントは、ユーザーがNextstep font panel(これはCmd-tで開くことができます)でフォントを選択したとき発生します。デフォルトの動作は、選択されたフレームのフォントを変更します(ns-respond-to-changefont)。選択されたフォントの名前とサイズは、変数ns-input-fontns-input-fontsizeに格納されます。

ns-power-off

このイベントは、ユーザーがEmacsを実行中にログアウトしたとき、またはアプリケーションメニューから“Quit Emacs”を選択したとき発生します。デフォルトの動作は、ファイルをvisitしているすべてのバッファーを保存します。

Emacsはユーザーに、‘ns-service-’で始まりサービス名で終わるコマンドを通じて、Nextstepサービスを使用することも可能にします。M-x ns-service-TABとタイプして、これらのコマンドをリストを見ることができます。これらの関数は、マークされたテキストを処理(結果でそれを置き換える)したり、文字列を引数として結果を文字列で返します。Lisp関数ns-perform-serviceを使用して、任意の文字列を任意のサービスに渡して、結果を受けとることもできます。新たに利用可能になったサービスにアクセスするには、Emacsの再起動が必要なことに注意してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

F.4 GNUstepにたいするサポート

EmacsはGNUstepの下でビルドして実行することができますが、解決すべき問題が残っています。興味のある開発者は、 emacs-develメーリングリストに連絡してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Appendix G EmacsとMicrosoft Windows/MS-DOS

このセクションでは、Microsoft WindowsでEmacsを使用する際の特性を説明します。これらの特性の中には、Microsoft’sの古いMS-DOSオペレーティングシステムに関連するものもあります。しかしMS-DOSだけに関連するEmacs機能については、別の セクション(EmacsとMS-DOSを参照してください)で説明します。

フリーなオペレーティングシステムのため、MS-Windowsはすべてのコンピューターユーザーが享受すべき自由を、ユーザーに与えません。これは不当です。あなたの自由のために、わたしたちはフリーなオペレーティングシステムへの切り替えを強く推奨します。

わたしたちは、商業オペレーティングシステム上のGNU Emacsをサポートします。なぜならそれは、この自由の経験が、商業オペレーティングシステムから脱却するよう、ユーザーを奮起するだろうからです。

MS-WindowsでのEmacsの振る舞いは、ロングファイル名のサポート、複数フレーム、スクロールバー、マウスメニュー、サブプロセスを含めて、このマニュアルの他の部分でドキュメントされているのと、だいたい同じです。しかし多くはありませんが、特別に考慮すべきこともあるので、それらについてはここで説明します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

G.1 MS-WindowsでEmacsを開始する方法

MS-WindowsでEmacsを開始するには、いくつかの方法があります:

  1. デスクトップのショートカットアイコンから、それを左マウスボタンでダブルクリックするか、1回クリックしてからRETを押します。デスクトップのショートカットは、ショートカットの“Target”(ショートカットの‘Properties”の中にあります)に、emacs.exeではなく、runemacs.exeの絶対ファイル名を指定する必要があります。なぜならショートカットのターゲットがemacs.exe(Windowsから見る限りこれはコンソールプログラムです)のときに作成されるコンソールウィンドウを、runemacs.exeは隠すからです。この方法を使用する場合、Emacsはショートカットで指定されたディレクトリーで開始されます。これを制御するには、ショートカットを右クリックして“Properties”を選択し、“Shortcut”タブで“Start in”フィールドを変更します。
  2. タスクバーのショートカットアイコンを左マウスボタンで1回クリックします。Windows Vista以降のバージョンでは、タスクバー内に表示される実行中プログラムのアイコンをピン留め(pinning)することにより、そのようなショートカットが作成できます。Emacsでこれを行うことができますが、その後にピン留めされたショートカットのプロパティで、実行するプログラムをemacs.exeではなくrunemacs.exeに変更する必要があるでしょう。Startメニュー内のEmacsアイコンをマウスの右ボタンでクリックして、‘Pin to taskbar’を選択する方法でも、タスクバーにEmacsをピン留めすることができます。繰り返しますが、実行するプログラムには、runemacs.exeを指定してください。ショートカットのプロパティで“Start in”をセットすることにより、Emacsを開始する場所を制御できます。
  3. コマンドプロンプトウィンドウから、プロンプトにたいしてemacs RETとタイプします。そのコマンドプロンプトウィンドウからは、Emacsを終了するまで、他のコマンドを呼び出すことはできなくなります。この場合、EmacsはWindowsシェルのカレントディレクトリーで開始されます。
  4. コマンドプロンプトウィンドウから、プロンプトにたいしてrunemacs RETとタイプします。そのコマンドプロンプトウィンドウから、すぐに別のコマンドを呼び出すことが可能になります。この場合EmacsはWindowsシェルのカレントディレクトリーで開始されます。
  5. WindowsのRunダイアログ(通常はStartボタンをクリックしてアクセスできる)を使用します。そのダイアログ内でrunemacs RETとタイプすれば、WindowsでのユーザーのHOMEディレクトリーの親ディレクトリーで、Emacsが起動するでしょう。MS-WindowsでのHOMEディレクトリーと開始ディレクトリーを参照してください。
  6. emacsclient.exeまたはemacsclientw.exeを通じてEmacsを開始します。これらのコマンドは、Emacsを他のプログラムから呼び出して、他のプログラムから要求された編集ジョブのために、実行中のEmacsプロセスを再使用します。サーバーとしてのEmacsの使用を参照してください。2つのコマンドの違いは、emacsclient.exeがコンソールプログラムなのにたいして、emacsclientw.exeはWindowsのGUIプログラムであるという点です。どちらのプログラムも、プログラムを終了して呼び出したプログラムに制御を戻す前に、Emacsが編集ジョブの終了をシグナルするまで待ちます。これらのコマンドを、それぞれどのような場合に使用するかは、編集サービスを必要とするプログラムが期待することに依存します。そのプログラム自身がコンソール(テキストモード)プログラムの場合は、emacsclient.exeを使用するべきです。そうすれば呼び出したプログラムと同じコマンドウィンドウにメッセージとプロンプトが表示されます。対照的に呼び出し側のプログラムがGUIプログラムの場合は、emacsclientw.exeを使用するほうがよいでしょう。なぜならemacsclient.exeはGUIプログラムから呼び出された場合、コマンドウィンドウをポップアップするからです。emacsclientw.exeを使いたい状況としては、Windows Explorerでファイルを右クリックして、ポップアップメニューで“Open With”を選択する場合です。emacsclientを呼び出すときにEmacsが実行中でない(またはサーバーとして実行されていない)場合は、‘--alternate-editor=’または‘-a’オプションを使用します。このオプションは常にエディターを与えます。emacsclientを通じて呼び出された場合、Emacsはemacsclientを呼び出したプログラムのカレントディレクトリーで開始されます。

MS-Windowsの制限により、Emacsは同一セッションでGUIとテキストモードのフレームをもつことはできないことに注意してください。また複数のコマンドプロンプトウィンドウでテキストモードのフレームを開くこともできません。なぜならWindowsのプログラムは、それぞれ1度に1つのコンソールしかもつことができないからです。これらの理由により、emacsclient-cオプションで呼び出したとき、Emacsサーバーがテキストモードセッションで実行されている場合、Emacsは常にそれが開始されたのと同じコマンドプロンプトウィンドウに、テキストモードのフレームを開きます。GUIフレームはサーバーがGUIセッションで実行されているときだけ作成されます。同様に、emacsclient-tオプションで呼び出したとき、サーバーがGUIセッションで実行されている場合はGUIフレームを作成し、サーバーセッションがコマンドプロンプトウィンドウのテキストモードで実行されている場合はテキストモードのフレームを作成します。emacsclientのオプションを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

G.2 テキストファイルとバイナリーファイル

GNU Emacsはテキスト行を分けるのに改行文字を使用します。これはGNU、Unixmその他のPOSIX準拠システムで使用されている慣習です。

対照的にMS-DOSとMS-Windowsは、テキスト行を分けるのに、通常はCR(carriage-return: キャリッジリターン)とその後にLF(linefeed: ラインフィード)の、2文字からなるシーケンスを使用します(LFは改行と同じ文字です)。したがってこれらのファイルを便利に編集するために、Emacsはこれらの行末(EOL: end-of-line)文字を変換する必要があります。そしてこれはEmacsが通常行なっていることです。Emacsはファイルを読み込むときCRLFを改行に変換して、ファイルに書き込むときは改行をCRLFに変換します。国際化文字コードの変換を処理するのと同じ仕組みが、この変換でも行なわれます(コーディングシステムを参照してください)。

ほとんどのファイルにおいて、この特別なフォーマット変換の重要な問題は、Emacsが報告する文字の位置(カーソル位置の情報を参照してください)が、オペレーティングシステムが認識するファイルサイズの情報と一致しないことです。

それに加えて、ファイル内容から行の区切りにCRLFではなく改行(LF)が使用されているとEmacsが認識した場合、Emacsはファイルの読み書きでEOL変換を行ないません。したがって特別に何かを行なわなくても、GNUおよびUnixシステムのファイルをMS-DOSで読み書きでき、編集した後でも、それらのファイルのEOLはUnixスタイルの慣習にしたがいます。

カレントバッファーにたいして、どのEOL変換が使用されているかは、モードラインに表示されます。そのバッファーにたいしてMS-DOSのEOL変換が使用されている場合、MS-WindowsでビルドされたEmacsでは、モードラインの先頭付近の、コーディングシステムニーモニックの後ろにバックスラッシュ‘\’が表示されます。なんのEOL変換も処理されていない場合、そのファイルのEOLフォーマットが通常のCRLFではないことを警告するために、バックスラッシュのかわりに文字列‘(Unix)’が表示されます。

ファイルをvisitして、DOSスタイルとUnixスタイルのどちらを使用するか指定するには、コーディングシステムを指定します(ファイルのテキストにたいするコーディングシステムの指定を参照してください)。たとえばC-x RET c unix RET C-x C-f foobar.txtは、EOL変換をせずに、ファイルfoobar.txtをvisitします。CRLFで終わる行がある場合、Emacsは行末に‘^M’を表示します。同様に、C-x RET fコマンドで、そのバッファーを指定したEOLフォーマットで保存するよう指示できます。たとえばバッファーをUnixのEOLフォーマットで保存するには、C-x RET f unix RET C-x C-sとタイプします。DOSのEOL変換でファイルをvisitしていて、それをUnixのEOLフォーマットで保存すると、dos2unixコマンドのように、そのファイルをUnixのEOLスタイルに変換できます。

NFS、Samba、または他の類似した方法により、GNUおよびUnixシステムを使用しているコンピューターのファイルシステムにアクセスする場合、Emacsはそれらのファイルシステム上のファイル — たとえファイルを新たに作成する場合でも、EOL変換を行なうべきではありません。EOL変換を行なわないようにするには、関数add-untranslated-filesystemを呼び出して、それらのファイルシステムがuntranslated(変換なし)だと指定します。この関数は、ドライブ文字とオプションでディレクトリーを含む、ファイルシステム名を引数にとります。たとえば、

(add-untranslated-filesystem "Z:")

これはZドライブが変換なしのファイルシステムであると指定し、

(add-untranslated-filesystem "Z:\\foo")

これはドライブZのディレクトリー\fooは、変換なしのファイルシステムだと指定します。

.emacsinit.elなどのinitファイル、またはsite-start.elの中でadd-untranslated-filesystemを使用するのが、ほとんどでしょう。site-start.elに記述しておけば、そのサイトのすべてのユーザーが恩恵にあずかることができます。

add-untranslated-filesystemの効果を取り消すには、関数remove-untranslated-filesystemを使用します。この関数は、前にadd-untranslated-filesystemで使用された文字列と同様の文字列を引数にとります。

ファイルシステムを変換なしと指定しても、影響があるのはEOL変換だけで、文字セットの変換に影響はありません。原則的として、行末に改行を使用するUnixスタイルをデフォルトとして、新たにファイルを作成するようEmacsに指示します。コーディングシステムを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

G.3 MS-Windowsのファイル名

MS-WindowsとMS-DOSでは通常、ファイル名の名前単位の区切りにバックスラッシュを使用します(他のシステムではスラッシュを使用します)。MS-DOSおよびMS-WindowsのEmacsは、スラッシュとバックスラッシュのどちらも使用でき、ファイル名に含まれるドライブ文字も識別できます。

MS-DOSおよびMS-Windowsでは、ファイル名は大文字小文字を区別せず、Emacsもデフォルトではファイル名の補完で大文字小文字の違いを無視します。これを行うために、MS-DOS/MS-Windowsではread-file-name-completion-ignore-caseのデフォルト値は非nilです。補完オプションを参照してください。

変数w32-get-true-file-attributesは、file-attributesdirectory-files-and-attributesのように、より正確にプリミティブなファイル属性を判断するために、Emacsが追加のシステムコールを呼び出すべきかを制御します。これらの追加のシステムコールは、ファイルの正しい所有者、リンクカウントと、パイプのような特殊ファイルのファイルタイプを取得するのに必要となります。システムコールを使用しない場合、ファイルの所有者はカレントユーザーとなり、リンクカウントは常に1に、そして特殊ファイルは通常ファイルとなるでしょう。

この変数の値がlocal(デフォルト)の場合、Emacsはローカルの固定ドライブのファイルにたいしてのみ、システムコールを呼び出します。他の非nil値は、ファイルがリムーバブルメディアやリモートボリュームにある場合も、システムコールを呼び出すことを意味し、これはDiredやその他の関連する機能の速度低下を招く恐れがあります。値nilはシステムコールを呼び出さないことを意味します。非nil値は、FAT、FAT32、exFATのようなボリュームより、ハードリンクやファイルセキュリティーをサポートするNTFSのボリュームの場合のほうが有用です。

Unixとは異なり、MS-Windowsのファイルシステムでは、ファイル名に使用されるかもしれない複数の文字にたいして制限があります。以下の文字は使用できません:

これらに加えて、ファイル名拡張子の有無に関わらず、NULLPT1PRNCONのようなDOSの文字デバイスに名前がマッチする任意のファイルは、どのディレクトリーにあっても、文字デバイスとして解釈されます。したがってその文字デバイスを使用したいときだけ、そのようなファイル名を使用します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

G.4 MS-Windowsでのlsのエミュレーション

Diredは通常、Diredバッファーで表示するディレクトリーリストを生成するために、外部プログラムのlsを使用します。しかしMS-WindowsとMS-DOSには、GNU lsのいくつかのポートは存在するものの、システムにはそのようなプログラムがありません。したがって、そのようなシステム上のEmacsは、ls-lisp.elパッケージを使用することにより、Lispでlsエミュレートします。ls-lisp.elは、lsのほぼ完全なエミュレーションを提供し、エミュレーションに特化したオプションと機能もあります。 それらについては、このセクションで説明します。

lsエミュレーションは、lsスイッチの多くをサポートしますが、すべてをサポートする訳ではありません。サポートされているオプションは、-A-a-B-C-c-G-g-h-i-n-R-r-S-s-t-U-u-v-Xです。-Fオプションは、部分的にサポートされています(ファイルをクラス化する文字を追加しますが、シンボリックリンクのフォローを抑止しません)。

MS-WindowsとMS-DOSでは、ls-lisp.elはEmacsが構築されるとき事前ロードされるので、それらの環境では常にlsのLispエミュレーションが使用されます。ポートされたlsがある場合、ls-lisp-use-insert-directory-programを非nil値にセットすることにより、変数insert-directory-programにセットされた名前の外部プログラムを使用するように戻すことができます。

ls-lisp.elがファイルをソートする順序は、以下で説明するいくつかのカスタマイズ可能なオプションに依存します。

デフォルトのソート順は、システムlocaleから派生したlocale固有ルールにしたがいます。ls-lisp-use-string-collatenil値にカスタマイズすることにより、localeから独立したソート順にすることができます。

GNUおよびUnixシステムでは、localeのエンコーディングがUTF-8のときの照合順はUCA(Unicode Collation Algorithm: Unicode照合順序アルゴリズム )にしたがいます。MS-Windowsで同様の効果を得るには、変数ls-lisp-UCA-like-collationが非nil値をもつべきです(これがデフォルトです)。結果となるソート順は句読点、シンボル文字、空白文字を無視するので、.foobarfoobarfoo barは別々ではなく一緒に表示されるでしょう。

デフォルトでは、ls-lisp.elはディレクトリーのリストを生成するのに、大文字小文字を区別するソート順を使用します。これは他のプラットフォームと同じような見映えにリストするためです。大文字小文字を区別せずにファイルをソートしたい場合は、変数ls-lisp-ignore-caseに非nil値をセットしてください。

デフォルトでは、lsの動作をエミュレートするために、ファイルとサブディレクトリーは一緒にソートされます。しかしネイティブのMS-WindowsとMS-DOSのファイルマネージャーでは、ファイルの前にディレクトリーがリストされます。このように動作させたい場合は、オプションls-lisp-dirs-firstを非nil値にカスタマイズしてください。

変数ls-lisp-verbosityは、ls-lisp.elが表示するファイル属性を制御します。値にはnil、またはシンボルlinksuidgidを1つ以上含むリストを指定します。linksは、そのファイルデータに関連付けられている(links toとも言います)別のファイルの数を表示することを意味し、これはNTFSボリュームでのみ有用です。uidはそのファイルを所有するユーザーの、数字による識別子を表示することを意味します。gidはそのファイルの所有者のグループの、数字による識別子を表示することを意味します。デフォルト値は(links uid gid)で、3つのすべてのオプション属性が表示されます。値nilはこれらの属性を何も表示しないことを意味します。

変数ls-lisp-emulationは、上記で説明した3つのオプションls-lisp-ignore-casels-lisp-dirs-firstls-lisp-verbosityでデフォルトをセットすることにより、lsエミュレーションの風合いを制御します。このオプションの値には、以下のシンボルを指定できます:

GNU
nil

GNUシステムをエミュレートします(デフォルト)。これはls-lisp-ignore-casels-lisp-dirs-firstnilに、ls-lisp-verbosity(links uid gid)にセットします。

UNIX

Unixシステムをエミュレートします。GNUと同様ですが、ls-lisp-verbosity(links uid)にセットします。

MacOS

macOSをエミュレートします。ls-lisp-ignore-casetに、ls-lisp-dirs-firstls-lisp-verbositynilにセットします。

MS-Windows

MS-Windowsをエミュレートします。ls-lisp-ignore-casels-lisp-dirs-firsttにセットし、ls-lisp-verbosityを、Windows 9Xではnil、Windowsのモダンなバージョンではtにセットします。これらのプラットフォームのEmacsユーザーの多くがデフォルトとしてGNUを好むため、たとえWindowsにおいても、デフォルトのエミュレーションはMS-Windowsではないことに注意してください。

これ以外の値をls-lisp-emulationにセットするのは、GNUをセットするのと同じです。このオプションをカスタマイズすることにより、必要に応じて3つの従属オプションを更新するために、関数ls-lisp-set-optionsが呼び出されます。ls-lisp.elがロードされた後(MS-WindowsとMS-DOSでは事前ロードされることに注意してください)に、customizeを使用せずにこの変数の値を変更した場合、この関数を手動で呼び出して、同じ結果を得ることができます。

変数ls-lisp-support-shell-wildcardsは、ファイル名パターンがサポートされる方法を制御します。非nil(デフォルト)の場合、ファイル名パターンはシェルスタイルのワイルドカードとして扱われ、nilの場合はEmacsの正規表現として扱われます。

変数ls-lisp-format-time-listは、ファイルの日付と時刻の書式をフォーマットする方法を定義します。Emacsがカレントlocaleを判断できる場合、この変数の値は無視されます(しかしls-lisp-use-localized-time-formatの値が非nilの場合、Emacsはカレントlocaleが利用できるときでもls-lisp-format-time-listにしたがいます。以下を参照してください)。

ls-lisp-format-time-listの値は、2つの文字列からなるリストです。最初の文字列は、そのファイルがその年に変更されている場合に使用され、2番目の文字列はそれより古いファイルに使用されます。2つの文字列では、日時の一部を置換するために‘%’シーケンスを使用できます。たとえば:

("%b %e %H:%M" "%b %e  %Y")

これらの‘%’シーケンスにたいする文字列の置換は、カレントlocaleに依存することに注意してください。日時のフォーマットの仕様については、Time Parsing in The Emacs Lisp Reference Manualを参照してください。

Emacsは通常、ファイルのタイムスタンプの日時フォーマットに、慣習にしたがったフォーマット、またはISOスタイルのフォーマットを使用します。しかし変数ls-lisp-use-localized-time-formatの値が非nilの場合、Emacsはファイルのタイムスタンプを、ls-lisp-format-time-listの指定にしたがってフォーマットします。ls-lisp-format-time-listの‘%’シーケンスは、localeにしたがった月の名前と曜日名を生成し、それによりDiredの列表示がずれるかもしれません。ls-lisp-use-localized-time-formatのデフォルト値はnilです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

G.5 MS-WindowsでのHOMEディレクトリーと開始ディレクトリー

WindowsでHOMEに相当するのは、ユーザー固有のアプリケーションデータディレクトリーで、それの実際の位置はWindowsのバージョンに依存します。典型的な値は、Windows 2000からXPではC:\Documents and Settings\username\Application Data、Windows Vista以降ではC:\\Users\\username\\AppData\\Roaming、そしてWindows 9X/MEではC:\WINDOWS\Application DataC:\WINDOWS\Profiles\username\Application Dataのいずれかです。このディレクトリーが存在しない、またはアクセスできない場合、EmacsはHOMEのデフォルト値をC:\にフォールバックします。

環境変数HOMEをシステムの他のディレクトリーを指すように明示的にセットすることにより、HOMEのデフォルト値をオーバーライドできます。HOMEはコマンドシェルプロンプト、または‘My Computer’の‘Properties’ダイアログからセットできます。HOMEはシステムレジストリーからもセットできます。MS-Windowsのシステムレジストリーを参照してください。

古いバージョンのEmacs25との互換性のため、ドライブC:のルートディレクトリーC:\.emacsという名前のファイルが存在する場合、そしてHOMEが環境とレジストリーのどちらでもセットされていない場合、EmacsはC:\をデフォルトのHOMEの場所として扱い、たとえアプリケーションデータディレクトリーが存在する場合でも、そこを探しません。古い名前の_emacs(以下参照)ではなく、C:\.emacsだけが探されることに注意してください。C:\.emacsを使用してHOMEを定義する方法は、推奨されていません。Emacsはスタートアップ時にそれが使用されていることに関して、警告を表示するでしょう。

最終的な場所がどこであれ、Emacsはその場所を指すように環境変数HOMEの内部値をセットし、通常ホームディレクトリーで探したり作成するファイルとディレクトリーのために、その場所を使用します。

Emacsがホームディレクトリーをどこだと認識しているかは、C-x d ~/ RETとタイプして常に確認できます。これはホームディレクトリーのファイルのリストを表示し、最初の行にホームディレクトリーの完全な名前を表示します。同様にinitファイルをvisitするには、(initファイルの名前が.emacsの場合)C-x C-f ~/.emacs RETとタイプしてください。

Emacs初期化ファイルで述べられるとおり、initファイルは任意の名前をもつことができます。

MS-DOSはドットで始まるファイル名を使用できず、古いWindowsシステムではそのような名前のファイルを作成するのが困難だったので、EmacsのWindowsポートは、ホームディレクトリーに_emacsが存在して、.emacsが存在しない場合、_emacsという名前のinitファイルをサポートします。この名前は時代遅れと考えられおり、使用した場合、Emacsは警告を表示するでしょう。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

G.6 MS-Windowsでのキーボードの使用方法

このセクションでは、Emacsでのキーボード入力に関するWindows固有の機能について説明します。

MS-Windowsプログラムで慣習的に使用されるキー組み合わせ(“キーボードショートカット”として知られる)の多くが、伝統的なEmacsのキーバインドと衝突します(これらEmacsのキーバインドは、Microsoftが設立される数年前には確立されていました)。衝突の例にはC-cC-xC-zC-aW-SPCが含まれます。CUAモード(CUAバインドを参照してください)を有効にすることにより、これらのいくつかの意味をMS-Windowsでの意味に近づけるよう再定義できます。他のWindowsのようにEmacsを振る舞わせる他のオプション機能として、Delete Selectionモード(リージョンを操作するを参照)があります。

デフォルトでは、Altとラベルされたキーは、Metaキーにマップされます。かわりにAlt修飾を生成したい場合は、変数w32-alt-is-metanilをセットしてください。

MS-Windowsでは、Alt-TAB、およびWindowsキーと組み合わされたいくつかのキーのような特定のキー組み合わせは、Windowsが使用するために予約済みです。これらのキー組み合わせは、Emacsがそれを読み取る前に、システムにより解釈されます。さらにWindows 10では、たとえその時点で特定のキー組み合せがホットキーとして定義されていなくても、すべてのWindowsキーと組み合わされたキーは、アプリケーションに決して渡されないように、システムにより予約済みです。関数w32-register-hot-keyを使用して、Windowsに横取りされることなく、Emacsがキーシーケンスを取得できます。ホットキー(hot key)として登録した場合、そのキー組み合せはWindowsが処理する前にシステムの入力キューから取り出され、そのシーケンスがもつWindowsにたいする特別な意味を、効果的にオーバーライドします。これはEmacsがアクティブなときだけオーバーライドされ、他のアプリケーションがフォアグラウンドのときには、そのキーは通常どおり振る舞います。

w32-register-hot-keyに指定する引数は、1つの修飾キー、1つのキーを指定しなければなりません。control修飾とshift修飾は、引数に影響を与えません。w32-alt-is-metat(デフォルト)の場合、meta修飾はAltキーと解釈され、super修飾とhyper修飾はそれぞれ、w32-lwindow-modifierw32-rwindow-modifierのバインディングに解釈されます。さらにキーがなく末尾がダッシュの修飾は、Emacs用にその修飾にたいしてるWindowsが定義するすべてのホットキーをオーバーライドすることを示します。

たとえば(w32-register-hot-key [M-tab])により、(たとえばトップレベルのポイント位置の単語やシンボルを補完したり、インクリメンタル検索において以前に検索した文字列で現在の検索文字列を補完したり等)、Emacsで通常使用するようにM-TABを使用できます。(w32-register-hot-key [s-])w32-lwindow-modifierを併用すると、WindowsキーにもとづくWindowsのすべてのショートカットを無効にします。26

w32-register-hot-keyは、関数呼び出し時にw32-[lr]window-modifierの値をチェックすることに注意してください。したがって、w32-lwindow-modifiersuperとしてセットしてから(w32-register-hot-key [s-r])を呼び出し、最後に同じようにw32-rwindow-modifiersuperとしてセットできます。その結果、左WindowsキーとRの組み合せは、その組み合せにたいしてEmacsでバインドした関数を呼び出し、右WindowsキーとRの組み合せはWindowsのRunダイアログをオープンします。

ホットキーの登録には常に、与えられたホットキーにたいするshift修飾とcontrol修飾による組み合せのすべてが含まれます。つまり、s-aをホットキーとして登録すると、同様にS-s-aC-s-aC-S-s-aが登録されます。

Windows 98、およびWindows MEではホットキーの登録はより制限されます。ホットキーが常に完全指定されねばなりません。望む結果を得るために、w32-phantom-key-codeをカスタマイズできます。

関数w32-unregister-hot-keyは、引数となるキーシーケンスにたいして、w32-register-hot-keyと逆のことを行ないます。

デフォルトでは、CapsLockキー(このキーは小文字を大文字に変換します)は通常の文字キーだけに効果をもちます。しかし変数w32-capslock-is-shiftlockを非nil値にセットした場合、CapsLockは非文字キーにも同様に効果をもつようになり、その非文字キーをタイプするとき、あたかもSHIFTキーが押されたかのようになります。

変数w32-enable-caps-locknil値をセットした場合、CapsLockキーは、タイプされた文字にたいするシフトが押されたバージョンのキーではなく、かわりにシンボルcapslockを生成します。デフォルト値はtです。

同様にw32-enable-num-locknilの場合、NumLockキーはシンボルkp-numlockを生成します。デフォルトはtで、これはNumLockに期待された動作、すなわちテンキー上のキーのもつ意味の切り替えを行ないます。

変数w32-apps-modifierは、Appsキー(通常は右Altキーと右Ctrlキーの間にあります)の効果を制御します。変数の値には、対応する修飾キーを示すシンボルhypersupermetaaltcontrolshiftのどれか1つを指定するか、nilを指定してそれをキーappsとして扱います。デフォルトはnilです。

変数w32-lwindow-modifierは、左Windowsキー(通常はstartとWindowsのロゴのラベル)の効果を決定します。この変数の値がnil (デフォルト)の場合、このキーはシンボルlwindowを生成します。シンボルhypersupermetaaltcontrolshiftのうち、どれか1つをセットした場合は、対応する修飾が生成されます。これと似た変数w32-rwindow-modifierは、右Windowsキーの効果を制御し、w32-scroll-lock-modifierScrLockと同様のことを行います。これらの変数がnilにセットされている場合、右WindowsキーがシンボルrwindowScrLockがシンボルscrollを生成します。たとえばキーボード上のScroll Lock LED標示を切り替える等、他のアプリケーションのときと同様の効果をScrLockに生成させたい場合は、w32-scroll-lock-modifierの値に上記の修飾シンボルではなくtか、任意の非nilをセットしてください。

EmacsがネイティブのWindowsアプリケーションとしてコンパイルされていると、Windowsメニューを呼び出すAltをタップ(tapping: 覗き見)するWindows機能をオフに切り替えます。これはEmacsではMetaとして用いられるからです。Emacsを使用するとき、ユーザーが1度Metaキーを押して、後で気が変わることがあります。もしこのキーがWindowsメニューを立ち上げる効果をもつ場合、それに続くコマンドの意味が変更されてしまいます。多くのユーザーは、これにイライラするでしょう。

w32-pass-alt-to-systemを非nil値にセットすることにより、Altキーの覗き見にたいするWindowsのデフォルトの処理を再び有効にできます。

変数w32-pass-lwindow-to-systemw32-pass-rwindow-to-systemは、左Windowsキーと右Windowsキーが、Windowsに渡されるか、Emacsに渡されるかを決定します。値がnilの場合、これらのキーはEmacsに渡され、それ以外の場合はWindowsに渡されます。両方の変数のデフォルトはtです。これらのキーをWindowsに渡すことにより、たとえばLwindowStartメニューを開くなどの、通常の効果が生成されます。

変数w32-recognize-altgrは、(もしそれがキーボードにあれば)AltGrキー(またはそれと同種のキー)が右Altと左Ctrlキーを一緒に押したときの組み合わせとするか、それともそれをAltGrキーとして認識するかを制御します。デフォルトはtで、これはそれらのキーがAltGrを生成することを意味します。これをnilにセットすることにより、AltGrキー(またはそれと同種のキー)との組み合わせは、Ctrl修飾とMeta修飾の組み合わせとして解釈されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

G.7 MS-Windowsでのマウスの使用方法

このセクションでは、マウスに関連したWindows固有の変数について説明します。

変数w32-mouse-button-toleranceは、2ボタンマウスで、マウス中央ボタンを模倣する際の時間間隔を、ミリ秒で指定します。左ボタンと右ボタンの両方のボタンが、この時間間隔のうちに離された場合、Emacsはそれらどちらかのボタンのダブルクリックイベントのかわりに、マウス中央ボタンのクリックイベントを生成します。

変数w32-pass-extra-mouse-buttons-to-systemが非nilの場合、EmacsはWindowsに第4、第5マウスボタンを渡します。

変数w32-swap-mouse-buttons、は3ボタンマウスがmouse-2イベントを生成するかを制御します。これがnil(デフォルト)の場合、中央のボタンはmouse-2を生成し、右ボタンはmouse-3を生成します。この変数が非nilの場合、これら2つのボタンの役割は逆になります。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

G.8 Windows 9X/MEおよびWindows NT/2000/XP/Vista/7/8/10でのサブプロセス

WindowsのネイティブアプリケーションとしてコンパイルされたEmacsには、(DOSバージョンとは対照的に)非同期サブプロセスにたいする完全なサポートが含まれます。Windowsバージョンでは、同期および非同期サブプロセスは、すべてのバージョンのWindowsで32ビット、または64bitのWindowsアプリケーションを実行する限りうまく動作します。しかしサブプロセスでDOSアプリケーションを実行する場合は、問題に遭遇したり、そのアプリケーションを実行できないかもしれません。また、2つのサブプロセスで2つのDOSアプリケーションを実行する場合は、システムを再起動する必要があるかもしれません。

Windows9X標準のコマンドインプリターはDOSアプリケーションなので、そのようなシステムを使用する場合に、これらの問題が重要になります。しかしこれらの問題についてわたしたちができることはありません。Microsoftだけがこれをfixできるのです。

サブプロセスで1つのDOSアプリケーションを実行する場合、それが“様式に従って(well-behaved)”いる限り、そしてスクリーンへの直接アクセスや、その他の異例なことを行なわない限り、そのサブプロセスは期待されたとおりに動作すべきです。CPUモニターアプリケーションがある場合、そのDOSアプリケーションがアイドル状態でも、CPUは100%ビジーに見えるかもしれませんが、これは単にCPUモニターがプロセッサー負荷を計測する方法によるものです。

他のDOSアプリケーションを別のサブプロセスで開始する前に、DOSアプリケーションを終了しなければなりません。EmacsはDOSサブプロセスに割り込み、または終了させることができません。プログラムの終了コマンドを与えることだけが、そのようなサブプロセスを終了できる唯一の方法です。

同時に別のサブプロセスで2つのDOSアプリケーションの実行を試みた場合、それらの一方、または両方が非同期であっても、最初のサブプロセスが終了するまで、2番目に開始されたサブプロセスはサスペンドされます。

もし最初のサブプロセスと対話することができ、終了を指示できたら2番目のプロセスは通常どおり実行を継続するはずです。しかし2番目のサブプロセスが同期実行されている場合、Emacsは最初のサブプロセスが終了するまでハングするでしょう。最初のプロセスがユーザーによる入力なしには終了しない場合、Windows9Xでは再起動する以外に選択肢はありません。Windows NT以降で実行している場合、プロセスビューアーアプリケーションを使用して、適切なNTVDMのインスタンスをkillすることができます(これにより、両方のDOSサブプロセスが終了します)。

このような状況でWindows9Xを再起動する場合、StartメニューのShutdownコマンドを使用しないでください。これは通常システムをハングさせます。かわりにCtrl-Alt-DELとタイプしてShutdownを選択します。これは処理を行なうのに数分かかるかもしれませんが、通常どおり機能します。

変数w32-quote-process-argsは、Emacsがプロセス引数をクォートする方法を制御します。非nilは文字"でクォートすることを意味します。変数の値が文字の場合、Emacsは任意のクォート文字をエスケープするのに、その文字を使用します。それ以外の場合、プログラムのタイプにもとづいて、適切なエスケープ文字を選択します。

変数w32-pipe-buffer-sizeは、サブプロセスとの通信のためにパイプを作成するときに、Emacsがシステムに要求するバッファーサイズを制御します。デフォルト値は0で、この場合はOSがサイズを選択します。有効な正の値を指定した場合は、そのサイズ(byte)のバッファーを要求します。これは、サブプロセスと、バッファーされたパイプ入出力にたいして通常とは異なる動作を見せるプログラムとの通信を調整するのに使用できます。

EmacsサブプロセスとしてMS-DOSプログラムの呼び出しが必要な場合には、そのようなプログラムからのデータ読み取りレートが低いことを目にするかもしれません。変数w32-pipe-read-delayを非0にセットすることにより、そのような場合のスループットを向上できます。そのような状況では値に50を推奨します。デフォルトは0です。

関数w32-shell-executeは、特定のタイプのファイルやドキュメントにたいして、ある種の標準的なWindows操作を処理するために登録された、MS-Windowsアプリケーションを実行するカスタマイズコマンドを記述するのに有用かもしれません。この関数はWindows APIのShellExecuteにたいするラッパーです。詳細は、MS-WindowsのAPIドキュメントを参照してください。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

G.9 MS-Windowsでの印刷

POSIXスタイルのlprプログラムが利用できない場合、MS-DOSとMS-Windowsでは、lpr-buffer(ハードコピーの印刷を参照してください)やps-print-buffer(PostScriptのハードコピーを参照してください)のような印刷コマンドは、プリンターポートの1つに出力を送ります。同じEmacs変数がすべてのシステムでの印刷を制御しますが、MS-DOSとMS-Windowsでは、それらの変数が異なるデフォルト値をもつ場合があります。

MS WindowsのEmacsは、(関数default-printer-nameを使用して)デフォルトプリンターの自動検出を試みます。しかし、これはある稀なケースでは失敗することがあり、Emacsから別のプリンターを使用したいと思うときがあるかもしれません。このセクションの残りの部分では、Emacsに使用するプリンターを指示する方法を説明します。

ローカルプリンターを使用したい場合、Lisp変数lpr-command""(これはWindowsではデフォルトです)をセットして、printer-nameにプリンターポート、たとえば通常のローカルプリンターポート"PRN"、または"LPT2"、またはシリアルプリンターにたいする"COM1"などをセットします。printer-nameにファイル名をセットすることもできます。この場合、“印刷”された出力は、そのファイルに追加されます。printer-name"NUL"にセットした場合、印刷された出力は破棄されます(システムのnullデバイスに送られます)。

printer-nameにそのプリンターのUNC共有名 — たとえば"//joes_pc/hp4si"のような — をセットすることにより、他のマシンで共有されているプリンターを使用することもできます(ここではスラッシュを使用するか、バックスラッシュを使用するかは問題ではありません)。共有プリンターの名前を探すには、サーバーのリストを取得するために、コマンドプロンプトでコマンド‘net view’を実行して、‘net view server-name’でそのサーバーで共有されているプリンター(とディレクトリー)の名前を確認します。かわりにデスクトップの‘Network Neighborhood’アイコンをクリックして、ネットワークを通じてプリンターを共有しているマシンを確認することもできます。

プリンターが‘net view’で出力されない場合、またはprinter-nameにUNC共有名をセットしても、そのプリンターからハードコピーが出力されない場合、‘net use’コマンドを使用して、"LPT2"のようなローカルプリンターポートを、ネットワークプリンターに接続できます。たとえばnet use LPT2: \\joes_pc\hp4si27により、WindowsにLPT2ポートをキャプチャーさせて、印刷物をマシンjoes_pcに接続されているプリンターにリダイレクトします。このコマンド後は、printer-name"LPT2"をセットすることにより、そのネットワークプリンターでハードコピーが印刷されます。

あるWindowsネットワークソフトウェアーでは、"LPT2"のような特定のプリンターポートをキャプチャーして、‘net use’のかわりにControl Panel->Printersを通じてネットワークプリンターにリダイレクトするよう、Windowsに指示できます。

printer-nameにファイル名をセットする場合、絶対ファイル名を使用するのが最良です。Emacsはカレントバッファーのデフォルトディレクトリーに合わせて作業ディレクトリーを変更するので、printer-nameのファイル名が相対ファイル名の場合、結果として印刷が行なわれたバッファーのディレクトリーごとに、複数のファイルができてしまいます。

変数printer-nameの値が正しいのに、印刷してもそのプリンターからハードコピーが印刷されない場合、そのプリンターがプレーンテキストの印刷をサポートしない可能性があります(安価なプリンターのいくつかでは、この機能が省略されています)。そのような場合、以下で説明するPostScriptプリントコマンドを試してみてください。

コマンドprint-bufferおよびprint-regionは、印刷された各ページにヘッダーを生成するために、prプログラムを呼び出すか、lprプログラムの特別なスイッチを使用します。通常MS-DOSとMS-Windowsにはこれらのプログラムがないので、デフォルトでは印刷ページのヘッダーの印刷リクエストは単に無視されるように、lpr-headers-switchesがセットされています。したがってprint-bufferprint-regionは、lpr-bufferおよびlpr-regionと同じ出力を生成します。適切なprプログラム(たとえばGNU Coreutilsのもの)がある場合は、lpr-headers-switchesnilをセットします。するとEmacsはページヘッダーを生成するためにprを呼び出し、その結果をprinter-nameで指定されたプリンターで印刷します。

最後に、もしlprによく似たものがある場合、変数lpr-command"lpr"にセットします。するとEmacsは他のシステムと同じように、印刷にlprを使用します(そのプログラムの名前がlprでない場合は、lpr-commandに適切な値をセットします)。lpr-command""でないときに、変数lpr-switchesは、その標準的な意味をもちます。変数printer-nameの値が文字列のとき、Unixの場合のように、lpr-Pオプションの値としてその文字列が使用されます。

類似の変数ps-lpr-commandps-lpr-switchesps-printer-name (PostScriptハードコピーにたいする変数を参照してください)は、PostScriptファイルがどのように印刷されるかを定義します。これらの変数は、上記で説明した非PostScript印刷にたいする変数と同じ方法で使用されます。したがって非PostScript印刷にたいしてprinter-nameが使用される方法と同様に、ps-printer-nameの値はPostScript出力が送られるデバイス(またはファイル)の名前として使用されます(2つの異なるポートに接続された2つのプリンターがあり、それらの1つだけがPostScriptプリンターの場合、2つの個別の変数セットをもつことができます)。

変数ps-lpr-commandのデフォルト値は""で、これはPostScript出力をps-printer-nameで指定されたプリンターポートに送りますが、ps-lpr-commandにはPostScriptファイルを受け付けるプログラム名をセットすることもできます。したがって非PostScriptプリンターがある場合、この変数に(Ghostscriptのような)PostScriptのインタープリタープログラムをセットできます。インタープリタープログラムに渡す必要があるスイッチを指定するには、ps-lpr-switchesを使用します(ps-printer-nameの値が文字列の場合、-Pオプションにたいする値として、スイッチのリストが追加されます。これはおそらくlprを使用する場合だけ有用なので、インタープリターを使用するときはps-printer-nameに文字列以外の何かをセットすれば、無視させることができます)。

たとえばシステムのデフォルトプリンターで、Ghostscriptを使用して印刷するには、以下を.emacsに記述します:

(setq ps-printer-name t)
(setq ps-lpr-command "D:/gs6.01/bin/gswin32c.exe")
(setq ps-lpr-switches '("-q" "-dNOPAUSE" "-dBATCH"
                        "-sDEVICE=mswinpr2"
                        "-sPAPERSIZE=a4"))

(GhostscriptがディレクトリーD:/gs6.01にインストールされていると仮定します。)


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

G.10 MS-Windowsでのフォント指定

Emacs23からは、フォントはフォント名、サイズ、オプションのプロパティーにより指定されるようになりました。フォントを指定するフォーマットは、モダンなフリーデスクトップで使用されているfontconfigライブラリーから由来しています。

  [Family[-PointSize]][:Option1=Value1[:Option2=Value2[...]]]

後方互換のため、古いXLFDベースのフォーマットもサポートされます。

Emacs on MS-Windowsでは、いくつかのフォントバックエンドがサポートされています。Windowsでは現在のところバックエンドとしてgdiuniscribe、およびharfbuzzが利用可能です。gdiフォントバックエンドは、すべてのバージョンのWindowsで利用でき、Windowsでネイティブにサポートされるすべてのフォントをサポートします。uniscribeフォントバックエンドはWindows 2000以降で利用できTrueTypeフォント、OpenTypeフォントをサポートします。harfbuzzフォントバックエンドはEmacsがHarfBuzzサポートつきでビルドされた場合に利用可能で、システムにHarfBuzz DLLがインストールされていれば、このバックエンドはuniscribeのようにTrueTypeフォントとOpenTypeフォントをサポートします。複雑なレイアウトを要求するいくつかの言語は、UniscribeバックエンドかHarfBuzzバックエンドだけが正しくサポートできます。デフォルトではgdi、およびharfbuzzuniscribeのいずれかのバックエンドはすべてのフレームで有効であり、どれが有効かは利用可能なバックエンドに依存します(両方が利用可能ならデフォルトではharfbuzzだけが有効)。Emacsが適切なフォントを探す際には、gdiよりharfbuzzおよびuniscribeのバックエンドが優先されます。これをオーバーライドして、Uniscribeが利用できる場合もGDIバックエンドを使用するには、コマンドライン引数-xrm Emacs.fontBackend:gdiを指定してEmacsを呼び出すか、レジストリーのキー‘HKEY_CURRENT_USER\SOFTWARE\GNU\Emacs’または‘HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs’のいずれかの下に、リソースEmacs.fontBackendを追加して値をgdiにセットします(Xリソースを参照)。同様にHarfBuzzが利用可能であってもUniscribeバックエンドを使用するには、Emacsを呼び出すコマンドラインで-xrm Emacs.fontBackend:uniscribeを使用してください。フレームパラメーターを通じて3つのバックエンドすべてを要求することもできますが、その場合にはシステムに利用可能なフォントがない文字にたいするフォント検索には時間を要すると警告されます。

かわりにmodify-frame-parametersを使用してfont-backendフレームパラメーターを通じてフレームにたいするフォントバックエンドを指定できます(Parameter Access in The Emacs Lisp Reference Manualを参照)。default-frame-alistinitial-frame-alistを通じてすべてのフレームにたいするフォントバックエンド(複数可)も要求できます(フレームパラメーターを参照)。font-backendパラメーターの値は(uniscribe)(harfbuzz uniscribe gdi)のようにシンボルのリストであることに注意してください。

MS-Windowsでサポートされるオプションのフォントプロパティーです:

weight

フォントのweightを指定します。特別な値lightmediumdemiboldboldblackは、weight=を使わずに指定できます(例: Courier New-12:bold)。それ以外の場合、weightは100から900の数字か、font-weight-tableの中の名前のついたweightを指定します。指定されない場合は、regularフォントが指定されたとみなします。

slant

フォントがitalicかどうかを指定します。特別な値romanitalicobliqueは、slant=を使わずに指定できます(例: Courier New-12:italic)。それ以外の場合は、数字か、font-slant-table内のなまえつきのslantの1つを指定します。Windowsでは、150を越える任意のslantはitalicとして扱われ、150以下のものはすべてromanとして扱われます。

family

フォントファミリーを指定しますが、通常はフォント名の最初でファミリーを指定します。

pixelsize

フォントサイズをピクセルで指定します。これはファミリー名の後のポイントサイズ指定のかわりに使用することができます。

adstyle

そのフォントにたいする、追加のスタイル情報を指定します。MS-Windowsでは、値monosansserifscriptdecorativeが認識されます。これはフォントファミリーが指定されていない場合のフォールバックとして、もっとも有用です。

registry

そのフォントがカバーすることを期待される、文字セットregistryを指定します。ほとんどのTrueTypeフォントとOpenTypeフォントは、複数の国際化文字セット(national character sets)をカバーするUnicodeフォントですが、ここでw32-charset-info-alistから、特定の文字セットをサポートするregistry指定を使用することにより、選択されるフォントを絞り込むことができます。

spacing

フォントがspacingされる方法を指定します。pはプロポーショナルフォントを指定し、mおよびcはモノスペースフォントを指定します。

foundry

Windowsでは使用されませんが、情報的な目的のために、そしてこれをセットしようとするコードによる問題を防ぐため、ビットマップフォントではraster、スケーラブルフォントではoutline、どちらともタイプが特定できなかった場合はunknownが、内部的にセットされます。

script

そのフォントがサポートすべきUnicodeの部分範囲(subrange)を指定します。

Emacsが知るすべてのスクリプト(一般的にはもっとも最近のUnicode標準で定義されたすべてのスクリプトを意味する)はMS-Windowsで認識されます。しかしGDIフォントは既知のスクリプトのサブセットgreekhangulkanakanbunbopomofotibetanyimongolianhebrewarabicthaiだけをサポートします。

antialias

アンチエイリアシング(antialiasing)の方法を指定します。値noneは、アンチエイリアシングを行なわないことを意味します。standardは、標準のアンチエイリアシングを使用することを意味します。subpixelは、subpixelアンチエイリアシング(WindowsではCleartypeとして知られる)を使用することを意味します。naturalは、文字間のspacing調整つきでsubpixelアンチエイリアシングを使用することを意味します。指定されない場合、そのフォントはシステムのデフォルトのアンチエイリアシングを使用します。

Emacs on MS-Windowsが与えられた非ASCII文字の表示に適切なフォントを探すために使用する手法はいくつかの希少なスクリプト、特に比較的最近Unicodeに追加されたスクリプトは、たとえそのスクリプトをサポートするフォントをインストールしていても失敗するかもしれません。これはEmacs on MS-Windowsがフォントを探すために使用する情報内でそれらのスクリプトがスクリプトにたいして定義されたUnicode Subrange Bits (USB)をもたないからです。この問題を克服するためにw32-find-non-USB-fonts関数を使用できます。これはEmacsセッションの開始に一度実行して、新たにフォントをインストールしたら再度実行する必要があります。Emacs開始時に毎回この関数を実行するためにinitファイルに以下の行を追加できます:

(w32-find-non-USB-fonts)

かわりに任意のタイミングでM-: (Emacs Lisp式の評価を参照)からこの関数を実行できます。多くのフォントがインストールされたシステムではw32-find-non-USB-fontsの実行に数秒かかるかもしれません。スタートアップ中に実行するには長すぎると思い、かつフォントを新たにインストールすることが稀なら、M-:からこの関数を一度実行してからリターン値が非nilならinitファイルで変数w32-non-USB-fontsにそれを割り当ててください(関数がnilをリターンしたらこの機能を必要とするスクリプトから表示できるインストール済みのフォントはない)。

変数w32-use-w32-font-dialogS-mouse-1を通じてフォントを選択する方法を制御します(mouse-appearance-menu)。値がt(デフォルト)ならEmacsは標準的なWindowsのフォント選択ダイアログを使用します。nilならEmacsはかわりにフォントの固定セットのメニューをポップアップします。メニューに表示されるフォントはw32-fixed-font-alistにより決定されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

G.11 その他のWindows固有の機能

このセクションでは、他のどれにも当てはまらないWindows固有の機能について説明します。

変数w32-use-visible-system-caretは、システムカレット(system caret)を可視にするか決定するフラグです。スクリーンリーダーソフトウェアーが使用されていないときのデフォルトはnilで、これはEmacsがポイント位置を示すために自分でカーソルを描画することを意味します。非nil値は、Emacsがシステムカレットでポイント位置を示すことを意味します。これはスクリーンリーダーソフトウェアーの使用を容易にし、そのようなソフトウェアーがEmacsの実行を検知したときのデフォルトになります。この変数が非nilの場合、カーソル表示に影響を与える他の変数は効果がなくなります。

変数w32-grab-focus-on-raiseが非nil値にセットされている場合、フレームがraiseされるときフォーカスを奪います。デフォルトはtで、これはWindowsのデフォルトのclick-to-focusポリシーに適合します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

G.12 EmacsとMS-DOS

このセクションでは、EmacsをMS-DOSで使用する際の特質を、簡単に説明します。 MS-DOSとMicrosoftの現在のオペレーティングシステムのWindowsについての情報は、EmacsとMicrosoft Windows/MS-DOSの中にあります。

EmacsをMS-DOSにたいしてビルドした場合、そのバイナリーはWindows 3.X、Windows NT、Windows 9X/ME、Windows 2000/XPでもDOSアプリケーションとして実行されます。MS-DOSにたいしてビルドされたEmacsを使用する場合、このチャプターの内容は、それらすべてのシステムに適用されます。

MS-DOS(およびWindows)でのテキストファイルにたいするEmacsの特別な処理については、テキストファイルとバイナリーファイルを参照してください 。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

G.12.1 MS-DOSでのキーボードの使用方法

EmacsでDELと呼ばれるキー(ほとんどのワークステーションでそれが指定されているのが由来です)は、PCではBS(バックスペース)として知られています。PC固有の端末の初期化で、BSDELとして動作するよう再マップされるのは、これが理由です。同じ理由により、DeleteキーはC-dとして動作するように、再マップされます。

MS-DOSにたいしてビルドされたEmacsは、C-BreakC-gのような、中止(quit)文字として認識します。新たな入力にたいして準備ができるまで、C-gをタイプしてもEmacsが検知できないのは、これが理由です。そのため、実行中のコマンドを停止させるために、C-gを使用することはできません (中止と中断を参照してください)。 対照的にC-Breakは、(他のシステムでのC-gのように)、タイプされるとすぐに検知されるので、実行中のコマンドを停止したり、緊急エスケープのために使用されます (緊急エスケープを参照してください)。

PCのキーボードマップは、左AltキーをMetaキーとして使用します。SUPERキーとHyperキーをエミュレートするために、2つの選択肢があります。変数dos-hyper-keyおよびdos-super-keyに、1または2をセットすることにより、右Ctrlキーと右Altキーのどちらかを選択します。dos-super-keydos-hyper-keyがどちらも1以外の場合、デフォルトにより右AltキーもMetaキーにマップされます。しかしMSーDOSの国際化キーボードサポートプログラムKEYB.COMがインストールされている場合、非US配列のキーボードでは右Alt~@のような文字を入力するために使用されるので、Emacsは右AltMetaにマップしません。この場合、左AltキーだけをMetaキーとして使用することになるでしょう。

変数dos-keypad-modeは、テンキーにより返されるキーコードを制御するフラグ変数です。以下の行を_emacsファイルに記述して、テンキーのENTERキーを、C-jのように定義することもできます:

;; Make the ENTER key from the numeric keypad act as C-j.
(define-key function-key-map [kp-enter] [?\C-j])

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

G.12.2 MS-DOSでびマウスの使用方法

MS-DOSのEmacsはマウスをサポートします(デフォルト端末のみ)。メニューやメニューバーの使用を含めて、マウスコマンドはドキュメントされているように機能します (メニューバーを参照してください)。 MS-DOSのEmacsではスクロールバーは機能しません。PCマウスには通常2つしかボタンがありません。これらはmouse-1mouse-2として機能しますが、これらのボタンを一緒に押すと、mouse-3の効果をもちます。マウスにボタンが3つある場合、Emacsは開始時にそれを検知し、Xのようにすべての3ボタンは通常のように機能します。

メニューアイテムの上にマウスポインターが移動すると、メニューバーとポップアップメニューにたいするヘルプ文字列が、エコーエリアに表示されます。マウスに反応するテキストはハイライト (マウスで参照をフォローするを参照してください) もサポートされます。

マウスドライバーのいくつかのバージョンは、マウスのボタン数を正しく報告しません。たとえばホイールつきのマウスは3つボタンがあると報告されますが、Emacsに渡されるのはそのうち2つだけです。真ん中のボタンとして使用されるホイールのクリックも渡されません。このような場合、マウスボタンがいくつあるかEmacsに指示するために、M-x msdos-set-mouse-buttonsコマンドを使用できます。initファイル_emacsに以下の行を追加することにより、そのようなセッティングを永続化できます:

;; Treat the mouse like a 2-button mouse.
(msdos-set-mouse-buttons 2)

MS-DOSにたいしてビルドされたEmacsは、Windows上で実行されているときは、クリップボード操作をサポートします。killリングにテキストを置くコマンド、またはkillリングからテキストをyankするコマンドは、EmacsがXウィンドウシステムで行なうように、最初にWindowsのクリップボードをチェックします (編集のためのマウスコマンドを参照してください)。 Windows上でのMS-DOS版のEmacsは、プライマリー選択とカットバッファーだけをサポートします。セカンダリー選択は常に空になります。

クリップボードに対するアクセス方法はWindowsにより実装されているため、クリップボードに置くことができるテキストの長さは、Emacsが利用可能なDOSメモリー量により制限されます。通常はクリップボードに最大620KBのテキストを置くことができますが、この制限はシステム設定に依存し、Emacsを他のプログラムのサブプロセスとして実行している場合は、もっと少なくなります。killしたテキストが一致しない場合、Emacsはその旨を告げるメッセージを出力して、クリップボードにテキストを置きません。

ヌル文字をWindowsクリップボードに置くこともできません。killされたテキストにヌル文字が含まれる場合、Emacsはそのようなテキストをクリップボードに置かず、その結果にたいするメッセージをエコーエリアに表示します。

変数dos-display-scancodesが非nilの場合、Emacsは各キーストロークのASCII値とキーボードのスキャンコードを表示します。この機能は、デバッグのためのview-lossageコマンドを補足するためのものです。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

G.12.3 MS-DOSでの表示

MS-DOSのディスプレーでは、boldやitalicのようなフォントの変種が使用できませんが、複数のフェイスをサポートしており、それぞれのフェイスでフォアグラウンドとバックグラウンドのカラーを指定できます。したがってm異なるカラーを使用するために関連するフェイスを定義することにより、フォントを使用するEmacsパッケージ(font-lockやEnriched Textモードなそ)の完全な機能を使用することができます。利用できるカラーとフェイスと、それらの外観を確認するには、list-colors-displayコマンド (フェイスのカラーを参照してください) 、およびlist-faces-display (テキストのフェイスを参照してください) を使用してください。

DOSディスプレーでネイティブにサポートされていないグリフと文字をEmacsが表示する方法については、このチャプターの後のほうの、MS-DOSでの国際化サポートを参照してください。

Emacsを開始したとき、Emacsはカーソルの形状を塗りつぶしたボックスに変更します。他のシステムではボックスカーソルがEmacsのデフォルトなので、これは互換性のためです。デフォルトのカーソル形状は、変数default-frame-alistの中のcursor-typeパラメーターでbarを指定することにより変更できます (フレームの作成を参照してください)。 MS-DOS端末は垂直バーのカーソルをサポートしないので、カーソルは水平バーになり、フレームのパラメターでwidthパラメーターが指定された場合、それは実際には水平バーの高さになります。この理由により、MS-DOSではカーソルタイプbarhbarは同じ効果を生みます。拡張として、以下のようにして、バーカーソル指定にはwidthと同様に、カーソルが行を読み取る開始位置を含めることができます:

 '(cursor-type bar width . start)

これに加えて、widthパラメーターが負の場合、カーソルバーはその文字セルの最上部から開始されます。

MS-DOS端末は1度に1つのフレームだけを表示できます。MS-DOSで動作するEmacsのフレーム機能は、Emacsがテキスト端末で動作する場合と同じように機能します (フレームとグラフィカルなディスプレーを参照してください)。 MS-WindowsでDOS窓からEmacsを実行した場合、フルスクリーンより小さい可視フレームを作成できますが、それでもEmacsは1度に1つのフレームしか表示できません。

dos-mode4350コマンドはディスプレーを43行または50行に切り替え、それはハードウェアーに依存します。dos-mode25コマンドはスクリーンサイズをデフォルトの80x25に切り替えます。

デフォルトではEmacsが理解するするスクリーンサイズは、列を80列、行を25、28、35、40、43、50行にセットする方法だけです。しかしビデオアダプターが、ディスプレーを他のサイズに切り替える特別なビデオモードをもつ場合、Emacsもそれをサポートするようにできます。Emacsにフレームをnm列のサイズに切り替えるように指示した場合、Emacsはscreen-dimensions-nxmという名前があるかチェックして、もしあれば切り替えるビデオモードの値(整数でなければなりません)としてそれを使用します(EmacsはALレジスターにscreen-dimensions-nxmの値をセットして、BIOS関数のSet Video Modeを呼び出すことによりそのビデオモードに切り替えます)。たとえばビデオアダプターがビデオモードを85にしたとき、サイズ66x80に切り替わるとしましょう。その場合、以下を_emacsファイルに記述して、Emacsにそれをサポートさせることができます:

(setq screen-dimensions-66x80 85)

MS-DOSのEmacsは特定のサポートされたフレームサイズだけしかセットできないので、可能性のあるすべてのフレームのサイズ変更要求に従うことはできません。サポートされていないサイズが要求された場合、Emacsは指定されたサイズを越える、次に大きなサポートされたサイズを選択します。この場合、たとえば36x80フレームを要求して、かわりに40x80を得ることになります。

変数screen-dimensions-nxmは、指定されたサイズに正確にマッチするときだけ使用され、サポートされた次に大きなサイズを検索するときには、無視されます。上記の例ではVGAは38x80のサイズをサポートし、screen-dimensions-38x80を適切な値で定義していても、36x80フレームを要求すると40x80のスクリーンになります。この場合サイズを38x80にするには、screen-dimensions-36x80という名前の変数に、screen-dimensions-38x80と同じビデオもーどの値をセットして、これを行なうことができます。

MS-DOSでフレームサイズを変更すると、他のすべてのフレームも新しいサイズに変更されます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

G.12.4 MS-DOSでのファイル名

MS-DOSでは、ファイル名は大文字小文字を区別せず8文字に制限され、それに加えてオプションでピリオドと追加の3文字を使用できます。Emacsは他のオペレーティングシステムで、ファイル名を処理するためのこれらの制限を充分認識しています。たとえばファイル名の前のドット‘.’はMS-DOSでは無効なので、Emacsはそれらを透過的にアンダースコアー‘_’に変換します。したがって、MS-DOSではデフォルトのinitファイル (Emacs初期化ファイルを参照してください) は_emacsと呼ばれます。ピリオドの前後の余分な文字は、一般的にMS-DOS自身により無視されます。したがってファイルLongFileName.EvenLongerExtensionをvisitした場合、それは暗黙にlongfile.eveとなりますが、それでもEmacsはモードラインに長いファイル名を表示し続けます。それ以外ではMS-DOSで有効なファイル名を指定するのはユーザーの責任です。上記の透過的な変換は、Emacsに組み込まれたファイル名だけにたいして機能します。

MS-DOSでのファイル名にたいする上記の制限は、オリジナルのファイル名の文字を失うことなしにバックアップファイルの名前を構築するのを、ほとんど不可能にします (単一または番号つきバックアップを参照してください)。 たとえばdocs.txtというファイルにたいするバックアップファイルの名前は、単一のバックアップを使用しているときでさえdocs.tx~になります。

Windows 9X、Windows ME、Windows 2000/XPでEmacsをDOSアプリケーションとして実行する場合、長いファイル名のサポートをオンに切り替えることができます。これを行なうと、Emacsはファイル名を切り詰めたり、ファイル名を小文字に変換するかわりに、指定された文字通りのファイル名を使用します。長いファイル名のサポートを有効にするには、Emacsを開始する前に、環境変数LFNを‘y’にセットします。残念なことにWindows NTはDOSプログラムが長いファイル名にアクセスすることを許さないので、MS-DOSにたいしてビルドされたEmacsは、短い8+3のエイリアスだけを見ることになります。

MS-DOSにはホームディレクトリーという概念がないので、MS-DOS上のEmacsはEmacsがインストールされた場所が、環境変数HOMEの値であるかのように振る舞います。つまりEmacsのバイナリーemacs.exeがディレクトリーc:/utils/emacs/binにある場合、EmacsはHOMEが‘c:/utils/emacs’にセットされているかのように動作します。この場所は特に、Emacsがinitファイル_emacsを探す場所でもあります。これを念頭におけば、GNUやUnixのように、ファイル名の中で‘~’をホームディレクトリーのエイリアスとして使用できます。Emacsを開始する前に、その環境でHOME変数をセットすることもできます。この変数の値は、上記のデフォルトの振る舞いをオーバーライドします。

MS-DOSのEmacsは、/devという名前を特別に使います。なぜならGJGPPのエミュレーターライブラリーの機能は、I/Oデバイスの名前がそのディレクトリーにあるかのように振る舞うからです。わたしたちは任意のディスクにたいして、/devという名前のディレクトリーの使用を避けることを推奨します。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

G.12.5 印刷とMS-DOS

lpr-buffer (ハードコピーの印刷を参照してください)や、ps-print-buffer (PostScriptのハードコピーを参照してください) のようなコマンドは、POSIXスタイルのlprプログラムが利用できない場合、出力を1つのプリンターポートに送ることにより、MS-DOSで機能します。同じEmacs変数がすべてのシステムでの印刷を制御しますが、MS-DOSでは異なるデフォルト値をもつ場合もあります。

ネットワークプリンターでの印刷のセットアップに関する詳細は、MS-Windowsでの印刷を参照してください 。

プリンターが同じlocaleにたいして異なるエンコーディングを使用するWindows機に接続されている場合にも、非ASCIIテキストのDOSコードページによるエンコーディングを期待するプリンターがいくつかあります。たとえばlocaleがLatin-1のとき、Windowsはコードページ1252を使用しますが、DOSはコードページ850を使用します。MS-DOSでの国際化サポートを参照してください。Windowsからそのようなプリンターで印刷する場合、M-x lpr-bufferの前に、C-x RET c (universal-coding-system-argument)を使用することができます。その場合、Emacsは指定したDOSコードページにテキストを変換します。たとえばC-x RET c cp850-dos RET M-x lpr-region RETは、リージョンをコードページ850のエンコーディングに変換して印刷します。

MS-DOSでは後方互換のため、dos-printer (dos-ps-printer)に値がセットされている場合、printer-name (ps-printer-name)の値をオーバーライドします。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

G.12.6 MS-DOSでの国際化サポート

MS-DOSのEmacsは、異なる文字セット同士を変換するためのコーディングシステムを含む、GNU、Unix、その他のプラットフォームでサポートされているのと同じ国際化文字セットをサポートします (国際化文字セットのサポートを参照してください)。 しかしMS-DOSと、MS-Windowsや他のシステムとの間の非互換により、このサポートには知っておくべきいくつかのDOS特有の状況があります。このセクションではこれらの状況について説明します。

以下の説明では、主にEmacsのMS-DOSポートについて、特に経験豊富なEmacsユーザーにとって密接に関係する部分について説明します。

M-x dos-codepage-setup

カレントDOSコードページにたいして、適切なEmacsディスプレーとコーディングシステムをセットアップします。

MS-DOSは常に256文字の文字セットをサポートするようにデザインされていますが、それからさまざまな文字セットを選択できます。選択できる文字セットはDOSコードページとして知られます。各コードページはすべて128文字のASCII文字を含みますが、それ以外の128文字(コード128から255)は、コードページごとに異なります。各コードページは850、862のように3桁の数字で識別されます。

同時に複数のフォントを使用できるXとは対照的に、通常MS-DOSは1つのセッションで複数のコードページを使用できません。MS-DOSはシステムの開始時に1つのコードページをロードするようにデザインされており、それを変更するには再起動が必要です28。MS-Windowsのような他のシステムでDOSの実行可能ファイルを実行するときも、ほぼ同じ制限が適用されます。

MS-DOSでのマルチバイト処理にたいして、Emacsは選択されたDOSコードページで表示できる文字を知る必要があります。そのため起動後に、選択されたコードページ番号を得るためにシステムに問い合わせを行い、その番号を変数dos-codepageに格納します。実際のコードページは異なっていても、カレントコードページにたいしてデフォルト値437を返すシステムがいくつかあります(通常これはディスプレーハードウェアーに組み込まれているコードページを使用しているとき発生します)。initファイルで変数dos-codepageをセットすることにより、Emacsに別のコードページを指定できます。

マルチバイトのEmacsは特定のDOSコードページ — 日本語コードページ932のような極東アジアのスクリプトを表示できるものや、1つのISO 8859文字セットをエンコードするものがあります。

極東アジアのコードページは、それらの国々にたいするMULE文字セットの1つを直接表示できるので、Emacsはそのコードページでサポートされる適切な端末コーディングシステムを使用するためにセットアップを行なうだけです。このセクションの残りの部分で説明する特別な機能は、主にISO 8859文字セットをエンコードするコードページに関するものです。

ISO文字セットの1つに対応するコードページにたいして、Emacsはそのコードページ番号にもとづいた文字セットを認識します。Emacsは、カレントコードページを使用したファイルの読み書きをサポートするためのコーディングシステムを自動的に作成して、そのコーディングシステムをデフォルトとして使用します。このコーディングシステムの名前はcpnnnで、nnnはコードページ番号です。29

cpnnnというコーディングシステムはすべて、モードラインのニーモニックに文字‘D’ (“DOS”)を使用します。端末のコーディングシステムと、ファイルI/Oにたいするデフォルトのコーディングシステムは、開始時に適切なcpnnnコーディングシステムにセットされているので、普通はMS-DOSのモードラインは‘-DD\-’で始まります。 モードラインを参照してください。 極東アジアのDOS端末はcpnnnコーディングシステムを使用しないので、Emacsデフォルトのモードラインが初期表示されます。

コードページ番号は使用しているスクリプトも示すので、Emacsはそのスクリプトにたいする言語環境を選択するために、自動的にset-language-environmentを実行します (言語環境を参照してください)。

バッファーにISO 8859文字セット以外の文字が含まれていて、それが選択されたDOSコードページでサポートされていない場合、EmacsはASCII文字のシーケンスを使用して、それを表示します。たとえばカレントコードページが文字‘ò’(grave accentつきの小文字の‘o’)にたいするグリフをもたない場合、その文字は‘{`o}’と表示されます。ここで中カッコ(braces)はそれが1つの文字であることを示す指標です(これはギリシャ文字やヘブライのアルファベットのような非ラテン文字にたいして不格好に見えるかもしれませんが、その言語を知る人はこれを読むことができます)。その文字がスクリーンの複数列を占めていても、それは単なる1つの文字であり、Emacsコマンドは、それを1文字として扱います。

MS-Windowsは独自のコードページを提供し、同じロケールにたいするDOSコードページとは異なります。たとえばDOSコードページと同じ文字をサポートするWindowsコードページは1252で、DOSコードページ855と同じ文字をサポートするWindowsコードページは1252、などです。EmacsのMS-Windowsバージョンを‘-nw’オプションで呼び出したとき、Emacsはカレントコードページを使用して表示を行ないます。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

G.12.7 MS-DOSでのサブプロセス

MS-DOSは単一プロセスの“オペレーティングシステム”なので、非同期サブプロセスは利用できません。特にShellモードと、その変種は機能しません。非同期サブプロセスを使用するEmacs機能のほとんどは、ShellモードやGUDを含めて、MS-DOSでは動作しません。疑わしいときは、コマンドを実行してみれば、機能しない場合は非同期プロセスがサポートされない旨を告げるメッセージが出力されます。

M-x compileによるEmacsでのコンパイル、M-x grepによるファイル検索、M-x diffによるファイル間の相違の表示は、同期的に内部プロセスを実行することにより機能します。これはその内部プロセスが終了するまで、編集を行なうことができないことを意味します。

ispellプログラムの同期呼び出しにたいする特別なサポートにより、スペルチェックも機能します。これは他のプラットフォームでの非同期呼び出しより遅くなります。

MS-DOSでは、機能しないShellモードのかわりに、M-x eshellコマンドを使用することができます。これはPOSIX-likeなシェルを、Emacs Lispで実装したEshellパッケージを呼び出します。

対照的に、ネイティブなWindowsアプリケーションとしてコンパイルされたEmacsは、非同期サブプロセスをサポートします Windows 9X/MEおよびWindows NT/2000/XP/Vista/7/8/10でのサブプロセスを参照してください。

lpr-buffer (ハードコピーの印刷を参照)と、ps-print-buffer (PostScriptのハードコピーを参照)は、プリンターポートの1つに出力を送ることにより、MS-DOSでも機能します。印刷とMS-DOSを参照してください。

MS-DOSでサブプロセスを同期実行する場合は、そのプログラムが終了することと、そのプログラムがキーボード入力の読み取りを試みないことを確認してください。プログラムが自分で終了しない場合、それを終了させることはできません。なぜならMS-DOSはプロセスを終了させる一般的な方法を提供しないからです。このような場合、C-cC-Breakを押すことが助けになる場合もあります。

MS-DOSでは、他のマシンにあるファイルへのアクセスもサポートされません。何らかのネットワークリダイレクト処理により、MS-DOSにネットワークアクセス機能が組み込まれていない限り、メール送信、ウェブ閲覧、リモートログインなどのようなネットワーク指向のコマンドは機能しません。

MS-DOSのDiredはls-lispパッケージを使用します (MS-Windowsでのlsのエミュレーションを参照してください)。 したがってMS-DOSのDiredは、変数dired-listing-switchesに記述できる、利用可能なオプションは限られます。機能するオプションは‘-A’、‘-a’、‘-c’、‘-i’、‘-r’、‘-S’、‘-s’、‘-t’、‘-u’です。


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

The GNU Manifesto

The GNU Manifesto which appears below was written by Richard Stallman at the beginning of the GNU project, to ask for participation and support. For the first few years, it was updated in minor ways to account for developments, but now it seems best to leave it unchanged as most people have seen it.

Since that time, we have learned about certain common misunderstandings that different wording could help avoid. Footnotes added in 1993 help clarify these points.

For up-to-date information about available GNU software, please see our web site, https://www.gnu.org. For software tasks and other ways to contribute, see https://www.gnu.org/help.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

What’s GNU? Gnu’s Not Unix!

GNU, which stands for Gnu’s Not Unix, is the name for the complete Unix-compatible software system which I am writing so that I can give it away free to everyone who can use it.30 Several other volunteers are helping me. Contributions of time, money, programs and equipment are greatly needed.

So far we have an Emacs text editor with Lisp for writing editor commands, a source level debugger, a yacc-compatible parser generator, a linker, and around 35 utilities. A shell (command interpreter) is nearly completed. A new portable optimizing C compiler has compiled itself and may be released this year. An initial kernel exists but many more features are needed to emulate Unix. When the kernel and compiler are finished, it will be possible to distribute a GNU system suitable for program development. We will use TeX as our text formatter, but an nroff is being worked on. We will use the free, portable X window system as well. After this we will add a portable Common Lisp, an Empire game, a spreadsheet, and hundreds of other things, plus on-line documentation. We hope to supply, eventually, everything useful that normally comes with a Unix system, and more.

GNU will be able to run Unix programs, but will not be identical to Unix. We will make all improvements that are convenient, based on our experience with other operating systems. In particular, we plan to have longer file names, file version numbers, a crashproof file system, file name completion perhaps, terminal-independent display support, and perhaps eventually a Lisp-based window system through which several Lisp programs and ordinary Unix programs can share a screen. Both C and Lisp will be available as system programming languages. We will try to support UUCP, MIT Chaosnet, and Internet protocols for communication.

GNU is aimed initially at machines in the 68000/16000 class with virtual memory, because they are the easiest machines to make it run on. The extra effort to make it run on smaller machines will be left to someone who wants to use it on them.

To avoid horrible confusion, please pronounce the “G” in the word “GNU” when it is the name of this project.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Why I Must Write GNU

I consider that the golden rule requires that if I like a program I must share it with other people who like it. Software sellers want to divide the users and conquer them, making each user agree not to share with others. I refuse to break solidarity with other users in this way. I cannot in good conscience sign a nondisclosure agreement or a software license agreement. For years I worked within the Artificial Intelligence Lab to resist such tendencies and other inhospitalities, but eventually they had gone too far: I could not remain in an institution where such things are done for me against my will.

So that I can continue to use computers without dishonor, I have decided to put together a sufficient body of free software so that I will be able to get along without any software that is not free. I have resigned from the AI lab to deny MIT any legal excuse to prevent me from giving GNU away.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Why GNU Will Be Compatible with Unix

Unix is not my ideal system, but it is not too bad. The essential features of Unix seem to be good ones, and I think I can fill in what Unix lacks without spoiling them. And a system compatible with Unix would be convenient for many other people to adopt.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

How GNU Will Be Available

GNU is not in the public domain. Everyone will be permitted to modify and redistribute GNU, but no distributor will be allowed to restrict its further redistribution. That is to say, proprietary modifications will not be allowed. I want to make sure that all versions of GNU remain free.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Why Many Other Programmers Want to Help

I have found many other programmers who are excited about GNU and want to help.

Many programmers are unhappy about the commercialization of system software. It may enable them to make more money, but it requires them to feel in conflict with other programmers in general rather than feel as comrades. The fundamental act of friendship among programmers is the sharing of programs; marketing arrangements now typically used essentially forbid programmers to treat others as friends. The purchaser of software must choose between friendship and obeying the law. Naturally, many decide that friendship is more important. But those who believe in law often do not feel at ease with either choice. They become cynical and think that programming is just a way of making money.

By working on and using GNU rather than proprietary programs, we can be hospitable to everyone and obey the law. In addition, GNU serves as an example to inspire and a banner to rally others to join us in sharing. This can give us a feeling of harmony which is impossible if we use software that is not free. For about half the programmers I talk to, this is an important happiness that money cannot replace.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

How You Can Contribute

I am asking computer manufacturers for donations of machines and money. I’m asking individuals for donations of programs and work.

One consequence you can expect if you donate machines is that GNU will run on them at an early date. The machines should be complete, ready to use systems, approved for use in a residential area, and not in need of sophisticated cooling or power.

I have found very many programmers eager to contribute part-time work for GNU. For most projects, such part-time distributed work would be very hard to coordinate; the independently-written parts would not work together. But for the particular task of replacing Unix, this problem is absent. A complete Unix system contains hundreds of utility programs, each of which is documented separately. Most interface specifications are fixed by Unix compatibility. If each contributor can write a compatible replacement for a single Unix utility, and make it work properly in place of the original on a Unix system, then these utilities will work right when put together. Even allowing for Murphy to create a few unexpected problems, assembling these components will be a feasible task. (The kernel will require closer communication and will be worked on by a small, tight group.)

If I get donations of money, I may be able to hire a few people full or part time. The salary won’t be high by programmers’ standards, but I’m looking for people for whom building community spirit is as important as making money. I view this as a way of enabling dedicated people to devote their full energies to working on GNU by sparing them the need to make a living in another way.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Why All Computer Users Will Benefit

Once GNU is written, everyone will be able to obtain good system software free, just like air.31

This means much more than just saving everyone the price of a Unix license. It means that much wasteful duplication of system programming effort will be avoided. This effort can go instead into advancing the state of the art.

Complete system sources will be available to everyone. As a result, a user who needs changes in the system will always be free to make them himself, or hire any available programmer or company to make them for him. Users will no longer be at the mercy of one programmer or company which owns the sources and is in sole position to make changes.

Schools will be able to provide a much more educational environment by encouraging all students to study and improve the system code. Harvard’s computer lab used to have the policy that no program could be installed on the system if its sources were not on public display, and upheld it by actually refusing to install certain programs. I was very much inspired by this.

Finally, the overhead of considering who owns the system software and what one is or is not entitled to do with it will be lifted.

Arrangements to make people pay for using a program, including licensing of copies, always incur a tremendous cost to society through the cumbersome mechanisms necessary to figure out how much (that is, which programs) a person must pay for. And only a police state can force everyone to obey them. Consider a space station where air must be manufactured at great cost: charging each breather per liter of air may be fair, but wearing the metered gas mask all day and all night is intolerable even if everyone can afford to pay the air bill. And the TV cameras everywhere to see if you ever take the mask off are outrageous. It’s better to support the air plant with a head tax and chuck the masks.

Copying all or parts of a program is as natural to a programmer as breathing, and as productive. It ought to be as free.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Some Easily Rebutted Objections to GNU’s Goals

“Nobody will use it if it is free, because that means they can’t rely on any support.”

“You have to charge for the program to pay for providing the support.”

If people would rather pay for GNU plus service than get GNU free without service, a company to provide just service to people who have obtained GNU free ought to be profitable.32

We must distinguish between support in the form of real programming work and mere handholding. The former is something one cannot rely on from a software vendor. If your problem is not shared by enough people, the vendor will tell you to get lost.

If your business needs to be able to rely on support, the only way is to have all the necessary sources and tools. Then you can hire any available person to fix your problem; you are not at the mercy of any individual. With Unix, the price of sources puts this out of consideration for most businesses. With GNU this will be easy. It is still possible for there to be no available competent person, but this problem cannot be blamed on distribution arrangements. GNU does not eliminate all the world’s problems, only some of them.

Meanwhile, the users who know nothing about computers need handholding: doing things for them which they could easily do themselves but don’t know how.

Such services could be provided by companies that sell just hand-holding and repair service. If it is true that users would rather spend money and get a product with service, they will also be willing to buy the service having got the product free. The service companies will compete in quality and price; users will not be tied to any particular one. Meanwhile, those of us who don’t need the service should be able to use the program without paying for the service.

“You cannot reach many people without advertising, and you must charge for the program to support that.”

“It’s no use advertising a program people can get free.”

There are various forms of free or very cheap publicity that can be used to inform numbers of computer users about something like GNU. But it may be true that one can reach more microcomputer users with advertising. If this is really so, a business which advertises the service of copying and mailing GNU for a fee ought to be successful enough to pay for its advertising and more. This way, only the users who benefit from the advertising pay for it.

On the other hand, if many people get GNU from their friends, and such companies don’t succeed, this will show that advertising was not really necessary to spread GNU. Why is it that free market advocates don’t want to let the free market decide this?33

“My company needs a proprietary operating system to get a competitive edge.”

GNU will remove operating system software from the realm of competition. You will not be able to get an edge in this area, but neither will your competitors be able to get an edge over you. You and they will compete in other areas, while benefiting mutually in this one. If your business is selling an operating system, you will not like GNU, but that’s tough on you. If your business is something else, GNU can save you from being pushed into the expensive business of selling operating systems.

I would like to see GNU development supported by gifts from many manufacturers and users, reducing the cost to each.34

“Don’t programmers deserve a reward for their creativity?”

If anything deserves a reward, it is social contribution. Creativity can be a social contribution, but only in so far as society is free to use the results. If programmers deserve to be rewarded for creating innovative programs, by the same token they deserve to be punished if they restrict the use of these programs.

“Shouldn’t a programmer be able to ask for a reward for his creativity?”

There is nothing wrong with wanting pay for work, or seeking to maximize one’s income, as long as one does not use means that are destructive. But the means customary in the field of software today are based on destruction.

Extracting money from users of a program by restricting their use of it is destructive because the restrictions reduce the amount and the ways that the program can be used. This reduces the amount of wealth that humanity derives from the program. When there is a deliberate choice to restrict, the harmful consequences are deliberate destruction.

The reason a good citizen does not use such destructive means to become wealthier is that, if everyone did so, we would all become poorer from the mutual destructiveness. This is Kantian ethics; or, the Golden Rule. Since I do not like the consequences that result if everyone hoards information, I am required to consider it wrong for one to do so. Specifically, the desire to be rewarded for one’s creativity does not justify depriving the world in general of all or part of that creativity.

“Won’t programmers starve?”

I could answer that nobody is forced to be a programmer. Most of us cannot manage to get any money for standing on the street and making faces. But we are not, as a result, condemned to spend our lives standing on the street making faces, and starving. We do something else.

But that is the wrong answer because it accepts the questioner’s implicit assumption: that without ownership of software, programmers cannot possibly be paid a cent. Supposedly it is all or nothing.

The real reason programmers will not starve is that it will still be possible for them to get paid for programming; just not paid as much as now.

Restricting copying is not the only basis for business in software. It is the most common basis because it brings in the most money. If it were prohibited, or rejected by the customer, software business would move to other bases of organization which are now used less often. There are always numerous ways to organize any kind of business.

Probably programming will not be as lucrative on the new basis as it is now. But that is not an argument against the change. It is not considered an injustice that sales clerks make the salaries that they now do. If programmers made the same, that would not be an injustice either. (In practice they would still make considerably more than that.)

“Don’t people have a right to control how their creativity is used?”

“Control over the use of one’s ideas” really constitutes control over other people’s lives; and it is usually used to make their lives more difficult.

People who have studied the issue of intellectual property rights35 carefully (such as lawyers) say that there is no intrinsic right to intellectual property. The kinds of supposed intellectual property rights that the government recognizes were created by specific acts of legislation for specific purposes.

For example, the patent system was established to encourage inventors to disclose the details of their inventions. Its purpose was to help society rather than to help inventors. At the time, the life span of 17 years for a patent was short compared with the rate of advance of the state of the art. Since patents are an issue only among manufacturers, for whom the cost and effort of a license agreement are small compared with setting up production, the patents often do not do much harm. They do not obstruct most individuals who use patented products.

The idea of copyright did not exist in ancient times, when authors frequently copied other authors at length in works of non-fiction. This practice was useful, and is the only way many authors’ works have survived even in part. The copyright system was created expressly for the purpose of encouraging authorship. In the domain for which it was invented—books, which could be copied economically only on a printing press—it did little harm, and did not obstruct most of the individuals who read the books.

All intellectual property rights are just licenses granted by society because it was thought, rightly or wrongly, that society as a whole would benefit by granting them. But in any particular situation, we have to ask: are we really better off granting such license? What kind of act are we licensing a person to do?

The case of programs today is very different from that of books a hundred years ago. The fact that the easiest way to copy a program is from one neighbor to another, the fact that a program has both source code and object code which are distinct, and the fact that a program is used rather than read and enjoyed, combine to create a situation in which a person who enforces a copyright is harming society as a whole both materially and spiritually; in which a person should not do so regardless of whether the law enables him to.

“Competition makes things get done better.”

The paradigm of competition is a race: by rewarding the winner, we encourage everyone to run faster. When capitalism really works this way, it does a good job; but its defenders are wrong in assuming it always works this way. If the runners forget why the reward is offered and become intent on winning, no matter how, they may find other strategies—such as, attacking other runners. If the runners get into a fist fight, they will all finish late.

Proprietary and secret software is the moral equivalent of runners in a fist fight. Sad to say, the only referee we’ve got does not seem to object to fights; he just regulates them (“For every ten yards you run, you can fire one shot”). He really ought to break them up, and penalize runners for even trying to fight.

“Won’t everyone stop programming without a monetary incentive?”

Actually, many people will program with absolutely no monetary incentive. Programming has an irresistible fascination for some people, usually the people who are best at it. There is no shortage of professional musicians who keep at it even though they have no hope of making a living that way.

But really this question, though commonly asked, is not appropriate to the situation. Pay for programmers will not disappear, only become less. So the right question is, will anyone program with a reduced monetary incentive? My experience shows that they will.

For more than ten years, many of the world’s best programmers worked at the Artificial Intelligence Lab for far less money than they could have had anywhere else. They got many kinds of non-monetary rewards: fame and appreciation, for example. And creativity is also fun, a reward in itself.

Then most of them left when offered a chance to do the same interesting work for a lot of money.

What the facts show is that people will program for reasons other than riches; but if given a chance to make a lot of money as well, they will come to expect and demand it. Low-paying organizations do poorly in competition with high-paying ones, but they do not have to do badly if the high-paying ones are banned.

“We need the programmers desperately. If they demand that we stop helping our neighbors, we have to obey.”

You’re never so desperate that you have to obey this sort of demand. Remember: millions for defense, but not a cent for tribute!

“Programmers need to make a living somehow.”

In the short run, this is true. However, there are plenty of ways that programmers could make a living without selling the right to use a program. This way is customary now because it brings programmers and businessmen the most money, not because it is the only way to make a living. It is easy to find other ways if you want to find them. Here are a number of examples.

A manufacturer introducing a new computer will pay for the porting of operating systems onto the new hardware.

The sale of teaching, hand-holding and maintenance services could also employ programmers.

People with new ideas could distribute programs as freeware36, asking for donations from satisfied users, or selling hand-holding services. I have met people who are already working this way successfully.

Users with related needs can form users’ groups, and pay dues. A group would contract with programming companies to write programs that the group’s members would like to use.

All sorts of development can be funded with a Software Tax:

Suppose everyone who buys a computer has to pay x percent of the price as a software tax. The government gives this to an agency like the NSF to spend on software development.

But if the computer buyer makes a donation to software development himself, he can take a credit against the tax. He can donate to the project of his own choosing—often, chosen because he hopes to use the results when it is done. He can take a credit for any amount of donation up to the total tax he had to pay.

The total tax rate could be decided by a vote of the payers of the tax, weighted according to the amount they will be taxed on.

The consequences:

In the long run, making programs free is a step toward the post-scarcity world, where nobody will have to work very hard just to make a living. People will be free to devote themselves to activities that are fun, such as programming, after spending the necessary ten hours a week on required tasks such as legislation, family counseling, robot repair and asteroid prospecting. There will be no need to be able to make a living from programming.

We have already greatly reduced the amount of work that the whole society must do for its actual productivity, but only a little of this has translated itself into leisure for workers because much nonproductive activity is required to accompany productive activity. The main causes of this are bureaucracy and isometric struggles against competition. Free software will greatly reduce these drains in the area of software production. We must do this, in order for technical gains in productivity to translate into less work for us.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Glossary

Abbrev

An abbrev is a text string that expands into a different text string when present in the buffer. For example, you might define a few letters as an abbrev for a long phrase that you want to insert frequently. See section abbrev(略語).

Aborting

Aborting means getting out of a recursive edit (q.v.). The commands C-] and M-x top-level are used for this. See section 中止と中断.

Active Region

Setting the mark (q.v.) at a position in the text also activates it. When the mark is active, we call the region an active region. See section マークとリージョン.

Alt

Alt is the name of a modifier bit that a keyboard input character may have. To make a character Alt, type it while holding down the Alt key. Such characters are given names that start with Alt- (usually written A- for short). (Note that many terminals have a key labeled Alt that is really a Meta key.) See section Alt.

Argument

See Glossary---Numeric Argument.

ASCII character

An ASCII character is either an ASCII control character or an ASCII printing character. See section ユーザー入力の種類.

ASCII control character

An ASCII control character is the Control version of an upper-case letter, or the Control version of one of the characters ‘@[\]^_?’.

ASCII printing character

ASCII letters, digits, space, and the following punctuation characters: ‘!@#$%^&*()_-+=|\~`{}[]:;"'<>,.?/’.

Auto Fill Mode

Auto Fill mode is a minor mode (q.v.) in which text that you insert is automatically broken into lines of a given maximum width. See section テキストのフィル.

Auto Saving

Auto saving is the practice of periodically saving the contents of an Emacs buffer in a specially-named file, so that the information will be preserved if the buffer is lost due to a system error or user error. See section 自動保存-災害にたいする防御.

Autoloading

Emacs can automatically load Lisp libraries when a Lisp program requests a function from those libraries. This is called “autoloading”. See section EmacsのためのLispコードによるライブラリー.

Backtrace

A backtrace is a trace of a series of function calls showing how a program arrived at a certain point. It is used mainly for finding and correcting bugs (q.v.). Emacs can display a backtrace when it signals an error or when you type C-g (see Glossary---Quitting). See section バグレポートのためのチェックリスト.

Backup File

A backup file records the contents that a file had before the current editing session. Emacs makes backup files automatically to help you track down or cancel changes you later regret making. See section バックアップファイル.

Balancing Parentheses

Emacs can balance parentheses (or other matching delimiters) either manually or automatically. You do manual balancing with the commands to move over parenthetical groupings (see section カッコ構造の移動). Automatic balancing works by blinking or highlighting the delimiter that matches the one you just inserted, or inserting the matching delimiter for you (see section Matching Parens).

Balanced Expressions

A balanced expression is a syntactically recognizable expression, such as a symbol, number, string constant, block, or parenthesized expression in C. See section Balanced Expressions.

Balloon Help

See Glossary---Tooltips.

Base Buffer

A base buffer is a buffer whose text is shared by an indirect buffer (q.v.).

Bidirectional Text

Some human languages, such as English, are written from left to right. Others, such as Arabic, are written from right to left. Emacs supports both of these forms, as well as any mixture of them—this is “bidirectional text”. See section 双方向の編集.

Bind

To bind a key sequence means to give it a binding (q.v.). See section 対話的なキーバインディングの変更.

Binding

A key sequence gets its meaning in Emacs by having a binding, which is a command (q.v.)—a Lisp function that is run when you type that sequence. See section Binding. Customization often involves rebinding a character to a different command function. The bindings of all key sequences are recorded in the keymaps (q.v.). See section キーマップ.

Blank Lines

Blank lines are lines that contain only whitespace. Emacs has several commands for operating on the blank lines in the buffer. See section 空行.

Bookmark

Bookmarks are akin to registers (q.v.) in that they record positions in buffers to which you can return later. Unlike registers, bookmarks persist between Emacs sessions. See section ブックマーク.

Border

A border is a thin space along the edge of the frame, used just for spacing, not for displaying anything. An Emacs frame has an ordinary external border, outside of everything including the menu bar, plus an internal border that surrounds the text windows, their scroll bars and fringes, and separates them from the menu bar and tool bar. You can customize both borders with options and resources (see section 内枠ボーダーと外枠ボーダー). Borders are not the same as fringes (q.v.).

Buffer

The buffer is the basic editing unit; one buffer corresponds to one text being edited. You normally have several buffers, but at any time you are editing only one, the current buffer, though several can be visible when you are using multiple windows or frames (q.v.). Most buffers are visiting (q.v.) some file. See section 複数バッファーの使用.

Buffer Selection History

Emacs keeps a buffer selection history that records how recently each Emacs buffer has been selected. This is used for choosing which buffer to select. See section 複数バッファーの使用.

Bug

A bug is an incorrect or unreasonable behavior of a program, or inaccurate or confusing documentation. Emacs developers treat bug reports, both in Emacs code and its documentation, very seriously and ask you to report any bugs you find. See section バグの報告.

Button Down Event

A button down event is the kind of input event (q.v.) generated right away when you press down on a mouse button. See section マウスボタンのリバインド.

By Default

See Glossary---Default.

Byte Compilation

See Glossary---Compilation.

cf.
c.f.

Short for “confer” in Latin, which means “compare with” or “compare to”. The second variant, “c.f.”, is a widespread misspelling.

C-

C- in the name of a character is an abbreviation for Control. See section C-.

C-M-

C-M- in the name of a character is an abbreviation for Control-Meta. If your terminal lacks a real Meta key, you type a Control-Meta character by typing ESC and then typing the corresponding Control character. See section C-M-.

Case Conversion

Case conversion means changing text from upper case to lower case or vice versa. See section 大文字小文字変換コマンド.

Case Folding

Case folding means ignoring the differences between case variants of the same letter: upper-case, lower-case, and title-case. Emacs performs case folding by default in text search. See section 検索中のLaxマッチング.

Character

Characters form the contents of an Emacs buffer. Also, key sequences (q.v.) are usually made up of characters (though they may include other input events as well). See section ユーザー入力の種類.

Character Folding

Character folding means ignoring differences between similarly looking characters, such as between a, and ä and á. Emacs performs character folding by default in text search. See section 検索中のLaxマッチング.

Character Set

Emacs supports a number of character sets, each of which represents a particular alphabet or script. See section 国際化文字セットのサポート.

Character Terminal

See Glossary---Text Terminal.

Click Event

A click event is the kind of input event (q.v.) generated when you press a mouse button and release it without moving the mouse. See section マウスボタンのリバインド.

Client

See Glossary---Server.

Clipboard

A clipboard is a buffer provided by the window system for transferring text between applications. On the X Window System, the clipboard is provided in addition to the primary selection (q.v.); on MS-Windows and Mac, the clipboard is used instead of the primary selection. See section クリップボードを使う.

Coding System

A coding system is a way to encode text characters in a file or in a stream of information. Emacs has the ability to convert text to or from a variety of coding systems when reading or writing it. See section コーディングシステム.

Command

A command is a Lisp function specially defined to be able to serve as a key binding in Emacs or to be invoked by its name (see Glossary---Command Name). When you type a key sequence (q.v.), its binding (q.v.) is looked up in the relevant keymaps (q.v.) to find the command to run. See section キーとコマンド.

Command History

See Glossary---Minibuffer History.

Command Name

A command name is the name of a Lisp symbol that is a command (see section キーとコマンド). You can invoke any command by its name using M-x (see section Running Commands by Name).

Comment

A comment is text in a program which is intended only for humans reading the program, and which is specially marked so that it will be ignored when the program is loaded or compiled. Emacs offers special commands for creating, aligning and killing comments. See section コメントの操作.

Common Lisp

Common Lisp is a dialect of Lisp (q.v.) much larger and more powerful than Emacs Lisp. Emacs provides a subset of Common Lisp in the CL package. See Overview in Common Lisp Extensions.

Compilation

Compilation is the process of creating an executable program from source code. Emacs has commands for compiling files of Emacs Lisp code (see Byte Compilation in the Emacs Lisp Reference Manual) and programs in C and other languages (see section Emacs下でのコンパイルの実行). Byte-compiled Emacs Lisp code loads and executes faster.

Complete Key

A complete key is a key sequence that fully specifies one action to be performed by Emacs. For example, X and C-f and C-x m are complete keys. Complete keys derive their meanings from being bound (see Glossary---Bind) to commands (q.v.). Thus, X is conventionally bound to a command to insert ‘X’ in the buffer; C-x m is conventionally bound to a command to begin composing a mail message. See section キー.

Completion

Completion is what Emacs does when it automatically expands an abbreviation for a name into the entire name. Completion is done for minibuffer (q.v.) arguments when the set of possible valid inputs is known; for example, on command names, buffer names, and file names. Completion usually occurs when TAB, SPC or RET is typed. See section 補完.

Continuation Line

When a line of text is longer than the width of the window, it normally takes up more than one screen line when displayed (but see Glossary---Truncation). We say that the text line is continued, and all screen lines used for it after the first are called continuation lines. See section 継続行. A related Emacs feature is filling (q.v.).

Control Character

A control character is a character that you type by holding down the Ctrl key. Some control characters also have their own keys, so that you can type them without using Ctrl. For example, RET, TAB, ESC and DEL are all control characters. See section ユーザー入力の種類.

Copyleft

A copyleft is a notice giving the public legal permission to redistribute and modify a program or other work of art, but requiring modified versions to carry similar permission. Copyright is normally used to keep users divided and helpless; with copyleft we turn that around to empower users and encourage them to cooperate.

The particular form of copyleft used by the GNU project is called the GNU General Public License. See section GNU GENERAL PUBLIC LICENSE.

Ctrl

The Ctrl or control key is what you hold down in order to enter a control character (q.v.). See Glossary---C-.

Current Buffer

The current buffer in Emacs is the Emacs buffer on which most editing commands operate. You can select any Emacs buffer as the current one. See section 複数バッファーの使用.

Current Line

The current line is the line that point is on (see section ポイント).

Current Paragraph

The current paragraph is the paragraph that point is in. If point is between two paragraphs, the current paragraph is the one that follows point. See section パラグラフ.

Current Defun

The current defun is the defun (q.v.) that point is in. If point is between defuns, the current defun is the one that follows point. See section トップレベルの定義、またはdefun.

Cursor

The cursor is the rectangle on the screen which indicates the position (called point; q.v.) at which insertion and deletion takes place. The cursor is on or under the character that follows point. Often people speak of “the cursor” when, strictly speaking, they mean “point”. See section Cursor.

Customization

Customization is making minor changes in the way Emacs works, to reflect your preferences or needs. It is often done by setting variables (see section 変数) or faces (see section フェイスのカスタマイズ), or by rebinding key sequences (see section キーマップ).

Cut and Paste

See Glossary---Killing, and Glossary---Yanking.

Daemon

A daemon is a standard term for a system-level process that runs in the background. Daemons are often started when the system first starts up. When Emacs runs in daemon-mode, it does not open a display. You connect to it with the emacsclient program. See section サーバーとしてのEmacsの使用.

Default Argument

The default for an argument is the value that will be assumed if you do not specify one. When the minibuffer is used to read an argument, the default argument is used if you just type RET. See section ミニバッファー.

Default

A default is the value that is used for a certain purpose when you do not explicitly specify a value to use.

Default Directory

When you specify a file name that does not start with ‘/’ or ‘~’, it is interpreted relative to the current buffer’s default directory. (On MS systems, file names that start with a drive letter ‘x:’ are treated as absolute, not relative.) See section Default Directory.

Defun

A defun is a major definition at the top level in a program. The name “defun” comes from Lisp, where most such definitions use the construct defun. See section トップレベルの定義、またはdefun.

DEL

DEL is a character that runs the command to delete one character of text before the cursor. It is typically either the Delete key or the BACKSPACE key, whichever one is easy to type. See section DEL.

Deletion

Deletion means erasing text without copying it into the kill ring (q.v.). The alternative is killing (q.v.). See section Deletion.

Deletion of Files

Deleting a file means erasing it from the file system. (Note that some systems use the concept of a trash can, or recycle bin, to allow you to undelete files.) See section Miscellaneous File Operations.

Deletion of Messages

Deleting a message (in Rmail, and other mail clients) means flagging it to be eliminated from your mail file. Until you expunge (q.v.) the Rmail file, you can still undelete the messages you have deleted. See section メッセージの削除.

Deletion of Windows

Deleting a window means eliminating it from the screen. Other windows expand to use up the space. The text that was in the window is not lost, and you can create a new window with the same dimensions as the old if you wish. See section 複数ウィンドウ.

Directory

File directories are named collections in the file system, within which you can place individual files or subdirectories. They are sometimes referred to as “folders”. See section ファイルディレクトリー.

Directory Local Variable

A directory local variable is a local variable (q.v.) that applies to all the files within a certain directory. See section ディレクトリーごとのローカル変数.

Directory Name

On GNU and other Unix-like systems, directory names are strings that end in ‘/’. For example, /no-such-dir/ is a directory name whereas /tmp is not, even though /tmp names a file that happens to be a directory. On MS-Windows the relationship is more complicated. See Directory Names in the Emacs Lisp Reference Manual.

Dired

Dired is the Emacs facility that displays the contents of a file directory and allows you to “edit the directory”, performing operations on the files in the directory. See section Dired (ディレクトリーエディター).

Disabled Command

A disabled command is one that you may not run without special confirmation. The usual reason for disabling a command is that it is confusing for beginning users. See section コマンドの無効化.

Down Event

Short for “button down event” (q.v.).

Drag Event

A drag event is the kind of input event (q.v.) generated when you press a mouse button, move the mouse, and then release the button. See section マウスボタンのリバインド.

Dribble File

A dribble file is a file into which Emacs writes all the characters that you type on the keyboard. Dribble files can be used to make a record for debugging Emacs bugs. Emacs does not make a dribble file unless you tell it to. See section バグの報告.

e.g.

Short for “exempli gratia” in Latin, which means “for example”.

Echo Area

The echo area is the bottom line of the screen, used for echoing the arguments to commands, for asking questions, and showing brief messages (including error messages). The messages are stored in the buffer *Messages* so you can review them later. See section エコーエリア.

Echoing

Echoing is acknowledging the receipt of input events by displaying them (in the echo area). Emacs never echoes single-character key sequences; longer key sequences echo only if you pause while typing them.

Electric

We say that a character is electric if it is normally self-inserting (q.v.), but the current major mode (q.v.) redefines it to do something else as well. For example, some programming language major modes define particular delimiter characters to reindent the line, or insert one or more newlines in addition to self-insertion.

End Of Line

End of line is a character or a sequence of characters that indicate the end of a text line. On GNU and Unix systems, this is a newline (q.v.), but other systems have other conventions. See section end-of-line. Emacs can recognize several end-of-line conventions in files and convert between them.

Environment Variable

An environment variable is one of a collection of variables stored by the operating system, each one having a name and a value. Emacs can access environment variables set by its parent shell, and it can set variables in the environment it passes to programs it invokes. See section 環境変数.

EOL

See Glossary---End Of Line.

Error

An error occurs when an Emacs command cannot execute in the current circumstances. When an error occurs, execution of the command stops (unless the command has been programmed to do otherwise) and Emacs reports the error by displaying an error message (q.v.).

Error Message

An error message is output displayed by Emacs when you ask it to do something impossible (such as, killing text forward when point is at the end of the buffer), or when a command malfunctions in some way. Such messages appear in the echo area, accompanied by a beep.

ESC

ESC is a character used as a prefix for typing Meta characters on keyboards lacking a Meta key. Unlike the Meta key (which, like the SHIFT key, is held down while another character is typed), you press the ESC key as you would press a letter key, and it applies to the next character you type.

etc.

Short for “et cetera” in Latin, which means “and so on”.

Expression

See Glossary---Balanced Expression.

Expunging

Expunging an Rmail, Gnus newsgroup, or Dired buffer is an operation that truly discards the messages or files you have previously flagged for deletion.

Face

A face is a style of displaying characters. It specifies attributes such as font family and size, foreground and background colors, underline and strike-through, background stipple, etc. Emacs provides features to associate specific faces with portions of buffer text, in order to display that text as specified by the face attributes. See section テキストのフェイス.

File Local Variable

A file local variable is a local variable (q.v.) specified in a given file. See section ファイル内のローカル変数, and Glossary---Directory Local Variable.

File Locking

Emacs uses file locking to notice when two different users start to edit one file at the same time. See section 同時編集からの保護.

File Name

A file name is a name that refers to a file. File names may be relative or absolute; the meaning of a relative file name depends on the current directory, but an absolute file name refers to the same file regardless of which directory is current. On GNU and Unix systems, an absolute file name starts with a slash (the root directory) or with ‘~/’ or ‘~user/’ (a home directory). On MS-Windows/MS-DOS, an absolute file name can also start with a drive letter and a colon, e.g., ‘d:’.

Some people use the term “pathname” for file names, but we do not; we use the word “path” only in the term “search path” (q.v.).

File-Name Component

A file-name component names a file directly within a particular directory. On GNU and Unix systems, a file name is a sequence of file-name components, separated by slashes. For example, foo/bar is a file name containing two components, ‘foo’ and ‘bar’; it refers to the file named ‘bar’ in the directory named ‘foo’ in the current directory. MS-DOS/MS-Windows file names can also use backslashes to separate components, as in foo\bar.

Fill Prefix

The fill prefix is a string that should be expected at the beginning of each line when filling is done. It is not regarded as part of the text to be filled. See section テキストのフィル.

Filling

Filling text means adjusting the position of line-breaks to shift text between consecutive lines, so that all the lines are approximately the same length. See section テキストのフィル. Some other editors call this feature “line wrapping”.

Font Lock

Font Lock is a mode that highlights parts of buffer text in different faces, according to the syntax. Some other editors refer to this as “syntax highlighting”. For example, all comments (q.v.) might be colored red. See section Font Lockモード.

Fontset

A fontset is a named collection of fonts. A fontset specification lists character sets and which font to use to display each of them. Fontsets make it easy to change several fonts at once by specifying the name of a fontset, rather than changing each font separately. See section フォントセット.

Formfeed Character

See Glossary---Page.

Frame

A frame is a rectangular cluster of Emacs windows. Emacs starts out with one frame, but you can create more. You can subdivide each frame into Emacs windows (q.v.). When you are using a window system (q.v.), more than one frame can be visible at the same time. See section フレームとグラフィカルなディスプレー. Some other editors use the term “window” for this, but in Emacs a window means something else.

Free Software

Free software is software that gives you the freedom to share, study and modify it. Emacs is free software, part of the GNU project (q.v.), and distributed under a copyleft (q.v.) license called the GNU General Public License. See section GNU GENERAL PUBLIC LICENSE.

Free Software Foundation

The Free Software Foundation (FSF) is a charitable foundation dedicated to promoting the development of free software (q.v.). For more information, see the FSF website.

Fringe

On a graphical display (q.v.), there’s a narrow portion of the frame (q.v.) between the text area and the window’s border. These “fringes” are used to display symbols that provide information about the buffer text (see section ウィンドウのフリンジ). Emacs displays the fringe using a special face (q.v.) called fringe. See section fringe.

FSF

See Glossary---Free Software Foundation.

FTP

FTP is an acronym for File Transfer Protocol. This is one standard method for retrieving remote files (q.v.).

Function Key

A function key is a key on the keyboard that sends input but does not correspond to any character. See section ファンクションキーのリバインド.

Global

Global means “independent of the current environment; in effect throughout Emacs”. It is the opposite of local (q.v.). Particular examples of the use of “global” appear below.

Global Abbrev

A global definition of an abbrev (q.v.) is effective in all major modes that do not have local (q.v.) definitions for the same abbrev. See section abbrev(略語).

Global Keymap

The global keymap (q.v.) contains key bindings that are in effect everywhere, except when overridden by local key bindings in a major mode’s local keymap (q.v.). See section キーマップ.

Global Mark Ring

The global mark ring records the series of buffers you have recently set a mark (q.v.) in. In many cases you can use this to backtrack through buffers you have been editing, or in which you have found tags (see Glossary---Tags Table). See section グローバルマークリング.

Global Substitution

Global substitution means replacing each occurrence of one string by another string throughout a large amount of text. See section 置換コマンド.

Global Variable

The global value of a variable (q.v.) takes effect in all buffers that do not have their own local (q.v.) values for the variable. See section 変数.

GNU

GNU is a recursive acronym for GNU’s Not Unix, and it refers to a Unix-compatible operating system which is free software (q.v.). See section The GNU Manifesto. GNU is normally used with Linux as the kernel since Linux works better than the GNU kernel. For more information, see the GNU website.

Graphic Character

Graphic characters are those assigned pictorial images rather than just names. All the non-Meta (q.v.) characters except for the Control (q.v.) characters are graphic characters. These include letters, digits, punctuation, and spaces; they do not include RET or ESC. In Emacs, typing a graphic character inserts that character (in ordinary editing modes). See section テキストの挿入.

Graphical Display

A graphical display is one that can display images and multiple fonts. Usually it also has a window system (q.v.).

Highlighting

Highlighting text means displaying it with a different foreground and/or background color to make it stand out from the rest of the text in the buffer.

Emacs uses highlighting in several ways. It highlights the region whenever it is active (see section マークとリージョン). Incremental search also highlights matches (see section インクリメンタル検索). See Glossary---Font Lock.

Hardcopy

Hardcopy means printed output. Emacs has various commands for printing the contents of Emacs buffers. See section ハードコピーの印刷.

HELP

HELP is the Emacs name for C-h or F1. You can type HELP at any time to ask what options you have, or to ask what a command does. See section ヘルプ.

Help Echo

Help echo is a short message displayed in the echo area (q.v.) when the mouse pointer is located on portions of display that require some explanations. Emacs displays help echo for menu items, parts of the mode line, tool-bar buttons, etc. On graphical displays, the messages can be displayed as tooltips (q.v.). See section ツールチップ.

Home Directory

Your home directory contains your personal files. On a multi-user GNU or Unix system, each user has his or her own home directory. When you start a new login session, your home directory is the default directory in which to start. A standard shorthand for your home directory is ‘~’. Similarly, ‘~user’ represents the home directory of some other user.

Hook

A hook is a list of functions to be called on specific occasions, such as saving a buffer in a file, major mode activation, etc. By customizing the various hooks, you can modify Emacs’s behavior without changing any of its code. See section フック.

Hyper

Hyper is the name of a modifier bit that a keyboard input character may have. To make a character Hyper, type it while holding down the Hyper key. Such characters are given names that start with Hyper- (usually written H- for short). See section 修飾キー.

i.e.

Short for “id est” in Latin, which means “that is”.

Iff

“Iff” means “if and only if”. This terminology comes from mathematics. Try to avoid using this term in documentation, since many are unfamiliar with it and mistake it for a typo.

Inbox

An inbox is a file in which mail is delivered by the operating system. Rmail transfers mail from inboxes to Rmail files in which the mail is then stored permanently or until explicitly deleted. See section Rmailファイルとinbox.

Incremental Search

Emacs provides an incremental search facility, whereby Emacs begins searching for a string as soon as you type the first character. As you type more characters, it refines the search. See section インクリメンタル検索.

Indentation

Indentation means blank space at the beginning of a line. Most programming languages have conventions for using indentation to illuminate the structure of the program, and Emacs has special commands to adjust indentation. See section インデント.

Indirect Buffer

An indirect buffer is a buffer that shares the text of another buffer, called its base buffer (q.v.). See section インダイレクトバッファー.

Info

Info is the hypertext format used by the GNU project for writing documentation.

Input Event

An input event represents, within Emacs, one action taken by the user on the terminal. Input events include typing characters, typing function keys, pressing or releasing mouse buttons, and switching between Emacs frames. See section ユーザー入力の種類.

Input Method

An input method is a system for entering non-ASCII text characters by typing sequences of ASCII characters (q.v.). See section インプットメソッド.

Insertion

Insertion means adding text into the buffer, either from the keyboard or from some other place in Emacs.

Interlocking

See Glossary---File Locking.

Isearch

See Glossary---Incremental Search.

Justification

Justification means adding extra spaces within lines of text in order to adjust the position of the text edges. See section 明示的なフィルコマンド.

Key Binding

See Glossary---Binding.

Keyboard Macro

Keyboard macros are a way of defining new Emacs commands from sequences of existing ones, with no need to write a Lisp program. You can use a macro to record a sequence of commands, then play them back as many times as you like. See section キーボードマクロ.

Keyboard Shortcut

A keyboard shortcut is a key sequence (q.v.) that invokes a command. What some programs call “assigning a keyboard shortcut”, Emacs calls “binding a key sequence”. See Glossary---Binding.

Key Sequence

A key sequence (key, for short) is a sequence of input events (q.v.) that are meaningful as a single unit. If the key sequence is enough to specify one action, it is a complete key (q.v.); if it is not enough, it is a prefix key (q.v.). See section キー.

Keymap

The keymap is the data structure that records the bindings (q.v.) of key sequences to the commands that they run. For example, the global keymap binds the character C-n to the command function next-line. See section キーマップ.

Keyboard Translation Table

The keyboard translation table is an array that translates the character codes that come from the terminal into the character codes that make up key sequences.

Kill Ring

The kill ring is where all text you have killed (see Glossary---Killing) recently is saved. You can reinsert any of the killed text still in the ring; this is called yanking (q.v.). See section yank.

Killing

Killing means erasing text and saving it on the kill ring so it can be yanked (q.v.) later. Some other systems call this “cutting”. Most Emacs commands that erase text perform killing, as opposed to deletion (q.v.). See section テキストのkillと移動.

Killing a Job

Killing a job (such as, an invocation of Emacs) means making it cease to exist. Any data within it, if not saved in a file, is lost. See section Emacsからのexit.

Language Environment

Your choice of language environment specifies defaults for the input method (q.v.) and coding system (q.v.). See section 言語環境. These defaults are relevant if you edit non-ASCII text (see section 国際化文字セットのサポート).

Line Wrapping

See Glossary---Filling.

Lisp

Lisp is a programming language. Most of Emacs is written in a dialect of Lisp, called Emacs Lisp, which is extended with special features that make it especially suitable for text editing tasks.

List

A list is, approximately, a text string beginning with an open parenthesis and ending with the matching close parenthesis. In C mode and other non-Lisp modes, groupings surrounded by other kinds of matched delimiters appropriate to the language, such as braces, are also considered lists. Emacs has special commands for many operations on lists. See section カッコ構造の移動.

Local

Local means “in effect only in a particular context”; the relevant kind of context is a particular function execution, a particular buffer, or a particular major mode. It is the opposite of “global” (q.v.). Specific uses of “local” in Emacs terminology appear below.

Local Abbrev

A local abbrev definition is effective only if a particular major mode is selected. In that major mode, it overrides any global definition for the same abbrev. See section abbrev(略語).

Local Keymap

A local keymap is used in a particular major mode; the key bindings (q.v.) in the current local keymap override global bindings of the same key sequences. See section キーマップ.

Local Variable

A local value of a variable (q.v.) applies to only one buffer. See section ローカル変数.

M-

M- in the name of a character is an abbreviation for Meta, one of the modifier keys that can accompany any character. See section M-.

M-C-

M-C- in the name of a character is an abbreviation for Control-Meta; it means the same thing as C-M- (q.v.).

M-x

M-x is the key sequence that is used to call an Emacs command by name. This is how you run commands that are not bound to key sequences. See section Running Commands by Name.

Mail

Mail means messages sent from one user to another through the computer system, to be read at the recipient’s convenience. Emacs has commands for composing and sending mail, and for reading and editing the mail you have received. See section メールの送信. See section Rmailでメールを読む, for one way to read mail with Emacs.

Mail Composition Method

A mail composition method is a program runnable within Emacs for editing and sending a mail message. Emacs lets you select from several alternative mail composition methods. See section メール作成方法.

Major Mode

The Emacs major modes are a mutually exclusive set of options, each of which configures Emacs for editing a certain sort of text. Ideally, each programming language has its own major mode. See section メジャーモード.

Margin

The space between the usable part of a window (including the fringe) and the window edge.

Mark

The mark points to a position in the text. It specifies one end of the region (q.v.), point being the other end. Many commands operate on all the text from point to the mark. Each buffer has its own mark. See section マークとリージョン.

Mark Ring

The mark ring is used to hold several recent previous locations of the mark, in case you want to move back to them. Each buffer has its own mark ring; in addition, there is a single global mark ring (q.v.). See section マークリング.

Menu Bar

The menu bar is a line at the top of an Emacs frame. It contains words you can click on with the mouse to bring up menus, or you can use a keyboard interface to navigate it. See section メニューバー.

Message

See Glossary---Mail.

Meta

Meta is the name of a modifier bit which you can use in a command character. To enter a meta character, you hold down the Meta key while typing the character. We refer to such characters with names that start with Meta- (usually written M- for short). For example, M-< is typed by holding down Meta and at the same time typing < (which itself is done, on most terminals, by holding down SHIFT and typing ,). See section Meta.

On some terminals, the Meta key is actually labeled Alt or Edit.

Meta Character

A Meta character is one whose character code includes the Meta bit.

Minibuffer

The minibuffer is the window that appears when necessary inside the echo area (q.v.), used for reading arguments to commands. See section ミニバッファー.

Minibuffer History

The minibuffer history records the text you have specified in the past for minibuffer arguments, so you can conveniently use the same text again. See section ミニバッファーヒストリー.

Minor Mode

A minor mode is an optional feature of Emacs, which can be switched on or off independently of all other features. Each minor mode has a command to turn it on or off. Some minor modes are global (q.v.), and some are local (q.v.). See section マイナーモード.

Minor Mode Keymap

A minor mode keymap is a keymap that belongs to a minor mode and is active when that mode is enabled. Minor mode keymaps take precedence over the buffer’s local keymap, just as the local keymap takes precedence over the global keymap. See section キーマップ.

Mode Line

The mode line is the line at the bottom of each window (q.v.), giving status information on the buffer displayed in that window. See section モードライン.

Modified Buffer

A buffer (q.v.) is modified if its text has been changed since the last time the buffer was saved (or since it was created, if it has never been saved). See section ファイルの保存.

Moving Text

Moving text means erasing it from one place and inserting it in another. The usual way to move text is by killing (q.v.) it and then yanking (q.v.) it. See section テキストのkillと移動.

MULE

Prior to Emacs 23, MULE was the name of a software package which provided a MULtilingual Enhancement to Emacs, by adding support for multiple character sets (q.v.). MULE was later integrated into Emacs, and much of it was replaced when Emacs gained internal Unicode support in version 23.

Some parts of Emacs that deal with character set support still use the MULE name. See section 国際化文字セットのサポート.

Multibyte Character

A multibyte character is a character that takes up several bytes in a buffer. Emacs uses multibyte characters to represent non-ASCII text, since the number of non-ASCII characters is much more than 256. See section International Characters.

Named Mark

A named mark is a register (q.v.), in its role of recording a location in text so that you can move point to that location. See section レジスター.

Narrowing

Narrowing means creating a restriction (q.v.) that limits editing in the current buffer to only a part of the text. Text outside that part is inaccessible for editing (or viewing) until the boundaries are widened again, but it is still there, and saving the file saves it all. See section ナローイング.

Newline

Control-J characters in the buffer terminate lines of text and are therefore also called newlines. See Glossary---End Of Line.

nil

nil is a value usually interpreted as a logical “false”. Its opposite is t, interpreted as “true”.

Numeric Argument

A numeric argument is a number, specified before a command, to change the effect of the command. Often the numeric argument serves as a repeat count. See section 数引数.

Overwrite Mode

Overwrite mode is a minor mode. When it is enabled, ordinary text characters replace the existing text after point rather than pushing it to one side. See section マイナーモード.

Package

A package is a collection of Lisp code that you download and automatically install from within Emacs. Packages provide a convenient way to add new features. See section Emacs Lispパッケージ.

Page

A page is a unit of text, delimited by formfeed characters (ASCII control-L, code 014) at the beginning of a line. Some Emacs commands are provided for moving over and operating on pages. See section ページ.

Paragraph

Paragraphs are the medium-size unit of human-language text. There are special Emacs commands for moving over and operating on paragraphs. See section パラグラフ.

Parsing

We say that certain Emacs commands parse words or expressions in the text being edited. Really, all they know how to do is find the other end of a word or expression.

Point

Point is the place in the buffer at which insertion and deletion occur. Point is considered to be between two characters, not at one character. The terminal’s cursor (q.v.) indicates the location of point. See section ポイント.

Prefix Argument

See Glossary---Numeric Argument.

Prefix Key

A prefix key is a key sequence (q.v.) whose sole function is to introduce a set of longer key sequences. C-x is an example of prefix key; any two-character sequence starting with C-x is therefore a legitimate key sequence. See section キー.

Primary Selection

The primary selection is one particular X selection (q.v.); it is the selection that most X applications use for transferring text to and from other applications.

The Emacs commands that mark or select text set the primary selection, and clicking the mouse inserts text from the primary selection when appropriate. See section シフト選択.

Prompt

A prompt is text used to ask you for input. Displaying a prompt is called prompting. Emacs prompts always appear in the echo area (q.v.). One kind of prompting happens when the minibuffer is used to read an argument (see section ミニバッファー); the echoing that happens when you pause in the middle of typing a multi-character key sequence is also a kind of prompting (see section エコーエリア).

q.v.

Short for “quod vide” in Latin, which means “which see”.

Query-Replace

Query-replace is an interactive string replacement feature provided by Emacs. See section 問い合わせつき置換.

Quitting

Quitting means canceling a partially typed command or a running command, using C-g (or C-BREAK on MS-DOS). See section 中止と中断.

Quoting

Quoting means depriving a character of its usual special significance. The most common kind of quoting in Emacs is with C-q. What constitutes special significance depends on the context and on convention. For example, an ordinary character as an Emacs command inserts itself; so in this context, a special character is any character that does not normally insert itself (such as DEL, for example), and quoting it makes it insert itself as if it were not special. Not all contexts allow quoting. See section Quoting.

Quoting File Names

Quoting a file name turns off the special significance of constructs such as ‘$’, ‘~’ and ‘:’. See section ファイル名のクォート.

Read-Only Buffer

A read-only buffer is one whose text you are not allowed to change. Normally Emacs makes buffers read-only when they contain text which has a special significance to Emacs; for example, Dired buffers. Visiting a file that is write-protected also makes a read-only buffer. See section 複数バッファーの使用.

Rectangle

A rectangle consists of the text in a given range of columns on a given range of lines. Normally you specify a rectangle by putting point at one corner and putting the mark at the diagonally opposite corner. See section 矩形領域(Rectangles).

Recursive Editing Level

A recursive editing level is a state in which part of the execution of a command involves asking you to edit some text. This text may or may not be the same as the text to which the command was applied. The mode line (q.v.) indicates recursive editing levels with square brackets (‘[’ and ‘]’). See section 再帰編集レベル.

Redisplay

Redisplay is the process of correcting the image on the screen to correspond to changes that have been made in the text being edited. See section Redisplay.

Regexp

See Glossary---Regular Expression.

Region

The region is the text between point (q.v.) and the mark (q.v.). Many commands operate on the text of the region. See section Region.

Register

Registers are named slots in which text, buffer positions, or rectangles can be saved for later use. See section レジスター. A related Emacs feature is bookmarks (q.v.).

Regular Expression

A regular expression is a pattern that can match various text strings; for example, ‘a[0-9]+’ matches ‘a’ followed by one or more digits. See section 正規表現の構文.

Remote File

A remote file is a file that is stored on a system other than your own. Emacs can access files on other computers provided that they are reachable from your machine over the network, and (obviously) that you have a supported method to gain access to those files. See section リモートファイル.

Repeat Count

See Glossary---Numeric Argument.

Replacement

See Glossary---Global Substitution.

Restriction

A buffer’s restriction is the amount of text, at the beginning or the end of the buffer, that is temporarily inaccessible. Giving a buffer a nonzero amount of restriction is called narrowing (q.v.); removing a restriction is called widening (q.v.). See section ナローイング.

RET

RET is a character that in Emacs runs the command to insert a newline into the text. It is also used to terminate most arguments read in the minibuffer (q.v.). See section Return.

Reverting

Reverting means returning to the original state. For example, Emacs lets you revert a buffer by re-reading its file from disk. See section バッファーのリバート.

Saving

Saving a buffer means copying its text into the file that was visited (q.v.) in that buffer. This is the way text in files actually gets changed by your Emacs editing. See section ファイルの保存.

Scroll Bar

A scroll bar is a tall thin hollow box that appears at the side of a window. You can use mouse commands in the scroll bar to scroll the window. The scroll bar feature is supported only under windowing systems. See section スクロールバー.

Scrolling

Scrolling means shifting the text in the Emacs window so as to see a different part of the buffer. See section スクロール.

Searching

Searching means moving point to the next occurrence of a specified string or the next match for a specified regular expression. See section 検索と置換.

Search Path

A search path is a list of directories, to be used for searching for files for certain purposes. For example, the variable load-path holds a search path for finding Lisp library files. See section EmacsのためのLispコードによるライブラリー.

Secondary Selection

The secondary selection is one particular X selection (q.v.); some X applications can use it for transferring text to and from other applications. Emacs has special mouse commands for transferring text using the secondary selection. See section セカンダリー選択.

Selected Frame

The selected frame is the one your input currently operates on. See section フレームとグラフィカルなディスプレー.

Selected Window

The selected window is the one your input currently operates on. See section Emacsウィンドウの概念.

Selecting a Buffer

Selecting a buffer means making it the current (q.v.) buffer. See section バッファーの作成と選択.

Selection

Windowing systems allow an application program to specify selections whose values are text. A program can also read the selections that other programs have set up. This is the principal way of transferring text between window applications. Emacs has commands to work with the primary (q.v.) selection and the secondary (q.v.) selection, and also with the clipboard (q.v.).

Self-Documentation

Self-documentation is the feature of Emacs that can tell you what any command does, or give you a list of all commands related to a topic you specify. You ask for self-documentation with the help character, C-h. See section ヘルプ.

Self-Inserting Character

A character is self-inserting if typing that character inserts that character in the buffer. Ordinary printing and whitespace characters are self-inserting in Emacs, except in certain special major modes.

Sentences

Emacs has commands for moving by or killing by sentences. See section センテンス.

Server

Within Emacs, you can start a “server” process, which listens for connections from “clients”. This offers a faster alternative to starting several Emacs instances. See section サーバーとしてのEmacsの使用, and Glossary---Daemon.

Sexp

A sexp (short for “s-expression”) is the basic syntactic unit of Lisp in its textual form: either a list, or Lisp atom. Sexps are also the balanced expressions (q.v.) of the Lisp language; this is why the commands for editing balanced expressions have ‘sexp’ in their name. See section Sexps.

Simultaneous Editing

Simultaneous editing means two users modifying the same file at once. Simultaneous editing, if not detected, can cause one user to lose his or her work. Emacs detects all cases of simultaneous editing, and warns one of the users to investigate. See section Simultaneous Editing.

SPC

SPC is the space character, which you enter by pressing the space bar.

Speedbar

The speedbar is a special tall frame that provides fast access to Emacs buffers, functions within those buffers, Info nodes, and other interesting parts of text within Emacs. See section スピードバーフレーム.

Spell Checking

Spell checking means checking correctness of the written form of each one of the words in a text. Emacs can use various external spelling-checker programs to check the spelling of parts of a buffer via a convenient user interface. See section スペルのチェックと訂正.

String

A string is a kind of Lisp data object that contains a sequence of characters. Many Emacs variables are intended to have strings as values. The Lisp syntax for a string consists of the characters in the string with a ‘"’ before and another ‘"’ after. A ‘"’ that is part of the string must be written as ‘\"’ and a ‘\’ that is part of the string must be written as ‘\\’. All other characters, including newline, can be included just by writing them inside the string; however, backslash sequences as in C, such as ‘\n’ for newline or ‘\241’ using an octal character code, are allowed as well.

String Substitution

See Glossary---Global Substitution.

Syntax Highlighting

See Glossary---Font Lock.

Syntax Table

The syntax table tells Emacs which characters are part of a word, which characters balance each other like parentheses, etc. See Syntax Tables in The Emacs Lisp Reference Manual.

Super

Super is the name of a modifier bit that a keyboard input character may have. To make a character Super, type it while holding down the SUPER key. Such characters are given names that start with Super- (usually written s- for short). See section 修飾キー.

Suspending

Suspending Emacs means stopping it temporarily and returning control to its parent process, which is usually a shell. Unlike killing a job (q.v.), you can later resume the suspended Emacs job without losing your buffers, unsaved edits, undo history, etc. See section Emacsからのexit.

TAB

TAB is the tab character. In Emacs it is typically used for indentation or completion.

Tab Bar

The tab bar is a row of tabs at the top of an Emacs frame. Clicking on one of these tabs switches named persistent window configurations. See section タブバー.

Tab Line

The tab line is a line of tabs at the top of an Emacs window. Clicking on one of these tabs switches window buffers. See section ウィンドウのタブライン.

Tag

A tag is an identifier in a program source. See section 識別子のリファレンスを探す.

Tags Table

A tags table is a file that serves as an index to identifiers: definitions of functions, macros, data structures, etc., in one or more other files. See section tagsテーブル.

Termscript File

A termscript file contains a record of all characters sent by Emacs to the terminal. It is used for tracking down bugs in Emacs redisplay. Emacs does not make a termscript file unless you tell it to. See section バグの報告.

Text

“Text” has two meanings (see section 人間の言語のためのコマンド):

Text Terminal

A text terminal, or character terminal, is a display that is limited to displaying text in character units. Such a terminal cannot control individual pixels it displays. Emacs supports a subset of display features on text terminals.

Text Properties

Text properties are annotations recorded for particular characters in the buffer. Images in the buffer are recorded as text properties; they also specify formatting information. See section フォーマット情報の編集.

Theme

A theme is a set of customizations (q.v.) that give Emacs a particular appearance or behavior. For example, you might use a theme for your favorite set of faces (q.v.).

Tool Bar

The tool bar is a line (sometimes multiple lines) of icons at the top of an Emacs frame. Clicking on one of these icons executes a command. You can think of this as a graphical relative of the menu bar (q.v.). See section ツールバー.

Tooltips

Tooltips are small windows displaying a help echo (q.v.) text, which explains parts of the display, lists useful options available via mouse clicks, etc. See section ツールチップ.

Top Level

Top level is the normal state of Emacs, in which you are editing the text of the file you have visited. You are at top level whenever you are not in a recursive editing level (q.v.) or the minibuffer (q.v.), and not in the middle of a command. You can get back to top level by aborting (q.v.) and quitting (q.v.). See section 中止と中断.

Transient Mark Mode

The default behavior of the mark (q.v.) and region (q.v.), in which setting the mark activates it and highlights the region, is called Transient Mark mode. In GNU Emacs 23 and onwards, it is enabled by default. See section Transient Markモードを無効にする.

Transposition

Transposing two units of text means putting each one into the place formerly occupied by the other. There are Emacs commands to transpose two adjacent characters, words, balanced expressions (q.v.) or lines (see section テキストの入れ替え).

Trash Can

See Glossary---Deletion of Files.

Truncation

Truncating text lines in the display means leaving out any text on a line that does not fit within the right margin of the window displaying it. See section Truncation, and Glossary---Continuation Line.

TTY

See Glossary---Text Terminal.

Undoing

Undoing means making your previous editing go in reverse, bringing back the text that existed earlier in the editing session. See section Undo(取り消し).

Unix

Unix is a class of multi-user computer operating systems with a long history. There are several implementations today. The GNU project (q.v.) aims to develop a complete Unix-like operating system that is free software (q.v.).

User Option

A user option is a face (q.v.) or a variable (q.v.) that exists so that you can customize Emacs by setting it to a new value. See section Easy Customizationインターフェース.

Variable

A variable is an object in Lisp that can store an arbitrary value. Emacs uses some variables for internal purposes, and has others (known as “user options”; q.v.) just so that you can set their values to control the behavior of Emacs. The variables used in Emacs that you are likely to be interested in are listed in the Variables Index in this manual (see section Variable Index). See section 変数, for information on variables.

Version Control

Version control systems keep track of multiple versions of a source file. They provide a more powerful alternative to keeping backup files (q.v.). See section バージョンコントロール.

Visiting

Visiting a file means loading its contents into a buffer (q.v.) where they can be edited. See section ファイルのvisit(訪問).

Whitespace

Whitespace is any run of consecutive formatting characters (space, tab, newline, backspace, etc.).

Widening

Widening is removing any restriction (q.v.) on the current buffer; it is the opposite of narrowing (q.v.). See section ナローイング.

Window

Emacs divides a frame (q.v.) into one or more windows, each of which can display the contents of one buffer (q.v.) at any time. See section 画面の構成, for basic information on how Emacs uses the screen. See section 複数ウィンドウ, for commands to control the use of windows. Some other editors use the term “window” for what we call a “frame” in Emacs.

Window System

A window system is software that operates on a graphical display (q.v.), to subdivide the screen so that multiple applications can have their own windows at the same time. All modern operating systems include a window system.

Word Abbrev

See Glossary---Abbrev.

Word Search

Word search is searching for a sequence of words, considering the punctuation between them as insignificant. See section 単語検索.

Yanking

Yanking means reinserting text previously killed (q.v.). It can be used to undo a mistaken kill, or for copying or moving text. Some other systems call this “pasting”. See section yank.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Acknowledgments

Many people have contributed code included in the Free Software Foundation’s distribution of GNU Emacs. To show our appreciation for their public spirit, we list here in alphabetical order those who have written substantial portions. Others too numerous to mention have reported and fixed bugs, and added features to many parts of Emacs. We thank them for their generosity as well.

This list is intended to mention every contributor of a major package or feature we currently distribute; if you know of someone we have omitted, please make a bug report. More comprehensive information is available in the ChangeLog files, summarized in the file etc/AUTHORS in the distribution.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Key (Character) Index

Jump to:   !   "   #   $   %   (   *   +   -   .   /   1   2   :   <   =   >   ?   ^   {   }   ~  
A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Z  
Index Entry  Section

!
! (Dired) 30.8 Diredでのシェルコマンド

"
" (TeX mode) 25.11.1 TeX編集コマンド

#
# (Dired) 30.4 大量のファイルに一度にフラグをつける

$
$ (Dired) 30.14 サブディレクトリーを隠す

%
% & (Dired) 30.4 大量のファイルに一度にフラグをつける
% (Buffer Menu) 19.5 複数バッファーにたいする操作
% C (Dired) 30.9 Diredでのファイル名の変更
% d (Dired) 30.4 大量のファイルに一度にフラグをつける
% g (Dired) 30.6 Diredでのマークとフラグ
% H (Dired) 30.9 Diredでのファイル名の変更
% l (Dired) 30.9 Diredでのファイル名の変更
% m (Dired) 30.6 Diredでのマークとフラグ
% R (Dired) 30.9 Diredでのファイル名の変更
% S (Dired) 30.9 Diredでのファイル名の変更
% u (Dired) 30.9 Diredでのファイル名の変更

(
( (Dired) 30.19 その他のDiredの機能
( (Package Menu) 48.1 Package Menuバッファー

*
* ! (Dired) 30.6 Diredでのマークとフラグ
* % (Dired) 30.6 Diredでのマークとフラグ
* * (Dired) 30.6 Diredでのマークとフラグ
* / (Dired) 30.6 Diredでのマークとフラグ
* ? (Dired) 30.6 Diredでのマークとフラグ
* @ (Dired) 30.6 Diredでのマークとフラグ
* c (Dired) 30.6 Diredでのマークとフラグ
* C-n (Dired) 30.6 Diredでのマークとフラグ
* C-p (Dired) 30.6 Diredでのマークとフラグ
* DEL (Dired) 30.6 Diredでのマークとフラグ
* m (Dired) 30.6 Diredでのマークとフラグ
* N (Dired) 30.6 Diredでのマークとフラグ
* s (Dired) 30.6 Diredでのマークとフラグ
* t (Dired) 30.6 Diredでのマークとフラグ
* u (Dired) 30.6 Diredでのマークとフラグ

+
+ (Dired) 30.19 その他のDiredの機能
+ (DocView mode) 37.1 DocViewの操作

-
- (DocView mode) 37.1 DocViewの操作

.
. (Calendar mode) 31.1.3 日付の指定
. (Dired) 30.4 大量のファイルに一度にフラグをつける
. (Rmail) 33.2 メッセージのスクロール

/
/ (Rmail) 33.2 メッセージのスクロール
/ / (Package Menu) 48.1 Package Menuバッファー
/ k (Package Menu) 48.1 Package Menuバッファー
/ n (Package Menu) 48.1 Package Menuバッファー

1
1 (Buffer Menu) 19.5 複数バッファーにたいする操作

2
2 (Buffer Menu) 19.5 複数バッファーにたいする操作

:
:d (Dired) 30.7 ファイルにたいする操作
:e (Dired) 30.7 ファイルにたいする操作
:s (Dired) 30.7 ファイルにたいする操作
:v (Dired) 30.7 ファイルにたいする操作

<
< (Calendar mode) 31.2 カレンダーでのスクロール
< (Dired) 30.13 サブディレクトリー間の移動
< (Rmail) 33.3 メッセージ間の移動

=
= (Dired) 30.10 Diredでのファイル比較

>
> (Calendar mode) 31.2 カレンダーでのスクロール
> (Dired) 30.13 サブディレクトリー間の移動
> (Rmail) 33.3 メッセージ間の移動

?
? (completion) 8.4.2 補完コマンド
? (Package Menu) 48.1 Package Menuバッファー

^
^ (Dired) 30.5 Diredのファイルをvisitする

{
{ (Buffer Menu) 19.5 複数バッファーにたいする操作

}
} (Buffer Menu) 19.5 複数バッファーにたいする操作

~
~ (Buffer Menu) 19.5 複数バッファーにたいする操作
~ (Dired) 30.4 大量のファイルに一度にフラグをつける
~ (Package Menu) 48.1 Package Menuバッファー

A
a (Calendar mode) 31.6 休日
A (Dired) 30.7 ファイルにたいする操作
a (Rmail) 33.8 ラベル
A k (Gnus Group mode) 34.3 Gnus Groupバッファーの使用
A s (Gnus Group mode) 34.3 Gnus Groupバッファーの使用
A u (Gnus Group mode) 34.3 Gnus Groupバッファーの使用
A z (Gnus Group mode) 34.3 Gnus Groupバッファーの使用
AltGr (MS-Windows) G.6 MS-Windowsでのキーボードの使用方法

B
b (Buffer Menu) 19.5 複数バッファーにたいする操作
B (Dired) 30.7 ファイルにたいする操作
b (Rmail summary) 33.11.2 サマリーでの編集
b (Rmail) 33.1 Rmailの基本的な概念
BS (MS-DOS) G.12.1 MS-DOSでのキーボードの使用方法

C
C (Dired) 30.7 ファイルにたいする操作
c (Dired) 30.7 ファイルにたいする操作
c (Rmail) 33.10 返信の送信
C-/ 16.1 Undo(取り消し)
C-@ 11.1 マークのセット
C-a 7.2 ポイント位置の変更
C-a (Calendar mode) 31.1.2 週、月、年の開始と終了
C-b 7.2 ポイント位置の変更
C-b (Calendar mode) 31.1.1 標準的な時間間隔での移動
C-Break (MS-DOS) G.12.1 MS-DOSでのキーボードの使用方法
C-c ' (Picture mode) 42.2 挿入後の移動の制御
C-c , j 26.10 Semanticとは
C-c , J 26.10 Semanticとは
C-c , l 26.10 Semanticとは
C-c , SPC 26.10 Semanticとは
C-c . (C mode) 26.3.5 Cのインデントのカスタマイズ
C-c . (Picture mode) 42.2 挿入後の移動の制御
C-c . (Shell mode) 38.5.1 Shellヒストリーリング
C-c / (Picture mode) 42.2 挿入後の移動の制御
C-c / (SGML mode) 25.12 SGMLモードとHTMLモード
C-c 8 (SGML mode) 25.12 SGMLモードとHTMLモード
C-c ; (Fortran mode) 26.14.3 Fortranのコメント
C-c < (GUD) 27.6.3 GUDのコマンド
C-c < (Picture mode) 42.2 挿入後の移動の制御
C-c > (GUD) 27.6.3 GUDのコマンド
C-c > (Picture mode) 42.2 挿入後の移動の制御
C-c ? (SGML mode) 25.12 SGMLモードとHTMLモード
C-c @ (Outline minor mode) 25.9 Outlineモード
C-c @ C-c 26.7 Hideshowマイナーモード
C-c @ C-h 26.7 Hideshowマイナーモード
C-c @ C-l 26.7 Hideshowマイナーモード
C-c @ C-M-h 26.7 Hideshowマイナーモード
C-c @ C-M-s 26.7 Hideshowマイナーモード
C-c @ C-r 26.7 Hideshowマイナーモード
C-c @ C-s 26.7 Hideshowマイナーモード
C-c C-a (C mode) 26.12.2 エレクトリックC文字
C-c C-a (F90 mode) 26.14.1 移動コマンド
C-c C-a (Log Edit mode) 28.1.4 Log Entryバッファーの機能
C-c C-a (Message mode) 32.4.4 メール、その他
C-c C-a (Outline mode) 25.9.3 アウトライン表示コマンド
C-c C-a (SGML mode) 25.12 SGMLモードとHTMLモード
C-c C-a (Shell mode) 38.3 Shellモード
C-c C-b (Help mode) 10.5 ヘルプモードのコマンド
C-c C-b (Message mode) 32.4.2 メールヘッダーの編集
C-c C-b (Outline mode) 25.9.2 アウトライン移動コマンド
C-c C-b (Picture mode) 42.2 挿入後の移動の制御
C-c C-b (SGML mode) 25.12 SGMLモードとHTMLモード
C-c C-b (Shell mode) 38.3 Shellモード
C-c C-b (TeX mode) 25.11.3 TeX印刷コマンド
C-c C-c (C mode) 26.5.1 コメントコマンド
C-c C-c (customization buffer) 49.1.3 変数の変更
C-c C-c (Edit Abbrevs) 29.4 abbrevのテストと編集
C-c C-c (Edit Tab Stops) 24.2 タブストップ
C-c C-c (Log Edit mode) 28.1.4 Log Entryバッファーの機能
C-c C-c (Message mode) 32.4.1 メールの送信
C-c C-c (Outline mode) 25.9.3 アウトライン表示コマンド
C-c C-c (Shell mode) 38.3 Shellモード
C-c C-c (TeX mode) 25.11.3 TeX印刷コマンド
C-c C-d (C Mode) 26.12.3 Cの欲張りな削除機能
C-c C-d (Fortran mode) 26.14.2.1 Fortranのインデントおよびフィルコマンド
C-c C-d (GUD) 27.6.3 GUDのコマンド
C-c C-d (Log Edit mode) 28.1.4 Log Entryバッファーの機能
C-c C-d (Org Mode) 25.10.1 オーガナイザーとしてのOrg
C-c C-d (Outline mode) 25.9.3 アウトライン表示コマンド
C-c C-d (Picture mode) 42.1 Pictureモードでの基本的な編集
C-c C-d (SGML mode) 25.12 SGMLモードとHTMLモード
C-c C-DEL (C Mode) 26.12.3 Cの欲張りな削除機能
C-c C-Delete (C Mode) 26.12.3 Cの欲張りな削除機能
C-c C-e (C mode) 26.12.4 Cモードのその他のコマンド
C-c C-e (F90 mode) 26.14.1 移動コマンド
C-c C-e (LaTeX mode) 25.11.2 LaTeX編集コマンド
C-c C-e (Org mode) 25.10.2 オーサリングシステムとしてのOrg
C-c C-e (Outline mode) 25.9.3 アウトライン表示コマンド
C-c C-e (Shell mode) 38.3 Shellモード
C-c C-f (GUD) 27.6.3 GUDのコマンド
C-c C-f (Help mode) 10.5 ヘルプモードのコマンド
C-c C-f (Log Edit mode) 28.1.4 Log Entryバッファーの機能
C-c C-f (Outline mode) 25.9.2 アウトライン移動コマンド
C-c C-f (Picture mode) 42.2 挿入後の移動の制御
C-c C-f (SGML mode) 25.12 SGMLモードとHTMLモード
C-c C-f (Shell mode) 38.3 Shellモード
C-c C-f (TeX mode) 25.11.3 TeX印刷コマンド
C-c C-f C-b (Message mode) 32.4.2 メールヘッダーの編集
C-c C-f C-c (Message mode) 32.4.2 メールヘッダーの編集
C-c C-f C-f (Message mode) 32.4.2 メールヘッダーの編集
C-c C-f C-r (Message mode) 32.4.2 メールヘッダーの編集
C-c C-f C-s (Message mode) 32.4.2 メールヘッダーの編集
C-c C-f C-t (Message mode) 32.4.2 メールヘッダーの編集
C-c C-f C-w (Message mode) 32.4.2 メールヘッダーの編集
C-c C-i (GUD) 27.6.3 GUDのコマンド
C-c C-i (Outline mode) 25.9.3 アウトライン表示コマンド
C-c C-j (Term mode) 38.9 Termモード
C-c C-k (Outline mode) 25.9.3 アウトライン表示コマンド
C-c C-k (Picture mode) 42.4 Pictureモードの矩形領域コマンド
C-c C-k (Term mode) 38.9 Termモード
C-c C-k (TeX mode) 25.11.3 TeX印刷コマンド
C-c C-l (C mode) 26.12.2 エレクトリックC文字
C-c C-l (Calendar mode) 31.4 その他のカレンダーコマンド
C-c C-l (GUD) 27.6.3 GUDのコマンド
C-c C-l (Outline mode) 25.9.3 アウトライン表示コマンド
C-c C-l (Shell mode) 38.5.1 Shellヒストリーリング
C-c C-l (TeX mode) 25.11.3 TeX印刷コマンド
C-c C-n (C mode) 26.12.1 Cモードの移動コマンド
C-c C-n (Fortran mode) 26.14.1 移動コマンド
C-c C-n (GUD) 27.6.3 GUDのコマンド
C-c C-n (Outline mode) 25.9.2 アウトライン移動コマンド
C-c C-n (Rmail) 33.3 メッセージ間の移動
C-c C-n (SGML mode) 25.12 SGMLモードとHTMLモード
C-c C-n (Shell mode) 38.5.2 Shellヒストリーのコピー
C-c C-o (LaTeX mode) 25.11.2 LaTeX編集コマンド
C-c C-o (Outline mode) 25.9.3 アウトライン表示コマンド
C-c C-o (Shell mode) 38.3 Shellモード
C-c C-p (C mode) 26.12.1 Cモードの移動コマンド
C-c C-p (Fortran mode) 26.14.1 移動コマンド
C-c C-p (GUD) 27.6.3 GUDのコマンド
C-c C-p (Outline mode) 25.9.2 アウトライン移動コマンド
C-c C-p (Rmail) 33.3 メッセージ間の移動
C-c C-p (Shell mode) 38.5.2 Shellヒストリーのコピー
C-c C-p (TeX mode) 25.11.3 TeX印刷コマンド
C-c C-q (C mode) 26.3.4 Cのインデントのためのコマンド
C-c C-q (Message mode) 32.4.3 メールの引用
C-c C-q (Outline mode) 25.9.3 アウトライン表示コマンド
C-c C-q (Term mode) 38.9 Termモード
C-c C-r (Fortran mode) 26.14.5 Fortranでの列のチェック
C-c C-r (GUD) 27.6.3 GUDのコマンド
C-c C-r (Shell mode) 38.3 Shellモード
C-c C-r (TeX mode) 25.11.3 TeX印刷コマンド
C-c C-s (C mode) 26.12.4 Cモードのその他のコマンド
C-c C-s (GUD) 27.6.3 GUDのコマンド
C-c C-s (Message mode) 32.4.1 メールの送信
C-c C-s (Org Mode) 25.10.1 オーガナイザーとしてのOrg
C-c C-s (Outline mode) 25.9.3 アウトライン表示コマンド
C-c C-s (Shell mode) 38.3 Shellモード
C-c C-t (GUD) 27.6.3 GUDのコマンド
C-c C-t (Org Mode) 25.10.1 オーガナイザーとしてのOrg
C-c C-t (Outline mode) 25.9.3 アウトライン表示コマンド
C-c C-t (SGML mode) 25.12 SGMLモードとHTMLモード
C-c C-u (C mode) 26.12.1 Cモードの移動コマンド
C-c C-u (GUD) 27.6.3 GUDのコマンド
C-c C-u (Outline mode) 25.9.2 アウトライン移動コマンド
C-c C-u (Shell mode) 38.3 Shellモード
C-c C-v (SGML mode) 25.12 SGMLモードとHTMLモード
C-c C-v (TeX mode) 25.11.3 TeX印刷コマンド
C-c C-w (Fortran mode) 26.14.5 Fortranでの列のチェック
C-c C-w (Log Edit mode) 28.1.4 Log Entryバッファーの機能
C-c C-w (Message mode) 32.5 メール署名
C-c C-w (Picture mode) 42.4 Pictureモードの矩形領域コマンド
C-c C-w (Shell mode) 38.3 Shellモード
C-c C-x 25.9.5 折り畳み編集
C-c C-x (Picture mode) 42.4 Pictureモードの矩形領域コマンド
C-c C-x (Shell mode) 38.5.1 Shellヒストリーリング
C-c C-y (Message mode) 32.4.3 メールの引用
C-c C-y (Picture mode) 42.4 Pictureモードの矩形領域コマンド
C-c C-z 25.9.5 折り畳み編集
C-c C-z (Shell mode) 38.3 Shellモード
C-c C-\ (C mode) 26.12.4 Cモードのその他のコマンド
C-c C-\ (Shell mode) 38.3 Shellモード
C-c DEL (C Mode) 26.12.3 Cの欲張りな削除機能
C-c Delete (C Mode) 26.12.3 Cの欲張りな削除機能
C-c DOWN (Picture mode) 42.2 挿入後の移動の制御
C-c End (Picture mode) 42.2 挿入後の移動の制御
C-c Home (Picture mode) 42.2 挿入後の移動の制御
C-c LEFT (Picture mode) 42.2 挿入後の移動の制御
C-c next (Picture mode) 42.2 挿入後の移動の制御
C-c PageDown (Picture mode) 42.2 挿入後の移動の制御
C-c PageUp (Picture mode) 42.2 挿入後の移動の制御
C-c prior (Picture mode) 42.2 挿入後の移動の制御
C-c RET (Goto Address mode) 46.4 URLのアクティブ化
C-c RET (Shell mode) 38.5.2 Shellヒストリーのコピー
C-c RIGHT (Picture mode) 42.2 挿入後の移動の制御
C-c TAB (Picture mode) 42.3 Pictureモードでのタブ
C-c TAB (SGML mode) 25.12 SGMLモードとHTMLモード
C-c TAB (TeX mode) 25.11.3 TeX印刷コマンド
C-c UP (Picture mode) 42.2 挿入後の移動の制御
C-c [ (Enriched mode) 25.14.5 Enrichedテキストのインデント
C-c [ (Org Mode) 25.10.1 オーガナイザーとしてのOrg
C-c \ (Picture mode) 42.2 挿入後の移動の制御
C-c ] (Enriched mode) 25.14.5 Enrichedテキストのインデント
C-c ^ (Picture mode) 42.2 挿入後の移動の制御
C-c ` (Picture mode) 42.2 挿入後の移動の制御
C-c { (TeX mode) 25.11.1 TeX編集コマンド
C-c } (TeX mode) 25.11.1 TeX編集コマンド
C-d (Buffer Menu) 19.5 複数バッファーにたいする操作
C-d (Rmail) 33.4 メッセージの削除
C-d (Shell mode) 38.3 Shellモード
C-Down-mouse-1 19.7.3 バッファーメニューのカスタマイズ
C-e 7.2 ポイント位置の変更
C-e (Calendar mode) 31.1.2 週、月、年の開始と終了
C-END 7.2 ポイント位置の変更
C-f 7.2 ポイント位置の変更
C-f (Calendar mode) 31.1.1 標準的な時間間隔での移動
C-g 50 中止と中断
C-g (Incremental search) 15.1.4 インクリメンタル検索でのエラー
C-g (MS-DOS) G.12.1 MS-DOSでのキーボードの使用方法
C-g C-g (Incremental Search) 15.1.1 インクリメンタル検索の基本
C-h 10 ヘルプ
C-h . 10.10 アクティブテキストのヘルプとツールチップ
C-h 4 i 10.8 その他のヘルプコマンド
C-h a 10.4 Apropos(適切な)
C-h b 10.8 その他のヘルプコマンド
C-h c 10.2 キーのドキュメント
C-h C 22.5 コーディングシステム
C-h C-c 10.9 ヘルプファイル
C-h C-d 10.9 ヘルプファイル
C-h C-e 10.9 ヘルプファイル
C-h C-f 10.9 ヘルプファイル
C-h C-h 10 ヘルプ
C-h C-h (Incremental Search) 15.1.5 インクリメンタル検索の特別な入力
C-h C-m 10.9 ヘルプファイル
C-h C-n 10.9 ヘルプファイル
C-h C-o 10.9 ヘルプファイル
C-h C-p 10.9 ヘルプファイル
C-h C-t 10.9 ヘルプファイル
C-h C-w 10.9 ヘルプファイル
C-h C-\ 22.4 インプットメソッドの選択
C-h d 10.4 Apropos(適切な)
C-h e 10.8 その他のヘルプコマンド
C-h f 10.3 コマンドと変数名のヘルプ
C-h F 10.3 コマンドと変数名のヘルプ
C-h g 10.9 ヘルプファイル
C-h h 22.1 国際化文字セットのイントロダクション
C-h i 10.8 その他のヘルプコマンド
C-h I 22.4 インプットメソッドの選択
C-h k 10.2 キーのドキュメント
C-h K 10.2 キーのドキュメント
C-h l 10.8 その他のヘルプコマンド
C-h L 22.2 言語環境
C-h m 10.8 その他のヘルプコマンド
C-h o 10.3 コマンドと変数名のヘルプ
C-h p 10.6 パッケージのキーワード検索
C-h P 10.6 パッケージのキーワード検索
C-h S 10.8 その他のヘルプコマンド
C-h s 10.8 その他のヘルプコマンド
C-h t 7 基本的な編集コマンド
C-h v 10.3 コマンドと変数名のヘルプ
C-h w 10.2 キーのドキュメント
C-j 7.1 テキストの挿入
C-j (and major modes) 23.1 メジャーモード
C-j (Lisp Interaction mode) 27.10 Lisp Interactionバッファー
C-j (MS-DOS) G.12.1 MS-DOSでのキーボードの使用方法
C-j (TeX mode) 25.11.1 TeX編集コマンド
C-k 12.1.2 行のkill
C-k (Gnus Group mode) 34.3 Gnus Groupバッファーの使用
C-l 14.2 センタリング
C-LEFT 7.2 ポイント位置の変更
C-M-% 15.10.4 問い合わせつき置換
C-M-% (Incremental search) 15.1.5 インクリメンタル検索の特別な入力
C-M-. 28.4.1.1 識別子の照合
C-M-/ 29.6 動的abbrev展開
C-M-@ 11.2 テキストオブジェクトをマークするコマンド
C-M-a 26.2.2 defunの移動
C-M-b 26.4.1 対応が取れたカッコの式
C-M-c 45 再帰編集レベル
C-M-d 26.4.2 カッコ構造の移動
C-M-d (Dired) 30.13 サブディレクトリー間の移動
C-M-d (Incremental search) 15.1.3 インクリメンタル検索でのyank
C-M-e 26.2.2 defunの移動
C-M-f 26.4.1 対応が取れたカッコの式
C-M-f (Rmail) 33.11.1 サマリーの作成
C-M-h 26.2.2 defunの移動
C-M-h (C mode) 26.2.2 defunの移動
C-M-i 26.8 シンボル名の補完
C-M-i (customization buffer) 49.1.3 変数の変更
C-M-j 26.5.2 複数行のコメント
C-M-j (Fortran mode) 26.14.2.1 Fortranのインデントおよびフィルコマンド
C-M-k 26.4.1 対応が取れたカッコの式
C-M-l 14.2 センタリング
C-M-l (Rmail) 33.11.1 サマリーの作成
C-M-l (Shell mode) 38.3 Shellモード
C-M-n 26.4.2 カッコ構造の移動
C-M-n (Dired) 30.13 サブディレクトリー間の移動
C-M-n (Fortran mode) 26.14.1 移動コマンド
C-M-n (Rmail) 33.8 ラベル
C-M-o 24.1 インデントコマンド
C-M-p 26.4.2 カッコ構造の移動
C-M-p (Dired) 30.13 サブディレクトリー間の移動
C-M-p (Fortran mode) 26.14.1 移動コマンド
C-M-p (Rmail) 33.8 ラベル
C-M-q 26.3.2 複数行のインデント
C-M-q (C mode) 26.3.4 Cのインデントのためのコマンド
C-M-q (Fortran mode) 26.14.2.1 Fortranのインデントおよびフィルコマンド
C-M-r 15.5 正規表現検索
C-M-r (Rmail) 33.11.1 サマリーの作成
C-M-s 15.5 正規表現検索
C-M-s (Rmail) 33.11.1 サマリーの作成
C-M-S-v 20.3 他のウィンドウの使用
C-M-SPC 26.4.1 対応が取れたカッコの式
C-M-t 26.4.1 対応が取れたカッコの式
C-M-t (Rmail) 33.11.1 サマリーの作成
C-M-u 26.4.2 カッコ構造の移動
C-M-u (Dired) 30.13 サブディレクトリー間の移動
C-M-v 20.3 他のウィンドウの使用
C-M-w 12.2.3 killしたテキストの追加
C-M-w (Incremental search) 15.1.3 インクリメンタル検索でのyank
C-M-x (Emacs Lisp mode) 27.9 Emacs Lisp式の評価
C-M-x (Lisp mode) 27.11 外部Lispの実行
C-M-x (Scheme mode) 27.11 外部Lispの実行
C-M-y (Incremental search) 15.1.3 インクリメンタル検索でのyank
C-M-z (Incremental search) 15.1.3 インクリメンタル検索でのyank
C-M-\ 24.1 インデントコマンド
C-mouse-1 21.4 メニューにたいするマウスクリック
C-mouse-2 21.4 メニューにたいするマウスクリック
C-mouse-2 (mode line) 20.2 ウィンドウの分割
C-mouse-2 (scroll bar) 20.2 ウィンドウの分割
C-mouse-3 21.4 メニューにたいするマウスクリック
C-mouse-3 (when menu bar is disabled) 21.15 メニューバー
C-n 7.2 ポイント位置の変更
C-n (Calendar mode) 31.1.1 標準的な時間間隔での移動
C-n (Dired) 30.2 Diredバッファーでの移動
C-o 7.7 空行
C-o (Buffer Menu) 19.5 複数バッファーにたいする操作
C-o (Dired) 30.5 Diredのファイルをvisitする
C-o (Occur mode) 15.11 その他の検索およびループコマンド
C-o (Rmail) 33.7 外部ファイルへのメッセージのコピー
C-p 7.2 ポイント位置の変更
C-p (Calendar mode) 31.1.1 標準的な時間間隔での移動
C-p (Dired) 30.2 Diredバッファーでの移動
C-q 7.1 テキストの挿入
C-q (Incremental Search) 15.1.5 インクリメンタル検索の特別な入力
C-r 15.1.1 インクリメンタル検索の基本
C-r (Incremental Search) 15.1.2 インクリメンタル検索の繰り返し
C-RIGHT 7.2 ポイント位置の変更
C-s 15.1.1 インクリメンタル検索の基本
C-s (Incremental Search) 15.1.2 インクリメンタル検索の繰り返し
C-S-backspace 12.1.2 行のkill
C-S-mouse-3 (FFAP) 46.5 ポイント位置のファイルやURLを開く
C-SPC 11.1 マークのセット
C-SPC C-SPC 11.4 マークリング
C-SPC C-SPC, enabling Transient Mark mode temporarily 11.7 Transient Markモードを無効にする
C-t 16.2 テキストの入れ替え
C-t d (Image-Dired) 30.18 Diredでのイメージとサムネイルの閲覧
C-TAB 18.17 ファイル名キャッシュ
C-TAB 21.17 タブバー
C-u 7.10 数引数
C-u C-/ 16.1 Undo(取り消し)
C-u C-c C-w (Fortran mode) 26.14.5 Fortranでの列のチェック
C-u C-SPC 11.4 マークリング
C-u C-x C-x 11.7 Transient Markモードを無効にする
C-u C-x v = 28.1.6 古いリビジョンの調査と比較
C-u C-x v D 28.1.6 古いリビジョンの調査と比較
C-u M-; 26.5.1 コメントコマンド
C-u TAB 26.3.2 複数行のインデント
C-v 7.2 ポイント位置の変更
C-v 14.1 スクロール
C-v (Calendar mode) 31.2 カレンダーでのスクロール
C-w 12.1.3 その他のkillコマンド
C-w (Incremental search) 15.1.3 インクリメンタル検索でのyank
C-wheel-down 14.11 テキストのスケール
C-wheel-up 14.11 テキストのスケール
C-x # 39.2 emacsclientの呼び出し
C-x $ 14.17 選択的な表示
C-x ( 17.1 基本的な使い方
C-x ) 17.1 基本的な使い方
C-x + 20.5 ウィンドウの削除とリサイズ
C-x - 20.5 ウィンドウの削除とリサイズ
C-x . 25.6.3 フィルプレフィクス
C-x 0 20.5 ウィンドウの削除とリサイズ
C-x 1 20.5 ウィンドウの削除とリサイズ
C-x 2 20.2 ウィンドウの分割
C-x 3 20.2 ウィンドウの分割
C-x 4 20.4 他のウィンドウでの表示
C-x 4 . 28.4.1.1 識別子の照合
C-x 4 0 20.5 ウィンドウの削除とリサイズ
C-x 4 a 28.3.1 変更ログコマンド
C-x 4 b 19.1 バッファーの作成と選択
C-x 4 c 19.6 インダイレクトバッファー
C-x 4 C-o 20.4 他のウィンドウでの表示
C-x 4 d 30.1 Diredの起動
C-x 4 f 18.2 ファイルのvisit(訪問)
C-x 4 f (FFAP) 46.5 ポイント位置のファイルやURLを開く
C-x 4 m 32 メールの送信
C-x 5 21.6 フレームの作成
C-x 5 . 28.4.1.1 識別子の照合
C-x 5 0 21.7 フレームコマンド
C-x 5 1 21.7 フレームコマンド
C-x 5 2 21.6 フレームの作成
C-x 5 b 19.1 バッファーの作成と選択
C-x 5 d 30.1 Diredの起動
C-x 5 f 18.2 ファイルのvisit(訪問)
C-x 5 f (FFAP) 46.5 ポイント位置のファイルやURLを開く
C-x 5 m 32 メールの送信
C-x 5 o 21.7 フレームコマンド
C-x 5 r 21.6 フレームの作成
C-x 6 1 25.16 2列編集
C-x 6 2 25.16 2列編集
C-x 6 b 25.16 2列編集
C-x 6 d 25.16 2列編集
C-x 6 RET 25.16 2列編集
C-x 6 s 25.16 2列編集
C-x 8 7.1 テキストの挿入
C-x 8 RET (Incremental Search) 15.1.5 インクリメンタル検索の特別な入力
C-x ; 26.5.3 コメントを制御するオプション
C-x < 14.4 水平スクロール
C-x = 7.9 カーソル位置の情報
C-x =, and international characters 22.1 国際化文字セットのイントロダクション
C-x > 14.4 水平スクロール
C-x a g 29.2 abbrevの定義
C-x a i g 29.2 abbrevの定義
C-x a i l 29.2 abbrevの定義
C-x a l 29.2 abbrevの定義
C-x b 19.1 バッファーの作成と選択
C-x C-+ 14.11 テキストのスケール
C-x C-- 14.11 テキストのスケール
C-x C-0 14.11 テキストのスケール
C-x C-; 26.5.1 コメントコマンド
C-x C-= 14.11 テキストのスケール
C-x C-a (GUD) 27.6.3 GUDのコマンド
C-x C-a C-b 27.6.3 GUDのコマンド
C-x C-a C-j (GUD) 27.6.3 GUDのコマンド
C-x C-a C-w (GUD) 27.6.5.7 ウォッチ式
C-x C-b 19.2 既存のバッファーを一覧する
C-x C-c 6 Emacsからのexit
C-x C-c (customization buffer) 49.1.3 変数の変更
C-x C-d 18.8 ファイルディレクトリー
C-x C-e 27.9 Emacs Lisp式の評価
C-x C-f 18.2 ファイルのvisit(訪問)
C-x C-f (FFAP) 46.5 ポイント位置のファイルやURLを開く
C-x C-k b 17.5 キーボードマクロの命名と保存
C-x C-k C-a 17.3 キーボードマクロカウンター
C-x C-k C-c 17.3 キーボードマクロカウンター
C-x C-k C-e 17.6 キーボードマクロの編集
C-x C-k C-f 17.3 キーボードマクロカウンター
C-x C-k C-i 17.3 キーボードマクロカウンター
C-x C-k C-k 17.2 キーボードマクロリング
C-x C-k C-n 17.2 キーボードマクロリング
C-x C-k C-p 17.2 キーボードマクロリング
C-x C-k e 17.6 キーボードマクロの編集
C-x C-k l 17.6 キーボードマクロの編集
C-x C-k n 17.5 キーボードマクロの命名と保存
C-x C-k r 17.1 基本的な使い方
C-x C-k RET 17.6 キーボードマクロの編集
C-x C-k SPC 17.7 キーボードマクロのステップ編集
C-x C-k x 13.7 キーボードマクロのレジスター
C-x C-l 25.7 大文字小文字変換コマンド
C-x C-n 7.2 ポイント位置の変更
C-x C-o 7.7 空行
C-x C-p 25.4 ページ
C-x C-q 19.3 その他のバッファー操作
C-x C-r 18.2 ファイルのvisit(訪問)
C-x C-r (FFAP) 46.5 ポイント位置のファイルやURLを開く
C-x C-s 18.3.1 ファイルを保存するコマンド
C-x C-s (Custom Themes buffer) 49.1.7 カスタムテーマ
C-x C-SPC 11.5 グローバルマークリング
C-x C-t 16.2 テキストの入れ替え
C-x C-u 25.7 大文字小文字変換コマンド
C-x C-v 18.2 ファイルのvisit(訪問)
C-x C-v (FFAP) 46.5 ポイント位置のファイルやURLを開く
C-x C-w 18.3.1 ファイルを保存するコマンド
C-x C-x 11.1 マークのセット
C-x C-x, in rectangle-mark-mode 12.5 矩形領域(Rectangles)
C-x C-z 27.11 外部Lispの実行
C-x d 30.1 Diredの起動
C-x d (FFAP) 46.5 ポイント位置のファイルやURLを開く
C-x DEL 25.2 センテンス
C-x e 17.1 基本的な使い方
C-x ESC ESC 8.6 ミニバッファーでのコマンドの繰り返し
C-x f 25.6.2 明示的なフィルコマンド
C-x h 11.2 テキストオブジェクトをマークするコマンド
C-x i 18.12 その他のファイル操作
C-x k 19.4 バッファーのkill
C-x l 25.4 ページ
C-x LEFT 19.1 バッファーの作成と選択
C-x m 32 メールの送信
C-x n d 14.5 ナローイング
C-x n n 14.5 ナローイング
C-x n p 14.5 ナローイング
C-x n w 14.5 ナローイング
C-x o 20.3 他のウィンドウの使用
C-x q 17.4 変化のあるマクロの実行
C-x r + 13.5 レジスターに数字を保存する
C-x r b 13.8 ブックマーク
C-x r c 12.5 矩形領域(Rectangles)
C-x r d 12.5 矩形領域(Rectangles)
C-x r f 13.4 レジスターにウィンドウ設定を保存する
C-x r i 13.2 レジスターにテキストを保存する
C-x r j 13.1 レジスターに位置を保存する
C-x r k 12.5 矩形領域(Rectangles)
C-x r l 13.8 ブックマーク
C-x r m 13.8 ブックマーク
C-x r M 13.8 ブックマーク
C-x r M-w 12.5 矩形領域(Rectangles)
C-x r N 12.5 矩形領域(Rectangles)
C-x r n 13.5 レジスターに数字を保存する
C-x r o 12.5 矩形領域(Rectangles)
C-x r r 13.3 レジスターに矩形領域を保存する
C-x r s 13.2 レジスターにテキストを保存する
C-x r SPC 13.1 レジスターに位置を保存する
C-x r t 12.5 矩形領域(Rectangles)
C-x r w 13.4 レジスターにウィンドウ設定を保存する
C-x r y 12.5 矩形領域(Rectangles)
C-x RET 22.1 国際化文字セットのイントロダクション
C-x RET c 22.9 ファイルのテキストにたいするコーディングシステムの指定
C-x RET C-\ 22.4 インプットメソッドの選択
C-x RET f 22.9 ファイルのテキストにたいするコーディングシステムの指定
C-x RET F 22.11 ファイル名にたいするコーディングシステム
C-x RET k 22.12 端末入出力にたいするコーディングシステム
C-x RET p 22.10 プロセス間通信にたいするコーディングシステム
C-x RET r 22.9 ファイルのテキストにたいするコーディングシステムの指定
C-x RET t 22.12 端末入出力にたいするコーディングシステム
C-x RET x 22.10 プロセス間通信にたいするコーディングシステム
C-x RET X 22.10 プロセス間通信にたいするコーディングシステム
C-x RIGHT 19.1 バッファーの作成と選択
C-x s 18.3.1 ファイルを保存するコマンド
C-x t 21.17 タブバー
C-x t 0 21.17 タブバー
C-x t 1 21.17 タブバー
C-x t 2 21.17 タブバー
C-x t o 21.17 タブバー
C-x TAB 24.1 インデントコマンド
C-x TAB (Enriched mode) 25.14.5 Enrichedテキストのインデント
C-x u 16.1 Undo(取り消し)
C-x v + 28.1.11.2 ブランチへ/からの変更のpull/push
C-x v = 28.1.6 古いリビジョンの調査と比較
C-x v a 28.1.12.1 変更ログとVC
C-x v D 28.1.6 古いリビジョンの調査と比較
C-x v d 28.1.10 VC Directoryモード
C-x v g 28.1.6 古いリビジョンの調査と比較
C-x v G 28.1.9 バージョンコントロールファイルを無視する
C-x v h 28.1.7 VC Change Log
C-x v i 28.1.5 バージョンコントロールへのファイルの登録
C-x v I 28.1.7 VC Change Log
C-x v l 28.1.7 VC Change Log
C-x v L 28.1.7 VC Change Log
C-x v O 28.1.7 VC Change Log
C-x v P 28.1.11.2 ブランチへ/からの変更のpull/push
C-x v r 28.1.12.3 リビジョンタグ
C-x v s 28.1.12.3 リビジョンタグ
C-x v u 28.1.8 バージョンコントロール操作のアンドゥ
C-x v v 28.1.3 バージョンコントロール下での基本的な編集
C-x v ~ 28.1.6 古いリビジョンの調査と比較
C-x w . 14.13 インタラクティブなハイライト
C-x w b 14.13 インタラクティブなハイライト
C-x w h 14.13 インタラクティブなハイライト
C-x w i 14.13 インタラクティブなハイライト
C-x w l 14.13 インタラクティブなハイライト
C-x w p 14.13 インタラクティブなハイライト
C-x w r 14.13 インタラクティブなハイライト
C-x z 7.11 コマンドの繰り返し
C-x [ 25.4 ページ
C-x [ (Calendar mode) 31.1.1 標準的な時間間隔での移動
C-x [ (DocView mode) 37.1 DocViewの操作
C-x ] 25.4 ページ
C-x ] (Calendar mode) 31.1.1 標準的な時間間隔での移動
C-x ] (DocView mode) 37.1 DocViewの操作
C-x ^ 20.5 ウィンドウの削除とリサイズ
C-x ` 27.2 Compilationモード
C-x } 20.5 ウィンドウの削除とリサイズ
C-y 12.2 yank
C-y (Incremental search) 15.1.3 インクリメンタル検索でのyank
C-z 6 Emacsからのexit
C-z (X windows) 21.7 フレームコマンド
C-\ 22.4 インプットメソッドの選択
C-] 50 中止と中断
C-^ (Incremental Search) 15.1.5 インクリメンタル検索の特別な入力
C-_ 16.1 Undo(取り消し)
C-_ (Dired) 30.6 Diredでのマークとフラグ

D
d (Buffer Menu) 19.5 複数バッファーにたいする操作
d (Calendar mode) 31.10.2 ダイアリーの表示
d (Dired) 30.3 Diredでのファイルの削除について
D (Dired) 30.7 ファイルにたいする操作
D (GDB Breakpoints buffer) 27.6.5.3 Breakpointsバッファー
D (GDB speedbar) 27.6.5.7 ウォッチ式
d (GDB threads buffer) 27.6.5.4 Threadsバッファー
d (Package Menu) 48.1 Package Menuバッファー
d (Rmail) 33.4 メッセージの削除
DEL (and major modes) 23.1 メジャーモード
DEL (Buffer Menu) 19.5 複数バッファーにたいする操作
DEL (Dired) 30.3 Diredでのファイルの削除について
DEL (DocView mode) 37.1 DocViewの操作
DEL (Gnus Group mode) 34.3 Gnus Groupバッファーの使用
DEL (Gnus Summary mode) 34.4 Gnus Summaryバッファーの使用
DEL (Incremental search) 15.1.1 インクリメンタル検索の基本
DEL (MS-DOS) G.12.1 MS-DOSでのキーボードの使用方法
DEL (programming modes) 26.1 プログラミング言語のためのメジャーモード
DEL (Rmail) 33.2 メッセージのスクロール
DEL (View mode) 14.6 Viewモード
DOWN 7.2 ポイント位置の変更
DOWN (minibuffer history) 8.5 ミニバッファーヒストリー

E
e (Dired) 30.5 Diredのファイルをvisitする
e (Rmail) 33.15 メッセージの編集
e (View mode) 14.6 Viewモード
END 7.2 ポイント位置の変更
ESC ESC ESC 50 中止と中断
ESC ESC ESC (Incremental Search) 15.1.1 インクリメンタル検索の基本

F
f (Buffer Menu) 19.5 複数バッファーにたいする操作
f (Dired) 30.5 Diredのファイルをvisitする
f (GDB threads buffer) 27.6.5.4 Threadsバッファー
f (Rmail) 33.10 返信の送信
F1 10 ヘルプ
F10 1.4 メニューバー
F11 21.7 フレームコマンド
F2 1 25.16 2列編集
F2 2 25.16 2列編集
F2 b 25.16 2列編集
F2 d 25.16 2列編集
F2 RET 25.16 2列編集
F2 s 25.16 2列編集
F3 17.1 基本的な使い方
F4 17.1 基本的な使い方

G
G (Dired) 30.7 ファイルにたいする操作
g (Dired) 30.15 Diredバッファーの更新
g (Package Menu) 48.1 Package Menuバッファー
g (Rmail) 33.6 複数のRmailファイル
g char (Calendar mode) 31.9.3 他のカレンダーからの変換
g d (Calendar mode) 31.1.3 日付の指定
g D (Calendar mode) 31.1.3 日付の指定
g m (Calendar mode) 31.13.3 マヤ暦からの変換
g w (Calendar mode) 31.1.3 日付の指定

H
H (Calendar mode) 31.5 カレンダーファイルの記述
h (Calendar mode) 31.6 休日
H (Dired) 30.7 ファイルにたいする操作
h (Package Menu) 48.1 Package Menuバッファー
H (Package Menu) 48.1 Package Menuバッファー
h (Rmail) 33.11.1 サマリーの作成
HOME 7.2 ポイント位置の変更

I
i (Dired) 30.11 Diredでのサブディレクトリー
i (Package Menu) 48.1 Package Menuバッファー
i (Rmail) 33.6 複数のRmailファイル
i a (Calendar mode) 31.10.5 特別なダイアリーエントリー
i b (Calendar mode) 31.10.5 特別なダイアリーエントリー
i c (Calendar mode) 31.10.5 特別なダイアリーエントリー
i d (Calendar mode) 31.10.4 ダイアリーに追加するコマンド
i m (Calendar mode) 31.10.4 ダイアリーに追加するコマンド
i w (Calendar mode) 31.10.4 ダイアリーに追加するコマンド
i y (Calendar mode) 31.10.4 ダイアリーに追加するコマンド
INSERT 23.2 マイナーモード

J
j (Dired) 30.2 Diredバッファーでの移動
j (Rmail) 33.3 メッセージ間の移動

K
k (Dired) 30.15 Diredバッファーの更新
k (Rmail) 33.8 ラベル

L
L (Dired) 30.7 ファイルにたいする操作
l (Dired) 30.15 Diredバッファーの更新
l (GDB threads buffer) 27.6.5.4 Threadsバッファー
l (Gnus Group mode) 34.3 Gnus Groupバッファーの使用
L (Gnus Group mode) 34.3 Gnus Groupバッファーの使用
l (Help mode) 10.5 ヘルプモードのコマンド
l (Rmail) 33.11.1 サマリーの作成
LEFT 7.2 ポイント位置の変更
LEFT, and bidirectional text 22.19 双方向の編集

M
m (Buffer Menu) 19.5 複数バッファーにたいする操作
M (Calendar mode) 31.8 月の位相
m (Calendar mode) 31.10.2 ダイアリーの表示
m (Dired) 30.6 Diredでのマークとフラグ
M (Dired) 30.7 ファイルにたいする操作
m (Rmail) 33.10 返信の送信
M-! 38.1 単一のシェルコマンド
M-$ 16.4 スペルのチェックと訂正
M-$ (Dired) 30.14 サブディレクトリーを隠す
M-% 15.10.4 問い合わせつき置換
M-% (Incremental search) 15.1.5 インクリメンタル検索の特別な入力
M-& 38.1 単一のシェルコマンド
M-' 29.3 abbrev展開の制御
M-, 28.4.1.1 識別子の照合
M-- 7.10 数引数
M-- M-c 16.3 大文字小文字の変換
M-- M-l 16.3 大文字小文字の変換
M-- M-u 16.3 大文字小文字の変換
M-. 28.4.1.1 識別子の照合
M-/ 29.6 動的abbrev展開
M-1 7.10 数引数
M-: 27.9 Emacs Lisp式の評価
M-; 26.5.1 コメントコマンド
M-< 7.2 ポイント位置の変更
M-< (Calendar mode) 31.1.2 週、月、年の開始と終了
M-< (DocView mode) 37.1 DocViewの操作
M-= 7.9 カーソル位置の情報
M-= (Calendar mode) 31.3 日付のカウント
M-> 7.2 ポイント位置の変更
M-> (Calendar mode) 31.1.2 週、月、年の開始と終了
M-> (DocView mode) 37.1 DocViewの操作
M-? 28.4.1.3 識別子の検索と置換
M-? (Nroff mode) 25.13 Nroffモード
M-? (Shell mode) 38.3 Shellモード
M-@ 11.2 テキストオブジェクトをマークするコマンド
M-@ 25.1 単語
M-a 25.2 センテンス
M-a (C mode) 26.12.1 Cモードの移動コマンド
M-a (Calendar mode) 31.1.2 週、月、年の開始と終了
M-b 25.1 単語
M-c 25.7 大文字小文字変換コマンド
M-c (Incremental search) 15.9 検索中のLaxマッチング
M-d 25.1 単語
M-DEL 25.1 単語
M-DEL (Buffer Menu) 19.5 複数バッファーにたいする操作
M-DEL (Dired) 30.6 Diredでのマークとフラグ
M-DOWN (Org Mode) 25.10 Orgモード
M-Drag-mouse-1 12.3.3 セカンダリー選択
M-e 25.2 センテンス
M-e (C mode) 26.12.1 Cモードの移動コマンド
M-e (Calendar mode) 31.1.2 週、月、年の開始と終了
M-e (Incremental search) 15.1.2 インクリメンタル検索の繰り返し
M-f 25.1 単語
M-F10 21.7 フレームコマンド
M-g c 7.2 ポイント位置の変更
M-g g 7.2 ポイント位置の変更
M-g M-g 7.2 ポイント位置の変更
M-g M-n 27.2 Compilationモード
M-g n 27.2 Compilationモード
M-g TAB 7.2 ポイント位置の変更
M-h 25.3 パラグラフ
M-i 24.1 インデントコマンド
M-j 26.5.2 複数行のコメント
M-j b (Enriched mode) 25.14.6 Enrichedテキストの位置調整
M-j c (Enriched mode) 25.14.6 Enrichedテキストの位置調整
M-j l (Enriched mode) 25.14.6 Enrichedテキストの位置調整
M-j r (Enriched mode) 25.14.6 Enrichedテキストの位置調整
M-j u (Enriched mode) 25.14.6 Enrichedテキストの位置調整
M-k 25.2 センテンス
M-l 25.7 大文字小文字変換コマンド
M-LEFT 7.2 ポイント位置の変更
M-LEFT (Org Mode) 25.10 Orgモード
M-m 24.1 インデントコマンド
M-m (Rmail) 33.10 返信の送信
M-mouse-1 12.3.3 セカンダリー選択
M-mouse-2 12.3.3 セカンダリー選択
M-mouse-3 12.3.3 セカンダリー選択
M-n (Incremental search) 15.1.2 インクリメンタル検索の繰り返し
M-n (Log Edit mode) 28.1.4 Log Entryバッファーの機能
M-n (Man mode) 26.6.2 man-pageの照会
M-n (minibuffer history) 8.5 ミニバッファーヒストリー
M-n (Nroff mode) 25.13 Nroffモード
M-n (Rmail) 33.3 メッセージ間の移動
M-n (Shell mode) 38.5.1 Shellヒストリーリング
M-o b (Enriched mode) 25.14.4 Enrichedテキストのフェイス
M-o d (Enriched mode) 25.14.4 Enrichedテキストのフェイス
M-o i (Enriched mode) 25.14.4 Enrichedテキストのフェイス
M-o l (Enriched mode) 25.14.4 Enrichedテキストのフェイス
M-o M-s (Text mode) 25.6.2 明示的なフィルコマンド
M-o o (Enriched mode) 25.14.4 Enrichedテキストのフェイス
M-o u (Enriched mode) 25.14.4 Enrichedテキストのフェイス
M-p (Incremental search) 15.1.2 インクリメンタル検索の繰り返し
M-p (Log Edit mode) 28.1.4 Log Entryバッファーの機能
M-p (Man mode) 26.6.2 man-pageの照会
M-p (minibuffer history) 8.5 ミニバッファーヒストリー
M-p (Nroff mode) 25.13 Nroffモード
M-p (Rmail) 33.3 メッセージ間の移動
M-p (Shell mode) 38.5.1 Shellヒストリーリング
M-q 25.6.2 明示的なフィルコマンド
M-q (C mode) 26.12.4 Cモードのその他のコマンド
M-q (Fortran mode) 26.14.2.1 Fortranのインデントおよびフィルコマンド
M-r 7.2 ポイント位置の変更
M-r (Gnus Summary mode) 34.4 Gnus Summaryバッファーの使用
M-r (Incremental Search) 15.1.5 インクリメンタル検索の特別な入力
M-r (Log Edit mode) 28.1.4 Log Entryバッファーの機能
M-r (minibuffer history) 8.5 ミニバッファーヒストリー
M-r (Shell mode) 38.5.1 Shellヒストリーリング
M-RIGHT 7.2 ポイント位置の変更
M-RIGHT (Org Mode) 25.10 Orgモード
M-s ' (Incremental Search) 15.9 検索中のLaxマッチング
M-S (Enriched mode) 25.14.6 Enrichedテキストの位置調整
M-s (Gnus Summary mode) 34.4 Gnus Summaryバッファーの使用
M-s (Log Edit mode) 28.1.4 Log Entryバッファーの機能
M-s (minibuffer history) 8.5 ミニバッファーヒストリー
M-s (Rmail) 33.3 メッセージ間の移動
M-s . 15.4 シンボル検索
M-s a C-s (Dired) 30.19 その他のDiredの機能
M-s a M-C-s (Dired) 30.19 その他のDiredの機能
M-s c (Incremental search) 15.9 検索中のLaxマッチング
M-s C-e (Incremental search) 15.1.3 インクリメンタル検索でのyank
M-s f C-s (Dired) 30.2 Diredバッファーでの移動
M-s f M-C-s (Dired) 30.2 Diredバッファーでの移動
M-s h . 14.13 インタラクティブなハイライト
M-s h f 14.13 インタラクティブなハイライト
M-s h l 14.13 インタラクティブなハイライト
M-s h l (Incremental Search) 15.1.5 インクリメンタル検索の特別な入力
M-s h p 14.13 インタラクティブなハイライト
M-s h r 14.13 インタラクティブなハイライト
M-s h r (Incremental Search) 15.1.5 インクリメンタル検索の特別な入力
M-s h u 14.13 インタラクティブなハイライト
M-s h w 14.13 インタラクティブなハイライト
M-s i (Incremental search) 15.1.5 インクリメンタル検索の特別な入力
M-s M-< 15.1.5 インクリメンタル検索の特別な入力
M-s M-> 15.1.5 インクリメンタル検索の特別な入力
M-s M-w 15.3 単語検索
M-s o 15.11 その他の検索およびループコマンド
M-s o (Incremental Search) 15.1.5 インクリメンタル検索の特別な入力
M-s r (Incremental Search) 15.1.5 インクリメンタル検索の特別な入力
M-s SPC (Incremental search) 15.9 検索中のLaxマッチング
M-s w 15.3 単語検索
M-s _ 15.4 シンボル検索
M-SPC 12.1.1 削除
M-t 16.2 テキストの入れ替え
M-TAB 26.8 シンボル名の補完
M-TAB (customization buffer) 49.1.3 変数の変更
M-TAB (Incremental search) 15.1.5 インクリメンタル検索の特別な入力
M-TAB (Picture mode) 42.3 Pictureモードでのタブ
M-TAB (Text mode) 25.8 Textモード
M-TAB, (MS-Windows) G.6 MS-Windowsでのキーボードの使用方法
M-u 25.7 大文字小文字変換コマンド
M-UP (Org Mode) 25.10 Orgモード
M-v 7.2 ポイント位置の変更
M-v 14.1 スクロール
M-v (Calendar mode) 31.2 カレンダーでのスクロール
M-w 12.1.3 その他のkillコマンド
M-x 9 名前を指定してコマンドを実行する
M-y 12.2.2 過去にkillしたテキストをyankする
M-y (Incremental search) 15.1.3 インクリメンタル検索でのyank
M-z 12.1.3 その他のkillコマンド
M-\ 12.1.1 削除
M-^ 24.1 インデントコマンド
M-^ (Fortran mode) 26.14.2.1 Fortranのインデントおよびフィルコマンド
M-` 1.4 メニューバー
M-{ 25.3 パラグラフ
M-{ (Calendar mode) 31.1.1 標準的な時間間隔での移動
M-{ (Dired) 30.6 Diredでのマークとフラグ
M-| 38.1 単一のシェルコマンド
M-} 25.3 パラグラフ
M-} (Calendar mode) 31.1.1 標準的な時間間隔での移動
M-} (Dired) 30.6 Diredでのマークとフラグ
M-~ 18.3.1 ファイルを保存するコマンド
mouse-1 21.1 編集のためのマウスコマンド
mouse-1 (mode line) 21.5 モードラインのマウスコマンド
mouse-1 (on buttons) 21.3 マウスで参照をフォローする
mouse-1 (scroll bar) 21.5 モードラインのマウスコマンド
mouse-1 in the minibuffer (Incremental Search) 15.1.2 インクリメンタル検索の繰り返し
mouse-2 21.1 編集のためのマウスコマンド
mouse-2 (GDB Breakpoints buffer) 27.6.5.3 Breakpointsバッファー
mouse-2 (mode line) 21.5 モードラインのマウスコマンド
mouse-2 (on buttons) 21.3 マウスで参照をフォローする
mouse-2 in the minibuffer (Incremental search) 15.1.3 インクリメンタル検索でのyank
mouse-3 21.1 編集のためのマウスコマンド
mouse-3 (mode line) 21.5 モードラインのマウスコマンド

N
n (DocView mode) 37.1 DocViewの操作
n (Gnus Group mode) 34.3 Gnus Groupバッファーの使用
n (Gnus Summary mode) 34.4 Gnus Summaryバッファーの使用
n (Rmail) 33.3 メッセージ間の移動
next 7.2 ポイント位置の変更
next 14.1 スクロール
next (Calendar mode) 31.2 カレンダーでのスクロール
next (DocView mode) 37.1 DocViewの操作

O
o (Buffer Menu) 19.5 複数バッファーにたいする操作
o (Calendar mode) 31.1.3 日付の指定
o (Dired) 30.5 Diredのファイルをvisitする
O (Dired) 30.7 ファイルにたいする操作
o (Occur mode) 15.11 その他の検索およびループコマンド
o (Rmail) 33.7 外部ファイルへのメッセージのコピー

P
p (Calendar mode) 31.9.2 他のカレンダーへの変換
P (Dired) 30.7 ファイルにたいする操作
p (DocView mode) 37.1 DocViewの操作
p (Gnus Group mode) 34.3 Gnus Groupバッファーの使用
p (Gnus Summary mode) 34.4 Gnus Summaryバッファーの使用
p (Rmail) 33.3 メッセージ間の移動
p d (Calendar mode) 31.4 その他のカレンダーコマンド
PageDown 7.2 ポイント位置の変更
PageDown 14.1 スクロール
PageDown (Calendar mode) 31.2 カレンダーでのスクロール
PageDown (DocView mode) 37.1 DocViewの操作
PageUp 7.2 ポイント位置の変更
PageUp 14.1 スクロール
PageUp (Calendar mode) 31.2 カレンダーでのスクロール
PageUp (DocView mode) 37.1 DocViewの操作
prior 7.2 ポイント位置の変更
prior 14.1 スクロール
prior (Calendar mode) 31.2 カレンダーでのスクロール
prior (DocView mode) 37.1 DocViewの操作

Q
q (Buffer Menu) 19.5 複数バッファーにたいする操作
q (Calendar mode) 31.4 その他のカレンダーコマンド
q (Dired) 30.1 Diredの起動
Q (Dired) 30.7 ファイルにたいする操作
q (Gnus Group mode) 34.3 Gnus Groupバッファーの使用
q (Gnus Summary mode) 34.4 Gnus Summaryバッファーの使用
Q (Rmail summary) 33.11.2 サマリーでの編集
q (Rmail summary) 33.11.2 サマリーでの編集
q (Rmail) 33.1 Rmailの基本的な概念
q (View mode) 14.6 Viewモード

R
R (Dired) 30.7 ファイルにたいする操作
r (GDB threads buffer) 27.6.5.4 Threadsバッファー
r (Help mode) 10.5 ヘルプモードのコマンド
r (Package Menu) 48.1 Package Menuバッファー
r (Rmail) 33.10 返信の送信
RET 7.1 テキストの挿入
RET (Buffer Menu) 19.5 複数バッファーにたいする操作
RET (completion in minibuffer) 8.4.3 補完の終了
RET (Dired) 30.5 Diredのファイルをvisitする
RET (GDB Breakpoints buffer) 27.6.5.3 Breakpointsバッファー
RET (GDB speedbar) 27.6.5.7 ウォッチ式
RET (Help mode) 10.5 ヘルプモードのコマンド
RET (Incremental search) 15.1.1 インクリメンタル検索の基本
RET (Occur mode) 15.11 その他の検索およびループコマンド
RET (Package Menu) 48.1 Package Menuバッファー
RET (Shell mode) 38.3 Shellモード
RIGHT 7.2 ポイント位置の変更
RIGHT, and bidirectional text 22.19 双方向の編集

S
s (Buffer Menu) 19.5 複数バッファーにたいする操作
S (Buffer Menu) 19.5 複数バッファーにたいする操作
S (Calendar mode) 31.7 日の出と日の入りの時刻
s (Calendar mode) 31.10.2 ダイアリーの表示
S (Dired) 30.7 ファイルにたいする操作
s (Dired) 30.15 Diredバッファーの更新
s (Gnus Summary mode) 34.4 Gnus Summaryバッファーの使用
s (Rmail) 33.1 Rmailの基本的な概念
s (View mode) 14.6 Viewモード
S-C-TAB 21.17 タブバー
S-mouse-2 26.7 Hideshowマイナーモード
S-mouse-3 (FFAP) 46.5 ポイント位置のファイルやURLを開く
S-SPC (Rmail) 33.2 メッセージのスクロール
S-TAB (customization buffer) 49.1.1 カスタマイズグループ
S-TAB (Help mode) 10.5 ヘルプモードのコマンド
S-TAB (Org Mode) 25.10 Orgモード
SPC (Calendar mode) 31.4 その他のカレンダーコマンド
SPC (completion) 8.4.2 補完コマンド
SPC (Dired) 30.2 Diredバッファーでの移動
SPC (DocView mode) 37.1 DocViewの操作
SPC (GDB Breakpoints buffer) 27.6.5.3 Breakpointsバッファー
SPC (Gnus Group mode) 34.3 Gnus Groupバッファーの使用
SPC (Gnus Summary mode) 34.4 Gnus Summaryバッファーの使用
SPC (Incremental search) 15.9 検索中のLaxマッチング
SPC (Rmail) 33.2 メッセージのスクロール
SPC (View mode) 14.6 Viewモード

T
t (Buffer Menu) 19.5 複数バッファーにたいする操作
T (Buffer Menu) 19.5 複数バッファーにたいする操作
t (Calendar mode) 31.5 カレンダーファイルの記述
t (Dired) 30.6 Diredでのマークとフラグ
T (Dired) 30.7 ファイルにたいする操作
t (Rmail) 33.13 メッセージの表示
TAB (and major modes) 23.1 メジャーモード
TAB (completion example) 8.4.1 補完の例
TAB (completion) 8.4.2 補完コマンド
TAB (customization buffer) 49.1.1 カスタマイズグループ
TAB (GUD) 27.6.3 GUDのコマンド
TAB (Help mode) 10.5 ヘルプモードのコマンド
TAB (indentation) 24 インデント
TAB (Message mode) 32.4.2 メールヘッダーの編集
TAB (Org Mode) 25.10 Orgモード
TAB (programming modes) 26.3.1 プログラムの基本的なインデントコマンド
TAB (Shell mode) 38.3 Shellモード
TAB (Text mode) 25.8 Textモード

U
u (Buffer Menu) 19.5 複数バッファーにたいする操作
U (Buffer Menu) 19.5 複数バッファーにたいする操作
u (Calendar mode) 31.6 休日
u (Dired deletion) 30.3 Diredでのファイルの削除について
u (Dired) 30.6 Diredでのマークとフラグ
U (Dired) 30.6 Diredでのマークとフラグ
u (Gnus Group mode) 34.3 Gnus Groupバッファーの使用
u (Package Menu) 48.1 Package Menuバッファー
U (Package Menu) 48.1 Package Menuバッファー
u (Rmail) 33.4 メッセージの削除
UP 7.2 ポイント位置の変更
UP (minibuffer history) 8.5 ミニバッファーヒストリー

V
v (Buffer Menu) 19.5 複数バッファーにたいする操作
v (Dired) 30.5 Diredのファイルをvisitする
v (Rmail) 33.13 メッセージの表示

W
w (Dired) 30.19 その他のDiredの機能
W (Dired) 30.19 その他のDiredの機能
w (Rmail) 33.7 外部ファイルへのメッセージのコピー

X
x (Buffer Menu) 19.5 複数バッファーにたいする操作
x (Calendar mode) 31.6 休日
x (Dired) 30.3 Diredでのファイルの削除について
X (Dired) 30.8 Diredでのシェルコマンド
x (Package Menu) 48.1 Package Menuバッファー
x (Rmail) 33.4 メッセージの削除

Z
Z (Dired) 30.7 ファイルにたいする操作

Jump to:   !   "   #   $   %   (   *   +   -   .   /   1   2   :   <   =   >   ?   ^   {   }   ~  
A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Z  

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Command-Line Options Index

Jump to:   +   -
Index Entry  Section

+
+linenum C.1 動作引数

-
--background-color C.7 ウィンドウカラーオプション
--basic-display C.12 その他のディスプレーオプション
--batch C.2 初期化オプション
--border-color C.7 ウィンドウカラーオプション
--border-width C.9 内枠ボーダーと外枠ボーダー
--chdir C.2 初期化オプション
--color C.7 ウィンドウカラーオプション
--cursor-color C.7 ウィンドウカラーオプション
--daemon C.2 初期化オプション
--debug-init C.2 初期化オプション
--directory C.1 動作引数
--display C.2 初期化オプション
--dump-file C.2 初期化オプション
--eval C.1 動作引数
--execute C.1 動作引数
--file C.1 動作引数
--find-file C.1 動作引数
--font C.6 フォント指定オプション
--foreground-color C.7 ウィンドウカラーオプション
--fullheight C.8 ウィンドウのサイズと位置にたいするオプション
--fullscreen C.8 ウィンドウのサイズと位置にたいするオプション
--fullwidth C.8 ウィンドウのサイズと位置にたいするオプション
--funcall C.1 動作引数
--geometry C.8 ウィンドウのサイズと位置にたいするオプション
--help C.1 動作引数
--iconic C.11 アイコン
--insert C.1 動作引数
--internal-border C.9 内枠ボーダーと外枠ボーダー
--kill C.1 動作引数
--line-spacing C.12 その他のディスプレーオプション
--load C.1 動作引数
--maximized C.8 ウィンドウのサイズと位置にたいするオプション
--module-assertions C.2 初期化オプション
--mouse-color C.7 ウィンドウカラーオプション
--name D.1 Xリソース
--no-bitmap-icon C.11 アイコン
--no-blinking-cursor C.12 その他のディスプレーオプション
--no-build-details C.2 初期化オプション
--no-desktop C.2 初期化オプション
--no-init-file C.2 初期化オプション
--no-site-file C.2 初期化オプション
--no-site-lisp C.2 初期化オプション
--no-splash C.2 初期化オプション
--no-window-system C.2 初期化オプション
--no-x-resources C.2 初期化オプション
--quick C.2 初期化オプション
--reverse-video C.7 ウィンドウカラーオプション
--script C.2 初期化オプション
--terminal C.2 初期化オプション
--title C.10 フレームタイトル
--user C.2 初期化オプション
--version C.1 動作引数
--vertical-scroll-bars C.12 その他のディスプレーオプション
--visit C.1 動作引数
--xrm D.1 Xリソース
-bd C.7 ウィンドウカラーオプション
-bg C.7 ウィンドウカラーオプション
-bw C.9 内枠ボーダーと外枠ボーダー
-chdir C.2 初期化オプション
-cr C.7 ウィンドウカラーオプション
-d C.2 初期化オプション
-D C.12 その他のディスプレーオプション
-daemon C.2 初期化オプション
-f C.1 動作引数
-fg C.7 ウィンドウカラーオプション
-fh C.8 ウィンドウのサイズと位置にたいするオプション
-fn C.6 フォント指定オプション
-fs C.8 ウィンドウのサイズと位置にたいするオプション
-fw C.8 ウィンドウのサイズと位置にたいするオプション
-g C.8 ウィンドウのサイズと位置にたいするオプション
-ib C.9 内枠ボーダーと外枠ボーダー
-l C.1 動作引数
-L C.1 動作引数
-lsp C.12 その他のディスプレーオプション
-mm C.8 ウィンドウのサイズと位置にたいするオプション
-ms C.7 ウィンドウカラーオプション
-nbc C.12 その他のディスプレーオプション
-nbi C.11 アイコン
-nsl C.2 初期化オプション
-nw C.2 初期化オプション
-q C.2 初期化オプション
-Q C.2 初期化オプション
-r C.7 ウィンドウカラーオプション
-rv C.7 ウィンドウカラーオプション
-t C.2 初期化オプション
-T C.10 フレームタイトル
-u C.2 初期化オプション
-vb C.12 その他のディスプレーオプション

Jump to:   +   -

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Command and Function Index

Jump to:   2   5  
A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
Index Entry  Section

2
2C-associate-buffer 25.16 2列編集
2C-dissociate 25.16 2列編集
2C-merge 25.16 2列編集
2C-newline 25.16 2列編集
2C-split 25.16 2列編集
2C-two-columns 25.16 2列編集

5
5x5 47 ゲーム、その他の娯楽

A
abbrev-mode 29.1 abbrevの概念
abbrev-prefix-mark 29.3 abbrev展開の制御
abort-recursive-edit 50 中止と中断
add-change-log-entry-other-window 28.3.1 変更ログコマンド
add-change-log-entry-other-window, in Diff mode 18.10 Diffモード
add-dir-local-variable 49.2.5 ディレクトリーごとのローカル変数
add-file-local-variable 49.2.4.1 ファイル変数の指定
add-file-local-variable-prop-line 49.2.4.1 ファイル変数の指定
add-global-abbrev 29.2 abbrevの定義
add-hook 49.2.2 フック
add-mode-abbrev 29.2 abbrevの定義
add-name-to-file 18.11 ファイルのコピー、命名、リネーム。
add-untranslated-filesystem G.2 テキストファイルとバイナリーファイル
animate-birthday-present 47 ゲーム、その他の娯楽
append-next-kill 12.2.3 killしたテキストの追加
append-to-buffer 12.4 テキストの追加
append-to-file 12.4 テキストの追加
append-to-register 13.2 レジスターにテキストを保存する
apply-macro-to-region-lines 17.1 基本的な使い方
appt-activate 31.10.6 アポイントメント
appt-add 31.10.6 アポイントメント
appt-delete 31.10.6 アポイントメント
apropos 10.4 Apropos(適切な)
apropos-command 10.4 Apropos(適切な)
apropos-documentation 10.4 Apropos(適切な)
apropos-local-value 10.4 Apropos(適切な)
apropos-local-variable 10.4 Apropos(適切な)
apropos-user-option 10.4 Apropos(適切な)
apropos-value 10.4 Apropos(適切な)
apropos-variable 10.4 Apropos(適切な)
ask-user-about-lock 18.3.4 同時編集からの保護
async-shell-command 38.1 単一のシェルコマンド
auto-compression-mode 18.13 圧縮ファイルへのアクセス
auto-fill-mode 25.6.1 Auto Fillモード
auto-revert-mode 18.5 自動リバートーバッファーを自動的に最新に保つ
auto-revert-tail-mode 18.5 自動リバートーバッファーを自動的に最新に保つ
auto-save-mode 18.6.2 自動保存の制御

B
back-to-indentation 24.1 インデントコマンド
backward-button 10.5 ヘルプモードのコマンド
backward-char 7.2 ポイント位置の変更
backward-delete-char-untabify 26.1 プログラミング言語のためのメジャーモード
backward-kill-sentence 25.2 センテンス
backward-kill-word 25.1 単語
backward-list 26.4.2 カッコ構造の移動
backward-page 25.4 ページ
backward-paragraph 25.3 パラグラフ
backward-sentence 25.2 センテンス
backward-sexp 26.4.1 対応が取れたカッコの式
backward-up-list 26.4.2 カッコ構造の移動
backward-word 25.1 単語
balance-windows 20.5 ウィンドウの削除とリサイズ
beginning-of-buffer 7.2 ポイント位置の変更
beginning-of-defun 26.2.2 defunの移動
beginning-of-visual-line 14.22 Visual Lineモード
bibtex-mode 25.11 TeXモード
binary-overwrite-mode 23.2 マイナーモード
blackbox 47 ゲーム、その他の娯楽
blink-cursor-mode 14.20 カーソルの表示
bookmark-delete 13.8 ブックマーク
bookmark-insert 13.8 ブックマーク
bookmark-insert-location 13.8 ブックマーク
bookmark-jump 13.8 ブックマーク
bookmark-load 13.8 ブックマーク
bookmark-save 13.8 ブックマーク
bookmark-set 13.8 ブックマーク
bookmark-set-no-overwrite 13.8 ブックマーク
bookmark-write 13.8 ブックマーク
browse-url 46.3 URLのフォロー
browse-url-at-mouse 46.3 URLのフォロー
browse-url-at-point 46.3 URLのフォロー
browse-url-of-dired-file 30.19 その他のDiredの機能
bs-customize 19.7.3 バッファーメニューのカスタマイズ
bs-show 19.7.3 バッファーメニューのカスタマイズ
bubbles 47 ゲーム、その他の娯楽
buffer-menu 19.5 複数バッファーにたいする操作
Buffer-menu-1-window 19.5 複数バッファーにたいする操作
Buffer-menu-2-window 19.5 複数バッファーにたいする操作
Buffer-menu-backup-unmark 19.5 複数バッファーにたいする操作
Buffer-menu-bury 19.5 複数バッファーにたいする操作
Buffer-menu-delete 19.5 複数バッファーにたいする操作
Buffer-menu-delete-backwards 19.5 複数バッファーにたいする操作
Buffer-menu-execute 19.5 複数バッファーにたいする操作
Buffer-menu-mark 19.5 複数バッファーにたいする操作
Buffer-menu-not-modified 19.5 複数バッファーにたいする操作
buffer-menu-other-window 19.5 複数バッファーにたいする操作
Buffer-menu-other-window 19.5 複数バッファーにたいする操作
Buffer-menu-save 19.5 複数バッファーにたいする操作
Buffer-menu-select 19.5 複数バッファーにたいする操作
Buffer-menu-switch-other-window 19.5 複数バッファーにたいする操作
Buffer-menu-this-window 19.5 複数バッファーにたいする操作
Buffer-menu-toggle-files-only 19.5 複数バッファーにたいする操作
Buffer-menu-toggle-read-only 19.5 複数バッファーにたいする操作
Buffer-menu-unmark 19.5 複数バッファーにたいする操作
Buffer-menu-unmark-all 19.5 複数バッファーにたいする操作
Buffer-menu-unmark-all-buffers 19.5 複数バッファーにたいする操作
Buffer-menu-visit-tags-table 19.5 複数バッファーにたいする操作
butterfly 47 ゲーム、その他の娯楽

C
c-backslash-region 26.12.4 Cモードのその他のコマンド
c-backward-conditional 26.12.1 Cモードの移動コマンド
c-beginning-of-defun 26.12.1 Cモードの移動コマンド
c-beginning-of-statement 26.12.1 Cモードの移動コマンド
c-context-line-break 26.12.4 Cモードのその他のコマンド
c-end-of-defun 26.12.1 Cモードの移動コマンド
c-end-of-statement 26.12.1 Cモードの移動コマンド
c-fill-paragraph 26.12.4 Cモードのその他のコマンド
c-forward-conditional 26.12.1 Cモードの移動コマンド
c-guess 26.3.5 Cのインデントのカスタマイズ
c-guess-install 26.3.5 Cのインデントのカスタマイズ
c-hungry-delete-backwards 26.12.3 Cの欲張りな削除機能
c-hungry-delete-forward 26.12.3 Cの欲張りな削除機能
c-indent-command 26.3.4 Cのインデントのためのコマンド
c-indent-defun 26.3.4 Cのインデントのためのコマンド
c-indent-exp 26.3.4 Cのインデントのためのコマンド
c-macro-expand 26.12.4 Cモードのその他のコマンド
c-mark-function 26.2.2 defunの移動
c-set-style 26.3.5 Cのインデントのカスタマイズ
c-show-syntactic-information 26.12.4 Cモードのその他のコマンド
c-toggle-auto-newline 26.12.2 エレクトリックC文字
c-toggle-electric-state 26.12.2 エレクトリックC文字
c-toggle-hungry-state 26.12.3 Cの欲張りな削除機能
c-up-conditional 26.12.1 Cモードの移動コマンド
calendar 31 カレンダーとダイアリー
calendar-astro-goto-day-number 31.9.3 他のカレンダーからの変換
calendar-astro-print-day-number 31.9.2 他のカレンダーへの変換
calendar-backward-day 31.1.1 標準的な時間間隔での移動
calendar-backward-month 31.1.1 標準的な時間間隔での移動
calendar-backward-week 31.1.1 標準的な時間間隔での移動
calendar-backward-year 31.1.1 標準的な時間間隔での移動
calendar-bahai-goto-date 31.9.3 他のカレンダーからの変換
calendar-bahai-print-date 31.9.2 他のカレンダーへの変換
calendar-beginning-of-month 31.1.2 週、月、年の開始と終了
calendar-beginning-of-week 31.1.2 週、月、年の開始と終了
calendar-beginning-of-year 31.1.2 週、月、年の開始と終了
calendar-chinese-goto-date 31.9.3 他のカレンダーからの変換
calendar-chinese-print-date 31.9.2 他のカレンダーへの変換
calendar-coptic-goto-date 31.9.3 他のカレンダーからの変換
calendar-coptic-print-date 31.9.2 他のカレンダーへの変換
calendar-count-days-region 31.3 日付のカウント
calendar-cursor-holidays 31.6 休日
calendar-end-of-month 31.1.2 週、月、年の開始と終了
calendar-end-of-week 31.1.2 週、月、年の開始と終了
calendar-end-of-year 31.1.2 週、月、年の開始と終了
calendar-ethiopic-goto-date 31.9.3 他のカレンダーからの変換
calendar-ethiopic-print-date 31.9.2 他のカレンダーへの変換
calendar-forward-day 31.1.1 標準的な時間間隔での移動
calendar-forward-month 31.1.1 標準的な時間間隔での移動
calendar-forward-week 31.1.1 標準的な時間間隔での移動
calendar-forward-year 31.1.1 標準的な時間間隔での移動
calendar-french-goto-date 31.9.3 他のカレンダーからの変換
calendar-french-print-date 31.9.2 他のカレンダーへの変換
calendar-goto-date 31.1.3 日付の指定
calendar-goto-day-of-year 31.1.3 日付の指定
calendar-goto-today 31.1.3 日付の指定
calendar-hebrew-goto-date 31.9.3 他のカレンダーからの変換
calendar-hebrew-list-yahrzeits 31.9.3 他のカレンダーからの変換
calendar-hebrew-print-date 31.9.2 他のカレンダーへの変換
calendar-islamic-goto-date 31.9.3 他のカレンダーからの変換
calendar-islamic-print-date 31.9.2 他のカレンダーへの変換
calendar-iso-goto-date 31.9.3 他のカレンダーからの変換
calendar-iso-goto-week 31.1.3 日付の指定
calendar-iso-print-date 31.9.2 他のカレンダーへの変換
calendar-julian-goto-date 31.9.3 他のカレンダーからの変換
calendar-julian-print-date 31.9.2 他のカレンダーへの変換
calendar-list-holidays 31.6 休日
calendar-lunar-phases 31.8 月の位相
calendar-mark-holidays 31.6 休日
calendar-mark-today 31.13.1 カレンダーのカスタマイズ
calendar-mayan-goto-long-count-date 31.13.3 マヤ暦からの変換
calendar-mayan-next-calendar-round-date 31.13.3 マヤ暦からの変換
calendar-mayan-next-haab-date 31.13.3 マヤ暦からの変換
calendar-mayan-next-tzolkin-date 31.13.3 マヤ暦からの変換
calendar-mayan-previous-haab-date 31.13.3 マヤ暦からの変換
calendar-mayan-previous-tzolkin-date 31.13.3 マヤ暦からの変換
calendar-mayan-print-date 31.9.2 他のカレンダーへの変換
calendar-other-month 31.1.3 日付の指定
calendar-persian-goto-date 31.9.3 他のカレンダーからの変換
calendar-persian-print-date 31.9.2 他のカレンダーへの変換
calendar-print-day-of-year 31.4 その他のカレンダーコマンド
calendar-print-other-dates 31.9.2 他のカレンダーへの変換
calendar-redraw 31.4 その他のカレンダーコマンド
calendar-scroll-left 31.2 カレンダーでのスクロール
calendar-scroll-left-three-months 31.2 カレンダーでのスクロール
calendar-scroll-right 31.2 カレンダーでのスクロール
calendar-scroll-right-three-months 31.2 カレンダーでのスクロール
calendar-set-date-style 31.10.3 日付のフォーマット
calendar-star-date 31.13.1 カレンダーのカスタマイズ
calendar-sunrise-sunset 31.7 日の出と日の入りの時刻
calendar-unmark 31.6 休日
capitalize-word 25.7 大文字小文字変換コマンド
cd 18.1 ファイルの名前
center-line 25.6.2 明示的なフィルコマンド
change-log-goto-source 28.3.1 変更ログコマンド
change-log-merge 28.3.1 変更ログコマンド
change-log-mode 28.3.1 変更ログコマンド
check-parens 26.4 カッコに付随する編集のためのコマンド
choose-completion 8.4.2 補完コマンド
clean-buffer-list 19.4 バッファーのkill
clear-rectangle 12.5 矩形領域(Rectangles)
clipboard-kill-region 12.3.1 クリップボードを使う
clipboard-kill-ring-save 12.3.1 クリップボードを使う
clipboard-yank 12.3.1 クリップボードを使う
clone-indirect-buffer 19.6 インダイレクトバッファー
clone-indirect-buffer-other-window 19.6 インダイレクトバッファー
column-number-mode 14.18 モードラインのオプション
comint-bol-or-process-mark 38.3 Shellモード
comint-continue-subjob 38.3 Shellモード
comint-copy-old-input 38.5.2 Shellヒストリーのコピー
comint-delchar-or-maybe-eof 38.3 Shellモード
comint-delete-output 38.3 Shellモード
comint-dynamic-list-filename… 38.3 Shellモード
comint-dynamic-list-input-ring 38.5.1 Shellヒストリーリング
comint-get-next-from-history 38.5.1 Shellヒストリーリング
comint-history-isearch-backward-regexp 38.5.1 Shellヒストリーリング
comint-insert-previous-argument 38.5.1 Shellヒストリーリング
comint-interrupt-subjob 38.3 Shellモード
comint-kill-input 38.3 Shellモード
comint-magic-space 38.5.3 Shellヒストリーの参照
comint-next-input 38.5.1 Shellヒストリーリング
comint-next-prompt 38.5.2 Shellヒストリーのコピー
comint-previous-input 38.5.1 Shellヒストリーリング
comint-previous-prompt 38.5.2 Shellヒストリーのコピー
comint-quit-subjob 38.3 Shellモード
comint-run 38.3 Shellモード
comint-send-input 38.3 Shellモード
comint-send-invisible 38.3 Shellモード
comint-show-maximum-output 38.3 Shellモード
comint-show-output 38.3 Shellモード
comint-stop-subjob 38.3 Shellモード
comint-strip-ctrl-m 38.3 Shellモード
comint-truncate-buffer 38.3 Shellモード
comint-write-output 38.3 Shellモード
comment-dwim 26.5.1 コメントコマンド
comment-indent-new-line 26.5.2 複数行のコメント
comment-kill 26.5.1 コメントコマンド
comment-line 26.5.1 コメントコマンド
comment-region 26.5.1 コメントコマンド
comment-set-column 26.5.3 コメントを制御するオプション
compare-windows 18.9 ファイルの比較
compilation-next-error 27.2 Compilationモード
compilation-next-file 27.2 Compilationモード
compilation-previous-error 27.2 Compilationモード
compilation-previous-file 27.2 Compilationモード
compile 27.1 Emacs下でのコンパイルの実行
compile (MS-DOS) G.12.7 MS-DOSでのサブプロセス
compile-goto-error 27.2 Compilationモード
completion-at-point, in programming language modes 26.8 シンボル名の補完
completion-at-point, in Shell Mode 38.3 Shellモード
compose-mail 32 メールの送信
compose-mail-other-frame 32 メールの送信
compose-mail-other-window 32 メールの送信
connection-local-set-profile-variables 49.2.6 ▼接続ごとのローカル変数
connection-local-set-profiles 49.2.6 ▼接続ごとのローカル変数
copy-dir-locals-to-file-locals 49.2.4.1 ファイル変数の指定
copy-dir-locals-to-file-locals-prop-line 49.2.4.1 ファイル変数の指定
copy-directory 18.11 ファイルのコピー、命名、リネーム。
copy-file 18.11 ファイルのコピー、命名、リネーム。
copy-file-locals-to-dir-locals 49.2.5 ディレクトリーごとのローカル変数
copy-rectangle-as-kill 12.5 矩形領域(Rectangles)
copy-rectangle-to-register 13.3 レジスターに矩形領域を保存する
copy-to-buffer 12.4 テキストの追加
copy-to-register 13.2 レジスターにテキストを保存する
count-lines-page 25.4 ページ
count-words 7.9 カーソル位置の情報
count-words-region 7.9 カーソル位置の情報
cpp-highlight-buffer 26.12.4 Cモードのその他のコマンド
create-fontset-from-fontset-spec 22.14 フォントセットの定義
cua-mode 12.6 CUAバインド
custom-prompt-customize-unsaved-options 49.1.4 カスタマイズの保存
Custom-save 49.1.3 変数の変更
Custom-set 49.1.3 変数の変更
customize 49.1 Easy Customizationインターフェース
customize-apropos 49.1.6 特定のアイテムのカスタマイズ
customize-browse 49.1.2 セッティングのブラウズと検索
customize-changed 49.1.6 特定のアイテムのカスタマイズ
customize-create-theme 49.1.8 カスタムテーマの作成
customize-face 49.1.6 特定のアイテムのカスタマイズ
customize-group 49.1.6 特定のアイテムのカスタマイズ
customize-option 49.1.6 特定のアイテムのカスタマイズ
customize-saved 49.1.6 特定のアイテムのカスタマイズ
customize-themes 49.1.7 カスタムテーマ
customize-unsaved 49.1.6 特定のアイテムのカスタマイズ
cwarn-mode 26.12.4 Cモードのその他のコマンド
cycle-spacing 12.1.1 削除

D
dabbrev-completion 29.6 動的abbrev展開
dabbrev-expand 29.6 動的abbrev展開
dbx 27.6.1 GUDの開始
debug_print 52.4 バグレポートのためのチェックリスト
decipher 47 ゲーム、その他の娯楽
default-value 49.2.3 ローカル変数
define-abbrevs 29.5 abbrevの保存
define-global-abbrev 29.2 abbrevの定義
define-key 49.3.6 initファイル内でのキーのリバインド
define-mode-abbrev 29.2 abbrevの定義
delete-backward-char 12.1.1 削除
delete-blank-lines 7.7 空行
delete-char 12.1.1 削除
delete-dir-local-variable 49.2.5 ディレクトリーごとのローカル変数
delete-duplicate-lines 12.1.1 削除
delete-file 18.12 その他のファイル操作
delete-file-local-variable 49.2.4.1 ファイル変数の指定
delete-file-local-variable-prop-line 49.2.4.1 ファイル変数の指定
delete-frame 21.7 フレームコマンド
delete-horizontal-space 12.1.1 削除
delete-indentation 24.1 インデントコマンド
delete-other-frames 21.7 フレームコマンド
delete-other-windows 20.5 ウィンドウの削除とリサイズ
delete-rectangle 12.5 矩形領域(Rectangles)
delete-selection-mode 11.3 リージョンを操作する
delete-trailing-whitespace 14.16 不要なスペース
delete-whitespace-rectangle 12.5 矩形領域(Rectangles)
delete-window 20.5 ウィンドウの削除とリサイズ
describe-bindings 10.8 その他のヘルプコマンド
describe-categories 15.7 正規表現でのバックスラッシュ
describe-char 22.1 国際化文字セットのイントロダクション
describe-character-set 22.18 文字セット
describe-coding-system 22.5 コーディングシステム
describe-copying 10.9 ヘルプファイル
describe-distribution 10.9 ヘルプファイル
describe-fontset 22.13 フォントセット
describe-function 10.3 コマンドと変数名のヘルプ
describe-gnu-project 10.9 ヘルプファイル
describe-input-method 22.4 インプットメソッドの選択
describe-key 10.2 キーのドキュメント
describe-key-briefly 10.2 キーのドキュメント
describe-language-environment 22.2 言語環境
describe-mode 10.8 その他のヘルプコマンド
describe-no-warranty 10.9 ヘルプファイル
describe-package 10.6 パッケージのキーワード検索
describe-prefix-bindings 10.8 その他のヘルプコマンド
describe-symbol 10.3 コマンドと変数名のヘルプ
describe-syntax 10.8 その他のヘルプコマンド
describe-text-properties 25.14.3 フォーマット情報の編集
describe-theme 49.1.7 カスタムテーマ
describe-variable 10.3 コマンドと変数名のヘルプ
desktop-change-dir 44 Emacsセッションの保存
desktop-clear 44 Emacsセッションの保存
desktop-revert 44 Emacsセッションの保存
desktop-save 44 Emacsセッションの保存
diary 31.10.2 ダイアリーの表示
diary-anniversary 31.10.5 特別なダイアリーエントリー
diary-anniversary, and sexp diary entries 31.13.10 sexpエントリーとFancy Diary表示
diary-astro-day-number 31.13.10 sexpエントリーとFancy Diary表示
diary-bahai-date 31.13.10 sexpエントリーとFancy Diary表示
diary-bahai-insert-entry 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-bahai-insert-monthly-entry 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-bahai-insert-yearly-entry 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-bahai-list-entries 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-bahai-mark-entries 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-block 31.10.5 特別なダイアリーエントリー
diary-chinese-date 31.13.10 sexpエントリーとFancy Diary表示
diary-chinese-insert-anniversary-entry 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-chinese-insert-entry 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-chinese-insert-monthly-entry 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-chinese-insert-yearly-entry 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-chinese-list-entries 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-chinese-mark-entries 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-coptic-date 31.13.10 sexpエントリーとFancy Diary表示
diary-cyclic 31.10.5 特別なダイアリーエントリー
diary-cyclic, and sexp diary entries 31.13.10 sexpエントリーとFancy Diary表示
diary-date 31.13.10 sexpエントリーとFancy Diary表示
diary-day-of-year 31.13.10 sexpエントリーとFancy Diary表示
diary-ethiopic-date 31.13.10 sexpエントリーとFancy Diary表示
diary-fancy-display 31.13.8 ダイアリーの表示
diary-float 31.10.5 特別なダイアリーエントリー
diary-float, and sexp diary entries 31.13.10 sexpエントリーとFancy Diary表示
diary-french-date 31.13.10 sexpエントリーとFancy Diary表示
diary-hebrew-birthday 31.13.10 sexpエントリーとFancy Diary表示
diary-hebrew-date 31.13.10 sexpエントリーとFancy Diary表示
diary-hebrew-insert-entry 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-hebrew-insert-monthly-entry 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-hebrew-insert-yearly-entry 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-hebrew-list-entries 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-hebrew-mark-entries 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-hebrew-omer 31.13.10 sexpエントリーとFancy Diary表示
diary-hebrew-parasha 31.13.10 sexpエントリーとFancy Diary表示
diary-hebrew-rosh-hodesh 31.13.10 sexpエントリーとFancy Diary表示
diary-hebrew-sabbath-candles 31.13.10 sexpエントリーとFancy Diary表示
diary-hebrew-yahrzeit 31.13.10 sexpエントリーとFancy Diary表示
diary-include-other-diary-files 31.13.9 Fancy Diary表示
diary-insert-anniversary-entry 31.10.5 特別なダイアリーエントリー
diary-insert-block-entry 31.10.5 特別なダイアリーエントリー
diary-insert-cyclic-entry 31.10.5 特別なダイアリーエントリー
diary-insert-entry 31.10.4 ダイアリーに追加するコマンド
diary-insert-monthly-entry 31.10.4 ダイアリーに追加するコマンド
diary-insert-weekly-entry 31.10.4 ダイアリーに追加するコマンド
diary-insert-yearly-entry 31.10.4 ダイアリーに追加するコマンド
diary-islamic-date 31.13.10 sexpエントリーとFancy Diary表示
diary-islamic-insert-entry 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-islamic-insert-monthly-entry 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-islamic-insert-yearly-entry 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-islamic-list-entries 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-islamic-mark-entries 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-iso-date 31.13.10 sexpエントリーとFancy Diary表示
diary-julian-date 31.13.10 sexpエントリーとFancy Diary表示
diary-lunar-phases 31.13.10 sexpエントリーとFancy Diary表示
diary-mail-entries 31.10.2 ダイアリーの表示
diary-mark-entries 31.10.2 ダイアリーの表示
diary-mark-included-diary-files 31.13.9 Fancy Diary表示
diary-mayan-date 31.13.10 sexpエントリーとFancy Diary表示
diary-persian-date 31.13.10 sexpエントリーとFancy Diary表示
diary-print-entries 31.13.8 ダイアリーの表示
diary-remind 31.13.10 sexpエントリーとFancy Diary表示
diary-show-all-entries 31.10.2 ダイアリーの表示
diary-simple-display 31.13.8 ダイアリーの表示
diary-sort-entries 31.13.9 Fancy Diary表示
diary-sunrise-sunset 31.13.10 sexpエントリーとFancy Diary表示
diary-view-entries 31.10.2 ダイアリーの表示
diff 18.9 ファイルの比較
diff-add-change-log-entries-other-window 18.10 Diffモード
diff-apply-hunk 18.10 Diffモード
diff-backup 18.9 ファイルの比較
diff-buffer-with-file 18.9 ファイルの比較
diff-buffers 18.9 ファイルの比較
diff-context->unified 18.10 Diffモード
diff-delete-trailing-whitespace 18.10 Diffモード
diff-ediff-patch 18.10 Diffモード
diff-file-kill 18.10 Diffモード
diff-file-next 18.10 Diffモード
diff-file-prev 18.10 Diffモード
diff-goto-source 18.10 Diffモード
diff-hunk-kill 18.10 Diffモード
diff-hunk-next 18.10 Diffモード
diff-hunk-prev 18.10 Diffモード
diff-ignore-whitespace-hunk 18.10 Diffモード
diff-mode 18.10 Diffモード
diff-refine-hunk 18.10 Diffモード
diff-restrict-view 18.10 Diffモード
diff-reverse-direction 18.10 Diffモード
diff-split-hunk 18.10 Diffモード
diff-unified->context 18.10 Diffモード
digit-argument 7.10 数引数
dir-locals-set-class-variables 49.2.5 ディレクトリーごとのローカル変数
dir-locals-set-directory-class 49.2.5 ディレクトリーごとのローカル変数
dired 30.1 Diredの起動
dired-at-point 46.5 ポイント位置のファイルやURLを開く
dired-change-marks 30.6 Diredでのマークとフラグ
dired-clean-directory 30.4 大量のファイルに一度にフラグをつける
dired-compare-directories 30.19 その他のDiredの機能
dired-copy-filename-as-kill 30.19 その他のDiredの機能
dired-create-directory 30.19 その他のDiredの機能
dired-create-empty-file 30.19 その他のDiredの機能
dired-diff 30.10 Diredでのファイル比較
dired-display-file 30.5 Diredのファイルをvisitする
dired-do-byte-compile 30.7 ファイルにたいする操作
dired-do-chgrp 30.7 ファイルにたいする操作
dired-do-chmod 30.7 ファイルにたいする操作
dired-do-chown 30.7 ファイルにたいする操作
dired-do-compress 30.7 ファイルにたいする操作
dired-do-compress-to 30.7 ファイルにたいする操作
dired-do-copy 30.7 ファイルにたいする操作
dired-do-copy-regexp 30.9 Diredでのファイル名の変更
dired-do-delete 30.7 ファイルにたいする操作
dired-do-find-regexp 30.7 ファイルにたいする操作
dired-do-find-regexp-and-replace 30.7 ファイルにたいする操作
dired-do-flagged-delete 30.3 Diredでのファイルの削除について
dired-do-hardlink 30.7 ファイルにたいする操作
dired-do-hardlink-regexp 30.9 Diredでのファイル名の変更
dired-do-isearch 30.19 その他のDiredの機能
dired-do-isearch-regexp 30.19 その他のDiredの機能
dired-do-kill-lines 30.15 Diredバッファーの更新
dired-do-load 30.7 ファイルにたいする操作
dired-do-print 30.7 ファイルにたいする操作
dired-do-redisplay 30.15 Diredバッファーの更新
dired-do-rename 30.7 ファイルにたいする操作
dired-do-rename-regexp 30.9 Diredでのファイル名の変更
dired-do-shell-command 30.8 Diredでのシェルコマンド
dired-do-symlink 30.7 ファイルにたいする操作
dired-do-symlink-regexp 30.9 Diredでのファイル名の変更
dired-do-touch 30.7 ファイルにたいする操作
dired-downcase 30.9 Diredでのファイル名の変更
dired-find-file 30.5 Diredのファイルをvisitする
dired-find-file-other-window 30.5 Diredのファイルをvisitする
dired-flag-auto-save-files 30.4 大量のファイルに一度にフラグをつける
dired-flag-backup-files 30.4 大量のファイルに一度にフラグをつける
dired-flag-file-deletion 30.3 Diredでのファイルの削除について
dired-flag-files-regexp 30.4 大量のファイルに一度にフラグをつける
dired-flag-garbage-files 30.4 大量のファイルに一度にフラグをつける
dired-goto-file 30.2 Diredバッファーでの移動
dired-hide-all 30.14 サブディレクトリーを隠す
dired-hide-details-mode 30.19 その他のDiredの機能
dired-hide-subdir 30.14 サブディレクトリーを隠す
dired-isearch-filenames 30.2 Diredバッファーでの移動
dired-isearch-filenames-regexp 30.2 Diredバッファーでの移動
dired-mark 30.6 Diredでのマークとフラグ
dired-mark-directories 30.6 Diredでのマークとフラグ
dired-mark-executables 30.6 Diredでのマークとフラグ
dired-mark-files-containing-regexp 30.6 Diredでのマークとフラグ
dired-mark-files-regexp 30.6 Diredでのマークとフラグ
dired-mark-subdir-files 30.6 Diredでのマークとフラグ
dired-mark-symlinks 30.6 Diredでのマークとフラグ
dired-maybe-insert-subdir 30.11 Diredでのサブディレクトリー
dired-mouse-find-file-other-window 30.5 Diredのファイルをvisitする
dired-next-dirline 30.13 サブディレクトリー間の移動
dired-next-line 30.2 Diredバッファーでの移動
dired-next-marked-file 30.6 Diredでのマークとフラグ
dired-next-subdir 30.13 サブディレクトリー間の移動
dired-number-of-marked-files 30.6 Diredでのマークとフラグ
dired-other-frame 30.1 Diredの起動
dired-other-window 30.1 Diredの起動
dired-prev-dirline 30.13 サブディレクトリー間の移動
dired-prev-marked-file 30.6 Diredでのマークとフラグ
dired-prev-subdir 30.13 サブディレクトリー間の移動
dired-previous-line 30.2 Diredバッファーでの移動
dired-sort-toggle-or-edit 30.15 Diredバッファーの更新
dired-toggle-marks 30.6 Diredでのマークとフラグ
dired-tree-down 30.13 サブディレクトリー間の移動
dired-tree-up 30.13 サブディレクトリー間の移動
dired-undo 30.6 Diredでのマークとフラグ
dired-unmark 30.6 Diredでのマークとフラグ
dired-unmark-all-files 30.6 Diredでのマークとフラグ
dired-unmark-all-marks 30.6 Diredでのマークとフラグ
dired-unmark-backward 30.6 Diredでのマークとフラグ
dired-up-directory 30.5 Diredのファイルをvisitする
dired-upcase 30.9 Diredでのファイル名の変更
dired-view-file 30.5 Diredのファイルをvisitする
dirs 38.6 ディレクトリーの追跡
dirtrack-mode 38.6 ディレクトリーの追跡
disable-command 49.3.11 コマンドの無効化
disable-theme 49.1.7 カスタムテーマ
display-battery-mode 14.18 モードラインのオプション
display-buffer (command) 20.4 他のウィンドウでの表示
display-buffer, detailed description 20.6.1 display-bufferが機能する方法
display-fill-column-indicator-mode 14.15 バウンダリーの表示
display-line-numbers-mode 14.23 ディスプレーのカスタマイズ
display-local-help 10.10 アクティブテキストのヘルプとツールチップ
display-time 14.18 モードラインのオプション
dissociated-press 47 ゲーム、その他の娯楽
do-auto-save 18.6.2 自動保存の制御
doc-view-clear-cache 37.4 DocViewの変換
doc-view-enlarge 37.1 DocViewの操作
doc-view-first-page 37.1 DocViewの操作
doc-view-goto-page 37.1 DocViewの操作
doc-view-kill-proc 37.4 DocViewの変換
doc-view-kill-proc-and-buffer 37.4 DocViewの変換
doc-view-last-page 37.1 DocViewの操作
doc-view-minor-mode 37 ドキュメントの閲覧
doc-view-mode 37 ドキュメントの閲覧
doc-view-next-page 37.1 DocViewの操作
doc-view-open-text 37 ドキュメントの閲覧
doc-view-previous-page 37.1 DocViewの操作
doc-view-reset-slice 37.3 DocViewのスライス
doc-view-scroll-down-or-previous-page 37.1 DocViewの操作
doc-view-scroll-up-or-next-page 37.1 DocViewの操作
doc-view-search 37.2 DocViewの検索
doc-view-search-backward 37.2 DocViewの検索
doc-view-set-slice 37.3 DocViewのスライス
doc-view-set-slice-using-mouse 37.3 DocViewのスライス
doc-view-show-tooltip 37.2 DocViewの検索
doc-view-shrink 37.1 DocViewの操作
doc-view-toggle-display 37 ドキュメントの閲覧
doctex-mode 25.11 TeXモード
doctor 47 ゲーム、その他の娯楽
dos-mode25 G.12.3 MS-DOSでの表示
dos-mode4350 G.12.3 MS-DOSでの表示
down-list 26.4.2 カッコ構造の移動
downcase-region 25.7 大文字小文字変換コマンド
downcase-word 25.7 大文字小文字変換コマンド
dunnet 47 ゲーム、その他の娯楽

E
edit-abbrevs 29.4 abbrevのテストと編集
edit-kbd-macro 17.6 キーボードマクロの編集
edit-tab-stops 24.2 タブストップ
eldoc-mode 26.6.3 Emacs Lispドキュメントの照会
electric-indent-mode 24.4 インデントの便利な機能
electric-layout-mode 26.11 プログラムを編集するための他の便利な機能
electric-pair-mode 26.4.3 マッチするカッコ
electric-quote-mode 25.5 クォーテーションマーク
emacs-lisp-mode 27.9 Emacs Lisp式の評価
emacs-version 52.4 バグレポートのためのチェックリスト
emerge-auto-advance 28.6.2 Emergeのサブモード
emerge-buffers 28.6.1 Emergeの概要
emerge-buffers-with-ancestor 28.6.1 Emergeの概要
emerge-files 28.6.1 Emergeの概要
emerge-files-with-ancestor 28.6.1 Emergeの概要
emerge-skip-prefers 28.6.2 Emergeのサブモード
enable-command 49.3.11 コマンドの無効化
enable-theme 49.1.7 カスタムテーマ
end-of-buffer 7.2 ポイント位置の変更
end-of-defun 26.2.2 defunの移動
end-of-visual-line 14.22 Visual Lineモード
enlarge-window 20.5 ウィンドウの削除とリサイズ
enlarge-window-horizontally 20.5 ウィンドウの削除とリサイズ
enriched-mode 25.14.1 Enrichedモード
epa-dired-do-decrypt 30.7 ファイルにたいする操作
epa-dired-do-encrypt 30.7 ファイルにたいする操作
epa-dired-do-sign 30.7 ファイルにたいする操作
epa-dired-do-verify 30.7 ファイルにたいする操作
eval-buffer 27.9 Emacs Lisp式の評価
eval-defun 27.9 Emacs Lisp式の評価
eval-expression 27.9 Emacs Lisp式の評価
eval-last-sexp 27.9 Emacs Lisp式の評価
eval-print-last-sexp 27.10 Lisp Interactionバッファー
eval-region 27.9 Emacs Lisp式の評価
eww 46.1 EWWによるウェブブラウズ
eww-open-file 46.1 EWWによるウェブブラウズ
eww-search-words 15.3 単語検索
exchange-point-and-mark 11.1 マークのセット
exchange-point-and-mark, in rectangle-mark-mode 12.5 矩形領域(Rectangles)
execute-extended-command 9 名前を指定してコマンドを実行する
exit-calendar 31.4 その他のカレンダーコマンド
exit-recursive-edit 45 再帰編集レベル
expand-abbrev 29.3 abbrev展開の制御
expand-region-abbrevs 29.3 abbrev展開の制御

F
f90-beginning-of-block 26.14.1 移動コマンド
f90-end-of-block 26.14.1 移動コマンド
f90-mode 26.14 Fortranモード
f90-next-block 26.14.1 移動コマンド
f90-next-statement 26.14.1 移動コマンド
f90-previous-block 26.14.1 移動コマンド
f90-previous-statement 26.14.1 移動コマンド
facemenu-remove-all 25.14.3 フォーマット情報の編集
facemenu-remove-face-props 25.14.3 フォーマット情報の編集
facemenu-set-background 25.14.4 Enrichedテキストのフェイス
facemenu-set-bold 25.14.4 Enrichedテキストのフェイス
facemenu-set-bold-italic 25.14.4 Enrichedテキストのフェイス
facemenu-set-default 25.14.4 Enrichedテキストのフェイス
facemenu-set-face 25.14.4 Enrichedテキストのフェイス
facemenu-set-foreground 25.14.4 Enrichedテキストのフェイス
facemenu-set-italic 25.14.4 Enrichedテキストのフェイス
facemenu-set-underline 25.14.4 Enrichedテキストのフェイス
ff-find-related-file 26.12.4 Cモードのその他のコマンド
ffap 46.5 ポイント位置のファイルやURLを開く
ffap-menu 46.5 ポイント位置のファイルやURLを開く
ffap-mode 46.5 ポイント位置のファイルやURLを開く
ffap-next 46.5 ポイント位置のファイルやURLを開く
fido-mode 19.7.2 素早いミニバッファーの選択
file-cache-add-directory 18.17 ファイル名キャッシュ
file-cache-minibuffer-complete 18.17 ファイル名キャッシュ
file-name-shadow-mode 8.2 ミニバッファーでのファイル名
fileloop-continue 28.4.1.3 識別子の検索と置換
filesets-add-buffer 18.20 ファイルセット
filesets-init 18.20 ファイルセット
filesets-remove-buffer 18.20 ファイルセット
fill-individual-paragraphs 25.6.3 フィルプレフィクス
fill-nonuniform-paragraphs 25.6.3 フィルプレフィクス
fill-paragraph 25.6.2 明示的なフィルコマンド
fill-region 25.6.2 明示的なフィルコマンド
fill-region-as-paragraph 25.6.2 明示的なフィルコマンド
find-alternate-file 18.2 ファイルのvisit(訪問)
find-dired 30.16 Diredとfind
find-file 18.2 ファイルのvisit(訪問)
find-file-at-point 46.5 ポイント位置のファイルやURLを開く
find-file-literally 18.2 ファイルのvisit(訪問)
find-file-other-frame 18.2 ファイルのvisit(訪問)
find-file-other-window 18.2 ファイルのvisit(訪問)
find-file-read-only 18.2 ファイルのvisit(訪問)
find-file-read-only-other-frame 21.6 フレームの作成
find-grep 27.4 Emacs下でのGrepによる検索
find-grep-dired 30.16 Diredとfind
find-name-dired 30.16 Diredとfind
find-tag-other-window 20.4 他のウィンドウでの表示
finder-by-keyword 10.6 パッケージのキーワード検索
flush-lines 15.11 その他の検索およびループコマンド
flyspell-auto-correct-word 16.4 スペルのチェックと訂正
flyspell-correct-word 16.4 スペルのチェックと訂正
flyspell-correct-word-before-point 16.4 スペルのチェックと訂正
flyspell-mode 16.4 スペルのチェックと訂正
flyspell-prog-mode 16.4 スペルのチェックと訂正
foldout-exit-fold 25.9.5 折り畳み編集
foldout-zoom-subtree 25.9.5 折り畳み編集
follow-mode 14.7 Followモード
font-lock-add-keywords 14.12 Font Lockモード
font-lock-mode 14.12 Font Lockモード
font-lock-remove-keywords 14.12 Font Lockモード
format-decode-buffer 25.14.1 Enrichedモード
fortran-beginning-of-block 26.14.1 移動コマンド
fortran-column-ruler 26.14.5 Fortranでの列のチェック
fortran-comment-region 26.14.3 Fortranのコメント
fortran-end-of-block 26.14.1 移動コマンド
fortran-indent-subprogram 26.14.2.1 Fortranのインデントおよびフィルコマンド
fortran-join-line 26.14.2.1 Fortranのインデントおよびフィルコマンド
fortran-mode 26.14 Fortranモード
fortran-next-statement 26.14.1 移動コマンド
fortran-previous-statement 26.14.1 移動コマンド
fortran-split-line 26.14.2.1 Fortranのインデントおよびフィルコマンド
fortran-strip-sequence-nos 26.14.5 Fortranでの列のチェック
fortran-window-create 26.14.5 Fortranでの列のチェック
fortran-window-create-momentarily 26.14.5 Fortranでの列のチェック
fortune-to-signature 32.6 アミューズメント
forward-button 10.5 ヘルプモードのコマンド
forward-char 7.2 ポイント位置の変更
forward-list 26.4.2 カッコ構造の移動
forward-page 25.4 ページ
forward-paragraph 25.3 パラグラフ
forward-sentence 25.2 センテンス
forward-sexp 26.4.1 対応が取れたカッコの式
forward-word 25.1 単語
frameset-to-register 13.4 レジスターにウィンドウ設定を保存する
fringe-mode 14.14 ウィンドウのフリンジ

G
gdb 27.6.1 GUDの開始
gdb-delete-breakpoint 27.6.5.3 Breakpointsバッファー
gdb-display-disassembly-for-thread 27.6.5.4 Threadsバッファー
gdb-display-locals-for-thread 27.6.5.4 Threadsバッファー
gdb-display-registers-for-thread 27.6.5.4 Threadsバッファー
gdb-display-stack-for-thread 27.6.5.4 Threadsバッファー
gdb-edit-value 27.6.5.7 ウォッチ式
gdb-frames-select 27.6.5.5 Stackバッファー
gdb-goto-breakpoint 27.6.5.3 Breakpointsバッファー
gdb-many-windows 27.6.5.1 GDBのユーザーインターフェースのレイアウト
gdb-restore-windows 27.6.5.1 GDBのユーザーインターフェースのレイアウト
gdb-select-thread 27.6.5.4 Threadsバッファー
gdb-toggle-breakpoint 27.6.5.3 Breakpointsバッファー
gdb-var-delete 27.6.5.7 ウォッチ式
getenv C.4 環境変数
global-auto-revert-mode 18.5 自動リバートーバッファーを自動的に最新に保つ
global-cwarn-mode 26.12.4 Cモードのその他のコマンド
global-display-fill-column-indicator-mode 14.15 バウンダリーの表示
global-display-line-numbers-mode 14.23 ディスプレーのカスタマイズ
global-eldoc-mode 26.6.3 Emacs Lispドキュメントの照会
global-font-lock-mode 14.12 Font Lockモード
global-hl-line-mode 14.20 カーソルの表示
global-set-key 49.3.5 対話的なキーバインディングの変更
global-so-long-mode 51.9 長い行
global-tab-line-mode 20.8 ウィンドウのタブライン
global-unset-key 49.3.5 対話的なキーバインディングの変更
global-visual-line-mode 14.22 Visual Lineモード
global-whitespace-mode 14.16 不要なスペース
global-whitespace-toggle-options 14.16 不要なスペース
gnus 34.2 Gnusを起動したとき
gnus-group-exit 34.3 Gnus Groupバッファーの使用
gnus-group-kill-group 34.3 Gnus Groupバッファーの使用
gnus-group-list-all-groups 34.3 Gnus Groupバッファーの使用
gnus-group-list-groups 34.3 Gnus Groupバッファーの使用
gnus-group-list-killed 34.3 Gnus Groupバッファーの使用
gnus-group-list-zombies 34.3 Gnus Groupバッファーの使用
gnus-group-next-unread-group 34.3 Gnus Groupバッファーの使用
gnus-group-prev-unread-group 34.3 Gnus Groupバッファーの使用
gnus-group-read-group 34.3 Gnus Groupバッファーの使用
gnus-group-unsubscribe-current-group 34.3 Gnus Groupバッファーの使用
gnus-summary-isearch-article 34.4 Gnus Summaryバッファーの使用
gnus-summary-next-page 34.4 Gnus Summaryバッファーの使用
gnus-summary-next-unread-article 34.4 Gnus Summaryバッファーの使用
gnus-summary-prev-page 34.4 Gnus Summaryバッファーの使用
gnus-summary-prev-unread-article 34.4 Gnus Summaryバッファーの使用
gnus-summary-search-article-backward 34.4 Gnus Summaryバッファーの使用
gnus-summary-search-article-forward 34.4 Gnus Summaryバッファーの使用
gomoku 47 ゲーム、その他の娯楽
goto-address-at-point 46.4 URLのアクティブ化
goto-address-mode 46.4 URLのアクティブ化
goto-char 7.2 ポイント位置の変更
goto-followup-to 32.4.2 メールヘッダーの編集
goto-line 7.2 ポイント位置の変更
goto-line, with an argument 19.1 バッファーの作成と選択
goto-reply-to 32.4.2 メールヘッダーの編集
gpm-mouse-mode 21.22 テキスト端末でのマウスの使用
grep 27.4 Emacs下でのGrepによる検索
grep (MS-DOS) G.12.7 MS-DOSでのサブプロセス
grep-find 27.4 Emacs下でのGrepによる検索
grep-find-toggle-abbreviation 27.4 Emacs下でのGrepによる検索
gud-cont 27.6.3 GUDのコマンド
gud-def 27.6.4 GUDのカスタマイズ
gud-down 27.6.3 GUDのコマンド
gud-finish 27.6.3 GUDのコマンド
gud-gdb 27.6.1 GUDの開始
gud-gdb-complete-command 27.6.3 GUDのコマンド
gud-jump 27.6.3 GUDのコマンド
gud-next 27.6.3 GUDのコマンド
gud-print 27.6.3 GUDのコマンド
gud-refresh 27.6.3 GUDのコマンド
gud-remove 27.6.3 GUDのコマンド
gud-step 27.6.3 GUDのコマンド
gud-stepi 27.6.3 GUDのコマンド
gud-tbreak 27.6.3 GUDのコマンド
gud-tooltip-mode 27.6.2 デバッガーの操作
gud-until 27.6.3 GUDのコマンド
gud-up 27.6.3 GUDのコマンド
gud-watch 27.6.5.7 ウォッチ式
guiler 27.6.1 GUDの開始

H
handwrite 40.1 PostScriptのハードコピー
hanoi 47 ゲーム、その他の娯楽
help-command 10 ヘルプ
help-follow 10.5 ヘルプモードのコマンド
help-for-help 10 ヘルプ
help-go-back 10.5 ヘルプモードのコマンド
help-go-forward 10.5 ヘルプモードのコマンド
help-with-tutorial 7 基本的な編集コマンド
hi-lock-find-patterns 14.13 インタラクティブなハイライト
hi-lock-mode 14.13 インタラクティブなハイライト
hi-lock-write-interactive-patterns 14.13 インタラクティブなハイライト
hide-ifdef-mode 26.12.4 Cモードのその他のコマンド
hide-sublevels 25.9.3 アウトライン表示コマンド
highlight-changes-mode 14.13 インタラクティブなハイライト
highlight-lines-matching-regexp 14.13 インタラクティブなハイライト
highlight-phrase 14.13 インタラクティブなハイライト
highlight-regexp 14.13 インタラクティブなハイライト
highlight-symbol-at-point 14.13 インタラクティブなハイライト
hl-line-mode 14.20 カーソルの表示
holidays 31.6 休日
horizontal-scroll-bar-mode 21.12 スクロールバー
how-many 15.11 その他の検索およびループコマンド
hs-hide-all 26.7 Hideshowマイナーモード
hs-hide-block 26.7 Hideshowマイナーモード
hs-hide-level 26.7 Hideshowマイナーモード
hs-minor-mode 26.7 Hideshowマイナーモード
hs-mouse-toggle-hiding 26.7 Hideshowマイナーモード
hs-show-all 26.7 Hideshowマイナーモード
hs-show-block 26.7 Hideshowマイナーモード
hs-show-region 26.7 Hideshowマイナーモード
hs-toggle-hiding 26.7 Hideshowマイナーモード
html-mode 25.12 SGMLモードとHTMLモード
htmlfontify-buffer 40 ハードコピーの印刷

I
ibuffer 19.7.3 バッファーメニューのカスタマイズ
icalendar-export-file 31.10.7 ダイアリーエントリーのインポートとエクスポート
icalendar-export-region 31.10.7 ダイアリーエントリーのインポートとエクスポート
icalendar-import-buffer 31.10.7 ダイアリーエントリーのインポートとエクスポート
icalendar-import-file 31.10.7 ダイアリーエントリーのインポートとエクスポート
icomplete-mode 19.7.2 素早いミニバッファーの選択
ielm 27.10 Lisp Interactionバッファー
image-decrease-speed 18.19 イメージファイルのvisit
image-dired-display-thumbs 30.18 Diredでのイメージとサムネイルの閲覧
image-goto-frame 18.19 イメージファイルのvisit
image-increase-speed 18.19 イメージファイルのvisit
image-mode 18.19 イメージファイルのvisit
image-mode-copy-file-name-as-kill 18.19 イメージファイルのvisit
image-mode-mark-file 18.19 イメージファイルのvisit
image-mode-unmark-file 18.19 イメージファイルのvisit
image-next-file 18.19 イメージファイルのvisit
image-next-frame 18.19 イメージファイルのvisit
image-previous-file 18.19 イメージファイルのvisit
image-previous-frame 18.19 イメージファイルのvisit
image-reset-speed 18.19 イメージファイルのvisit
image-reverse-speed 18.19 イメージファイルのvisit
image-toggle-animation 18.19 イメージファイルのvisit
image-toggle-display 18.19 イメージファイルのvisit
image-transform-fit-both 18.19 イメージファイルのvisit
image-transform-reset 18.19 イメージファイルのvisit
image-transform-set-scale 18.19 イメージファイルのvisit
imenu 26.2.3 Imenuとは
imenu-add-menubar-index 26.2.3 Imenuとは
increase-left-margin 25.14.5 Enrichedテキストのインデント
increment-register 13.5 レジスターに数字を保存する
indent-code-rigidly 26.3.2 複数行のインデント
indent-for-tab-command 24 インデント
indent-line-function 26.3.1 プログラムの基本的なインデントコマンド
indent-pp-sexp 26.3.2 複数行のインデント
indent-region 24.1 インデントコマンド
indent-relative 24.1 インデントコマンド
indent-rigidly 24.1 インデントコマンド
info 10.8 その他のヘルプコマンド
Info-goto-emacs-command-node 10.3 コマンドと変数名のヘルプ
Info-goto-emacs-key-command-node 10.2 キーのドキュメント
info-lookup-file 26.6.1 Infoドキュメントの照会
info-lookup-symbol 10.8 その他のヘルプコマンド
info-other-window 10.8 その他のヘルプコマンド
insert-abbrevs 29.5 abbrevの保存
insert-char 7.1 テキストの挿入
insert-file 18.12 その他のファイル操作
insert-file-literally 18.12 その他のファイル操作
insert-kbd-macro 17.5 キーボードマクロの命名と保存
insert-register 13.2 レジスターにテキストを保存する
inverse-add-global-abbrev 29.2 abbrevの定義
inverse-add-mode-abbrev 29.2 abbrevの定義
isearch-abort 15.1.1 インクリメンタル検索の基本
isearch-backward 15.1.1 インクリメンタル検索の基本
isearch-backward-regexp 15.5 正規表現検索
isearch-cancel 15.1.1 インクリメンタル検索の基本
isearch-char-by-name 15.1.5 インクリメンタル検索の特別な入力
isearch-complete 15.1.5 インクリメンタル検索の特別な入力
isearch-del-char 15.1.3 インクリメンタル検索でのyank
isearch-delete-char 15.1.1 インクリメンタル検索の基本
isearch-edit-string 15.1.2 インクリメンタル検索の繰り返し
isearch-exit 15.1.1 インクリメンタル検索の基本
isearch-forward 15.1.1 インクリメンタル検索の基本
isearch-forward-regexp 15.5 正規表現検索
isearch-forward-symbol 15.4 シンボル検索
isearch-forward-symbol-at-point 15.4 シンボル検索
isearch-forward-word 15.3 単語検索
isearch-help-map 15.1.5 インクリメンタル検索の特別な入力
isearch-highlight-lines-matching-regexp 15.1.5 インクリメンタル検索の特別な入力
isearch-highlight-regexp 15.1.5 インクリメンタル検索の特別な入力
isearch-occur 15.1.5 インクリメンタル検索の特別な入力
isearch-query-replace 15.1.5 インクリメンタル検索の特別な入力
isearch-query-replace-regexp 15.1.5 インクリメンタル検索の特別な入力
isearch-quote-char 15.1.5 インクリメンタル検索の特別な入力
isearch-repeat-backward 15.1.2 インクリメンタル検索の繰り返し
isearch-repeat-forward 15.1.2 インクリメンタル検索の繰り返し
isearch-ring-advance 15.1.2 インクリメンタル検索の繰り返し
isearch-ring-retreat 15.1.2 インクリメンタル検索の繰り返し
isearch-toggle-case-fold 15.9 検索中のLaxマッチング
isearch-toggle-char-fold 15.9 検索中のLaxマッチング
isearch-toggle-input-method 15.1.5 インクリメンタル検索の特別な入力
isearch-toggle-invisible 15.1.5 インクリメンタル検索の特別な入力
isearch-toggle-lax-whitespace 15.9 検索中のLaxマッチング
isearch-toggle-regexp 15.1.5 インクリメンタル検索の特別な入力
isearch-toggle-specified-input-method 15.1.5 インクリメンタル検索の特別な入力
isearch-toggle-symbol 15.4 シンボル検索
isearch-toggle-word 15.3 単語検索
isearch-yank-char 15.1.3 インクリメンタル検索でのyank
isearch-yank-kill 15.1.3 インクリメンタル検索でのyank
isearch-yank-line 15.1.3 インクリメンタル検索でのyank
isearch-yank-pop 15.1.3 インクリメンタル検索でのyank
isearch-yank-symbol-or-char 15.1.3 インクリメンタル検索でのyank
isearch-yank-until-char 15.1.3 インクリメンタル検索でのyank
isearch-yank-word-or-char 15.1.3 インクリメンタル検索でのyank
isearch-yank-x-selection 15.1.3 インクリメンタル検索でのyank
iso-gtex2iso 25.11.4 TeXモード、その
iso-iso2gtex 25.11.4 TeXモード、その
iso-iso2tex 25.11.4 TeXモード、その
iso-tex2iso 25.11.4 TeXモード、その
ispell 16.4 スペルのチェックと訂正
ispell-buffer 16.4 スペルのチェックと訂正
ispell-change-dictionary 16.4 スペルのチェックと訂正
ispell-complete-word 16.4 スペルのチェックと訂正
ispell-kill-ispell 16.4 スペルのチェックと訂正
ispell-message 32.4.4 メール、その他
ispell-region 16.4 スペルのチェックと訂正
ispell-word 16.4 スペルのチェックと訂正

J
jdb 27.6.1 GUDの開始
jump-to-register 13.1 レジスターに位置を保存する
just-one-space 12.1.1 削除

K
kbd 49.3.6 initファイル内でのキーのリバインド
kbd-macro-query 17.4 変化のあるマクロの実行
keep-lines 15.11 その他の検索およびループコマンド
keyboard-escape-quit 50 中止と中断
keyboard-quit 50 中止と中断
kill-all-abbrevs 29.2 abbrevの定義
kill-buffer 19.4 バッファーのkill
kill-buffer-and-window 20.5 ウィンドウの削除とリサイズ
kill-compilation 27.1 Emacs下でのコンパイルの実行
kill-current-buffer 8.4.2 補完コマンド
kill-emacs 6 Emacsからのexit
kill-line 12.1.2 行のkill
kill-local-variable 49.2.3 ローカル変数
kill-matching-buffers 19.4 バッファーのkill
kill-rectangle 12.5 矩形領域(Rectangles)
kill-region 12.1.3 その他のkillコマンド
kill-ring-save 12.1.3 その他のkillコマンド
kill-sentence 25.2 センテンス
kill-sexp 26.4.1 対応が取れたカッコの式
kill-some-buffers 19.4 バッファーのkill
kill-whole-line 12.1.2 行のkill
kill-word 25.1 単語
kmacro-add-counter 17.3 キーボードマクロカウンター
kmacro-bind-to-key 17.5 キーボードマクロの命名と保存
kmacro-cycle-ring-next 17.2 キーボードマクロリング
kmacro-cycle-ring-previous 17.2 キーボードマクロリング
kmacro-edit-lossage 17.6 キーボードマクロの編集
kmacro-edit-macro 17.6 キーボードマクロの編集
kmacro-end-and-call-macro 17.1 基本的な使い方
kmacro-end-macro 17.1 基本的な使い方
kmacro-end-or-call-macro 17.1 基本的な使い方
kmacro-end-or-call-macro-repeat 17.2 キーボードマクロリング
kmacro-insert-counter 17.3 キーボードマクロカウンター
kmacro-name-last-macro 17.5 キーボードマクロの命名と保存
kmacro-set-counter 17.3 キーボードマクロカウンター
kmacro-set-format 17.3 キーボードマクロカウンター
kmacro-start-macro 17.1 基本的な使い方
kmacro-start-macro-or-insert-counter 17.1 基本的な使い方
kmacro-step-edit-macro 17.7 キーボードマクロのステップ編集
kmacro-to-register 13.7 キーボードマクロのレジスター

L
latex-electric-env-pair-mode 25.11.2 LaTeX編集コマンド
latex-mode 25.11 TeXモード
left-char 7.2 ポイント位置の変更
left-char, and bidirectional text 22.19 双方向の編集
left-word 7.2 ポイント位置の変更
lgrep 27.4 Emacs下でのGrepによる検索
life 47 ゲーム、その他の娯楽
line-number-mode 14.18 モードラインのオプション
lisp-eval-defun 27.11 外部Lispの実行
lisp-interaction-mode 27.10 Lisp Interactionバッファー
list-abbrevs 29.4 abbrevのテストと編集
list-bookmarks 13.8 ブックマーク
list-buffers 19.2 既存のバッファーを一覧する
list-character-sets 22.18 文字セット
list-charset-chars 22.18 文字セット
list-coding-systems 22.5 コーディングシステム
list-colors-display 14.9.1 カラー名
list-command-history 8.6 ミニバッファーでのコマンドの繰り返し
list-directory 18.8 ファイルディレクトリー
list-faces-display 14.8 テキストのフェイス
list-holidays 31.6 休日
list-input-methods 22.4 インプットメソッドの選択
list-matching-lines 15.11 その他の検索およびループコマンド
list-packages 48.1 Package Menuバッファー
list-tags 28.4.1.4 識別子の照会
load 27.8 EmacsのためのLispコードによるライブラリー
load-file 27.8 EmacsのためのLispコードによるライブラリー
load-library 27.8 EmacsのためのLispコードによるライブラリー
load-theme 49.1.7 カスタムテーマ
local-set-key 49.3.5 対話的なキーバインディングの変更
local-unset-key 49.3.5 対話的なキーバインディングの変更
locate 30.16 Diredとfind
locate-with-filter 30.16 Diredとfind
log-edit-done 28.1.4 Log Entryバッファーの機能
log-edit-generate-changelog-from-diff 28.1.4 Log Entryバッファーの機能
log-edit-insert-changelog 28.1.4 Log Entryバッファーの機能
log-edit-show-diff 28.1.4 Log Entryバッファーの機能
log-edit-show-files 28.1.4 Log Entryバッファーの機能
log-view-toggle-entry-display 28.1.7 VC Change Log
lpr-buffer 40 ハードコピーの印刷
lpr-region 40 ハードコピーの印刷
lunar-phases 31.8 月の位相

M
mail-abbrev-insert-alias 32.3 メールエイリアス
mail-add-attachment 32.4.4 メール、その他
mail-fill-yanked-message 32.4.3 メールの引用
mail-text 32.4.2 メールヘッダーの編集
make-frame-command 21.6 フレームの作成
make-frame-on-display 21.10 複数ディスプレー
make-frame-on-monitor 21.10 複数ディスプレー
make-indirect-buffer 19.6 インダイレクトバッファー
make-local-variable 49.2.3 ローカル変数
make-symbolic-link 18.11 ファイルのコピー、命名、リネーム。
make-variable-buffer-local 49.2.3 ローカル変数
man 26.6.2 man-pageの照会
mark-defun 26.2.2 defunの移動
mark-page 25.4 ページ
mark-paragraph 25.3 パラグラフ
mark-sexp 11.2 テキストオブジェクトをマークするコマンド
mark-whole-buffer 11.2 テキストオブジェクトをマークするコマンド
mark-word 11.2 テキストオブジェクトをマークするコマンド
menu-bar-mode 21.15 メニューバー
menu-bar-open 1.4 メニューバー
message-goto-bcc 32.4.2 メールヘッダーの編集
message-goto-cc 32.4.2 メールヘッダーの編集
message-goto-fcc 32.4.2 メールヘッダーの編集
message-goto-subject 32.4.2 メールヘッダーの編集
message-goto-to 32.4.2 メールヘッダーの編集
message-insert-signature 32.5 メール署名
message-send 32.4.1 メールの送信
message-send-and-exit 32.4.1 メールの送信
message-tab 32.4.2 メールヘッダーの編集
message-yank-original 32.4.3 メールの引用
message-yank-prefix 32.4.3 メールの引用
minibuffer-complete 8.4.2 補完コマンド
minibuffer-complete-and-exit 8.4.3 補完の終了
minibuffer-complete-word 8.4.2 補完コマンド
minibuffer-depth-indicate-mode 8.3 ミニバッファーでの編集
minibuffer-electric-default-mode 8.1 ミニバッファーを使う
minibuffer-inactive-mode 8.3 ミニバッファーでの編集
mml-attach-file 32.4.4 メール、その他
morse-region 47 ゲーム、その他の娯楽
mouse-avoidance-mode 21.20 マウスの回避
mouse-buffer-menu 19.7.3 バッファーメニューのカスタマイズ
mouse-save-then-kill 21.1 編集のためのマウスコマンド
mouse-secondary-save-then-kill 12.3.3 セカンダリー選択
mouse-set-point 21.1 編集のためのマウスコマンド
mouse-set-region 21.1 編集のためのマウスコマンド
mouse-set-secondary 12.3.3 セカンダリー選択
mouse-start-secondary 12.3.3 セカンダリー選択
mouse-wheel-mode 21.1 編集のためのマウスコマンド
mouse-yank-at-click 21.1 編集のためのマウスコマンド
mouse-yank-primary 21.1 編集のためのマウスコマンド
mouse-yank-secondary 12.3.3 セカンダリー選択
move-beginning-of-line 7.2 ポイント位置の変更
move-end-of-line 7.2 ポイント位置の変更
move-file-to-trash 18.12 その他のファイル操作
move-to-column 7.2 ポイント位置の変更
move-to-window-line-top-bottom 7.2 ポイント位置の変更
mpuz 47 ゲーム、その他の娯楽
msb-mode 19.7.3 バッファーメニューのカスタマイズ
msdos-set-mouse-buttons G.12.2 MS-DOSでびマウスの使用方法
multi-isearch-buffers 15.11 その他の検索およびループコマンド
multi-isearch-buffers-regexp 15.11 その他の検索およびループコマンド
multi-isearch-files 15.11 その他の検索およびループコマンド
multi-isearch-files-regexp 15.11 その他の検索およびループコマンド
multi-occur 15.11 その他の検索およびループコマンド
multi-occur-in-matching-buffers 15.11 その他の検索およびループコマンド

N
narrow-to-defun 14.5 ナローイング
narrow-to-page 14.5 ナローイング
narrow-to-region 14.5 ナローイング
nato-region 47 ゲーム、その他の娯楽
negative-argument 7.10 数引数
next-buffer 19.1 バッファーの作成と選択
next-completion 8.4.2 補完コマンド
next-error 27.2 Compilationモード
next-error-follow-minor-mode 27.2 Compilationモード
next-error-select-buffer 27.2 Compilationモード
next-history-element 8.5 ミニバッファーヒストリー
next-line 7.2 ポイント位置の変更
next-line-or-history-element 8.5 ミニバッファーヒストリー
next-logical-line 14.22 Visual Lineモード
next-matching-history-element 8.5 ミニバッファーヒストリー
next-window-any-frame 20.3 他のウィンドウの使用
normal-erase-is-backspace-mode 51.1 DELで削除できない場合
normal-mode 23.3 ファイルのモードを選択する
not-modified 18.3.1 ファイルを保存するコマンド
nroff-backward-text-line 25.13 Nroffモード
nroff-count-text-lines 25.13 Nroffモード
nroff-electric-mode 25.13 Nroffモード
nroff-forward-text-line 25.13 Nroffモード
nroff-mode 25.13 Nroffモード
ns-popup-font-panel F.2.4 フォントパネル
number-to-register 13.5 レジスターに数字を保存する
nxml-mode 25.12 SGMLモードとHTMLモード

O
occur 15.11 その他の検索およびループコマンド
open-dribble-file 52.4 バグレポートのためのチェックリスト
open-line 7.7 空行
open-rectangle 12.5 矩形領域(Rectangles)
open-termscript 52.4 バグレポートのためのチェックリスト
org-agenda 25.10.1 オーガナイザーとしてのOrg
org-agenda-file-to-front 25.10.1 オーガナイザーとしてのOrg
org-cycle 25.10 Orgモード
org-deadline 25.10.1 オーガナイザーとしてのOrg
org-export 25.10.2 オーサリングシステムとしてのOrg
org-metadown 25.10 Orgモード
org-metaleft 25.10 Orgモード
org-metaright 25.10 Orgモード
org-metaup 25.10 Orgモード
org-mode 25.10 Orgモード
org-schedule 25.10.1 オーガナイザーとしてのOrg
org-shifttab 25.10 Orgモード
org-todo 25.10.1 オーガナイザーとしてのOrg
other-frame 21.7 フレームコマンド
other-window 20.3 他のウィンドウの使用
outline-backward-same-level 25.9.2 アウトライン移動コマンド
outline-forward-same-level 25.9.2 アウトライン移動コマンド
outline-hide-body 25.9.3 アウトライン表示コマンド
outline-hide-entry 25.9.3 アウトライン表示コマンド
outline-hide-leaves 25.9.3 アウトライン表示コマンド
outline-hide-other 25.9.3 アウトライン表示コマンド
outline-hide-subtree 25.9.3 アウトライン表示コマンド
outline-minor-mode 25.9 Outlineモード
outline-mode 25.9 Outlineモード
outline-next-visible-heading 25.9.2 アウトライン移動コマンド
outline-previous-visible-heading 25.9.2 アウトライン移動コマンド
outline-show-all 25.9.3 アウトライン表示コマンド
outline-show-branches 25.9.3 アウトライン表示コマンド
outline-show-children 25.9.3 アウトライン表示コマンド
outline-show-entry 25.9.3 アウトライン表示コマンド
outline-show-subtree 25.9.3 アウトライン表示コマンド
outline-up-heading 25.9.2 アウトライン移動コマンド
overwrite-mode 23.2 マイナーモード

P
package-activate-all 48.3 パッケージのインストール
package-install 48.3 パッケージのインストール
package-install-file 48.4 パッケージのファイルとディレクトリー
package-menu-clear-filter 48.1 Package Menuバッファー
package-menu-describe-package 48.1 Package Menuバッファー
package-menu-execute 48.1 Package Menuバッファー
package-menu-filter-by-keyword 48.1 Package Menuバッファー
package-menu-filter-by-name 48.1 Package Menuバッファー
package-menu-hide-package 48.1 Package Menuバッファー
package-menu-mark-delete 48.1 Package Menuバッファー
package-menu-mark-install 48.1 Package Menuバッファー
package-menu-mark-obsolete-for-deletion 48.1 Package Menuバッファー
package-menu-mark-unmark 48.1 Package Menuバッファー
package-menu-mark-upgrades 48.1 Package Menuバッファー
package-menu-quick-help 48.1 Package Menuバッファー
package-menu-toggle-hiding 48.1 Package Menuバッファー
paragraph-indent-minor-mode 25.8 Textモード
paragraph-indent-text-mode 25.8 Textモード
pdb 27.6.1 GUDの開始
perldb 27.6.1 GUDの開始
picture-backward-clear-column 42.1 Pictureモードでの基本的な編集
picture-backward-column 42.1 Pictureモードでの基本的な編集
picture-clear-column 42.1 Pictureモードでの基本的な編集
picture-clear-line 42.1 Pictureモードでの基本的な編集
picture-clear-rectangle 42.4 Pictureモードの矩形領域コマンド
picture-clear-rectangle-to-register 42.4 Pictureモードの矩形領域コマンド
picture-forward-column 42.1 Pictureモードでの基本的な編集
picture-mode 42 ピクチャーの編集
picture-motion 42.2 挿入後の移動の制御
picture-motion-reverse 42.2 挿入後の移動の制御
picture-move-down 42.1 Pictureモードでの基本的な編集
picture-move-up 42.1 Pictureモードでの基本的な編集
picture-movement-down 42.2 挿入後の移動の制御
picture-movement-left 42.2 挿入後の移動の制御
picture-movement-ne 42.2 挿入後の移動の制御
picture-movement-nw 42.2 挿入後の移動の制御
picture-movement-right 42.2 挿入後の移動の制御
picture-movement-se 42.2 挿入後の移動の制御
picture-movement-sw 42.2 挿入後の移動の制御
picture-movement-up 42.2 挿入後の移動の制御
picture-newline 42.1 Pictureモードでの基本的な編集
picture-open-line 42.1 Pictureモードでの基本的な編集
picture-set-tab-stops 42.3 Pictureモードでのタブ
picture-tab 42.3 Pictureモードでのタブ
picture-tab-search 42.3 Pictureモードでのタブ
picture-yank-rectangle 42.4 Pictureモードの矩形領域コマンド
picture-yank-rectangle-from-register 42.4 Pictureモードの矩形領域コマンド
plain-tex-mode 25.11 TeXモード
point-to-register 13.1 レジスターに位置を保存する
pong 47 ゲーム、その他の娯楽
pop-global-mark 11.5 グローバルマークリング
pr-interface 40.3 印刷のためのパッケージ
prefer-coding-system 22.6 コーディングシステムの認識
prepend-to-buffer 12.4 テキストの追加
prepend-to-register 13.2 レジスターにテキストを保存する
prettify-symbols-mode 26.11 プログラムを編集するための他の便利な機能
previous-buffer 19.1 バッファーの作成と選択
previous-completion 8.4.2 補完コマンド
previous-history-element 8.5 ミニバッファーヒストリー
previous-line 7.2 ポイント位置の変更
previous-line-or-history-element 8.5 ミニバッファーヒストリー
previous-logical-line 14.22 Visual Lineモード
previous-matching-history-element 8.5 ミニバッファーヒストリー
print-buffer 40 ハードコピーの印刷
print-buffer (MS-DOS) G.9 MS-Windowsでの印刷
print-region 40 ハードコピーの印刷
print-region (MS-DOS) G.9 MS-Windowsでの印刷
project-find-file 28.2 プロジェクトで作業する
project-find-regexp 28.2 プロジェクトで作業する
project-query-replace-regexp 28.2 プロジェクトで作業する
project-search 28.2 プロジェクトで作業する
ps-despool 40.1 PostScriptのハードコピー
ps-print-buffer 40.1 PostScriptのハードコピー
ps-print-buffer (MS-DOS) G.9 MS-Windowsでの印刷
ps-print-buffer-with-faces 40.1 PostScriptのハードコピー
ps-print-region 40.1 PostScriptのハードコピー
ps-print-region-with-faces 40.1 PostScriptのハードコピー
ps-spool-buffer 40.1 PostScriptのハードコピー
ps-spool-buffer (MS-DOS) G.9 MS-Windowsでの印刷
ps-spool-buffer-with-faces 40.1 PostScriptのハードコピー
ps-spool-region 40.1 PostScriptのハードコピー
ps-spool-region-with-faces 40.1 PostScriptのハードコピー
pwd 18.1 ファイルの名前

Q
quail-set-keyboard-layout 22.4 インプットメソッドの選択
quail-show-key 22.4 インプットメソッドの選択
quail-translation-keymap 22.3 インプットメソッド
query-replace 15.10.4 問い合わせつき置換
query-replace-regexp 15.10.4 問い合わせつき置換
quietly-read-abbrev-file 29.5 abbrevの保存
quit-window 8.4.2 補完コマンド
quit-window 19.5 複数バッファーにたいする操作
quit-window, in Dired buffers 30.1 Diredの起動
quoted-insert 7.1 テキストの挿入

R
re-search-backward 15.5 正規表現検索
re-search-forward 15.5 正規表現検索
read-abbrev-file 29.5 abbrevの保存
read-only-mode 19.3 その他のバッファー操作
recenter 14.2 センタリング
recenter-top-bottom 14.2 センタリング
recentf-edit-list 18.18 ファイル検索の便利な機能
recentf-mode 18.18 ファイル検索の便利な機能
recentf-save-list 18.18 ファイル検索の便利な機能
recode-file-name 22.11 ファイル名にたいするコーディングシステム
recode-region 22.9 ファイルのテキストにたいするコーディングシステムの指定
recompile 27.1 Emacs下でのコンパイルの実行
recover-file 18.6.3 自動保存からのデータ復旧
recover-session 18.6.3 自動保存からのデータ復旧
rectangle 12.5 矩形領域(Rectangles)
rectangle-exchange-point-and-mark 12.5 矩形領域(Rectangles)
rectangle-mark-mode 12.5 矩形領域(Rectangles)
remove-hook 49.2.2 フック
remove-untranslated-filesystem G.2 テキストファイルとバイナリーファイル
rename-buffer 19.3 その他のバッファー操作
rename-file 18.11 ファイルのコピー、命名、リネーム。
rename-uniquely 19.3 その他のバッファー操作
repeat 7.11 コマンドの繰り返し
repeat-complex-command 8.6 ミニバッファーでのコマンドの繰り返し
replace-regexp 15.10.2 正規表現の置換
replace-string 15.10.1 無条件の置換
report-emacs-bug 52.4 バグレポートのためのチェックリスト
reposition-window 14.2 センタリング
reveal-mode 25.9.3 アウトライン表示コマンド
reverse-region 41 テキストのソート
revert-buffer 18.4 バッファーのリバート
revert-buffer (Dired) 30.15 Diredバッファーの更新
revert-buffer-with-coding-system 22.9 ファイルのテキストにたいするコーディングシステムの指定
rgrep 27.4 Emacs下でのGrepによる検索
right-char 7.2 ポイント位置の変更
right-char, and bidirectional text 22.19 双方向の編集
right-word 7.2 ポイント位置の変更
rmail 33 Rmailでメールを読む
rmail-abort-edit 33.15 メッセージの編集
rmail-add-label 33.8 ラベル
rmail-beginning-of-message 33.2 メッセージのスクロール
rmail-bury 33.1 Rmailの基本的な概念
rmail-cease-edit 33.15 メッセージの編集
rmail-continue 33.10 返信の送信
rmail-delete-backward 33.4 メッセージの削除
rmail-delete-forward 33.4 メッセージの削除
rmail-edit-current-message 33.15 メッセージの編集
rmail-end-of-message 33.2 メッセージのスクロール
rmail-epa-decrypt 33.13 メッセージの表示
rmail-expunge 33.4 メッセージの削除
rmail-expunge-and-save 33.1 Rmailの基本的な概念
rmail-first-message 33.3 メッセージ間の移動
rmail-forward 33.10 返信の送信
rmail-get-new-mail 33.6 複数のRmailファイル
rmail-input 33.6 複数のRmailファイル
rmail-kill-label 33.8 ラベル
rmail-last-message 33.3 メッセージ間の移動
rmail-mail 33.10 返信の送信
rmail-mime 33.13 メッセージの表示
rmail-mime-next-item 33.13 メッセージの表示
rmail-mime-previous-item 33.13 メッセージの表示
rmail-mime-toggle-hidden 33.13 メッセージの表示
rmail-mode 33 Rmailでメールを読む
rmail-next-labeled-message 33.8 ラベル
rmail-next-message 33.3 メッセージ間の移動
rmail-next-same-subject 33.3 メッセージ間の移動
rmail-next-undeleted-message 33.3 メッセージ間の移動
rmail-output 33.7 外部ファイルへのメッセージのコピー
rmail-output-as-seen 33.7 外部ファイルへのメッセージのコピー
rmail-output-body-to-file 33.7 外部ファイルへのメッセージのコピー
rmail-previous-labeled-message 33.8 ラベル
rmail-previous-message 33.3 メッセージ間の移動
rmail-previous-same-subject 33.3 メッセージ間の移動
rmail-previous-undeleted-message 33.3 メッセージ間の移動
rmail-quit 33.1 Rmailの基本的な概念
rmail-redecode-body 33.14 Rmailとコーディングシステム
rmail-reply 33.10 返信の送信
rmail-resend 33.10 返信の送信
rmail-retry-failure 33.10 返信の送信
rmail-search 33.3 メッセージ間の移動
rmail-show-message 33.3 メッセージ間の移動
rmail-sort-by-author 33.12 Rmailファイルのソート
rmail-sort-by-correspondent 33.12 Rmailファイルのソート
rmail-sort-by-date 33.12 Rmailファイルのソート
rmail-sort-by-labels 33.12 Rmailファイルのソート
rmail-sort-by-lines 33.12 Rmailファイルのソート
rmail-sort-by-recipient 33.12 Rmailファイルのソート
rmail-sort-by-subject 33.12 Rmailファイルのソート
rmail-summary 33.11.1 サマリーの作成
rmail-summary-bury 33.11.2 サマリーでの編集
rmail-summary-by-labels 33.11.1 サマリーの作成
rmail-summary-by-recipients 33.11.1 サマリーの作成
rmail-summary-by-regexp 33.11.1 サマリーの作成
rmail-summary-by-senders 33.11.1 サマリーの作成
rmail-summary-by-topic 33.11.1 サマリーの作成
rmail-summary-quit 33.11.2 サマリーでの編集
rmail-summary-undelete-many 33.11.2 サマリーでの編集
rmail-summary-wipe 33.11.2 サマリーでの編集
rmail-toggle-header 33.13 メッセージの表示
rmail-undelete-previous-message 33.4 メッセージの削除
rot13-other-window 33.17 Rot13メッセージを読む
run-lisp 27.11 外部Lispの実行
run-scheme 27.11 外部Lispの実行

S
save-buffer 18.3.1 ファイルを保存するコマンド
save-buffers-kill-terminal 6 Emacsからのexit
save-some-buffers 18.3.1 ファイルを保存するコマンド
scheme-mode 27.11 外部Lispの実行
scroll-bar-mode 21.12 スクロールバー
scroll-down-command 14.1 スクロール
scroll-down-line 14.1 スクロール
scroll-left 14.4 水平スクロール
scroll-other-window 20.3 他のウィンドウの使用
scroll-other-window-down 20.3 他のウィンドウの使用
scroll-right 14.4 水平スクロール
scroll-up-command 14.1 スクロール
scroll-up-line 14.1 スクロール
sdb 27.6.1 GUDの開始
search-backward 15.2 非インクリメンタル検索
search-forward 15.2 非インクリメンタル検索
select-frame-by-name 21.21 非ウィンドウ端末
serial-term 38.11 シリアル端末
server-edit 39.2 emacsclientの呼び出し
server-eval-at 39 サーバーとしてのEmacsの使用
server-generate-key 39.1 TCP Emacs server
server-start 39 サーバーとしてのEmacsの使用
set-buffer-file-coding-system 22.9 ファイルのテキストにたいするコーディングシステムの指定
set-buffer-process-coding-system 22.10 プロセス間通信にたいするコーディングシステム
set-face-background 14.9.2 RGBトリプレット
set-face-foreground 14.9.2 RGBトリプレット
set-file-modes 18.12 その他のファイル操作
set-file-name-coding-system 22.11 ファイル名にたいするコーディングシステム
set-fill-column 25.6.2 明示的なフィルコマンド
set-fill-prefix 25.6.3 フィルプレフィクス
set-fontset-font 22.15 フォントセットの修正
set-frame-name 21.21 非ウィンドウ端末
set-fringe-style 14.14 ウィンドウのフリンジ
set-goal-column 7.2 ポイント位置の変更
set-input-method 22.4 インプットメソッドの選択
set-justification-center 25.14.6 Enrichedテキストの位置調整
set-justification-full 25.14.6 Enrichedテキストの位置調整
set-justification-left 25.14.6 Enrichedテキストの位置調整
set-justification-none 25.14.6 Enrichedテキストの位置調整
set-justification-right 25.14.6 Enrichedテキストの位置調整
set-keyboard-coding-system 22.12 端末入出力にたいするコーディングシステム
set-language-environment 22.2 言語環境
set-left-margin 25.14.5 Enrichedテキストのインデント
set-locale-environment 22.2 言語環境
set-mark-command 11.1 マークのセット
set-next-selection-coding-system 22.10 プロセス間通信にたいするコーディングシステム
set-right-margin 25.14.5 Enrichedテキストのインデント
set-selection-coding-system 22.10 プロセス間通信にたいするコーディングシステム
set-selective-display 14.17 選択的な表示
set-terminal-coding-system 22.12 端末入出力にたいするコーディングシステム
set-variable 49.2.1 変数の確認とセット
set-visited-file-name 18.3.1 ファイルを保存するコマンド
setenv C.4 環境変数
setq-default 49.2.3 ローカル変数
sgml-attributes 25.12 SGMLモードとHTMLモード
sgml-close-tag 25.12 SGMLモードとHTMLモード
sgml-delete-tag 25.12 SGMLモードとHTMLモード
sgml-mode 25.12 SGMLモードとHTMLモード
sgml-name-8bit-mode 25.12 SGMLモードとHTMLモード
sgml-name-char 25.12 SGMLモードとHTMLモード
sgml-skip-tag-backward 25.12 SGMLモードとHTMLモード
sgml-skip-tag-forward 25.12 SGMLモードとHTMLモード
sgml-tag 25.12 SGMLモードとHTMLモード
sgml-tag-help 25.12 SGMLモードとHTMLモード
sgml-tags-invisible 25.12 SGMLモードとHTMLモード
sgml-validate 25.12 SGMLモードとHTMLモード
shadow-initialize 18.3.5 ファイルのシャドーイング
shell 38.2 対話的なサブシェル
shell-backward-command 38.3 Shellモード
shell-command 38.1 単一のシェルコマンド
shell-command-on-region 38.1 単一のシェルコマンド
shell-dynamic-complete-command 38.7 Shellモードのオプション
shell-forward-command 38.3 Shellモード
shell-pushd-dextract 38.7 Shellモードのオプション
shell-pushd-dunique 38.7 Shellモードのオプション
shell-pushd-tohome 38.7 Shellモードのオプション
show-paren-mode 26.4.3 マッチするカッコ
shrink-window-horizontally 20.5 ウィンドウの削除とリサイズ
shrink-window-if-larger-than-buffer 20.5 ウィンドウの削除とリサイズ
size-indication-mode 14.18 モードラインのオプション
slitex-mode 25.11 TeXモード
smerge-mode 18.9 ファイルの比較
snake 47 ゲーム、その他の娯楽
so-long-commentary 51.9 長い行
solitaire 47 ゲーム、その他の娯楽
sort-columns 41 テキストのソート
sort-fields 41 テキストのソート
sort-lines 41 テキストのソート
sort-numeric-fields 41 テキストのソート
sort-pages 41 テキストのソート
sort-paragraphs 41 テキストのソート
split-line 24.1 インデントコマンド
split-window-below 20.2 ウィンドウの分割
split-window-right 20.2 ウィンドウの分割
spook 32.6 アミューズメント
standard-display-8bit 22.17 Unibyte編集モード
string-insert-rectangle 12.5 矩形領域(Rectangles)
string-rectangle 12.5 矩形領域(Rectangles)
substitute-key-definition 49.4.2 initファイルの例
subword-mode 26.9 大文字小文字の混ざった単語
sunrise-sunset 31.7 日の出と日の入りの時刻
superword-mode 26.11 プログラムを編集するための他の便利な機能
suspend-frame 6 Emacsからのexit
switch-to-buffer 19.1 バッファーの作成と選択
switch-to-buffer-other-frame 19.1 バッファーの作成と選択
switch-to-buffer-other-window 19.1 バッファーの作成と選択
switch-to-completions 8.4.2 補完コマンド

T
tab-bar-history-mode 21.17 タブバー
tab-bar-mode 21.17 タブバー
tab-close 21.17 タブバー
tab-close-other 21.17 タブバー
tab-move 21.17 タブバー
tab-new 21.17 タブバー
tab-next 21.17 タブバー
tab-previous 21.17 タブバー
tab-recent 21.17 タブバー
tab-rename 21.17 タブバー
tab-select 21.17 タブバー
tab-to-tab-stop 24.1 インデントコマンド
tab-undo 21.17 タブバー
tabify 24.3 タブ vs. スペース
table-backward-cell 25.15.4 テーブルセルにたいするコマンド
table-capture 25.15.7 プレーンテキストとテーブルの変換
table-fixed-width-mode 25.15 テキストベーステーブルの編集
table-forward-cell 25.15.4 テーブルセルにたいするコマンド
table-generate-source 25.15.8 テーブル、その他
table-heighten-cell 25.15.4 テーブルセルにたいするコマンド
table-insert 25.15.2 テーブルの作成
table-insert-column 25.15.6 テーブルの行と列
table-insert-row 25.15.6 テーブルの行と列
table-insert-sequence 25.15.8 テーブル、その他
table-justify 25.15.5 セルの位置調整
table-narrow-cell 25.15.4 テーブルセルにたいするコマンド
table-query-dimension 25.15.8 テーブル、その他
table-recognize 25.15.3 テーブルの認識
table-recognize-cell 25.15.3 テーブルの認識
table-recognize-region 25.15.3 テーブルの認識
table-recognize-table 25.15.3 テーブルの認識
table-release 25.15.7 プレーンテキストとテーブルの変換
table-shorten-cell 25.15.4 テーブルセルにたいするコマンド
table-span-cell 25.15.4 テーブルセルにたいするコマンド
table-split-cell 25.15.4 テーブルセルにたいするコマンド
table-split-cell-horizontally 25.15.4 テーブルセルにたいするコマンド
table-split-cell-vertically 25.15.4 テーブルセルにたいするコマンド
table-unrecognize 25.15.3 テーブルの認識
table-unrecognize-cell 25.15.3 テーブルの認識
table-unrecognize-region 25.15.3 テーブルの認識
table-unrecognize-table 25.15.3 テーブルの認識
table-widen-cell 25.15.4 テーブルセルにたいするコマンド
tabulated-list-narrow-current-column 19.5 複数バッファーにたいする操作
tabulated-list-sort 19.5 複数バッファーにたいする操作
tabulated-list-widen-current-column 19.5 複数バッファーにたいする操作
tags-next-file 28.4.1.4 識別子の照会
tags-query-replace 28.4.1.3 識別子の検索と置換
tags-search 28.4.1.3 識別子の検索と置換
temp-buffer-resize-mode 20.6.2 編集不可バッファーの表示
term 38.8 Emacsの端末エミュレーター
term-char-mode 38.9 Termモード
term-line-mode 38.9 Termモード
term-pager-toggle 38.9 Termモード
tetris 47 ゲーム、その他の娯楽
tex-bibtex-file 25.11.3 TeX印刷コマンド
tex-buffer 25.11.3 TeX印刷コマンド
tex-close-latex-block 25.11.2 LaTeX編集コマンド
tex-compile 25.11.3 TeX印刷コマンド
tex-file 25.11.3 TeX印刷コマンド
tex-insert-braces 25.11.1 TeX編集コマンド
tex-insert-quote 25.11.1 TeX編集コマンド
tex-kill-job 25.11.3 TeX印刷コマンド
tex-latex-block 25.11.2 LaTeX編集コマンド
tex-mode 25.11 TeXモード
tex-print 25.11.3 TeX印刷コマンド
tex-recenter-output-buffer 25.11.3 TeX印刷コマンド
tex-region 25.11.3 TeX印刷コマンド
tex-terminate-paragraph 25.11.1 TeX編集コマンド
tex-validate-region 25.11.1 TeX編集コマンド
tex-view 25.11.3 TeX印刷コマンド
text-mode 25.8 Textモード
text-scale-adjust 14.11 テキストのスケール
text-scale-decrease 14.11 テキストのスケール
text-scale-increase 14.11 テキストのスケール
text-scale-mode 14.11 テキストのスケール
text-scale-set 14.11 テキストのスケール
thumbs-mode 18.19 イメージファイルのvisit
time-stamp 18.3.6 タイムスタンプの自動更新
timeclock-change 31.12 時間間隔の加算
timeclock-in 31.12 時間間隔の加算
timeclock-mode-line-display 31.12 時間間隔の加算
timeclock-out 31.12 時間間隔の加算
timeclock-reread-log 31.12 時間間隔の加算
timeclock-when-to-leave 31.12 時間間隔の加算
timeclock-workday-remaining 31.12 時間間隔の加算
tmm-menubar 1.4 メニューバー
toggle-debug-on-error 52.4 バグレポートのためのチェックリスト
toggle-frame-fullscreen 21.7 フレームコマンド
toggle-frame-maximized 21.7 フレームコマンド
toggle-gdb-all-registers 27.6.5.6 その他のGDBバッファー
toggle-input-method 22.4 インプットメソッドの選択
toggle-scroll-bar 21.12 スクロールバー
toggle-truncate-lines 14.21 行の切り詰め
tool-bar-mode 21.16 ツールバー
tooltip-mode 21.19 ツールチップ
top-level 50 中止と中断
transient-mark-mode 11.7 Transient Markモードを無効にする
transpose-chars 16.2 テキストの入れ替え
transpose-lines 16.2 テキストの入れ替え
transpose-paragraphs 16.2 テキストの入れ替え
transpose-regions 16.2 テキストの入れ替え
transpose-sentences 16.2 テキストの入れ替え
transpose-sexps 26.4.1 対応が取れたカッコの式
transpose-words 16.2 テキストの入れ替え
tty-suppress-bold-inverse-default-colors 14.23 ディスプレーのカスタマイズ

U
uncomment-region 26.5.1 コメントコマンド
undigestify-rmail-message 33.16 ダイジェストメッセージ
undo 16.1 Undo(取り消し)
undo-only 16.1 Undo(取り消し)
unexpand-abbrev 29.3 abbrev展開の制御
unforward-rmail-message 33.10 返信の送信
unhighlight-regexp 14.13 インタラクティブなハイライト
universal-argument 7.10 数引数
universal-coding-system-argument 22.9 ファイルのテキストにたいするコーディングシステムの指定
unmorse-region 47 ゲーム、その他の娯楽
untabify 24.3 タブ vs. スペース
up-list 25.11.1 TeX編集コマンド
upcase-region 25.7 大文字小文字変換コマンド
upcase-word 25.7 大文字小文字変換コマンド
use-hard-newlines 25.14.2 ハード改行とソフト改行

V
vc-annotate 28.1.6 古いリビジョンの調査と比較
vc-create-tag 28.1.12.3 リビジョンタグ
vc-delete-file 28.1.12.2 バージョンコントロールされたファイルの削除とリネーム
vc-diff 28.1.6 古いリビジョンの調査と比較
vc-dir 28.1.10 VC Directoryモード
vc-dir-mark 28.1.10.2 VC Directoryコマンド
vc-dir-mark-all-files 28.1.10.2 VC Directoryコマンド
vc-ediff 28.1.6 古いリビジョンの調査と比較
vc-ignore 28.1.9 バージョンコントロールファイルを無視する
vc-insert-headers 28.1.12.4 バージョンコントロールヘッダーの挿入
vc-log-incoming 28.1.7 VC Change Log
vc-log-outgoing 28.1.7 VC Change Log
vc-log-search 28.1.7 VC Change Log
vc-next-action 28.1.3 バージョンコントロール下での基本的な編集
vc-print-log 28.1.7 VC Change Log
vc-print-root-log 28.1.7 VC Change Log
vc-pull 28.1.11.2 ブランチへ/からの変更のpull/push
vc-push 28.1.11.2 ブランチへ/からの変更のpull/push
vc-refresh-state 28.1 バージョンコントロール
vc-region-history 28.1.7 VC Change Log
vc-register 28.1.5 バージョンコントロールへのファイルの登録
vc-rename-file 28.1.12.2 バージョンコントロールされたファイルの削除とリネーム
vc-retrieve-tag 28.1.12.3 リビジョンタグ
vc-revert 28.1.8 バージョンコントロール操作のアンドゥ
vc-revision-other-window 28.1.6 古いリビジョンの調査と比較
vc-root-diff 28.1.6 古いリビジョンの調査と比較
vc-root-version-diff 28.1.6 古いリビジョンの調査と比較
vc-state-refresh 28.1 バージョンコントロール
vc-update-change-log 28.1.12.1 変更ログとVC
view-buffer 14.6 Viewモード
view-echo-area-messages 10.8 その他のヘルプコマンド
view-emacs-debugging 10.9 ヘルプファイル
view-emacs-FAQ 10.9 ヘルプファイル
view-emacs-news 10.9 ヘルプファイル
view-emacs-problems 10.9 ヘルプファイル
view-emacs-todo 10.9 ヘルプファイル
View-exit 14.6 Viewモード
view-external-packages 10.9 ヘルプファイル
view-file 14.6 Viewモード
view-hello-file 22.1 国際化文字セットのイントロダクション
view-lossage 10.8 その他のヘルプコマンド
view-order-manuals 10.9 ヘルプファイル
View-quit 14.6 Viewモード
view-register 13 レジスター
visit-tags-table 28.4.3 タグテーブルの選択
visual-line-mode 14.22 Visual Lineモード

W
w32-find-non-USB-fonts G.10 MS-Windowsでのフォント指定
w32-register-hot-key G.6 MS-Windowsでのキーボードの使用方法
w32-shell-execute G.8 Windows 9X/MEおよびWindows NT/2000/XP/Vista/7/8/10でのサブプロセス
w32-unregister-hot-key G.6 MS-Windowsでのキーボードの使用方法
wdired-change-to-wdired-mode 30.17 Diredバッファーの編集
wdired-finish-edit 30.17 Diredバッファーの編集
what-cursor-position 7.9 カーソル位置の情報
what-cursor-position, and international characters 22.1 国際化文字セットのイントロダクション
what-line 7.9 カーソル位置の情報
what-page 25.4 ページ
where-is 10.2 キーのドキュメント
which-function-mode 26.2.4 Which Functionモード
whitespace-mode 14.16 不要なスペース
whitespace-toggle-options 14.16 不要なスペース
widen 14.5 ナローイング
widget-backward 49.1.1 カスタマイズグループ
widget-complete 49.1.3 変数の変更
widget-forward 49.1.1 カスタマイズグループ
windmove-default-keybindings 20.7 ウィンドウ処理のための便利な機能
windmove-delete-default-keybindings 20.7 ウィンドウ処理のための便利な機能
windmove-display-default-keybindings 20.7 ウィンドウ処理のための便利な機能
windmove-right 20.7 ウィンドウ処理のための便利な機能
windmove-swap-states-default-keybindings 20.7 ウィンドウ処理のための便利な機能
window-configuration-to-register 13.4 レジスターにウィンドウ設定を保存する
window-divider-mode 21.13 ウィンドウdivider
winner-mode 20.7 ウィンドウ処理のための便利な機能
woman 26.6.2 man-pageの照会
word-search-backward 15.3 単語検索
word-search-forward 15.3 単語検索
write-abbrev-file 29.5 abbrevの保存
write-file 18.3.1 ファイルを保存するコマンド
write-region 18.12 その他のファイル操作

X
xdb 27.6.1 GUDの開始
xref-etags-mode 28.4.1.1 識別子の照合
xref-find-apropos 28.4.1.1 識別子の照合
xref-find-definitions 28.4.1.1 識別子の照合
xref-find-definitions-other-frame 28.4.1.1 識別子の照合
xref-find-definitions-other-window 28.4.1.1 識別子の照合
xref-find-references 28.4.1.3 識別子の検索と置換
xref-next-line 28.4.1.2 *xref*バッファーで利用可能なコマンド
xref-pop-marker-stack 28.4.1.1 識別子の照合
xref-prev-line 28.4.1.2 *xref*バッファーで利用可能なコマンド
xref-query-replace-in-results 28.4.1.3 識別子の検索と置換
xref-quit 28.4.1.2 *xref*バッファーで利用可能なコマンド
xref-quit-and-goto-xref 28.4.1.2 *xref*バッファーで利用可能なコマンド
xref-revert-buffer 28.4.1.2 *xref*バッファーで利用可能なコマンド
xref-show-location-at-point 28.4.1.2 *xref*バッファーで利用可能なコマンド
xwidget-webkit-browse-url 46.2 埋め込みWebKitウィジェット
xwidget-webkit-mode 46.2 埋め込みWebKitウィジェット

Y
yank 12.2 yank
yank-pop 12.2.2 過去にkillしたテキストをyankする
yank-rectangle 12.5 矩形領域(Rectangles)

Z
zap-to-char 12.1.3 その他のkillコマンド
zap-up-to-char 12.1.3 その他のkillコマンド
zone 47 ゲーム、その他の娯楽
zrgrep 27.4 Emacs下でのGrepによる検索

Jump to:   2   5  
A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Variable Index

Jump to:   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y  
Index Entry  Section

A
abbrev-all-caps 29.3 abbrev展開の制御
abbrev-file-name 29.5 abbrevの保存
adaptive-fill-first-line-regexp 25.6.4 適応型フィル
adaptive-fill-function 25.6.4 適応型フィル
adaptive-fill-mode 25.6.4 適応型フィル
adaptive-fill-regexp 25.6.4 適応型フィル
add-log-always-start-new-record 28.3.1 変更ログコマンド
add-log-dont-create-changelog-file 28.3.1 変更ログコマンド
add-log-keep-changes-together 28.3.1 変更ログコマンド
ange-ftp-default-user 18.15 リモートファイル
ange-ftp-gateway-host 18.15 リモートファイル
ange-ftp-generate-anonymous-password 18.15 リモートファイル
ange-ftp-make-backup-files 18.15 リモートファイル
ange-ftp-smart-gateway 18.15 リモートファイル
appt-audible 31.10.6 アポイントメント
appt-delete-window-function 31.10.6 アポイントメント
appt-disp-window-function 31.10.6 アポイントメント
appt-display-diary 31.10.6 アポイントメント
appt-display-duration 31.10.6 アポイントメント
appt-display-format 31.10.6 アポイントメント
appt-display-mode-line 31.10.6 アポイントメント
appt-message-warning-time 31.10.6 アポイントメント
appt-warning-time-regexp 31.10.6 アポイントメント
apropos-do-all 10.4 Apropos(適切な)
apropos-documentation-sort-by-scores 10.4 Apropos(適切な)
apropos-sort-by-scores 10.4 Apropos(適切な)
async-shell-command-buffer 38.1 単一のシェルコマンド
async-shell-command-display-buffer 38.1 単一のシェルコマンド
async-shell-command-width 38.1 単一のシェルコマンド
auth-source-save-behavior 49.5 永続的に認証情報を保つ
auth-sources 49.5 永続的に認証情報を保つ
auto-coding-alist 22.6 コーディングシステムの認識
auto-coding-functions 22.6 コーディングシステムの認識
auto-coding-regexp-alist 22.6 コーディングシステムの認識
auto-compression-mode 18.13 圧縮ファイルへのアクセス
auto-hscroll-mode 14.4 水平スクロール
auto-mode-alist 23.3 ファイルのモードを選択する
auto-mode-case-fold 23.3 ファイルのモードを選択する
auto-revert-avoid-polling 18.5 自動リバートーバッファーを自動的に最新に保つ
auto-revert-check-vc-info 28.1.2 バージョンコントロールとモードライン
auto-revert-interval 18.5 自動リバートーバッファーを自動的に最新に保つ
auto-revert-notify-exclude-dir-regexp 18.5 自動リバートーバッファーを自動的に最新に保つ
auto-revert-remote-files 18.5 自動リバートーバッファーを自動的に最新に保つ
auto-revert-use-notify 18.5 自動リバートーバッファーを自動的に最新に保つ
auto-revert-verbose 18.5 自動リバートーバッファーを自動的に最新に保つ
auto-save-default 18.6.2 自動保存の制御
auto-save-file-name-transforms 18.6.1 自動保存ファイル
auto-save-interval 18.6.2 自動保存の制御
auto-save-list-file-prefix 18.6.3 自動保存からのデータ復旧
auto-save-no-message 18.6 自動保存-災害にたいする防御
auto-save-timeout 18.6.2 自動保存の制御
auto-save-visited-interval 18.6.2 自動保存の制御
auto-save-visited-mode 18.6.1 自動保存ファイル

B
backup-by-copying 18.3.2.3 コピー vs. リネーム
backup-by-copying-when-linked 18.3.2.3 コピー vs. リネーム
backup-by-copying-when-mismatch 18.3.2.3 コピー vs. リネーム
backup-by-copying-when-privileged-mismatch 18.3.2.3 コピー vs. リネーム
backup-directory-alist 18.3.2 バックアップファイル
backup-enable-predicate 18.3.2 バックアップファイル
battery-mode-line-format 14.18 モードラインのオプション
bdf-directory-list 40.2 PostScriptハードコピーにたいする変数
bidi-display-reordering 22.19 双方向の編集
bidi-paragraph-direction 22.19 双方向の編集
bidi-paragraph-separate-re 22.19 双方向の編集
bidi-paragraph-start-re 22.19 双方向の編集
blink-cursor-alist 14.20 カーソルの表示
blink-cursor-blinks 14.20 カーソルの表示
blink-cursor-mode 14.20 カーソルの表示
blink-matching-delay 26.4.3 マッチするカッコ
blink-matching-paren 26.4.3 マッチするカッコ
blink-matching-paren-distance 26.4.3 マッチするカッコ
bookmark-default-file 13.8 ブックマーク
bookmark-save-flag 13.8 ブックマーク
bookmark-search-size 13.8 ブックマーク
bookmark-use-annotations 13.8 ブックマーク
browse-url-browser-function 46.3 URLのフォロー
browse-url-mailto-function 46.3 URLのフォロー
buffer-auto-revert-by-notification 18.5.1 非ファイルバッファーの自動リバート
buffer-file-coding-system 22.8 出力のためのコーディングシステムの選択
buffer-read-only 19.3 その他のバッファー操作

C
c-default-style 26.3.5 Cのインデントのカスタマイズ
c-hungry-delete-key 26.12.3 Cの欲張りな削除機能
c-mode-hook 26.1 プログラミング言語のためのメジャーモード
c-tab-always-indent 26.3.4 Cのインデントのためのコマンド
cal-html-css-default 31.5 カレンダーファイルの記述
calendar-bahai-all-holidays-flag 31.13.2 休日のカスタマイズ
calendar-christian-all-holidays-flag 31.13.2 休日のカスタマイズ
calendar-date-display-form 31.13.4 日付の表示フォーマット
calendar-date-style 31.10.3 日付のフォーマット
calendar-day-header-array 31.13.1 カレンダーのカスタマイズ
calendar-daylight-savings-ends 31.11 サマータイム
calendar-daylight-savings-ends-time 31.11 サマータイム
calendar-daylight-savings-starts 31.11 サマータイム
calendar-daylight-time-offset 31.11 サマータイム
calendar-daylight-time-zone-name 31.7 日の出と日の入りの時刻
calendar-hebrew-all-holidays-flag 31.13.2 休日のカスタマイズ
calendar-holiday-marker 31.13.1 カレンダーのカスタマイズ
calendar-holidays 31.13.2 休日のカスタマイズ
calendar-initial-window-hook 31.13.1 カレンダーのカスタマイズ
calendar-intermonth-text 31.13.1 カレンダーのカスタマイズ
calendar-islamic-all-holidays-flag 31.13.2 休日のカスタマイズ
calendar-latitude 31.7 日の出と日の入りの時刻
calendar-location-name 31.7 日の出と日の入りの時刻
calendar-longitude 31.7 日の出と日の入りの時刻
calendar-mark-diary-entries-flag 31.10.2 ダイアリーの表示
calendar-mark-holidays-flag 31.6 休日
calendar-month-header 31.13.1 カレンダーのカスタマイズ
calendar-move-hook 31.13.1 カレンダーのカスタマイズ
calendar-remove-frame-by-deleting 31.4 その他のカレンダーコマンド
calendar-standard-time-zone-name 31.7 日の出と日の入りの時刻
calendar-time-display-form 31.13.5 時刻の表示フォーマット
calendar-time-zone 31.7 日の出と日の入りの時刻
calendar-today-invisible-hook 31.13.1 カレンダーのカスタマイズ
calendar-today-marker 31.13.1 カレンダーのカスタマイズ
calendar-today-visible-hook 31.13.1 カレンダーのカスタマイズ
calendar-view-diary-initially-flag 31.10.2 ダイアリーの表示
calendar-view-holidays-initially-flag 31.6 休日
calendar-week-start-day 31.1.2 週、月、年の開始と終了
calendar-weekend-days 31.1.2 週、月、年の開始と終了
case-fold-search 15.9 検索中のLaxマッチング
case-replace 15.10.3 置換コマンドとLaxマッチ
CDPATH, environment variable C.4.1 一般的な変数
change-log-version-info-enabled 28.3.1 変更ログコマンド
change-log-version-number-regexp-list 28.3.1 変更ログコマンド
change-major-mode-with-file-name 23.3 ファイルのモードを選択する
char-fold-exclude 15.9 検索中のLaxマッチング
char-fold-include 15.9 検索中のLaxマッチング
char-fold-symmetric 15.9 検索中のLaxマッチング
clone-indirect-buffer-hook 19.6 インダイレクトバッファー
coding 22.7 ファイルのコーディングシステムの指定
colon-double-space 25.6.2 明示的なフィルコマンド
column-number-indicator-zero-based 14.18 モードラインのオプション
comint-completion-addsuffix 38.7 Shellモードのオプション
comint-completion-autolist 38.7 Shellモードのオプション
comint-completion-fignore 38.7 Shellモードのオプション
comint-completion-recexact 38.7 Shellモードのオプション
comint-input-autoexpand 38.5.3 Shellヒストリーの参照
comint-input-ignoredups 38.7 Shellモードのオプション
comint-input-ring-file-name 38.5.1 Shellヒストリーリング
comint-insert-previous-argument-from-end 38.5.1 Shellヒストリーリング
comint-move-point-for-output 38.7 Shellモードのオプション
comint-prompt-read-only 38.7 Shellモードのオプション
comint-scroll-show-maximum-output 38.7 Shellモードのオプション
comint-scroll-to-bottom-on-input 38.7 Shellモードのオプション
comint-terminfo-terminal 38.7 Shellモードのオプション
comint-use-prompt-regexp 38.4 Shellプロンプト
command-history 8.6 ミニバッファーでのコマンドの繰り返し
command-line-args Appendix C Emacs呼び出しにたいするコマンドライン引数
comment-column 26.5.3 コメントを制御するオプション
comment-end 26.5.3 コメントを制御するオプション
comment-fill-column 26.5.3 コメントを制御するオプション
comment-indent-function 26.5.3 コメントを制御するオプション
comment-multi-line 26.5.2 複数行のコメント
comment-padding 26.5.3 コメントを制御するオプション
comment-start 26.5.3 コメントを制御するオプション
comment-start-skip 26.5.3 コメントを制御するオプション
compare-ignore-case 18.9 ファイルの比較
compare-ignore-whitespace 18.9 ファイルの比較
compilation-always-kill 27.1 Emacs下でのコンパイルの実行
compilation-auto-jump-to-first-error 27.2 Compilationモード
compilation-context-lines 27.2 Compilationモード
compilation-environment 27.1 Emacs下でのコンパイルの実行
compilation-error 27.2 Compilationモード
compilation-error-regexp-alist 27.2 Compilationモード
compilation-scroll-output 27.1 Emacs下でのコンパイルの実行
compilation-skip-threshold 27.2 Compilationモード
compilation-warning 27.2 Compilationモード
compile-command 27.1 Emacs下でのコンパイルの実行
completion-auto-help 8.4.5 補完オプション
completion-category-overrides 8.4.4 補完候補が選択される方法
completion-cycle-threshold 8.4.5 補完オプション
completion-ignored-extensions 8.4.5 補完オプション
completion-styles 8.4.4 補完候補が選択される方法
COMSPEC C.4.2 その他の変数
confirm-kill-emacs 6 Emacsからのexit
confirm-kill-processes 6 Emacsからのexit
confirm-nonexistent-file-or-buffer 8.4.3 補完の終了
create-lockfiles 18.3.4 同時編集からの保護
ctl-arrow 14.19 テキストが表示される方法
ctl-x-4-map 49.3.2 プレフィクスキーマップ
ctl-x-map 49.3.2 プレフィクスキーマップ
cua-enable-cua-keys 12.6 CUAバインド
cua-mode 12.6 CUAバインド
current-input-method 22.4 インプットメソッドの選択
current-language-environment 22.2 言語環境
cursor-in-non-selected-windows 14.20 カーソルの表示
cursor-type 14.20 カーソルの表示
custom-buffer-done-kill 49.1.3 変数の変更
custom-enabled-themes 49.1.7 カスタムテーマ
custom-file 49.1.4 カスタマイズの保存
custom-safe-themes 49.1.7 カスタムテーマ
custom-search-field 49.1.2 セッティングのブラウズと検索
custom-theme-directory 49.1.7 カスタムテーマ
custom-theme-directory, saving theme files 49.1.8 カスタムテーマの作成
custom-theme-load-path 49.1.7 カスタムテーマ

D
dabbrev-abbrev-char-regexp 29.7 動的abbrevのカスタマイズ
dabbrev-abbrev-skip-leading-regexp 29.7 動的abbrevのカスタマイズ
dabbrev-case-fold-search 29.7 動的abbrevのカスタマイズ
dabbrev-case-replace 29.7 動的abbrevのカスタマイズ
dabbrev-check-all-buffers 29.6 動的abbrev展開
dabbrev-check-other-buffers 29.6 動的abbrev展開
dabbrev-ignored-buffer-names 29.6 動的abbrev展開
dabbrev-ignored-buffer-regexps 29.6 動的abbrev展開
dabbrev-limit 29.6 動的abbrev展開
DBUS_SESSION_BUS_ADDRESS, environment variable C.4.1 一般的な変数
dbx-mode-hook 27.6.4 GUDのカスタマイズ
debug-on-event 52.4 バグレポートのためのチェックリスト
debug-on-quit 52.4 バグレポートのためのチェックリスト
default-directory 18.1 ファイルの名前
default-frame-alist 21.11 フレームパラメーター
default-input-method 22.4 インプットメソッドの選択
default-justification 25.14.6 Enrichedテキストの位置調整
delete-active-region 11.3 リージョンを操作する
delete-auto-save-files 18.6.1 自動保存ファイル
delete-by-moving-to-trash 18.12 その他のファイル操作
delete-by-moving-to-trash, and Dired 30.3 Diredでのファイルの削除について
delete-old-versions 18.3.2.2 バックアップの自動削除
delete-trailing-lines 14.16 不要なスペース
desktop-auto-save-timeout 44 Emacsセッションの保存
desktop-clear-preserve-buffers-regexp 44 Emacsセッションの保存
desktop-files-not-to-save 44 Emacsセッションの保存
desktop-globals-to-clear 44 Emacsセッションの保存
desktop-load-locked-desktop 44 Emacsセッションの保存
desktop-path 44 Emacsセッションの保存
desktop-restore-eager 44 Emacsセッションの保存
desktop-restore-frames 44 Emacsセッションの保存
desktop-save-mode 44 Emacsセッションの保存
diary-bahai-entry-symbol 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-chinese-entry-symbol 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-comment-start 31.13.9 Fancy Diary表示
diary-date-forms 31.13.6 ダイアリーのカスタマイズ
diary-display-function 31.13.8 ダイアリーの表示
diary-entry-marker 31.13.1 カレンダーのカスタマイズ
diary-file 31.10.1 ダイアリーファイル
diary-hebrew-entry-symbol 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-include-string 31.13.9 Fancy Diary表示
diary-islamic-entry-symbol 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-list-entries-hook 31.13.9 Fancy Diary表示
diary-list-include-blanks 31.13.8 ダイアリーの表示
diary-mail-days 31.10.2 ダイアリーの表示
diary-mark-entries-hook 31.13.9 Fancy Diary表示
diary-nongregorian-listing-hook 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-nongregorian-marking-hook 31.13.7 非グレゴリオ暦を使用するカレンダーエントリー
diary-nonmarking-symbol 31.10.2 ダイアリーの表示
diary-number-of-entries 31.13.6 ダイアリーのカスタマイズ
diary-outlook-formats 31.10.7 ダイアリーエントリーのインポートとエクスポート
diary-print-entries-hook 31.13.8 ダイアリーの表示
diary-sexp-entry-symbol 31.13.10 sexpエントリーとFancy Diary表示
diary-show-holidays-flag 31.13.6 ダイアリーのカスタマイズ
diff-font-lock-syntax 18.10 Diffモード
diff-jump-to-old-file 18.10 Diffモード
diff-refine 18.10 Diffモード
diff-refine 18.10 Diffモード
diff-switches 18.9 ファイルの比較
diff-update-on-the-fly 18.10 Diffモード
directory-abbrev-alist 18.7 ファイルのエイリアス
dired-auto-revert-buffer 30.15 Diredバッファーの更新
dired-chown-program 30.7 ファイルにたいする操作
dired-copy-preserve-time 30.7 ファイルにたいする操作
dired-create-destination-dirs 30.7 ファイルにたいする操作
dired-dwim-target 30.7 ファイルにたいする操作
dired-garbage-files-regexp 30.4 大量のファイルに一度にフラグをつける
dired-hide-details-hide-information-lines 30.19 その他のDiredの機能
dired-hide-details-hide-symlink-targets 30.19 その他のDiredの機能
dired-isearch-filenames 30.2 Diredバッファーでの移動
dired-kept-versions 30.4 大量のファイルに一度にフラグをつける
dired-listing-switches 30.1 Diredの起動
dired-listing-switches (MS-DOS) G.12.7 MS-DOSでのサブプロセス
dired-recursive-copies 30.7 ファイルにたいする操作
dired-recursive-deletes 30.3 Diredでのファイルの削除について
dired-use-ls-dired 30.1 Diredの起動
dired-vc-rename-file 30.7 ファイルにたいする操作
dirtrack-list 38.6 ディレクトリーの追跡
display-battery-mode 14.18 モードラインのオプション
display-fill-column-indicator-character 14.15 バウンダリーの表示
display-fill-column-indicator-column 14.15 バウンダリーの表示
display-hourglass 14.23 ディスプレーのカスタマイズ
display-line-numbers 14.23 ディスプレーのカスタマイズ
display-line-numbers-current-absolute 14.23 ディスプレーのカスタマイズ
display-line-numbers-grow-only 14.23 ディスプレーのカスタマイズ
display-line-numbers-offset 14.23 ディスプレーのカスタマイズ
display-line-numbers-type 14.23 ディスプレーのカスタマイズ
display-line-numbers-widen 14.23 ディスプレーのカスタマイズ
display-line-numbers-width 14.23 ディスプレーのカスタマイズ
display-line-numbers-width-start 14.23 ディスプレーのカスタマイズ
display-raw-bytes-as-hex 14.23 ディスプレーのカスタマイズ
display-time-24hr-format 14.18 モードラインのオプション
display-time-mail-directory 14.18 モードラインのオプション
display-time-mail-face 14.18 モードラインのオプション
display-time-mail-file 14.18 モードラインのオプション
display-time-use-mail-icon 14.18 モードラインのオプション
dnd-open-file-other-window 21.14 ドラッグアンドドロップ
doc-view-cache-directory 37.4 DocViewの変換
doc-view-continuous 37.1 DocViewの操作
doc-view-resolution 37.1 DocViewの操作
doc-view-scale-internally 37.1 DocViewの操作
doctex-mode-hook 25.11.4 TeXモード、その
dos-codepage G.12.6 MS-DOSでの国際化サポート
dos-display-scancodes G.12.2 MS-DOSでびマウスの使用方法
dos-hyper-key G.12.1 MS-DOSでのキーボードの使用方法
dos-keypad-mode G.12.1 MS-DOSでのキーボードの使用方法
dos-printer G.12.5 印刷とMS-DOS
dos-ps-printer G.12.5 印刷とMS-DOS
dos-super-key G.12.1 MS-DOSでのキーボードの使用方法
double-click-fuzz 49.3.10 マウスボタンのリバインド
double-click-time 49.3.10 マウスボタンのリバインド

E
echo-keystrokes 14.23 ディスプレーのカスタマイズ
electric-pair-delete-adjacent-pairs 26.4.3 マッチするカッコ
electric-pair-open-newline-between-pairs 26.4.3 マッチするカッコ
electric-pair-preserve-balance 26.4.3 マッチするカッコ
electric-pair-skip-whitespace 26.4.3 マッチするカッコ
electric-quote-chars 25.5 クォーテーションマーク
electric-quote-comment 25.5 クォーテーションマーク
electric-quote-paragraph 25.5 クォーテーションマーク
electric-quote-replace-double 25.5 クォーテーションマーク
electric-quote-string 25.5 クォーテーションマーク
emacs-lisp-mode-hook 26.1 プログラミング言語のためのメジャーモード
EMACSCLIENT_TRAMP, environment variable 39.3 emacsclientのオプション
EMACSCOLORS C.4.2 その他の変数
EMACSDATA, environment variable C.4.1 一般的な変数
EMACSDOC, environment variable C.4.1 一般的な変数
EMACSLOADPATH, environment variable C.4.1 一般的な変数
EMACSPATH, environment variable C.4.1 一般的な変数
EMACSTEST C.4.2 その他の変数
emacs_dir C.4.2 その他の変数
EMACS_SERVER_FILE, environment variable 39.1 TCP Emacs server
EMAIL, environment variable C.4.1 一般的な変数
emerge-combine-versions-template 28.6.6 2つのバージョンの合成
emerge-startup-hook 28.6.7 Emergeの細かい注意点
enable-local-eval 49.2.4.2 安全なファイル変数
enable-local-variables 49.2.4.2 安全なファイル変数
enable-recursive-minibuffers 8.3 ミニバッファーでの編集
enriched-allow-eval-in-display-props 25.14.7 その他のテキストプロパティーのセッティング
enriched-translations 25.14.1 Enrichedモード
eol-mnemonic-dos 14.18 モードラインのオプション
eol-mnemonic-mac 14.18 モードラインのオプション
eol-mnemonic-undecided 14.18 モードラインのオプション
eol-mnemonic-unix 14.18 モードラインのオプション
esc-map 49.3.2 プレフィクスキーマップ
ESHELL, environment variable C.4.1 一般的な変数
eval-expression-debug-on-error 27.9 Emacs Lisp式の評価
eval-expression-print-length 27.9 Emacs Lisp式の評価
eval-expression-print-level 27.9 Emacs Lisp式の評価
eval-expression-print-maximum-character 27.9 Emacs Lisp式の評価
eww-search-prefix 15.3 単語検索
exec-path 38 Emacsからのシェルコマンドの実行
exit-language-environment-hook 22.2 言語環境
explicit-shell-file-name 38.2 対話的なサブシェル
extended-command-suggest-shorter 9 名前を指定してコマンドを実行する

F
face-ignored-fonts 22.15 フォントセットの修正
fast-but-imprecise-scrolling 14.1 スクロール
ff-related-file-alist 26.12.4 Cモードのその他のコマンド
file-coding-system-alist 22.6 コーディングシステムの認識
file-name-at-point-functions 8.5 ミニバッファーヒストリー
file-name-coding-system 22.11 ファイル名にたいするコーディングシステム
fill-column 25.6.2 明示的なフィルコマンド
fill-column-indicator 14.15 バウンダリーの表示
fill-nobreak-predicate 25.6.2 明示的なフィルコマンド
fill-prefix 25.6.3 フィルプレフィクス
find-file-existing-other-name 18.7 ファイルのエイリアス
find-file-hook 18.2 ファイルのvisit(訪問)
find-file-not-found-functions 18.2 ファイルのvisit(訪問)
find-file-run-dired 18.2 ファイルのvisit(訪問)
find-file-suppress-same-file-warnings 18.7 ファイルのエイリアス
find-file-visit-truename 18.7 ファイルのエイリアス
find-file-wildcards 18.2 ファイルのvisit(訪問)
find-ls-option 30.16 Diredとfind
focus-follows-mouse 21.7 フレームコマンド
foldout-mouse-modifiers 25.9.5 折り畳み編集
font-lock-maximum-decoration 14.12 Font Lockモード
font-slant-table (MS-Windows) G.10 MS-Windowsでのフォント指定
font-weight-table (MS-Windows) G.10 MS-Windowsでのフォント指定
fortran-analyze-depth 26.14.2.2 継続行
fortran-break-before-delimiters 26.14.4 FortranモードでのAuto Fill
fortran-check-all-num… 26.14.2.5 Fortranのインデントのための変数
fortran-column-ruler-fixed 26.14.5 Fortranでの列のチェック
fortran-column-ruler-tabs 26.14.5 Fortranでの列のチェック
fortran-comment-indent-char 26.14.3 Fortranのコメント
fortran-comment-indent-style 26.14.3 Fortranのコメント
fortran-comment-line-extra-indent 26.14.3 Fortranのコメント
fortran-comment-line-start 26.14.3 Fortranのコメント
fortran-comment-region 26.14.3 Fortranのコメント
fortran-continuation-indent 26.14.2.5 Fortranのインデントのための変数
fortran-continuation-string 26.14.2.2 継続行
fortran-directive-re 26.14.3 Fortranのコメント
fortran-do-indent 26.14.2.5 Fortranのインデントのための変数
fortran-electric-line-number 26.14.2.3 行番号
fortran-if-indent 26.14.2.5 Fortranのインデントのための変数
fortran-line-length 26.14.5 Fortranでの列のチェック
fortran-line-number-indent 26.14.2.3 行番号
fortran-minimum-statement-indent… 26.14.2.5 Fortranのインデントのための変数
fortran-structure-indent 26.14.2.5 Fortranのインデントのための変数
fortran-tab-mode-default 26.14.2.2 継続行
frame-background-mode 14.8 テキストのフェイス
frame-resize-pixelwise 21.7 フレームコマンド
frameset-filter-alist 44 Emacsセッションの保存
fringe-mode (variable) 14.14 ウィンドウのフリンジ

G
gdb-delete-out-of-scope 27.6.5.7 ウォッチ式
gdb-gud-control-all-threads 27.6.5.8 マルチスレッドのデバッグ
gdb-many-windows 27.6.5.1 GDBのユーザーインターフェースのレイアウト
gdb-mi-decode-strings 27.6.5.2 Sourceバッファー
gdb-mode-hook 27.6.4 GUDのカスタマイズ
gdb-non-stop-setting 27.6.5.8 マルチスレッドのデバッグ
gdb-show-changed-values 27.6.5.7 ウォッチ式
gdb-show-main 27.6.5.1 GDBのユーザーインターフェースのレイアウト
gdb-show-threads-by-default 27.6.5.3 Breakpointsバッファー
gdb-speedbar-auto-raise 27.6.5.7 ウォッチ式
gdb-stack-buffer-addresses 27.6.5.5 Stackバッファー
gdb-stopped-functions 27.6.5.8 マルチスレッドのデバッグ
gdb-switch-reasons 27.6.5.8 マルチスレッドのデバッグ
gdb-switch-when-another-stopped 27.6.5.8 マルチスレッドのデバッグ
gdb-thread-buffer-addresses 27.6.5.4 Threadsバッファー
gdb-thread-buffer-arguments 27.6.5.4 Threadsバッファー
gdb-thread-buffer-locations 27.6.5.4 Threadsバッファー
gdb-thread-buffer-verbose-names 27.6.5.4 Threadsバッファー
gdb-use-colon-colon-notation 27.6.5.7 ウォッチ式
global-cwarn-mode 26.12.4 Cモードのその他のコマンド
global-font-lock-mode 14.12 Font Lockモード
global-mark-ring-max 11.5 グローバルマークリング
grep-find-abbreviate 27.4 Emacs下でのGrepによる検索
grep-find-ignored-directories 27.4 Emacs下でのGrepによる検索
grep-find-ignored-directories (Dired) 30.7 ファイルにたいする操作
grep-find-ignored-files (Dired) 30.7 ファイルにたいする操作
grep-regexp-alist 27.2 Compilationモード
gud-gdb-command-name 27.6.5 GDBのグラフィカルインターフェース
gud-tooltip-echo-area 27.6.2 デバッガーの操作
gud-xdb-directories 27.6.1 GUDの開始
guiler-mode-hook 27.6.4 GUDのカスタマイズ

H
help-at-pt-display-when-idle 10.10 アクティブテキストのヘルプとツールチップ
help-enable-autoload 27.8 EmacsのためのLispコードによるライブラリー
help-enable-completion-autoload 27.8 EmacsのためのLispコードによるライブラリー
help-map 49.3.2 プレフィクスキーマップ
hi-lock-auto-select-face 14.13 インタラクティブなハイライト
hi-lock-exclude-modes 14.13 インタラクティブなハイライト
hi-lock-file-patterns-policy 14.13 インタラクティブなハイライト
hide-ifdef-shadow 26.12.4 Cモードのその他のコマンド
highlight-nonselected-windows 11 マークとリージョン
HISTFILE, environment variable C.4.1 一般的な変数
history-delete-duplicates 8.5 ミニバッファーヒストリー
history-length 8.5 ミニバッファーヒストリー
holiday-bahai-holidays 31.13.2 休日のカスタマイズ
holiday-christian-holidays 31.13.2 休日のカスタマイズ
holiday-general-holidays 31.13.2 休日のカスタマイズ
holiday-hebrew-holidays 31.13.2 休日のカスタマイズ
holiday-islamic-holidays 31.13.2 休日のカスタマイズ
holiday-local-holidays 31.13.2 休日のカスタマイズ
holiday-oriental-holidays 31.13.2 休日のカスタマイズ
holiday-other-holidays 31.13.2 休日のカスタマイズ
holiday-solar-holidays 31.13.2 休日のカスタマイズ
HOME, environment variable C.4.1 一般的な変数
horizontal-scroll-bar-mode 21.12 スクロールバー
HOSTNAME, environment variable C.4.1 一般的な変数
hourglass-delay 14.23 ディスプレーのカスタマイズ
hs-hide-comments-when-hiding-all 26.7 Hideshowマイナーモード
hs-isearch-open 26.7 Hideshowマイナーモード
hs-special-modes-alist 26.7 Hideshowマイナーモード
hscroll-margin 14.4 水平スクロール
hscroll-step 14.4 水平スクロール

I
image-animate-loop 18.19 イメージファイルのvisit
image-auto-resize 18.19 イメージファイルのvisit
image-auto-resize-on-window-resize 18.19 イメージファイルのvisit
image-dired-external-viewer 30.18 Diredでのイメージとサムネイルの閲覧
image-use-external-converter 18.19 イメージファイルのvisit
imagemagick-enabled-types 18.19 イメージファイルのvisit
imagemagick-types-inhibit 18.19 イメージファイルのvisit
imenu-auto-rescan 26.2.3 Imenuとは
imenu-auto-rescan-maxout 26.2.3 Imenuとは
imenu-sort-function 26.2.3 Imenuとは
indent-tabs-mode 24.3 タブ vs. スペース
indent-tabs-mode (Fortran mode) 26.14.2.2 継続行
indicate-buffer-boundaries 14.15 バウンダリーの表示
indicate-empty-lines 14.16 不要なスペース
inferior-lisp-program 27.11 外部Lispの実行
INFOPATH, environment variable C.4.1 一般的な変数
inhibit-eol-conversion 22.6 コーディングシステムの認識
inhibit-iso-escape-detection 22.6 コーディングシステムの認識
inhibit-startup-buffer-menu C.1 動作引数
inhibit-startup-screen 5 Emacsの起動
initial-environment C.4 環境変数
initial-frame-alist 21.11 フレームパラメーター
initial-scratch-message 27.10 Lisp Interactionバッファー
input-method-highlight-flag 22.3 インプットメソッド
input-method-verbose-flag 22.3 インプットメソッド
insert-default-directory 8.2 ミニバッファーでのファイル名
interpreter-mode-alist 23.3 ファイルのモードを選択する
isearch-allow-prefix 15.1.6 インクリメンタル検索を終了させない
isearch-allow-scroll 15.1.6 インクリメンタル検索を終了させない
isearch-hide-immediately 15.12 必要に応じて検索を調整する
isearch-lazy-count 15.12 必要に応じて検索を調整する
isearch-lazy-highlight 15.12 必要に応じて検索を調整する
isearch-mode-map 15.1.5 インクリメンタル検索の特別な入力
isearch-resume-in-command-history 8.6 ミニバッファーでのコマンドの繰り返し
ispell-complete-word-dict 16.4 スペルのチェックと訂正
ispell-dictionary 16.4 スペルのチェックと訂正
ispell-local-dictionary 16.4 スペルのチェックと訂正
ispell-personal-dictionary 16.4 スペルのチェックと訂正
ispell-program-name 16.4 スペルのチェックと訂正

J
jdb-mode-hook 27.6.4 GUDのカスタマイズ
jit-lock-defer-time 14.1 スクロール

K
kept-new-versions 18.3.2.2 バックアップの自動削除
kept-old-versions 18.3.2.2 バックアップの自動削除
keyboard-coding-system 22.12 端末入出力にたいするコーディングシステム
kill-buffer-hook 19.4 バッファーのkill
kill-do-not-save-duplicates 12.1.4 killのオプション
kill-read-only-ok 12.1.4 killのオプション
kill-ring 12.2.1 killリング
kill-ring-max 12.2.1 killリング
kill-whole-line 12.1.2 行のkill
kmacro-ring-max 17.2 キーボードマクロリング

L
LANG, environment variable C.4.1 一般的な変数
large-file-warning-threshold 18.2 ファイルのvisit(訪問)
latex-block-names 25.11.2 LaTeX編集コマンド
latex-mode-hook 25.11.4 TeXモード、その
latex-run-command 25.11.3 TeX印刷コマンド
latin1-display 22.16 表示できない文字
lazy-count-prefix-format 15.12 必要に応じて検索を調整する
lazy-count-suffix-format 15.12 必要に応じて検索を調整する
lazy-highlight-initial-delay 15.12 必要に応じて検索を調整する
lazy-highlight-interval 15.12 必要に応じて検索を調整する
lazy-highlight-max-at-a-time 15.12 必要に応じて検索を調整する
LC_ALL, environment variable C.4.1 一般的な変数
LC_COLLATE, environment variable C.4.1 一般的な変数
LC_CTYPE, environment variable C.4.1 一般的な変数
LC_MESSAGES, environment variable C.4.1 一般的な変数
LC_MONETARY, environment variable C.4.1 一般的な変数
LC_NUMERIC, environment variable C.4.1 一般的な変数
LC_TIME, environment variable C.4.1 一般的な変数
line-move-visual 7.2 ポイント位置の変更
line-number-display-limit 14.18 モードラインのオプション
line-number-display-limit-width 14.18 モードラインのオプション
lisp-body-indent 26.3.3 Lispのインデントのカスタマイズ
lisp-indent-offset 26.3.3 Lispのインデントのカスタマイズ
lisp-interaction-mode-hook 26.1 プログラミング言語のためのメジャーモード
lisp-mode-hook 26.1 プログラミング言語のためのメジャーモード
list-colors-sort 14.9.1 カラー名
list-directory-brief-switches 18.8 ファイルディレクトリー
list-directory-verbose-switches 18.8 ファイルディレクトリー
list-matching-lines-default-context-lines 15.11 その他の検索およびループコマンド
list-matching-lines-jump-to-current-line 15.11 その他の検索およびループコマンド
load-dangerous-libraries 27.8 EmacsのためのLispコードによるライブラリー
load-path 27.8 EmacsのためのLispコードによるライブラリー
load-prefer-newer 27.8 EmacsのためのLispコードによるライブラリー
locale-charset-language-names 22.2 言語環境
locale-coding-system 22.10 プロセス間通信にたいするコーディングシステム
locale-language-names 22.2 言語環境
locale-preferred-coding-systems 22.2 言語環境
locate-command 30.16 Diredとfind
LOGNAME, environment variable C.4.1 一般的な変数
lpr-add-switches 40 ハードコピーの印刷
lpr-command (MS-DOS) G.9 MS-Windowsでの印刷
lpr-commands 40 ハードコピーの印刷
lpr-headers-switches 40 ハードコピーの印刷
lpr-headers-switches (MS-DOS) G.9 MS-Windowsでの印刷
lpr-printer-switch 40 ハードコピーの印刷
lpr-switches 40 ハードコピーの印刷
lpr-switches (MS-DOS) G.9 MS-Windowsでの印刷
ls-lisp-dirs-first G.4 MS-Windowsでのlsのエミュレーション
ls-lisp-emulation G.4 MS-Windowsでのlsのエミュレーション
ls-lisp-format-time-list G.4 MS-Windowsでのlsのエミュレーション
ls-lisp-ignore-case G.4 MS-Windowsでのlsのエミュレーション
ls-lisp-support-shell-wildcards G.4 MS-Windowsでのlsのエミュレーション
ls-lisp-UCA-like-collation G.4 MS-Windowsでのlsのエミュレーション
ls-lisp-use-insert-directory-program G.4 MS-Windowsでのlsのエミュレーション
ls-lisp-use-localized-time-format G.4 MS-Windowsでのlsのエミュレーション
ls-lisp-use-string-collate G.4 MS-Windowsでのlsのエミュレーション
ls-lisp-verbosity G.4 MS-Windowsでのlsのエミュレーション

M
magic-fallback-mode-alist 23.3 ファイルのモードを選択する
magic-mode-alist 23.3 ファイルのモードを選択する
MAIL, environment variable C.4.1 一般的な変数
mail-citation-hook 32.4.3 メールの引用
mail-default-headers 32.2 メールヘッダーフィールド
mail-dont-reply-to-names 33.10 返信の送信
mail-personal-alias-file 32.3 メールエイリアス
mail-signature 32.5 メール署名
mail-signature-file 32.5 メール署名
mail-user-agent 32.7 メール作成方法
major-mode 23.1 メジャーモード
make-backup-file-name-function 18.3.2.1 単一または番号つきバックアップ
make-backup-files 18.3.2 バックアップファイル
make-pointer-invisible 14.23 ディスプレーのカスタマイズ
Man-switches 26.6.2 man-pageの照会
mark-even-if-inactive 11.3 リージョンを操作する
mark-ring-max 11.4 マークリング
max-mini-window-height 8.3 ミニバッファーでの編集
maximum-scroll-margin 14.3 自動スクロール
menu-bar-mode 21.15 メニューバー
message-kill-buffer-on-exit 32.4.1 メールの送信
message-log-max 1.2 エコーエリア
message-mode-hook 32.4.4 メール、その他
message-send-hook 32.4.1 メールの送信
message-send-mail-function 32.4.1 メールの送信
message-setup-hook 32.4.4 メール、その他
message-signature 32.5 メール署名
message-signature-file 32.5 メール署名
MH, environment variable C.4.1 一般的な変数
midnight-hook 19.4 バッファーのkill
midnight-mode 19.4 バッファーのkill
minibuffer-eldef-shorten-default 8.1 ミニバッファーを使う
minibuffer-local-completion-map 49.3.4 ミニバッファーキーマップ
minibuffer-local-filename-completion-map 49.3.4 ミニバッファーキーマップ
minibuffer-local-filename-must-match-map 49.3.4 ミニバッファーキーマップ
minibuffer-local-map 49.3.4 ミニバッファーキーマップ
minibuffer-local-must-match-map 49.3.4 ミニバッファーキーマップ
minibuffer-local-ns-map 49.3.4 ミニバッファーキーマップ
minibuffer-prompt-properties 14.10 標準フェイス
mode-line-in-non-selected-windows 14.18 モードラインのオプション
mode-require-final-newline 18.3.3 ファイル保存のカスタマイズ
mode-specific-map 49.3.2 プレフィクスキーマップ
mouse-1-click-in-non-selected-windows 21.3 マウスで参照をフォローする
mouse-autoselect-window 20.3 他のウィンドウの使用
mouse-avoidance-mode 21.20 マウスの回避
mouse-drag-and-drop-region 21.14 ドラッグアンドドロップ
mouse-drag-and-drop-region-cut-when-buffers-differ 21.14 ドラッグアンドドロップ
mouse-drag-and-drop-region-show-cursor 21.14 ドラッグアンドドロップ
mouse-drag-and-drop-region-show-tooltip 21.14 ドラッグアンドドロップ
mouse-drag-copy-region 21.1 編集のためのマウスコマンド
mouse-highlight 21.3 マウスで参照をフォローする
mouse-scroll-min-lines 21.1 編集のためのマウスコマンド
mouse-wheel-flip-direction 21.1 編集のためのマウスコマンド
mouse-wheel-follow-mouse 21.1 編集のためのマウスコマンド
mouse-wheel-progressive-speed 21.1 編集のためのマウスコマンド
mouse-wheel-scroll-amount 21.1 編集のためのマウスコマンド
mouse-wheel-tilt-scroll 21.1 編集のためのマウスコマンド
mouse-yank-at-point 21.1 編集のためのマウスコマンド

N
NAME C.4.2 その他の変数
NAME, environment variable C.4.1 一般的な変数
network-security-level 36 ネットワークのセキュリティ
network-security-protocol-checks 36 ネットワークのセキュリティ
next-error-find-buffer-function 27.2 Compilationモード
next-error-highlight 27.2 Compilationモード
next-error-highlight-no-select 27.2 Compilationモード
next-line-add-newlines 7.2 ポイント位置の変更
next-screen-context-lines 14.1 スクロール
NNTPSERVER, environment variable C.4.1 一般的な変数
nobreak-char-display 14.19 テキストが表示される方法
normal-erase-is-backspace 51.1 DELで削除できない場合
nroff-mode-hook 25.13 Nroffモード
ns-alternate-modifier F.2.1 修飾キー
ns-auto-hide-menu-bar F.2.2 フレーム変数
ns-command-modifier F.2.1 修飾キー
ns-confirm-quit F.2.2 フレーム変数
ns-control-modifier F.2.1 修飾キー
ns-function-modifier F.2.1 修飾キー
ns-mwheel-line-height F.2.3 macOSのトラックパッドとマウスホイールの変数
ns-pop-up-frames F.3 macOSおよびGNUstepでのウィンドウシステムイベント
ns-right-alternate-modifier F.2.1 修飾キー
ns-right-command-modifier F.2.1 修飾キー
ns-right-control-modifier F.2.1 修飾キー
ns-standard-fontset-spec 22.14 フォントセットの定義
ns-use-mwheel-acceleration F.2.3 macOSのトラックパッドとマウスホイールの変数
ns-use-mwheel-momentum F.2.3 macOSのトラックパッドとマウスホイールの変数
ns-use-native-fullscreen F.2.2 フレーム変数
ns-use-proxy-icon F.2.2 フレーム変数
nsm-save-host-names 36 ネットワークのセキュリティ
nsm-settings-file 36 ネットワークのセキュリティ

O
open-paren-in-column-0-is-defun-start 26.2.1 左端の慣習
org-agenda-files 25.10.1 オーガナイザーとしてのOrg
org-publish-project-alist 25.10.2 オーサリングシステムとしてのOrg
org-todo-keywords 25.10.1 オーガナイザーとしてのOrg
ORGANIZATION, environment variable C.4.1 一般的な変数
outline-level 25.9.1 アウトラインのフォーマット
outline-minor-mode-prefix 25.9 Outlineモード
outline-mode-hook 25.9 Outlineモード
outline-regexp 25.9.1 アウトラインのフォーマット
overflow-newline-into-fringe 14.14 ウィンドウのフリンジ
overline-margin 14.23 ディスプレーのカスタマイズ

P
package-archive-priorities 48.3 パッケージのインストール
package-archives 48.3 パッケージのインストール
package-check-signature 48.3 パッケージのインストール
package-directory-list 48.4 パッケージのファイルとディレクトリー
package-enable-at-startup 48.3 パッケージのインストール
package-load-list 48.3 パッケージのインストール
package-menu-async 48.1 Package Menuバッファー
package-menu-hide-low-priority 48.3 パッケージのインストール
package-pinned-packages 48.3 パッケージのインストール
package-unsigned-archives 48.3 パッケージのインストール
package-user-dir 48.4 パッケージのファイルとディレクトリー
page-delimiter 25.4 ページ
paragraph-separate 25.3 パラグラフ
paragraph-start 25.3 パラグラフ
PATH, environment variable C.4.1 一般的な変数
pdb-mode-hook 27.6.4 GUDのカスタマイズ
perldb-mode-hook 27.6.4 GUDのカスタマイズ
picture-mode-hook 42 ピクチャーの編集
picture-tab-chars 42.3 Pictureモードでのタブ
plain-tex-mode-hook 25.11.4 TeXモード、その
PRELOAD_WINSOCK C.4.2 その他の変数
print-region-function (MS-DOS) G.9 MS-Windowsでの印刷
printer-name 40 ハードコピーの印刷
printer-name, (MS-DOS/MS-Windows) G.9 MS-Windowsでの印刷
prog-mode-hook 23.1 メジャーモード
ps-black-white-faces 40.2 PostScriptハードコピーにたいする変数
ps-font-family 40.2 PostScriptハードコピーにたいする変数
ps-font-info-database 40.2 PostScriptハードコピーにたいする変数
ps-font-size 40.2 PostScriptハードコピーにたいする変数
ps-landscape-mode 40.2 PostScriptハードコピーにたいする変数
ps-lpr-command 40.2 PostScriptハードコピーにたいする変数
ps-lpr-command (MS-DOS) G.9 MS-Windowsでの印刷
ps-lpr-switches 40.2 PostScriptハードコピーにたいする変数
ps-lpr-switches (MS-DOS) G.9 MS-Windowsでの印刷
ps-multibyte-buffer 40.2 PostScriptハードコピーにたいする変数
ps-number-of-columns 40.2 PostScriptハードコピーにたいする変数
ps-page-dimensions-database 40.2 PostScriptハードコピーにたいする変数
ps-paper-type 40.2 PostScriptハードコピーにたいする変数
ps-print-color-p 40.2 PostScriptハードコピーにたいする変数
ps-print-header 40.2 PostScriptハードコピーにたいする変数
ps-printer-name 40.2 PostScriptハードコピーにたいする変数
ps-printer-name (MS-DOS) G.9 MS-Windowsでの印刷
ps-use-face-background 40.2 PostScriptハードコピーにたいする変数
PWD, environment variable C.4.1 一般的な変数

Q
quail-activate-hook 22.3 インプットメソッド
query-replace-from-to-separator 15.10.4 問い合わせつき置換
query-replace-highlight 15.10.4 問い合わせつき置換
query-replace-lazy-highlight 15.10.4 問い合わせつき置換
query-replace-show-replacement 15.10.4 問い合わせつき置換
query-replace-skip-read-only 15.10.4 問い合わせつき置換

R
read-buffer-completion-ignore-case 8.4.5 補完オプション
read-file-name-completion-ignore-case 8.4.5 補完オプション
read-mail-command 32.7 メール作成方法
read-quoted-char-radix 7.1 テキストの挿入
recenter-positions 14.2 センタリング
recenter-redisplay 14.2 センタリング
recentf-mode 18.18 ファイル検索の便利な機能
regexp-search-ring-max 15.5 正規表現検索
register-preview-delay 13 レジスター
register-separator 13.2 レジスターにテキストを保存する
replace-lax-whitespace 15.10.3 置換コマンドとLaxマッチ
replace-regexp-lax-whitespace 15.10.3 置換コマンドとLaxマッチ
REPLYTO, environment variable C.4.1 一般的な変数
require-final-newline 18.3.3 ファイル保存のカスタマイズ
resize-mini-windows 8.3 ミニバッファーでの編集
revert-without-query 18.4 バッファーのリバート
rmail-automatic-folder-directives 33.7 外部ファイルへのメッセージのコピー
rmail-delete-after-output 33.7 外部ファイルへのメッセージのコピー
rmail-delete-message-hook 33.4 メッセージの削除
rmail-displayed-headers 33.13 メッセージの表示
rmail-edit-mode-hook 33.15 メッセージの編集
rmail-enable-mime 33.13 メッセージの表示
rmail-enable-mime-composing 33.10 返信の送信
rmail-file-coding-system 33.14 Rmailとコーディングシステム
rmail-file-name 33.1 Rmailの基本的な概念
rmail-highlighted-headers 33.13 メッセージの表示
rmail-ignored-headers 33.13 メッセージの表示
rmail-inbox-list 33.6 複数のRmailファイル
rmail-mail-new-frame 33.10 返信の送信
rmail-mbox-format 33.5 Rmailファイルとinbox
rmail-mime-prefer-html 33.13 メッセージの表示
rmail-mode-hook 33 Rmailでメールを読む
rmail-movemail-flags 33.19 リモートmailboxからのメールの取得
rmail-movemail-program 33.18 movemail program
rmail-movemail-search-path 33.18 movemail program
rmail-nonignored-headers 33.13 メッセージの表示
rmail-output-file-alist 33.7 外部ファイルへのメッセージのコピー
rmail-output-reset-deleted-flag 33.7 外部ファイルへのメッセージのコピー
rmail-preserve-inbox 33.5 Rmailファイルとinbox
rmail-primary-inbox-list 33.5 Rmailファイルとinbox
rmail-redisplay-summary 33.11.2 サマリーでの編集
rmail-remote-password 33.19 リモートmailboxからのメールの取得
rmail-remote-password-required 33.19 リモートmailboxからのメールの取得
rmail-retry-ignored-headers 33.10 返信の送信
rmail-secondary-file-directory 33.6 複数のRmailファイル
rmail-secondary-file-regexp 33.6 複数のRmailファイル
rmail-summary-line-count-flag 33.11.1 サマリーの作成
rmail-summary-scroll-between-messages 33.11.2 サマリーでの編集
rmail-summary-window-size 33.11.1 サマリーの作成

S
safe-local-eval-forms 49.2.4.2 安全なファイル変数
safe-local-variable-values 49.2.4.2 安全なファイル変数
save-abbrevs 29.5 abbrevの保存
save-interprogram-paste-before-kill 12.3.1 クリップボードを使う
save-some-buffers-default-predicate 18.3.1 ファイルを保存するコマンド
SAVEDIR, environment variable C.4.1 一般的な変数
scheme-mode-hook 26.1 プログラミング言語のためのメジャーモード
script-representative-chars 22.15 フォントセットの修正
scroll-all-mode 20.7 ウィンドウ処理のための便利な機能
scroll-bar-adjust-thumb-portion 21.12 スクロールバー
scroll-bar-height 21.12 スクロールバー
scroll-bar-mode 21.12 スクロールバー
scroll-bar-width 21.12 スクロールバー
scroll-conservatively 14.3 自動スクロール
scroll-down 14.1 スクロール
scroll-down-aggressively 14.3 自動スクロール
scroll-error-top-bottom 14.1 スクロール
scroll-margin 14.3 自動スクロール
scroll-preserve-screen-position 14.1 スクロール
scroll-step 14.3 自動スクロール
scroll-up 14.1 スクロール
scroll-up-aggressively 14.3 自動スクロール
sdb-mode-hook 27.6.4 GUDのカスタマイズ
search-exit-option 15.1.6 インクリメンタル検索を終了させない
search-highlight 15.12 必要に応じて検索を調整する
search-invisible 25.9.3 アウトライン表示コマンド
search-nonincremental-instead 15.12 必要に応じて検索を調整する
search-ring-max 15.1.2 インクリメンタル検索の繰り返し
search-slow-speed 15.12 必要に応じて検索を調整する
search-slow-window-lines 15.12 必要に応じて検索を調整する
search-upper-case 15.9 検索中のLaxマッチング
search-whitespace-regexp 15.9 検索中のLaxマッチング
select-active-regions 12.3.2 他のウィンドウアプリケーションにたいするカットアンドペースト
select-enable-clipboard 12.3.1 クリップボードを使う
select-enable-primary 12.3.1 クリップボードを使う
selective-display-ellipses 14.17 選択的な表示
send-mail-function 32.4.1 メールの送信
sendmail-coding-system 22.8 出力のためのコーディングシステムの選択
sentence-end 25.2 センテンス
sentence-end-double-space 25.2 センテンス
sentence-end-without-period 25.2 センテンス
server-auth-dir 39.1 TCP Emacs server
server-auth-key 39.1 TCP Emacs server
server-host 39.1 TCP Emacs server
server-kill-new-buffers 39.2 emacsclientの呼び出し
server-name 39 サーバーとしてのEmacsの使用
server-port 39.1 TCP Emacs server
server-temp-file-regexp 39.2 emacsclientの呼び出し
server-use-tcp 39.1 TCP Emacs server
server-window 39.2 emacsclientの呼び出し
set-language-environment-hook 22.2 言語環境
set-mark-command-repeat-pop 11.4 マークリング
sgml-xml-mode 25.12 SGMLモードとHTMLモード
SHELL, environment variable C.4.1 一般的な変数
shell-cd-regexp 38.6 ディレクトリーの追跡
shell-command-default-error-buffer 38.1 単一のシェルコマンド
shell-command-dont-erase-buffer 38.1 単一のシェルコマンド
shell-command-prompt-show-cwd 38.1 単一のシェルコマンド
shell-command-regexp 38.3 Shellモード
shell-completion-execonly 38.7 Shellモードのオプション
shell-completion-fignore 38.7 Shellモードのオプション
shell-file-name 38.1 単一のシェルコマンド
shell-popd-regexp 38.6 ディレクトリーの追跡
shell-prompt-pattern 38.4 Shellプロンプト
shell-pushd-regexp 38.6 ディレクトリーの追跡
show-paren-highlight-openparen 26.4.3 マッチするカッコ
show-paren-style 26.4.3 マッチするカッコ
show-paren-when-point-in-periphery 26.4.3 マッチするカッコ
show-paren-when-point-inside-paren 26.4.3 マッチするカッコ
show-trailing-whitespace 14.16 不要なスペース
slitex-mode-hook 25.11.4 TeXモード、その
small-temporary-file-directory 18.3.2 バックアップファイル
SMTPSERVER, environment variable C.4.1 一般的な変数
so-long-action 51.9 長い行
sort-fold-case 41 テキストのソート
sort-numeric-base 41 テキストのソート
split-height-threshold 20.6.1 display-bufferが機能する方法
split-width-threshold 20.6.1 display-bufferが機能する方法
split-window-keep-point 20.2 ウィンドウの分割
standard-fontset-spec 22.14 フォントセットの定義
standard-indent 25.14.5 Enrichedテキストのインデント
suggest-key-bindings 9 名前を指定してコマンドを実行する

T
tab-always-indent 24.4 インデントの便利な機能
tab-bar-close-tab-select 21.17 タブバー
tab-bar-new-tab-choice 21.17 タブバー
tab-bar-new-tab-to 21.17 タブバー
tab-bar-show 21.17 タブバー
tab-stop-list 24.2 タブストップ
tab-width 14.19 テキストが表示される方法
table-cell-horizontal-chars 25.15.1 テキストベーステーブルとは?
table-cell-intersection-char 25.15.1 テキストベーステーブルとは?
table-cell-vertical-char 25.15.1 テキストベーステーブルとは?
table-detect-cell-alignment 25.15.5 セルの位置調整
tags-case-fold-search 28.4.1.3 識別子の検索と置換
tags-file-name 28.4.3 タグテーブルの選択
tags-table-list 28.4.3 タグテーブルの選択
TEMP, environment variable C.4.1 一般的な変数
temp-buffer-max-height 20.6.2 編集不可バッファーの表示
temp-buffer-max-width 20.6.2 編集不可バッファーの表示
temporary-file-directory 18.3.2 バックアップファイル
TERM, environment variable C.4.1 一般的な変数
TERM, environment variable, and display bugs 52.4 バグレポートのためのチェックリスト
TERM, environment variable, in compilation mode 27.3 コンパイルのためのサブシェル
TERM, environment variable, in sub-shell 38.7 Shellモードのオプション
term-file-aliases 49.4.3 端末固有の初期化
term-file-prefix 49.4.3 端末固有の初期化
TERMCAP, environment variable C.4.1 一般的な変数
tex-bibtex-command 25.11.3 TeX印刷コマンド
tex-default-mode 25.11 TeXモード
tex-directory 25.11.3 TeX印刷コマンド
tex-dvi-print-command 25.11.3 TeX印刷コマンド
tex-dvi-view-command 25.11.3 TeX印刷コマンド
tex-main-file 25.11.3 TeX印刷コマンド
tex-mode-hook 25.11.4 TeXモード、その
tex-print-file-extension 25.11.3 TeX印刷コマンド
tex-run-command 25.11.3 TeX印刷コマンド
tex-shell-hook 25.11.4 TeXモード、その
tex-start-commands 25.11.3 TeX印刷コマンド
tex-start-options 25.11.3 TeX印刷コマンド
text-mode-hook 25.8 Textモード
timeclock-ask-before-exiting 31.12 時間間隔の加算
timeclock-file 31.12 時間間隔の加算
timeclock-mode-line-display 31.12 時間間隔の加算
TMP, environment variable C.4.1 一般的な変数
TMPDIR, environment variable C.4.1 一般的な変数
tool-bar-mode 21.16 ツールバー
tool-bar-style 21.16 ツールバー
tooltip-delay 21.19 ツールチップ
tooltip-frame-parameters 21.19 ツールチップ
tooltip-hide-delay 21.19 ツールチップ
tooltip-short-delay 21.19 ツールチップ
tooltip-x-offset 21.19 ツールチップ
tooltip-y-offset 21.19 ツールチップ
track-eol 7.2 ポイント位置の変更
tramp-histfile-override 38.5.1 Shellヒストリーリング
truncate-lines 14.21 行の切り詰め
truncate-partial-width-windows 20.2 ウィンドウの分割
tty-menu-open-use-tmm 1.4 メニューバー
tty-setup-hook 49.4.3 端末固有の初期化
TZ, environment variable C.4.1 一般的な変数

U
underline-minimum-offset 14.23 ディスプレーのカスタマイズ
undo-limit 16.1 Undo(取り消し)
undo-outer-limit 16.1 Undo(取り消し)
undo-strong-limit 16.1 Undo(取り消し)
unibyte-display-via-language-environment 22.17 Unibyte編集モード
uniquify-buffer-name-style 19.7.1 バッファー名を一意にする
use-dialog-box 21.18 ダイアログボックスの使用
use-file-dialog 21.18 ダイアログボックスの使用
USER, environment variable C.4.1 一般的な変数
user-full-name 32.2 メールヘッダーフィールド
user-mail-address 32.2 メールヘッダーフィールド
user-mail-address, in init file 49.4.2 initファイルの例
user-mail-address, initialization C.4.1 一般的な変数

V
vc-annotate-background-mode 28.1.6 古いリビジョンの調査と比較
vc-backend-header 28.1.12.4 バージョンコントロールヘッダーの挿入
vc-command-messages 28.1.13.1 一般的なオプション
vc-consult-headers 28.1.12.4 バージョンコントロールヘッダーの挿入
vc-cvs-global-switches 28.1.13.3 CVSに特有のオプション
vc-cvs-stay-local 28.1.13.3 CVSに特有のオプション
vc-diff-switches 28.1.6 古いリビジョンの調査と比較
vc-directory-exclusion-list 28.1.10.1 VC Directoryバッファー
vc-follow-symlinks 28.1.13.1 一般的なオプション
vc-handled-backends 28.1.13 VCのカスタマイズ
vc-log-mode-hook 28.1.4 Log Entryバッファーの機能
vc-log-show-limit 28.1.7 VC Change Log
vc-make-backup-files 28.1.13.1 一般的なオプション
vc-revert-show-diff 28.1.8 バージョンコントロール操作のアンドゥ
vc-static-header-alist 28.1.12.4 バージョンコントロールヘッダーの挿入
vc-suppress-confirm 28.1.13.1 一般的なオプション
version-control 18.3.2.1 単一または番号つきバックアップ
VERSION_CONTROL, environment variable C.4.1 一般的な変数
view-read-only 19.3 その他のバッファー操作
visible-bell 14.23 ディスプレーのカスタマイズ
visible-cursor 14.20 カーソルの表示
visual-order-cursor-movement 22.19 双方向の編集

W
w32-alt-is-meta G.6 MS-Windowsでのキーボードの使用方法
w32-apps-modifier G.6 MS-Windowsでのキーボードの使用方法
w32-capslock-is-shiftlock G.6 MS-Windowsでのキーボードの使用方法
w32-charset-info-alist G.10 MS-Windowsでのフォント指定
w32-enable-caps-lock G.6 MS-Windowsでのキーボードの使用方法
w32-enable-num-lock G.6 MS-Windowsでのキーボードの使用方法
w32-fixed-font-alist G.10 MS-Windowsでのフォント指定
w32-get-true-file-attributes G.3 MS-Windowsのファイル名
w32-grab-focus-on-raise G.11 その他のWindows固有の機能
w32-lwindow-modifier G.6 MS-Windowsでのキーボードの使用方法
w32-mouse-button-tolerance G.7 MS-Windowsでのマウスの使用方法
w32-non-USB-fonts G.10 MS-Windowsでのフォント指定
w32-pass-alt-to-system G.6 MS-Windowsでのキーボードの使用方法
w32-pass-extra-mouse-buttons-to-system G.7 MS-Windowsでのマウスの使用方法
w32-pass-lwindow-to-system G.6 MS-Windowsでのキーボードの使用方法
w32-pass-rwindow-to-system G.6 MS-Windowsでのキーボードの使用方法
w32-pipe-buffer-size G.8 Windows 9X/MEおよびWindows NT/2000/XP/Vista/7/8/10でのサブプロセス
w32-pipe-read-delay G.8 Windows 9X/MEおよびWindows NT/2000/XP/Vista/7/8/10でのサブプロセス
w32-quote-process-args G.8 Windows 9X/MEおよびWindows NT/2000/XP/Vista/7/8/10でのサブプロセス
w32-recognize-altgr G.6 MS-Windowsでのキーボードの使用方法
w32-rwindow-modifier G.6 MS-Windowsでのキーボードの使用方法
w32-scroll-lock-modifier G.6 MS-Windowsでのキーボードの使用方法
w32-standard-fontset-spec 22.14 フォントセットの定義
w32-swap-mouse-buttons G.7 MS-Windowsでのマウスの使用方法
w32-unicode-filenames 22.11 ファイル名にたいするコーディングシステム
w32-use-visible-system-caret G.11 その他のWindows固有の機能
w32-use-w32-font-dialog G.10 MS-Windowsでのフォント指定
what-cursor-show-names 7.9 カーソル位置の情報
which-func-modes 26.2.4 Which Functionモード
whitespace-big-indent-regexp 14.16 不要なスペース
whitespace-line-column 14.16 不要なスペース
whitespace-style 14.16 不要なスペース
window-divider-default-bottom-width 21.13 ウィンドウdivider
window-divider-default-places 21.13 ウィンドウdivider
window-divider-default-right-width 21.13 ウィンドウdivider
window-min-height 20.5 ウィンドウの削除とリサイズ
window-min-width 20.5 ウィンドウの削除とリサイズ
window-resize-pixelwise 20.2 ウィンドウの分割
winner-boring-buffers 20.7 ウィンドウ処理のための便利な機能
winner-boring-buffers-regexp 20.7 ウィンドウ処理のための便利な機能
winner-dont-bind-my-keys 20.7 ウィンドウ処理のための便利な機能
winner-ring-size 20.7 ウィンドウ処理のための便利な機能
write-region-inhibit-fsync 18.3.3 ファイル保存のカスタマイズ

X
x-gtk-file-dialog-help-text 21.18 ダイアログボックスの使用
x-gtk-show-hidden-files 21.18 ダイアログボックスの使用
x-gtk-use-system-tooltips 21.19 ツールチップ
x-mouse-click-focus-ignore-position 21.1 編集のためのマウスコマンド
x-select-enable-clipboard-manager 12.3.1 クリップボードを使う
x-select-request-type 22.10 プロセス間通信にたいするコーディングシステム
x-stretch-cursor 14.20 カーソルの表示
x-underline-at-descent-line 14.23 ディスプレーのカスタマイズ
xdb-mode-hook 27.6.4 GUDのカスタマイズ
xref-marker-ring-length 28.4.1.1 識別子の照合
xref-prompt-for-identifier 28.4.1.1 識別子の照合

Y
yank-pop-change-selection 12.3.1 クリップボードを使う

Jump to:   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y  

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Concept Index

Jump to:   #   $   (   *   -   .   /   7   8   ?   _   ~  
A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
Index Entry  Section

#
#, in auto-save file names 18.6.1 自動保存ファイル

$
$ in file names 18.1 ファイルの名前

(
( in leftmost column 26.2.1 左端の慣習

*
*Messages* buffer 1.2 エコーエリア

-
–/—/.-./.../. 47 ゲーム、その他の娯楽

.
.#, lock file names 18.3.4 同時編集からの保護
.dir-locals.el file 49.2.5 ディレクトリーごとのローカル変数
.emacs file 49.4 Emacs初期化ファイル
.mailrc file 32.3 メールエイリアス
.newsrc file 34.2 Gnusを起動したとき

/
// in file name 8.2 ミニバッファーでのファイル名

7
7z 18.14 ファイルアーカイブ

8
8-bit display 22.17 Unibyte編集モード
8-bit input 22.17 Unibyte編集モード

?
?’ in display 22.1 国際化文字セットのイントロダクション

_
_emacs init file, MS-Windows G.5 MS-WindowsでのHOMEディレクトリーと開始ディレクトリー

~
~, in names of backup files 18.3.2.1 単一または番号つきバックアップ
~/.authinfo file 49.5 永続的に認証情報を保つ
~/.authinfo.gpg file 49.5 永続的に認証情報を保つ
~/.config/emacs/init.el file 49.4 Emacs初期化ファイル
~/.emacs file 49.4 Emacs初期化ファイル
~/.emacs.d/%backup%~ 18.3.2.1 単一または番号つきバックアップ
~/.emacs.d/gtkrc file D.5 GTK+リソース
~/.gtkrc-2.0 file D.5 GTK+リソース
~/.netrc file 49.5 永続的に認証情報を保つ
~/.Xdefaults file D.1 Xリソース
~/.Xresources file D.1 Xリソース

A
A and B buffers (Emerge) 28.6.1 Emergeの概要
A- 49.3.7 修飾キー
abbrev file 29.5 abbrevの保存
Abbrev mode 29.1 abbrevの概念
abbrevs 29 abbrev(略語)
abnormal hook 49.2.2 フック
aborting recursive edit 50 中止と中断
accented characters 22.17 Unibyte編集モード
accessible portion 14.5 ナローイング
accumulating scattered text 12.4 テキストの追加
action options (command line) Appendix C Emacs呼び出しにたいするコマンドライン引数
activating the mark 11 マークとリージョン
active region 11 マークとリージョン
active text 10.10 アクティブテキストのヘルプとツールチップ
adaptive filling 25.6.4 適応型フィル
adding to the kill ring in Dired 30.19 その他のDiredの機能
addpm, MS-Windows installation program C.4.3 MS-Windowsのシステムレジストリー
adjust buffer face height 14.11 テキストのスケール
aggressive scrolling 14.3 自動スクロール
alarm clock 31.10.6 アポイントメント
alignment for comments 26.5.1 コメントコマンド
Alt key (MS-Windows) G.6 MS-Windowsでのキーボードの使用方法
Alt key invokes menu (Windows) G.6 MS-Windowsでのキーボードの使用方法
Alt key, serving as Meta 2 ユーザー入力の種類
Alt, modifier key 49.3.7 修飾キー
Alt-TAB vs M-TAB (MS-Windows) G.6 MS-Windowsでのキーボードの使用方法
ALTERNATE_EDITOR environment variable 39.3 emacsclientのオプション
AltGr key (MS-Windows) G.6 MS-Windowsでのキーボードの使用方法
ange-ftp 18.15 リモートファイル
animate 47 ゲーム、その他の娯楽
animated images 18.19 イメージファイルのvisit
anonymous FTP 18.15 リモートファイル
appending kills in the ring 12.2.3 killしたテキストの追加
appointment notification 31.10.6 アポイントメント
apropos 10.4 Apropos(適切な)
apropos search results, order by score 10.4 Apropos(適切な)
Arabic 22.2 言語環境
arc 18.14 ファイルアーカイブ
Archive mode 18.14 ファイルアーカイブ
arguments (command line) Appendix C Emacs呼び出しにたいするコマンドライン引数
arguments to commands 7.10 数引数
arrow keys 7.2 ポイント位置の変更
ASCII 2 ユーザー入力の種類
ASCII (language environment) 22.2 言語環境
ASCII art 25 人間の言語のためのコマンド
Asm mode 26.13 Asmモード
assembler mode 26.13 Asmモード
astronomical day numbers 31.9.1 サポートされるカレンダーシステム
attached frame (of speedbar) 21.9 スピードバーフレーム
attribute (Rmail) 33.8 ラベル
attributes of mode line, changing 14.18 モードラインのオプション
Auto Compression mode 18.13 圧縮ファイルへのアクセス
Auto Fill mode 25.6.1 Auto Fillモード
Auto Revert mode 18.5 自動リバートーバッファーを自動的に最新に保つ
Auto Save mode 18.6 自動保存-災害にたいする防御
auto-save for remote files 18.6.1 自動保存ファイル
autoload 27.8 EmacsのためのLispコードによるライブラリー
autoload Lisp libraries 49.4.2 initファイルの例
automatic scrolling 14.3 自動スクロール
automatic version backups 28.1.13.3 CVSに特有のオプション
avoiding mouse in the way of your typing 21.20 マウスの回避
Awk mode 26.1 プログラミング言語のためのメジャーモード
AWK mode 26.12 Cおよび関連するモード

B
back end (version control) 28.1.1.2 サポートされるバージョンコントロールシステム
back reference, in regexp 15.7 正規表現でのバックスラッシュ
back reference, in regexp replacement 15.10.2 正規表現の置換
background color 14.8 テキストのフェイス
background color, command-line argument C.7 ウィンドウカラーオプション
background for menus (X resource) D.2 EmacsにたいするXリソースの表
background mode, on xterm C.4.1 一般的な変数
background syntax highlighting 14.12 Font Lockモード
BACKSPACE vs DEL 51.1 DELで削除できない場合
backtrace 51.6 Emacsがクラッシュしたとき
backtrace for bug reports 52.4 バグレポートのためのチェックリスト
backup file 18.3.2 バックアップファイル
backup file names 18.3.2.1 単一または番号つきバックアップ
backup file names on MS-DOS G.12.4 MS-DOSでのファイル名
backup, and user-id 18.3.2.3 コピー vs. リネーム
backups for remote files 18.15 リモートファイル
Bahá’í calendar 31.9.1 サポートされるカレンダーシステム
balanced expression 26.4.1 対応が取れたカッコの式
balloon help 10.10 アクティブテキストのヘルプとツールチップ
base buffer 19.6 インダイレクトバッファー
base direction of paragraphs 22.19 双方向の編集
basic, completion style 8.4.4 補完候補が選択される方法
batch mode C.2 初期化オプション
battery status (on mode line) 14.18 モードラインのオプション
Bazaar 28.1.1.2 サポートされるバージョンコントロールシステム
Belarusian 22.2 言語環境
Bengali 22.2 言語環境
bidirectional editing 22.19 双方向の編集
binding 4 キーとコマンド
binding keyboard macros 17.5 キーボードマクロの命名と保存
binding keys 49.3.5 対話的なキーバインディングの変更
blank lines 7.7 空行
blank lines in programs 26.5.2 複数行のコメント
blinking cursor 14.20 カーソルの表示
blinking cursor disable, command-line argument C.12 その他のディスプレーオプション
body lines (Outline mode) 25.9.1 アウトラインのフォーマット
bookmark annotations 13.8 ブックマーク
bookmarks 13.8 ブックマーク
border color, command-line argument C.7 ウィンドウカラーオプション
borders (X Window System) C.9 内枠ボーダーと外枠ボーダー
boredom 47 ゲーム、その他の娯楽
bound branch (Bazaar VCS) 28.1.11.2 ブランチへ/からの変更のpull/push
brace in column zero and fontification 14.12 Font Lockモード
braces, moving across 26.4.2 カッコ構造の移動
branch (version control) 28.1.11 バージョンコントロールのブランチ
Brazilian Portuguese 22.2 言語環境
Browse-URL 46.3 URLのフォロー
bubbles 47 ゲーム、その他の娯楽
buffer contents 19 複数バッファーの使用
buffer definitions index 26.2.3 Imenuとは
buffer list, customizable 19.7.3 バッファーメニューのカスタマイズ
Buffer Menu 19.5 複数バッファーにたいする操作
buffer size display 14.18 モードラインのオプション
buffer size, maximum 19 複数バッファーの使用
buffer text garbled 51.4 テキスト内のゴミ
buffer-local hooks 49.2.2 フック
buffers 19 複数バッファーの使用
bug criteria 52.2 バグがあったとき
bug reporting 52.3 バグレポートの理解
bug reporting, checklist 52.4 バグレポートのためのチェックリスト
bug tracker 52.1 既存のバグレポートの既知の問題を読む
bugs 52 バグの報告
build details C.2 初期化オプション
building programs 27 プログラムのコンパイルとテスト
built-in package 48.1 Package Menuバッファー
Bulgarian 22.2 言語環境
Burmese 22.2 言語環境
butterfly 47 ゲーム、その他の娯楽
button-down events 49.3.10 マウスボタンのリバインド
buttons 21.3 マウスで参照をフォローする
buttons (customization buffer) 49.1.1 カスタマイズグループ
buttons at buffer position 25.14.3 フォーマット情報の編集
bypassing init and default.el file C.2 初期化オプション
byte code 27.8 EmacsのためのLispコードによるライブラリー
byte-compiling several files (in Dired) 30.7 ファイルにたいする操作
bzr 28.1.1.2 サポートされるバージョンコントロールシステム

C
C editing 26 プログラムの編集
C mode 26.12 Cおよび関連するモード
C++ class browser, tags 28.4.2 tagsテーブル
C++ mode 26.12 Cおよび関連するモード
C- 2 ユーザー入力の種類
cache of file names 18.17 ファイル名キャッシュ
calendar 31 カレンダーとダイアリー
calendar and HTML 31.5 カレンダーファイルの記述
calendar and LaTeX 31.5 カレンダーファイルの記述
calendar layout 31.13.1 カレンダーのカスタマイズ
calendar week numbers 31.13.1 カレンダーのカスタマイズ
calendar, first day of week 31.1.2 週、月、年の開始と終了
call Lisp functions, command-line argument C.1 動作引数
camel case 26.9 大文字小文字の混ざった単語
candle lighting times 31.13.10 sexpエントリーとFancy Diary表示
capitalizing words 25.7 大文字小文字変換コマンド
case conversion 25.7 大文字小文字変換コマンド
case folding in replace commands 15.10.3 置換コマンドとLaxマッチ
case folding in search 15.9 検索中のLaxマッチング
case in completion 8.4.5 補完オプション
case-sensitivity and completion 8.4.5 補完オプション
case-sensitivity and search 15.9 検索中のLaxマッチング
case-sensitivity and tags search 28.4.1.3 識別子の検索と置換
categories of characters 15.7 正規表現でのバックスラッシュ
cells, for text-based tables 25.15.1 テキストベーステーブルとは?
centering 25.6.2 明示的なフィルコマンド
centralized version control 28.1.1.6 リポジトリーにおける分散型と集中型
Cham 22.2 言語環境
change buffers 19.1 バッファーの作成と選択
change Emacs directory C.2 初期化オプション
change log 28.3 変更ログ
Change Log mode 28.3.1 変更ログコマンド
changes, undoing 16.1 Undo(取り消し)
changeset-based version control 28.1.1.5 バージョンコントロールに置ける変更セットベースとファイルベース
changing file group (in Dired) 30.7 ファイルにたいする操作
changing file owner (in Dired) 30.7 ファイルにたいする操作
changing file permissions (in Dired) 30.7 ファイルにたいする操作
changing file time (in Dired) 30.7 ファイルにたいする操作
char mode (terminal emulator) 38.8 Emacsの端末エミュレーター
character equivalence in search 15.9 検索中のLaxマッチング
character folding in replace commands 15.10.3 置換コマンドとLaxマッチ
character folding in search 15.9 検索中のLaxマッチング
character set (keyboard) 2 ユーザー入力の種類
character set of character at point 22.1 国際化文字セットのイントロダクション
character syntax 49.4.1 initファイルの構文
characters (in text) 14.19 テキストが表示される方法
characters in a certain charset 22.18 文字セット
characters which belong to a specific language 15.7 正規表現でのバックスラッシュ
characters with no font glyphs 14.19 テキストが表示される方法
characters, inserting by name or code-point 7.1 テキストの挿入
charsets 22.18 文字セット
checking out files 28.1.1.3 バージョンコントロールの概念
checking spelling 16.4 スペルのチェックと訂正
checking syntax 27.5 オンザフライで構文エラーを見つける
checklist before reporting a bug 52.4 バグレポートのためのチェックリスト
Chinese 22.2 言語環境
Chinese calendar 31.9.1 サポートされるカレンダーシステム
choosing a major mode 23.3 ファイルのモードを選択する
choosing a minor mode 23.3 ファイルのモードを選択する
ciphers 47 ゲーム、その他の娯楽
citing mail 32.4.3 メールの引用
CKJ characters 22.15 フォントセットの修正
class browser, C++ 28.4.2 tagsテーブル
Cleartype G.10 MS-Windowsでのフォント指定
click events 49.3.10 マウスボタンのリバインド
client frame 39.3 emacsclientのオプション
client-side fonts 21.8 フォント
clipboard 12.3.1 クリップボードを使う
clipboard manager 12.3.1 クリップボードを使う
clocking time 31.12 時間間隔の加算
close buffer 19.4 バッファーのkill
close file 19.4 バッファーのkill
codepage, MS-DOS G.12.6 MS-DOSでの国際化サポート
codepoint of a character 22.15 フォントセットの修正
coding standards 53.1 コーディング規約
coding systems 22.5 コーディングシステム
collision 18.3.4 同時編集からの保護
color emulation on black-and-white printers 40.2 PostScriptハードコピーにたいする変数
color name 14.9.1 カラー名
color of window, from command line C.7 ウィンドウカラーオプション
color scheme 49.1.7 カスタムテーマ
Column Number mode 14.18 モードラインのオプション
columns (and rectangles) 12.5 矩形領域(Rectangles)
columns (indentation) 24 インデント
columns, splitting 25.16 2列編集
Comint mode 38.3 Shellモード
comint-highlight-input face 38.2 対話的なサブシェル
comint-highlight-prompt face 38.2 対話的なサブシェル
command 4 キーとコマンド
command history 8.6 ミニバッファーでのコマンドの繰り返し
command line arguments Appendix C Emacs呼び出しにたいするコマンドライン引数
commands in *xref* buffers 28.4.1.2 *xref*バッファーで利用可能なコマンド
comments 26.5 コメントの操作
comments on customized settings 49.1.3 変数の変更
Common Lisp 27.11 外部Lispの実行
compare files (in Dired) 30.10 Diredでのファイル比較
comparing 3 files (diff3) 18.9 ファイルの比較
comparing files 18.9 ファイルの比較
compilation buffer, keeping point at end 27.1 Emacs下でのコンパイルの実行
compilation errors 27.1 Emacs下でのコンパイルの実行
Compilation mode 27.2 Compilationモード
compilation mode faces 27.2 Compilationモード
compilation under MS-DOS G.12.7 MS-DOSでのサブプロセス
complete key 3 キー
completion 8.4 補完
completion (Lisp symbols) 26.8 シンボル名の補完
completion (symbol names) 26.8 シンボル名の補完
completion alternative 8.4 補完
completion list 8.4.2 補完コマンド
completion style 8.4.4 補完候補が選択される方法
compose character 22.17 Unibyte編集モード
compressing files (in Dired) 30.7 ファイルにたいする操作
compression 18.13 圧縮ファイルへのアクセス
Conf mode 26.1 プログラミング言語のためのメジャーモード
confirming in the minibuffer 8.4.3 補完の終了
conflicts 28.1.11.3 ブランチのマージ
connecting to remote host 38.10 リモートホストのシェル
connection-local variables 49.2.6 ▼接続ごとのローカル変数
contents of a buffer 19 複数バッファーの使用
continuation line 7.8 継続行
contributing to Emacs 53 Emacs開発への貢献
Control 2 ユーザー入力の種類
control character 2 ユーザー入力の種類
control characters on display 14.19 テキストが表示される方法
converting text to upper or lower case 25.7 大文字小文字変換コマンド
Coptic calendar 31.9.1 サポートされるカレンダーシステム
copy 12.3 グラフィカルなディスプレーでのカットアンドペースト
copy/paste to/from primary selection (macOS) F.1 macOSおよびGNUstepでのEmacsの基本的な使い方
copying files 18.11 ファイルのコピー、命名、リネーム。
copying files (in Dired) 30.7 ファイルにたいする操作
copying text 12.2 yank
copyright assignment 53.2 著作権の割り当て
CORBA IDL mode 26.12 Cおよび関連するモード
core dump 51.6 Emacsがクラッシュしたとき
correcting spelling 16.4 スペルのチェックと訂正
CPerl mode 26.1 プログラミング言語のためのメジャーモード
crash report 51.6 Emacsがクラッシュしたとき
crashes 18.6 自動保存-災害にたいする防御
create a text-based table 25.15.2 テーブルの作成
creating files 18.2 ファイルのvisit(訪問)
creating frames 21.6 フレームの作成
Croatian 22.2 言語環境
cryptanalysis 47 ゲーム、その他の娯楽
CSSC 28.1.1.2 サポートされるバージョンコントロールシステム
CUA key bindings 12.6 CUAバインド
curly quotes 25.5 クォーテーションマーク
curly quotes, and terminal capabilities 14.19 テキストが表示される方法
curly quotes, inserting 7.1 テキストの挿入
current buffer 19 複数バッファーの使用
current function name in mode line 26.2.4 Which Functionモード
current message (Rmail) 33.1 Rmailの基本的な概念
current project 28.2 プロジェクトで作業する
cursor 1.1 ポイント
cursor color, command-line argument C.7 ウィンドウカラーオプション
cursor face 14.8 テキストのフェイス
cursor in non-selected windows 14.20 カーソルの表示
cursor location 7.9 カーソル位置の情報
cursor location, on MS-DOS G.2 テキストファイルとバイナリーファイル
cursor motion 7.2 ポイント位置の変更
cursor shape on MS-DOS G.12.3 MS-DOSでの表示
cursor, blinking 14.20 カーソルの表示
cursor, visual-order motion 22.19 双方向の編集
curved quotes 25.5 クォーテーションマーク
curved quotes, and terminal capabilities 14.19 テキストが表示される方法
curved quotes, inserting 7.1 テキストの挿入
custom themes 49.1.7 カスタムテーマ
custom themes, creating 49.1.8 カスタムテーマの作成
customizable variable 49.1 Easy Customizationインターフェース
customization 49 カスタマイズ
customization buffer 49.1 Easy Customizationインターフェース
customization groups 49.1.1 カスタマイズグループ
customization of menu face 14.10 標準フェイス
customizing faces 49.1.5 フェイスのカスタマイズ
customizing Lisp indentation 26.3.3 Lispのインデントのカスタマイズ
customizing variables 49.1.3 変数の変更
cut 12.3 グラフィカルなディスプレーでのカットアンドペースト
cut and paste Glossary
cutting text 12.1 削除とkill
cvs 28.1.10 VC Directoryモード
CVS 28.1.1.2 サポートされるバージョンコントロールシステム
CVS directory mode 28.1.10 VC Directoryモード
CWarn mode 26.12.4 Cモードのその他のコマンド
Cyrillic 22.2 言語環境
Czech 22.2 言語環境

D
daemon, Emacs 39 サーバーとしてのEmacsの使用
day of year 31.4 その他のカレンダーコマンド
daylight saving time 31.11 サマータイム
DBX 27.6 Emacs下でのデバッガーの実行
deactivating the mark 11 マークとリージョン
dead character 22.17 Unibyte編集モード
debbugs package 52.1 既存のバグレポートの既知の問題を読む
debuggers 27.6 Emacs下でのデバッガーの実行
debugging Emacs, tricks and techniques 52.4 バグレポートのためのチェックリスト
debugging X problems D.2 EmacsにたいするXリソースの表
decentralized version control 28.1.1.6 リポジトリーにおける分散型と集中型
decoding mail messages (Rmail) 33.14 Rmailとコーディングシステム
decoding non-ASCII keyboard input on X 22.10 プロセス間通信にたいするコーディングシステム
decrease buffer face height 14.11 テキストのスケール
decrypting files (in Dired) 30.7 ファイルにたいする操作
default argument 8.1 ミニバッファーを使う
default directory 8.2 ミニバッファーでのファイル名
default directory, of a buffer 18.1 ファイルの名前
default face 14.8 テキストのフェイス
default file name 18.1 ファイルの名前
default search mode 15.12 必要に応じて検索を調整する
default.el file, not loading C.2 初期化オプション
default.el, the default init file 49.4 Emacs初期化ファイル
defining keyboard macros 17 キーボードマクロ
defuns 26.2.2 defunの移動
DEL does not delete 51.1 DELで削除できない場合
DEL vs BACKSPACE 51.1 DELで削除できない場合
Delete Selection mode 11.3 リージョンを操作する
delete window 20.5 ウィンドウの削除とリサイズ
deleting auto-save files 30.4 大量のファイルに一度にフラグをつける
deleting blank lines 7.7 空行
deleting characters and lines 7.3 テキストの消去
deleting files (in Dired) 30.3 Diredでのファイルの削除について
deleting rows and column in text-based tables 25.15.6 テーブルの行と列
deleting some backup files 30.4 大量のファイルに一度にフラグをつける
deleting windows 20.5 ウィンドウの削除とリサイズ
deletion 12.1 削除とkill
deletion (of files) 18.12 その他のファイル操作
deletion (Rmail) 33.4 メッセージの削除
desktop 44 Emacsセッションの保存
desktop restore in daemon mode 44 Emacsセッションの保存
desktop shortcut, MS-Windows G.1 MS-WindowsでEmacsを開始する方法
deterministic build C.2 初期化オプション
Devanagari 22.2 言語環境
device for Emacs terminal I/O C.2 初期化オプション
dialog boxes 21.18 ダイアログボックスの使用
Dialog X Resources (Lucid widgets) D.3 Lucidのメニューとダイアログ
diary 31.10 ダイアリー
diary buffer 31.13.8 ダイアリーの表示
diary file 31.10.1 ダイアリーファイル
Diff mode 18.10 Diffモード
digest message 33.16 ダイジェストメッセージ
directional window selection 20.7 ウィンドウ処理のための便利な機能
directories in buffer names 19.7.1 バッファー名を一意にする
directory header lines 30.13 サブディレクトリー間の移動
directory listing 18.8 ファイルディレクトリー
directory listing on MS-DOS G.12.7 MS-DOSでのサブプロセス
directory name abbreviation 18.7 ファイルのエイリアス
directory tracking 38.6 ディレクトリーの追跡
directory where Emacs starts on MS-Windows G.1 MS-WindowsでEmacsを開始する方法
directory-local variables 49.2.5 ディレクトリーごとのローカル変数
Dired 30 Dired (ディレクトリーエディター)
Dired and version control 30.19 その他のDiredの機能
Dired sorting 30.15 Diredバッファーの更新
Dired sorting order, on MS-Windows/MS-DOS G.4 MS-Windowsでのlsのエミュレーション
Dired, and MS-Windows/MS-DOS G.4 MS-Windowsでのlsのエミュレーション
Dirtrack mode 38.6 ディレクトリーの追跡
disable window system C.2 初期化オプション
disabled command 49.3.11 コマンドの無効化
disabling remote files 18.15 リモートファイル
DISPLAY environment variable C.5 ディスプレー名の指定
display for Emacs frame C.2 初期化オプション
display line numbers 14.23 ディスプレーのカスタマイズ
display name (X Window System) C.5 ディスプレー名の指定
display of buffer size 14.18 モードラインのオプション
display of current line number 14.18 モードラインのオプション
display, incorrect 51.3 スクリーン上のゴミ
distributed version control 28.1.1.6 リポジトリーにおける分散型と集中型
DNS mode 26.1 プログラミング言語のためのメジャーモード
DocTeX mode 25.11 TeXモード
document viewer (DocView) 37 ドキュメントの閲覧
documentation string 10.2 キーのドキュメント
DocView mode 37 ドキュメントの閲覧
DOS applications, running from Emacs G.8 Windows 9X/MEおよびWindows NT/2000/XP/Vista/7/8/10でのサブプロセス
DOS codepages G.12.6 MS-DOSでの国際化サポート
DOS-style end-of-line display 22.6 コーディングシステムの認識
DOS-to-Unix conversion of files G.2 テキストファイルとバイナリーファイル
double clicks 49.3.10 マウスボタンのリバインド
double slash in file name 8.2 ミニバッファーでのファイル名
down events 49.3.10 マウスボタンのリバインド
downcase file names 30.9 Diredでのファイル名の変更
drag and drop 21.14 ドラッグアンドドロップ
drag and drop, Dired 30.19 その他のDiredの機能
drag events 49.3.10 マウスボタンのリバインド
drastic changes 18.4 バッファーのリバート
dribble file 52.4 バグレポートのためのチェックリスト
DSSSL mode 26.1 プログラミング言語のためのメジャーモード
dunnet 47 ゲーム、その他の娯楽
Dutch 22.2 言語環境
DVI file 37 ドキュメントの閲覧

E
early init file 49.4.6 早期初期化ファイル
Ebrowse 28.4.2 tagsテーブル
echo area 1.2 エコーエリア
echo area message 1.2 エコーエリア
echoing 1.2 エコーエリア
EDE (Emacs Development Environment) 28.5 Emacs開発環境
Edebug 52.4 バグレポートのためのチェックリスト
editable fields (customization buffer) 49.1.1 カスタマイズグループ
editing binary files 43 バイナリーファイルの編集
editing in Picture mode 42.1 Pictureモードでの基本的な編集
editing level, recursive 45 再帰編集レベル
EDITOR environment variable 39 サーバーとしてのEmacsの使用
eight-bit character set 22.1 国際化文字セットのイントロダクション
ElDoc mode 26.6.3 Emacs Lispドキュメントの照会
Electric Indent mode 24.4 インデントの便利な機能
Electric Pair mode 26.4.3 マッチするカッコ
Electric Quote mode 25.5 クォーテーションマーク
Eliza 47 ゲーム、その他の娯楽
Emacs as a server 39 サーバーとしてのEmacsの使用
Emacs Development Environment 28.5 Emacs開発環境
Emacs icon, a gnu C.11 アイコン
Emacs initialization file 49.4 Emacs初期化ファイル
Emacs Lisp package archive 48 Emacs Lispパッケージ
Emacs Lispモード 27.9 Emacs Lisp式の評価
emacs-internal, coding system 22.5 コーディングシステム
emacs22, completion style 8.4.4 補完候補が選択される方法
emacsclient 39 サーバーとしてのEmacsの使用
emacsclient invocation 39.2 emacsclientの呼び出し
emacsclient options 39.3 emacsclientのオプション
emacsclient, on MS-Windows G.1 MS-WindowsでEmacsを開始する方法
emacsclient.exe G.1 MS-WindowsでEmacsを開始する方法
emacsclientw.exe G.1 MS-WindowsでEmacsを開始する方法
emacs_backtrace.txt file, MS-Windows 51.6 Emacsがクラッシュしたとき
email 32 メールの送信
embedded widgets 46.2 埋め込みWebKitウィジェット
Emerge 28.6 Emergeでのファイルのマージ
emergency escape 51.8 緊急エスケープ
enabling Transient Mark mode temporarily 11.7 Transient Markモードを無効にする
encoding of characters 22 国際化文字セットのサポート
encrypted mails (reading in Rmail) 33.13 メッセージの表示
encrypting files (in Dired) 30.7 ファイルにたいする操作
encryption 36 ネットワークのセキュリティ
end-of-line convention, mode-line indication 1.3 モードライン
end-of-line conversion 22.5 コーディングシステム
end-of-line conversion on MS-DOS/MS-Windows G.2 テキストファイルとバイナリーファイル
English 22.2 言語環境
Enriched mode 25.14 Enrichedテキスト
enriched text 25.14 Enrichedテキスト
entering Emacs 5 Emacsの起動
entering passwords 8.7 パスワードの入力
environment variables C.4 環境変数
environment variables (macOS) F.1.1 環境変数の取得
environment variables for subshells 38.2 対話的なサブシェル
environment variables in file names 18.1 ファイルの名前
equivalent character sequences 15.9 検索中のLaxマッチング
erasing characters and lines 7.3 テキストの消去
error log 27.1 Emacs下でのコンパイルの実行
error message 1.2 エコーエリア
errors in init file C.2 初期化オプション
ESC replacing Meta key 2 ユーザー入力の種類
escape sequences in files 22.6 コーディングシステムの認識
escape-glyph face 14.19 テキストが表示される方法
ESHELL environment variable 38.2 対話的なサブシェル
Esperanto 22.2 言語環境
etags 28.4.2 tagsテーブル
etags program 28.4.2.2 タグテーブルの作成
Ethiopic 22.2 言語環境
Ethiopic calendar 31.9.1 サポートされるカレンダーシステム
European character sets 22.17 Unibyte編集モード
evaluate expression, command-line argument C.1 動作引数
evaluation, Emacs Lisp 27.9 Emacs Lisp式の評価
events on macOS F.3 macOSおよびGNUstepでのウィンドウシステムイベント
exit incremental search 15.1.1 インクリメンタル検索の基本
exiting 6 Emacsからのexit
exiting recursive edit 45 再帰編集レベル
expanding subdirectories in Dired 30.11 Diredでのサブディレクトリー
expansion (of abbrevs) 29 abbrev(略語)
expansion of C macros 26.12.4 Cモードのその他のコマンド
expansion of environment variables 18.1 ファイルの名前
expression 26.4.1 対応が取れたカッコの式
expunging (Rmail) 33.4 メッセージの削除

F
face at point 22.1 国際化文字セットのイントロダクション
face colors, setting 14.9.2 RGBトリプレット
faces 14.8 テキストのフェイス
faces for highlighting query replace 15.10.4 問い合わせつき置換
faces for highlighting search matches 15.1.1 インクリメンタル検索の基本
faces for mode lines 14.10 標準フェイス
faces for text-mode menus 14.10 標準フェイス
faces under MS-DOS G.12.3 MS-DOSでの表示
faces, customizing 49.1.5 フェイスのカスタマイズ
failed merges 18.9 ファイルの比較
Feedmail 32.4.1 メールの送信
FFAP minor mode 46.5 ポイント位置のファイルやURLを開く
fido mode 19.7.2 素早いミニバッファーの選択
file archives 18.14 ファイルアーカイブ
file comparison (in Dired) 30.10 Diredでのファイル比較
file database (locate) 30.16 Diredとfind
file dates 18.3.4 同時編集からの保護
file directory 18.8 ファイルディレクトリー
file local variables 49.2.4 ファイル内のローカル変数
file locking 18.3.4 同時編集からの保護
file management 30 Dired (ディレクトリーエディター)
file modes 18.12 その他のファイル操作
file name caching 18.17 ファイル名キャッシュ
file names 18.1 ファイルの名前
file names on MS-Windows G.3 MS-Windowsのファイル名
file names under MS-DOS G.12.4 MS-DOSでのファイル名
file names under Windows 95/NT G.12.4 MS-DOSでのファイル名
file names with non-ASCII characters 22.11 ファイル名にたいするコーディングシステム
file names, invalid characters on MS-Windows G.3 MS-Windowsのファイル名
file names, quote special characters 18.16 ファイル名のクォート
file notifications 18.5 自動リバートーバッファーを自動的に最新に保つ
file ownership, and backup 18.3.2.3 コピー vs. リネーム
file permissions 18.12 その他のファイル操作
file selection dialog 18.2 ファイルのvisit(訪問)
file selection dialog, how to disable 21.18 ダイアログボックスの使用
file shadows 18.3.5 ファイルのシャドーイング
file truenames 18.7 ファイルのエイリアス
file version in change log entries 28.3.1 変更ログコマンド
file, warning when size is large 18.2 ファイルのvisit(訪問)
file-based version control 28.1.1.5 バージョンコントロールに置ける変更セットベースとファイルベース
file-name completion, on MS-Windows G.3 MS-Windowsのファイル名
file-name encoding, MS-Windows 22.11 ファイル名にたいするコーディングシステム
files 18 ファイルの処理
files, visiting and saving 18.2 ファイルのvisit(訪問)
filesets 18.20 ファイルセット
filesets, VC 28.1.3 バージョンコントロール下での基本的な編集
fill prefix 25.6.3 フィルプレフィクス
filling text 25.6 テキストのフィル
find 18.17 ファイル名キャッシュ
find and Dired 30.16 Diredとfind
find definition of symbols 28.4.1.1 識別子の照合
find Info manual by its file name 10.8 その他のヘルプコマンド
find references to symbols 28.4.1.1 識別子の照合
finder 10.6 パッケージのキーワード検索
finding file at point 46.5 ポイント位置のファイルやURLを開く
finding files containing regexp matches (in Dired) 30.6 Diredでのマークとフラグ
finding strings within text 15 検索と置換
firewall, and accessing remote files 18.15 リモートファイル
fixing incorrectly decoded mail messages 33.14 Rmailとコーディングシステム
flagging files (in Dired) 30.3 Diredでのファイルの削除について
flagging many files for deletion (in Dired) 30.4 大量のファイルに一度にフラグをつける
flex, completion style 8.4.4 補完候補が選択される方法
Flyspell mode 16.4 スペルのチェックと訂正
folding editing 25.9.5 折り畳み編集
Follow mode 14.7 Followモード
font antialiasing (MS Windows) G.10 MS-Windowsでのフォント指定
font backend selection (MS-Windows) G.10 MS-Windowsでのフォント指定
font for menus (X resource) D.2 EmacsにたいするXリソースの表
Font Lock mode 14.12 Font Lockモード
font lookup, MS-Windows G.10 MS-Windowsでのフォント指定
font name (X Window System) C.6 フォント指定オプション
font of character at point 22.1 国際化文字セットのイントロダクション
font properties (MS Windows) G.10 MS-Windowsでのフォント指定
font scripts (MS Windows) G.10 MS-Windowsでのフォント指定
font specification (MS Windows) G.10 MS-Windowsでのフォント指定
font Unicode subranges (MS Windows) G.10 MS-Windowsでのフォント指定
fontconfig 21.8 フォント
fonts 21.8 フォント
fonts and faces 49.1.5 フェイスのカスタマイズ
fonts for PostScript printing 40.2 PostScriptハードコピーにたいする変数
fonts for various scripts 22.13 フォントセット
fonts, emulating under MS-DOS G.12.3 MS-DOSでの表示
fonts, how to ignore 22.15 フォントセットの修正
fontsets 22.13 フォントセット
fontsets, modifying 22.15 フォントセットの修正
foreground color, command-line argument C.7 ウィンドウカラーオプション
foreground for menus (X resource) D.2 EmacsにたいするXリソースの表
formfeed character 25.4 ページ
Fortran 77 and Fortran 90, 95, 2003, 2008 26.14 Fortranモード
Fortran continuation lines 26.14.2.2 継続行
Fortran fixed form and free form 26.14 Fortranモード
Fortran mode 26.14 Fortranモード
fortune cookies 32.6 アミューズメント
forwarding a message 33.10 返信の送信
frame 1 画面の構成
frame focus policy, MS-Windows G.11 その他のWindows固有の機能
frame size under MS-DOS G.12.3 MS-DOSでの表示
frame size, specifying default 21.11 フレームパラメーター
frame title, command-line argument C.10 フレームタイトル
frames 21 フレームとグラフィカルなディスプレー
frames on MS-DOS G.12.3 MS-DOSでの表示
French 22.2 言語環境
French Revolutionary calendar 31.9.1 サポートされるカレンダーシステム
fringe face 14.10 標準フェイス
fringes 14.14 ウィンドウのフリンジ
fringes, and continuation lines 7.8 継続行
fringes, and unused line indication 14.16 不要なスペース
fringes, for debugging 27.6.5.2 Sourceバッファー
FTP 18.15 リモートファイル
fullheight, command-line argument C.8 ウィンドウのサイズと位置にたいするオプション
fullscreen, command-line argument C.8 ウィンドウのサイズと位置にたいするオプション
fullwidth, command-line argument C.8 ウィンドウのサイズと位置にたいするオプション
function key 49.3.1 キーマップ
function, move to beginning or end 26.2.2 defunの移動
future history for file names 8.5 ミニバッファーヒストリー

G
games 47 ゲーム、その他の娯楽
gamma correction (X resource) D.2 EmacsにたいするXリソースの表
garbled display 51.3 スクリーン上のゴミ
garbled text 51.4 テキスト内のゴミ
gateway, and remote file access with ange-ftp 18.15 リモートファイル
GDB 27.6 Emacs下でのデバッガーの実行
GDB User Interface layout 27.6.5.1 GDBのユーザーインターフェースのレイアウト
geometry of Emacs window C.8 ウィンドウのサイズと位置にたいするオプション
geometry, command-line argument C.8 ウィンドウのサイズと位置にたいするオプション
Georgian 22.2 言語環境
German 22.2 言語環境
getting help with keys 7.6 ヘルプ
Ghostscript, use for PostScript printing G.9 MS-Windowsでの印刷
git 28.1.1.2 サポートされるバージョンコントロールシステム
Glasses mode 26.9 大文字小文字の混ざった単語
Global Auto Revert mode 18.5 自動リバートーバッファーを自動的に最新に保つ
global keymap 49.3.1 キーマップ
global mark 12.6 CUAバインド
global mark ring 11.5 グローバルマークリング
global substitution 15.10 置換コマンド
glossary Glossary
glyphless characters 14.19 テキストが表示される方法
glyphless-char face 14.19 テキストが表示される方法
gnu.emacs.help’ newsgroup 54 GNU Emacsにたいして助けを得る方法
Gnus 34 GnusによるEメールとUsenetニュース
GNUstep Appendix F EmacsとmacOS / GNUstep
Go Moku 47 ゲーム、その他の娯楽
Goto Address mode 46.4 URLのアクティブ化
graphic characters 7.1 テキストの挿入
Greek 22.2 言語環境
Gregorian calendar 31.9 他のカレンダーとの間の変換
growing minibuffer 8.3 ミニバッファーでの編集
GTK font pattern 21.8 フォント
GTK+ resources D.5 GTK+リソース
GTK+ styles D.5.4 GTK+スタイル
GTK+ widget classes D.5.3 EmacsでのGTK+ウィジェット名
GTK+ widget names D.5.2 GTK+ウィジェット名
GTK+ widget names in Emacs D.5.3 EmacsでのGTK+ウィジェット名
GUD interaction buffer 27.6.2 デバッガーの操作
GUD library 27.6 Emacs下でのデバッガーの実行
GUD Tooltip mode 27.6.2 デバッガーの操作
guillemets 25.5 クォーテーションマーク
Gujarati 22.2 言語環境
gzip 18.13 圧縮ファイルへのアクセス

H
H- 49.3.7 修飾キー
Han 22 国際化文字セットのサポート
handwriting 40.1 PostScriptのハードコピー
Hangul 22 国際化文字セットのサポート
hard links (creation) 18.11 ファイルのコピー、命名、リネーム。
hard links (in Dired) 30.7 ファイルにたいする操作
hard links (visiting) 18.7 ファイルのエイリアス
hard newline 25.14.2 ハード改行とソフト改行
hardcopy 40 ハードコピーの印刷
header (TeX mode) 25.11.3 TeX印刷コマンド
header line (Dired) 30.13 サブディレクトリー間の移動
header-line face 14.10 標準フェイス
header-line-highlight face 14.10 標準フェイス
headers (of mail message) 32.2 メールヘッダーフィールド
heading lines (Outline mode) 25.9.1 アウトラインのフォーマット
Hebrew 22.2 言語環境
Hebrew calendar 31.9.1 サポートされるカレンダーシステム
height of minibuffer 8.3 ミニバッファーでの編集
height of the horizontal scroll bar 21.12 スクロールバー
help 10 ヘルプ
help in using Emacs 54 GNU Emacsにたいして助けを得る方法
help text, in GTK+ file chooser 21.18 ダイアログボックスの使用
help, viewing web pages 10.5 ヘルプモードのコマンド
help-gnu-emacs’ mailing list 54 GNU Emacsにたいして助けを得る方法
hex editing 43 バイナリーファイルの編集
Hexl mode 43 バイナリーファイルの編集
hg 28.1.1.2 サポートされるバージョンコントロールシステム
Hi Lock mode 14.13 インタラクティブなハイライト
hidden files, in GTK+ file chooser 21.18 ダイアログボックスの使用
Hide-ifdef mode 26.12.4 Cモードのその他のコマンド
Hideshow mode 26.7 Hideshowマイナーモード
hiding details in Dired 30.19 その他のDiredの機能
hiding subdirectories (Dired) 30.14 サブディレクトリーを隠す
Highlight Changes mode 14.13 インタラクティブなハイライト
highlight current line 14.20 カーソルの表示
highlighting by matching 14.13 インタラクティブなハイライト
highlighting lines of text 14.13 インタラクティブなハイライト
highlighting matching parentheses 26.4.3 マッチするカッコ
highlighting phrase 14.13 インタラクティブなハイライト
highlighting region 11.7 Transient Markモードを無効にする
highlighting symbol at point 14.13 インタラクティブなハイライト
Hindi 22 国際化文字セットのサポート
history of commands 8.6 ミニバッファーでのコマンドの繰り返し
history of minibuffer input 8.5 ミニバッファーヒストリー
history reference 38.5.3 Shellヒストリーの参照
holiday forms 31.13.2 休日のカスタマイズ
holidays 31.6 休日
HOME directory on MS-Windows G.5 MS-WindowsでのHOMEディレクトリーと開始ディレクトリー
home directory shorthand 8.2 ミニバッファーでのファイル名
HOME directory under MS-DOS G.12.4 MS-DOSでのファイル名
homoglyph face 14.19 テキストが表示される方法
hook 49.2.2 フック
Horizontal Scroll Bar 21.12 スクロールバー
Horizontal Scroll Bar mode 21.12 スクロールバー
horizontal scrolling 14.4 水平スクロール
hourglass pointer display 14.23 ディスプレーのカスタマイズ
HTML mode 25.12 SGMLモードとHTMLモード
hungry deletion (C Mode) 26.12.3 Cの欲張りな削除機能
hunk, diff 18.10 Diffモード
Hyper (under MS-DOS) G.12.1 MS-DOSでのキーボードの使用方法
Hyper, modifier key 49.3.7 修飾キー
hyperlink 10.5 ヘルプモードのコマンド
hyperlinks 21.3 マウスで参照をフォローする

I
iCalendar support 31.10.7 ダイアリーエントリーのインポートとエクスポート
Icomplete mode 19.7.2 素早いミニバッファーの選択
Icon mode 26.1 プログラミング言語のためのメジャーモード
iconifying 6 Emacsからのexit
icons (X Window System) C.11 アイコン
icons, toolbar 21.16 ツールバー
identifier, finding definition of 28.4.1.1 識別子の照合
IDL mode 26.12 Cおよび関連するモード
ignore font 22.15 フォントセットの修正
ignored file names, in completion 8.4.5 補完オプション
image animation 18.19 イメージファイルのvisit
image-dired 30.18 Diredでのイメージとサムネイルの閲覧
image-dired mode 30.18 Diredでのイメージとサムネイルの閲覧
ImageMagick support 18.19 イメージファイルのvisit
images, viewing 18.19 イメージファイルのvisit
IMAP mailboxes 33.19 リモートmailboxからのメールの取得
in-situ subdirectory (Dired) 30.11 Diredでのサブディレクトリー
inbox file 33.5 Rmailファイルとinbox
incorrect fontification 14.12 Font Lockモード
increase buffer face height 14.11 テキストのスケール
incremental search 15.1 インクリメンタル検索
incremental search, edit search string 15.1.2 インクリメンタル検索の繰り返し
incremental search, exiting 15.1.1 インクリメンタル検索の基本
incremental search, go to first or last occurrence 15.1.5 インクリメンタル検索の特別な入力
incremental search, help on special keys 15.1.5 インクリメンタル検索の特別な入力
incremental search, input method interference 22.3 インプットメソッド
indentation 24 インデント
indentation for comments 26.5.1 コメントコマンド
indentation for programs 26.3 プログラムのインデント
index of buffer definitions 26.2.3 Imenuとは
indirect buffer 19.6 インダイレクトバッファー
indirect buffers and outlines 25.9.4 複数ビューによるアウトラインの閲覧
inferior process 27.1 Emacs下でのコンパイルの実行
inferior processes under MS-DOS G.12.7 MS-DOSでのサブプロセス
Info 10.8 その他のヘルプコマンド
init file 49.4 Emacs初期化ファイル
init file .emacs on MS-Windows G.5 MS-WindowsでのHOMEディレクトリーと開始ディレクトリー
init file, default name under MS-DOS G.12.4 MS-DOSでのファイル名
init file, not loading C.2 初期化オプション
initial options (command line) Appendix C Emacs呼び出しにたいするコマンドライン引数
initials, completion style 8.4.4 補完候補が選択される方法
input event 2 ユーザー入力の種類
input item, isearch 15.1.1 インクリメンタル検索の基本
input methods 22.3 インプットメソッド
input methods, X D.2 EmacsにたいするXリソースの表
input with the keyboard 2 ユーザー入力の種類
insert file contents, command-line argument C.1 動作引数
insert Unicode character 7.1 テキストの挿入
inserted subdirectory (Dired) 30.11 Diredでのサブディレクトリー
inserting blank lines 7.7 空行
inserting matching parentheses 26.4.3 マッチするカッコ
inserting rows and columns in text-based tables 25.15.6 テーブルの行と列
insertion 7.1 テキストの挿入
INSIDE_EMACS environment variable 38.2 対話的なサブシェル
Integrated development environment 28.5 Emacs開発環境
interactive highlighting 14.13 インタラクティブなハイライト
interactively edit search string 15.1.2 インクリメンタル検索の繰り返し
internal border width, command-line argument C.9 内枠ボーダーと外枠ボーダー
international characters in .emacs 49.4.5 initファイル内の非ASCII文字
international files from DOS/Windows systems 22.5 コーディングシステム
international scripts 22 国際化文字セットのサポート
international support (MS-DOS) G.12.6 MS-DOSでの国際化サポート
Internet search 15.3 単語検索
Intlfonts for PostScript printing 40.2 PostScriptハードコピーにたいする変数
Intlfonts package, installation 22.13 フォントセット
invisible lines 25.9 Outlineモード
invisible text, and query-replace 15.10.4 問い合わせつき置換
invisible text, searching for 15.1.5 インクリメンタル検索の特別な入力
invocation (command line arguments) Appendix C Emacs呼び出しにたいするコマンドライン引数
invoking Emacs from Windows Explorer G.1 MS-WindowsでEmacsを開始する方法
IPA 22.2 言語環境
isearch 15.1 インクリメンタル検索
isearch face 15.1.1 インクリメンタル検索の基本
isearch input item 15.1.1 インクリメンタル検索の基本
isearch multiple buffers 15.11 その他の検索およびループコマンド
isearch multiple files 15.11 その他の検索およびループコマンド
isearch-fail face 15.1.4 インクリメンタル検索でのエラー
Islamic calendar 31.9.1 サポートされるカレンダーシステム
ISO commercial calendar 31.9.1 サポートされるカレンダーシステム
ISO Latin character sets 22.17 Unibyte編集モード
iso-ascii library 22.17 Unibyte編集モード
iso-transl library 22.17 Unibyte編集モード
ispell program 16.4 スペルのチェックと訂正
Italian 22.2 言語環境

J
Japanese 22.2 言語環境
jar 18.14 ファイルアーカイブ
Java class archives 18.14 ファイルアーカイブ
Java mode 26.12 Cおよび関連するモード
Javascript mode 26.1 プログラミング言語のためのメジャーモード
JDB 27.6 Emacs下でのデバッガーの実行
Julian calendar 31.9.1 サポートされるカレンダーシステム
Julian day numbers 31.9.1 サポートされるカレンダーシステム
just-in-time (JIT) font-lock 14.12 Font Lockモード
justification 25.6.2 明示的なフィルコマンド
justification in text-based tables 25.15.5 セルの位置調整
justification style 25.14.6 Enrichedテキストの位置調整

K
Kannada 22.2 言語環境
Kerberos POP3 authentication 33.19 リモートmailboxからのメールの取得
key 3 キー
key bindings 49.3 キーバインディングのカスタマイズ
key rebinding, permanent 49.3.6 initファイル内でのキーのリバインド
key rebinding, this session 49.3.5 対話的なキーバインディングの変更
key sequence 3 キー
keyboard input 2 ユーザー入力の種類
keyboard macro 17 キーボードマクロ
keyboard macros, in registers 13.7 キーボードマクロのレジスター
keyboard shortcuts Glossary
keyboard, MS-Windows G.6 MS-Windowsでのキーボードの使用方法
keymap 49.3.1 キーマップ
keypad 49.3.8 ファンクションキーのリバインド
keypad keys (MS-Windows) G.6 MS-Windowsでのキーボードの使用方法
keys stolen by window manager 2 ユーザー入力の種類
keys, reserved 49.3 キーバインディングのカスタマイズ
Khmer 22.2 言語環境
kill DOS application G.8 Windows 9X/MEおよびWindows NT/2000/XP/Vista/7/8/10でのサブプロセス
kill ring 12.2 yank
killing buffers 19.4 バッファーのkill
killing characters and lines 7.3 テキストの消去
killing Emacs 6 Emacsからのexit
killing expressions 26.4.1 対応が取れたカッコの式
killing rectangular areas of text 12.5 矩形領域(Rectangles)
killing text 12.1 削除とkill
killing unsaved buffers 19.4 バッファーのkill
kinsoku line-breaking rules 25.6.1 Auto Fillモード
Korean 22.2 言語環境

L
label (Rmail) 33.8 ラベル
language environment, automatic selection on MS-DOS G.12.6 MS-DOSでの国際化サポート
language environments 22.2 言語環境
Lao 22.2 言語環境
LaTeX mode 25.11 TeXモード
Latin 22.2 言語環境
Latin-1 TeX encoding 25.11.4 TeXモード、その
Latvian 22.2 言語環境
lax search 15.9 検索中のLaxマッチング
lax space matching in replace commands 15.10.3 置換コマンドとLaxマッチ
lax space matching in search 15.9 検索中のLaxマッチング
lazy highlighting customizations 15.12 必要に応じて検索を調整する
lazy search highlighting 15.1.2 インクリメンタル検索の繰り返し
lazy-highlight face 15.12 必要に応じて検索を調整する
lazy-highlight face, in replace 15.10.4 問い合わせつき置換
leaving Emacs 6 Emacsからのexit
libraries 27.8 EmacsのためのLispコードによるライブラリー
Life 47 ゲーム、その他の娯楽
line endings 22.5 コーディングシステム
line mode (terminal emulator) 38.8 Emacsの端末エミュレーター
line number commands 7.9 カーソル位置の情報
line number display 14.18 モードラインのオプション
line spacing (X resource) D.2 EmacsにたいするXリソースの表
line spacing, command-line argument C.12 その他のディスプレーオプション
line truncation 14.21 行の切り詰め
line truncation, and fringes 7.8 継続行
line wrapping 7.8 継続行
line-number face 14.23 ディスプレーのカスタマイズ
lines, highlighting 14.13 インタラクティブなハイライト
links 21.3 マウスで参照をフォローする
links (customization buffer) 49.1.1 カスタマイズグループ
Lisp character syntax 49.4.1 initファイルの構文
Lisp editing 26 プログラムの編集
Lisp files byte-compiled by XEmacs 27.8 EmacsのためのLispコードによるライブラリー
Lisp object syntax 49.4.1 initファイルの構文
Lisp string syntax 49.4.1 initファイルの構文
Lisp symbol completion 26.8 シンボル名の補完
lisp-indent-function property 26.3.3 Lispのインデントのカスタマイズ
Lispモード 27.11 外部Lispの実行
list commands 26.4.2 カッコ構造の移動
listing current buffers 19.2 既存のバッファーを一覧する
listing system fonts 21.8 フォント
Lithuanian 22.2 言語環境
load init file of another user C.2 初期化オプション
load path for Emacs Lisp 27.8 EmacsのためのLispコードによるライブラリー
loading Lisp code 27.8 EmacsのためのLispコードによるライブラリー
loading Lisp libraries automatically 49.4.2 initファイルの例
loading Lisp libraries, command-line argument C.1 動作引数
loading several files (in Dired) 30.7 ファイルにたいする操作
local keymap 49.3.3 ローカルキーマップ
local variables 49.2.3 ローカル変数
local variables in files 49.2.4 ファイル内のローカル変数
local variables, for all files in a directory 49.2.5 ディレクトリーごとのローカル変数
local variables, for all remote connections 49.2.6 ▼接続ごとのローカル変数
locale, date format 18.3.6 タイムスタンプの自動更新
locales 22.2 言語環境
location of point 7.9 カーソル位置の情報
locking (CVS) 28.1.13.3 CVSに特有のオプション
locking files 18.3.4 同時編集からの保護
locking, non-strict (RCS) 28.1.13.2 RCSとSCCSにたいするオプション
locking-based version 28.1.1.4 バージョンコントロールにおけるマージベースとロックベース
locus 27.2 Compilationモード
Log Edit mode 28.1.4 Log Entryバッファーの機能
log File, types of 28.1.1.7 ログファイルのタイプ
logging keystrokes 52.4 バグレポートのためのチェックリスト
logical order 22.19 双方向の編集
long file names in DOS box under Windows 95/NT G.12.4 MS-DOSでのファイル名
long lines 51.9 長い行
looking for a subject in documentation 10 ヘルプ
lpr usage under MS-DOS G.9 MS-Windowsでの印刷
LRM 22.19 双方向の編集
ls emulation G.4 MS-Windowsでのlsのエミュレーション
Lucid Widget X Resources D.3 Lucidのメニューとダイアログ
lzh 18.14 ファイルアーカイブ

M
M- 2 ユーザー入力の種類
M-TAB vs Alt-TAB (MS-Windows) G.6 MS-Windowsでのキーボードの使用方法
M4 mode 26.1 プログラミング言語のためのメジャーモード
Macintosh Appendix F EmacsとmacOS / GNUstep
Macintosh end-of-line conversion 22.5 コーディングシステム
macOS Appendix F EmacsとmacOS / GNUstep
macro expansion in C 26.12.4 Cモードのその他のコマンド
mail 32 メールの送信
mail (on mode line) 14.18 モードラインのオプション
mail aliases 32.3 メールエイリアス
MAIL environment variable 33.5 Rmailファイルとinbox
Mail mode 32.7 メール作成方法
mail signature 32.5 メール署名
mail-composition methods 32.7 メール作成方法
Mailclient 32.4.1 メールの送信
MAILHOST environment variable 33.19 リモートmailboxからのメールの取得
mailrc file 32.3 メールエイリアス
main border width, command-line argument C.9 内枠ボーダーと外枠ボーダー
major modes 23.1 メジャーモード
make 27.1 Emacs下でのコンパイルの実行
Makefile mode 26.1 プログラミング言語のためのメジャーモード
making pictures out of text characters 42 ピクチャーの編集
Malayalam 22.2 言語環境
man page 26.6.2 man-pageの照会
man pages, and local file variables 49.2.4.1 ファイル変数の指定
manipulating paragraphs 25.3 パラグラフ
manipulating sentences 25.2 センテンス
manipulating text 25 人間の言語のためのコマンド
manual pages, on MS-DOS/MS-Windows 26.6.2 man-pageの照会
manual version backups 28.1.13.3 CVSに特有のオプション
manuals, included 10.8 その他のヘルプコマンド
mark 11 マークとリージョン
mark rectangle 12.5 矩形領域(Rectangles)
mark ring 11.4 マークリング
marking executable files (in Dired) 30.6 Diredでのマークとフラグ
marking many files (in Dired) 30.6 Diredでのマークとフラグ
marking sections of text 11.2 テキストオブジェクトをマークするコマンド
marking subdirectories (in Dired) 30.6 Diredでのマークとフラグ
marking symbolic links (in Dired) 30.6 Diredでのマークとフラグ
match (face name) 15.11 その他の検索およびループコマンド
matching parentheses 26.4.3 マッチするカッコ
matching parenthesis and braces, moving to 26.4.2 カッコ構造の移動
maximized, command-line argument C.8 ウィンドウのサイズと位置にたいするオプション
maximum buffer size exceeded, error message 18.2 ファイルのvisit(訪問)
Mayan calendar 31.13.3 マヤ暦からの変換
Mayan calendar round 31.13.3 マヤ暦からの変換
Mayan calendars 31.9.1 サポートされるカレンダーシステム
Mayan haab calendar 31.13.3 マヤ暦からの変換
Mayan long count 31.13.3 マヤ暦からの変換
Mayan tzolkin calendar 31.13.3 マヤ暦からの変換
mbox files 33.5 Rmailファイルとinbox
memory full 51.5 メモリー不足
menu bar 1.4 メニューバー
menu bar (X resource) D.2 EmacsにたいするXリソースの表
menu bar access using keyboard 1.4 メニューバー
menu bar appearance 14.10 標準フェイス
menu bar mode 21.15 メニューバー
menu face, no effect if customized 14.10 標準フェイス
Menu X Resources (Lucid widgets) D.3 Lucidのメニューとダイアログ
Menu X Resources (Motif widgets) D.4 MotifメニューのXリソース
Mercurial 28.1.1.2 サポートされるバージョンコントロールシステム
merge buffer (Emerge) 28.6.1 Emergeの概要
merge mail from file (Rmail) 33.6 複数のRmailファイル
merges, failed 18.9 ファイルの比較
merging changes 28.1.11.3 ブランチのマージ
merging files 28.6 Emergeでのファイルのマージ
merging-based version 28.1.1.4 バージョンコントロールにおけるマージベースとロックベース
message 32 メールの送信
Message mode 32.4 メールコマンド
Message mode for sending mail 32.7 メール作成方法
message number (Rmail) 33.1 Rmailの基本的な概念
messages saved from echo area 1.2 エコーエリア
META 2 ユーザー入力の種類
Meta (under MS-DOS) G.12.1 MS-DOSでのキーボードの使用方法
Meta commands and words 25.1 単語
Metafont mode 26.1 プログラミング言語のためのメジャーモード
MH mail interface 32.7 メール作成方法
Microsoft Office file 37 ドキュメントの閲覧
Microsoft Windows Appendix G EmacsとMicrosoft Windows/MS-DOS
Midnight mode 19.4 バッファーのkill
MIME 32.4.4 メール、その他
MIME messages (Rmail) 33.13 メッセージの表示
minibuffer 8 ミニバッファー
minibuffer confirmation 8.4.3 補完の終了
minibuffer defaults for file names 8.5 ミニバッファーヒストリー
Minibuffer Electric Default mode 8.1 ミニバッファーを使う
minibuffer history 8.5 ミニバッファーヒストリー
minibuffer history, searching 15.1.7 ミニバッファーの検索
minibuffer keymaps 49.3.4 ミニバッファーキーマップ
minibuffer-prompt face 14.10 標準フェイス
minimizing 6 Emacsからのexit
minimizing a frame at startup C.11 アイコン
minor mode keymap 49.3.3 ローカルキーマップ
minor modes 23.2 マイナーモード
mistakes, correcting 16 タイプミスを訂正するコマンド
mode commands for minor modes 23.2 マイナーモード
mode hook 23.1 メジャーモード
mode hook, and major modes 26.1 プログラミング言語のためのメジャーモード
mode line 1.3 モードライン
mode line (MS-DOS) G.12.6 MS-DOSでの国際化サポート
mode line, 3D appearance 14.18 モードラインのオプション
mode line, mouse 21.5 モードラインのマウスコマンド
mode, Abbrev 29.1 abbrevの概念
mode, archive 18.14 ファイルアーカイブ
mode, Auto Compression 18.13 圧縮ファイルへのアクセス
mode, Auto Fill 25.6.1 Auto Fillモード
mode, Auto Revert 18.5 自動リバートーバッファーを自動的に最新に保つ
mode, Auto Save 18.6 自動保存-災害にたいする防御
mode, AWK 26.12 Cおよび関連するモード
mode, C 26.12 Cおよび関連するモード
mode, C++ 26.12 Cおよび関連するモード
mode, Column Number 14.18 モードラインのオプション
mode, Comint 38.3 Shellモード
mode, Compilation 27.2 Compilationモード
mode, CORBA IDL 26.12 Cおよび関連するモード
mode, Delete Selection 11.3 リージョンを操作する
mode, Dirtrack 38.6 ディレクトリーの追跡
mode, display-fill-column-indicator 14.15 バウンダリーの表示
mode, DocTeX 25.11 TeXモード
mode, DocView 37 ドキュメントの閲覧
mode, Electric Indent 24.4 インデントの便利な機能
mode, Electric Quote 25.5 クォーテーションマーク
mode, Emacs Lisp 27.9 Emacs Lisp式の評価
mode, Enriched 25.14 Enrichedテキスト
mode, Flyspell 16.4 スペルのチェックと訂正
mode, Follow 14.7 Followモード
mode, Font Lock 14.12 Font Lockモード
mode, Fortran 26.14 Fortranモード
mode, Glasses 26.9 大文字小文字の混ざった単語
mode, Global Auto Revert 18.5 自動リバートーバッファーを自動的に最新に保つ
mode, Goto Address 46.4 URLのアクティブ化
mode, GUD Tooltip 27.6.2 デバッガーの操作
mode, Hexl 43 バイナリーファイルの編集
mode, Hideshow 26.7 Hideshowマイナーモード
mode, HTML 25.12 SGMLモードとHTMLモード
mode, Java 26.12 Cおよび関連するモード
mode, LaTeX 25.11 TeXモード
mode, Lisp 27.11 外部Lispの実行
mode, Log Edit 28.1.4 Log Entryバッファーの機能
mode, Mail 32.7 メール作成方法
mode, major 23.1 メジャーモード
mode, Menu Bar 21.15 メニューバー
mode, Message 32.4 メールコマンド
mode, Minibuffer Electric Default 8.1 ミニバッファーを使う
mode, minor 23.2 マイナーモード
mode, Mouse Wheel 21.1 編集のためのマウスコマンド
mode, MSB 19.7.3 バッファーメニューのカスタマイズ
mode, nXML 25.12 SGMLモードとHTMLモード
mode, Objective C 26.12 Cおよび関連するモード
mode, Occur 15.11 その他の検索およびループコマンド
mode, Occur Edit 15.11 その他の検索およびループコマンド
mode, Org 25.10 Orgモード
mode, Outline 25.9 Outlineモード
mode, Overwrite 23.2 マイナーモード
mode, Paragraph-Indent Text 25.8 Textモード
mode, Pike 26.12 Cおよび関連するモード
mode, Scheme 27.11 外部Lispの実行
mode, Scroll Bar 21.12 スクロールバー
mode, Scroll-all 20.7 ウィンドウ処理のための便利な機能
mode, Semantic 26.10 Semanticとは
mode, SGML 25.12 SGMLモードとHTMLモード
mode, Shell 38.3 Shellモード
mode, SliTeX 25.11 TeXモード
mode, Tab Bar 21.17 タブバー
mode, tar 18.14 ファイルアーカイブ
mode, Term 38.9 Termモード
mode, TeX 25.11 TeXモード
mode, Text 25.8 Textモード
mode, Thumbs 18.19 イメージファイルのvisit
mode, Tool Bar 21.16 ツールバー
mode, Transient Mark 11.7 Transient Markモードを無効にする
mode, View 14.6 Viewモード
mode, Visual Line 14.22 Visual Lineモード
mode, Whitespace 14.16 不要なスペース
mode, Window Divider 21.13 ウィンドウdivider
mode, Winner 20.7 ウィンドウ処理のための便利な機能
mode, XML 25.12 SGMLモードとHTMLモード
mode-line face 14.10 標準フェイス
mode-line-buffer-id face 14.10 標準フェイス
mode-line-highlight face 14.10 標準フェイス
mode-line-inactive face 14.10 標準フェイス
modes for editing programs 49.2.2 フック
modes for programming languages 26.1 プログラミング言語のためのメジャーモード
modification dates 18.3.6 タイムスタンプの自動更新
modified (buffer) 18.2 ファイルのvisit(訪問)
modifier keys 2 ユーザー入力の種類
modifier keys (macOS) F.1 macOSおよびGNUstepでのEmacsの基本的な使い方
modifier keys, and key rebinding 49.3.7 修飾キー
Modula2 mode 26.1 プログラミング言語のためのメジャーモード
module verification C.2 初期化オプション
moon, phases of 31.8 月の位相
Morse code 47 ゲーム、その他の娯楽
Motif Widget X Resources D.4 MotifメニューのXリソース
motion commands, during incremental search 15.1.6 インクリメンタル検索を終了させない
mouse avoidance 21.20 マウスの回避
mouse button events 49.3.10 マウスボタンのリバインド
mouse buttons (what they do) 21.1 編集のためのマウスコマンド
mouse on mode line 21.5 モードラインのマウスコマンド
mouse pointer 14.23 ディスプレーのカスタマイズ
mouse pointer color, command-line argument C.7 ウィンドウカラーオプション
mouse support 21.22 テキスト端末でのマウスの使用
mouse support under MS-DOS G.12.2 MS-DOSでびマウスの使用方法
mouse wheel 21.1 編集のためのマウスコマンド
Mouse Wheel minor mode 21.1 編集のためのマウスコマンド
mouse, and MS-Windows G.7 MS-Windowsでのマウスの使用方法
mouse, dragging 21.1 編集のためのマウスコマンド
mouse, selecting text using 21.1 編集のためのマウスコマンド
mouse, set number of buttons G.12.2 MS-DOSでびマウスの使用方法
move to beginning or end of function 26.2.2 defunの移動
movemail 33.19 リモートmailboxからのメールの取得
movemail program 33.18 movemail program
movement 7.2 ポイント位置の変更
moving files (in Dired) 30.7 ファイルにたいする操作
moving inside the calendar 31.1 カレンダーでの移動
moving point 7.2 ポイント位置の変更
moving text 12.2 yank
moving the cursor 7.2 ポイント位置の変更
MS-DOS end-of-line conversion 22.5 コーディングシステム
MS-DOS peculiarities G.12 EmacsとMS-DOS
MS-Windows codepages G.12.6 MS-DOSでの国際化サポート
MS-Windows keyboard shortcuts G.6 MS-Windowsでのキーボードの使用方法
MS-Windows, and primary selection 12.3.2 他のウィンドウアプリケーションにたいするカットアンドペースト
MS-Windows, Emacs peculiarities Appendix G EmacsとMicrosoft Windows/MS-DOS
MSB mode 19.7.3 バッファーメニューのカスタマイズ
MULE Glossary
multibyte characters 22 国際化文字セットのサポート
multiple displays 21.10 複数ディスプレー
multiple source file search and replace 28.4.1.3 識別子の検索と置換
multiple views of outline 25.9.4 複数ビューによるアウトラインの閲覧
multiple windows in Emacs 20 複数ウィンドウ
multiple-buffer isearch 15.11 その他の検索およびループコマンド
multiple-file isearch 15.11 その他の検索およびループコマンド
Multipurpose Internet Mail Extensions 32.4.4 メール、その他
Multithreaded debugging in GDB 27.6.5.8 マルチスレッドのデバッグ

N
names of backup files 18.3.2.1 単一または番号つきバックアップ
narrowing 14.5 ナローイング
narrowing, and line number display 14.18 モードラインのオプション
net use’, and printing on MS-Windows G.9 MS-Windowsでの印刷
network security manager 36 ネットワークのセキュリティ
networked printers (MS-Windows) G.9 MS-Windowsでの印刷
newline 7.1 テキストの挿入
newlines, hard and soft 25.14.2 ハード改行とソフト改行
newsreader 34 GnusによるEメールとUsenetニュース
Next Error Follow mode 27.2 Compilationモード
NFS and quitting 50 中止と中断
nil Glossary
no-conversion, coding system 22.5 コーディングシステム
nobreak-space face 14.19 テキストが表示される方法
non-ASCII characters in .emacs 49.4.5 initファイル内の非ASCII文字
non-ASCII keys, binding 49.4.5 initファイル内の非ASCII文字
non-breaking hyphen 14.19 テキストが表示される方法
non-breaking space 14.19 テキストが表示される方法
non-greedy regexp matching 15.6 正規表現の構文
non-integral number of lines in a window 14.18 モードラインのオプション
non-selected windows, mode line appearance 14.18 モードラインのオプション
Non-stop debugging in GDB 27.6.5.8 マルチスレッドのデバッグ
non-strict locking (RCS) 28.1.13.2 RCSとSCCSにたいするオプション
nonincremental search 15.2 非インクリメンタル検索
normal hook 49.2.2 フック
nroff 25.13 Nroffモード
NSA 32.6 アミューズメント
NSM 36 ネットワークのセキュリティ
number lines in a buffer 14.23 ディスプレーのカスタマイズ
numeric arguments 7.10 数引数
nXML mode 25.12 SGMLモードとHTMLモード

O
Objective C mode 26.12 Cおよび関連するモード
obsolete command 9 名前を指定してコマンドを実行する
Occur Edit mode 15.11 その他の検索およびループコマンド
Occur mode 15.11 その他の検索およびループコマンド
octal escapes 14.19 テキストが表示される方法
Octave mode 26.1 プログラミング言語のためのメジャーモード
omer count 31.13.10 sexpエントリーとFancy Diary表示
OPascal mode 26.1 プログラミング言語のためのメジャーモード
open file 18.2 ファイルのvisit(訪問)
open-parenthesis in leftmost column 26.2.1 左端の慣習
OpenDocument file 37 ドキュメントの閲覧
operating on files in Dired 30.7 ファイルにたいする操作
operations on a marked region 11.3 リージョンを操作する
options (command line) Appendix C Emacs呼び出しにたいするコマンドライン引数
Org agenda 25.10.1 オーガナイザーとしてのOrg
Org exporting 25.10.2 オーサリングシステムとしてのOrg
Org mode 25.10 Orgモード
organizer 25.10 Orgモード
Oriya 22.2 言語環境
out of memory 51.5 メモリー不足
outer border width, command-line argument C.9 内枠ボーダーと外枠ボーダー
Outline mode 25.9 Outlineモード
outline with multiple views 25.9.4 複数ビューによるアウトラインの閲覧
overlays at character position 25.14.3 フォーマット情報の編集
override character terminal color support C.7 ウィンドウカラーオプション
overscrolling 21.12 スクロールバー
overwrapped search 15.1.2 インクリメンタル検索の繰り返し
Overwrite mode 23.2 マイナーモード

P
Package 48 Emacs Lispパッケージ
Package archive 48 Emacs Lispパッケージ
package directory 48.4 パッケージのファイルとディレクトリー
package file 48.4 パッケージのファイルとディレクトリー
package menu 48.1 Package Menuバッファー
package requirements 48.3 パッケージのインストール
package security 48.3 パッケージのインストール
package signing 48.3 パッケージのインストール
package status 48.2 パッケージのステータス
pages 25.4 ページ
paging in Term mode 38.9 Termモード
paragraph, base direction 22.19 双方向の編集
Paragraph-Indent Text mode 25.8 Textモード
paragraphs 25.3 パラグラフ
parasha, weekly 31.13.10 sexpエントリーとFancy Diary表示
parentheses, displaying matches 26.4.3 マッチするカッコ
parentheses, moving across 26.4.2 カッコ構造の移動
parenthesis in column zero and fontification 14.12 Font Lockモード
parenthetical groupings 26.4.2 カッコ構造の移動
partial completion 8.4.4 補完候補が選択される方法
partial-completion, completion style 8.4.4 補完候補が選択される方法
paste 12.3 グラフィカルなディスプレーでのカットアンドペースト
pasting 12.2 yank
patches, applying 18.10 Diffモード
patches, editing 18.10 Diffモード
patches, sending 52.5 GNU Emacsへのパッチの送付
PCL-CVS 28.1.10 VC Directoryモード
PDB 27.6 Emacs下でのデバッガーの実行
PDF file 37 ドキュメントの閲覧
per-buffer variables 49.2.3 ローカル変数
per-connection local variables 49.2.6 ▼接続ごとのローカル変数
per-directory local variables 49.2.5 ディレクトリーごとのローカル変数
Perl mode 26.1 プログラミング言語のためのメジャーモード
Perldb 27.6 Emacs下でのデバッガーの実行
Persian 22.2 言語環境
Persian calendar 31.9.1 サポートされるカレンダーシステム
phases of the moon 31.8 月の位相
phrase, highlighting 14.13 インタラクティブなハイライト
Picture mode and rectangles 42.4 Pictureモードの矩形領域コマンド
pictures 42 ピクチャーの編集
Pike mode 26.12 Cおよび関連するモード
pinning Emacs to Windows task bar G.1 MS-WindowsでEmacsを開始する方法
planner 25.10 Orgモード
point 1.1 ポイント
point location 7.9 カーソル位置の情報
point location, on MS-DOS G.2 テキストファイルとバイナリーファイル
Polish 22.2 言語環境
Pong game 47 ゲーム、その他の娯楽
POP3 mailboxes 33.19 リモートmailboxからのメールの取得
position and size of Emacs frame C.8 ウィンドウのサイズと位置にたいするオプション
PostScript file 37 ドキュメントの閲覧
PostScript mode 26.1 プログラミング言語のためのメジャーモード
prefix argument commands, during incremental search 15.1.6 インクリメンタル検索を終了させない
prefix arguments 7.10 数引数
prefix key 3 キー
preprocessor highlighting 26.12.4 Cモードのその他のコマンド
pretty-printer 26.3 プログラムのインデント
prevent commands from exiting incremental search 15.1.6 インクリメンタル検索を終了させない
preview of registers 13 レジスター
primary Rmail file 33.1 Rmailの基本的な概念
primary selection 12.3.2 他のウィンドウアプリケーションにたいするカットアンドペースト
primary selection, when active region changes 11.1 マークのセット
printing 40 ハードコピーの印刷
printing character 14.19 テキストが表示される方法
printing files (in Dired) 30.7 ファイルにたいする操作
Printing package 40.3 印刷のためのパッケージ
printing under MS-DOS G.12.7 MS-DOSでのサブプロセス
Prog mode 49.2.2 フック
program building 27 プログラムのコンパイルとテスト
program editing 26 プログラムの編集
project back-end 28.2 プロジェクトで作業する
project root 28.2 プロジェクトで作業する
projects 28.2 プロジェクトで作業する
Prolog mode 26.1 プログラミング言語のためのメジャーモード
prompt 8.1 ミニバッファーを使う
prompt, shell 38.4 Shellプロンプト
PS file 37 ドキュメントの閲覧
Punjabi 22.2 言語環境
puzzles 47 ゲーム、その他の娯楽
Python mode 26.1 プログラミング言語のためのメジャーモード

Q
query replace 15.10.4 問い合わせつき置換
query-replace face 15.10.4 問い合わせつき置換
quitting 50 中止と中断
quitting (in search) 15.1.4 インクリメンタル検索でのエラー
quitting Emacs 6 Emacsからのexit
quitting on MS-DOS G.12.1 MS-DOSでのキーボードの使用方法
Quotation marks 25.5 クォーテーションマーク
quoting 7.1 テキストの挿入
quoting file names 18.16 ファイル名のクォート

R
rar 18.14 ファイルアーカイブ
raw bytes 22.1 国際化文字セットのイントロダクション
raw-text, coding system 22.5 コーディングシステム
RCS 28.1.1.2 サポートされるバージョンコントロールシステム
read-only buffer 19.3 その他のバッファー操作
read-only text, killing 12.1.4 killのオプション
reading mail 33 Rmailでメールを読む
rebinding keys, permanently 49.3.6 initファイル内でのキーのリバインド
rebinding keys, this session 49.3.5 対話的なキーバインディングの変更
rebinding major mode keys 49.3.6 initファイル内でのキーのリバインド
rebinding mouse buttons 49.3.10 マウスボタンのリバインド
rebinding non-ASCII keys 49.4.5 initファイル内の非ASCII文字
recovering crashed session 51.7 クラッシュ後のリカバリー
rectangle 12.5 矩形領域(Rectangles)
rectangle highlighting 12.6 CUAバインド
rectangles and Picture mode 42.4 Pictureモードの矩形領域コマンド
rectangular region 12.5 矩形領域(Rectangles)
recursive copying 30.7 ファイルにたいする操作
recursive deletion 30.3 Diredでのファイルの削除について
recursive editing level 45 再帰編集レベル
recursive editing, cannot exit 51.2 再帰編集レベル
recycle bin 18.12 その他のファイル操作
redo 16.1 Undo(取り消し)
refreshing displayed files 30.15 Diredバッファーの更新
regexp 15.6 正規表現の構文
regexp search 15.5 正規表現検索
region 11 マークとリージョン
region highlighting 11.7 Transient Markモードを無効にする
region-rectangle 12.5 矩形領域(Rectangles)
registered file 28.1.1.3 バージョンコントロールの概念
registers 13 レジスター
registry, setting environment variables (MS-Windows) C.4.3 MS-Windowsのシステムレジストリー
registry, setting resources (MS-Windows) D.1 Xリソース
regular expression 15.6 正規表現の構文
related files 26.12.4 Cモードのその他のコマンド
reload files 44 Emacsセッションの保存
remember editing session 44 Emacsセッションの保存
remote file access 18.15 リモートファイル
remote host 38.10 リモートホストのシェル
remote host, debugging on 27.6.1 GUDの開始
remote repositories (CVS) 28.1.13.3 CVSに特有のオプション
remove indentation 24.1 インデントコマンド
renaming files 18.11 ファイルのコピー、命名、リネーム。
renaming files (in Dired) 30.7 ファイルにたいする操作
renaming version-controlled files 28.1.12.2 バージョンコントロールされたファイルの削除とリネーム
repeating a command 7.11 コマンドの繰り返し
replacement 15.10 置換コマンド
reply to a message 33.10 返信の送信
report an Emacs bug, how to 52.3 バグレポートの理解
repository 28.1.1.3 バージョンコントロールの概念
reread a file 18.4 バッファーのリバート
reserved key bindings 49.3 キーバインディングのカスタマイズ
resize window 20.5 ウィンドウの削除とリサイズ
resizing minibuffer 8.3 ミニバッファーでの編集
resizing windows 20.5 ウィンドウの削除とリサイズ
resolving conflicts 28.1.11.3 ブランチのマージ
resource files for GTK+ D.5 GTK+リソース
resource name, command-line argument D.1 Xリソース
resource values, command-line argument D.1 Xリソース
resources D.1 Xリソース
restore session 44 Emacsセッションの保存
restriction 14.5 ナローイング
retrying a failed message 33.10 返信の送信
reverse order in POP3 inboxes 33.19 リモートmailboxからのメールの取得
reverse video, command-line argument C.7 ウィンドウカラーオプション
revision 28.1.1.3 バージョンコントロールの概念
revision ID 28.1.1.3 バージョンコントロールの概念
revision ID in version control 28.1.3.3 C-x v vの高度な制御
revision tag 28.1.12.3 リビジョンタグ
RGB triplet 14.9.2 RGBトリプレット
right-to-left text 22.19 双方向の編集
risky variable 49.2.4.2 安全なファイル変数
RLM 22.19 双方向の編集
Rlogin 38.10 リモートホストのシェル
Rmail 33 Rmailでメールを読む
Rmail file sorting 33.12 Rmailファイルのソート
Romanian 22.2 言語環境
rosh hodesh 31.13.10 sexpエントリーとFancy Diary表示
rot13 code 33.17 Rot13メッセージを読む
Ruby mode 26.1 プログラミング言語のためのメジャーモード
runemacs.exe G.1 MS-WindowsでEmacsを開始する方法
running a hook 49.2.2 フック
running Lisp functions 27 プログラムのコンパイルとテスト
Russian 22.2 言語環境

S
s- 49.3.7 修飾キー
saved echo area messages 1.2 エコーエリア
saving a setting 49.1.3 変数の変更
saving file name in a register 13.6 レジスターにファイル名を保存する
saving files 18.2 ファイルのvisit(訪問)
saving keyboard macro in a register 13.7 キーボードマクロのレジスター
saving keyboard macros 17.5 キーボードマクロの命名と保存
saving number in a register 13.5 レジスターに数字を保存する
saving position in a register 13.1 レジスターに位置を保存する
saving rectangle in a register 13.3 レジスターに矩形領域を保存する
saving sessions 44 Emacsセッションの保存
saving text in a register 13.2 レジスターにテキストを保存する
saving window configuration in a register 13.4 レジスターにウィンドウ設定を保存する
SCCS 28.1.1.2 サポートされるバージョンコントロールシステム
Schemeモード 27.11 外部Lispの実行
screen 1 画面の構成
screen display, wrong 51.3 スクリーン上のゴミ
screen reader software, MS-Windows G.11 その他のWindows固有の機能
script mode C.2 初期化オプション
script of a character 22.15 フォントセットの修正
scroll bar (X resource) D.2 EmacsにたいするXリソースの表
Scroll Bar mode 21.12 スクロールバー
Scroll-all mode 20.7 ウィンドウ処理のための便利な機能
scroll-bar face 21.12 スクロールバー
scroll-command property 14.1 スクロール
scrollbar width (X resource) D.2 EmacsにたいするXリソースの表
scrolling 14.1 スクロール
scrolling commands, during incremental search 15.1.6 インクリメンタル検索を終了させない
scrolling in the calendar 31.2 カレンダーでのスクロール
scrolling windows together 20.7 ウィンドウ処理のための便利な機能
SDB 27.6 Emacs下でのデバッガーの実行
search and replace in multiple files (in Dired) 30.7 ファイルにたいする操作
search and replace in multiple source files 28.4.1.3 識別子の検索と置換
search customizations 15.12 必要に応じて検索を調整する
search display on slow terminals 15.12 必要に応じて検索を調整する
search for a regular expression 15.5 正規表現検索
search Internet for keywords 15.3 単語検索
search mode, default 15.12 必要に応じて検索を調整する
search multiple files (in Dired) 30.7 ファイルにたいする操作
search ring 15.1.2 インクリメンタル検索の繰り返し
search, overwrapped 15.1.2 インクリメンタル検索の繰り返し
search, wrapping around 15.1.2 インクリメンタル検索の繰り返し
search-and-replace commands 15.10 置換コマンド
searching 15 検索と置換
searching Dired buffers 30.2 Diredバッファーでの移動
searching documentation efficiently 10 ヘルプ
searching in Rmail 33.3 メッセージ間の移動
searching multiple files via Dired 30.19 その他のDiredの機能
secondary selection 12.3.3 セカンダリー選択
secondary-selection face 12.3.3 セカンダリー選択
sections of manual pages 26.6.2 man-pageの照会
security 35 ホストのセキュリティ
security, when displaying enriched text 25.14.7 その他のテキストプロパティーのセッティング
select all 11.2 テキストオブジェクトをマークするコマンド
selected buffer 19 複数バッファーの使用
selected window 20.1 Emacsウィンドウの概念
selecting buffers in other windows 20.4 他のウィンドウでの表示
selection, primary 12.3.2 他のウィンドウアプリケーションにたいするカットアンドペースト
selective display 14.17 選択的な表示
selective undo 16.1 Undo(取り消し)
self-documentation 10 ヘルプ
Semantic mode 26.10 Semanticとは
Semantic package 26.10 Semanticとは
sending mail 32 メールの送信
sending patches for GNU Emacs 52.5 GNU Emacsへのパッチの送付
Sendmail 32.4.1 メールの送信
sentences 25.2 センテンス
server file 39.1 TCP Emacs server
server, using Emacs as 39 サーバーとしてのEmacsの使用
server-side fonts 21.8 フォント
set buffer face height 14.11 テキストのスケール
sets of files 18.20 ファイルセット
setting a mark 11 マークとリージョン
setting variables 49.2.1 変数の確認とセット
settings 49.1 Easy Customizationインターフェース
settings, how to save 49.1.3 変数の変更
sexp 26.4.1 対応が取れたカッコの式
sexp diary entries 31.13.10 sexpエントリーとFancy Diary表示
SGML mode 25.12 SGMLモードとHTMLモード
shadow cluster 18.3.5 ファイルのシャドーイング
shadow face 14.10 標準フェイス
shadow files 18.3.5 ファイルのシャドーイング
shell commands 38 Emacsからのシェルコマンドの実行
shell commands, Dired 30.8 Diredでのシェルコマンド
shell completion 38.3 Shellモード
SHELL environment variable 38.2 対話的なサブシェル
Shell mode 38.3 Shellモード
shell scripts, and local file variables 49.2.4.1 ファイル変数の指定
Shell-script mode 26.1 プログラミング言語のためのメジャーモード
shelves in version control 28.1.10.2 VC Directoryコマンド
shift-selection 11.6 シフト選択
Show Paren mode 26.4.3 マッチするカッコ
showing hidden subdirectories (Dired) 30.14 サブディレクトリーを隠す
shy group, in regexp 15.7 正規表現でのバックスラッシュ
signing files (in Dired) 30.7 ファイルにたいする操作
Simula mode 26.1 プログラミング言語のためのメジャーモード
simulation of middle mouse button G.7 MS-Windowsでのマウスの使用方法
simultaneous editing 18.3.4 同時編集からの保護
Sinhala 22.2 言語環境
site init file 49.4 Emacs初期化ファイル
site-lisp directories 49.4 Emacs初期化ファイル
site-lisp files, not loading C.2 初期化オプション
site-start.el file, not loading C.2 初期化オプション
site-start.el, the site startup file 49.4 Emacs初期化ファイル
size of file, warning when visiting 18.2 ファイルのvisit(訪問)
size of minibuffer 8.3 ミニバッファーでの編集
slashes repeated in file name 8.2 ミニバッファーでのファイル名
SliTeX mode 25.11 TeXモード
Slovak 22.2 言語環境
Slovenian 22.2 言語環境
Smerge mode 18.9 ファイルの比較
SMTP 32.4.1 メールの送信
Snake 47 ゲーム、その他の娯楽
so-long mode 51.9 長い行
socket activation, systemd, Emacs 39 サーバーとしてのEmacsの使用
soft hyphen 14.19 テキストが表示される方法
soft newline 25.14.2 ハード改行とソフト改行
solitaire 47 ゲーム、その他の娯楽
sorting 41 テキストのソート
sorting diary entries 31.13.9 Fancy Diary表示
sorting Dired buffer 30.15 Diredバッファーの更新
sorting Rmail file 33.12 Rmailファイルのソート
Spanish 22.2 言語環境
specific version control system 28.1.3.3 C-x v vの高度な制御
specify default font from the command line C.6 フォント指定オプション
specify dump file C.2 初期化オプション
specify end-of-line conversion 22.9 ファイルのテキストにたいするコーディングシステムの指定
specifying fullscreen for Emacs frame C.8 ウィンドウのサイズと位置にたいするオプション
speedbar 21.9 スピードバーフレーム
spell-checking the active region 16.4 スペルのチェックと訂正
spelling, checking and correcting 16.4 スペルのチェックと訂正
splash screen C.2 初期化オプション
splitting columns 25.16 2列編集
splitting table cells 25.15.4 テーブルセルにたいするコマンド
SRC 28.1.1.2 サポートされるバージョンコントロールシステム
src 28.1.1.2 サポートされるバージョンコントロールシステム
SSL 36 ネットワークのセキュリティ
standard colors on a character terminal C.7 ウィンドウカラーオプション
standard faces 14.10 標準フェイス
standard fontset 22.14 フォントセットの定義
start directory, MS-Windows G.1 MS-WindowsでEmacsを開始する方法
start iconified, command-line argument C.11 アイコン
starting Emacs 5 Emacsの起動
starting Emacs on MS-Windows G.1 MS-WindowsでEmacsを開始する方法
STARTTLS 36 ネットワークのセキュリティ
startup (command line arguments) Appendix C Emacs呼び出しにたいするコマンドライン引数
startup (init file) 49.4 Emacs初期化ファイル
startup fontset 22.14 フォントセットの定義
startup message C.2 初期化オプション
startup screen 5 Emacsの起動
stashes in version control 28.1.10.2 VC Directoryコマンド
string substitution 15.10 置換コマンド
string syntax 49.4.1 initファイルの構文
stuck in recursive editing 51.2 再帰編集レベル
style (for indentation) 26.3.5 Cのインデントのカスタマイズ
subdirectories in Dired 30.11 Diredでのサブディレクトリー
subprocesses on MS-Windows G.8 Windows 9X/MEおよびWindows NT/2000/XP/Vista/7/8/10でのサブプロセス
subscribe groups 34.3 Gnus Groupバッファーの使用
subshell 38 Emacsからのシェルコマンドの実行
substring, completion style 8.4.4 補完候補が選択される方法
subtree (Outline mode) 25.9.3 アウトライン表示コマンド
Subversion 28.1.1.2 サポートされるバージョンコントロールシステム
Subword mode 26.9 大文字小文字の混ざった単語
summary (Rmail) 33.11 サマリー
summing time intervals 31.12 時間間隔の加算
sunrise and sunset 31.7 日の出と日の入りの時刻
Super (under MS-DOS) G.12.1 MS-DOSでのキーボードの使用方法
Super, modifier key 49.3.7 修飾キー
suspending 6 Emacsからのexit
suspicious constructions in C, C++ 26.12.4 Cモードのその他のコマンド
SVN 28.1.1.2 サポートされるバージョンコントロールシステム
Swedish 22.2 言語環境
switch buffers 19.1 バッファーの作成と選択
switches (command line) Appendix C Emacs呼び出しにたいするコマンドライン引数
symbol search 15.4 シンボル検索
symbol, highlighting 14.13 インタラクティブなハイライト
symbolic links (and version control) 28.1.13.1 一般的なオプション
symbolic links (creation in Dired) 30.7 ファイルにたいする操作
symbolic links (creation) 18.11 ファイルのコピー、命名、リネーム。
symbolic links (visiting) 18.7 ファイルのエイリアス
synchronizing windows 14.7 Followモード
synchronous X mode D.2 EmacsにたいするXリソースの表
syntax highlighting and coloring 14.12 Font Lockモード
syntax of regexps 15.6 正規表現の構文
system-wide packages 48.4 パッケージのファイルとディレクトリー
systemd unit file 39 サーバーとしてのEmacsの使用

T
t Glossary
tab bar (X resource) D.2 EmacsにたいするXリソースの表
tab bar mode 21.17 タブバー
tab line 20.8 ウィンドウのタブライン
tab stops 24.2 タブストップ
tab-line face 14.10 標準フェイス
table creation 25.15.2 テーブルの作成
table dimensions 25.15.8 テーブル、その他
table for HTML and LaTeX 25.15.8 テーブル、その他
table mode 25.15 テキストベーステーブルの編集
table recognition 25.15.3 テーブルの認識
table to text 25.15.7 プレーンテキストとテーブルの変換
tabs 24 インデント
tabs, tabbar 21.17 タブバー
tag 28.4 識別子のリファレンスを探す
tags and tag tables 28.4.2 tagsテーブル
tags for version control 28.1.12.3 リビジョンタグ
tags, C++ 28.4.2 tagsテーブル
tags-based completion 26.8 シンボル名の補完
TaiViet 22.2 言語環境
Tajik 22.2 言語環境
Tamil 22.2 言語環境
Tar mode 18.14 ファイルアーカイブ
Tcl mode 26.1 プログラミング言語のためのメジャーモード
TCP Emacs server 39.1 TCP Emacs server
Telnet 38.10 リモートホストのシェル
Telugu 22.2 言語環境
temporary windows 20.6.2 編集不可バッファーの表示
Term mode 38.9 Termモード
terminal emulators, mouse support 21.22 テキスト端末でのマウスの使用
terminal, serial 38.11 シリアル端末
termscript file 52.4 バグレポートのためのチェックリスト
Tetris 47 ゲーム、その他の娯楽
TeX encoding 25.11.4 TeXモード、その
TeX mode 25.11 TeXモード
TEXEDIT environment variable 39 サーバーとしてのEmacsの使用
TEXINPUTS environment variable 25.11.3 TeX印刷コマンド
text 25 人間の言語のためのコマンド
text and binary files on MS-DOS/MS-Windows G.2 テキストファイルとバイナリーファイル
text buttons 21.3 マウスで参照をフォローする
text colors, from command line C.7 ウィンドウカラーオプション
text cursor 14.20 カーソルの表示
Text mode 25.8 Textモード
text properties at point 22.1 国際化文字セットのイントロダクション
text properties of characters 25.14.3 フォーマット情報の編集
text terminal 21.21 非ウィンドウ端末
text to table 25.15.7 プレーンテキストとテーブルの変換
text-based tables 25.15 テキストベーステーブルの編集
text-based tables, splitting cells 25.15.4 テーブルセルにたいするコマンド
text/enriched MIME format 25.14 Enrichedテキスト
Thai 22.2 言語環境
Tibetan 22.2 言語環境
tilde (~) at end of backup file name 18.3.2.1 単一または番号つきバックアップ
time (on mode line) 14.18 モードラインのオプション
time intervals, summing 31.12 時間間隔の加算
time stamps 18.3.6 タイムスタンプの自動更新
timeclock 31.12 時間間隔の加算
timelog file 31.12 時間間隔の加算
TLS 36 ネットワークのセキュリティ
TLS encryption (Rmail) 33.19 リモートmailboxからのメールの取得
TODO item 25.10.1 オーガナイザーとしてのOrg
toggling marks (in Dired) 30.6 Diredでのマークとフラグ
tool bar (X resource) D.2 EmacsにたいするXリソースの表
tool bar mode 21.16 ツールバー
Tool Bar position 21.16 ツールバー
Tool Bar style 21.16 ツールバー
tooltip help 10.10 アクティブテキストのヘルプとツールチップ
tooltips 21.19 ツールチップ
top level 1.3 モードライン
tower of Hanoi 47 ゲーム、その他の娯楽
trailing whitespace 14.16 不要なスペース
trailing whitespace, in patches 18.10 Diffモード
trailing-whitespace face 14.16 不要なスペース
Tramp 18.15 リモートファイル
Transient Mark mode 11.7 Transient Markモードを無効にする
Transport Layer Security 36 ネットワークのセキュリティ
transposition of expressions 26.4.1 対応が取れたカッコの式
trash 18.12 その他のファイル操作
triple clicks 49.3.10 マウスボタンのリバインド
troubleshooting Emacs 51 Emacsのトラブルへの対処
truenames of files 18.7 ファイルのエイリアス
truncation 14.21 行の切り詰め
TTY menu faces 14.10 標準フェイス
Turkish 22.2 言語環境
two directories (in Dired) 30.7 ファイルにたいする操作
two-column editing 25.16 2列編集
types of log file 28.1.1.7 ログファイルのタイプ
typos, fixing 16 タイプミスを訂正するコマンド

U
Ukrainian 22.2 言語環境
unbalanced parentheses and quotes 26.4 カッコに付随する編集のためのコマンド
uncompression 18.13 圧縮ファイルへのアクセス
undecided, coding system 22.5 コーディングシステム
undeletion (Rmail) 33.4 メッセージの削除
undigestify 33.16 ダイジェストメッセージ
undisplayable characters 22.1 国際化文字セットのイントロダクション
undo 16.1 Undo(取り消し)
undo limit 16.1 Undo(取り消し)
undoing window configuration changes 20.7 ウィンドウ処理のための便利な機能
Unibyte operation 22.17 Unibyte編集モード
Unicode 22.1 国際化文字セットのイントロダクション
Unicode characters, inserting 7.1 テキストの挿入
Unicode Collation Algorithm (UCA), and ls-lisp.el G.4 MS-Windowsでのlsのエミュレーション
unique buffer names 19.7.1 バッファー名を一意にする
unmarking files (in Dired) 30.6 Diredでのマークとフラグ
unsaved buffers, killing 19.4 バッファーのkill
unsaved customizations, reminder to save 49.1.4 カスタマイズの保存
unsubscribe groups 34.3 Gnus Groupバッファーの使用
untranslated file system G.2 テキストファイルとバイナリーファイル
unused lines 14.16 不要なスペース
unzip archives 18.14 ファイルアーカイブ
upcase file names 30.9 Diredでのファイル名の変更
updating Dired buffer 30.15 Diredバッファーの更新
URL, viewing in help 10.5 ヘルプモードのコマンド
URLs 46.3 URLのフォロー
URLs, activating 46.4 URLのアクティブ化
Usenet news 34 GnusによるEメールとUsenetニュース
user name for remote file access 18.15 リモートファイル
user option 49.1 Easy Customizationインターフェース
user options, changing 49.1.3 変数の変更
using Nextstep services (macOS) F.3 macOSおよびGNUstepでのウィンドウシステムイベント
UTF-8 22.2 言語環境

V
variable 49.2 変数
variable-pitch face 14.10 標準フェイス
variables, changing 49.1.3 変数の変更
VC 28.1 バージョンコントロール
VC change log 28.1.7 VC Change Log
VC Directory buffer 28.1.10 VC Directoryモード
VC filesets 28.1.3 バージョンコントロール下での基本的な編集
VC log buffer, commands in 28.1.7 VC Change Log
VC mode line indicator 28.1.2 バージョンコントロールとモードライン
vc-log buffer 28.1.7 VC Change Log
verifying digital signatures on files (in Dired) 30.7 ファイルにたいする操作
Verilog mode 26.1 プログラミング言語のためのメジャーモード
version control 28.1 バージョンコントロール
version control log 28.1.1.7 ログファイルのタイプ
version control status 28.1.2 バージョンコントロールとモードライン
VERSION_CONTROL environment variable 18.3.2.1 単一または番号つきバックアップ
vertical border 21.12 スクロールバー
Vertical Scroll Bar 21.12 スクロールバー
vertical scroll bars, command-line argument C.12 その他のディスプレーオプション
vertical-border face 14.10 標準フェイス
VHDL mode 26.1 プログラミング言語のためのメジャーモード
Vietnamese 22.2 言語環境
View mode 14.6 Viewモード
viewing web pages in help 10.5 ヘルプモードのコマンド
views of an outline 25.9.4 複数ビューによるアウトラインの閲覧
visiting files 18.2 ファイルのvisit(訪問)
visiting files, command-line argument C.1 動作引数
Visual Line mode 14.22 Visual Lineモード
visual order 22.19 双方向の編集

W
Watching expressions in GDB 27.6.5.7 ウォッチ式
wdired mode 30.17 Diredバッファーの編集
Web 46.3 URLのフォロー
web pages, viewing in help 10.5 ヘルプモードのコマンド
webkit widgets 46.2 埋め込みWebKitウィジェット
weeks, which day they start on 31.1.2 週、月、年の開始と終了
Welsh 22.2 言語環境
what constitutes an Emacs bug 52.2 バグがあったとき
whitespace character 24 インデント
Whitespace mode 14.16 不要なスペース
whitespace, trailing 14.16 不要なスペース
wide block cursor 14.20 カーソルの表示
widening 14.5 ナローイング
widgets at buffer position 25.14.3 フォーマット情報の編集
width and height of Emacs frame C.8 ウィンドウのサイズと位置にたいするオプション
width of the vertical scroll bar 21.12 スクロールバー
wildcard characters in file names 18.2 ファイルのvisit(訪問)
Windmove package 20.7 ウィンドウ処理のための便利な機能
window configuration changes, undoing 20.7 ウィンドウ処理のための便利な機能
Window Divider mode 21.13 ウィンドウdivider
window manager, keys stolen by 2 ユーザー入力の種類
Windows clipboard support G.12.2 MS-DOSでびマウスの使用方法
windows in Emacs 20 複数ウィンドウ
Windows system menu G.6 MS-Windowsでのキーボードの使用方法
windows, synchronizing 14.7 Followモード
Windows-1255 22.2 言語環境
Winner mode 20.7 ウィンドウ処理のための便利な機能
word processing 25.14 Enrichedテキスト
word search 15.3 単語検索
word wrap 14.22 Visual Lineモード
words 25.1 単語
words, case conversion 25.7 大文字小文字変換コマンド
work file 28.1.1.3 バージョンコントロールの概念
working tree 28.1.1.3 バージョンコントロールの概念
World Wide Web 46.3 URLのフォロー
wrapped search 15.1.2 インクリメンタル検索の繰り返し
wrapping 7.8 継続行
WYSIWYG 25.14 Enrichedテキスト

X
X cutting and pasting 12.3.2 他のウィンドウアプリケーションにたいするカットアンドペースト
X defaults file 21.8 フォント
X input methods (X resource) D.2 EmacsにたいするXリソースの表
X Logical Font Description 21.8 フォント
X resources D.1 Xリソース
X resources file 21.8 フォント
X resources, not loading C.2 初期化オプション
X selection 12.3.2 他のウィンドウアプリケーションにたいするカットアンドペースト
XDB 27.6 Emacs下でのデバッガーの実行
XDG_CONFIG_HOME 49.4 Emacs初期化ファイル
XIM (X resource) D.2 EmacsにたいするXリソースの表
XLFD 21.8 フォント
XML schema 25.12 SGMLモードとHTMLモード
xref 28.4 識別子のリファレンスを探す
xref backend 28.4 識別子のリファレンスを探す
XREF mode 28.4.1.2 *xref*バッファーで利用可能なコマンド
xterm 21.22 テキスト端末でのマウスの使用
xwidget 46.2 埋め込みWebKitウィジェット
Xwidget-WebKit mode 46.2 埋め込みWebKitウィジェット

Y
y or n prompt 8.8 Yes or No プロンプト
yahrzeits 31.9.3 他のカレンダーからの変換
yahrzeits, and sexp diary entries 31.13.10 sexpエントリーとFancy Diary表示
yanking 12.2 yank
yanking previous kills 12.2.2 過去にkillしたテキストをyankする
yes or no prompt 8.8 Yes or No プロンプト

Z
zip 18.14 ファイルアーカイブ
Zmacs mode 11.7 Transient Markモードを無効にする
zone 47 ゲーム、その他の娯楽
zoo 18.14 ファイルアーカイブ

Jump to:   #   $   (   *   -   .   /   7   8   ?   _   ~  
A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

[Top] [Contents] [Index] [ ? ]

Footnotes

(1)

このマニュアル自身はGNU Free Documentation Licenseにより保護されています。このライセンスの精神はGeneral Public Licenseと同様ですが、よりドキュメントに適したものです。GNU Free Documentation Licenseを参照してください。

(2)

“point”という用語は、文字‘.’に由来します。この文字は、現在ポイントと呼んでいる値を参照するためのTECO(オリジナルのEmacsを記述していた言語)のコマンドです。

(3)

歴史的な理由により、AltのことをMetaという名前で参照します。

(4)

site-start.elの中でinhibit-startup-screenをセットしても機能しません。なぜならスタートアップ画面はsite-start.elが読み込まれる前にセットアップされるからです。site-start.elについての情報は、Emacs初期化ファイルを参照してください。

(5)

ASCIIには、文字C-SPCはありません。テキスト端末でC-SPCをタイプすると、通常は文字C-@が与えられます。このキーもset-mark-commandにバインドされているので、もし異なる挙動を示すテキスト端末の場合は、C-SPCのかわりにC-@を使うことを考えるのがよいかもしれません。

(6)

C-/以外に、undoコマンドはC-x uにもバインドされています。なぜならこれは初心者が記憶するのが簡単だからです。‘u’は“undo”に由来しています。このコマンドはC-_にもバインドされています。なぜならいくつかのテキスト端末では、C-/とタイプすることにより、C-_が入力されるからです。

(7)

システムがシンボリックリンクをサポートしていなければ、通常のファイルが使われます。

(8)

これはMIMEの‘text/*’の本体、および他のネットワーク転送のコンテキストでも指定されています。これはEmacsが直接サポートしないSGMLリファレンス構文のrecord-start/record-endとは異なります。

(9)

EmacsをXで実行している場合には、以下のようにして新しくインストールしたフォントの場所をX serverに指示する必要があるでしょう:

xset fp+ /usr/local/share/emacs/fonts
xset fp rehash
(10)

より具体的には、そのモードはprog-modeから“派生”したモードです(Derived Modes in The Emacs Lisp Reference Manualを参照)。

(11)

curved single quote文字、U+2018 LEFT SINGLE QUOTATION MARKとU+2019 RIGHT SINGLE QUOTATION MARKです。curved double quote文字はU+201C LEFT DOUBLE QUOTATION MARKとU+201D RIGHT DOUBLE QUOTATION MARKです。これらの文字を表示できないテキスト端末では、Infoリーダーはそれらをtypewriter ASCII quote文字として表示するかもしれません。

(12)

これはLaTeX由来の‘slides’ドキュメントクラスにより置き換えられました。

(13)

単語“sexp”はLispで式を参照するのに使用されます。

(14)

正規表現と構文テーブル。

(15)

tagは、識別子リファレンスの同義語です。etagsパッケージにもとづいたコマンドおよび機能では、伝統的に“tag”という用語をこの意味に使用します。以下のサブセクションでは、この伝統にしたがいます。

(16)

The US National Security Agency.

(17)

この機能は、Emacsがlibxml2サポートつきでビルドされているか、Lynxブラウザーがインストールされている必要があります。

(18)

PostScriptファイルにたいしてはGhostScriptが絶対条件です。DVIファイルにたいしてはdvipdfまたはdvipdfmが必要です。OpenDocumentおよびMicrosoft Officeドキュメントにたいしてはunoconvツールが必要です。

(19)

そのドキュメントに必要な外部ツールが利用可能でなければならず、Emacsがグラフィカルなフレームで実行されていて、PNGイメージをサポートしなければなりません。これらの条件が満たされなければ、Emacsは他のメジャーモードにフォールバックします。

(20)

シェルプロセスをサスペンドするべきではありません。これはシェルのサブジョブのサスペンドとはまったく違います。サブジョブのサスペンドは通常行なわれますが、サブジョブを継続するためにはシェルを使用しなければなりません。このコマンドはそれを行ないません。

(21)

別の環境変数を使うプログラムもいくつかあります。たとえば、TeXが‘emacsclient’を使うようにするには、環境変数TEXEDITを‘emacsclient +%d %s’にセットします。

(22)

MS-DOSでは、DOSファイルシステムの制限により、このファイルの名前は_dir-locals.elになります。ファイルシステムによりファイル名が8+3に制限されている場合、OSによりファイル名が_dir-loc.elに切り詰められるでしょう。

(23)

このオプションはMS-Windowsでは効果がありません。

(24)

これ以降、“コロンで区切られたディレクトリーのリスト”という場合は、UnixおよびGNU/Linuxシステムの場合を指します。MS-DOSおよびMS-Windowsでは、DOS/Windowsファイル名にはドライブ文字の後のコロンが含まれるので、かわりにセミコロンでディレクトリーが区切られます。

(25)

古いバージョンのEmacsは、アプリケーションデータディレクトリーをチェックしません。

(26)

これには既知の例外が1つあります。ワークステーションをロックするWindows-Lの組み合せは、システムのより低レベルで処理されます。この理由により、w32-register-hot-keyはこのキー組み合せをオーバーライドできません。これは常にコンピューターをロックします。

(27)

printer-nameの値は、スラッシュとバックスラッシュの両方でセットできますが、‘net use’コマンドはUNC共有名がWindowsスタイルのバックスラッシュでタイプされるのを要求することに注意してください。

(28)

通常1つの特定のコードページがディスプレーメモリーに組み込まれていて、CONFIG.SYSのようなシステム設定ファイルを変更して再起動することにより他のコードページをインストールできます。再起動なしでコードページを変更できるサードパーティーのソフトウェアーもありますが、ここでは普通のMS-DOSシステムが振る舞う方法を説明します。

(29)

ISO 8859にたいすEmacsの標準コーディングシステムは、この目的に完全に沿っているとは言えません。なぜならDOSコードページは通常、標準ISO文字コードにマッチしないからです。たとえば文字‘ç’(cedillaつきの‘c’)は標準Latin-1文字セットのコード231ですが、それに対応するDOSコードページ850はこのグリフにコード135を使用します。

(30)

The wording here was careless. The intention was that nobody would have to pay for permission to use the GNU system. But the words don’t make this clear, and people often interpret them as saying that copies of GNU should always be distributed at little or no charge. That was never the intent; later on, the manifesto mentions the possibility of companies providing the service of distribution for a profit. Subsequently I have learned to distinguish carefully between “free” in the sense of freedom and “free” in the sense of price. Free software is software that users have the freedom to distribute and change. Some users may obtain copies at no charge, while others pay to obtain copies—and if the funds help support improving the software, so much the better. The important thing is that everyone who has a copy has the freedom to cooperate with others in using it.

(31)

This is another place I failed to distinguish carefully between the two different meanings of “free.” The statement as it stands is not false—you can get copies of GNU software at no charge, from your friends or over the net. But it does suggest the wrong idea.

(32)

Several such companies now exist.

(33)

The Free Software Foundation raises most of its funds from a distribution service, although it is a charity rather than a company. If no one chooses to obtain copies by ordering from the FSF, it will be unable to do its work. But this does not mean that proprietary restrictions are justified to force every user to pay. If a small fraction of all the users order copies from the FSF, that is sufficient to keep the FSF afloat. So we ask users to choose to support us in this way. Have you done your part?

(34)

A group of computer companies recently pooled funds to support maintenance of the GNU C Compiler.

(35)

In the 80s I had not yet realized how confusing it was to speak of “the issue” of “intellectual property.” That term is obviously biased; more subtle is the fact that it lumps together various disparate laws which raise very different issues. Nowadays I urge people to reject the term “intellectual property” entirely, lest it lead others to suppose that those laws form one coherent issue. The way to be clear is to discuss patents, copyrights, and trademarks separately. See https://www.gnu.org/philosophy/not-ipr.xhtml for more explanation of how this term spreads confusion and bias.

(36)

Subsequently we have discovered the need to distinguish between “free software” and “freeware”. The term “freeware” means software you are free to redistribute, but usually you are not free to study and change the source code, so most of it is not free software. See https://www.gnu.org/philosophy/words-to-avoid.html for more explanation.


[Top] [Contents] [Index] [ ? ]

Table of Contents


[Top] [Contents] [Index] [ ? ]

Short Table of Contents


[Top] [Contents] [Index] [ ? ]

About This Document

This document was generated on September 28, 2022 using texi2any.

The buttons in the navigation panels have the following meaning:

Button Name Go to From 1.2.3 go to
[ << ] FastBack Beginning of this chapter or previous chapter 1
[ < ] Back Previous section in reading order 1.2.2
[ Up ] Up Up section 1.2
[ > ] Forward Next section in reading order 1.2.4
[ >> ] FastForward Next chapter 2
[Top] Top Cover (top) of document  
[Contents] Contents Table of contents  
[Index] Index Index  
[ ? ] About About (help)  

where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:


This document was generated on September 28, 2022 using texi2any.