Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ window(1) — NEWS-os 4.1C

Media Vault

Software Library

Restoration Projects

Artifacts Sought

WINDOW(1)  —  NEWS-OS Programmer’s Manual

名称

window − ウィンドウ環境

形式

window [ −t ] [ −f ] [ −d ] [ −e escape-char ] [ −c command ]

解説

window は端末上にウィンドウ環境を実現します。

ウィンドウは、一連のプロセスが関連する物理端末画面上の、 四角形の部分です。 そのサイズと位置はユーザがいつでも変更できます。 標準の入力、 出力、 診断ファイルディスクリプタを通じて端末と普通に 連絡を取る場合と同様の方法で、 プロセスはウィンドウと通信します。 ウィンドウプログラムは、 ウィンドウとの入出力リダイレクトの詳細を処理します。 1度に 1つのウィンドウしかキーボードからの入力を受信できませんが、 すべてのウィンドウは出力を同時に表示装置に送ることができます。

ウィンドウを必要に応じて重ね合わせたり、 フレームを付けたりできます。 各ウィンドウは "1" から "9" の数字で指定します。 この 1文字識別子は、 ユーザが定義可能なラベル文字列と同様、 フレーム上部のウィンドウ上に表示されます。 ウィンドウを フォアグラウンド に入るよう指示することができますが、 この場合、 それは必ず通常のフォアグラウンドウィンドウでないウィンドウより上にくるので、 別のフォアグラウンドウィンドウでないとこれを遮ることはできません。 ウィンドウは、 必ずしも完全に端末画面の中に入る必要はありません。 したがって、 大きなウィンドウ (画面より大きくてもよい) の全サイズの一部だけを表示するために、 位置を指定することもできます。

各ウィンドウは、 カーソルを 1つと、 一揃いの制御機能を持っています。 行、文字の削除、挿入など、 もっともインテリジェントな端末操作がサポートされています。 下線、反転ビデオなどの表示モードも、端末がサポートすれば利用できます。 また、複数ページ分のメモリを持っている端末と同様、 各ウィンドウは、 ウィンドウ自体よりも多くの行を持つことのできるテキストバッファを持っています。

オプション

window が起動すると、 ユーザのホームディレクトリのファイル .windowrc に入っているコマンド (下記のロングコマンド参照) を実行します。存在しなければ、 端末画面に展開される 2つの同じサイズのウィンドウが、デフォルトで作成されます。

コマンド行のオプションは次の通りです。

−t 簡略モードをオンにします (下記の terse コマンド参照)。

−f 高速。起動動作を実行しません。

−d .windowrc を無視し、 代わりに 2つのデフォルトウィンドウを作成します。

−e escape-char
エスケープ文字を escape-char に設定します。 これには、単一文字を指定できます。 X を任意の文字として^Xの形式 (これは control-X を意味します)でも指定可能です。

−c command
他の動作を行う前に、文字列 command をロングコマンド (下記参照)として実行します。

プロセス環境

新たに作成したウィンドウでは、 そのウィンドウ用に調整したプロセス環境でシェルプログラムが起動されます。 そのウィンドウの標準入力、 標準出力、 診断ファイルディスクリプタは、 疑似端末(pty(4)) か UNIXドメインソケット(socketpair(4)) の一端に接続されます。 疑似端末を使用すると、 特殊文字とモード(stty(1)参照) が物理端末からコピーされます。 このウィンドウ用に調整した termcap(5) エントリが作成され、 環境 (environ(5)) 変数 TERMCAP として渡されます。 termcap エントリには、 ウィンドウのサイズと特徴の他、 下線、反転ビデオ、その他の表示モードの有無など物理端末からの情報、 さらに、端末のファンクションキーによって生成されるコードがあれば そのコードなどが入っています。 また、このウィンドウのサイズを反映させるために、 疑似端末のウィンドウサイズ属性が設定され、 ユーザが変更した時にはいつでも更新されます。 特に、エディタ vi(1)は、 この情報を使用してその表示を描き直します。

操作

通常実行時、window は、 会話モードかコマンドモードのどちらかの状態にあります。 会話モードでは、 端末の実カーソルは (カレントウィンドウと呼ぶ)特定のウィンドウのカーソル位置に配置され、 キーボードからの入力はそのウィンドウのプロセスに送られます。 カレントウィンドウは、 フォアグラウンドにあるウィンドウを除くどのウィンドウよりも必ず上に置かれます。 また、カレントウィンドウは、 反転ビデオでその識別子とラベルを強調表示することにより、 目立つようにされます。

