@c -*-texinfo-*-
@c This is part of the GNU Emacs Lisp Reference Manual.
@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. 
@c See the file elisp-jp.texi for copying conditions.
@c 複製の条件は elisp-jp.texi に書いてあります。
@setfilename ../info/frames-jp
@node Frames, Positions, Windows, Top
@chapter フレーム
@cindex frame
@cindex フレーム[フレーム]

  @dfn{フレーム(frame)}は一つ以上のEmacsのウィンドウを含む画面上の長方形
状のものです。フレームには最初は一つのウィンドウ(と多分ミニバッファ)しか
ありませんが、縦方向にも横方向にも分割することができます。
@c ここ@var{frame}になっているけど@dfn{frame}の間違いじゃないかな?
@c rmsに確認、修正。

@cindex terminal frame
@cindex X window frame
@cindex 端末フレーム[たんまつフレーム]
@cindex Xウィンドウ・フレーム[Xウィンドウフレーム]
Emacsがテキスト専用端末で起動されたときは、一つの@dfn{端末フレーム
(terminal frame)}で立ち上がります。追加のフレームを作成したときは、Emacs
は同時にはただ一つのフレームだけを、当たり前ですが、端末の画面に表示しま
す。

EmacsがXサーバーと直接やりとりするときは、端末フレームの代わりに一つの
@dfn{Xウインドウ・フレーム(X Window frame)}で立ち上がります。この場合は
同時に複数のXウインドウ・フレームをそれ自身のXウインドウに表示できます。

@defun framep object
この述語は@var{object}がフレームのときに@code{t}を、それ以外のとき
は@code{nil}を返します。
@end defun

@menu
* Creating Frames::		追加のフレームの作成。
* Multiple Displays::           別のXディスプレイ上のフレームの作成。
* Frame Parameters::		フレームのサイズや位置、フォントなどの制御。
* Frame Titles::                フレーム・タイトルの自動更新。
* Deleting Frames::		フレームは明示的に削除するまでなくならない。
* Finding All Frames::		存在する全てのフレームの調べ方。
* Frames and Windows::		フレームにはウインドウが入っている。
                                  テキストは常にウインドウを通して表示される。
* Minibuffers and Frames::	フレームはどのようにして使うミニバッファ
                                  を見つけるか。
* Input Focus::			選択されたフレームの指定。
* Visibility of Frames::	フレームは可視か不可視かアイコン化のどれか。
* Raising and Lowering::	フレームを上昇させるとほかのXのウインドウ
                                は隠される。下降させるとほかのに隠される。
* Frame Configurations::	全てのフレームの状態の保存。
* Mouse Tracking::		マウスが動いたときにイベントを得る。
* Mouse Position::		マウスがどこにいるかを知る、または動かす。
* Pop-Up Menus::		ユーザに選択させるためにメニューを表示する。
* Dialog Boxes::                yesかnoを聞くための箱を表示する。
* Pointer Shapes::              マウス・ポインタの形状の指定。
* X Selections::		ほかのXクライアントとテキストのやりとりをする。
* Color Names::	                色名の定義を得る。
* Resources::		        サーバーからリソースの値を得る。
* Server Data::		        Xサーバーに関する情報を得る。
@end menu

関連する情報は@xref{Display}。

@node Creating Frames, Multiple Displays, Frames, Frames
@section フレームの作成

新しいフレームを作るには、@code{make-frame}関数を呼び出します。

@defun make-frame &optional alist
この関数は新しいフレームを作ります。Xを使っていればXウインドウフレームを、
そうでなければ端末フレームを作ります。
@c alistは&optionalじゃないの?
@c rmsに確認、修正。

引数はフレームのパラメータを指定するalistです。@var{alist}によって指定さ
れないパラメータは@code{default-frame-alist}変数の値が用いられます。これ
らで指定されていないパラメータは、標準のX defaultsファイルかXリソースが
デフォルトになります。

どのパラメータが指定できるかは、原則としてEmacsがどのようなウインドウ・
システムにフレームを表示しているかによります。指定可能な個々のパラメータ
についての説明は、@xref{X Frame Parameters}。
@end defun

@defvar before-make-frame-hook
@code{make-frame}によって実際にフレームが作られる前に起動される正規フッ
クです。
@end defvar

@defvar after-make-frame-hook
@code{make-frame}によってフレームが作られたあとに起動される正規フックです。
@end defvar

@node Multiple Displays, Frame Parameters, Creating Frames, Frames
@section 複数のディスプレイ
@cindex multiple displays
@cindex multiple X terminals
@cindex displays, multiple
@cindex 複数のディスプレイ[ふくすうのディスプレイ]
@cindex 複数のX端末[ふくすうのXたんまつ]
@cindex ディスプレイ、複数の[ディスプレイ、ふくすうの]

一つのEmacsは一つ以上のXウインドウ・ディスプレイとやりとりすることができ
ます。起動時には、Emacsは一つのディスプレイだけを使います。そのディスプ
レイは、@code{DISPLAY}環境変数や@samp{--display}オプションで指定されます
(@pxref{Initial Options,,, emacs, The GNU Emacs Manual})。別のディスプレ
イに接続するにはコマンド@code{make-frame-on-display}を使うか、フレームを
作成するときに@code{display}フレーム・パラメータを指定してください。

EmacsはそれぞれのXサーバーを独立した端末として扱います。それぞれに選択さ
れたフレームとミニバッファがあります。いくつかのLisp変数は現在の端末(す
なわち現在の選択されたフレームに対応する端末)にローカルな値を持っていま
す。@code{default-minibuffer-frame}、@code{defining-kbd-macro}、
@code{last-kbd-macro}、@code{multiple-frames}、@code{system-key-alist}が
そうです。これらの変数は常に端末ローカルでバッファローカルにはなり得ま
せん。

一つのXサーバーは一つ以上の画面を扱うことができます。ディスプレイの名前
@c Overfull対策。ここで改行してもいいよね?
@iftex
@samp{@var{host}.@linebreak@var{server}.@var{screen}}は三つの部分からなります。最後
@end iftex
@ifinfo
@samp{@var{host}.@var{server}.@var{screen}}は三つの部分からなります。最後
@end ifinfo
の部分は与えられたサーバーの画面番号を指定しています。一つのサーバーに属
する二つの画面を使うときは、Emacsはそれらの名前が似通っていることによりそ
れらが一つのキーボードを共有していることを知り、それらを一つの端末として
扱います。

@deffn Command make-frame-on-display display &optional parameters
これはディスプレイ@var{display}上に新しいフレームを作ります。ほかのパラメー
タは@var{parameters}から得ます。@var{display}引数を別にすれば、
@code{make-frame}と同様です(@pxref{Creating Frames})。
@end deffn

@defun x-display-list
これはEmacsが接続しているXディスプレイを示すリストを返します。リストの要
素は文字列で、それぞれがディスプレイの名前です。
@end defun

@defun x-open-connection display &optional xrm-string
この関数はXディスプレイ@var{display}に接続します。そのディスプレイ上にフ
レームを作ることはしませんが、そのディスプレイとの通信が確立されているか
チェックすることはできます。

オプション引数@var{resource-string}が@code{nil}でなければ、それは
@file{.Xresources}ファイルと同じフォーマットのリソース名と値の文字列です。
指定した値はXサーバー自身に記録されている値に優先します。これらはこのディ
スプレイ上に作られる全てのEmacsのフレームに適用されます。これはこの文字
列の例です:

@example
"*BorderWidth: 3\n*InternalBorder: 2\n"
@end example

@xref{Resources}。
@end defun

@defun x-close-connection display
この関数はディスプレイ@var{display}との接続を閉じます。これを実行する前
に、まずそのディスプレイ上に開かれている全てのフレームを削除しなくてはい
けません(@pxref{Deleting Frames})。
@end defun

@node Frame Parameters, Frame Titles, Multiple Displays, Frames
@section フレーム・パラメータ

フレームには、見栄えや振舞いを制御するためのたくさんのパラメータがありま
す。フレームがどんなパラメータを持っているかは、どんな表示機構を使ってい
るかによって決まります。

フレーム・パラメータはウインドウシステムのためにあります。端末フレームもい
くつかパラメータを持っていますがほとんどが互換性のためのもので、高さ、幅、
@code{buffer-predicate}パラメータだけが本当に意味があります。

@menu
* Parameter Access::       フレーム・パラメータの変更方法。
* Initial Parameters::     フレーム作成時のフレーム・パラメータ指定。
* X Frame Parameters::     フレーム・パラーメータの表。
* Size and Position::      フレームの大きさや位置の変更。
@end menu

@node Parameter Access, Initial Parameters, Frame Parameters, Frame Parameters
@subsection フレーム・パラメータへのアクセス

これらの関数はフレームのパラメータの値を得たり、変更するものです。

@defun frame-parameters frame
関数@code{frame-parameters}は@var{frame}のすべてのパラメータとその値から
なるalistを返します。
@end defun

@defun modify-frame-parameters frame alist
この関数はフレーム@var{frame}のパラメータを@var{alist}の要素に基づいて変
更します。@var{alist}のそれぞれの要素は@code{(@var{parm} . @var{value})}
という形式です。@var{parm}はパラメータのシンボル名です。@var{alist}に存
在しないパラメータの値は変更されません。
@end defun

@node Initial Parameters, X Frame Parameters, Parameter Access, Frame Parameters
@subsection 初期フレーム・パラメータ

@file{.emacs}ファイルで@code{initial-frame-alist}をセットすることで、初
期起動フレームのパラメータを指定することができます。

@defvar initial-frame-alist
この変数の値はパラメータのalistで、その値は初期Xウインドウ・フレームが作ら
れるときに使われます。それぞれの要素の形式は次のようになっています:

@example
(@var{parameter} . @var{value})
@end example

Emacsは初期フレームをあなたの@file{~/.emacs}ファイルを読む前に作ります。
そのファイルを読んだあとでEmacsは@code{initial-frame-alist}をチェックし、
すでに作った初期フレームの値と違う値のパラメータを適用します。

これらの設定にフレームの位置や大きさの指定が含まれている場合、フレームは
間違った大きさや間違った位置に現れ、次に指定した大きさや位置に変更される
ことになります。これが気になるなら、Xリソースで同じように位置や大きさを
指定することができます。これはフレームが作られる前に適用されます。
@xref{Resources X,, X Resources, emacs, The GNU Emacs Manual}。

一般的にXリソースは全てのフレームに適用されます。あるXリソースを初期フレー
ムだけに指定して、その後のフレームには適用したくない場合は、つぎのよ
うにしてください。その後のフレームではそのXリソースを無効にするために
@code{default-frame-alist}でパラメータを指定し、次にそれらが初期フレーム
に影響しないように同じパラメータを@code{initial-frame-alist}でXリソース
に一致する値に指定します。
@end defvar

これらのパラメータが独立したミニバッファ専用フレームを@code{(minibuffer . 
nil)}で指定していて、それがまだ作られていない場合には、Emacsはそれを作り
ます。

@defvar minibuffer-frame-alist
この変数の値はパラメータのalistで、その値は初期ミニバッファ専用フレームが
作られるときに使われます。ミニバッファ専用フレームはmain初期フレームのパラ
メータによって作られるかどうか決まります。
@end defvar

@defvar default-frame-alist
これは初期フレームの後のEmacsフレームのフレーム・パラメータのデフォルト値
を指定するalistです。
@end defvar

@ref{Choosing Window}の@code{special-display-frame-alist}も見てください。

Emacsを起動するときにウインドウの見栄えを指定するオプションを使うと、
@code{default-frame-alist}に要素を追加することにもなります。ただし、
@samp{-geometry}オプションだけは、その指定する位置が
@code{initial-frame-alist}に追加されます。@xref{Command Arguments,,,
emacs, The GNU Emacs Manual}。

@node X Frame Parameters, Size and Position, Initial Parameters, Frame Parameters
@subsection Xウインドウ・フレーム・パラメータ

フレームがどんなパラメータを持っているかは、どんな表示機構を使っているか
によって決まります。以下はXウインドウ・フレームのパラメータの表です。この
中で@code{name}、@code{height}、@code{width}、@code{buffer-predicate}は
非Xフレームでも有効です。

@table @code
@item name
フレームの名前です。ほとんどのウインドウ・マネージャはフレームの名前をそ
のフレームの上の縁に表示します。名前を指定しない場合やフレームが複数
ある場合には、フレーム中の選択されたウインドウに表示されているバッファを
元にした名前がつきます。

フレームを作るときに明示的にフレームの名前を指定した場合は、そのフレームの
Xリソースを探す時にもその名前が(Emacsの実行形式の名前のかわりに)用いられ
ます。

@item display
このフレームが開かれているディスプレイです。これは@code{DISPLAY}環境変数
のような形式@code{"@var{host}:@var{dpy}.@var{screen}"}の文字列でなくては
なりません。

@item left
ピクセルで表した画面の左端から見たウインドウの左端の画面上の位置です。値
は正の数@var{pos}か、もしくは負の@var{pos}値も指定できる形式@code{(+
@var{pos})}のリストのどちらでも構いません。

負の数@minus{}@var{pos}や形式@code{(- @var{pos})}のリストは、実は画面の
右端から見たウインドウの右端の位置を指定します。@var{pos}の正の値は左に
向かって数えます。パラメータが負の整数@minus{}@var{pos}なら@var{pos}は正
になります!

@item top
ピクセルで表した画面の上端から見たウインドウの上端の画面上の位置です。値
は正の数@var{pos}か、もしくは負の@var{pos}値も指定できる形式@code{(+
@var{pos})}のリストのどちらでも構いません。

負の数@minus{}@var{pos}や形式@code{(- @var{pos})}のリストは、実は画面の
下端から見たウインドウの下端の位置を指定します。@var{pos}の正の値は上に
向かって数えます。パラメータが負の整数@minus{}@var{pos}なら@var{pos}は正
になります!

@item icon-left
画面の左端からピクセルで数えた@emph{フレームのアイコンの}左端の画面上の
位置です。フレームがアイコン化されたときに効果をあらわします。

@item icon-top
画面の上端からピクセルで数えた@emph{フレームのアイコンの}上端の画面上の
位置です。フレームがアイコン化されたときに効果をあらわします。

@item user-position
フレームの画面上の位置がユーザに明示的に(たとえば@samp{geometry}オプション
などで)指定されたときに非@code{nil}になります。自動的に非@code{nil}にな
ることはありません。@code{left}と@code{top}パラメータに加えてこのパラメー
タを指定するのは@code{make-frame}を呼び出すLispプログラムの責任です。
@footnote{訳注: このパラメータは@code{top}や@code{left}の値を
@code{USPosition}か@code{PPosition}のどちらとしてウインドウ・マネージャ
に渡すかを制御します。@code{user-position}を指定すれば@code{USPosition}
となり、どんな場合でも指定した座標は反映されますが、@code{PPosition}の場
合はウインドウ・マネージャの設定によっては反映されません。}

