GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Multiple-Terminals.html ・ emacs-doc.conao3.com

30.2 複数端末

Emacsでは、各端末を端末オブジェクトデータ型として表現します(端末タイプを参照)。GNUおよびUnixシステムでは、Emacsは各セッションで複数の端末を同時に使用できます。その他のシステムでは、単一の端末しか使用できません。各端末オブジェクトは、以下の属性を持ちます。

端末オブジェクトを生成するためのプリミティブはありません。Emacs は、make-frame-on-display(後述)を呼び出した際など、必要に応じてこれらを生成します。

関数: terminal-name &optional terminal

この関数は、terminal で使用されるデバイスのファイル名を返します。terminal が省略された場合、または nil が指定された場合は、選択されたフレームの端末がデフォルトとなります。terminal にもフレームを指定でき、その場合はそのフレームの端末を指します。

関数: terminal-list

この関数は、すべてのライブターミナルオブジェクトの一覧を返します。

関数: get-device-terminal device

この関数は、デバイス名が device で指定されるターミナルを返します。device が文字列の場合、それはターミナルデバイスのファイル名、または ‘host:server.screen’ という形式の X ディスプレイ名のいずれかとなります。device がフレームの場合、この関数はそのフレームのターミナルを返します。nil は選択中のフレームを意味します。最後に、device がライブターミナルを表すターミナルオブジェクトである場合、そのターミナルが返されます。引数が上記のいずれにも該当しない場合、この関数はエラーを通知します。

関数: delete-terminal &optional terminal force

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

terminal が省略された場合や nil が指定された場合は、選択されたフレームの端子がデフォルトとなります。terminal もフレームを指定でき、その場合はそのフレームの端子を意味します。

通常、この関数は、唯一アクティブな端末を削除しようとした場合にエラーを通知しますが、force が nil 以外であれば、削除が許可されます。Emacs は、端末上の最後のフレームが削除された際に、自動的にこの関数を呼び出します(フレームの削除 を参照)。

変数: delete-terminal-functions

delete-terminal による異常なフック実行。各関数には1つの引数が渡され、terminal 引数が delete-terminal に渡される。技術的な詳細により、関数はターミナルが削除される直前、あるいは削除直後に呼び出される可能性がある。

一部のLisp変数はターミナルローカルです。つまり、各ターミナルに対して個別の束縛を持っています。ある時点で有効な束縛は、現在選択されているフレームが属するターミナルのものです。これらの変数には、default-minibuffer-frame、defining-kbd-macro、last-kbd-macro、system-key-alistが含まれます。これらは常にターミナルローカルであり、バッファローカルになることはありません(バッファローカル変数を参照)。

GNUおよびUnixシステムでは、各Xディスプレイは独立したグラフィカル端末となります。Xウィンドウシステム内からEmacsを起動する場合、DISPLAY環境変数または‘--display’オプションで指定されたXディスプレイが使用されます(The GNU Emacs ManualのInitial Optionsを参照)。Emacsはmake-frame-on-displayコマンドを介して他のXディスプレイに接続できます。各Xディスプレイには独自の選択フレームと独自のミニバッファウィンドウがありますが、ある時点において唯一の選択フレームとなるのはそれらのうちの1つだけです(Input Focusを参照)。Emacsはemacsclientプログラムを操作することで、他のテキスト端末に接続することさえ可能です。The GNU Emacs ManualのEmacs Serverを参照してください。

単一のXサーバーで、複数のディスプレイを扱えます。各Xディスプレイは、‘hostname:displaynumber.screennumber’という3つの部分からなる名前を持ちます。第1部分のhostnameは、そのディスプレイが物理的に接続されているマシンの名前を指定します。第2部分のdisplaynumberは0から始まる番号で、そのマシンに接続されており、共通のキーボードとポインティングデバイス(マウス、タブレットなど)を共有する1つ以上のモニターを識別します。第3部分のscreennumberは、そのXサーバー上の単一のモニターコレクションに属する、0から始まるスクリーン番号(個別のモニター)を識別します。1つのサーバーに属する2つ以上のスクリーンを使用する場合、Emacsは名前の類似性から、それらが単一のキーボードを共有していることを認識します。

MS-WindowsのようにX Window Systemを採用していないシステムでは、Xディスプレイという概念はサポートされておらず、各ホストに1つのディスプレイしか存在しません。これらのシステムにおけるディスプレイ名は、前述の3部構成の形式に従いません。例えば、MS-Windowsシステムにおけるディスプレイ名は定数文字列「w32」であり、互換性のために存在しているため、ディスプレイ名を期待する関数に渡すことができます。

コマンド: make-frame-on-display display &optional parameters

この関数は、alist parameters から他のフレームパラメータを受け取り、display 上に新しいフレームを作成して返します。display には X ディスプレイ名(文字列)を指定してください。

フレームを作成する前に、この関数は Emacs がグラフィックスを表示するように設定されていることを確認します。例えば、Emacs が X リソースを処理していない場合(テキスト端末で起動した場合など)、このタイミングで処理を行います。それ以外の点では、この関数は make-frame と同様に動作します(フレームの作成 を参照)。

関数: x-display-list

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

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