会話モードでウィンドウのエスケープ文字 (通常^P)を入力すると、コマンドモードに切り替わります。 コマンドモードでは、 端末画面の先頭行がコマンドプロンプトウィンドウになり、 window はキーボードからの入力をウィンドウを操作するコマンドと 解釈します。

コマンドは 2種類あります。 ショートコマンドは、 キー入力が通常 1回か 2回のコマンドです。 ロングコマンドは、 ウィンドウ中にユーザにより入力される文字列であるか (下記の ":" コマンド参照)、 またはファイルから読み出される文字列です (下記の source 参照)。

ショートコマンド

以下では、記号# は、 ウィンドウ 1〜9 に対応して数字 "1" 〜 "9" を表します。 ^X は、X を任意の文字として、 control-X を意味します。 特に、^^ は control-^ です。 escape はエスケープキー、 または ^[ です。

# ウィンドウ # をカレントウィンドウとして選択し、 会話モードに戻ります。

%# ウィンドウ # を選択しますが、 コマンドモードのままです。

^^ 前ウィンドウを選択して、 会話モードに戻ります。 2つのウィンドウのトグル(交互切り替え)に便利です。

escape
会話モードに戻ります。

^P 会話モードに戻り、 カレントウィンドウに ^P を書き込みます。 したがって、会話モードで ^P を 2度入力すると 1つをカレントウィンドウに送ります。 window エスケープを別の文字に変更すると、 その文字が ^P に取って代わります。

?  コマンドの短い要約をリストします。

^L 画面を表示し直します。

q window から抜け出します。 確認が必要です。

^Z window を保留します。

w 新しいウィンドウを作成します。 ユーザは、ウィンドウの左上隅と右下隅を指定するよう要求されます。 カーソルが画面に表示され、キー ‘h’、‘j’、‘k’、‘l’ は、 それぞれ、カーソルを左、下、上、右に移動します。 キー ‘H’、‘J’、‘K’、‘L’ は、画面のそれぞれの端にカーソルを移動します。 移動キーの前に数値を入力すると、その回数だけ移動を繰り返します。 復帰改行キーで、そのカーソル位置をウィンドウの左上隅として入力します。 右下隅も同じ方法で入力します。 このプロセスの間、新しいウィンドウの位置が、画面に引かれた長方形の箱 (ウィンドウのフレームに対応)によって示されます。

このウィンドウがカレントウィンドウになり、 最初の使用可能IDが与えられます。 デフォルトのバッファサイズが使用されます (下記の nline コマンド参照)。

この方法で作成できるのは、画面に全体が表示されるウィンドウだけです。

c# ウィンドウ # を閉じます。 ウィンドウ内のプロセスにハングアップシグナルを送ります (kill(1) 参照)。 csh(1) はこの信号を正しく扱う必要があり、 そうすれば問題は起きません。

m# ウィンドウ # を別の位置に移動します。 ウィンドウの形をした箱を画面に表示して、 ウィンドウの新しい位置を示し、 w コマンドと同じキーを使用して、 箱の位置を決めます。 ウィンドウの一部が画面から外れる移動も可能です。

M# ウィンドウ # を前の位置に移動します。

s# ウィンドウ # のサイズを変更します。 ユーザは、ウィンドウの右下隅への入力を要求されます。 箱を表示して、新しいウィンドウのサイズを指定します。 w と m に使用したのと同じキーを使用して、 その位置を入力します。

S# ウィンドウ # を前のサイズに変更します。

^Y カレントウィンドウを 1行だけ上にスクロールします。

^E カレントウィンドウを 1行だけ下にスクロールします。

^U カレントウィンドウをウィンドウサイズの半分だけ上にスクロールします。

^D カレントウィンドウをウィンドウサイズの半分だけ下にスクロールします。

^B カレントウィンドウをウィンドウサイズ分、上にスクロールします。

^F カレントウィンドウをウィンドウサイズ分、下にスクロールします。

h カレントウィンドウのカーソルを 1カラムだけ左に移動します。

j カレントウィンドウのカーソルを 1行だけ下に移動します。