@item height
文字数で表したフレーム内部の高さです。(高さをピクセル単位で得るには
@code{frame-pixel-height}を呼び出してください。@ref{Size and Position}参
照。)

@item width
文字数で表したフレーム内部の幅です。(幅をピクセル単位で得るには
@code{frame-pixel-width}を呼び出してください。@ref{Size and Position}参
照。)

@item window-id
フレームのXウインドウのID番号です。

@item minibuffer
このフレームがそれ自身のミニバッファをもつかどうかを示します。値が
@code{t}のときはミニバッファを持ち、@code{nil}のときは持ちません。
@code{only}のときはこのフレームはミニバッファそのものになります。値が(別
のフレームにある)ミニバッファ・ウインドウのときには、新しいフレームはそ
のミニバッファを使います。

@item buffer-predicate
このフレームのバッファ述語(buffer-predicate)関数です。これが@code{nil}で
なければ、関数@code{other-buffer}はどのバッファを候補にするかを決めるの
に(選択されたフレームの)この述語を使います。この述語はそれぞれのバッファ
ごとにそれを引数として呼び出されます。この述語が非@code{nil}を返すとその
バッファは候補になります。

@item font
フレームの中でテキストを表示するフォントの名前です。これは文字列です。

@item auto-raise
フレームが選択されたときに上昇(raise)するかどうかを示します(非@code{nil}の
とき上昇します)。

@item auto-lower
フレームが選択されなくなったときに下降(lower)するかどうかを示します(非
@code{nil}のとき下降します)。

@item vertical-scroll-bars
フレームに縦方向のスクロール・バーを表示するかどうかを示します(非
@code{nil}のとき表示します)。

@item horizontal-scroll-bars
フレームに横方向のスクロール・バーを表示するかどうかを示します(非
@code{nil}のとき表示します)。(横方向のスクロール・バーはまだ実装されてい
ません。)

@item scroll-bar-width
ピクセルで表した縦方向のスクロール・バーの幅です。

@item icon-type
このフレームがアイコン化されたときに表示するアイコンのタイプを示します。
値が文字列なら、アイコンに使用するビットマップが入っているファイルを指定
します。それ以外の全ての非@code{nil}値はデフォルトのビットマップ・アイコ
ン(ウシカモシカ(gnu)の絵)の使用を指定します。@code{nil}はテキスト・アイ
コンを指定します。

@item icon-name
このフレームがアイコン化されたときに使う名前です。これが@code{nil}ならフ
レームのタイトルを使います。

@item foreground-color
文字のイメージに使われる色を示します。これはXサーバーで定義されている有
効な色の名前を表す文字列です。

@item background-color
文字の背景に使われる色を示します。

@item mouse-color
マウス・ポインタの色を示します。

@item cursor-color
ポイントを表すカーソルの色を示します。

@item border-color
フレームの境界の色を示します。

@item cursor-type
カーソルを表示する方法を示します。認識される値は@code{bar}と@code{box}と
@code{(bar . @var{width})}です。シンボル@code{box}はよくあるやり方で、ポ
イントの後の文字に黒い箱を重ね書きします。これがデフォルトです。シンボル
@code{bar}はカーソルとして文字の間に縦棒を置きます。@code{(bar
. @var{width})}は@var{width}ピクセル幅の棒を指定します。

@item border-width
ウインドウの境界の幅をピクセルで示します。

@item internal-border-width
テキストと境界の間隔をピクセルで示します。

@item unsplittable
非@code{nil}の場合、このフレームのウインドウは自動的に分割されません。

@item visibility
フレームの可視性の状態を示します。三つの値をとり得ます。@code{nil}は不可視、@code{t}は可視、@code{icon}はアイコン化されています。
@xref{Visibility of Frames}。

@item menu-bar-lines
フレームの上部のメニューバーのために割り当てる行数を示します。デフォルト
は1です。@xref{Menu Bar}。(X toolkitを使うバージョンのEmacsでは、メニュー・
バーは1行だけです。指定された数は0より大きいかどうかだけが問題になります。)

@item parent-id
@c ??? Not yet working.
このフレームの親になるべきウインドウのXウインドウにおけるID番号です。こ
れを指定すると、ある別のアプリケーションのウインドウの中でEmacsのウイン
ドウを開くことができます。(これが実装されているかどうかははっきりしませ
ん。実際に試してちゃんと動くかどうか確かめてください。)
@end table

@node Size and Position,  , X Frame Parameters, Frame Parameters
@subsection フレームのサイズと位置

フレーム・パラメータ@code{left}、@code{top}、@code{height}、@code{width}
を使うとフレームのサイズや位置を変更したり読み出したりすることができます。
指定されない位置やサイズのパラメータは、ウインドウ・マネージャがそれぞれ
の流儀で決めてくれます。

サイズや位置を扱うための特別な機能がいくつかあります:

@defun set-frame-position frame left top
この関数は、@var{frame}の左上の角の位置を@var{left}と@var{top}にセットし
ます。これらの引数はピクセル単位で画面の左上の角から数えます。負のパラメー
タ値は画面の左上の角から上または右に向かって数えます。
@end defun

@defun frame-height &optional frame
@defunx frame-width &optional frame
これらの関数は、@var{frame}の高さと幅を文字数単位で返します。@var{frame}
を省略した場合は選択されているフレームを使用します。
@end defun

@defun frame-pixel-height &optional frame
@defunx frame-pixel-width &optional frame
これらの関数は@var{frame}の高さと幅をピクセル単位で返します。@var{frame}
を省略した場合は選択されているフレームを使用します。
@end defun

@defun frame-char-height &optional frame
@defunx frame-char-width &optional frame
これらの関数は@var{frame}の中の文字の高さと幅をピクセル単位で返します。
この値は選択したフォントに依存します。@var{frame}を省略した場合は選択さ
れているフレームを使用します。
@end defun

@defun set-frame-size frame cols rows
この関数は@var{frame}のサイズを、@var{cols}と@var{rows}で指定される文字
数単位の幅と高さにセットします。

ピクセル単位でサイズをセットするには、値を@code{frame-char-height}と
@code{frame-char-width}を使って文字数単位に変換してください。
@end defun

マルチ・フレームをサポートしていないバージョンのEmacsで画面の高さと幅を
指定するのに使われた、@code{set-screen-height}と@code{set-screen-width}
は旧式の関数ですがまだ使えます。これらの関数は選択されたフレームに対して
働きます。@xref{Screen Size}。

@defun x-parse-geometry geom
@cindex geometry specification
@cindex geometryの指定[geometryのしてい]
@code{x-parse-geometry}関数は標準的なXウインドウのgeometry文字列を
@code{make-frame}の引数の一部として使うことのできるalistに変換します。

alistは@var{geom}で指定されるパラメータとその値を表現します。それぞれの
要素は@code{(@var{parameter} . @var{value})}というような形です。
@var{parameter}として許されるものは@code{left}、@code{top}、@code{width}、
@code{height}です。

サイズのパラメータの値は整数でなくてはなりません。位置のパラメータ名
@code{left}と@code{top}は、ある値のときには右または下の端の位置を示すこ
とがあるので、完全には的確な名前ではありません。以下は@var{value}が位置
のパラメータとしてとり得る値です:

