Next: , Previous: , Up: Frames   [Contents][Index]


28.2 複数の端末

Emacsはそれぞれの端末を端末オブジェクト(terminal object)というデータ型で表します(Terminal Typeを参照)。GNUおよびUnixシステムではEmacsはそれぞれのセッション内で複数の端末を同時に実行できます。その他のシステムでは単一の端末だけが使用できます。端末オブジェクトはそれぞれ以下の属性をもちます:

端末オブジェクトを作成するプリミティブはありません。make-frame-on-display (以下参照)を呼び出したときなどに、Emacsが必要に応じてそれらを作成します。

Function: terminal-name &optional terminal

この関数はterminalにより使用されるデバイスのファイル名をリターンする。terminalが省略またはnilの場合のデフォルトは選択されたフレームの端末。terminalはフレームでもよく、その場合はそのフレームの端末。

Function: terminal-list

この関数はすべての生きた端末オブジェクトのリストをリターンする。

Function: get-device-terminal device

この関数はdeviceにより与えられたデバイス名の端末をリターンする。deviceが文字列なら端末デバイス名、または‘host:server.screen’という形式のXディスプレイのいずれかを指定できる。deviceならこの関数はそのフレームの端末をリターンする。nilは選択されたフレームを意味する。最後にもしdeviceが生きた端末を表す端末オブジェクトなら、その端末がリターンされる。引数がこれらのいずれとも異なれば、この関数はエラーをシグナルする。

Function: delete-terminal &optional terminal force

この関数はterminal上のすべてのフレームを削除して、それらが使用していたリソースを解放する。これらはアブノーマルフックdelete-terminal-functionsを実行して、各関数の引数としてterminalを渡す。

terminalが省略またはnilの場合のデフォルトは選択されたフレームの端末。terminalはフレームでもよく、その場合はそのフレームの端末を意味する。

この関数は通常は唯一アクティブな端末の削除を試みるとエラーをシグナルするが、forceが非nilならこれを行うことができる。端末上で最後のフレームを削除した際には、Emacsは自動的にこの関数を呼び出す(Deleting Framesを参照)。

Variable: delete-terminal-functions

delete-terminalにより実行されるアブノーマルフック。各関数はdelete-terminalに渡されたterminalを唯一の引数として受け取る。技術的な詳細により、この関数は端末の削除の直前または直後のいずれかに呼び出される。

数は多くありませんが、Lisp変数のいくつかは端末ローカル(terminal-local)です。つまりそれらは端末それぞれにたいして個別にバインディングをもちます。いかなるときも実際に効果をもつバインディングはカレントで選択されたフレームに属する端末にたいして1つだけです。これらの変数にはdefault-minibuffer-framedefining-kbd-macrolast-kbd-macrosystem-key-alistが含まれます。これらは常に端末ローカルであり、決してバッファーローカル(Buffer-Local Variablesを参照)にはできません。

GNUおよびUnixシステムでは、Xディスプレイはそれぞれ別のグラフィカル端末になります。Xウィンドウシステム内でEmacsが開始された際は環境変数DISPLAY、または‘--display’オプション(Initial Options in The GNU Emacs Manualを参照)により指定されたXディスプレイを使用します。Emacsはコマンドmake-frame-on-displayを通じて別のXディスプレイに接続できます。それぞれのXディスプレイは、それぞれが選択されたフレームとミニバッファーをもちます。しかしあらゆる瞬間(Input Focusを参照)において、それらのフレームのうちの1つだけが、いわゆる選択されたフレームになります。emacsclientとの対話により、Emacsが別のテキスト端末と接続することさえ可能です。Emacs Server in The GNU Emacs Manualを参照してください。

1つのXサーバーが1つ以上のディスプレイを処理できます。各Xディスプレイには‘hostname:displaynumber.screennumber’という3つの部分からなる名前があります。1つ目の部分のhostnameはその端末が物理的に接続されるマシン名です。2つ目の部分のdisplaynumberは同じキーボードとポインティングデバイス(マウスやタブレット等)を共有するマシンに接続された1つ以上のモニターを識別するための0基準の番号です。3つ目の部分のscreennumberは、そのXサーバー上の単一のモニターコレクション(a single monitor collection)の一部である0基準のスクリーン番号(個別のモニター)です。1つのサーバー配下にある2つ以上のスクリーンを使用する際には、Emacsはそれらの名前の同一部分から、それらが単一のキーボードを共有することを知ることができるのです。

MS-WindowsのようにXウィンドウシステムを使用しないシステムはXディスプレイの概念をサポートせず、各ホスト上には1つのディスプレイだけがあります。これらのシステム上のディスプレイ名は上述したような3つの部分からなる名前にしたがいません。たとえばMS-Windowsシステム上のディスプレイ名は文字列定数‘w32’です。これは互換性のために存在するものであり、ディスプレイ名を期待する関数にこれを渡すことができます。

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