k カレントウィンドウのカーソルを 1行だけ上に移動します。

l カレントウィンドウのカーソルを 1カラムだけ右に移動します。

^S カレントウィンドウの出力を中止します。

^Q カレントウィンドウの出力を開始します。

: ロングコマンドとして実行する行を入力します。 通常の行編集文字 (文字の消去、語の消去、行の消去) をサポートします。

ロングコマンド

ロングコマンドは、 プログラミング言語と同じように簡略化した一連の文で、 C言語と類似の構文を持ちます。 条件文と同様、数値および文字列の式、変数をサポートします。

文字列と数値の 2つのデータタイプがあります。 文字列は文字と数字が並んだもので、文字から始めます。 "_"、"." は文字と見なされます。 “"”の中に入れて引用するか、"\" でエスケープすれば、 英数字以外の文字も含めることができます。 また、引用符の中と外の両方で、C の "\" シーケンスをサポートします (たとえば、"\n" は改行、"\r" は復帰)。 たとえば、 abcde-1234、"&#$^∗&#"、ab"$#"cd、ab\$\#cd、 "usr/ucb/window" などの文字列は有効です。

数値は整数で、10進数、"0" が先行する 8進数、 "0x" または "0X" が先行する 16進数のいずれかの形式をとります。 普通のマシン整数サイズが使用されます (つまり、Cコンパイラの符号付き整数型)。 Cの場合と同様、ゼロ以外の数値はブール代数の真を表します。

文字 "#" はコメントを開始し、それは行の最後で終了します。

文(statement)は、条件式(conditional)か式(expression)のどちらかです。 文は改行または ";" で終了します。 式を次の行まで継続するには、最初の行を "\" で終らせます。

条件文

window は単一の制御構造を持っています。 以下の形式の文の場合、全体をかっこで囲みます。

       if <expr> then
               <statement>
               . . .
       elsif <expr> then
             <statement>
             . . .
       else
             <statement>
             . . .
       endif

else 部と elsif 部はオプションです。 elseif 部は何回でも反復できます。 <expr> は数値でなければなりません。

式

window の中の式は C言語の式に類似しており、 C演算子の大半は数値オペランドとしてサポートされています。 また、いくつかの演算子は文字列で動作するよう、オーバロードされます。

式が文として使用されると、 その値は評価後に廃棄されます。 したがって、 副作用 (代入、関数コール) を持つ式のみが、 文として有用です。

値が 1つだけの (配列ではない) 変数が、数値、文字列値の両方ともサポートされます。 いくつかの変数は定義済みです。 これらを以下に列記します。

以下では、演算子を昇順に示します。

<expr1> = <expr2>
代入。名前が <expr1> の変数 (文字列値でなければなりません)に結果 <expr2> が代入されます。 <expr2> の値を返します。

<expr1> ? <expr2> : <expr3>
<expr1> が真(ゼロでない数値)と評価されると値 <expr2> を返し、 それ以外ならば値 <expr3> を返します。 <expr2> と <expr3> の一方しか評価されません。 <expr1> は数値でなければなりません。

<expr1> || <expr2>
論理 OR。 数値のみ。短絡評価をサポートします (すなわち、<expr1> を真と評価すると、 <expr2> は評価されません)。

<expr1> && <expr2>
短絡評価の論理 AND。数値のみ。

<expr1> | <expr2>
ビット単位 OR。数値のみ。

<expr1> & <expr2>
ビット単位 AND。数値のみ。

<expr1> == <expr2>, <expr1> != <expr2>
比較(それぞれ、等しい、等しくない)。 比較のブール結果 (1 または 0) を返します。 オペランドは数値、文字列値のどちらでもかまいません。 一方が文字列オペランドであると、 必要に応じて、他方が文字列に強制変換されます。

<expr1> < <expr2>, <expr1> > <expr2>

<expr1> <= <expr2>, <expr1> >= <expr2>
より小、より大、以下、以上。 両方とも数値か文字列値で、上記と同様な自動変換が行われれます。

<expr1> << <expr2>, <expr1> >> <expr2>
両方のオペランドが数値ならば、 <expr2> 分だけ <expr1> を左(または右)にビットシフトします。 <expr1> が文字列ならば、 その最初(または最後)の <expr2> 文字を返します (<expr2>も 文字列ならば、その長さが値の代わりとして使用されます)。