@table @asis
@item 整数
正の整数は画面の左または上の端と、ウインドウの左端または上端の距離です。
負の整数は画面の右または下の端とウインドウの右または下の端の距離です。

@item @code{(+ @var{position})}
これは画面の左または上の端からのウインドウの左または上の端の位置を指定し
ます。整数@var{position}は正でも負でも構いません。負の値は画面の外の位置
を指定することになります。

@item @code{(- @var{position})}
これは画面の右または下の端からのウインドウの右または下の端の位置を指定し
ます。整数@var{position}は正でも負でも構いません。負の値は画面の外の位置
を指定することになります。
@end table

例:

@example
(x-parse-geometry "35x70+0-0")
     @result{} ((width . 35) (height . 70)
         (left . 0) (top - 0))
@end example
@end defun

@ignore
New functions @code{set-frame-height} and @code{set-frame-width} set the
size of a specified frame.  The frame is the first argument; the size is
the second.
@end ignore

@node Frame Titles, Deleting Frames, Frame Parameters, Frames
@section フレーム・タイトル

全てのフレームはタイトルを持ち、ほとんどのウインドウ・マネージャはフレー
ムの上端にフレーム・タイトルを表示します。@code{name}フレーム属性を使っ
て明示的にタイトルを指定することができます。ですが、普通はこれを明示的に
指定せず、Emacsが自動的に作成するタイトルを使います。

Emacsはフレーム・タイトルを変数@code{frame-title-format}にはいっているテン
プレートを元にして作成します。

@defvar frame-title-format
この変数は明示的にタイトルが指定されなかったときに、フレームのタイトルを
作るやり方を指定します。

この変数の値は実際には@code{mode-line-format}のようなモード行構成要素
です。@xref{Mode Line Data}。
@end defvar

@defvar icon-title-format
この変数は明示的にフレームタイトルが指定されなかったときに、アイコン化さ
れたフレームのタイトルを作るやり方を指定します。このタイトルはアイコン自
身に表示されます。
@end defvar

@defvar multiple-frames
この変数はEmacsが自動的にセットします。二つ以上のフレーム(ミニバッファ専
用フレームや不可視フレームは数えません)があるときに、これの値は@code{t}
になります。@code{frame-title-format}のデフォルト値では、
@code{multiple-frames}を使って二つ以上のフレームがあるときにだけバッファ
の名前をフレーム・タイトルに入れるようにしています。

この変数は常に現在の端末にローカルでバッファローカルにはできません。
@xref{Multiple Displays}。
@end defvar

@node Deleting Frames, Finding All Frames, Frame Titles, Frames
@section フレームの消去
@cindex deletion of frames
@cindex 消去、フレームの[しょうきょ、フレームの]

フレームは明示的に@dfn{消去(delete)}するまでは可視になることができる状態
でいつづけます。消去されたフレームは画面上には出てきませんが、Lispオブジェ
クトとしては全ての参照がなくなるまで存在し続けます。消去されたフレームを
元に戻す方法は、保存してあったフレームの構成(@pxref{Frame
Configurations})を復元するのを除けば、存在しません。これはウインドウの場
合と同じです。

@deffn Command delete-frame &optional frame
この関数はフレーム@var{frame}を消去します。@var{frame}のデフォルトは選択
されているフレームです。
@end deffn

@defun frame-live-p frame
関数@code{frame-live-p}はフレーム@var{frame}が消去されていなければ非
@code{nil}を返します。
@end defun

あるウインドウ・マネージャにはウインドウを消去するコマンドがあります。これ
は特別なメッセージをウインドウを操作しているプログラムに送ることによって
実現されています。Emacsがこれらのコマンドのうちの一つを受けとると、
@code{delete-frame}イベントが発生します。このイベントの通常の定義は関数
@code{delete-frame}を呼び出すコマンドです。@xref{Misc Events}。


@node Finding All Frames, Frames and Windows, Deleting Frames, Frames
@section 全てのフレームの探索

@defun frame-list
関数@code{frame-list}は消去されていない全てのフレームのリストを返します。
これはバッファの場合の@code{buffer-list}と似ています。返されるリストは新
しく作られたものなので、リストを変更してもEmacsの内部には何の効果もあり
ません。
@end defun

@defun visible-frame-list
この関数は現在可視のフレームのリストを返します。@xref{Visibility of
Frames}。(端末フレームは選択された一つしか実際に表示されませんが、常に``
可視''とみなされます。)
@end defun

@defun next-frame &optional frame minibuf
関数@code{next-frame}は、任意のフレームから始められる全てのフレームを含
む便利な環を提供します。その環の中で@var{frame}の``次''のフレームを返し
ます。@var{frame}が省略されたときや@code{nil}のときのデフォルトは選択さ
れたフレームです。

2番目の引数@var{minibuf}はどんなフレームに注目するかを指定します:

@table @asis
@item @code{nil}
ミニバッファ専用フレームを除外する。
@item @code{visible}
全ての可視フレームに注目する。
@item 0
全ての可視またはアイコン化されたフレームに注目する。
@item ウインドウ
指定したウインドウをミニバッファとして使っているフレームだけに注目する。
@item その他
全てのウインドウに注目する。
@end table
@end defun

@defun previous-frame &optional frame minibuf
@code{next-frame}と同様ですが、環のまわる方向が逆です。
@end defun

@ref{Cyclic Window Ordering}の@code{next-window}と@code{previous-window}
も参照してください。

@node Frames and Windows, Minibuffers and Frames, Finding All Frames, Frames
@section フレームとウインドウ

それぞれのウインドウはただ一つのフレームに属していて、
@code{window-frame}を使うとそのフレームを得ることができます。

@defun window-frame window
この関数は@var{window}が属しているフレームを返します。
@end defun

一つのフレームに含まれる、ミニバッファ以外の全てのウインドウには循環する
順番がついています。順番は上左端のウインドウが先頭で、そこから下または右
へ向かって下右端のウインドウ(フレームがミニバッファを含んでいる場合は常
にミニバッファ・ウインドウ)まで進み、先頭に戻ります。

@defun frame-top-window frame
フレーム@var{frame}の上左端のウインドウを返します。
@end defun

常に全てのフレームにはただ一つの@dfn{そのフレーム内の選択された
(selected within the frame)}ウインドウがあります。つまり、フレームを選択
することはすなわちこのウインドウを選択することにもなります。フレームの現
在選択されているウインドウは@code{frame-selected-window}で得ることができ
ます。

@defun frame-selected-window frame
この関数は@var{frame}内の選択されたウインドウを返します。
@end defun

逆にいうと、Emacsでは@code{select-window}を使ってウインドウを選択するこ
とは、そのウインドウが存在するフレーム内の選択されたウインドウをそのウイ
ンドウにします。@xref{Selecting Windows}。

(普通は)フレームの中のウインドウの一つを返すもう一つの関数に
@code{minibuffer-window}があります。@xref{Minibuffer Misc}。

@node Minibuffers and Frames, Input Focus, Frames and Windows, Frames
@section ミニバッファとフレーム

通常はそれぞれのフレームはその最下部にそれ自身のミニバッファ・ウインドウ
を持っていて、あるフレームが選択されたときはそのフレームのミニバッファ・
ウインドウが使われます。フレームがミニバッファを持っていれば
@code{minibuffer-window}で得ることができます(@pxref{Minibuffer Misc})。

