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

26. フレーム

フレーム(frame)は一つ以上のEmacsのウィンドウを含む画面上の長方形 状のものです。フレームには最初は一つのウィンドウ(と多分ミニバッファ)しか ありませんが、縦方向にも横方向にも分割することができます。

Emacsがテキスト専用端末で起動されたときは、一つの端末フレーム (terminal frame)で立ち上がります。追加のフレームを作成したときは、Emacs は同時にはただ一つのフレームだけを、当たり前ですが、端末の画面に表示しま す。

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

Function: framep object

この述語はobjectがフレームのときにtを、それ以外のとき はnilを返します。

関連する情報はSee section Emacsの表示


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

26.1 フレームの作成

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

Function: make-frame &optional alist

この関数は新しいフレームを作ります。Xを使っていればXウインドウフレームを、 そうでなければ端末フレームを作ります。

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

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

Variable: before-make-frame-hook

make-frameによって実際にフレームが作られる前に起動される正規フッ クです。

Variable: after-make-frame-hook

make-frameによってフレームが作られたあとに起動される正規フックです。


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

26.2 複数のディスプレイ

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

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

一つのXサーバーは一つ以上の画面を扱うことができます。ディスプレイの名前 の部分は与えられたサーバーの画面番号を指定しています。一つのサーバーに属 する二つの画面を使うときは、Emacsはそれらの名前が似通っていることによりそ れらが一つのキーボードを共有していることを知り、それらを一つの端末として 扱います。

Command: make-frame-on-display display &optional parameters

これはディスプレイdisplay上に新しいフレームを作ります。ほかのパラメー タはparametersから得ます。display引数を別にすれば、 make-frameと同様です(see section フレームの作成)。

Function: x-display-list

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

Function: x-open-connection display &optional xrm-string

この関数はXディスプレイdisplayに接続します。そのディスプレイ上にフ レームを作ることはしませんが、そのディスプレイとの通信が確立されているか チェックすることはできます。

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

 
"*BorderWidth: 3\n*InternalBorder: 2\n"

See section Xのリソース

Function: x-close-connection display

この関数はディスプレイdisplayとの接続を閉じます。これを実行する前 に、まずそのディスプレイ上に開かれている全てのフレームを削除しなくてはい けません(see section フレームの消去)。


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

26.3 フレーム・パラメータ

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

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


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

26.3.1 フレーム・パラメータへのアクセス

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

Function: frame-parameters frame

関数frame-parametersframeのすべてのパラメータとその値から なるalistを返します。

Function: modify-frame-parameters frame alist

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


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

26.3.2 初期フレーム・パラメータ

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

Variable: initial-frame-alist

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

 
(parameter . value)

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

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

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

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

Variable: minibuffer-frame-alist

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

Variable: default-frame-alist

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

表示に用いるウィンドウの選択special-display-frame-alistも見てください。

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


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

26.3.3 Xウインドウ・フレーム・パラメータ

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

name

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

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

display

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

left

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

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

top

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

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

icon-left

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

icon-top

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

user-position