<expr1> + <expr2>, <expr1> − <expr2>
数値の加算と減算。 "+" の場合、一方の引数が文字列ならば、 他方が文字列に変換され、結果は 2つの文字列の連結となります。

<expr1> ∗ <expr2>, <expr1> / <expr2>, <expr1> % <expr2>
乗算、除算、剰余。数値のみ。

−<expr>, ~<expr>, !<expr>, $<expr>, $?<expr>
最初の 3つは、数値のみに対する単項マイナス、ビット単位補数、 論理補数です。 演算子 "$" は <expr> を取り出して、 その名前の変数の値を返します。 <expr> が n の数値で、 別名マクロ(下記参照)内に現れるならば、 別名定義の n 番目の引数を参照します。 "$?" は変数 <expr> が存在するかどうかをテストし、 存在すれば 1 を、存在しなければ 0 を返します。

<expr>(<arglist>)
関数コール。<expr> は組み込み window (ウィンドウ)関数の名前の一意な接頭辞である文字列か、 またはユーザ定義の別名マクロの名前である文字列でなければなりません。 組み込み関数の場合には、 <arglist> は次の 2つのどちらかの形式を取ります。
<expr1>, <expr2>, . . . 
argname1 = <expr1>, argname2 = <expr2>, . . . 
2つの形式を混在させることもできますが、 その結果はどうなるか分かりません。 大半の引数は省略でき、 デフォルト値が与えられます。 argnameN (N は 1、2 ...) は引数名の一意な接頭辞とすることができます。 引数を区切るコンマは区別を明確にするために使っているだけで、 通常省略できます。

ユーザが定義した別名に対しては、 最初の引数形式だけが有効です。 別名は、 組み込み関数 alias (下記参照) を使用して定義します。 引数は、変数メカニズムの一変形 (上記の演算子 "$" 参照) を介してアクセスされます。

大半の関数は値を返しますが、 中には副作用のためにしか使用しないものもあって、それは、 文として使用しなければなりません。 関数または別名を文として使用する場合、 引数リストを囲むかっこを省略できます。 別名は値を返しません。

組み込み関数

引数を名前の自然な順に列記します。 オプションの引数は大かっこ [ ] で、 名前のない引数は山かっこ < > で囲みます。

alias([<string>], [<string-list>])
引数を指定しないと、 現在定義されている別名マクロをすべて列記します。 引数を指定すると、 式 <string-list> (文字列リスト)に対し、 <string>(文字列)を別名として定義します。 <string> が以前に定義されていれば、 それが返されます。 <string-list> を省略すると、 変更は行われません。

close(<window-list>)
<window-list> で指定したウィンドウを閉じます。 <window-list> が all(すべて) ならば、 すべてのウィンドウを閉じます。 値は返しません。

cursormodes([modes])
ウィンドウカーソルに modes(モード) を設定します。 modes は、変数 m_ul(下線)、m_rev(反転ビデオ)、 m_blk(点滅)、m_grp(グラフィックス、端末による) として定義されているモードビットの、 論理和のビット値を設定します。 リターン値は前のモードです。 modes を省略すると、 変更は行われません。 たとえば、cursormodes($m_rev|$m_blk) はウィンドウカーソルを点滅、 反転ビデオに設定します。

echo([window], [<string-list>])
文字列 <string-list> を、 空白で区切って window に書き出し、 改行して終了します。 文字列はウィンドウに表示されるだけで、 ウィンドウ中のプロセスは影響を受けません (下記の write 参照)。 値は返しません。 window のデフォルトはカレントウィンドウです。

escape([escapec])
エスケープ文字に escape-char を設定します。 以前のエスケープ文字を 1文字の文字列として返します。 escapec は単一文字の文字列か、 control-X を意味する ^X の形式が可能です。

foreground([window], [flag])
window(ウィンドウ)をフォアグラウンドに入れるか、 または出します。 flag(フラグ)には、 明確な意味を持つ on(オン)、 off(オフ)、yes(イエス)、no(ノー)、tru(真)、 false(偽)のいずれかが指定可能です。 また、数値式も指定可能ですが、その場合にはゼロでない値が真となります。 以前のフォアグラウンドフラグを数値として返します。 window のデフォルトはカレントウィンドウで、 flag を省略すると変更はされません。