ですが、ミニバッファを持たないフレームも作ることができます。そのようなフ
レームはどれかほかのフレームのミニバッファ・ウインドウを使わなければなりま
せん。フレームを作るときにどの(ある別のフレームの)ミニバッファ・ウインド
ウを使うか指定することもできます。指定しなかった場合は、変数
@code{default-minibuffer-frame}が指すフレームのミニバッファを使うことに
なります。この変数の値はミニバッファを持っているフレームでなければなりま
せん。

ミニバッファ専用フレームを使っていると、ミニバッファに入力するときに自動
的に上昇して欲しいかもしれません。そういうときは変数
@code{minibuffer-auto-raise}を@code{t}にセットしましょう。@xref{Raising
and Lowering}。

@defvar default-minibuffer-frame
この変数はミニバッファ・ウインドウとして使うフレームのデフォルトを指定し
ます。これは常に現在の端末にローカルでバッファローカルにはできません。
@xref{Multiple Displays}。
@end defvar

@node Input Focus, Visibility of Frames, Minibuffers and Frames, Frames
@section インプット・フォーカス
@cindex input focus
@cindex selected frame
@cindex インプット・フォーカス[インプットフォーカス]
@cindex 選択されたフレーム[せんたくされたフレーム]

どんなときでも、一つのフレームが@dfn{選択されたフレーム(selected frame)}
になっています。選択されたウインドウはいつも選択されたフレームの中にあり
ます。

@defun selected-frame
この関数は選択されたフレームを返します。
@end defun

通常Xサーバは、キーボードからの入力をマウスがいるXのウインドウに送ります。
いくつかのウインドウ・マネージャはこういうXサーバの通常の動作を無効にし
て、マウスのクリックやキーボードのイベントを使って個々のXのウインドウへ
の@dfn{フォーカスの移動(shift the focus)}を行ないます。

@code{select-frame}を呼ぶことによってLispプログラムでフレームを``一時的
に''切替えることができます。これはウインドウ・マネージャを無効にするので
はなく、むしろウインドウ・マネージャがどうにかしてでしゃばってくるまでの
間、ウインドウ・マネージャの制御から逃れるということです。

テキスト専用端末を使っているときはウインドウ・マネージャはいません。した
がって@code{switch-frame}がフレームを切替える唯一の方法で、次に
@code{switch-frame}が呼ばれるまで有効ということになります。選択された端
末フレームだけが実際に端末に表示されます。初期の端末フレーム以外の端末フ
レームはそれぞれ番号を持っていて、選択されたフレームの番号はモード行
の@samp{Emacs}の後に表示されます(@pxref{Mode Line Variables})。

@c ??? This is not yet implemented properly.
@defun select-frame frame
この関数は、一時的にXサーバのフォーカスがもしあれば無視してフレーム
@var{frame}を選択します。@var{frame}を選択している状態は、ユーザが別のフ
レームを選択する何らかの動作を行なうまで、または次にこの関数が呼び出され
るまで続きます。
@end defun

EmacsはXサーバーやウインドウ・マネージャと協力して、サーバーとウインドウ・
マネージャの要求にしたがってどのフレームを選択するか調整します。このとき
@dfn{フォーカス(focus)}イベントと呼ばれる特殊な入力イベントが発生します。
コマンド・ループは@code{handle-switch-frame}を呼び出してフォーカス・イベ
ントを処理します。@xref{Focus Events}。
@c handle-select-frameってhandle-switch-frameの間違いだよね?
@c rmsに確認、修正。

@deffn Command handle-switch-frame frame
この関数はフォーカス・イベントを受け取ってフレーム@var{frame}を選択しま
す。

フォーカス・イベントは通常このコマンドを起動することによって自分の仕事を
行ないます。ほかにどんな理由があってもこれを呼び出してはいけません。
@end deffn

@defun redirect-frame-focus frame focus-frame
この関数は@var{frame}から@var{focus-frame}へフォーカスをリダイレクトしま
す。つまり@var{focus-frame}はそれ以降の@var{frame}へ送られるはずのキース
トロークを受け取ります。
このようなイベントの後には、@code{last-event-frame}は@var{focus-frame}に
なります。また、@var{frame}を指定するフレーム切替えイベントはかわりに
@var{focus-frame}を選択することになります。

@var{focus-frame}が@code{nil}のときは、@var{frame}に関する全てのリダイレ
クトをキャンセルします。したがって、また自分に向けられたイベントを受け取
ることになります。

フォーカスのリダイレクトの使い道の一つとしてミニバッファを持たないフレー
ムがあります。このようなフレームは別のフレームのミニバッファを使います。
別のフレームのミニバッファがアクティブになるとフォーカスはそのフレームに
リダイレクトされます。マウスがミニバッファをアクティブにしたフレームに残っ
ていたとしても、フォーカスはミニバッファが所属しているフレームに移ります。
@c どうも訳がこなれていない…

あるフレームを選択することはフォーカスのリダイレクトを変えることでもあり
得ます。フレーム@code{foo}が選択されているときにフレーム@code{bar}を選択
すると、@code{foo}を指していた全てのリダイレクトがかわりに@code{bar}を指
すことになります。この動作は、あるフレームから別のフレームへ
@code{select-window}を使って切替えたときに、フォーカスのリダイレクトがき
ちんと働けるようしています。

つまり、自分自身にフォーカスをリダイレクトしているフレームはフォーカスの
リダイレクトをしていないフレームと違う扱いを受けるということです。
@code{select-frame}は前者には働くが後者には働かないのです。

リダイレクトは@code{redirect-frame-focus}が呼ばれてリダイレクトが変更さ
れるまで、有効です。
@end defun

@node Visibility of Frames, Raising and Lowering, Input Focus, Frames
@section フレームの可視性
@cindex visible frame
@cindex invisible frame
@cindex iconified frame
@cindex frame visibility
@cindex 可視フレーム[かしフレーム]
@cindex 不可視フレーム[ふかしフレーム]
@cindex アイコン化されたフレーム[アイコンかされたフレーム]
@cindex フレームの可視性[フレームのかしせい]

Xウインドウ・フレームは、@dfn{可視(visible)}、@dfn{不可視(invisible)}、
@dfn{アイコン化(iconified)}のいずれかの状態にあります。もし可視なら、そ
の中身を見ることができます。もしアイコン化されていたら、フレームの中身は
画面には現れていませんが、アイコンが見えます。もし不可視なら、そのフレー
ムは画面上には見えていませんし、アイコンも同様です。

端末フレームにおいては、どんな場合でも選択されたものしか実際には表示され
ないので可視性は無意味です。

@deffn Command make-frame-visible &optional frame
この関数は@var{frame}を可視にします。@var{frame}を省略すると選択されてい
るフレームを可視にします。
@end deffn

@deffn Command make-frame-invisible &optional frame
この関数は@var{frame}を不可視にします。@var{frame}を省略すると選択されて
いるフレームを不可視にします。
@end deffn

@deffn Command iconify-frame &optional frame
この関数は@var{frame}をアイコン化します。@var{frame}を省略すると選択され
ているフレームをアイコン化します。
@end deffn

@defun frame-visible-p frame
フレーム@var{frame}の可視性の状態を返します。@var{frame}が可視なら
@code{t}、不可視なら@code{nil}、アイコン化されていれば@code{icon}を返し
ます。
@end defun