フレームの画面上の位置がユーザに明示的に(たとえば`geometry'オプション などで)指定されたときに非nilになります。自動的に非nilにな ることはありません。lefttopパラメータに加えてこのパラメー タを指定するのはmake-frameを呼び出すLispプログラムの責任です。 (25)

height

文字数で表したフレーム内部の高さです。(高さをピクセル単位で得るには frame-pixel-heightを呼び出してください。フレームのサイズと位置参 照。)

width

文字数で表したフレーム内部の幅です。(幅をピクセル単位で得るには frame-pixel-widthを呼び出してください。フレームのサイズと位置参 照。)

window-id

フレームのXウインドウのID番号です。

minibuffer

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

buffer-predicate

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

font

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

auto-raise

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

auto-lower

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

vertical-scroll-bars

フレームに縦方向のスクロール・バーを表示するかどうかを示します(非 nilのとき表示します)。

horizontal-scroll-bars

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

scroll-bar-width

ピクセルで表した縦方向のスクロール・バーの幅です。

icon-type

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

icon-name

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

foreground-color

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

background-color

文字の背景に使われる色を示します。

mouse-color

マウス・ポインタの色を示します。

cursor-color

ポイントを表すカーソルの色を示します。

border-color

フレームの境界の色を示します。

cursor-type

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

border-width

ウインドウの境界の幅をピクセルで示します。

internal-border-width

テキストと境界の間隔をピクセルで示します。

unsplittable

nilの場合、このフレームのウインドウは自動的に分割されません。

visibility

フレームの可視性の状態を示します。三つの値をとり得ます。nilは不可視、tは可視、iconはアイコン化されています。 See section フレームの可視性

menu-bar-lines

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

parent-id

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


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

26.3.4 フレームのサイズと位置

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

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

Function: set-frame-position frame left top

この関数は、frameの左上の角の位置をlefttopにセットし ます。これらの引数はピクセル単位で画面の左上の角から数えます。負のパラメー タ値は画面の左上の角から上または右に向かって数えます。

Function: frame-height &optional frame
Function: frame-width &optional frame

これらの関数は、frameの高さと幅を文字数単位で返します。frame を省略した場合は選択されているフレームを使用します。

Function: frame-pixel-height &optional frame
Function: frame-pixel-width &optional frame

これらの関数はframeの高さと幅をピクセル単位で返します。frame を省略した場合は選択されているフレームを使用します。

Function: frame-char-height &optional frame
Function: frame-char-width &optional frame

これらの関数はframeの中の文字の高さと幅をピクセル単位で返します。 この値は選択したフォントに依存します。frameを省略した場合は選択さ れているフレームを使用します。

Function: set-frame-size frame cols rows

この関数はframeのサイズを、colsrowsで指定される文字 数単位の幅と高さにセットします。

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

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

Function: x-parse-geometry geom

x-parse-geometry関数は標準的なXウインドウのgeometry文字列を make-frameの引数の一部として使うことのできるalistに変換します。

alistはgeomで指定されるパラメータとその値を表現します。それぞれの 要素は(parameter . value)というような形です。 parameterとして許されるものはlefttopwidthheightです。

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

整数

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

(+ position)

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

(- position)

これは画面の右または下の端からのウインドウの右または下の端の位置を指定し ます。整数positionは正でも負でも構いません。負の値は画面の外の位置 を指定することになります。

例:

 
(x-parse-geometry "35x70+0-0")
     ⇒ ((width . 35) (height . 70)
         (left . 0) (top - 0))

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

26.4 フレーム・タイトル

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

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

Variable: frame-title-format

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

この変数の値は実際にはmode-line-formatのようなモード行構成要素 です。See section モード行の表示をコントロールするデータ構造

Variable: icon-title-format

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

Variable: multiple-frames

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

この変数は常に現在の端末にローカルでバッファローカルにはできません。 See section 複数のディスプレイ


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

26.5 フレームの消去

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

Command: delete-frame &optional frame

この関数はフレームframeを消去します。frameのデフォルトは選択 されているフレームです。

Function: frame-live-p frame

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

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


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

26.6 全てのフレームの探索

Function: frame-list

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

Function: visible-frame-list

この関数は現在可視のフレームのリストを返します。See section フレームの可視性。(端末フレームは選択された一つしか実際に表示されませんが、常に" 可視"とみなされます。)

Function: next-frame &optional frame minibuf

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

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

nil

ミニバッファ専用フレームを除外する。

visible

全ての可視フレームに注目する。

0

全ての可視またはアイコン化されたフレームに注目する。

ウインドウ

指定したウインドウをミニバッファとして使っているフレームだけに注目する。

その他

全てのウインドウに注目する。

Function: previous-frame &optional frame minibuf

next-frameと同様ですが、環のまわる方向が逆です。

ウィンドウの循環順序next-windowprevious-window も参照してください。


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

26.7 フレームとウインドウ

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

Function: window-frame window

この関数はwindowが属しているフレームを返します。

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

Function: frame-top-window frame

フレームframeの上左端のウインドウを返します。

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

Function: frame-selected-window frame

この関数はframe内の選択されたウインドウを返します。

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

(普通は)フレームの中のウインドウの一つを返すもう一つの関数に minibuffer-windowがあります。See section ミニバッファそのほか


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

26.8 ミニバッファとフレーム

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

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

ミニバッファ専用フレームを使っていると、ミニバッファに入力するときに自動 的に上昇して欲しいかもしれません。そういうときは変数 minibuffer-auto-raisetにセットしましょう。See section フレームの上昇/下降

Variable: default-minibuffer-frame

この変数はミニバッファ・ウインドウとして使うフレームのデフォルトを指定し ます。これは常に現在の端末にローカルでバッファローカルにはできません。 See section 複数のディスプレイ


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

26.9 インプット・フォーカス

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

Function: selected-frame

この関数は選択されたフレームを返します。

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

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

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

Function: select-frame frame

この関数は、一時的にXサーバのフォーカスがもしあれば無視してフレーム frameを選択します。frameを選択している状態は、ユーザが別のフ レームを選択する何らかの動作を行なうまで、または次にこの関数が呼び出され るまで続きます。

EmacsはXサーバーやウインドウ・マネージャと協力して、サーバーとウインドウ・ マネージャの要求にしたがってどのフレームを選択するか調整します。このとき フォーカス(focus)イベントと呼ばれる特殊な入力イベントが発生します。 コマンド・ループはhandle-switch-frameを呼び出してフォーカス・イベ ントを処理します。See section フォーカス・イベント

Command: handle-switch-frame frame

この関数はフォーカス・イベントを受け取ってフレームframeを選択しま す。

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

Function: redirect-frame-focus frame focus-frame

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

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

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

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

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

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


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

26.10 フレームの可視性

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

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

Command: make-frame-visible &optional frame

この関数はframeを可視にします。frameを省略すると選択されてい るフレームを可視にします。

Command: make-frame-invisible &optional frame

この関数はframeを不可視にします。frameを省略すると選択されて いるフレームを不可視にします。

Command: iconify-frame &optional frame

この関数はframeをアイコン化します。frameを省略すると選択され ているフレームをアイコン化します。

Function: frame-visible-p frame

フレームframeの可視性の状態を返します。frameが可視なら t、不可視ならnil、アイコン化されていればiconを返し ます。

可視性の状態はフレーム・パラメータにもありますので、それを読み出したり変更 したりすることもできます。See section Xウインドウ・フレーム・パラメータ

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


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

26.11 フレームの上昇/下降

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

このウインドウの順番は固定ではありません。むしろ、この順番は頻繁に変更さ れることが多いでしょう。ウインドウを上昇(raising)させるというのは、 ウインドウを重なりの1番上に"持ちあげる"ことを意味します。ウインドウを 下降(lowering)させるというのは、ウインドウを重なりの1番下へ移動し ます。この移動は想像上の3番目の次元の中だけで、ウインドウの画面上の位置 は変わりません。

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

Command: raise-frame frame

この関数はフレームframeを上昇させます。

Command: lower-frame frame

この関数はフレームframeを下降させます。

User Option: minibuffer-auto-raise

nilの場合、ミニバッファがアクティブになったときにミニバッファ・ ウインドウが属するフレームが上昇します。

フレーム・パラメータを使ってフレームごとに、自動上昇(フレームが選択され たときに自動的に上昇する)や自動下降(フレームが選択されなくなったときに自 動的に下降する)するようにもできます。See section Xウインドウ・フレーム・パラメータ


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

26.12 フレーム構成

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

Function: current-frame-configuration

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

Function: set-frame-configuration configuration

この関数はフレームの状態をconfigurationに記述されている状態に戻し ます。


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

26.13 マウスの追跡

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

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

Special Form: track-mouse body…

マウス移動の入力イベントが起きている間、bodyを実行します。 bodyの中では、read-eventread-key-sequenceを使って それらのイベントを読みとることができます。マウス移動イベントのフォーマッ トについては、See section 移動イベント

track-mouseの返り値は、bodyの最後の形式の値になります。

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

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


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

26.14 マウスの位置

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

Function: mouse-position

この関数はマウスの位置を返します。返り値は(frame x . y)という感じで、xyframeの上左端からの文字 数単位の位置を表す整数です。

Function: set-mouse-position frame x y

この関数はframexyの位置へマウスをワープ (warps the mouse)させます。引数のxyframeの上左端か らの文字数単位の位置を表す整数です。

Function: mouse-pixel-position

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

Function: set-mouse-pixel-position frame x y

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


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

26.15 ポップアップ・メニュー

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

Function: x-popup-menu position menu

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

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

 
((xoffset yoffset) window)

xoffsetyoffsetwindowのフレームの左上端からのピクセ ル単位の座標です。

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

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

 
(title pane1 pane2...)

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

 
(title (line . item)...)

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

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


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

26.16 ダイアログ・ボックス

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

Function: x-popup-dialog position contents

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

 
(title (string . value)…)

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

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

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

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

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

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


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

26.17 ポインタの形状

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

x-pointer-shape

この変数はEmacsのフレーム中の普通のポインタの形状を指定します。

x-sensitive-text-pointer-shape

この変数はマウスがマウス感知テキストの上にあるときのポインタの形状を指定 します。

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

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


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

26.18 Xセレクション

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

Function: x-set-selection type data

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

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

それぞれの可能なtypeは、それ自身の独立に変更可能なセレクションの値 を持っています。 通常typeの値はPRIMARYSECONDARYです。これらのシンボ ルはXウインドウ・システムの慣習に合わせて大文字の名前になっています。デフォ ルトはPRIMARYです。

Function: x-get-selection &optional type data-type

この関数は、EmacsやほかのXクライアントがセットしたセレクションにアクセスし ます。この関数は二つのオプション引数typedata-typeをとります。 セレクション・タイプtypeのデフォルトはPRIMARYです

data-type引数は、ほかのXクライアントから得た生のデータをLispデータに 変換するときに使用するデータ変換の形式を指定します。 意味がある値は、TEXTSTRINGTARGETSLENGTHDELETEFILE_NAMECHARACTER_POSITIONLINE_NUMBERCOLUMN_NUMBEROWNER_OSHOST_NAMEUSERCLASSNAMEATOMINTEGERです(これらのシンボルはXの慣習に 合わせて大文字の名前になっています)。デフォルトはSTRINGです。

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

Function: x-get-cut-buffer n

この関数は番号nのカット・バッファの中身を返します。

Function: x-set-cut-buffer string

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


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

26.19 色の名前

Function: x-color-defined-p color

この関数は色の名前colorが有効かどうかを報告します。有効なら t、そうでないならnilを返します。

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

 
(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")))))
Function: x-color-values color

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

 
(x-color-values "black")
     ⇒ (0 0 0)
(x-color-values "white")
     ⇒ (65280 65280 65280)
(x-color-values "red")
     ⇒ (65280 0 0)
(x-color-values "pink")
     ⇒ (65280 49152 51968)
(x-color-values "hungry")
     ⇒ nil

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

26.20 Xのリソース

Function: x-get-resource attribute class &optional component subclass

この関数x-get-resourceは、Xウインドウのデフォルト・データベースか らリソースの値を取り出します。

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

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

See (emacs)Resources X section `X Resources' in The GNU Emacs Manual


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

26.21 Xサーバーに関するデータ

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

Function: x-display-screens &optional display

この関数はそのディスプレイがいくつ画面を持っているかを返します。

Function: x-server-version &optional display

この関数はそのディスプレイで動いているXサーバーのバージョン番号のリスト を返します。

Function: x-server-vendor &optional display

この関数はそのXサーバーのソフトウェアを提供しているベンダーを返します。

Function: x-display-pixel-height &optional display

この関数はその画面の高さをピクセル単位で返します。

Function: x-display-mm-height &optional display

この関数はその画面の高さをミリメートル単位で返します。

Function: x-display-pixel-width &optional display

この関数はその画面の幅をピクセル単位で返します。

Function: x-display-mm-width &optional display

この関数はその画面の幅をミリメートル単位で返します。

Function: x-display-backing-store &optional display

この関数はその画面のバッキング・ストアの能力を返します。返り値は、 alwayswhen-mappednot-usefulです。

Function: x-display-save-under &optional display

この関数はそのディスプレイがSaveUnder機能をサポートしている場合非 nilを返します。

Function: x-display-planes &optional display

この関数はそのディスプレイがサポートしているプレーンの数を返します。

Function: x-display-visual-class &optional display

この関数はその画面のビジュアル・クラスを返します。返り値は次のシンボル、 static-graygray-scalestatic-colorpseudo-colortrue-colordirect-colorのいずれかで す。

Function: x-display-grayscale-p &optional display

この関数はその画面が灰色の濃淡を表示できるときにtを返します。

Function: x-display-color-p &optional display

この関数はその画面がカラー画面のときにtを返します。

Function: x-display-color-cells &optional display

この関数はその画面がサポートしているカラー・セルの数を返します。


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

This document was generated by Yasutaka SHINDOH on September, 29 2006 using texi2html 1.76.