この関数はdisplay上に新たにフレームを作成してそれをリターンする。その他のフレームパラメーターは、parametersというalistから取得する。displayはXディスプレイの名前(文字列)であること。

この関数はフレーム作成前にEmacsがグラフィックを表示するためにセットアップされることを保証する。(テキスト端末上で開始された等で)たとえばEmacsがXリソースを未処理ならこの時点で処理を行う。他のすべての点においては、この関数はmake-frame(Creating Framesを参照)と同様に振る舞う。

Function: x-display-list

この関数はEmacsがどのXディスプレイに接続したかを識別するリストをリターンする。このリストの要素は文字列で、それぞれがディスプレイ名を表す。

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

この関数はディスプレイ上にフレームを作成することなく、Xディスプレイdisplayへの接続をオープンする。通常はmake-frame-on-displayが自動的に呼び出すので、Emacs Lispプログラムがこの関数を呼び出す必要はない。これを呼び出す唯一の理由は、与えられたXディスプレイにたいして通信を確立できるかどうかチェックするためである。

オプション引数xrm-stringが非nilなら、それは.Xresourcesファイル内で使用されるフォーマットと同一なリソース名とリソース値。X Resources in The GNU Emacs Manualを参照のこと。これらの値はそのXサーバー上で記録されたリソース値をオーバーライドして、このディスプレイ上で作成されるすべてのEmacsフレームにたいして適用される。以下はこの文字列がどのようなものかを示す例:

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

must-succeedが非nilなら、接続オープンの失敗によりEmacsが終了させられる。それ以外なら通常のLispエラーとなる。

Function: x-close-connection display

この関数はディスプレイdisplayへの接続をクローズする。これを行う前には、まずそのディスプレイ上でオープンしたすべてのフレームを削除しなければならない(Deleting Framesを参照)。

マルチモニターのセットアップにおいて、単一のXディスプレイが複数の物理モニターに出力される場合があります。そのようなセットアップを取得するために関数display-monitor-attributes-listframe-monitor-attributesを使用できます。

Function: display-monitor-attributes-list &optional display

この関数はdisplay上の物理モニターの属性のリストをリターンする。displayにはディスプレイ名(文字列)、端末、フレームを指定でき、省略またはnilの場合のデフォルトは選択されたフレームのディスプレイ。このリストの各要素は物理モニターの属性を表す連想リスト。1つ目の要素はプライマリーモニターである。以下は属性のキーと値:

geometry

(x y width height)’のようなピクセル単位でのそのモニターのスクリーンの左上隅の位置とサイズ。そのモニターがプライマリーモニターでなければ、いくつかの座標が負になり得る。

workarea

(x y width height)’のようなピクセル単位でのワークエリア(使用可能なスペース)の左上隅の位置とサイズ。ウィンドウマネージャーのさまざまな機能(dock、taskbar等)によりそのスペースが占有される‘geometry’とは異なり、これはワークエリアから除外され得る。そのような機能が実際にワークエリアから差し引かれるかどうかは、そのプラットフォームと環境に依存する。繰り返しになるが、そのモニターがプライマリーモニターでなければ、いくつかの座標は負になり得る。

mm-size

(width height)’<のようなミリメートル単位での幅と高さ。

frames

その物理モニターが支配(dominate)するフレームのリスト(以下参照)。

name

stringのようなその物理モニターの名前。

source

stringのようなマルチモニターの情報ソース(例: ‘XRandr’、‘Xinerama’等)。

xywidthheightは整数。‘name’と‘source’は欠落しているかもしれない。

あるモニター内にフレームの最大領域がある、または(フレームがどの物理モニターにも跨がらないなら)そのモニターがフレームに最も近いとき、フレームは物理モニターにより支配(dominate)される。グラフィカルなディスプレイ内の(ツールチップではない)すべてのフレームは、たとえそのフレームが複数の物理モニターに跨がる(または物理モニター上にない)としても、(可視か否かによらず)正確に1つの物理モニターにより支配される。

以下は2つのモニターディスプレイ上でこの関数により生成されたデータの例:

  (display-monitor-attributes-list)
  ⇒
  (((geometry 0 0 1920 1080) ;; 左手側プライマリーモニター
    (workarea 0 0 1920 1050) ;; タスクバーが幾分かの高さを占有
    (mm-size 677 381)
    (name . "DISPLAY1")
    (frames #<frame emacs@host *Messages* 0x11578c0>
            #<frame emacs@host *scratch* 0x114b838>))
   ((geometry 1920 0 1680 1050) ;; 右手側モニター
    (workarea 1920 0 1680 1050) ;; スクリーン全体を使用可
    (mm-size 593 370)
    (name . "DISPLAY2")
    (frames)))
Function: frame-monitor-attributes &optional frame

この関数はframeを支配(上記参照)する物理モニターの属性をリターンする。 frameのデフォルトは選択されたフレーム。


Next: , Previous: , Up: Frames   [Contents][Index]