label([window], [label])
window(ウィンドウ) のラベルを label に設定します。 以前のラベルを文字列として返します。 window のデフォルトはカレントウィンドウで、 label を省略すると変更はされません。 ラベルをオフにするには、空の文字列("")を設定します。

list() 引数はありません。 全ウィンドウの識別子とラベルをリストします。値は返しません。

nline([nline])
デフォルトバッファサイズを nline に設定します。 最初は 48 行です。 以前のデフォルトバッファサイズを返します。 引数を省略すると変更は行われません。 大量のバッファを使用すると、プログラムの速度が著しく低下します。

select([window])
window をカレントウィンドウにします。 以前のカレントウィンドウを返します。 引数を省略すると変更は行われません。

shell([<string-list>])
デフォルトのウィンドウシェルプログラムを <string-list> に設定します。 以前のシェル設定の最初の文字列を返します。 引数を省略すると変更は行われません。 最初、デフォルトのシェルは環境変数 SHELL から取り出されます。

source(filename)
filename の中のロングコマンドを読み取って、 実行します。 ファイルを読み取ることができないと −1 を、読み取れれば 0 を返します。

terse([flag])
簡略モードを flag に設定します。 簡略モードでは、 コマンドモードであってもコマンドウィンドウは隠れたままで、 端末のベルを鳴らしてエラーを知らせます。 flag は上記の foreground と同じ値を取ることができます。 以前の簡略フラグを戻します。 引数を省略すると変更は行われません。

unalias(alias)
alias (別名)の定義を解除します。 alias が存在しなければ −1 を、 存在すれば 0 を返します。

unset(variable)
variable (変数)の定義を解除します。 variable が存在しなければ −1 を、 存在すれば 0 を返します。

variables()
引数はありません。 すべての変数をリストします。値は返しません。

window([row],[column],[nrow],[ncol],[nline],[frame],
[pty],[mapnl],[shell])
row、 column を左上隅、 nrow、 ncol をサイズとして、 ウィンドウを開きます。 nline を指定すると、 それだけの行がテキストバッファ用に割り当てられます。 指定しないと、 デフォルトバッファサイズを使用します。 row、 column、 nrow、 ncol のデフォルト値は、それぞれ、画面の上端、左端、下端、右端です。 frame、 pty、 mapnl は、 foreground (前記参照) の引数と同じように解釈するフラグ値で、それぞれ、 このウィンドウの周囲へのフレームの表示(デフォルトは真)、 ソケットペアではなくこのウィンドウへの擬端末の割り当て (デフォルトは真)、このウィンドウの改行文字の復帰、 行送り(ソケットペアを使用するならばデフォルトは真、 使用しなければ偽)へのマッピングを示します。 shell (シェル)は、ウィンドウ中に組み込まれるシェルプログラムとして使用 する文字列のリストです (デフォルトは shell が指定するプログラム。下記参照)。 作成したウィンドウの識別子を数値で返します。

write([window], [<string-list>])
文字列のリスト <string-list> を、空白で区切って window に送出しますが、改行はしません。 文字列は入力としてウィンドウに実際に与えられます。 値は返しません。 デフォルトはカレントウィンドウです。

定義済み変数

これらの変数は情報用に過ぎません。 再定義しても、ウィンドウの内部動作には影響しません。

baud ボーレート、値は 50〜38400 の範囲。

modes
物理端末がサポートする表示モード (反転ビデオ、下線、点滅、 グラフィックス)。 modes の値は、1ビット値 (m_blk、m_grp、m_ul (以下参照)) のいくつかの 論理和をとったビット値です。 これらの値は、 ウィンドウカーソルのモード (上記の cursormodes 参照) の設定に便利です。

m_blk
点滅モードビット

m_grp
グラフィックスモードビット (あまり便利ではありません)

m_rev
反転ビデオモードビット

m_ul 下線モードビット

ncol 物理画面のカラム数

nrow 物理画面の行数

term 端末タイプ。 端末の TERMCAP 項目の第二名前フィールドに表示されている標準名を使用します。

関連ファイル

~/.windowrc初期設定コマンドファイル
/dev/[pt]ty[pq]?疑似端末デバイス

診断

読めば分かる説明にするべきです。

バグ

自動マージンが動作しません。

NEWS-OSRelease 4.1C

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026