この関数は、Xディスプレイ display への接続を開きますが、そのディスプレイ上にフレームを作成することはありません。通常、make-frame-on-display が自動的にこの関数を呼び出すため、Emacs Lisp プログラムでこの関数を呼び出す必要はありません。この関数を呼び出す唯一の理由は、特定の X ディスプレイとの通信が可能かどうかを確認することです。

オプション引数 xrm-string(nil でない場合)は、.Xresources ファイルで使用される形式と同じ、リソース名と値の文字列です。The GNU Emacs Manual の X Resources を参照してください。これらの値は、このディスプレイ上で作成されるすべての Emacs フレームに適用され、X サーバーに記録されているリソース値を上書きします。この文字列がどのような形式になるか、以下に例を示します。

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

must-succeed が nil でない場合、接続を開けないと Emacs が終了します。そうでない場合は、通常の Lisp エラーとなります。

関数: x-close-connection display

この関数は、display を表示するために接続を閉じます。これを行う前に、まずそのディスプレイで開いていたすべてのフレームを削除する必要があります(フレームの削除を参照してください)。

一部のマルチモニター構成では、単一のXディスプレイが複数の物理モニターに出力されます。display-monitor-attributes-list および frame-monitor-attributes 関数を使用すると、このような構成に関する情報を取得できます。

関数: display-monitor-attributes-list &optional display

This function returns a list of physical monitor attributes on display, which can be a display name (a string), a terminal, or a frame; if omitted or nil, it defaults to the selected frame’s display. Each element of the list is an association list, representing the attributes of a physical monitor. The first element corresponds to the primary monitor. The attribute keys and values are:

‘geometry’

モニター画面の左上隅の位置とサイズ(ピクセル単位)を「(x y width height)」として指定します。なお、モニターがプライマリモニターでない場合、座標の一部が負の値になることがあります。

‘workarea’

左上隅の位置および作業領域(使用可能領域)のサイズをピクセル単位で ‘(x y width height)’ として指定します。各種ウィンドウマネージャの機能(ドック、タスクバーなど)が占有する領域が作業領域から除外される場合があるため、‘geometry’ とは異なることがあります。こうした機能が実際に作業領域を減算するかどうかは、プラットフォームや環境によって異なります。なお、モニターがプライマリモニターでない場合、座標の一部が負の値になることがあります。

‘mm-size’

幅と高さ(ミリメートル)を ‘(width height)’ として

‘frames’

この物理モニターが占有するフレームの一覧(以下参照)。

‘name’

物理モニター名を string として。

‘source’

マルチモニター情報のソースは string です。X 環境では、‘XRandR 1.5’、‘XRandr’、‘Xinerama’、‘Gdk’、または ‘fallback’ となる場合があります。最後の値である ‘source’ は、Emacs が GTK および XRandR や Xinerama 拡張なしでビルドされたことを意味します。この場合、複数の物理モニターに関する情報は、それらすべてが一体となって単一のモニターであるかのように提供されます。

x、y、width、およびheightは整数です。‘name’および‘source’は省略可能です。

フレームが物理モニターによって支配されるとは、フレームの最大面積がそのモニター内にあるか、あるいは(フレームがいずれの物理モニターとも交差しない場合)そのモニターがフレームに最も近い状態を指す。グラフィカルディスプレイ上のすべての(ツールチップ以外の)フレーム(可視か否かを問わず)は、一度にちょうど1つの物理モニターによって支配されるが、フレームが複数の物理モニターにまたがる(あるいは全くまたがない)こともある。

2台のモニターディスプレイで、この関数によって生成されたデータの例を以下に示します。

  (display-monitor-attributes-list)
  ⇒
  (((geometry 0 0 1920 1080) ;; Left-hand, primary monitor
    (workarea 0 0 1920 1050) ;; A taskbar occupies some of the height
    (mm-size 677 381)
    (name . "DISPLAY1")
    (frames #<frame emacs@host *Messages* 0x11578c0>
            #<frame emacs@host *scratch* 0x114b838>))
   ((geometry 1920 0 1680 1050) ;; Right-hand monitor
    (workarea 1920 0 1680 1050) ;; Whole screen can be used
    (mm-size 593 370)
    (name . "DISPLAY2")
    (frames)))
関数: frame-monitor-attributes &optional frame

この関数は、(上記参照)frameを支配する物理モニターの属性を返します。デフォルトでは、選択されたフレームが指定されます。

マルチモニター環境では、コマンド make-frame-on-monitor を使用して指定したモニター上にフレームを作成できます。

コマンド: make-frame-on-monitor monitor &optional display parameters

この関数は、alist parameters から他のフレームパラメータを受け取り、display 上に位置する monitor の新しいフレームを作成して返します。monitor には物理モニタの名前を指定します。これは、属性 name において関数 display-monitor-attributes-list が返す文字列と同じものです。display には X ディスプレイ名(文字列)を指定します。

変数: display-monitors-changed-functions

この変数は、モニター構成が変更された際に実行される特殊なフックです。構成変更は、マルチモニター環境でモニターを回転・移動・追加・削除した場合や、プライマリモニターが変更された場合、あるいはモニターの解像度が変更された場合などに発生します。この変数は、モニター構成が変更された端末を単一の引数として指定して呼び出されます。プログラムは、その端末で新しいモニター構成を取得するために、端末を引数として display-monitor-attributes-list を呼び出す必要があります。