[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

28. フレーム

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Frames"
"texi/elisp21/フレーム"へのコメント(無し)

フレーム(frame)とは、1つかそれ以上のEmacsのウィンドウを 収めているスクリーン上の矩形です。 フレームには最初は1つのウィンドウ(およびミニバッファ用ウィンドウ)が ありますが、それを上下や左右に小さなウィンドウに分割できます。

Emacsを文字端末で実行すると、 1つの端末フレーム(terminal frame)を使います。 別のフレームを作成すると、もちろん端末画面上では、 Emacsは一度に1つのフレームしか表示しません。

EmacsがXウィンドウのような対応しているウィンドウシステムと 直接通信しているときには、端末フレームは使いません。 そのかわりに、1つのウィンドウフレーム(window frame)で始まりますが、 いくつでもフレームを作れますし、ウィンドウシステムでは普通のことですが、 Emacsはそのようなフレームを同時に複数表示できます。

Function: framep object
この関数は、objectがフレームならばtを返し、 さもなければnilを返す。

Emacsの再表示の制御に関連する情報についてはSee 節 37. Emacsの画面表示



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

28.1 フレームの作成

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Creating%20Frames"
"texi/elisp21/フレームの作成"へのコメント(無し)

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

Function: make-frame &optional alist
この関数は新たなフレームを作成する。 対応しているウィンドウシステムを使っていれば、ウィンドウフレームを作る。 さもなければ端末フレームを作る。

引数alistはフレームパラメータを指定する連想リストである。 alistで指定していないパラメータは、 変数default-frame-alistの値に従って決まる。 それでも決まらないパラメータは、 標準のXリソースやそれにかわる読者のシステムの設定を使う。

指定可能なパラメータは、Emacsがフレームの表示に使う ウィンドウシステムの種類に原理的には依存します。 指定可能な各パラメータの説明は、see 節 28.3.3 ウィンドウフレームのパラメータ

Variable: before-make-frame-hook
make-frameがフレームを実際に作成する直前に実行するノーマルフック。

Variable: after-make-frame-hook
make-frameがフレームを作成後に実行するアブノーマルフック。 after-make-frame-hookの各関数は、1つの引数、 つまり、作成したばかりのフレームを受け取る。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

28.2 複数ディスプレイ

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Multiple%20Displays"
"texi/elisp21/複数ディスプレイ"へのコメント(無し)

1つのEmacsは複数のXディスプレイと通信できます。 Emacsは始めは1つのディスプレイ、つまり、 環境変数DISPLAYかオプション`--display' (see GNU Emacs マニュアル)で決まる ものを使います。 別のディスプレイに接続するには、 コマンドmake-frame-on-displayを使うか、 フレームを作るときにフレームパラメータdisplayを指定します。

Emacsは各Xサーバーを別々の端末として扱い、 それらのおのおのには選択されているフレームと ミニバッファ用ウィンドウがあります。

少数のLisp変数は端末にローカル(terminal-local)です。 つまり、各端末ごとに別々の束縛があります。 ある時点で有効な束縛は、選択されているフレームが属する端末のものです。 このような変数には、default-minibuffer-framedefining-kbd-macrolast-kbd-macrosystem-key-alistがあります。 これらはつねに端末にローカルであり、 バッファローカル(see 節 10.10 バッファローカルな変数)や フレームローカルにはけっしてなりません。

1つのXサーバーは複数のスクリーンを扱えます。 ディスプレイ名`host:server.screen'には3つの部分があり、 最後の部分で指定したサーバーのスクリーン番号を指定します。 1つのサーバーに属する2つのスクリーンを使うと、 Emacsはそれらの名前の類似性からそれらが1つのキーボードを共有していると判断し、 それらのスクリーンを1つの端末として扱います。

コマンド: make-frame-on-display display &optional parameters
新たなフレームをディスプレイdisplay上に作成する。 他のフレームパラメータはparametersから得る。 引数displayを除けばmake-frame(see 節 28.1 フレームの作成)と 同様である。

Function: x-display-list
Emacsが接続しているXディスプレイを表すリストを返す。 リストの要素は文字列であり、それぞれはディスプレイ名である。

Function: x-open-connection display &optional xrm-string
この関数はXディスプレイdisplayとの接続を開く。 当該ディスプレイ上にフレームは作らないが、 これにより当該ディスプレイと通信可能かどうか検査できる。

省略可能な引数xrm-stringnilでなければ、 ファイル`.Xresources'で使われ書式と同じ リソース名と値を表す文字列である。 これに指定した値は、Xサーバー自体に記録されているリソースの値に優先し、 Emacsが当該ディスプレイ上に作成するすべてのフレームに適用される。 この文字列の例を以下に示す。

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

see 節 28.22 Xリソース

Function: x-close-connection display
この関数はディスプレイdisplayとの接続を閉じる。 これを行うまえに、 まず当該ディスプレイ上に作ったフレームをすべて削除しておくこと。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

28.3 フレームパラメータ

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Frame%20Parameters"
"texi/elisp21/フレームパラメータ"へのコメント(無し)

フレームには、その見ためやふるまいを制御する多くのパラメータがあります。 フレームのパラメータの種類は、使用する表示機構に依存します。

フレームパラメータはウィンドウシステム向けです。 端末フレームにはごく少数のパラメータがありますが、 そのほとんどは互換性のためであり、 heightwidthnametitlebuffer-listbuffer-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.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

28.3.1 フレームパラメータの参照

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Parameter%20Access"
"texi/elisp21/フレームパラメータの参照"へのコメント(無し)

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

Function: frame-parameters frame
関数frame-parametersは、 frameのすべてのパラメータとそれらの値から成る連想リストを返す。

Function: modify-frame-parameters frame alist
この関数は、alistの要素に基づいてフレームframeの パラメータを変更する。 alistの各要素は(parm . value)の形であり、 parmはパラメータを表すシンボルである。 alistに指定しないパラメータの値は変更されない。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

28.3.2 初期フレームのパラメータ

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Initial%20Parameters"
"texi/elisp21/初期フレームのパラメータ"へのコメント(無し)

読者のファイル`.emacs'でinitial-frame-alistに設定すれば、 起動時の初期フレームのパラメータを指定できます。

Variable: initial-frame-alist
この変数の値は、初期フレームを作るときに 使用するパラメータの値から成る連想リストである。 この変数を指定すれば初期フレームの見ためを指定できるが、 それ以降に作成するフレームには影響しない。 各要素はつぎの形である。

 
(parameter . value)

Emacsは読者のファイル`~/.emacs'を読むまえに初期フレームを作る。 このファイルを読んだあとに、Emacsはinitial-frame-alistを検査し 異なる値が設定されているパラメータをすでに作成した初期フレームに適用する。

これらの設定がフレームの大きさと位置や見ために関するものであると、 指定とは違うフレームが現れてから指定したものに変わるのを目にする。 これがわずらわしい場合には、Xリソースにも同じ大きさと位置や見ためを指定する。 Xリソースはフレームを作成するまえに適用される。 see GNU Emacs マニュアル。

Xリソースの設定は、典型的にはすべてのフレームに適用される。 初期フレームだけに特定のXリソースを指定し、 それ以降のフレームに適用したくない場合には、つぎのようにする。 パラメータをdefault-frame-alistで指定し、 以降のフレーム向けのXリソースを無効にする。 そしてそれらが初期フレームに影響しないように、 initial-frame-alistのパラメータでXリソースに一致する値を指定する。

これらのパラメータにミニバッファ専用のフレームを作る (minibuffer . nil)を指定しているのに ミニバッファ専用フレームを作っていないと、Emacsがそれを作成します。

Variable: minibuffer-frame-alist
この変数の値は、初期のミニバッファ専用フレームを作るときに使用する パラメータの連想リストである。 初期フレームのパラメータからミニバッファ専用フレームが 必要であると判断するとそれを作る。

Variable: default-frame-alist
これは、Emacsのすべてのフレーム、つまり、 初期フレームとそれ以降のフレームのフレームパラメータのデフォルト値を 指定する連想リストである。 Xウィンドウシステムを使っているときには、多くの場合、 Xリソースによっても同じ結果を得られる。

27.8 表示ウィンドウを選ぶspecial-display-frame-alistも 参照してください。

Emacsを起動するときにウィンドウの見ためを指定するオプションを使うと、 それらはdefault-frame-alistに要素を追加することで効果を発揮します。 1つの例外は`-geometry'で、指定位置はinitial-frame-alistに 追加されます。 See GNU Emacs マニュアル。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

28.3.3 ウィンドウフレームのパラメータ

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Window%20Frame%20Parameters"
"texi/elisp21/ウィンドウフレームのパラメータ"へのコメント(無し)

フレームのパラメータの種類は、使用する表示機構に依存します。 ウィンドウフレームにおいて特別な意味を持つパラメータの一覧をつぎに示します。 これらのうち、nametitleheightwidthbuffer-listbuffer-predicateは 端末フレームでも意味を持ちます。

display
このフレームを開くディスプレイ。 環境変数DISPLAYと同様に、 "host:dpy.screen"の形の文字列であること。

title
フレームのタイトルtitlenil以外であると、 フレーム向けのウィンドウシステムの枠にタイトルが現れる。 また、mode-line-frame-identificationに`%F' (see 節 22.3.3 モード行の%記法)を使っていれば、 当該フレームのモード行にもタイトルが現れる。 Emacsがウィンドウシステムを使っていない場合には、 これは普通はモード行に表示され一度に1つのフレームだけを表示できる。 see 節 28.4 フレームタイトル

name
フレームの名前。 パラメータtitleを指定しないかnilであると、 フレーム名はフレームタイトルのデフォルトになる。 nameを指定しないと、Emacsが自動的にフレーム名を設定する (see 節 28.4 フレームタイトル)。

フレームを作るときにフレーム名を明示的に指定すると、 その名前は(Emacsの実行形式ファイルの名前のかわりに) フレーム向けのXリソースを探すためにも使われる。

left
スクリーンの左端を基準にしたピクセル単位の左端位置。 この値は正の数posであるか、 負のposの値を指定できる(+ pos)の形のリストである。

負の数-pos(- pos)の形のリストは、 実際には、スクリーンの右端を基準にしたウィンドウの右端位置を指定する。 posの正の値は左へ向けて数える。 注意: パラメータが負の整数-posであると、 posは正である。

プログラムが指定した位置を無視するウィンドウマネージャもある。 指定した位置が無視されないように保証したい場合には、 パラメータuser-positionにもnil以外の値を指定する。

top
スクリーンの上端を基準にしたピクセル単位の上端位置。 この値は正の数posであるか、 負のposの値を指定できる(+ pos)の形のリストである。

負の数-pos(- pos)の形のリストは、 実際には、スクリーンの下端を基準にしたウィンドウの下端位置を指定する。 posの正の値は上へ向けて数える。 注意: パラメータが負の整数-posであると、 posは正である。

プログラムが指定した位置を無視するウィンドウマネージャもある。 指定した位置が無視されないように保証したい場合には、 パラメータuser-positionにもnil以外の値を指定する。

icon-left
スクリーンの左端を基準にした フレームのアイコンのピクセル単位の左端位置。 フレームをアイコンにしたときに効果を発揮する。

icon-top
スクリーンの上端を基準にした フレームのアイコンのピクセル単位の上端位置。 フレームをアイコンにしたときに効果を発揮する。

user-position
パラメータlefttopでスクリーン上の位置を指定して フレームを作るときに、このパラメータは指定位置が、 (利用者がなんらかの方法で与えた)ユーザー指定のものなのか、 (プログラムが選んだ)プログラム指定のものなのかを指定する。 nil以外の値であるとユーザー指定の位置であることを意味する。

ウィンドウマネージャはユーザー指定の位置を一般に尊重し、 プログラム指定の位置も尊重するものもある。 しかしその多くはプログラム指定の位置を無視し、 デフォルトに基づいてウィンドウを配置したり、 マウスでユーザーに配置させる。 twmを含むウィンドウマネージャには、 プログラム指定の位置に従うかそれらを無視するかを ユーザーが指定できるものもある。

make-frameを呼び出すときには、 パラメータlefttopの値がユーザーの希望を表す場合には このパラメータの値には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
フレーム内でテキストの表示に使うフォントの名前。 これは、読者のシステムにおいて正しいフォントの名前であるか Emacsのフォントセット(see 節 28.20 フォントセット)の名前を表す文字列である。

auto-raise
フレームを選択したときにフレームを手前に移動するかどうかを表す (nil以外であるとそのようにする)。

auto-lower
フレームの選択を止めたときにフレームを奥へ移動するかどうかを表す (nil以外であるとそのようにする)。

vertical-scroll-bars
フレームに垂直スクロール用のスクロールバーを付けるかどうか、 どちら側に付けるかを表す。 指定できる値は、leftright、あるいは スクロールバーなしを意味する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 節 37.10.4 フェイスを扱う関数

background-mode
背景色が明るいか暗いかにしたがって、 このパラメータはdarklightである。

mouse-color
マウスポインタの表示色。

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

border-color
フレームの枠の表示色。

display-type
このパラメータはこのフレームで使用可能な表示色の範囲を表す。 値は、colorgrayscalemonoのいずれかである。

cursor-type
カーソルの表示方法。 正しい値は、barbox(bar . width)のいずれかである。 シンボルboxは、ポイント直後の文字に重なる通常の黒い箱型の カーソルを指定し、これがデフォルトである。 シンボルbarは、カーソルとして文字のあいだに縦棒を置く指定である。 (bar . width)は、ピクセル幅widthの縦棒を指定する。

border-width
ウィンドウ枠のピクセル単位の幅。

internal-border-width
枠とテキストのあいだのピクセル単位の間隔。

unsplittable
nil以外であると、このフレームのウィンドウをけっして自動的に分割しない。

visibility
フレームの可視性。 不可視を表すnil、可視を表すt、 アイコンになっていることを表すiconの3の可能性がある。 see 節 28.10 フレームの可視性

menu-bar-lines
フレームの上端に割り当てるメニューバー向けの行の個数。 デフォルトは1である。 see 節 21.12.5 メニューバー。 (Xツールキットを使うEmacsでは、メニューバーは1行だけである。 この場合、0より大きな数を指定したかどうかに意味がある。)



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

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

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Size%20and%20Position"
"texi/elisp21/フレームのサイズと位置"へのコメント(無し)

フレームパラメータlefttopheightwidthを 使って、フレームのサイズや位置を読み取ったり変更できます。 指定しなかった大きさと位置のパラメータは、 ウィンドウマネージャが通常どおりに選びます。

以下はサイズや位置を操作する特別な機能です。

Function: set-frame-position frame left top
この関数は、フレームframeの左上隅の位置を left(左端)とtop(上端)にする。 これらの引数は、スクリーンの左上隅からピクセル単位で数える。

パラメータ値が負であると、スクリーンの下端から測ってウィンドウの下端を 位置決めしたり、スクリーンの右端から測ってウィンドウの右端を位置決めする。 つねに左端や上端から測った値にして、負の値はフレームを スクリーンの上端や左端から部分的にはみ出して位置決めする 意味にするほうがよいかもしれないが、 現状ではそのように変えるのは不適当と思われる。

Function: frame-height &optional frame
Function: frame-width &optional frame
この関数は、フレームframeの高さや幅を行単位やコラム単位で返す。 frameを指定しないと、選択されているフレームを使う。

Function: screen-height
Function: screen-width
これらの関数はframe-heightframe-widthの古い別名である。 文字端末を使っている場合、通常、フレームの大きさは 端末スクリーンの大きさと同じである。

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を指定しないと、選択されているフレームを使う。

Function: set-frame-size frame cols rows
この関数は、フレームframeの大きさを文字単位で指定する。 colsrowsは、新たな幅と高さを指定する。

ピクセル単位で大きさを指定するには、 frame-char-heightframe-char-widthで ピクセル単位の値を文字単位に変換する。

Function: set-frame-height frame lines &optional pretend
この関数は、フレームframeの高さをlines行に変える。 それに合わせてframe内の既存のウィンドウの大きさは比例して変わる。

pretendnil以外であると、 Emacsはframelinesだけを表示するが、 フレームの実際の高さは変更しない。 これは端末フレームでのみ有用である。 実際の端末より小さな高さを使うと、小さなスクリーンでの動作を再現したり、 スクリーン全体を使うと端末が誤動作するような場合に有用である。 フレームの『実際』の高さを指定してもつねにそうなるとは限らない。 端末フレーム上で正しくカーソルを位置決めするには、 実サイズを知る必要がある場合もあるからである。

Function: set-frame-width frame width &optional pretend
この関数は、フレームframeの幅を設定する。 引数pretendset-frame-heightと同じ意味を持つ。

set-screen-heightset-screen-widthの古い関数は、 複数フレームを扱えないEmacsの版でスクリーンの高さや幅を 指定するために使われていました。 これらはほぼ廃れていますが、まだ動作します。 これらは選択されているフレームに適用されます。

Function: x-parse-geometry geom
関数x-parse-geometryは、Xウィンドウの標準のジオメトリ文字列を make-frameの引数の一部に使えるように連想リストに変換する。

この連想リストは、geomで指定されているパラメータとその値を記述する。 各要素は(parameter . value)の形である。 parameterの可能な値は、 lefttopwidthheightである。

大きさを表すパラメータでは、その値は整数であること。 位置を表すパラメータでは、右端や下端の位置を表す値もあるので、 lefttopというパラメータ名は必ずしも正確ではない。 位置を表すパラメータの可能なvalueはつぎのとおりである。

整数
正の整数は、ウィンドウの左端や上端をスクリーンの左端や上端に関連付ける。 負の整数は、ウィンドウの右端や下端をスクリーンの右端や下端に関連付ける。

(+ position)
スクリーンの左端や上端を基準にしたウィンドウの左端や上端の位置を指定する。 整数positionは正でも負でもよいが、 負の値はスクリーンからはみ出した位置を指定する。

(- position)
スクリーンの右端や下端を基準にしたウィンドウの右端や下端の位置を指定する。 整数positionは正でも負でもよいが、 負の値はスクリーンからはみ出した位置を指定する。

例を示す。

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



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

28.4 フレームタイトル

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Frame%20Titles"
"texi/elisp21/フレームタイトル"へのコメント(無し)

各フレームにはパラメータnameがあります。 これは、典型的にはウィンドウシステムがフレームの先頭に表示する フレームタイトルのデフォルトにもなります。 フレーム属性nameに設定することで明示的に名前を指定できます。

通常は名前を明示的に指定しないでしょうから、 変数frame-title-formatに保持してある雛型から Emacsが自動的にフレーム名を計算します。 Emacsは、フレームを再表示するたびに名前を再計算します。

Variable: frame-title-format
この変数は、読者がフレーム名を明示的に指定しなかったときの フレーム向けの名前の計算方法を指定する。 変数の値は実際には、mode-line-formatのようなモード行構成である。 see 節 22.3.1 モード行のデータ構造

Variable: icon-title-format
この変数は、フレームタイトルを明示的に指定しなかったときの アイコンにしたフレーム向けの名前の計算方法を指定する。 これはアイコンそのものに現れる。

Variable: multiple-frames
この変数はEmacsが自動的に設定する。 (ミニバッファ専用のフレームや不可視フレームを数えずに) 複数個のフレームがあるとこの値がtである。 frame-title-formatのデフォルト値ではmultiple-framesを使っており、 複数のフレームがあるときに限りフレームタイトルにバッファ名が入るようにする。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

28.5 フレームの削除

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Deleting%20Frames"
"texi/elisp21/フレームの削除"へのコメント(無し)

フレームを明示的に削除(delete)しない限り、 フレームは見える可能性があります。 フレームを削除するとスクリーンに表示できなくなりますが、 それを参照するものがなくならない限りLispオブジェクトとしては存在し続けます。 保存したフレーム構成(see 節 28.12 フレーム構成)を復元する以外には、 フレームの削除を取り消すことはできません。 これはウィンドウと同様です。

コマンド: delete-frame &optional frame
この関数はフレームframeを削除する。 デフォルトでは、frameは選択されているフレームである。

Function: frame-live-p frame
関数frame-live-pは、フレームframeが削除されていなければ nil以外を返す。

ウィンドウを削除するコマンドを与えるウィンドウマネージャもあります。 それらは、ウィンドウを操作しているプログラムに特別なメッセージを 送ることで動作します。 Emacsがそのようなコマンドを受け取ると、 イベントdelete-frameを生成します。 このイベントの普通の定義は、関数delete-frameを呼び出すコマンドです。 See 節 20.5.10 ウィンドウシステムのその他のイベント



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

28.6 すべてのフレームを探す

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Finding%20All%20Frames"
"texi/elisp21/すべてのフレームを探す"へのコメント(無し)

Function: frame-list
関数frame-listは、削除されていないすべてのフレームから成るリストを返す。 これは、バッファに対するbuffer-listに相当する。 得られるリストは新たに作成したものであり、 このリストを変更してもEmacs内部にはなんの効果もない。

Function: visible-frame-list
この関数は、現在可視のフレームだけのリストを返す。 see 節 28.10 フレームの可視性。 (選択されているフレームだけが実際に表示されている場合でも、 端末フレームはすべてつねに『可視』とみなす。)

Function: next-frame &optional frame minibuf
関数next-frameにより、 任意の位置から始めてすべてのフレームを便利に巡回できる。 巡回順の中でframeの『つぎ』のフレームを返す。 frameを省略したりnilであると、 デフォルトでは選択されているフレームを使う。

第2引数minibufは、対象とするフレームを指定する。

nil
ミニバッファ専用のフレームを除外する。
visible
すべての可視なフレームを対象にする。
0
すべての可視なフレームやアイコンにしたフレームを対象にする。
ウィンドウ
ミニバッファとして特定のウィンドウを使っているフレームのみを対象にする。
その他
すべてのフレームを対象にする。

Function: previous-frame &optional frame minibuf
next-frameと同様であるが、すべてのフレームを逆方向に巡回する。

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



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

28.7 フレームとウィンドウ

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Frames%20and%20Windows"
"texi/elisp21/フレームとウィンドウ"へのコメント(無し)

各ウィンドウはある1つのフレームだけの一部であり、 window-frameで当該フレームを得られます。

Function: window-frame window
この関数は、windowが属するフレームを返す。

フレーム内のミニバッファ用以外のすべてウィンドウには、 巡回順序がついています。 その順序は、フレームの左上隅の先頭のウィンドウから始まって、 右下隅のウィンドウ(フレームにミニバッファがあれば、 これはつねにミニバッファ用ウィンドウ)に達するまで下向き右向きに進み、 そして先頭へ戻ります。

Function: frame-top-window frame
この関数は、フレームframeのもっとも上端のもっとも左端の 先頭のウィンドウを返す。

ある時点では、各フレームではたった1つのフレームが 当該フレームで選択されているのです。 このような区別の意味は、 フレームを選択するとそのようなウィンドウも選択されるということです。 フレームで現在選択されているフレームは frame-selected-windowで得られます。

Function: frame-selected-window frame
この関数は、フレームframeで選択されている frame内のウィンドウを返す。

逆に、select-windowでEmacsのウィンドウを選ぶと、 それがそのフレームで選択されているウィンドウになります。 see 節 27.4 ウィンドウの選択

指定したフレームのウィンドウの1つを返す別の関数は minibuffer-windowです。 See 節 19.9 ミニバッファに関するその他



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

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

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Minibuffers%20and%20Frames"
"texi/elisp21/ミニバッファとフレーム"へのコメント(無し)

通常、各フレームにはそれ独自のミニバッファ用ウィンドウが底にあり、 フレームが選択されているときにはいつもそれが使われます。 フレームにミニバッファがあれば、minibuffer-window (see 節 19.9 ミニバッファに関するその他)でそれを得られます。

しかし、ミニバッファのないフレームを作ることもできます。 そのようなフレームでは、別のフレームのミニバッファ用ウィンドウを 使う必要があります。 そのようなフレームを作成するときには、 使用する(他のフレームの)ミニバッファを明示的に指定できます。 そうしないと、変数default-minibuffer-frameの値で指定される フレームのミニバッファを使います。 その値は、ミニバッファを有したフレームである必要があります。

ミニバッファ専用のフレームを使うときは、 ミニバッファで入力するときにそのフレームが 自動的に手前にくるようにしたいでしょう。 そうしたい場合には、変数minibuffer-auto-raisetに設定します。 See 節 28.11 フレームを手前にしたり奥へ置く

Variable: default-minibuffer-frame
この変数は、デフォルトで使うミニバッファ用ウィンドウのフレームを指定する。 この変数は現在の端末につねにローカルであり、 バッファローカルにはなりえない。 see 節 28.2 複数ディスプレイ



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

28.9 入力フォーカス

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Input%20Focus"
"texi/elisp21/入力フォーカス"へのコメント(無し)

ある時点では、Emacsの1つのフレームが選択されているフレーム (selected frame)です。 選択されているウィンドウは選択されているフレームの中につねにあります。

Function: selected-frame
この関数は選択されているフレームを返す。

マウスが入っているウィンドウにキーボード入力を振り向ける ウィンドウシステムやウィンドウマネージャがあります。 ウィンドウにフォーカスを置くために、 明示的にクリックしたりコマンドを必要とするものもあります。 いずれであっても、Emacsはどのフレームにフォーカスがあるかを 自動的に追跡します。

Lispプログラムからは、関数select-frameを呼ぶことで、 『一時的に』フレームを切り替えることもできます。 これは、ウィンドウシステムのフォーカスは変えません。 というよりは、プログラムで指定するまで ウィンドウシステムの制御を回避します。

文字端末を使っているときには、 選択されているフレームのみが端末に実際に表示されます。 フレームを切り替える唯一の方法はswitch-frameであり、 それ以降にswitch-frameを呼び出すまで切り替えた効果は持続します。 初期フレーム以外の各端末フレームには番号が付いていて、 選択されているフレームの番号がモード行内のバッファ名のまえに現れます (see 節 22.3.2 モード行に使われる変数)。

Function: select-frame frame
この関数はフレームframeを選択し、 Xサーバーのフォーカスを一時的に無視する。 frameを選択している状態は、 ユーザーが別のフレームを選択する動作を行うか 再度この関数が呼ばれるまで持続する。

サーバーやウィンドウマネジャーの要請にしたがって フレームを選択するようにして、 Emacsはウィンドウシステムと協調します。 必要なときにはfocusイベントと呼ばれる特別な入力イベントを 生成することでこのようにします。 コマンドループはhandle-switch-frameを呼び出すことで イベントfocusを処理します。 See 節 20.5.9 フォーカスイベント

コマンド: handle-switch-frame frame
この関数は、フレームframeを選択することでフォーカスイベントを 処理する。

フォーカスイベントは、通常、このコマンドを起動することで処理される。 それ以外の理由ではこれを呼び出さないこと。

Function: redirect-frame-focus frame focus-frame
この関数は、フォーカスをframeからfocus-frameへ振り向ける。 つまり、以降の打鍵やイベントは、focusではなく、 focus-frameが受け取ることになる。 そのようなイベントのあとでは、 last-event-frameの値はfocus-frameになる。 また、focusを指定したイベントswitch-frameは、 focus-frameを選ぶことになる。

focus-framenilであると、frameでの振り向けを取り消す。 つまり、frameはイベントをふたたび受けるようになる。

フォーカスの振り向けの用途の1つは、 ミニバッファを持たないフレームのためである。 これらのフレームでは、別のフレームのミニバッファを使う。 別のフレームのミニバッファを活性にすると、 フォーカスを当該フレームへ振り向ける。 これにより、ミニバッファを活性にしたフレームにマウスが入っていても、 ミニバッファのフレームにフォーカスを置ける。

フレームを選択してもフォーカスの振り向けを変更する。 フレームfooを選択しているときにフレームbarを選択すると、 fooへの振り向けをbarへ振り向けるように変更する。 これにより、select-windowを使ってユーザーが 別のフレームへ切り替えても、フォーカスの振り向けが正しく動作する。

これは、フォーカスを自分自身へ振り向けているフレームは、 フォーカスを振り向けていないフレームとは異なる扱いを受けることを意味する。 select-frameは前者に影響するが後者には影響しない。

redirect-frame-focusで変更するまで、振り向けは持続する。

User Option: focus-follows-mouse
このオプションは、ユーザーがマウスを動かしたときに ウィンドウマネージャがフォーカスを移動するかどうかをEmacsに伝える。 nil以外であるとフォーカスが移動することを意味する。 その場合、コマンドother-frameは、 新たに選択されたフレームに適合するような位置にマウスを移動する。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

28.10 フレームの可視性

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Visibility%20of%20Frames"
"texi/elisp21/フレームの可視性"へのコメント(無し)

ウィンドウフレームは、可視不可視アイコンになっているのいずれかです。 フレームが可視であると、その内容を見ることができます。 アイコンになっているとフレームの内容はスクリーンで見えませんが、 アイコンは見えます。 フレームが不可視であると、それはスクリーン上に見えず アイコンでもありません。

端末フレームは選択されているものだけが表示されるので、 端末フレームでは可視性は意味がありません。

コマンド: make-frame-visible &optional frame
この関数は、フレームframeを可視にする。 frameを省略すると、選択されているフレームを可視にする。

コマンド: make-frame-invisible &optional frame
この関数は、フレームframeを不可視にする。 frameを省略すると、選択されているフレームを不可視にする。

コマンド: iconify-frame &optional frame
この関数は、フレームframeをアイコンにする。 frameを省略すると、選択されているフレームをアイコンにする。

Function: frame-visible-p frame
この関数は、フレームframeの可視性を返す。 その値は、frameが可視ならばt、 不可視ならばnil、アイコンになっていればiconである。

フレームの可視性は、フレームパラメータとしても得られます。 フレームパラメータとして読んだり変更できます。 See 節 28.3.3 ウィンドウフレームのパラメータ

ユーザーは、ウィンドウマネージャを用いて フレームをアイコンにしたりアイコンを開けます。 これは、Emacsが制御できるレベルよりしたで行われますが、 Emacsはそのような変更を追跡できるようにイベントを提供します。 See 節 20.5.10 ウィンドウシステムのその他のイベント



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

28.11 フレームを手前にしたり奥へ置く

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Raising%20and%20Lowering"
"texi/elisp21/フレームを手前にしたり奥へ置く"へのコメント(無し)

ほとんどのウィンドウシステムでは、机のたとえを使います。 つまり、スクリーンの面に垂直な方向を概念的な3軸目と考えて、 ウィンドウは積み重なっていて、 もっとも手前からもっとも奥に順序がついています。 2つのウィンドウが重なり合っているところでは、 手前のものがそのしたのものを隠しています。 もっとも奥にあるウィンドウであっても、 それに重なるウィンドウがなければ見ることができます。

ウィンドウのこのような順序は固定されていません。 実際、ユーザーは順序を頻繁に変更します。 ウィンドウを手前に置く(raising)とは、 ウィンドウを積み重ねのもっとも上に移動することです。 ウィンドウを奥に置く(lowering)とは、 ウィンドウを積み重ねのもっとも下に移動することです。 この移動は概念的な3軸目に限り、 スクリーン上でのウィンドウの位置は変えません。

Emacsのフレームを表すウィンドウは、つぎの関数で 手前へ置いたり奥へ置けます。

コマンド: raise-frame &optional frame
この関数は、フレームframeを手前に置く (デフォルトは選択されているフレーム)。

コマンド: lower-frame &optional frame
この関数は、フレームframeを奥に置く (デフォルトは選択されているフレーム)。

User Option: minibuffer-auto-raise
これがnil以外であると、ミニバッファが活性になると ミニバッファ用ウィンドウがあるフレームを手前に置く。

フレームパラメータを使うと、フレームが 選択されると自動的に手前に置いたり(auto-raise)、 選択を止めると奥へ置け(auto-lower)ます。 See 節 28.3.3 ウィンドウフレームのパラメータ



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

28.12 フレーム構成

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Frame%20Configurations"
"texi/elisp21/フレーム構成"へのコメント(無し)

フレーム構成(frame configuration)は、 現在のフレームの配置、それらのすべての属性、それぞれのウィンドウ構成を 記録したものです。 (see 節 27.16 ウィンドウ構成。)

Function: current-frame-configuration
この関数は、現在のフレームの配置とそれらの内容を記述した フレーム構成のリストを返す。

Function: set-frame-configuration configuration
この関数は、configurationで記述されたフレームの状態に復元する。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

28.13 マウスの追跡

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Mouse%20Tracking"
"texi/elisp21/マウスの追跡"へのコメント(無し)

マウスを追跡(track)できると有用なことがあります。 つまり、マウスがどこにあるかを表す指示子を表示して マウスの移動に従って指示子を動かすのです。 効率よくマウスを追跡するには、マウスが実際に移動するまで待つ手段が必要です。

マウスを追跡する便利な方法は、マウスの移動を表すイベントを待つことです。 そうすれば、そのようなイベントを待てばマウスの移動を待てます。 さらに、発生しうるそれ以外の種類のイベントを扱うのも簡単です。 普通はマウスを永遠に追跡し続けたいのではなく ボタンを離すなどの別のイベントを待ちたいのでしょうから、 これは有用です。

Special Form: track-mouse body...
このスペシャルフォームは、マウスモーションイベントを生成するようにして bodyを実行する。 典型的にはbodyではread-eventを使って モーションイベントを読み、それに従って表示を変更する。 マウスモーションイベントの形式については、 see 節 20.5.8 モーションイベント

track-mouseの値はbodyの最後のフォームの値である。 bodyは、ボタンを離したことを表すイベントや 追跡を終えるべきイベントに出会うと戻るように設計すること。

マウスの移動を追跡する普通の目的は、 現在の位置でボタンを押したり離すとなにが起こるかを スクリーン上に示すことです。

多くの場面では、テキスト属性mouse-face(see 節 31.19.4 特別な意味を持つ属性) を使えば、マウスを追跡する必要はなくなります。 これはとても低いレベルで動作し、 Lispレベルでマウスを追跡するより滑らかに動作します。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

28.14 マウスの位置

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Mouse%20Position"
"texi/elisp21/マウスの位置"へのコメント(無し)

関数mouse-positionset-mouse-positionで、 マウスの現在位置を参照できます。

Function: mouse-position
この関数は、マウスの位置を表すものを返す。 その値は(frame x . y)の形であり、 xyはフレームframeの内側の左上隅を基準にした 文字数で数えた位置を表す整数である。

Function: set-mouse-position frame x y
この関数は、フレームframe内でxyの位置にマウスを移動する。 引数xyは整数であり、 フレームframeの内側の左上隅を基準にした文字数で数えた位置である。 frameが不可視であると、この関数はなにもしない。 戻り値には意味はない。

Function: mouse-pixel-position
この関数はmouse-positionに似ているが、 文字単位ではなくピクセル単位で座標を返す。

Function: set-mouse-pixel-position frame x y
この関数はset-mouse-positionのようにマウスを移動するが、 xyは文字単位でなくピクセル単位である。 これらの座標はフレームの内側にある必要はない。

frameが不可視であると、この関数はなにもしない。 戻り値には意味はない。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

28.15 ポップアップメニュー

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Pop-Up%20Menus"
"texi/elisp21/ポップアップメニュー"へのコメント(無し)

ウィンドウシステムを使っているときには、 ユーザーがマウスで選択できるように Lispプログラムからメニューをポップアップできます。

Function: x-popup-menu position menu
この関数はポップアップメニューを表示し、 ユーザーが行った選択を表す指示子を返す。

引数positionは、スクリーンのどこにメニューを置くかを指定する。 それはマウスのボタンイベント(ユーザーがボタンを押した場所にメニューを置く)か つぎの形のリストでもよい。

 
((xoffset yoffset) window)

ここで、xoffsetyoffsetは ウィンドウwindowのフレームの左上隅から測ったピクセル単位の座標である。

positiontであるとマウスの現在位置を使うことを意味する。 positionnilであると、 メニューを実際には表示せずに、 menuに指定してあるキーマップに等価なキーバインディングを あらかじめ計算することを意味する。

引数menuは、メニューに表示するものを指定する。 それはキーマップかキーマップのリストである(see 節 21.12 メニューキーマップ)。 あるいは、つぎの形でもよい。

 
(title pane1 pane2...)

ここで、各ペインはつぎの形のリストである。

 
(title (line . item)...)

lineは文字列であり、 各itemは対応するlineが選ばれたときに返される値であること。

使用上の注意: メニューキーマップで定義したプレフィックスキーでできることには、 メニューを表示するためにx-popup-menuを使わないこと。 メニューキーマップを使ってメニューを実装すると、 C-h cC-h aで当該メニューの個々の項目を見ることができ、 それらに対するヘルプを提供できる。 x-popup-menuを呼び出すコマンドを定義してメニューを実装すると、 ヘルプ機能には当該コマンドの内側でなにがなされるかわからないので、 メニューの項目に対するヘルプを提供できない。

マウスの移動でサブメニューを切り替えられるメニューバーの機構では、 x-popup-menuを呼び出すコマンドの定義を調べられません。 したがって、x-popup-menuを使ってサブメニューを実装すると、 それらはメニューバーに適応した動作をできません。 このために、メニューバーのすべてのサブメニューは、 親メニュー内のメニューキーマップとして実装してあり、 x-popup-menuは使っていません。 See 節 21.12.5 メニューバー

メニューバーに内容が変化するサブメニューを使いたいときでも、 メニューキーマップを使って実装するべきです。 内容を変えるには、必要に応じてメニューキーの内容を更新するために menu-bar-update-hookにフック関数を追加します。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

28.16 対話ボックス

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Dialog%20Boxes"
"texi/elisp21/対話ボックス"へのコメント(無し)

対話ボックスはポップアップメニューの変形です。 少々異なって見えますが、フレームの中央につねに現れ、 たった1つのレベルで1つのペインです。 対話ボックスの主な用途は、 ユーザーが『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に続く項目は右側に現れる。 リストにnilを含めなければ、項目のほぼ半分がそれぞれの側に現れる。

対話ボックスはフレームの中央につねに現れ、 引数positionはそのフレームを指定する。 可能な値はx-popup-menuと同様であるが、 正確な座標は関係なくフレームだけが意味を持つ。

場合によっては、Emacsは本当の対話ボックスを表示できない。 そのときにはフレームの中央にポップアップメニューで同じ項目を表示する。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

28.17 ポインタの形状

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Pointer%20Shapes"
"texi/elisp21/ポインタの形状"へのコメント(無し)

これらの変数は、Xウィンドウシステムを使っているときに さまざまな場面で使用するマウスポインタの形状を指定します。

x-pointer-shape
この変数は、Emacsのフレーム内で普通に使うポインタ形状を指定する。

x-sensitive-text-pointer-shape
この変数は、マウスに反応するテキスト上にマウスがあるときに 使用するポインタ形状を指定する。

これらの変数は、新たに作成したフレームに影響します。 既存のフレームには通常は影響しません。 しかし、フレームのマウスの表示色を設定すると、 これらの変数の現在値に基づいてポインタ形状も更新します。 See 節 28.3.3 ウィンドウフレームのパラメータ

これらのポインタ形状の指定に使える値は、 ファイル`lisp/term/x-win.el'で定義してあります。 それらの一覧を見るには M-x apropos RET x-pointer RETを使います。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

28.18 ウィンドウシステムのセレクション

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Window%20System%20Selections"
"texi/elisp21/ウィンドウシステムのセレクション"へのコメント(無し)

Xサーバーは、アプリケーションプログラムのあいだでデータを 転送するためのセレクション(selection)の集まりを記録します。 さまざまなセレクションは、Emacsではシンボルで表した セレクション型(selection type)で区別されます。 Emacsを含むXクライアントは、任意の型のセレクションを読んだり設定できます。

Function: x-set-selection type data
この関数は、Xサーバーに『セレクション』を設定する。 これは2つの引数、セレクション型typeと それに割り当てる値dataを取る。 datanilであると、当該セレクションを削除することを意味する。 さもなければdataは、文字列、 整数(あるいは2つの数のコンスセルかリスト)、 オーバレイ、同じバッファを指す2つのマーカのコンスセルのいずれかである。 オーバレイやマーカの対は、 オーバレイのテキストやマーカのあいだのテキストを表す。

引数dataは、ベクトルではない正しいセレクション値のベクトルでもよい。

可能な各typeには型に依存した独自のセレクション値がある。 typeの普通の値はPRIMARYSECONDARYである。 これらのシンボルは、Xウィンドウシステムの慣習に従って 大文字の名前である。 デフォルトはPRIMARYである。

Function: x-get-selection &optional type data-type
この関数は、Emacsや他のXクライアントが設定したセレクションを参照する。 これは2つの引数、typedata-typeを取る。 セレクション型typeのデフォルトはPRIMARYである。

引数data-typeは、他のXクライアントから得た生データを Lispデータに変換するために使用するデータ変換の書式を指定する。 意味のある値は、TEXTSTRINGCHARACTER_POSITIONLINE_NUMBERCOLUMN_NUMBEROWNER_OSHOST_NAMEUSERCLASSNAMEATOMINTEGERである。 (これらのシンボルは、Xウィンドウシステムの慣習に従って 大文字の名前である。) data-typeのデフォルトはSTRINGである。

Xサーバーには、アプリケーションのあいだで移動するテキストや他のデータを 保存できる番号付きのカットバッファ(cut buffer)の集まりもあります。 カットバッファは廃れているとみなされますが、 それらを使っているXクライアント向けにEmacsはカットバッファを扱えます。

Function: x-get-cut-buffer n
この関数は、番号nのカットバッファの内容を返す。

Function: x-set-cut-buffer string
Emacsが連続したキルをキルリングで順に下向きに移動するのと同様に、 この関数は一連のカットバッファの値を順に下向きに移動してから 文字列stringを最初のカットバッファ(番号0)に保存する。

Variable: selection-coding-system
この変数は、セレクション、クリップボード、カットバッファを 読み書きするときに使うコーディングシステムを指定する。 see 節 32.10 コーディングシステム。 デフォルトはcompound-textである。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

28.19 フォント名の探索

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Font%20Names"
"texi/elisp21/フォント名の探索"へのコメント(無し)

Function: x-list-font pattern &optional face frame maximum
この関数は、パターンpatternに一致する 利用可能なフォント名のリストを返す。 省略可能な引数faceframeを指定すると、 frameで現在オンになっているfaceと同じサイズのフォントに リストを制限する。

引数patternは文字列であること。 これはワイルドカード文字を含んでいてもよい。 `*'は任意の部分文字列に一致し、`?'は任意の1文字に一致する。 フォント名とパターンの一致を取る際には、大文字小文字を区別しない。

faceframeを指定するときには、 faceはフェイス名(シンボル)であり、frameはフレームであること。

省略可能な引数maximumは、返すフォントの個数を制限する。 これがnil以外であると、戻り値は最初のmaximum個の 一致したフォントに切り詰める。 maximumに小さな値を指定すると、 多くのフォントに一致する場合ではこの関数の動作がだいぶ速くなる。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

28.20 フォントセット

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Fontsets"
"texi/elisp21/フォントセット"へのコメント(無し)

フォントセット(fontset)は、フォントのリストであって、 各フォントが文字コードのある範囲に割り付けられています。 個々のフォントだけでは、Emacsが扱う文字集合の範囲全体を表示できませんが、 フォントセットならば可能です。 フォントセットにはフォントと同様に名前があり、 フレームやフェイス向けに『フォント』を指定するときの フォント名のかわりにフォントセット名を使えます。 ここでは、Lispプログラムの制御のもとにフォントセットを定義することに 関する情報を述べます。

Function: create-fontset-from-fontset-spec fontset-spec &optional style-variant-p noerror
この関数は、指定文字列fontset-specに従って 新たなフォントセットを定義する。 文字列はつぎの形であること。

 
fontpattern, [charsetname:fontname]...

コンマの前後の白文字は無視する。

文字列の始めの部分fontpatternは、 最後の2つのフィールドが`fontset-alias'であることを除いて、 Xの標準フォント名であること。

新たなフォントセットには2つの名前、つまり、長い名前と短い名前がある。 長い名前はfontpatternそのものである。 短い名前は`fontset-alias'である。 どちらの名前でもフォントセットを参照できる。 同じ名前のフォントセットがすでに存在する場合、 noerrornilであるとエラーを通知し、 この関数はなにもしない。

省略可能な引数style-variant-pnil以外であると、 フォントセットのbold(太字)、italic(斜体)、bold-italic(太字斜体)の 各変種も作成することを指示する。 これらの変種のフォントセットには短い名前はなく、 var{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フィールドが`*'となります。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

28.21 表示色名

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Color%20Names"
"texi/elisp21/表示色名"へのコメント(無し)

Function: x-color-defined-p color &optional frame
この関数は、表示色名が意味のあるものかどうかを報告する。 意味があれば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")))))

Function: x-color-values color &optional frame
この関数は、表示色colorが理想的にはどのように見えるかを記述した値を返す。 colorが定義されていれば、その値は、赤の分量、緑の分量、青の分量を表す 3つの整数のリストである。 各整数の範囲は原理的には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

フレームframeのディスプレイに対する表示色の値を返す。 frameを省略したりnilであると、 選択されているフレームのディスプレイに対する値を返す。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

28.22 Xリソース

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Resources"
"texi/elisp21/Xリソース"へのコメント(無し)

Function: x-get-resource attribute class &optional component subclass
関数x-get-resourceは、 Xウィンドウのデフォルトのデータベースからリソースの値を取り出す。

リソースは、keyclassの組み合わせで添字付けされる。 この関数は`instance.attribute'の形 (instanceはEmacsを起動した名前)のキーと クラスとして`Emacs.class'を使って探索する。

省略可能な引数componentsubclassは、それぞれ、 キーとクラスに追加される。 2つを指定するかまったく指定しないこと。 これらを指定すると、 キーは`instance.component.attribute'であり、 クラスは`Emacs.class.subclass'である。

Variable: x-resource-class
この変数は、x-get-resourceが探すアプリケーション名を指定する。 デフォルト値は"Emacs"である。 x-get-resourceを呼び出す周りでこの変数に別の文字列を束縛すれば、 『Emacs』以外のアプリケーション名でXリソースを探せる。

See GNU Emacs マニュアル。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端]

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

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=Server%20Data"
"texi/elisp21/Xサーバーに関するデータ"へのコメント(無し)

本節では、Emacsが使っているXディスプレイの能力や製造元に関する情報を 得るために使う関数について述べます。 これらの関数のそれぞれには、どのディスプレイを対象にするか 引数displayで指定できます。 引数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
この関数は、ディスプレイにセーブアンダー機能があれば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
この関数はスクリーンで使えるカラーセルの個数を返す。


[ << ] [ >> ]           [表紙] [目次] [索引] [検索] [上端 / 下端]