可視性の状態はフレーム・パラメータにもありますので、それを読み出したり変更
したりすることもできます。@xref{X Frame Parameters}。

ユーザはウインドウ・マネージャを使ってフレームをアイコン化したりアイコン
化を解除することができます。これはEmacsが制御できるレベルよりも下位のレ
ベルで行なわれますが、このような変更をたどるのにイベントを使うことができ
ます。

@node Raising and Lowering, Frame Configurations, Visibility of Frames, Frames
@section フレームの上昇/下降

Xウインドウ・システムは机の暗喩を用いています。この暗喩の中に、ウインドウ
が、画面と垂直の方向の想像上の3番目の次元の中に積み重なっていて、``最高''
から``最低''まで順序づけられているというアイデアがあります。二つのウイン
ドウが重なっている場所は、高い方が低い方を隠してしまいます。もっとも低い
ウインドウでも、ほかのウインドウがその上に重なっていなければ見ることができ
ます。

@cindex raising a frame
@cindex lowering a frame
@cindex フレームを上昇させる[フレームをじょうしょうさせる]
@cindex フレームを下降させる[フレームをかこうさせる]
@cindex 上昇、フレームの[じょうしょう、フレームの]
@cindex 下降、フレームの[かこう、フレームの]
このウインドウの順番は固定ではありません。むしろ、この順番は頻繁に変更さ
れることが多いでしょう。ウインドウを@dfn{上昇(raising)}させるというのは、
ウインドウを重なりの1番上に``持ちあげる''ことを意味します。ウインドウを
@dfn{下降(lowering)}させるというのは、ウインドウを重なりの1番下へ移動し
ます。この移動は想像上の3番目の次元の中だけで、ウインドウの画面上の位置
は変わりません。

以下の関数を使ってEmacsのXのウインドウを上昇、下降させることができます:

@deffn Command raise-frame frame
この関数はフレーム@var{frame}を上昇させます。
@end deffn

@deffn Command lower-frame frame
この関数はフレーム@var{frame}を下降させます。
@end deffn

@defopt minibuffer-auto-raise
非@code{nil}の場合、ミニバッファがアクティブになったときにミニバッファ・
ウインドウが属するフレームが上昇します。
@end defopt

フレーム・パラメータを使ってフレームごとに、自動上昇(フレームが選択され
たときに自動的に上昇する)や自動下降(フレームが選択されなくなったときに自
動的に下降する)するようにもできます。@xref{X Frame Parameters}。

@node Frame Configurations, Mouse Tracking, Raising and Lowering, Frames
@section フレーム構成
@cindex frame configuration
@cindex フレーム構成[フレームこうせい]

@dfn{フレーム構成(frame configuration)}とは、現在のフレーム群の配置、全
ての属性、それぞれのウインドウの構成を記録することです。

@defun current-frame-configuration
この関数は現在のフレーム群の配置やそれらの中身を記述したフレーム構成リス
トを返します。
@end defun

@defun set-frame-configuration configuration
この関数はフレームの状態を@var{configuration}に記述されている状態に戻し
ます。
@end defun

@node Mouse Tracking, Mouse Position, Frame Configurations, Frames
@section マウスの追跡
@cindex mouse tracking
@cindex tracking the mouse
@cindex マウスの追跡[マウスのついせき]
@cindex 追跡、マウスの[ついせき、マウスの]
@c うーむ、「マウスの追跡」ねぇ… 何かtrackのいい訳ないですか?

マウスを@dfn{追跡(track)}することは、すなわちマウスがどこにあるのかを指
し示すために何かを表示したり、それをマウスの動きに応じて動かすことは、し
ばしば役にたちます。
@c うーむ、よくわからん…
効率よくマウスを追跡にするためには、マウスが実際に動くまで待つ方法が必要
です。

マウスを追跡する便利な方法は、マウスの移動を表すイベントを得ることです。
そうすれば、イベントを待つことによってマウスの移動を待つことができます。
おまけに、おそらく起きるであろうほかの種類のイベントを容易に扱うことができ
ます。普通、永遠にマウスを追跡したりはせず、ボタンを離すとかいったあるほか
のイベントがおこるまでしか追跡しないので、これは役にたちます。
@c どうも、訳がぎごちない

@defspec track-mouse body@dots{}
マウス移動の入力イベントが起きている間、@var{body}を実行します。
@var{body}の中では、@code{read-event}や@code{read-key-sequence}を使って
それらのイベントを読みとることができます。マウス移動イベントのフォーマッ
トについては、@xref{Motion Events}。

@code{track-mouse}の返り値は、@var{body}の最後の形式の値になります。
@c ここで「形式」と訳すのは無理があるか?
@end defspec

マウスの追跡の通常の用途は、現在位置でボタンを押したり離したりしたことの
結果を画面に表示することです。

多くの場合、@code{mouse-face}テキスト属性を使うことによってマウスを追跡
しなくてもすませることができます(@pxref{Special Properties})。これは非常
に低レベルで働きますので、Lispレベルのマウスの追跡よりもスムーズに動作
します。

@ignore
@c These are not implemented yet.

These functions change the screen appearance instantaneously.  The
effect is transient, only until the next ordinary Emacs redisplay.  That
is ok for mouse tracking, since it doesn't make sense for mouse tracking
to change the text, and the body of @code{track-mouse} normally reads
the events itself and does not do redisplay.

@defun x-contour-region window beg end
This function draws lines to make a box around the text from @var{beg}
to @var{end}, in window @var{window}.
@end defun

@defun x-uncontour-region window beg end
This function erases the lines that would make a box around the text
from @var{beg} to @var{end}, in window @var{window}.  Use it to remove
a contour that you previously made by calling @code{x-contour-region}.
@end defun

@defun x-draw-rectangle frame left top right bottom
This function draws a hollow rectangle on frame @var{frame} with the
specified edge coordinates, all measured in pixels from the inside top
left corner.  It uses the cursor color, the one used for indicating the
location of point.
@end defun

@defun x-erase-rectangle frame left top right bottom
This function erases a hollow rectangle on frame @var{frame} with the
specified edge coordinates, all measured in pixels from the inside top
left corner.  Erasure means redrawing the text and background that
normally belong in the specified rectangle.
@end defun
@end ignore

@node Mouse Position, Pop-Up Menus, Mouse Tracking, Frames
@section マウスの位置
@cindex mouse position
@cindex position of mouse
@cindex マウスの位置[マウスのいち]
@cindex 位置、マウスの[いち、マウスの]

関数@code{mouse-position}と@code{set-mouse-position}はマウスの現在位置へ
アクセスする手段を提供します。

@defun mouse-position
この関数はマウスの位置を返します。返り値は@code{(@var{frame} @var{x}
. @var{y})}という感じで、@var{x}と@var{y}は@var{frame}の上左端からの文字
数単位の位置を表す整数です。
@end defun

@defun set-mouse-position frame x y
この関数は@var{frame}の@var{x}、@var{y}の位置へ@dfn{マウスをワープ
(warps the mouse)}させます。引数の@var{x}と@var{y}は@var{frame}の上左端か
らの文字数単位の位置を表す整数です。
@end defun

@defun mouse-pixel-position
この関数は、返り値の座標が文字数単位ではなくピクセル単位であることを除け
ば@code{mouse-position}と同じです。
@end defun

@defun set-mouse-pixel-position frame x y
この関数は、@var{x}と@var{y}が文字数単位ではなくピクセル単位であることを
除けば@code{set-mouse-position}と同じようにマウスをワープさせます。この
座標はフレームの内部でなくても構いません。
@end defun

@need 3000

@node Pop-Up Menus, Dialog Boxes, Mouse Position, Frames
@section ポップアップ・メニュー

Xウインドウを使っているときは、Lispプログラムはユーザがマウスで選択でき
るメニューをポップアップすることができます。

@defun x-popup-menu position menu
この関数はポップアップ・メニューを表示して、ユーザが何を選択したかを返しま
す。

引数@var{position}は画面のどこにメニューを置くかを指定します。この引数は
マウス・ボタン・イベント(ボタンを押した場所にメニューを置くことになりま
す)か次の形式のどちらでも構いません:

@example
((@var{xoffset} @var{yoffset}) @var{window})
@end example

@noindent
@var{xoffset}と@var{yoffset}は@var{window}のフレームの左上端からのピクセ
ル単位の座標です。

@var{position}が@code{t}の場合は現在のマウスの位置を使います。
@var{position}が@code{nil}のときは、実際にはメニューを表示せずに
@var{menu}の中のキーマップで指定されたものの等価なキー・バインドをあらか
じめ調べておきます。

引数の@var{menu}はメニューに何を表示するかを指示します。キーマップかキー
マップのリスト(@pxref{Menu Keymaps})、もしくは次のような形式をとります:

@example
(@var{title} @var{pane1} @var{pane2}...)
@end example

@noindent
それぞれの枠(pane)は次の形式のリストです。

@example
(@var{title} (@var{line} . @var{item})...)
@end example

それぞれの@var{line}は文字列で、@var{item}はその@var{line}が選ばれたときに
返される値です。
@end defun

@strong{使用上の注意:} あるメニューが前置キーにメニュー・キー
マップとしてバインドされている場合は、そのメニューを表示するのに
@code{x-popup-menu}を使ってはいけません。
@c だめだー、ぜんぜんわかんねー
@c RMSに質問して納得。思い切って意訳することにした。
メニューをつくるのにメニュー・キーマップを使った場合は、@kbd{C-h c}と
@kbd{C-h a}でそのメニューの中のそれぞれの項目を見ることやヘルプを出すこ
とができます。そうではなく、@code{x-popup-menu}を呼び出すコマンドによっ
てメニューを定義した場合は、ヘルプ機能はそのコマンドの中で何が行なわれて
いるのかを知ることはできませんので、そのメニューの項目に関してヘルプを出
すことはできません。そのため、メニュー・バーの全ての項目は普通はメニュー・
キーマップを用いて作られています。

@node Dialog Boxes, Pointer Shapes, Pop-Up Menus, Frames
@section ダイアログ・ボックス
@cindex dialog boxes
@cindex ダイアログ・ボックス[ダイアログボックス]

ダイアログ・ボックスはポップアップ・メニューの変形です。常にフレームの真
中に現れ、一つの階層と一つの枠(pane)しか持っていないところが違います(X
Toolkitを使っている場合)。ダイアログ・ボックスは、``yes''か``no''などで
答えられる質問をするのに主に使われます。関数@code{y-or-n-p}と
@code{yes-or-no-p}は、マウス・クリックで起動されたコマンドから呼び出され
た場合、キーボードの代わりにダイアログ・ボックスを使用します。

@defun x-popup-dialog position contents
この関数はポップアップ・ダイアログ・ボックスを表示し、ユーザが何を選択し
たかを示すものを返します。引数@var{contents}には選択肢を以下のフォーマッ
トで指定します:

@example
(@var{title} (@var{string} . @var{value})@dots{})
@end example

@noindent
これは@code{x-popup-menu}に一つの枠を指定するときのリストに似ています。

返り値は選ばれた選択肢の@var{value}になります。

リストの要素は@code{(@var{string} . @var{value})}というコンス・セルの代
わりにただの文字列でも構いません。その場合は選択できない箱になります。

リストの中に@code{nil}がある場合は、項目を右と左に分ける働きをします。
@code{nil}よりも前にある項目は左に、後にある項目は右に表示されます。リス
トの中に@code{nil}がない場合は、おおよそ半分ずつ左右に分けられます。

ダイアログ・ボックスは、常にフレームの中央に表示されます。引数
@var{position}はどのフレームに表示するかを指定します。とりうる値は
@code{x-popup-menu}と同様ですが、細かい座標は無視され、フレームだけが認
識されます。

あなたのEmacsの実行形式がX toolkitを使用しない設定で作られている場合は、
本物のダイアログ・ボックスは使えません。その代わり同じ項目のポップアップ・
メニューをフレームの中央に表示します。
@end defun

@node Pointer Shapes, X Selections, Dialog Boxes, Frames
@section ポインタの形状
@cindex pointer shape
@cindex mouse pointer shape
@cindex ポインタの形状[ポインタのけいじょう]
@cindex マウス・ポインタの形状[マウスポインタのけいじょう]

これらの変数はいろいろな状況でのマウス・ポインタの形状を指定します:

@table @code
@item x-pointer-shape
@vindex x-pointer-shape
この変数はEmacsのフレーム中の普通のポインタの形状を指定します。

@item x-sensitive-text-pointer-shape
@vindex x-sensitive-text-pointer-shape
この変数はマウスがマウス感知テキストの上にあるときのポインタの形状を指定
します。
@end table

これらの変数は新しく作られたフレームに影響を与えます。存在するフレームに
影響することは普通はありませんが、フレームのマウスの色をセットするとポイ
ンタの形状もこれらの変数の現在の値に基づいて更新されます。@xref{X Frame
Parameters}。

これらのポインタの形状のどちらをも指定するのに使える値は、ファイル
@file{lisp/x-win.el}で定義されています。これらのリストを見るには@kbd{M-x
apropos @key{RET} x-pointer @key{RET}}を使ってください。

@node X Selections, Color Names, Pointer Shapes, Frames
@section Xセレクション
@cindex selection (for X windows)
@cindex セレクション、Xウィンドウの[セレクション、Xウィンドウの]

Xサーバーはアプリケーション間でデータを交換できるようにするために@dfn{セ
レクション(selection)}のセットを記録します。さまざまなセレクションは
@dfn{セレクション・タイプ(selection type)}で識別されます。セレクション・
タイプはEmacs上ではシンボルで表されます。Emacsを含むXクライアントは、与
えられたどのタイプのセレクションでも読んだりセットしたりできます。

@defun x-set-selection type data
この関数はXサーバの``セレクション''をセットします。セレクション・タイプ
@var{type}とそれに割り当てる値@var{data}の二つの引数をとります。
@var{data}が@code{nil}の場合は、そのセレクションをクリアします。それ以外
に@var{data}には次のいずれかを指定できます。文字列、シンボル、整数(また
は二つの整数のコンスやリスト)、オーバーレイ、同じバッファを指している二つの
マーカのコンス。オーバーレイやマーカのペアは、オーバーレイの中やマーカの間
のテキストを表します。

@var{data}は、上記非ベクタのセレクションの値のベクタでも構いません。

それぞれの可能な@var{type}は、それ自身の独立に変更可能なセレクションの値
を持っています。
@c この直訳調は何とかならんものか…
通常@var{type}の値は@code{PRIMARY}と@code{SECONDARY}です。これらのシンボ
ルはXウインドウ・システムの慣習に合わせて大文字の名前になっています。デフォ
ルトは@code{PRIMARY}です。
@end defun

