[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
フレーム(frame)とは、1つかそれ以上のEmacsのウィンドウを 収めているスクリーン上の矩形です。 フレームには最初は1つのウィンドウ(およびミニバッファ用ウィンドウ)が ありますが、それを上下や左右に小さなウィンドウに分割できます。
Emacsを文字端末で実行すると、 1つの端末フレーム(terminal frame)を使います。 別のフレームを作成すると、もちろん端末画面上では、 Emacsは一度に1つのフレームしか表示しません。
EmacsがXウィンドウのような対応しているウィンドウシステムと 直接通信しているときには、端末フレームは使いません。 そのかわりに、1つのウィンドウフレーム(window frame)で始まりますが、 いくつでもフレームを作れますし、ウィンドウシステムでは普通のことですが、 Emacsはそのようなフレームを同時に複数表示できます。
t
を返し、
さもなければnil
を返す。
28.1 フレームの作成 | Creating additional frames. | |
28.2 複数ディスプレイ | Creating frames on other displays. | |
28.3 フレームパラメータ | Controlling frame size, position, font, etc. | |
28.4 フレームタイトル | Automatic updating of frame titles. | |
28.5 フレームの削除 | Frames last until explicitly deleted. | |
28.6 すべてのフレームを探す | How to examine all existing frames. | |
28.7 フレームとウィンドウ | A frame contains windows; display of text always works through windows. | |
28.8 ミニバッファとフレーム | How a frame finds the minibuffer to use. | |
28.9 入力フォーカス | Specifying the selected frame. | |
28.10 フレームの可視性 | Frames may be visible or invisible, or icons. | |
28.11 フレームを手前にしたり奥へ置く | Raising a frame makes it hide other windows; lowering it makes the others hide them. | |
28.12 フレーム構成 | Saving the state of all frames. | |
28.13 マウスの追跡 | Getting events that say when the mouse moves. | |
28.14 マウスの位置 | Asking where the mouse is, or moving it. | |
28.15 ポップアップメニュー | Displaying a menu for the user to select from. | |
28.16 対話ボックス | Displaying a box to ask yes or no. | |
28.17 ポインタの形状 | Specifying the shape of the mouse pointer. | |
28.18 ウィンドウシステムのセレクション | Transferring text to and from other X clients. | |
28.19 フォント名の探索 | Looking up font names. | |
28.20 フォントセット | A fontset is a collection of fonts for displaying various character sets. | |
28.21 表示色名 | Getting the definitions of color names. | |
28.22 Xリソース | Getting resource values from the server. | |
28.23 Xサーバーに関するデータ | Getting info about the X server. |
Emacsの再表示の制御に関連する情報についてはSee section 38. Emacsの画面表示。
新たなフレームを作成するには、関数make-frame
を呼び出します。
引数alistはフレームパラメータを指定する連想リストである。
alistで指定していないパラメータは、
変数default-frame-alist
の値に従って決まる。
それでも決まらないパラメータは、
標準のXリソースやそれにかわる読者のシステムの設定を使う。
指定可能なパラメータは、Emacsがフレームの表示に使う ウィンドウシステムの種類に原理的には依存します。 指定可能な各パラメータの説明は、see section 28.3.3 ウィンドウフレームのパラメータ。
make-frame
がフレームを実際に作成する直前に実行するノーマルフック。
make-frame
がフレームを作成後に実行するアブノーマルフック。
after-make-frame-hook
の各関数は、1つの引数、
つまり、作成したばかりのフレームを受け取る。
1つのEmacsは複数のXディスプレイと通信できます。
Emacsは始めは1つのディスプレイ、つまり、
環境変数DISPLAY
かオプション`--display'
(see section `初期化オプション' in GNU Emacs マニュアル)で決まる
ものを使います。
別のディスプレイに接続するには、
コマンドmake-frame-on-display
を使うか、
フレームを作るときにフレームパラメータdisplay
を指定します。
Emacsは各Xサーバーを別々の端末として扱い、 それらのおのおのには選択されているフレームと ミニバッファ用ウィンドウがあります。
少数のLisp変数は端末にローカル(terminal-local)です。
つまり、各端末ごとに別々の束縛があります。
ある時点で有効な束縛は、選択されているフレームが属する端末のものです。
このような変数には、default-minibuffer-frame
、
defining-kbd-macro
、last-kbd-macro
、
system-key-alist
があります。
これらはつねに端末にローカルであり、
バッファローカル(see section 10.10 バッファローカルな変数)や
フレームローカルにはけっしてなりません。
1つのXサーバーは複数のスクリーンを扱えます。 ディスプレイ名`host:server.screen'には3つの部分があり、 最後の部分で指定したサーバーのスクリーン番号を指定します。 1つのサーバーに属する2つのスクリーンを使うと、 Emacsはそれらの名前の類似性からそれらが1つのキーボードを共有していると判断し、 それらのスクリーンを1つの端末として扱います。
make-frame
(see section 28.1 フレームの作成)と
同様である。
省略可能な引数xrm-stringがnil
でなければ、
ファイル`.Xresources'で使われ書式と同じ
リソース名と値を表す文字列である。
これに指定した値は、Xサーバー自体に記録されているリソースの値に優先し、
Emacsが当該ディスプレイ上に作成するすべてのフレームに適用される。
この文字列の例を以下に示す。
"*BorderWidth: 3\n*InternalBorder: 2\n" |
see section 28.22 Xリソース。
フレームには、その見ためやふるまいを制御する多くのパラメータがあります。 フレームのパラメータの種類は、使用する表示機構に依存します。
フレームパラメータはウィンドウシステム向けです。
端末フレームにはごく少数のパラメータがありますが、
そのほとんどは互換性のためであり、
height
、width
、name
、title
、
buffer-list
、buffer-predicate
のパラメータだけが意味を持ちます。
28.3.1 フレームパラメータの参照 | How to change a frame's parameters. | |
28.3.2 初期フレームのパラメータ | Specifying frame parameters when you make a frame. | |
28.3.3 ウィンドウフレームのパラメータ | List of frame parameters for window systems. | |
28.3.4 フレームのサイズと位置 | Changing the size and position of a frame. |
これらの関数は、フレームのパラメータの値を読んだり変更するためのものです。
frame-parameters
は、
frameのすべてのパラメータとそれらの値から成る連想リストを返す。
(parm . value)
の形であり、
parmはパラメータを表すシンボルである。
alistに指定しないパラメータの値は変更されない。
読者のファイル`.emacs'でinitial-frame-alist
に設定すれば、
起動時の初期フレームのパラメータを指定できます。
(parameter . value) |
Emacsは読者のファイル`~/.emacs'を読むまえに初期フレームを作る。
このファイルを読んだあとに、Emacsはinitial-frame-alist
を検査し
異なる値が設定されているパラメータをすでに作成した初期フレームに適用する。
これらの設定がフレームの大きさと位置や見ために関するものであると、 指定とは違うフレームが現れてから指定したものに変わるのを目にする。 これがわずらわしい場合には、Xリソースにも同じ大きさと位置や見ためを指定する。 Xリソースはフレームを作成するまえに適用される。 see section `Xリソース' in GNU Emacs マニュアル。
Xリソースの設定は、典型的にはすべてのフレームに適用される。
初期フレームだけに特定のXリソースを指定し、
それ以降のフレームに適用したくない場合には、つぎのようにする。
パラメータをdefault-frame-alist
で指定し、
以降のフレーム向けのXリソースを無効にする。
そしてそれらが初期フレームに影響しないように、
initial-frame-alist
のパラメータでXリソースに一致する値を指定する。
これらのパラメータにミニバッファ専用のフレームを作る
(minibuffer . nil)
を指定しているのに
ミニバッファ専用フレームを作っていないと、Emacsがそれを作成します。
27.8 表示ウィンドウを選ぶのspecial-display-frame-alist
も
参照してください。
Emacsを起動するときにウィンドウの見ためを指定するオプションを使うと、
それらはdefault-frame-alist
に要素を追加することで効果を発揮します。
1つの例外は`-geometry'で、指定位置はinitial-frame-alist
に
追加されます。
See section `コマンド行引数' in GNU Emacs マニュアル。
フレームのパラメータの種類は、使用する表示機構に依存します。
ウィンドウフレームにおいて特別な意味を持つパラメータの一覧をつぎに示します。
これらのうち、name
、title
、height
、
width
、buffer-list
、buffer-predicate
は
端末フレームでも意味を持ちます。
display
DISPLAY
と同様に、
"host:dpy.screen"
の形の文字列であること。
title
title
がnil
以外であると、
フレーム向けのウィンドウシステムの枠にタイトルが現れる。
また、mode-line-frame-identification
に`%F'
(see section 22.3.3 モード行の%
記法)を使っていれば、
当該フレームのモード行にもタイトルが現れる。
Emacsがウィンドウシステムを使っていない場合には、
これは普通はモード行に表示され一度に1つのフレームだけを表示できる。
see section 28.4 フレームタイトル。
name
title
を指定しないかnil
であると、
フレーム名はフレームタイトルのデフォルトになる。
name
を指定しないと、Emacsが自動的にフレーム名を設定する
(see section 28.4 フレームタイトル)。
フレームを作るときにフレーム名を明示的に指定すると、 その名前は(Emacsの実行形式ファイルの名前のかわりに) フレーム向けのXリソースを探すためにも使われる。
left
(+ pos)
の形のリストである。
負の数-posや(- pos)
の形のリストは、
実際には、スクリーンの右端を基準にしたウィンドウの右端位置を指定する。
posの正の値は左へ向けて数える。
注意:
パラメータが負の整数-posであると、
posは正である。
プログラムが指定した位置を無視するウィンドウマネージャもある。
指定した位置が無視されないように保証したい場合には、
パラメータuser-position
にもnil
以外の値を指定する。
top
(+ pos)
の形のリストである。
負の数-posや(- pos)
の形のリストは、
実際には、スクリーンの下端を基準にしたウィンドウの下端位置を指定する。
posの正の値は上へ向けて数える。
注意:
パラメータが負の整数-posであると、
posは正である。
プログラムが指定した位置を無視するウィンドウマネージャもある。
指定した位置が無視されないように保証したい場合には、
パラメータuser-position
にもnil
以外の値を指定する。
icon-left
icon-top
user-position
left
とtop
でスクリーン上の位置を指定して
フレームを作るときに、このパラメータは指定位置が、
(利用者がなんらかの方法で与えた)ユーザー指定のものなのか、
(プログラムが選んだ)プログラム指定のものなのかを指定する。
nil
以外の値であるとユーザー指定の位置であることを意味する。
ウィンドウマネージャはユーザー指定の位置を一般に尊重し、
プログラム指定の位置も尊重するものもある。
しかしその多くはプログラム指定の位置を無視し、
デフォルトに基づいてウィンドウを配置したり、
マウスでユーザーに配置させる。
twm
を含むウィンドウマネージャには、
プログラム指定の位置に従うかそれらを無視するかを
ユーザーが指定できるものもある。
make-frame
を呼び出すときには、
パラメータleft
とtop
の値がユーザーの希望を表す場合には
このパラメータの値にはnil
以外を指定すること。
さもなければnil
を指定する。
height
frame-pixel-height
を呼び出す。
28.3.4 フレームのサイズと位置を参照。)
width
frame-pixel-width
を呼び出す。
28.3.4 フレームのサイズと位置を参照。)
window-id
minibuffer
t
はあることを表し、nil
はないことを表す。
only
は、このフレームがミニバッファだけであることを表す。
(別のフレームの)値がミニバッファだけであると、
新たなフレームはそのミニバッファを使う。
buffer-predicate
nil
でなければ、
関数other-buffer
が(選択されているフレームから)この述語を使用して、
どのバッファにするかを決定する。
other-buffer
は各バッファごとにバッファを引数としてこの述語を呼び出す。
この述語がnil
以外を返すと当該バッファを選ぶ。
buffer-list
font
auto-raise
nil
以外であるとそのようにする)。
auto-lower
nil
以外であるとそのようにする)。
vertical-scroll-bars
left
、right
、あるいは
スクロールバーなしを意味するnil
。
horizontal-scroll-bars
nil
以外だと付ける)。
(水平スクロールバーはいまのところ実装してない。)
scroll-bar-width
icon-type
nil
以外の値はデフォルトのビットマップアイコン
(gnuの絵)を指定する。
nil
はテキストのアイコンを指定する。
icon-name
nil
であると、フレームのタイトルを使う。
foreground-color
フレームパラメータforeground-color
に設定したときには、
それに対応してフェイスを更新するために
frame-update-face-colors
を呼び出すこと。
background-color
フレームパラメータbackground-color
に設定したときには、
それに対応してフェイスを更新するために
frame-update-face-colors
を呼び出すこと。
see section 38.10.4 フェイスを扱う関数。
background-mode
dark
かlight
である。
mouse-color
cursor-color
border-color
display-type
color
、grayscale
、mono
のいずれかである。
cursor-type
bar
、box
、
(bar . width)
のいずれかである。
シンボルbox
は、ポイント直後の文字に重なる通常の黒い箱型の
カーソルを指定し、これがデフォルトである。
シンボルbar
は、カーソルとして文字のあいだに縦棒を置く指定である。
(bar . width)
は、ピクセル幅widthの縦棒を指定する。
border-width
internal-border-width
unsplittable
nil
以外であると、このフレームのウィンドウをけっして自動的に分割しない。
visibility
nil
、可視を表すt
、
アイコンになっていることを表すicon
の3の可能性がある。
see section 28.10 フレームの可視性。
menu-bar-lines
フレームパラメータleft
、top
、height
、width
を
使って、フレームのサイズや位置を読み取ったり変更できます。
指定しなかった大きさと位置のパラメータは、
ウィンドウマネージャが通常どおりに選びます。
以下はサイズや位置を操作する特別な機能です。
パラメータ値が負であると、スクリーンの下端から測ってウィンドウの下端を 位置決めしたり、スクリーンの右端から測ってウィンドウの右端を位置決めする。 つねに左端や上端から測った値にして、負の値はフレームを スクリーンの上端や左端から部分的にはみ出して位置決めする 意味にするほうがよいかもしれないが、 現状ではそのように変えるのは不適当と思われる。
frame-height
やframe-width
の古い別名である。
文字端末を使っている場合、通常、フレームの大きさは
端末スクリーンの大きさと同じである。
ピクセル単位で大きさを指定するには、
frame-char-height
とframe-char-width
で
ピクセル単位の値を文字単位に変換する。
pretendがnil
以外であると、
Emacsはframeのlinesだけを表示するが、
フレームの実際の高さは変更しない。
これは端末フレームでのみ有用である。
実際の端末より小さな高さを使うと、小さなスクリーンでの動作を再現したり、
スクリーン全体を使うと端末が誤動作するような場合に有用である。
フレームの『実際』の高さを指定してもつねにそうなるとは限らない。
端末フレーム上で正しくカーソルを位置決めするには、
実サイズを知る必要がある場合もあるからである。
set-frame-height
と同じ意味を持つ。
set-screen-height
とset-screen-width
の古い関数は、
複数フレームを扱えないEmacsの版でスクリーンの高さや幅を
指定するために使われていました。
これらはほぼ廃れていますが、まだ動作します。
これらは選択されているフレームに適用されます。
x-parse-geometry
は、Xウィンドウの標準のジオメトリ文字列を
make-frame
の引数の一部に使えるように連想リストに変換する。
この連想リストは、geomで指定されているパラメータとその値を記述する。
各要素は(parameter . value)
の形である。
parameterの可能な値は、
left
、top
、width
、height
である。
大きさを表すパラメータでは、その値は整数であること。
位置を表すパラメータでは、右端や下端の位置を表す値もあるので、
left
やtop
というパラメータ名は必ずしも正確ではない。
位置を表すパラメータの可能なvalueはつぎのとおりである。
(+ position)
(- position)
例を示す。
(x-parse-geometry "35x70+0-0") => ((height . 70) (width . 35) (top - 0) (left . 0)) |
各フレームにはパラメータname
があります。
これは、典型的にはウィンドウシステムがフレームの先頭に表示する
フレームタイトルのデフォルトにもなります。
フレーム属性name
に設定することで明示的に名前を指定できます。
通常は名前を明示的に指定しないでしょうから、
変数frame-title-format
に保持してある雛型から
Emacsが自動的にフレーム名を計算します。
Emacsは、フレームを再表示するたびに名前を再計算します。
mode-line-format
のようなモード行構成である。
see section 22.3.1 モード行のデータ構造。
t
である。
frame-title-format
のデフォルト値ではmultiple-frames
を使っており、
複数のフレームがあるときに限りフレームタイトルにバッファ名が入るようにする。
フレームを明示的に削除(delete)しない限り、 フレームは見える可能性があります。 フレームを削除するとスクリーンに表示できなくなりますが、 それを参照するものがなくならない限りLispオブジェクトとしては存在し続けます。 保存したフレーム構成(see section 28.12 フレーム構成)を復元する以外には、 フレームの削除を取り消すことはできません。 これはウィンドウと同様です。
frame-live-p
は、フレームframeが削除されていなければ
nil
以外を返す。
ウィンドウを削除するコマンドを与えるウィンドウマネージャもあります。
それらは、ウィンドウを操作しているプログラムに特別なメッセージを
送ることで動作します。
Emacsがそのようなコマンドを受け取ると、
イベントdelete-frame
を生成します。
このイベントの普通の定義は、関数delete-frame
を呼び出すコマンドです。
See section 20.5.10 ウィンドウシステムのその他のイベント。
frame-list
は、削除されていないすべてのフレームから成るリストを返す。
これは、バッファに対するbuffer-list
に相当する。
得られるリストは新たに作成したものであり、
このリストを変更してもEmacs内部にはなんの効果もない。
next-frame
により、
任意の位置から始めてすべてのフレームを便利に巡回できる。
巡回順の中でframeの『つぎ』のフレームを返す。
frameを省略したりnil
であると、
デフォルトでは選択されているフレームを使う。
第2引数minibufは、対象とするフレームを指定する。
nil
visible
next-frame
と同様であるが、すべてのフレームを逆方向に巡回する。
27.5 ウィンドウの巡回順序のnext-window
とprevious-window
も
参照してください。
各ウィンドウはある1つのフレームだけの一部であり、
window-frame
で当該フレームを得られます。
フレーム内のミニバッファ用以外のすべてウィンドウには、 巡回順序がついています。 その順序は、フレームの左上隅の先頭のウィンドウから始まって、 右下隅のウィンドウ(フレームにミニバッファがあれば、 これはつねにミニバッファ用ウィンドウ)に達するまで下向き右向きに進み、 そして先頭へ戻ります。
ある時点では、各フレームではたった1つのフレームが
当該フレームで選択されているのです。
このような区別の意味は、
フレームを選択するとそのようなウィンドウも選択されるということです。
フレームで現在選択されているフレームは
frame-selected-window
で得られます。
逆に、select-window
でEmacsのウィンドウを選ぶと、
それがそのフレームで選択されているウィンドウになります。
see section 27.4 ウィンドウの選択。
指定したフレームのウィンドウの1つを返す別の関数は
minibuffer-window
です。
See section 19.9 ミニバッファに関するその他。
通常、各フレームにはそれ独自のミニバッファ用ウィンドウが底にあり、
フレームが選択されているときにはいつもそれが使われます。
フレームにミニバッファがあれば、minibuffer-window
(see section 19.9 ミニバッファに関するその他)でそれを得られます。
しかし、ミニバッファのないフレームを作ることもできます。
そのようなフレームでは、別のフレームのミニバッファ用ウィンドウを
使う必要があります。
そのようなフレームを作成するときには、
使用する(他のフレームの)ミニバッファを明示的に指定できます。
そうしないと、変数default-minibuffer-frame
の値で指定される
フレームのミニバッファを使います。
その値は、ミニバッファを有したフレームである必要があります。
ミニバッファ専用のフレームを使うときは、
ミニバッファで入力するときにそのフレームが
自動的に手前にくるようにしたいでしょう。
そうしたい場合には、変数minibuffer-auto-raise
にt
に設定します。
See section 28.11 フレームを手前にしたり奥へ置く。
ある時点では、Emacsの1つのフレームが選択されているフレーム (selected frame)です。 選択されているウィンドウは選択されているフレームの中につねにあります。
マウスが入っているウィンドウにキーボード入力を振り向ける ウィンドウシステムやウィンドウマネージャがあります。 ウィンドウにフォーカスを置くために、 明示的にクリックしたりコマンドを必要とするものもあります。 いずれであっても、Emacsはどのフレームにフォーカスがあるかを 自動的に追跡します。
Lispプログラムからは、関数select-frame
を呼ぶことで、
『一時的に』フレームを切り替えることもできます。
これは、ウィンドウシステムのフォーカスは変えません。
というよりは、プログラムで指定するまで
ウィンドウシステムの制御を回避します。
文字端末を使っているときには、
選択されているフレームのみが端末に実際に表示されます。
フレームを切り替える唯一の方法はswitch-frame
であり、
それ以降にswitch-frame
を呼び出すまで切り替えた効果は持続します。
初期フレーム以外の各端末フレームには番号が付いていて、
選択されているフレームの番号がモード行内のバッファ名のまえに現れます
(see section 22.3.2 モード行に使われる変数)。
サーバーやウィンドウマネジャーの要請にしたがって
フレームを選択するようにして、
Emacsはウィンドウシステムと協調します。
必要なときにはfocusイベントと呼ばれる特別な入力イベントを
生成することでこのようにします。
コマンドループはhandle-switch-frame
を呼び出すことで
イベントfocusを処理します。
See section 20.5.9 フォーカスイベント。
フォーカスイベントは、通常、このコマンドを起動することで処理される。 それ以外の理由ではこれを呼び出さないこと。
last-event-frame
の値はfocus-frameになる。
また、focusを指定したイベントswitch-frame
は、
focus-frameを選ぶことになる。
focus-frameがnil
であると、frameでの振り向けを取り消す。
つまり、frameはイベントをふたたび受けるようになる。
フォーカスの振り向けの用途の1つは、 ミニバッファを持たないフレームのためである。 これらのフレームでは、別のフレームのミニバッファを使う。 別のフレームのミニバッファを活性にすると、 フォーカスを当該フレームへ振り向ける。 これにより、ミニバッファを活性にしたフレームにマウスが入っていても、 ミニバッファのフレームにフォーカスを置ける。
フレームを選択してもフォーカスの振り向けを変更する。
フレームfoo
を選択しているときにフレームbar
を選択すると、
foo
への振り向けをbar
へ振り向けるように変更する。
これにより、select-window
を使ってユーザーが
別のフレームへ切り替えても、フォーカスの振り向けが正しく動作する。
これは、フォーカスを自分自身へ振り向けているフレームは、
フォーカスを振り向けていないフレームとは異なる扱いを受けることを意味する。
select-frame
は前者に影響するが後者には影響しない。
redirect-frame-focus
で変更するまで、振り向けは持続する。
nil
以外であるとフォーカスが移動することを意味する。
その場合、コマンドother-frame
は、
新たに選択されたフレームに適合するような位置にマウスを移動する。
ウィンドウフレームは、可視、 不可視、アイコンになっているのいずれかです。 フレームが可視であると、その内容を見ることができます。 アイコンになっているとフレームの内容はスクリーンで見えませんが、 アイコンは見えます。 フレームが不可視であると、それはスクリーン上に見えず アイコンでもありません。
端末フレームは選択されているものだけが表示されるので、 端末フレームでは可視性は意味がありません。
t
、
不可視ならばnil
、アイコンになっていればicon
である。
フレームの可視性は、フレームパラメータとしても得られます。 フレームパラメータとして読んだり変更できます。 See section 28.3.3 ウィンドウフレームのパラメータ。
ユーザーは、ウィンドウマネージャを用いて フレームをアイコンにしたりアイコンを開けます。 これは、Emacsが制御できるレベルよりしたで行われますが、 Emacsはそのような変更を追跡できるようにイベントを提供します。 See section 20.5.10 ウィンドウシステムのその他のイベント。
ほとんどのウィンドウシステムでは、机のたとえを使います。 つまり、スクリーンの面に垂直な方向を概念的な3軸目と考えて、 ウィンドウは積み重なっていて、 もっとも手前からもっとも奥に順序がついています。 2つのウィンドウが重なり合っているところでは、 手前のものがそのしたのものを隠しています。 もっとも奥にあるウィンドウであっても、 それに重なるウィンドウがなければ見ることができます。
ウィンドウのこのような順序は固定されていません。 実際、ユーザーは順序を頻繁に変更します。 ウィンドウを手前に置く(raising)とは、 ウィンドウを積み重ねのもっとも上に移動することです。 ウィンドウを奥に置く(lowering)とは、 ウィンドウを積み重ねのもっとも下に移動することです。 この移動は概念的な3軸目に限り、 スクリーン上でのウィンドウの位置は変えません。
Emacsのフレームを表すウィンドウは、つぎの関数で 手前へ置いたり奥へ置けます。
nil
以外であると、ミニバッファが活性になると
ミニバッファ用ウィンドウがあるフレームを手前に置く。
フレームパラメータを使うと、フレームが
選択されると自動的に手前に置いたり(auto-raise
)、
選択を止めると奥へ置け(auto-lower
)ます。
See section 28.3.3 ウィンドウフレームのパラメータ。
フレーム構成(frame configuration)は、 現在のフレームの配置、それらのすべての属性、それぞれのウィンドウ構成を 記録したものです。 (see section 27.16 ウィンドウ構成。)
マウスを追跡(track)できると有用なことがあります。 つまり、マウスがどこにあるかを表す指示子を表示して マウスの移動に従って指示子を動かすのです。 効率よくマウスを追跡するには、マウスが実際に移動するまで待つ手段が必要です。
マウスを追跡する便利な方法は、マウスの移動を表すイベントを待つことです。 そうすれば、そのようなイベントを待てばマウスの移動を待てます。 さらに、発生しうるそれ以外の種類のイベントを扱うのも簡単です。 普通はマウスを永遠に追跡し続けたいのではなく ボタンを離すなどの別のイベントを待ちたいのでしょうから、 これは有用です。
read-event
を使って
モーションイベントを読み、それに従って表示を変更する。
マウスモーションイベントの形式については、
see section 20.5.8 モーションイベント。
track-mouse
の値はbodyの最後のフォームの値である。
bodyは、ボタンを離したことを表すイベントや
追跡を終えるべきイベントに出会うと戻るように設計すること。
マウスの移動を追跡する普通の目的は、 現在の位置でボタンを押したり離すとなにが起こるかを スクリーン上に示すことです。
多くの場面では、テキスト属性mouse-face
(see section 31.19.4 特別な意味を持つ属性)
を使えば、マウスを追跡する必要はなくなります。
これはとても低いレベルで動作し、
Lispレベルでマウスを追跡するより滑らかに動作します。
関数mouse-position
とset-mouse-position
で、
マウスの現在位置を参照できます。
(frame x . y)
の形であり、
xとyはフレームframeの内側の左上隅を基準にした
文字数で数えた位置を表す整数である。
mouse-position
に似ているが、
文字単位ではなくピクセル単位で座標を返す。
set-mouse-position
のようにマウスを移動するが、
xとyは文字単位でなくピクセル単位である。
これらの座標はフレームの内側にある必要はない。
frameが不可視であると、この関数はなにもしない。 戻り値には意味はない。
ウィンドウシステムを使っているときには、 ユーザーがマウスで選択できるように Lispプログラムからメニューをポップアップできます。
引数positionは、スクリーンのどこにメニューを置くかを指定する。 それはマウスのボタンイベント(ユーザーがボタンを押した場所にメニューを置く)か つぎの形のリストでもよい。
((xoffset yoffset) window) |
ここで、xoffsetとyoffsetは ウィンドウwindowのフレームの左上隅から測ったピクセル単位の座標である。
positionがt
であるとマウスの現在位置を使うことを意味する。
positionがnil
であると、
メニューを実際には表示せずに、
menuに指定してあるキーマップに等価なキーバインディングを
あらかじめ計算することを意味する。
引数menuは、メニューに表示するものを指定する。 それはキーマップかキーマップのリストである(see section 21.12 メニューキーマップ)。 あるいは、つぎの形でもよい。
(title pane1 pane2...) |
ここで、各ペインはつぎの形のリストである。
(title (line . item)...) |
各lineは文字列であり、 各itemは対応するlineが選ばれたときに返される値であること。
使用上の注意:
メニューキーマップで定義したプレフィックスキーでできることには、
メニューを表示するためにx-popup-menu
を使わないこと。
メニューキーマップを使ってメニューを実装すると、
C-h cやC-h aで当該メニューの個々の項目を見ることができ、
それらに対するヘルプを提供できる。
x-popup-menu
を呼び出すコマンドを定義してメニューを実装すると、
ヘルプ機能には当該コマンドの内側でなにがなされるかわからないので、
メニューの項目に対するヘルプを提供できない。
マウスの移動でサブメニューを切り替えられるメニューバーの機構では、
x-popup-menu
を呼び出すコマンドの定義を調べられません。
したがって、x-popup-menu
を使ってサブメニューを実装すると、
それらはメニューバーに適応した動作をできません。
このために、メニューバーのすべてのサブメニューは、
親メニュー内のメニューキーマップとして実装してあり、
x-popup-menu
は使っていません。
See section 21.12.5 メニューバー。
メニューバーに内容が変化するサブメニューを使いたいときでも、
メニューキーマップを使って実装するべきです。
内容を変えるには、必要に応じてメニューキーの内容を更新するために
menu-bar-update-hook
にフック関数を追加します。
対話ボックスはポップアップメニューの変形です。
少々異なって見えますが、フレームの中央につねに現れ、
たった1つのレベルで1つのペインです。
対話ボックスの主な用途は、
ユーザーが『yes』、『no』、および他の少数の選択肢で答えるような
問い合わせを行うためです。
関数y-or-n-p
とyes-or-no-p
は、
マウスクリックで起動されたコマンドから呼ばれると
キーボードではなく対話ボックスを使います。
(title (string . value)...) |
これは、x-popup-menu
に対して単一のペインを指定するリストに似ている。
戻り値は、選ばれた選択肢のvalueである。
リストの要素は、(string . value)
の形の
コンスセルのかわりに単に文字列でもよい。
そうすると、対話ボックスでは選択できなくなる。
リストにnil
が現れると、それは左側の項目と右側の項目を区切る。
nil
のまえの項目は左側に現れ、
nil
に続く項目は右側に現れる。
リストにnil
を含めなければ、項目のほぼ半分がそれぞれの側に現れる。
対話ボックスはフレームの中央につねに現れ、
引数positionはそのフレームを指定する。
可能な値はx-popup-menu
と同様であるが、
正確な座標は関係なくフレームだけが意味を持つ。
場合によっては、Emacsは本当の対話ボックスを表示できない。 そのときにはフレームの中央にポップアップメニューで同じ項目を表示する。
これらの変数は、Xウィンドウシステムを使っているときに さまざまな場面で使用するマウスポインタの形状を指定します。
x-pointer-shape
x-sensitive-text-pointer-shape
これらの変数は、新たに作成したフレームに影響します。 既存のフレームには通常は影響しません。 しかし、フレームのマウスの表示色を設定すると、 これらの変数の現在値に基づいてポインタ形状も更新します。 See section 28.3.3 ウィンドウフレームのパラメータ。
これらのポインタ形状の指定に使える値は、 ファイル`lisp/term/x-win.el'で定義してあります。 それらの一覧を見るには M-x apropos RET x-pointer RETを使います。
Xサーバーは、アプリケーションプログラムのあいだでデータを 転送するためのセレクション(selection)の集まりを記録します。 さまざまなセレクションは、Emacsではシンボルで表した セレクション型(selection type)で区別されます。 Emacsを含むXクライアントは、任意の型のセレクションを読んだり設定できます。
nil
であると、当該セレクションを削除することを意味する。
さもなければdataは、文字列、
整数(あるいは2つの数のコンスセルかリスト)、
オーバレイ、同じバッファを指す2つのマーカのコンスセルのいずれかである。
オーバレイやマーカの対は、
オーバレイのテキストやマーカのあいだのテキストを表す。
引数dataは、ベクトルではない正しいセレクション値のベクトルでもよい。
可能な各typeには型に依存した独自のセレクション値がある。
typeの普通の値はPRIMARY
かSECONDARY
である。
これらのシンボルは、Xウィンドウシステムの慣習に従って
大文字の名前である。
デフォルトはPRIMARY
である。
PRIMARY
である。
引数data-typeは、他のXクライアントから得た生データを
Lispデータに変換するために使用するデータ変換の書式を指定する。
意味のある値は、TEXT
、STRING
、
CHARACTER_POSITION
、LINE_NUMBER
、COLUMN_NUMBER
、
OWNER_OS
、HOST_NAME
、USER
、CLASS
、
NAME
、ATOM
、INTEGER
である。
(これらのシンボルは、Xウィンドウシステムの慣習に従って
大文字の名前である。)
data-typeのデフォルトはSTRING
である。
Xサーバーには、アプリケーションのあいだで移動するテキストや他のデータを 保存できる番号付きのカットバッファ(cut buffer)の集まりもあります。 カットバッファは廃れているとみなされますが、 それらを使っているXクライアント向けにEmacsはカットバッファを扱えます。
compound-text
である。
引数patternは文字列であること。 これはワイルドカード文字を含んでいてもよい。 `*'は任意の部分文字列に一致し、`?'は任意の1文字に一致する。 フォント名とパターンの一致を取る際には、大文字小文字を区別しない。
faceとframeを指定するときには、 faceはフェイス名(シンボル)であり、frameはフレームであること。
省略可能な引数maximumは、返すフォントの個数を制限する。
これがnil
以外であると、戻り値は最初のmaximum個の
一致したフォントに切り詰める。
maximumに小さな値を指定すると、
多くのフォントに一致する場合ではこの関数の動作がだいぶ速くなる。
フォントセット(fontset)は、フォントのリストであって、 各フォントが文字コードのある範囲に割り付けられています。 個々のフォントだけでは、Emacsが扱う文字集合の範囲全体を表示できませんが、 フォントセットならば可能です。 フォントセットにはフォントと同様に名前があり、 フレームやフェイス向けに『フォント』を指定するときの フォント名のかわりにフォントセット名を使えます。 ここでは、Lispプログラムの制御のもとにフォントセットを定義することに 関する情報を述べます。
fontpattern, [charsetname:fontname]... |
コンマの前後の白文字は無視する。
文字列の始めの部分fontpatternは、 最後の2つのフィールドが`fontset-alias'であることを除いて、 Xの標準フォント名であること。
新たなフォントセットには2つの名前、つまり、長い名前と短い名前がある。
長い名前はfontpatternそのものである。
短い名前は`fontset-alias'である。
どちらの名前でもフォントセットを参照できる。
同じ名前のフォントセットがすでに存在する場合、
noerrorがnil
であるとエラーを通知し、
この関数はなにもしない。
省略可能な引数style-variant-pがnil
以外であると、
フォントセットのbold(太字)、italic(斜体)、bold-italic(太字斜体)の
各変種も作成することを指示する。
これらの変種のフォントセットには短い名前はなく、
fontpatternのboldやitalicを変更して作った長い名前だけである。
指定文字列ではフォントセットで使うフォントも指定する。 詳しくは下記参照。
`charset:font'という構成は、 特定の1つの文字集合向けに(このフォントセットで)使うフォントを指定します。 ここで、charsetは文字集合の名前であり、 fontはその文字集合に使うフォントです。 この構成は、指定文字列で何回でも使えます。
明示してない残りの文字集合向けには、 fontpatternに基づいてEmacsがフォントを選びます。 つまり、`fontset-alias'を1つの文字集合を指名する値で置き換えます。 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*-* |
上のフォント指定に一致する中国語フォントがないかもしれません。 多くのXの配布には、familyフィールドが `song ti'か`fangsong ti'の中国語フォントだけが含まれています。 そういった場合、`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フィールドが`*'となります。
t
を返し、さもなければnil
を返す。
引数frameは、どのフレームで調べるかを指定する。
frameを省略したりnil
であると、選択されているフレームを使う。
この関数では、読者が使用しているディスプレイで 当該表示色を実際に表示できるかどうかはわからない。 どんな種類のディスプレイでも定義されていればどんな表示色でも 問い合わせることができ、なんらかの結果を得られる。 Xサーバーはこのように動作するのである。 読者のディスプレイで表示色colorを使えるかどうかを 検査する近似方法はつぎのとおりである。
(defun x-color-supported-p (color &optional frame) (and (x-color-defined-p color frame) (or (x-display-color-p frame) (member color '("black" "white")) (and (> (x-display-planes frame) 1) (equal color "gray"))))) |
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 |
フレームframeのディスプレイに対する表示色の値を返す。
frameを省略したりnil
であると、
選択されているフレームのディスプレイに対する値を返す。
x-get-resource
は、
Xウィンドウのデフォルトのデータベースからリソースの値を取り出す。
リソースは、keyとclassの組み合わせで添字付けされる。 この関数は`instance.attribute'の形 (instanceはEmacsを起動した名前)のキーと クラスとして`Emacs.class'を使って探索する。
省略可能な引数componentとsubclassは、それぞれ、 キーとクラスに追加される。 2つを指定するかまったく指定しないこと。 これらを指定すると、 キーは`instance.component.attribute'であり、 クラスは`Emacs.class.subclass'である。
x-get-resource
が探すアプリケーション名を指定する。
デフォルト値は"Emacs"
である。
x-get-resource
を呼び出す周りでこの変数に別の文字列を束縛すれば、
『Emacs』以外のアプリケーション名でXリソースを探せる。
See section `Xリソース' in GNU Emacs マニュアル。
本節では、Emacsが使っているXディスプレイの能力や製造元に関する情報を
得るために使う関数について述べます。
これらの関数のそれぞれには、どのディスプレイを対象にするか
引数displayで指定できます。
引数displayは、ディスプレイ名か
フレーム(が表示されいるディスプレイを意味する)のいずれかです。
引数displayを省略したりnil
であると、
選択されているフレームのディスプレイを使うことを意味します。
always
、when-mapped
、not-useful
のシンボルの
いずれかである。
nil
以外を返す。
static-gray
、gray-scale
、
static-color
、pseudo-color
、true-color
、
direct-color
のシンボルのいずれかである。
t
を返す。
t
を返す。
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |