coneko-term 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/animation.d.ts +18 -0
- package/dist/animation.js +72 -0
- package/dist/images.d.ts +116 -0
- package/dist/images.js +359 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +21 -0
- package/dist/input.d.ts +130 -0
- package/dist/input.js +313 -0
- package/dist/keyboard.d.ts +46 -0
- package/dist/keyboard.js +278 -0
- package/dist/kitty-keyboard.d.ts +55 -0
- package/dist/kitty-keyboard.js +332 -0
- package/dist/memory.d.ts +4 -0
- package/dist/memory.js +12 -0
- package/dist/renderer.d.ts +261 -0
- package/dist/renderer.js +870 -0
- package/dist/selection.d.ts +67 -0
- package/dist/selection.js +146 -0
- package/dist/terminal.d.ts +1006 -0
- package/dist/terminal.js +2020 -0
- package/dist/wasm/coneko_term_wasm.d.ts +728 -0
- package/dist/wasm/coneko_term_wasm.js +1776 -0
- package/dist/wasm/coneko_term_wasm_bg.wasm +0 -0
- package/dist/wasm/coneko_term_wasm_bg.wasm.d.ts +140 -0
- package/package.json +33 -4
- package/README.md +0 -3
|
@@ -0,0 +1,1006 @@
|
|
|
1
|
+
import { type SelectionRange } from "./selection.js";
|
|
2
|
+
import { type CellSize } from "./renderer.js";
|
|
3
|
+
/** セル 1 つが使う `u32` の数。`RowView.cells` の並びは README を参照。 */
|
|
4
|
+
export declare const CELL_STRIDE = 7;
|
|
5
|
+
/** セルの字(並びの 0 番目)にこのビットが立っていたら、残りのビットが `RowView.cluster` の番号。 */
|
|
6
|
+
export declare const CLUSTER_FLAG = 2147483648;
|
|
7
|
+
/** プログラムの状態(kitty の OSC 7501)。 */
|
|
8
|
+
export type ProgramState = "idle" | "working" | "done" | "blocked" | "error";
|
|
9
|
+
/** `blocked` の理由。 */
|
|
10
|
+
export type ProgramKind = "permission" | "question" | "auth";
|
|
11
|
+
/** プログラムが報告した状態の記録 1 つ。 */
|
|
12
|
+
export interface ProgramStatus {
|
|
13
|
+
/** 記録の id。根の記録は空の文字列。 */
|
|
14
|
+
id: string;
|
|
15
|
+
state: ProgramState;
|
|
16
|
+
/** `blocked` のときの理由。 */
|
|
17
|
+
kind?: ProgramKind;
|
|
18
|
+
/** 0 から 100。無ければ、動いているが割合は分からない。 */
|
|
19
|
+
progress?: number;
|
|
20
|
+
/** プログラムの識別子。報告に無ければ、いちばん近い親の記録のもの。 */
|
|
21
|
+
app?: string;
|
|
22
|
+
/** 短い名札。 */
|
|
23
|
+
title?: string;
|
|
24
|
+
/** 1 行の説明。 */
|
|
25
|
+
msg?: string;
|
|
26
|
+
}
|
|
27
|
+
/** `onProgramStatus` に渡す、記録の変化。 */
|
|
28
|
+
export interface ProgramStatusChange {
|
|
29
|
+
/** 変わった記録の id(根の記録は空)。 */
|
|
30
|
+
id: string;
|
|
31
|
+
/** 新しい中身。記録が消えたときは `undefined`。 */
|
|
32
|
+
status?: ProgramStatus;
|
|
33
|
+
}
|
|
34
|
+
/** `Terminal.handleMouse` に渡すポインターのイベント。 */
|
|
35
|
+
export interface MouseInput {
|
|
36
|
+
/** 押した、離した、動かした、窓から出た(`leave`。kitty の拡張)。 */
|
|
37
|
+
type: "down" | "up" | "move" | "leave";
|
|
38
|
+
/** DOM の `MouseEvent.button` と同じ(0 左、1 真ん中、2 右、3 戻る、4 進む)。`down` だけが使う。 */
|
|
39
|
+
button: number;
|
|
40
|
+
/** 見えている画面の列(0 始まり)。範囲の外は端に寄せる。 */
|
|
41
|
+
col: number;
|
|
42
|
+
/** 見えている画面の行(0 始まり)。範囲の外は端に寄せる。 */
|
|
43
|
+
row: number;
|
|
44
|
+
/** 画面の左端からの CSS ピクセル(`CSI ? 1016 h` のときだけ使う)。 */
|
|
45
|
+
x?: number;
|
|
46
|
+
/** 画面の上端からの CSS ピクセル(`CSI ? 1016 h` のときだけ使う)。 */
|
|
47
|
+
y?: number;
|
|
48
|
+
/** Shift を押している。 */
|
|
49
|
+
shiftKey?: boolean;
|
|
50
|
+
/** Alt(Option)を押している。 */
|
|
51
|
+
altKey?: boolean;
|
|
52
|
+
/** Ctrl を押している。 */
|
|
53
|
+
ctrlKey?: boolean;
|
|
54
|
+
/** 連続して押した回数(DOM の `MouseEvent.detail`)。1 は範囲、2 は単語、3 は行。`down` だけが使う。 */
|
|
55
|
+
clickCount?: number;
|
|
56
|
+
}
|
|
57
|
+
/** `Terminal.handleWheel` に渡すホイールのイベント。 */
|
|
58
|
+
export interface WheelInput {
|
|
59
|
+
/** 縦の量(DOM の `WheelEvent.deltaY`)。負が上。 */
|
|
60
|
+
deltaY: number;
|
|
61
|
+
/** 0 がピクセル、1 が行、2 がページ(DOM の `WheelEvent.deltaMode`)。 */
|
|
62
|
+
deltaMode?: number;
|
|
63
|
+
/** 見えている画面の列(0 始まり)。報告が有効なときだけ使う(無ければ 0)。 */
|
|
64
|
+
col?: number;
|
|
65
|
+
/** 見えている画面の行(0 始まり)。報告が有効なときだけ使う(無ければ 0)。 */
|
|
66
|
+
row?: number;
|
|
67
|
+
/** 画面の左端からの CSS ピクセル(`CSI ? 1016 h` の報告だけが使う)。 */
|
|
68
|
+
x?: number;
|
|
69
|
+
/** 画面の上端からの CSS ピクセル(`CSI ? 1016 h` の報告だけが使う)。 */
|
|
70
|
+
y?: number;
|
|
71
|
+
/** Shift を押している。押していると縦に動かさない。 */
|
|
72
|
+
shiftKey?: boolean;
|
|
73
|
+
/** Alt(Option)を押している。 */
|
|
74
|
+
altKey?: boolean;
|
|
75
|
+
/** Ctrl を押している。 */
|
|
76
|
+
ctrlKey?: boolean;
|
|
77
|
+
}
|
|
78
|
+
/** 後始末ができるもの。 */
|
|
79
|
+
export interface Disposable {
|
|
80
|
+
dispose(): void;
|
|
81
|
+
}
|
|
82
|
+
/** 色。`#rgb` か `#rrggbb`。 */
|
|
83
|
+
export interface Theme {
|
|
84
|
+
/** 文字の色(OSC 10 の問い合わせに返す)。 */
|
|
85
|
+
foreground?: string;
|
|
86
|
+
/** 背景の色(OSC 11)。 */
|
|
87
|
+
background?: string;
|
|
88
|
+
/** カーソルの色(OSC 12)。 */
|
|
89
|
+
cursor?: string;
|
|
90
|
+
/** 選択範囲の背景。`#rgb`、`#rgba`、`#rrggbb`、`#rrggbbaa`。字はこの色の下に見えるので、半透明にする。既定は `#ffffff4d`(xterm.js と同じ)。 */
|
|
91
|
+
selectionBackground?: string;
|
|
92
|
+
black?: string;
|
|
93
|
+
red?: string;
|
|
94
|
+
green?: string;
|
|
95
|
+
yellow?: string;
|
|
96
|
+
blue?: string;
|
|
97
|
+
magenta?: string;
|
|
98
|
+
cyan?: string;
|
|
99
|
+
white?: string;
|
|
100
|
+
brightBlack?: string;
|
|
101
|
+
brightRed?: string;
|
|
102
|
+
brightGreen?: string;
|
|
103
|
+
brightYellow?: string;
|
|
104
|
+
brightBlue?: string;
|
|
105
|
+
brightMagenta?: string;
|
|
106
|
+
brightCyan?: string;
|
|
107
|
+
brightWhite?: string;
|
|
108
|
+
}
|
|
109
|
+
/** `Terminal` を作るときの設定。 */
|
|
110
|
+
export interface TerminalOptions {
|
|
111
|
+
/** 列の数。既定は 80。 */
|
|
112
|
+
cols?: number;
|
|
113
|
+
/** 行の数。既定は 24。 */
|
|
114
|
+
rows?: number;
|
|
115
|
+
/** 描画に使うフォント(CSS の `font-family`)。既定は `monospace`。 */
|
|
116
|
+
fontFamily?: string;
|
|
117
|
+
/** 字の大きさ(CSS ピクセル)。既定は 15(xterm.js と同じ)。 */
|
|
118
|
+
fontSize?: number;
|
|
119
|
+
/** 行の高さ。字の高さに掛ける倍率(xterm.js と同じ)。既定は 1。 */
|
|
120
|
+
lineHeight?: number;
|
|
121
|
+
/** カーソルを点滅させるか。`CSI Ps SP q` で変わる。既定は false。 */
|
|
122
|
+
cursorBlink?: boolean;
|
|
123
|
+
/** スクロールバックの行数。既定は 1000。 */
|
|
124
|
+
scrollback?: number;
|
|
125
|
+
/** テーマ。 */
|
|
126
|
+
theme?: Theme;
|
|
127
|
+
/** ダブルクリックで単語を選ぶときの区切りの字。既定は xterm.js と同じ(空白と ``()[]{}',"`` )。 */
|
|
128
|
+
wordSeparator?: string;
|
|
129
|
+
/**
|
|
130
|
+
* macOS で Option を Meta(ESC の前置き)として送るか。既定は false(xterm.js と同じ。
|
|
131
|
+
* Option は字を打つキーとして扱う)。
|
|
132
|
+
*/
|
|
133
|
+
macOptionIsMeta?: boolean;
|
|
134
|
+
/** キーを打ったとき、さかのぼって見ていたら一番下へ戻すか。既定は true(xterm.js と同じ)。 */
|
|
135
|
+
scrollOnUserInput?: boolean;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* 組み立て終わった通知(kitty の desktop notifications、OSC 99)。
|
|
139
|
+
* 仕様のキーを読んだ形で持つ。OS の通知につなぐのは呼ぶ側。
|
|
140
|
+
*/
|
|
141
|
+
export interface TerminalNotification {
|
|
142
|
+
/** `i`。無ければ空文字列。 */
|
|
143
|
+
id: string;
|
|
144
|
+
/** 題名(`p=title`)。 */
|
|
145
|
+
title: string;
|
|
146
|
+
/** 本文(`p=body`)。 */
|
|
147
|
+
body: string;
|
|
148
|
+
/** 緊急度(`u`)。指定が無ければ `undefined`。 */
|
|
149
|
+
urgency?: 0 | 1 | 2;
|
|
150
|
+
/** 押されたときの動き(`a`)。既定は `{ focus: true, report: false }`。 */
|
|
151
|
+
actions: {
|
|
152
|
+
focus: boolean;
|
|
153
|
+
report: boolean;
|
|
154
|
+
};
|
|
155
|
+
/** いつ出すか(`o`)。 */
|
|
156
|
+
when: "always" | "unfocused" | "invisible";
|
|
157
|
+
/** 閉じられたときに知らせるか(`c=1`)。 */
|
|
158
|
+
reportClose: boolean;
|
|
159
|
+
/** アプリケーションの名前(`f`)。 */
|
|
160
|
+
appName?: string;
|
|
161
|
+
/** 通知の種類(`t`)。 */
|
|
162
|
+
types: string[];
|
|
163
|
+
/** 消えるまでの時間(`w`、ミリ秒。-1 は OS の既定、0 は消えない)。指定が無ければ `undefined`。 */
|
|
164
|
+
timeout?: number;
|
|
165
|
+
/** 音(`s`)。 */
|
|
166
|
+
sound?: string;
|
|
167
|
+
/** アイコンの名前(`n`)。 */
|
|
168
|
+
iconNames: string[];
|
|
169
|
+
/** アイコンの画像を指す ID(`g`)。画像そのものは読まない。 */
|
|
170
|
+
iconCacheId?: string;
|
|
171
|
+
/** ボタンの文字(`p=buttons`)。 */
|
|
172
|
+
buttons: string[];
|
|
173
|
+
}
|
|
174
|
+
/** `p=?` への返事に書く、対応していることの一覧。省いた項目は既定(下記)。 */
|
|
175
|
+
export interface NotificationSupport {
|
|
176
|
+
/** 対応する `a` の値。既定は `["focus", "report"]`。 */
|
|
177
|
+
actions?: string[];
|
|
178
|
+
/** 対応する `o` の値。既定は `["always", "unfocused", "invisible"]`。 */
|
|
179
|
+
when?: string[];
|
|
180
|
+
/** 対応する `p` の値。既定は `["title", "body", "?", "close", "alive"]`。 */
|
|
181
|
+
payloads?: string[];
|
|
182
|
+
/** 対応する `u` の値。既定は `[0, 1, 2]`。 */
|
|
183
|
+
urgencies?: number[];
|
|
184
|
+
/** `c=1` に対応するか。既定は `true`。 */
|
|
185
|
+
closeReport?: boolean;
|
|
186
|
+
/** `w` に対応するか。既定は `false`。 */
|
|
187
|
+
timeout?: boolean;
|
|
188
|
+
/** 対応する `s` の値。既定は無し。 */
|
|
189
|
+
sounds?: string[];
|
|
190
|
+
/** 対応する `t` の値。既定は無し。 */
|
|
191
|
+
types?: string[];
|
|
192
|
+
}
|
|
193
|
+
/** どちらのクリップボードか。 */
|
|
194
|
+
export type ClipboardLocation = "clipboard" | "primary";
|
|
195
|
+
/** クリップボードの、ある MIME の種類のデータ。 */
|
|
196
|
+
export interface ClipboardItem {
|
|
197
|
+
/** MIME の種類(`text/plain` など)。 */
|
|
198
|
+
mime: string;
|
|
199
|
+
/** データ(base64 を戻したあとのバイト列)。 */
|
|
200
|
+
data: Uint8Array;
|
|
201
|
+
}
|
|
202
|
+
/** クリップボードへの書き込み(kitty の clipboard protocol、OSC 5522)。 */
|
|
203
|
+
export interface ClipboardWriteRequest {
|
|
204
|
+
/** `id`。無ければ空文字列。`replyClipboardWrite` に渡す。 */
|
|
205
|
+
id: string;
|
|
206
|
+
/** 書き込み先。 */
|
|
207
|
+
location: ClipboardLocation;
|
|
208
|
+
/** MIME の種類ごとのデータ。別名(`walias`)は、別名ごとの項目に広げてある。 */
|
|
209
|
+
items: ClipboardItem[];
|
|
210
|
+
}
|
|
211
|
+
/** クリップボードの読み取りの頼み(OSC 5522 の `type=read`)。 */
|
|
212
|
+
export interface ClipboardReadRequest {
|
|
213
|
+
/** `id`。無ければ空文字列。答えに渡す。 */
|
|
214
|
+
id: string;
|
|
215
|
+
/** 読む先。 */
|
|
216
|
+
location: ClipboardLocation;
|
|
217
|
+
/** 真なら、あるデータの種類の一覧がほしい(`mimes` は空)。許可を求めなくてよい(仕様)。 */
|
|
218
|
+
list: boolean;
|
|
219
|
+
/** 頼まれた MIME の種類(先に書いたものほど優先)。 */
|
|
220
|
+
mimes: string[];
|
|
221
|
+
}
|
|
222
|
+
/** 書き込みの答え。`DONE` は成功。 */
|
|
223
|
+
export type ClipboardWriteStatus = "DONE" | "EIO" | "EINVAL" | "ENOSYS" | "EPERM" | "EBUSY" | "EFBIG";
|
|
224
|
+
/** 読み取りを断る・失敗を知らせる答え。 */
|
|
225
|
+
export type ClipboardReadError = "ENOSYS" | "EPERM" | "EBUSY";
|
|
226
|
+
/** ドロップやドラッグの操作。 */
|
|
227
|
+
export type DndOperation = "copy" | "move";
|
|
228
|
+
/** 許す操作の組。 */
|
|
229
|
+
export interface DndOperations {
|
|
230
|
+
copy?: boolean;
|
|
231
|
+
move?: boolean;
|
|
232
|
+
}
|
|
233
|
+
/** ドラッグの位置(kitty の drag and drop protocol)。セルは左上が (0, 0)、画素は左上からのずれ。 */
|
|
234
|
+
export interface DndLocation {
|
|
235
|
+
x: number;
|
|
236
|
+
y: number;
|
|
237
|
+
pixelX: number;
|
|
238
|
+
pixelY: number;
|
|
239
|
+
}
|
|
240
|
+
/** ターミナルが答えるエラーの、POSIX の記号名。知らない値は `EIO`。 */
|
|
241
|
+
export type DndErrorName = "ENOENT" | "EINVAL" | "EUNKNOWN" | "EPERM" | "EIO" | "EMFILE" | "ENOMEM" | "EFBIG";
|
|
242
|
+
/** ドロップされたデータの頼み(`DropRequestEvent`)。鍵は仕様の `x`・`y`・`Y`。 */
|
|
243
|
+
export type DropRequest =
|
|
244
|
+
/** `t=r:x=idx`: 落とされた一覧の `index` 番目(1 始まり)の MIME の種類のデータ。 */
|
|
245
|
+
{
|
|
246
|
+
type: "data";
|
|
247
|
+
index: number;
|
|
248
|
+
}
|
|
249
|
+
/** `t=r:x=idx:y=subidx`: `text/uri-list`(`index` 番目の種類)の `subIndex` 番目の項目。遠くの機械からのドロップ。 */
|
|
250
|
+
| {
|
|
251
|
+
type: "entry";
|
|
252
|
+
index: number;
|
|
253
|
+
subIndex: number;
|
|
254
|
+
}
|
|
255
|
+
/** `t=r:Y=handle:x=num`: ディレクトリ(`handle`)の `index` 番目(1 始まり)の項目。 */
|
|
256
|
+
| {
|
|
257
|
+
type: "dirEntry";
|
|
258
|
+
handle: number;
|
|
259
|
+
index: number;
|
|
260
|
+
}
|
|
261
|
+
/** `t=r:Y=handle`: ディレクトリを読み終えた。`handle` を捨ててよい。答えは要らない。 */
|
|
262
|
+
| {
|
|
263
|
+
type: "dirClose";
|
|
264
|
+
handle: number;
|
|
265
|
+
};
|
|
266
|
+
/** ドロップのデータの答えの形(`X` 鍵)。 */
|
|
267
|
+
export type DropDataForm =
|
|
268
|
+
/** MIME の種類のデータ。`remote` は、送り元がプログラムとは別の機械か(`text/uri-list` の答えにだけ付ける)。 */
|
|
269
|
+
{
|
|
270
|
+
kind: "mime";
|
|
271
|
+
remote?: boolean;
|
|
272
|
+
}
|
|
273
|
+
/** 普通のファイルの中身。 */
|
|
274
|
+
| {
|
|
275
|
+
kind: "file";
|
|
276
|
+
}
|
|
277
|
+
/** シンボリックリンク。データはリンク先。 */
|
|
278
|
+
| {
|
|
279
|
+
kind: "symlink";
|
|
280
|
+
}
|
|
281
|
+
/** ディレクトリ。データは、中の項目を NUL で区切った一覧。`handle` は 0 と 1 以外。 */
|
|
282
|
+
| {
|
|
283
|
+
kind: "directory";
|
|
284
|
+
handle: number;
|
|
285
|
+
};
|
|
286
|
+
/** ドラッグの画像(サムネイル)。 */
|
|
287
|
+
export interface DragImage {
|
|
288
|
+
/** 形式。`text` は UTF-8 のテキストで、ターミナルが描く。 */
|
|
289
|
+
format: "rgb" | "rgba" | "png" | "text";
|
|
290
|
+
/** 幅(画素)。`text` では、文字の大きさの割合の分子(`基本の大きさ * width / height`)。 */
|
|
291
|
+
width: number;
|
|
292
|
+
/** 高さ(画素)。`text` では、同じ割合の分母。 */
|
|
293
|
+
height: number;
|
|
294
|
+
/** 背景の不透明度(0 から 1024)。`text` のときだけ意味がある。 */
|
|
295
|
+
opacity: number;
|
|
296
|
+
/** 画像のデータ(base64 を戻したあと)。 */
|
|
297
|
+
data: Uint8Array;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* kitty の drag and drop protocol(OSC 72)のイベント。`onDnd` で受ける。
|
|
301
|
+
*
|
|
302
|
+
* ドロップを受ける側:
|
|
303
|
+
* - `dropEnabled` / `dropDisabled`: プログラムがドロップを受け付ける・やめた。ドロップの途中でやめたら、先に `dropFinished`(`operation` が null)が来る。
|
|
304
|
+
* - `dropResponse`: ドラッグが窓の上にある間のプログラムの答え。OS に、受けるか・どの操作かを伝える。
|
|
305
|
+
* - `dropRequest`: ドロップされたデータの頼み。`replyDropData` か `replyDropError` で答える。
|
|
306
|
+
* - `dropFinished`: プログラムがドロップを読み終えた。OS にドロップの完了を伝える。`operation` が null なら取り消し。
|
|
307
|
+
*
|
|
308
|
+
* ドラッグを始める側:
|
|
309
|
+
* - `dragEnabled` / `dragDisabled`: プログラムがドラッグを始められると言った・やめた。
|
|
310
|
+
* - `dragStart`: ドラッグを始める求め。OS のドラッグを始め、`dragStarted` か `dragError` で答える。
|
|
311
|
+
* - `dragImage`: ドラッグの画像を変える。`index` が null なら外す(範囲外の番号も null にそろえてある)。
|
|
312
|
+
* - `dragData` / `dragDataError`: `requestDragData` で頼んだ MIME の種類(0 始まり)のデータ・エラー。分けて届いたデータは、終わり(空のパケット)でそろえて 1 回だけ来る。
|
|
313
|
+
* - `dragEntry`: 遠くの機械へのドラッグで、`requestDragEntry` で頼んだ項目のデータ。
|
|
314
|
+
* - `dragCanceled` / `dragAborted`: プログラムがドラッグを取り消した・エラーで止めた。
|
|
315
|
+
*/
|
|
316
|
+
export type DndEvent = {
|
|
317
|
+
type: "dropEnabled";
|
|
318
|
+
mimes: string[];
|
|
319
|
+
} | {
|
|
320
|
+
type: "dropDisabled";
|
|
321
|
+
} | {
|
|
322
|
+
type: "dropResponse";
|
|
323
|
+
operation: DndOperation | null;
|
|
324
|
+
/** 受けたい MIME の種類(好む順)。null は、一覧を変えない。 */
|
|
325
|
+
mimes: string[] | null;
|
|
326
|
+
} | {
|
|
327
|
+
type: "dropRequest";
|
|
328
|
+
request: DropRequest;
|
|
329
|
+
} | {
|
|
330
|
+
type: "dropFinished";
|
|
331
|
+
operation: DndOperation | null;
|
|
332
|
+
} | {
|
|
333
|
+
type: "dragEnabled";
|
|
334
|
+
machineId: string | null;
|
|
335
|
+
} | {
|
|
336
|
+
type: "dragDisabled";
|
|
337
|
+
} | {
|
|
338
|
+
type: "dragStart";
|
|
339
|
+
/** プログラムが許す操作。 */
|
|
340
|
+
operations: {
|
|
341
|
+
copy: boolean;
|
|
342
|
+
move: boolean;
|
|
343
|
+
};
|
|
344
|
+
/** 申し出た MIME の種類(順番が番号になる)。 */
|
|
345
|
+
mimes: string[];
|
|
346
|
+
/** 先に送られたデータ。`mimes` と同じ並びで、送られていないものは null。 */
|
|
347
|
+
data: (Uint8Array | null)[];
|
|
348
|
+
images: DragImage[];
|
|
349
|
+
/** 始めるときに使う画像の番号(0 始まり)。無ければ null。 */
|
|
350
|
+
image: number | null;
|
|
351
|
+
/** プログラムの機械の ID。 */
|
|
352
|
+
machineId: string | null;
|
|
353
|
+
} | {
|
|
354
|
+
type: "dragImage";
|
|
355
|
+
index: number | null;
|
|
356
|
+
} | {
|
|
357
|
+
type: "dragData";
|
|
358
|
+
index: number;
|
|
359
|
+
data: Uint8Array;
|
|
360
|
+
} | {
|
|
361
|
+
type: "dragDataError";
|
|
362
|
+
index: number;
|
|
363
|
+
error: string;
|
|
364
|
+
description: string;
|
|
365
|
+
} | {
|
|
366
|
+
type: "dragEntry";
|
|
367
|
+
/** `text/uri-list` の中の番号(1 始まり)。 */
|
|
368
|
+
index: number;
|
|
369
|
+
/** ディレクトリの中の番号(1 始まり)。トップの項目なら 0。 */
|
|
370
|
+
subIndex: number;
|
|
371
|
+
/** 親のディレクトリの handle。トップの項目なら 0。 */
|
|
372
|
+
parent: number;
|
|
373
|
+
form: "file" | "symlink" | "directory";
|
|
374
|
+
/** `form` が `directory` のときの handle。 */
|
|
375
|
+
handle: number;
|
|
376
|
+
data: Uint8Array;
|
|
377
|
+
} | {
|
|
378
|
+
type: "dragCanceled";
|
|
379
|
+
} | {
|
|
380
|
+
type: "dragAborted";
|
|
381
|
+
error: string;
|
|
382
|
+
description: string;
|
|
383
|
+
};
|
|
384
|
+
/** ファイル転送のセッションの始まり(`send` と `receive`)。 */
|
|
385
|
+
export interface FileTransferStart {
|
|
386
|
+
/** セッションの `id`。答えに渡す。 */
|
|
387
|
+
id: string;
|
|
388
|
+
/** `pw` を戻した文字列(仕様では `sha256:<hash>`)。比べるのは呼ぶ側。無ければ `null`。 */
|
|
389
|
+
bypass: string | null;
|
|
390
|
+
/** `q`。0 は全部返す、1 はエラーだけ、2 は何も返さない。省くのは coneko-term がする。 */
|
|
391
|
+
quiet: 0 | 1 | 2;
|
|
392
|
+
/** `sz`。`receive` が頼むパスの数。 */
|
|
393
|
+
paths: number | null;
|
|
394
|
+
}
|
|
395
|
+
/** ファイルの種類。 */
|
|
396
|
+
export type FileTransferFileType = "regular" | "directory" | "symlink" | "link";
|
|
397
|
+
/** ファイル転送のエラーの記号名。知らない値は `EIO`。 */
|
|
398
|
+
export type FileTransferErrorName = "EPERM" | "ENOENT" | "EEXIST" | "EISDIR" | "ENOTDIR" | "EACCES" | "EINVAL" | "EIO" | "EFBIG" | "ENOSPC";
|
|
399
|
+
/**
|
|
400
|
+
* kitty の file transfer protocol(OSC 5113)で、クライアントが送った命令。`onFileTransfer` で受ける。
|
|
401
|
+
* データの圧縮(`compression: "zlib"`)と rsync の署名・差分は読み解かず、バイト列のまま渡す。
|
|
402
|
+
*/
|
|
403
|
+
export type FileTransferEvent =
|
|
404
|
+
/** `ac=send`: ファイルを送りたい。`replyFileTransferOk` か `refuseFileTransfer` で答える。 */
|
|
405
|
+
({
|
|
406
|
+
type: "send";
|
|
407
|
+
} & FileTransferStart)
|
|
408
|
+
/** `ac=receive`: ファイルを受け取りたい。答え方は `send` と同じ。 */
|
|
409
|
+
| ({
|
|
410
|
+
type: "receive";
|
|
411
|
+
} & FileTransferStart)
|
|
412
|
+
/** `ac=file`: 送るファイルの情報、または受け取るパスの頼み。 */
|
|
413
|
+
| {
|
|
414
|
+
type: "file";
|
|
415
|
+
id: string;
|
|
416
|
+
fileId: string;
|
|
417
|
+
/** 戻したパス(UTF-8。`~/` はホームからの相対)。coneko-term は検査しない。 */
|
|
418
|
+
name: string;
|
|
419
|
+
fileType: FileTransferFileType;
|
|
420
|
+
compression: "none" | "zlib";
|
|
421
|
+
transmission: "simple" | "rsync";
|
|
422
|
+
/** 更新時刻(ナノ秒)。指定なしは `null`。 */
|
|
423
|
+
mtime: bigint | null;
|
|
424
|
+
permissions: number | null;
|
|
425
|
+
size: number | null;
|
|
426
|
+
parent: string | null;
|
|
427
|
+
}
|
|
428
|
+
/** `ac=data` と `ac=end_data`(`end` が真)。 */
|
|
429
|
+
| {
|
|
430
|
+
type: "data";
|
|
431
|
+
id: string;
|
|
432
|
+
fileId: string;
|
|
433
|
+
data: Uint8Array;
|
|
434
|
+
end: boolean;
|
|
435
|
+
}
|
|
436
|
+
/** `ac=finish`: クライアントがセッションを閉じた。 */
|
|
437
|
+
| {
|
|
438
|
+
type: "finish";
|
|
439
|
+
id: string;
|
|
440
|
+
}
|
|
441
|
+
/** `ac=cancel`: クライアントが取り消した。`replyFileTransferCanceled` で答える。 */
|
|
442
|
+
| {
|
|
443
|
+
type: "cancel";
|
|
444
|
+
id: string;
|
|
445
|
+
};
|
|
446
|
+
/** 受け取りの一覧の 1 項目。 */
|
|
447
|
+
export interface FileTransferListing {
|
|
448
|
+
/** クライアントの頼み(`file`)の `fileId`。ディレクトリを広げた項目も、頼みと同じ値。 */
|
|
449
|
+
requestId: string;
|
|
450
|
+
/** この項目自身の `fid`。 */
|
|
451
|
+
entryId: string;
|
|
452
|
+
/** 絶対パス。 */
|
|
453
|
+
name: string;
|
|
454
|
+
fileType: FileTransferFileType;
|
|
455
|
+
mtime?: bigint;
|
|
456
|
+
permissions?: number;
|
|
457
|
+
size?: number;
|
|
458
|
+
/** 入っているディレクトリの `entryId`。 */
|
|
459
|
+
parent?: string;
|
|
460
|
+
/** リンクの先(一覧にある先なら、その `entryId` の UTF-8。シンボリックリンクで一覧に無ければ、先のパス)。 */
|
|
461
|
+
data?: Uint8Array;
|
|
462
|
+
}
|
|
463
|
+
/** カーソルの状態。 */
|
|
464
|
+
export interface CursorState {
|
|
465
|
+
x: number;
|
|
466
|
+
y: number;
|
|
467
|
+
visible: boolean;
|
|
468
|
+
blinking: boolean;
|
|
469
|
+
shape: "block" | "underline" | "bar";
|
|
470
|
+
}
|
|
471
|
+
/** 追加のカーソル(位置と形)。 */
|
|
472
|
+
export interface ExtraCursorState {
|
|
473
|
+
x: number;
|
|
474
|
+
y: number;
|
|
475
|
+
shape: "block" | "underline" | "bar";
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* 1 行ぶんのセル。`cells` は WASM のメモリの上の見え方で、次に `readRow` などを呼ぶか
|
|
479
|
+
* 書き込みで画面が変わるまでしか使えない。セルの並びは `CELL_STRIDE` 個ずつ:
|
|
480
|
+
* 字、幅、前景色、背景色、属性と下線の形、下線の色、複数のセルにまたがる字の印。
|
|
481
|
+
* 複数のセルにまたがる字のセルは、字が 0、幅が 1。印は、下位 16 ビットが `sized` の番号 + 1
|
|
482
|
+
* (0 ならそうではない)、ビット 16 から 23 が四角の左上から右へ何セル目か、ビット 24 から 31 が
|
|
483
|
+
* 下へ何セル目か。
|
|
484
|
+
*/
|
|
485
|
+
export interface RowView {
|
|
486
|
+
/** セルの数。 */
|
|
487
|
+
readonly length: number;
|
|
488
|
+
/** `length * CELL_STRIDE` 個の値。 */
|
|
489
|
+
readonly cells: Uint32Array;
|
|
490
|
+
/** 次の行へ折り返されているか。 */
|
|
491
|
+
readonly wrapped: boolean;
|
|
492
|
+
/** `CLUSTER_FLAG` つきの字の番号から、書記素を引く。 */
|
|
493
|
+
cluster(index: number): string;
|
|
494
|
+
/**
|
|
495
|
+
* 複数のセルにまたがる字(OSC 66)の四角。番号は、セルの並びの 6 番目の下位 16 ビットから 1 を引いたもの。
|
|
496
|
+
*/
|
|
497
|
+
sized(index: number): SizedInfo;
|
|
498
|
+
}
|
|
499
|
+
/** 複数のセルにまたがる字(kitty の text sizing、OSC 66)の四角。 */
|
|
500
|
+
export interface SizedInfo {
|
|
501
|
+
/** 字。 */
|
|
502
|
+
readonly text: string;
|
|
503
|
+
/** 四角の幅(セルの数)。 */
|
|
504
|
+
readonly cols: number;
|
|
505
|
+
/** 大きさ `s`。四角の高さ(セルの数)でもある。 */
|
|
506
|
+
readonly scale: number;
|
|
507
|
+
/** 分数の大きさの分子。 */
|
|
508
|
+
readonly numerator: number;
|
|
509
|
+
/** 分数の大きさの分母(0 なら分数の大きさは無い)。 */
|
|
510
|
+
readonly denominator: number;
|
|
511
|
+
/** 縦の寄せ方(0 上、1 下、2 中央)。分数の大きさのときだけ効く。 */
|
|
512
|
+
readonly vertical: number;
|
|
513
|
+
/** 横の寄せ方(0 左、1 右、2 中央)。分数の大きさのときだけ効く。 */
|
|
514
|
+
readonly horizontal: number;
|
|
515
|
+
}
|
|
516
|
+
/**
|
|
517
|
+
* ターミナル。VT のバイト列を `write` で受け、画面の中身を持つ。DOM を使わないので
|
|
518
|
+
* Node.js でも動く(`open` を呼ぶまで DOM に触らない)。`open` すると Canvas 2D で描く。
|
|
519
|
+
*
|
|
520
|
+
* 使う前に `init()` を呼ぶこと。
|
|
521
|
+
*/
|
|
522
|
+
export declare class Terminal {
|
|
523
|
+
readonly options: Readonly<TerminalOptions>;
|
|
524
|
+
private resolvedTheme;
|
|
525
|
+
private renderer?;
|
|
526
|
+
private scrollbar?;
|
|
527
|
+
private focused;
|
|
528
|
+
/** 画面の一番下から何行さかのぼって見ているか。0 なら一番下。 */
|
|
529
|
+
private viewOffset;
|
|
530
|
+
private lastScrollback;
|
|
531
|
+
private scrollListeners;
|
|
532
|
+
private cellSizeListeners;
|
|
533
|
+
private wasm;
|
|
534
|
+
private selectionColor;
|
|
535
|
+
/** `theme.selectionBackground` で決めた選択範囲の色(プログラムが OSC 21 で変える前の色)。 */
|
|
536
|
+
private configuredSelection;
|
|
537
|
+
/** プログラムが OSC で変えた 256 色の表と、カーソルの下の字の色(変えていなければ `undefined`)。`open` の前の変更も、ここに残って最初の描画に入る。 */
|
|
538
|
+
private colorTable?;
|
|
539
|
+
private cursorTextColor?;
|
|
540
|
+
private selection;
|
|
541
|
+
private selectionListeners;
|
|
542
|
+
private lastSelectionKey;
|
|
543
|
+
private lastTrimmed;
|
|
544
|
+
private lastAlt;
|
|
545
|
+
/** 押してから離すまで、マウスのイベントを受け持つもの。 */
|
|
546
|
+
private mouseOwner?;
|
|
547
|
+
private reportButton;
|
|
548
|
+
private wheelPartial;
|
|
549
|
+
/** `dispose` のあとに触ると、分かりやすい例外にする。 */
|
|
550
|
+
private get core();
|
|
551
|
+
private queue;
|
|
552
|
+
private pumping;
|
|
553
|
+
private disposed;
|
|
554
|
+
private dataListeners;
|
|
555
|
+
private titleListeners;
|
|
556
|
+
private bellListeners;
|
|
557
|
+
private notificationListeners;
|
|
558
|
+
private notificationCloseListeners;
|
|
559
|
+
private notificationQueryListeners;
|
|
560
|
+
private notificationAliveListeners;
|
|
561
|
+
private clipboardWriteListeners;
|
|
562
|
+
private clipboardReadListeners;
|
|
563
|
+
private dndListeners;
|
|
564
|
+
private fileTransferListeners;
|
|
565
|
+
private programStatusListeners;
|
|
566
|
+
private oscHandlers;
|
|
567
|
+
private element?;
|
|
568
|
+
private cleanups;
|
|
569
|
+
private textarea?;
|
|
570
|
+
private composition?;
|
|
571
|
+
private customKeyHandler?;
|
|
572
|
+
private decoder;
|
|
573
|
+
private encoder;
|
|
574
|
+
constructor(options?: TerminalOptions);
|
|
575
|
+
private selectionHost;
|
|
576
|
+
private get wordSeparator();
|
|
577
|
+
private applyTheme;
|
|
578
|
+
private get fontFamily();
|
|
579
|
+
private get fontSize();
|
|
580
|
+
/** 列の数。 */
|
|
581
|
+
get cols(): number;
|
|
582
|
+
/** 行の数。 */
|
|
583
|
+
get rows(): number;
|
|
584
|
+
/** スクロールバックに入っている行の数。 */
|
|
585
|
+
get scrollbackLength(): number;
|
|
586
|
+
/** カーソルの状態。 */
|
|
587
|
+
get cursor(): CursorState;
|
|
588
|
+
/**
|
|
589
|
+
* 追加のカーソル(kitty の multiple cursors protocol)。上の行から、左の列の順。
|
|
590
|
+
* `shape` は、主のカーソルに従うものも、いまの主のカーソルの形にしてある。
|
|
591
|
+
*/
|
|
592
|
+
get extraCursors(): ExtraCursorState[];
|
|
593
|
+
/** 追加のカーソルの `[x, y, 形]` の並び(描画が使う。形は 3 が主のカーソルに従う)。 */
|
|
594
|
+
readExtraCursors(): Uint32Array;
|
|
595
|
+
/** 追加のカーソルの色の語 `[字の色, カーソルの色]`(描画が使う。上位 8 ビットが 0 主のカーソルと同じ、1 パレット、2 RGB、3 反転)。 */
|
|
596
|
+
readExtraCursorColors(): Uint32Array;
|
|
597
|
+
/** 代替画面にいるか。 */
|
|
598
|
+
get isAlternateScreen(): boolean;
|
|
599
|
+
/** bracketed paste(2004)が有効か。`paste` が使う。 */
|
|
600
|
+
get bracketedPaste(): boolean;
|
|
601
|
+
/**
|
|
602
|
+
* kitty keyboard protocol のいまのフラグ(アプリが `CSI > u` などで決める)。
|
|
603
|
+
* ビットは 1 disambiguate、2 report event types、4 report alternate keys、
|
|
604
|
+
* 8 report all keys as escape codes、16 report associated text。
|
|
605
|
+
*/
|
|
606
|
+
get keyboardFlags(): number;
|
|
607
|
+
/** アプリケーションカーソルキー(DECCKM)か。矢印・Home・End の送り方が変わる。 */
|
|
608
|
+
get applicationCursorKeys(): boolean;
|
|
609
|
+
/**
|
|
610
|
+
* データを書く。文字列は UTF-8 にする。大きなデータは小分けにして処理し、間でブラウザーに
|
|
611
|
+
* 制御を返す。処理は呼んだ順に行い、このデータを処理し終えたら `done` を呼ぶ。
|
|
612
|
+
* `write` から戻った時点では、まだ画面に反映されていない。
|
|
613
|
+
*/
|
|
614
|
+
write(data: string | Uint8Array, done?: () => void): void;
|
|
615
|
+
private pump;
|
|
616
|
+
private guard;
|
|
617
|
+
/**
|
|
618
|
+
* プログラムが OSC 4・10・11・12・21 などで色を変えていたら、描画の色の表を作り直す。
|
|
619
|
+
* 選択範囲の背景は、字が見えるように設定済みの色と同じ透明度(`4d`)にする。
|
|
620
|
+
*/
|
|
621
|
+
private syncColors;
|
|
622
|
+
/** PTY へ送るバイト列とイベントを、聞き手に渡す。 */
|
|
623
|
+
private flush;
|
|
624
|
+
/**
|
|
625
|
+
* キーボードやマウスなどの入力を、返事と同じ出口(`onData`)から出す。
|
|
626
|
+
* 文字列は UTF-8 にする。
|
|
627
|
+
*/
|
|
628
|
+
input(data: string | Uint8Array): void;
|
|
629
|
+
/**
|
|
630
|
+
* ユーザーの入力(キー・変換の確定・貼り付け)を出口から出す。`scrollOnUserInput` が false でなく、
|
|
631
|
+
* さかのぼって見ていたら、一番下へ戻す。
|
|
632
|
+
*/
|
|
633
|
+
private sendUserInput;
|
|
634
|
+
/**
|
|
635
|
+
* 貼り付ける。改行は `\r` にそろえ(xterm.js と同じ)、bracketed paste(2004)が有効なら
|
|
636
|
+
* `ESC [200~` と `ESC [201~` で囲んで、出口から出す。`paste` イベントも、これを呼ぶ。
|
|
637
|
+
*/
|
|
638
|
+
paste(text: string): void;
|
|
639
|
+
/**
|
|
640
|
+
* キーのイベントを、ターミナルより先に見るハンドラー(xterm.js の `attachCustomKeyEventHandler`)。
|
|
641
|
+
* `false` を返したキーは、ターミナルが処理しない。外すには `undefined`。
|
|
642
|
+
*/
|
|
643
|
+
attachCustomKeyEventHandler(handler: ((ev: KeyboardEvent) => boolean) | undefined): void;
|
|
644
|
+
/**
|
|
645
|
+
* PTY へ送るバイト列の出口。問い合わせへの返事(DSR など)と、`input` に渡したものが出る。
|
|
646
|
+
* 渡す `Uint8Array` は聞き手のもの(コピー済み)。
|
|
647
|
+
*/
|
|
648
|
+
onData(listener: (data: Uint8Array) => void): Disposable;
|
|
649
|
+
/** 題名が変わった(OSC 0、OSC 2)。 */
|
|
650
|
+
onTitleChange(listener: (title: string) => void): Disposable;
|
|
651
|
+
/** BEL が来た。 */
|
|
652
|
+
onBell(listener: () => void): Disposable;
|
|
653
|
+
/**
|
|
654
|
+
* 通知(kitty の desktop notifications、OSC 99)がそろった。分けて送られた通知は、
|
|
655
|
+
* そろった時点で 1 回だけ呼ぶ。OS の通知を出すのは呼ぶ側。聞き手がいなければ何もしない。
|
|
656
|
+
*/
|
|
657
|
+
onNotification(listener: (n: TerminalNotification) => void): Disposable;
|
|
658
|
+
/**
|
|
659
|
+
* プログラムが自分の状態(kitty の Program Status Protocol、OSC 7501)を報告し、記録が変わった、または
|
|
660
|
+
* 消えた。何をどう見せるかは呼ぶ側が決める。消えるのは、`state=clear`、RIS、新しいシェルのプロンプト
|
|
661
|
+
* (OSC 133 の `A`。working・blocked・idle)、窓がフォーカスを得たこととキーを押したこと(done・error)、
|
|
662
|
+
* 記録の数の上限(256)のとき。プロセスの終了は端末の外のことなので、`programStatusProcessExited` で知らせる。
|
|
663
|
+
*/
|
|
664
|
+
onProgramStatus(listener: (c: ProgramStatusChange) => void): Disposable;
|
|
665
|
+
/** いま持っている状態の記録。更新が古い順。 */
|
|
666
|
+
get programStatus(): ProgramStatus[];
|
|
667
|
+
/** 端末につないだプロセスが終わったことを知らせる。動いている・待っている状態の記録(working・blocked・idle)を消す。 */
|
|
668
|
+
programStatusProcessExited(): void;
|
|
669
|
+
/** アプリケーションが通知を閉じるよう求めた(`p=close`)。`id` は `i`。 */
|
|
670
|
+
onNotificationClose(listener: (id: string) => void): Disposable;
|
|
671
|
+
/**
|
|
672
|
+
* アプリケーションが対応を尋ねた(`p=?`)。`replyNotificationQuery` で答える。
|
|
673
|
+
* `id` は `i`(無ければ空文字列)。
|
|
674
|
+
*/
|
|
675
|
+
onNotificationQuery(listener: (id: string) => void): Disposable;
|
|
676
|
+
/**
|
|
677
|
+
* アプリケーションが生きている通知を尋ねた(`p=alive`)。`replyNotificationAlive` で答える。
|
|
678
|
+
*/
|
|
679
|
+
onNotificationAlive(listener: (id: string) => void): Disposable;
|
|
680
|
+
/**
|
|
681
|
+
* 通知が押されたことをアプリケーションへ返す(`onData` から出る)。通知の `actions.report` が
|
|
682
|
+
* 真のときだけ呼ぶ。`button` はボタンを押したときの番号(1 始まり)。`id` が空なら `i=0` で送る(仕様)。
|
|
683
|
+
*/
|
|
684
|
+
notificationActivated(id: string, button?: number): void;
|
|
685
|
+
/** 通知が閉じられたことを返す。通知の `reportClose` が真のときだけ呼ぶ。 */
|
|
686
|
+
notificationClosed(id: string): void;
|
|
687
|
+
/** `p=?` の問い合わせ(`onNotificationQuery`)に答える。 */
|
|
688
|
+
replyNotificationQuery(id: string, support?: NotificationSupport): void;
|
|
689
|
+
/** `p=alive` の問い合わせ(`onNotificationAlive`)に答える。`ids` はまだ生きている通知の `i`。 */
|
|
690
|
+
replyNotificationAlive(id: string, ids: string[]): void;
|
|
691
|
+
/**
|
|
692
|
+
* クリップボードへの書き込み(kitty の clipboard protocol、OSC 5522)がそろった。分けて
|
|
693
|
+
* 送られたデータは、そろった時点で 1 回だけ呼ぶ。OS のクリップボードに書くかどうかは呼ぶ側が決め、
|
|
694
|
+
* どちらにしても `replyClipboardWrite` で答える。聞き手がいなければ、`EPERM` で答える。
|
|
695
|
+
*/
|
|
696
|
+
onClipboardWrite(listener: (r: ClipboardWriteRequest) => void): Disposable;
|
|
697
|
+
/**
|
|
698
|
+
* クリップボードの読み取りの頼み(OSC 5522 の `type=read`)が来た。読ませるかどうかは呼ぶ側が決め、
|
|
699
|
+
* `replyClipboardReadTypes`・`replyClipboardReadData`・`replyClipboardReadError` のどれかで答える。
|
|
700
|
+
* 聞き手がいなければ、`EPERM`(許されない)で答える。
|
|
701
|
+
*/
|
|
702
|
+
onClipboardRead(listener: (r: ClipboardReadRequest) => void): Disposable;
|
|
703
|
+
/** 書き込み(`onClipboardWrite`)に答える。`status` の既定は成功(`DONE`)。 */
|
|
704
|
+
replyClipboardWrite(id: string, status?: ClipboardWriteStatus): void;
|
|
705
|
+
/** 種類の一覧の頼み(`list` が真)に答える。`mimes` が空なら、データの無い OK と DONE だけを返す。 */
|
|
706
|
+
replyClipboardReadTypes(id: string, mimes: string[]): void;
|
|
707
|
+
/**
|
|
708
|
+
* データの頼みに答える。`items` は、頼まれた種類のうち渡せるもの。空なら、データの無い OK と DONE だけを返す。
|
|
709
|
+
* 4096 バイトごとのパケットに分けて送る。
|
|
710
|
+
*/
|
|
711
|
+
replyClipboardReadData(id: string, items: ClipboardItem[]): void;
|
|
712
|
+
/** 読み取りの頼みを断る・失敗を知らせる。読ませないなら `EPERM`。 */
|
|
713
|
+
replyClipboardReadError(id: string, error: ClipboardReadError): void;
|
|
714
|
+
/**
|
|
715
|
+
* kitty の drag and drop protocol(OSC 72)のイベントを受ける。種類は `DndEvent` を見ること。
|
|
716
|
+
* OS のドラッグとドロップにつなぐのは呼ぶ側の仕事。聞き手がいないとき、ドロップされたデータの
|
|
717
|
+
* 頼みには `EPERM` で、ドラッグを始める求めにも `EPERM` で答える。
|
|
718
|
+
*/
|
|
719
|
+
onDnd(listener: (e: DndEvent) => void): Disposable;
|
|
720
|
+
/**
|
|
721
|
+
* kitty の file transfer protocol(OSC 5113)の、クライアントからの命令を受ける。種類は
|
|
722
|
+
* `FileTransferEvent` を見ること。許すかどうかと、OS のファイルの読み書きは呼ぶ側の仕事で、
|
|
723
|
+
* `replyFileTransfer*`・`refuseFileTransfer` で答える。聞き手がいないとき、`send` と `receive` には
|
|
724
|
+
* `EPERM`(断る)で、`cancel` には `CANCELED` で答える。
|
|
725
|
+
*/
|
|
726
|
+
onFileTransfer(listener: (e: FileTransferEvent) => void): Disposable;
|
|
727
|
+
/**
|
|
728
|
+
* 成功の知らせ(`status=OK`)。セッションの始まり(`send`・`receive`)を許すときは `id` だけ。
|
|
729
|
+
* ディレクトリの受け付けと、`end_data` のあとの完了は `fileId`(完了には `size` に書いたバイト数)。
|
|
730
|
+
* 受け取りの一覧を並べ終えたら、`name` にホームディレクトリを付ける。`q` に従って省くことがある。
|
|
731
|
+
*/
|
|
732
|
+
replyFileTransferOk(id: string, opts?: {
|
|
733
|
+
fileId?: string;
|
|
734
|
+
size?: number;
|
|
735
|
+
name?: string;
|
|
736
|
+
}): void;
|
|
737
|
+
/** ファイルを受け付けた(`status=STARTED`)。`rsync` は、署名を送れるとき。 */
|
|
738
|
+
replyFileTransferStarted(id: string, fileId: string, rsync?: boolean): void;
|
|
739
|
+
/** データを書いた(`status=PROGRESS`)。`written` はここまでに書いたバイト数。 */
|
|
740
|
+
replyFileTransferProgress(id: string, fileId: string, written: number): void;
|
|
741
|
+
/** エラーで答える。`fileId` を省くと、セッション全体のエラー。 */
|
|
742
|
+
replyFileTransferError(id: string, error: FileTransferErrorName, opts?: {
|
|
743
|
+
fileId?: string;
|
|
744
|
+
message?: string;
|
|
745
|
+
}): void;
|
|
746
|
+
/** セッションの始まりを断る(`EPERM`)。 */
|
|
747
|
+
refuseFileTransfer(id: string): void;
|
|
748
|
+
/** 取り消し(`cancel`)に答える(`status=CANCELED`)。 */
|
|
749
|
+
replyFileTransferCanceled(id: string): void;
|
|
750
|
+
/** 受け取りの一覧に項目を足す。全部並べたら `replyFileTransferOk(id, { name: ホーム })` で終える。 */
|
|
751
|
+
replyFileTransferListing(id: string, entry: FileTransferListing): void;
|
|
752
|
+
/**
|
|
753
|
+
* 受け取るファイルのデータを送る。4096 バイトごとのパケットに分ける。`end` が真なら最後を
|
|
754
|
+
* `end_data` にする(`data` が空でも送る)。圧縮や rsync の差分は、作ったバイト列をそのまま渡す。
|
|
755
|
+
*/
|
|
756
|
+
replyFileTransferData(id: string, fileId: string, data: Uint8Array, end?: boolean): void;
|
|
757
|
+
/** プログラムがドロップを受け付けると言っているか。偽の間、`dropMove` などは何もしない。 */
|
|
758
|
+
get dropAccepting(): boolean;
|
|
759
|
+
/** プログラムが受け付けると言った MIME の種類(空でもよい)。 */
|
|
760
|
+
get dropAcceptedMimes(): string[];
|
|
761
|
+
/**
|
|
762
|
+
* プログラムが渡した機械の ID(ドロップ側)。自分の機械の ID と比べて別の機械なら、
|
|
763
|
+
* `text/uri-list` の答えに `remote: true` を付ける。知らない版の ID は別の機械として扱う。
|
|
764
|
+
*/
|
|
765
|
+
get dropMachineId(): string | null;
|
|
766
|
+
/**
|
|
767
|
+
* ドラッグが窓の上を動いた。`mimes` はドラッグされているものの MIME の種類。MIME の一覧は、
|
|
768
|
+
* 最初の移動と変わったときだけ PTY へ付ける。受け付けていないとき・位置が負のときは何もせず、false を返す。
|
|
769
|
+
*/
|
|
770
|
+
dropMove(location: DndLocation, mimes: string[], allowed?: DndOperations): boolean;
|
|
771
|
+
/** ドラッグが窓から出た(位置が -1 の移動を送る)。窓の上に無かったときは何もせず、false を返す。 */
|
|
772
|
+
dropLeave(): boolean;
|
|
773
|
+
/**
|
|
774
|
+
* ドロップされた。`mimes` は落とされたものの MIME の種類で、空ではいけない。`fromThisWindow` は、
|
|
775
|
+
* ドラッグがこの窓から始まったか(真なら、遠くの機械向けのファイルの読み取りを `EPERM` で断る)。
|
|
776
|
+
*/
|
|
777
|
+
dropDrop(location: DndLocation, mimes: string[], allowed?: DndOperations, fromThisWindow?: boolean): boolean;
|
|
778
|
+
/**
|
|
779
|
+
* `dropRequest` に、データで答える。データは全部を一度に渡す。4096 バイトのパケットに分け、
|
|
780
|
+
* 終わりの空のパケットまで送る。
|
|
781
|
+
*/
|
|
782
|
+
replyDropData(request: DropRequest, form: DropDataForm, data: Uint8Array): void;
|
|
783
|
+
/** `dropRequest` に、エラーで答える。`error` は POSIX の記号名。 */
|
|
784
|
+
replyDropError(request: DropRequest, error: DndErrorName, description?: string): void;
|
|
785
|
+
/** プログラムがドラッグを始められると言っているか。 */
|
|
786
|
+
get dragOffersEnabled(): boolean;
|
|
787
|
+
/** プログラムが渡した機械の ID(ドラッグ側)。 */
|
|
788
|
+
get dragMachineId(): string | null;
|
|
789
|
+
/**
|
|
790
|
+
* ドラッグの身振りを見つけた。プログラムへ位置を送り、続く申し出を 1 回だけ受ける。申し出ていない
|
|
791
|
+
* とき・ドラッグの途中のときは何もせず、false を返す。
|
|
792
|
+
*/
|
|
793
|
+
dragGesture(location: DndLocation): boolean;
|
|
794
|
+
/** `dragStart` に答える: OS のドラッグが始まった。 */
|
|
795
|
+
dragStarted(): boolean;
|
|
796
|
+
/**
|
|
797
|
+
* `dragStart` に失敗で答える、またはドラッグを止める。すでにユーザーが取り消していたら
|
|
798
|
+
* `EPERM`、画像が大きすぎれば `EFBIG`。ドラッグの状態は捨てる。
|
|
799
|
+
*/
|
|
800
|
+
dragError(error: DndErrorName, description?: string): boolean;
|
|
801
|
+
/** ドラッグが受け入れられた。`index` は、相手が欲しがりそうな MIME の種類(0 始まり)。 */
|
|
802
|
+
dragAccepted(index: number): boolean;
|
|
803
|
+
/** 相手が行いそうな操作が変わった。null は受け付けない。 */
|
|
804
|
+
dragAction(operation: DndOperation | null): boolean;
|
|
805
|
+
/** ドラッグが相手に落とされた。このあと `requestDragData` で、データを頼む。 */
|
|
806
|
+
dragDropped(): boolean;
|
|
807
|
+
/** ドラッグが終わった。`canceled` が真ならユーザーが取り消した。ドラッグの状態は捨てる。 */
|
|
808
|
+
dragFinished(canceled?: boolean): boolean;
|
|
809
|
+
/** MIME の種類 `index`(0 始まり)のデータをプログラムに頼む。答えは `dragData` か `dragDataError`。 */
|
|
810
|
+
requestDragData(index: number): boolean;
|
|
811
|
+
/** 遠くの機械へのドラッグで、`text/uri-list` の `index` 番目(1 始まり)の項目を頼む。答えは `dragEntry`。 */
|
|
812
|
+
requestDragEntry(index: number): boolean;
|
|
813
|
+
/**
|
|
814
|
+
* OSC の番号 `ident` のハンドラーを登録する(xterm.js の `parser.registerOscHandler` に当たる)。
|
|
815
|
+
* `data` は `OSC ident ;` のあとの文字列(UTF-8)。登録した番号は、ターミナルの内蔵の処理の
|
|
816
|
+
* 代わりにハンドラーが受ける。同じ番号に複数登録できる。
|
|
817
|
+
*/
|
|
818
|
+
registerOscHandler(ident: number, handler: (data: string) => void): Disposable;
|
|
819
|
+
/** 初期状態に戻す。書き込み待ちのデータは捨てる(`done` は呼ばない)。 */
|
|
820
|
+
reset(): void;
|
|
821
|
+
/** 大きさを変える。 */
|
|
822
|
+
resize(cols: number, rows: number): void;
|
|
823
|
+
/**
|
|
824
|
+
* 欄(`open` に渡した要素)の大きさに合わせて列と行の数を決め、大きさを変える
|
|
825
|
+
* (xterm.js の FitAddon の `fit()` と同じ式。スクロールバーの幅を引く)。
|
|
826
|
+
* 返すのは変えたあとの大きさ。`open` の前や、欄が見えていない(大きさが 0)ときや、
|
|
827
|
+
* フォントの大きさがまだ測れていないときは、何もせず、いまの大きさを返す。
|
|
828
|
+
*/
|
|
829
|
+
fit(): {
|
|
830
|
+
cols: number;
|
|
831
|
+
rows: number;
|
|
832
|
+
};
|
|
833
|
+
/** `fit()` が使う列と行の数を、変えずに出す。 */
|
|
834
|
+
proposeDimensions(): {
|
|
835
|
+
cols: number;
|
|
836
|
+
rows: number;
|
|
837
|
+
} | undefined;
|
|
838
|
+
/** フォーカスがあるか(`setFocused` か、要素のフォーカスで決まる)。 */
|
|
839
|
+
get isFocused(): boolean;
|
|
840
|
+
/** ウィンドウの代わりに、フォーカスを得た・失ったことを知らせる。 */
|
|
841
|
+
setFocused(focused: boolean): void;
|
|
842
|
+
/**
|
|
843
|
+
* 欄の要素に付ける。canvas・スクロールバー・見えない `textarea`(フォーカスを受ける)を持つ要素を作り、
|
|
844
|
+
* Canvas 2D で描き始める。字の幅と高さは、フォントを読み終えてから測り直す。
|
|
845
|
+
* 欄の大きさに合わせるには `fit()` を呼ぶ。
|
|
846
|
+
*/
|
|
847
|
+
open(host: HTMLElement): void;
|
|
848
|
+
/**
|
|
849
|
+
* 見えない `textarea` を置いて、キー・変換・貼り付け・フォーカスを受ける。
|
|
850
|
+
* 変換中の字は、カーソルの位置に重ねて見せる。
|
|
851
|
+
*/
|
|
852
|
+
private setupInput;
|
|
853
|
+
/** 変換中の字を出す位置。さかのぼって見ていて、カーソルが見えないときは `undefined`。 */
|
|
854
|
+
private compositionAnchor;
|
|
855
|
+
private createKeyHandler;
|
|
856
|
+
private bindInputEvents;
|
|
857
|
+
/** フォントを読み終えてから測り直す(読む前は代わりのフォントの大きさになる)。戻り値は後始末。 */
|
|
858
|
+
private watchFonts;
|
|
859
|
+
/** `devicePixelRatio` が変わったら(別のディスプレイへ動かした、ズームした)測り直す。戻り値は後始末。 */
|
|
860
|
+
private watchDevicePixelRatio;
|
|
861
|
+
private renderOptions;
|
|
862
|
+
/** セルの大きさ(CSS ピクセル)。`open` の前は `undefined`。 */
|
|
863
|
+
get cellSize(): CellSize | undefined;
|
|
864
|
+
/** セルの大きさが変わった(フォントを読み終えた、`devicePixelRatio` が変わった)。`fit()` を呼び直す目印に使う。 */
|
|
865
|
+
onCellSizeChange(listener: (size: CellSize) => void): Disposable;
|
|
866
|
+
/** 実際に使う、さかのぼっている行数。代替画面では常に 0。 */
|
|
867
|
+
get viewportOffset(): number;
|
|
868
|
+
/** 一番上に見えている行の番号。0 がスクロールバックの一番古い行で、一番下を見ているときは `scrollbackLength`。 */
|
|
869
|
+
get viewportY(): number;
|
|
870
|
+
/** 一番下を見ているか(新しい出力に付いていく状態)。 */
|
|
871
|
+
get isAtBottom(): boolean;
|
|
872
|
+
/** `n` 行ぶん動かす。負の数で上(古い方)、正の数で下。 */
|
|
873
|
+
scrollLines(n: number): void;
|
|
874
|
+
/** 一番上に見える行を `line`(0 がスクロールバックの一番古い行)にする。 */
|
|
875
|
+
scrollToLine(line: number): void;
|
|
876
|
+
/** 一番古い行へ。 */
|
|
877
|
+
scrollToTop(): void;
|
|
878
|
+
/** 一番下へ。 */
|
|
879
|
+
scrollToBottom(): void;
|
|
880
|
+
/** 表示位置が変わった。引数は新しい `viewportY`。 */
|
|
881
|
+
onScroll(listener: (viewportY: number) => void): Disposable;
|
|
882
|
+
private setViewOffset;
|
|
883
|
+
/** 書き込みでスクロールバックが増えたとき、さかのぼって見ているなら同じ内容を見続ける。 */
|
|
884
|
+
private syncViewport;
|
|
885
|
+
/** 描画とスクロールバーに、画面が変わったことを知らせる。 */
|
|
886
|
+
private afterChange;
|
|
887
|
+
/**
|
|
888
|
+
* プログラムが OSC 22(kitty の mouse pointer shapes)で決めた、ポインターの形。CSS の `cursor` の値で、
|
|
889
|
+
* 決まっていなければ `undefined`。マウスの報告が有効かどうかには関わらない。
|
|
890
|
+
* `open` した要素の `cursor` には、これが自動で反映される。
|
|
891
|
+
*/
|
|
892
|
+
get pointerShape(): string | undefined;
|
|
893
|
+
private syncPointerShape;
|
|
894
|
+
/** 画面の `y` 行目(表示位置を考えた、いま見えている行)のセル。 */
|
|
895
|
+
readViewportRow(y: number): RowView;
|
|
896
|
+
/** 欄の要素。 */
|
|
897
|
+
private host?;
|
|
898
|
+
/** `open` で作った要素。`open` の前は `undefined`。 */
|
|
899
|
+
get hostElement(): HTMLElement | undefined;
|
|
900
|
+
/** 見えない `textarea` にフォーカスを当てる。`open` の前は何もしない。 */
|
|
901
|
+
focus(): void;
|
|
902
|
+
/** フォーカスを外す。`open` の前は何もしない。 */
|
|
903
|
+
blur(): void;
|
|
904
|
+
/** セルの画素の大きさをコアに教える(`c`・`r` が無い画像の置く大きさを決めるのに使う)。 */
|
|
905
|
+
private syncCellSize;
|
|
906
|
+
/** 画像の配置の並び(描画が使う)。`PLACEMENT_STRIDE` 個ずつ。 */
|
|
907
|
+
readPlacements(): Float64Array;
|
|
908
|
+
/** 持っている画像の `[ID, 通し番号]` の並び(描画が使う)。 */
|
|
909
|
+
imageSerials(): Float64Array;
|
|
910
|
+
/** 画像の情報 `[通し番号, 形式, 圧縮, 幅, 高さ]`(描画が使う)。画像が無ければ空。 */
|
|
911
|
+
imageInfo(id: number): Float64Array;
|
|
912
|
+
/** 画像のバイト列(描画が使う)。 */
|
|
913
|
+
imageData(id: number): Uint8Array;
|
|
914
|
+
/** 画像のアニメーションの状態 `[コマの数, いまのコマ, 再生の状態(1 止まる、2 待ちながら回す、3 回す), いまのコマの表示時間(ミリ秒), 操作の数]`(描画が使う)。画像が無ければ空。 */
|
|
915
|
+
animationInfo(id: number): Float64Array;
|
|
916
|
+
/** いまのコマの表示時間が過ぎたと知らせ、次のコマへ進める(描画が使う)。進んだら `true`。 */
|
|
917
|
+
animationStep(id: number): boolean;
|
|
918
|
+
/** コマを作る `index` 番目の操作(描画が使う)。並びは `WasmTerminal.frame_op` の説明を参照。 */
|
|
919
|
+
frameOp(id: number, index: number): Float64Array;
|
|
920
|
+
/** `frameOp` の「データを置く」操作のバイト列(描画が使う)。 */
|
|
921
|
+
frameOpData(id: number, index: number): Uint8Array;
|
|
922
|
+
/** 変わった行(見えている画面の行番号)を返し、「変わった」の印を消す。 */
|
|
923
|
+
takeDirtyRows(): number[];
|
|
924
|
+
/** 見えている画面の `y` 行目のセル。 */
|
|
925
|
+
readRow(y: number): RowView;
|
|
926
|
+
/** スクロールバックの `i` 行目(0 が一番古い)のセル。 */
|
|
927
|
+
readScrollbackRow(i: number): RowView;
|
|
928
|
+
/** 見えている画面の `y` 行目の字(空のセルは空白)。末尾の空白は残す。 */
|
|
929
|
+
getRowText(y: number): string;
|
|
930
|
+
private view;
|
|
931
|
+
/** 選択範囲が変わった(広げた、消えた、書き込みで行がずれた)。 */
|
|
932
|
+
onSelectionChange(listener: () => void): Disposable;
|
|
933
|
+
/** 選択があるか。 */
|
|
934
|
+
hasSelection(): boolean;
|
|
935
|
+
/**
|
|
936
|
+
* 選択範囲。位置は、スクロールバックの一番古い行を 0 とした行と列で、`end` は含まない
|
|
937
|
+
* (代替画面では画面の 0 行目が 0)。選択が無ければ `undefined`。
|
|
938
|
+
*/
|
|
939
|
+
getSelectionRange(): SelectionRange | undefined;
|
|
940
|
+
/**
|
|
941
|
+
* 選択した字。折り返しでつながった行は改行を入れずにつなぎ、行末の空のセルは捨てる。
|
|
942
|
+
* 選択が無ければ空文字列。
|
|
943
|
+
*/
|
|
944
|
+
getSelection(): string;
|
|
945
|
+
/** 全部(スクロールバックも)を選ぶ。 */
|
|
946
|
+
selectAll(): void;
|
|
947
|
+
/** 選択を消す。 */
|
|
948
|
+
clearSelection(): void;
|
|
949
|
+
/**
|
|
950
|
+
* 選択した字をクリップボードのデータに入れる(`copy` イベントの `clipboardData` を渡す)。
|
|
951
|
+
* 選択が無ければ何もせず `false`。`open` した要素は、自分で `copy` イベントを受けて
|
|
952
|
+
* これを呼ぶ(xterm.js と同じ)ので、ふつうは呼ばなくてよい。
|
|
953
|
+
*/
|
|
954
|
+
copySelection(data: {
|
|
955
|
+
setData(format: string, data: string): void;
|
|
956
|
+
}): boolean;
|
|
957
|
+
/** 選択範囲が変わっていたら、描き直して、聞き手に知らせる。書き込みのあとにも呼ぶ。 */
|
|
958
|
+
private syncSelection;
|
|
959
|
+
/** 表示位置を考えた、いま見えている `y` 行目の選択範囲 `[開始の列, 終わりの列)`(描画が使う)。 */
|
|
960
|
+
selectionSpan(y: number): [number, number] | undefined;
|
|
961
|
+
/** マウスの報告が有効か(アプリが `CSI ? 1000 h` などで頼んだ)。 */
|
|
962
|
+
get mouseReporting(): boolean;
|
|
963
|
+
/**
|
|
964
|
+
* ポインターのイベントを渡す。`open` した要素は、自分で DOM のイベントを受けて、これを呼ぶ。
|
|
965
|
+
*
|
|
966
|
+
* - マウスの報告が有効なら、押した・離した・動かした(ボタンを押したまま、または何も押さずに。
|
|
967
|
+
* モードによる)を PTY へ送るバイト列にして、`onData` の出口から出す。Shift を押して押した
|
|
968
|
+
* ときは報告せず、選択になる(xterm.js と同じ)。
|
|
969
|
+
* - そうでなければ、左ボタンのドラッグで範囲、ダブルクリックで単語、トリプルクリックで行を選ぶ。
|
|
970
|
+
* Shift を押してクリックすると、いまの選択を広げる。
|
|
971
|
+
*
|
|
972
|
+
* 押してから離すまでは、押したときに決めた側が受け持つ。受け持った(ブラウザーの既定の動きを
|
|
973
|
+
* 止めてよい)ときは `true`。
|
|
974
|
+
*/
|
|
975
|
+
handleMouse(ev: MouseInput): boolean;
|
|
976
|
+
/**
|
|
977
|
+
* ホイールのイベントを渡す。`open` した要素は、自分で DOM のイベントを受けて、これを呼ぶ。
|
|
978
|
+
*
|
|
979
|
+
* - マウスの報告が有効なら、ホイールとして報告する(1 回の `wheel` に 1 つ)。
|
|
980
|
+
* - 代替画面でマウスの報告が無効なら、動かした行の数だけ上下の矢印キーを送る
|
|
981
|
+
* (アプリケーションカーソルキーなら `ESC O A`、そうでなければ `ESC [ A`)。
|
|
982
|
+
* - 通常の画面なら、表示位置を動かす。
|
|
983
|
+
*
|
|
984
|
+
* 縦に回さないとき(`deltaY` が 0 か Shift つき)は何もしない。ブラウザーの既定の動きを
|
|
985
|
+
* 止めてよいときは `true`。
|
|
986
|
+
*/
|
|
987
|
+
handleWheel(ev: WheelInput): boolean;
|
|
988
|
+
/** ホイールが動かす行の数(上が負)。Shift つきは 0。xterm.js の `getLinesScrolled` と同じ式。 */
|
|
989
|
+
private wheelLines;
|
|
990
|
+
/** DOM のマウスのイベントを `MouseInput` にする。 */
|
|
991
|
+
private pointerInput;
|
|
992
|
+
/** 選択中に画面の外へ出たとき、その向きにスクロールし続ける。`move` を渡し続け、`stop` で止める。 */
|
|
993
|
+
private autoScroller;
|
|
994
|
+
/** 押す・動かす・離すを受ける。戻り値は後始末。 */
|
|
995
|
+
private bindPointer;
|
|
996
|
+
/** ホイールを受ける。戻り値は後始末。 */
|
|
997
|
+
private bindWheel;
|
|
998
|
+
/**
|
|
999
|
+
* `copy` を受ける。ブラウザーは `copy` を、編集できる要素か選択の始点か `body` に送り、
|
|
1000
|
+
* 欄の要素には送らないことがあるので、document で受けて、フォーカスが欄の中にあるときだけ扱う
|
|
1001
|
+
* (別の入力欄でのコピーは邪魔しない)。戻り値は後始末。
|
|
1002
|
+
*/
|
|
1003
|
+
private bindCopy;
|
|
1004
|
+
/** 後始末をする。書き込み待ちのデータは捨てる(`done` は呼ばない)。 */
|
|
1005
|
+
dispose(): void;
|
|
1006
|
+
}
|