@defun x-get-selection &optional type data-type
この関数は、EmacsやほかのXクライアントがセットしたセレクションにアクセスし
ます。この関数は二つのオプション引数@var{type}と@var{data-type}をとります。
セレクション・タイプ@var{type}のデフォルトは@code{PRIMARY}です

@var{data-type}引数は、ほかのXクライアントから得た生のデータをLispデータに
変換するときに使用するデータ変換の形式を指定します。
@c ちょっとくどいか…
意味がある値は、@code{TEXT}、@code{STRING}、
@code{TARGETS}、@code{LENGTH}、@code{DELETE}、@code{FILE_NAME}、
@code{CHARACTER_POSITION}、@code{LINE_NUMBER}、@code{COLUMN_NUMBER}、
@code{OWNER_OS}、@code{HOST_NAME}、@code{USER}、@code{CLASS}、
@code{NAME}、@code{ATOM}、@code{INTEGER}です(これらのシンボルはXの慣習に
合わせて大文字の名前になっています)。デフォルトは@code{STRING}です。
@end defun

@cindex cut buffer
@cindex カット・バッファ[カットバッファ]
Xサーバーは、テキストやほかのデータをアプリケーション間でやりとりできる、
番号付の@dfn{カット・バッファ(cut buffer)}のセットも持っています。カッ
ト・バッファはobsoleteとみなされていますが、Emacsはまだこれを使っているX
クライアントのためにサポートしています。

@defun x-get-cut-buffer n
この関数は番号@var{n}のカット・バッファの中身を返します。
@end defun

@defun x-set-cut-buffer string
この関数は、@var{string}を先頭のカット・バッファ(カット・バッファ0)に入れ、
Emacsで連続したkillを行なったときに、killリングを繰り下げるのと同様に、
ほかのカット・バッファの全ての値を繰り下げます。
@end defun

@node Color Names, Resources, X Selections, Frames
@section 色の名前

@defun x-color-defined-p color
この関数は色の名前@var{color}が有効かどうかを報告します。有効なら
@code{t}、そうでないなら@code{nil}を返します。
@c @var{color}は原文にないけど、入れた方がいいよね?

これは使っているディスプレイがその色をちゃんとサポートしているかどうかは
教えてくれないことに注意してください。任意の種類のディスプレイで定義され
ている色のどれかについて問い合わせて、Xサーバーがどう働くかについてある
結果を得ることができます。これはあなたのディスプレイが色@var{color}をサ
ポートしているかどうかテストする近似的方法です:

@example
(defun x-color-supported-p (color)
  (and (x-color-defined-p color)
       (or (x-display-color-p)
           (member color '("black" "white"))
           (and (> (x-display-planes) 1)
                (equal color "gray")))))
@end example
@end defun

@defun x-color-values color
この関数は@var{color}が理想的にはどんな感じで見えるべきかを記述する値を
返します。@var{color}が定義されていれば、値は赤の量、緑の量、青の量を表
す三つの整数のリストです。それぞれの整数の範囲は原則として0から65535です
が、実際には65280以上の値はないようです。
@c 65535は出てくるんだけど…
@var{color}が定義されていなければ値は@code{nil}です。

@example
(x-color-values "black")
     @result{} (0 0 0)
(x-color-values "white")
     @result{} (65280 65280 65280)
(x-color-values "red")
     @result{} (65280 0 0)
(x-color-values "pink")
     @result{} (65280 49152 51968)
(x-color-values "hungry")
     @result{} nil
@end example
@end defun

@node Resources, Server Data, Color Names, Frames
@section Xのリソース

@defun x-get-resource attribute class &optional component subclass
この関数@code{x-get-resource}は、Xウインドウのデフォルト・データベースか
らリソースの値を取り出します。

リソースは、@dfn{キー(key)}と@dfn{クラス(class)}の組合せの索引がつけられ
ています。この関数は、
@samp{@var{instance}.@var{attribute}}(@var{instance}は、Emacsが起動され
たときの名前です)の形式をキーに、@samp{Emacs}をクラスとして使って検索し
ます。

オプション引数@var{component}と@var{subclass}は、それぞれキーとクラスにつ
け加えられます。これらは両方とも指定するか、両方とも指定しないかのどちら
かでなければなりません。これらを指定したときにはキーは
@samp{@var{instance}.@var{component}.@var{attribute}}となり、クラスは
@samp{Emacs.@var{class}.@var{subclass}}となります。
@end defun

  @xref{Resources X,, X Resources, emacs, The GNU Emacs Manual}。

@node Server Data,  , Resources, Frames
@section Xサーバーに関するデータ

この節では、Emacsが使っているXサーバーの能力や素性に関する情報を得るため
の関数について説明します。
@c 変数なんかないじゃん!
@c rmsに確認済。変数を削除。
これらの関数それぞれにはあなたが注目しているディスプレイを指定するように
なっています。@var{display}引数にはディスプレイの名前とフレーム(つまりそ
のフレームが表示されているディスプレイを使います)のどちらでも指定できま
す。@var{display}引数を省略、もしくは@code{nil}を指定した場合は、選択さ
れたフレームのディスプレイを使うことになります。

@defun x-display-screens &optional display
この関数はそのディスプレイがいくつ画面を持っているかを返します。
@end defun

@defun x-server-version &optional display
この関数はそのディスプレイで動いているXサーバーのバージョン番号のリスト
を返します。
@end defun

@defun x-server-vendor &optional display
この関数はそのXサーバーのソフトウェアを提供しているベンダーを返します。
@end defun

@defun x-display-pixel-height &optional display
この関数はその画面の高さをピクセル単位で返します。
@end defun

@defun x-display-mm-height &optional display
この関数はその画面の高さをミリメートル単位で返します。
@end defun

@defun x-display-pixel-width &optional display
この関数はその画面の幅をピクセル単位で返します。
@end defun

@defun x-display-mm-width &optional display
この関数はその画面の幅をミリメートル単位で返します。
@end defun

@defun x-display-backing-store &optional display
この関数はその画面のバッキング・ストアの能力を返します。返り値は、
@code{always}、@code{when-mapped}、@code{not-useful}です。
@end defun

@defun x-display-save-under &optional display
この関数はそのディスプレイがSaveUnder機能をサポートしている場合非
@code{nil}を返します。
@end defun

@defun x-display-planes &optional display
この関数はそのディスプレイがサポートしているプレーンの数を返します。
@end defun

@defun x-display-visual-class &optional display
この関数はその画面のビジュアル・クラスを返します。返り値は次のシンボル、
@code{static-gray}、@code{gray-scale}、@code{static-color}、
@code{pseudo-color}、@code{true-color}、@code{direct-color}のいずれかで
す。
@end defun

@defun x-display-grayscale-p &optional display
この関数はその画面が灰色の濃淡を表示できるときに@code{t}を返します。
@end defun

@defun x-display-color-p &optional display
この関数はその画面がカラー画面のときに@code{t}を返します。
@end defun

@defun x-display-color-cells &optional display
この関数はその画面がサポートしているカラー・セルの数を返します。
@end defun

@ignore
@defvar x-no-window-manager
This variable's value is is @code{t} if no X window manager is in use.
@end defvar
@end ignore

@ignore
@item
The functions @code{x-pixel-width} and @code{x-pixel-height} return the
width and height of an X Window frame, measured in pixels.
@end ignore
