@mudlet/mudlet-web 0.3.0 → 0.4.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 +338 -338
- package/README.md +158 -150
- package/dist-lib/assets/qt-resources/index.d.ts +16 -0
- package/dist-lib/branding.d.ts +1 -1
- package/dist-lib/hooks/useMudSession.d.ts +1 -1
- package/dist-lib/hooks/useOutput.d.ts +3 -1
- package/dist-lib/import/defaultPackages.d.ts +35 -2
- package/dist-lib/import/defaults/generic_mapper/generic_mapper.mpackage +0 -0
- package/dist-lib/import/defaults/gui-drop/gui-drop.mpackage +0 -0
- package/dist-lib/import/defaults/{run-lua-code.mpackage → mudlet-base-ui/mudlet-base-ui.mpackage} +0 -0
- package/dist-lib/import/defaults/mudlet-mapper.xml +13023 -13023
- package/dist-lib/import/defaults/run-lua-code/run-lua-code.mpackage +0 -0
- package/dist-lib/import/packageExport.d.ts +71 -0
- package/dist-lib/import/packageInstaller.d.ts +4 -1
- package/dist-lib/index.js +45910 -39931
- package/dist-lib/logging/SessionLogger.d.ts +66 -1
- package/dist-lib/map/MapStore.d.ts +32 -4
- package/dist-lib/map/mapImageExport.d.ts +1 -1
- package/dist-lib/map/mapZoom.d.ts +71 -0
- package/dist-lib/mud/ItemIdSequence.d.ts +23 -0
- package/dist-lib/mud/MudSession.d.ts +113 -11
- package/dist-lib/mud/PatternEngine.d.ts +6 -1
- package/dist-lib/mud/commandSplit.d.ts +16 -0
- package/dist-lib/mud/connection/LineAssembler.d.ts +56 -0
- package/dist-lib/mud/connection/MudClient.d.ts +136 -19
- package/dist-lib/mud/connection/TelnetNegotiator.d.ts +39 -0
- package/dist-lib/mud/connection/telnetByteTags.d.ts +35 -0
- package/dist-lib/mud/events.d.ts +86 -4
- package/dist-lib/mud/games/bundledGames.d.ts +29 -0
- package/dist-lib/mud/games/gameIcons.d.ts +5 -0
- package/dist-lib/mud/keybindings/KeyEngine.d.ts +9 -2
- package/dist-lib/mud/keybindings/browserReservedKeys.d.ts +5 -1
- package/dist-lib/mud/keybindings/keyEventTarget.d.ts +17 -0
- package/dist-lib/mud/keybindings/qtKeys.d.ts +2 -0
- package/dist-lib/mud/protocol/charLoginFlow.d.ts +68 -0
- package/dist-lib/mud/protocol/charset.d.ts +27 -5
- package/dist-lib/mud/protocol/constants.d.ts +1 -0
- package/dist-lib/mud/protocol/gmcp.d.ts +19 -3
- package/dist-lib/mud/protocol/index.d.ts +1 -1
- package/dist-lib/mud/protocol/msspTls.d.ts +54 -0
- package/dist-lib/mud/protocol/mxp.d.ts +28 -5
- package/dist-lib/mud/protocol/tlsCodes.d.ts +4 -0
- package/dist-lib/mud/replay/ReplayPlayer.d.ts +17 -0
- package/dist-lib/mud/text/Console.d.ts +64 -0
- package/dist-lib/mud/text/FormatState.d.ts +66 -3
- package/dist-lib/mud/text/hyperlinkVisibility.d.ts +35 -0
- package/dist-lib/mud/text/osc8Docs.d.ts +23 -0
- package/dist-lib/mud/text/serverWrap.d.ts +191 -0
- package/dist-lib/mud/timers/TimerEngine.d.ts +43 -12
- package/dist-lib/mud/triggers/TriggerEngine.d.ts +112 -3
- package/dist-lib/scripting/EngineHost.d.ts +56 -3
- package/dist-lib/scripting/IScriptingRuntime.d.ts +22 -0
- package/dist-lib/scripting/MxpFrameManager.d.ts +118 -0
- package/dist-lib/scripting/ScriptingAPI.d.ts +331 -54
- package/dist-lib/scripting/ScriptingEngine.d.ts +181 -24
- package/dist-lib/scripting/http/HttpService.d.ts +51 -1
- package/dist-lib/scripting/lua/LuaRuntime.d.ts +159 -2
- package/dist-lib/scripting/lua/bindings/map.d.ts +0 -12
- package/dist-lib/scripting/lua/utf8Patterns.d.ts +59 -0
- package/dist-lib/storage/index.d.ts +1 -1
- package/dist-lib/storage/persistentStorage.d.ts +10 -0
- package/dist-lib/storage/schema.d.ts +166 -4
- package/dist-lib/styles.css +1 -1
- package/dist-lib/ui/BundledGameGrid.d.ts +21 -0
- package/dist-lib/ui/CharLoginModal.d.ts +5 -1
- package/dist-lib/ui/CommandBar.d.ts +7 -1
- package/dist-lib/ui/ConnectionGrid.d.ts +4 -1
- package/dist-lib/ui/FileBrowserModal.d.ts +1 -0
- package/dist-lib/ui/FilePickerModal.d.ts +3 -3
- package/dist-lib/ui/HelpModal.d.ts +11 -0
- package/dist-lib/ui/LogBrowserModal.d.ts +4 -1
- package/dist-lib/ui/PlayerMarkerPreview.d.ts +20 -0
- package/dist-lib/ui/SettingsModal.d.ts +5 -1
- package/dist-lib/ui/TlsAlertBanner.d.ts +18 -0
- package/dist-lib/ui/TlsCertificateBox.d.ts +20 -0
- package/dist-lib/ui/TlsUpgradeModal.d.ts +16 -0
- package/dist-lib/ui/Toolbar.d.ts +2 -1
- package/dist-lib/ui/VfsPickerModal.d.ts +26 -0
- package/dist-lib/ui/components/FileSourceButton.d.ts +47 -0
- package/dist-lib/ui/components/index.d.ts +1 -0
- package/dist-lib/ui/components/useModalFocus.d.ts +6 -0
- package/dist-lib/ui/helpTopics.d.ts +19 -0
- package/dist-lib/ui/labels/LabelManager.d.ts +32 -0
- package/dist-lib/ui/labels/labelLinks.d.ts +52 -0
- package/dist-lib/ui/layout/ScriptWindow.d.ts +11 -2
- package/dist-lib/ui/markdown.d.ts +10 -1
- package/dist-lib/ui/output/OutputArea.d.ts +11 -1
- package/dist-lib/ui/output/OutputContextMenu.d.ts +3 -1
- package/dist-lib/ui/output/OutputRenderer.d.ts +7 -1
- package/dist-lib/ui/output/OutputSearchBar.d.ts +25 -0
- package/dist-lib/ui/output/StickyOutputPanel.d.ts +5 -1
- package/dist-lib/ui/output/linkNavigation.d.ts +22 -0
- package/dist-lib/ui/output/outputSearch.d.ts +130 -0
- package/dist-lib/ui/search/matcher.d.ts +15 -0
- package/dist-lib/ui/search/useDebounced.d.ts +3 -0
- package/dist-lib/ui/tts/TtsManager.d.ts +3 -0
- package/dist-lib/ui/useCommandHistory.d.ts +4 -2
- package/dist-lib/ui/useOpenProfiles.d.ts +26 -0
- package/dist-lib/ui/video/VideoManager.d.ts +17 -0
- package/dist-lib/ui/windows/WindowManager.d.ts +149 -2
- package/dist-lib/ui/windows/panels/MapPanel.d.ts +4 -1
- package/dist-lib/ui/windows/panels/PackageExportModal.d.ts +18 -0
- package/dist-lib/ui/windows/panels/TextPanel.d.ts +3 -1
- package/dist-lib/ui/windows/types.d.ts +35 -0
- package/dist-lib/utils/describeThrown.d.ts +22 -0
- package/dist-lib/utils/fontLoader.d.ts +5 -0
- package/dist-lib/vfs-sw.js +131 -131
- package/dist-lib/vite.js +22 -0
- package/package.json +97 -93
- package/dist-lib/scripting/lua/mudlet-lua/generic-mapper/generic_mapper.mpackage +0 -0
- package/dist-lib/ui/windows/panels/VfsModulePickerModal.d.ts +0 -8
|
@@ -8,10 +8,12 @@ import type { LabelManager, LabelCreateOptions, LabelMouseEvent, LabelWheelEvent
|
|
|
8
8
|
import type { CommandLineManager } from '../ui/cmdline/CommandLineManager';
|
|
9
9
|
import type { ScrollBoxManager } from '../ui/scrollbox/ScrollBoxManager';
|
|
10
10
|
import { TextEditManager } from '../ui/textedit/TextEditManager';
|
|
11
|
+
import type { LogFormat } from '../logging/SessionLogger';
|
|
11
12
|
import { AnsiAwareBuffer, type FormatStateSnapshot, type FormatHyperlink } from '../mud/text/FormatState';
|
|
13
|
+
import { type UnderlineStyle } from '../mud/text/hyperlinkConfig';
|
|
12
14
|
import { StopwatchManager } from './StopwatchManager';
|
|
13
15
|
import { MapStore } from '../map/MapStore';
|
|
14
|
-
import { type EngineHost } from './EngineHost';
|
|
16
|
+
import { type EngineHost, type TempComplexTriggerSpec } from './EngineHost';
|
|
15
17
|
declare class ScriptingWindowsAPI {
|
|
16
18
|
private readonly session;
|
|
17
19
|
constructor(session: MudSession);
|
|
@@ -19,6 +21,17 @@ declare class ScriptingWindowsAPI {
|
|
|
19
21
|
write(id: string, text: string): void;
|
|
20
22
|
clear(id: string): void;
|
|
21
23
|
setTitle(id: string, title?: string): boolean;
|
|
24
|
+
/** Mudlet getUserWindowTitle / getMapWindowTitle — null when no such window. */
|
|
25
|
+
getTitle(id: string): string | null;
|
|
26
|
+
/** Mudlet getScrollBarVisible — the enable/disableScrollBar intent. */
|
|
27
|
+
scrollBarVisible(id: string): boolean;
|
|
28
|
+
/** Mudlet getMapWidgetGeometry / getWindowGeometry — null when no such window. */
|
|
29
|
+
getGeometry(id: string): {
|
|
30
|
+
x: number;
|
|
31
|
+
y: number;
|
|
32
|
+
width: number;
|
|
33
|
+
height: number;
|
|
34
|
+
} | null;
|
|
22
35
|
focus(id: string): void;
|
|
23
36
|
hide(id: string): void;
|
|
24
37
|
show(id: string): boolean;
|
|
@@ -71,6 +84,9 @@ declare class ScriptingLabelsAPI {
|
|
|
71
84
|
htmlRewriter: () => (html: string) => string);
|
|
72
85
|
create(name: string, opts: LabelCreateOptions): boolean;
|
|
73
86
|
has(name: string): boolean;
|
|
87
|
+
/** Whether a movie is installed on this label — the movie functions report
|
|
88
|
+
* "no movie here" separately from "no such label". */
|
|
89
|
+
hasMovie(name: string): boolean;
|
|
74
90
|
/** Read-only state for the geometry/visibility/text getters. */
|
|
75
91
|
get(name: string): Readonly<import("../ui/labels/LabelManager").LabelState> | undefined;
|
|
76
92
|
destroy(name: string): boolean;
|
|
@@ -89,6 +105,8 @@ declare class ScriptingLabelsAPI {
|
|
|
89
105
|
} | null;
|
|
90
106
|
setStyleSheet(name: string, css: string): boolean;
|
|
91
107
|
getStyleSheet(name: string): string | undefined;
|
|
108
|
+
/** Pre-rewrite CSS per label, keyed by name — see {@link setStyleSheet}. */
|
|
109
|
+
private readonly authoredCss;
|
|
92
110
|
setLinkStyle(name: string, color: string, visitedColor: string, underline: boolean): boolean;
|
|
93
111
|
resetLinkStyle(name: string): boolean;
|
|
94
112
|
getSizeHint(name: string): {
|
|
@@ -158,6 +176,10 @@ export declare class ScriptingAPI {
|
|
|
158
176
|
private inTriggerProcessing;
|
|
159
177
|
private echoDeferred;
|
|
160
178
|
private isDeferringEcho;
|
|
179
|
+
/** Flip echo deferral, mirroring it onto the session so echoCommand knows
|
|
180
|
+
* the in-flight console partial belongs to flushDeferredEcho and must not
|
|
181
|
+
* be closed out from under it. */
|
|
182
|
+
private setDeferringEcho;
|
|
161
183
|
private echoOnMatchedLine;
|
|
162
184
|
/** Mudlet `startLogging(state)`. Forwarded to ProfileSession, which owns
|
|
163
185
|
* the SessionLogger instance (created/torn-down on this hook). */
|
|
@@ -173,6 +195,10 @@ export declare class ScriptingAPI {
|
|
|
173
195
|
private clipboardText;
|
|
174
196
|
private buffers;
|
|
175
197
|
constructor(session: MudSession, aliasEngine: AliasEngine, triggerEngine: TriggerEngine, timerEngine: TimerEngine, keyEngine: KeyEngine, connectionId: string);
|
|
198
|
+
/** Push the persisted `muteMediaAPI` / `muteMediaGame` gates onto the live
|
|
199
|
+
* sound and video managers. Both setters no-op when already in the wanted
|
|
200
|
+
* state, so this is cheap to call on every config-bag change. */
|
|
201
|
+
private syncMediaMuteFromConfig;
|
|
176
202
|
/** Bind the engine backing this API. Called once by ScriptingEngine during
|
|
177
203
|
* its own construction; pass null on teardown to revert to the inert host,
|
|
178
204
|
* so anything that outlives the engine (a rendered line's link handler,
|
|
@@ -186,7 +212,20 @@ export declare class ScriptingAPI {
|
|
|
186
212
|
* during initial load); the default host connects the session directly. */
|
|
187
213
|
private dialConnect;
|
|
188
214
|
disconnect(): void;
|
|
215
|
+
/**
|
|
216
|
+
* Mudlet's Lua `send()`, which is C++ `sendRaw` → `Host::send(text,
|
|
217
|
+
* wantPrint, dontExpandAliases = true)`: the whole text is echoed once under
|
|
218
|
+
* the showSentText mode, then split on the profile's command separator, and
|
|
219
|
+
* each part goes to the game **without** passing through the aliases. Item
|
|
220
|
+
* `command` fields take the alias-expanding path instead —
|
|
221
|
+
* {@link ScriptingEngine.hostSend}.
|
|
222
|
+
*/
|
|
189
223
|
send(text: string, echo?: boolean): void;
|
|
224
|
+
/** The tail of `Host::send`: one already-echoed, already-split command onto
|
|
225
|
+
* the wire. Same `sysDataSendRequest` veto as {@link send}, no echo. With
|
|
226
|
+
* no engine wired yet (early init) the no-op host reports "not denied", so
|
|
227
|
+
* this sends straight through. */
|
|
228
|
+
sendData(text: string): void;
|
|
190
229
|
sendGmcp(message: string): void;
|
|
191
230
|
/** Mudlet `sendMSDP(variable, ...values)`. Frames an MSDP subnegotiation
|
|
192
231
|
* (`IAC SB MSDP MSDP_VAR <var> [MSDP_VAL <val>]... IAC SE`) and sends it. */
|
|
@@ -206,6 +245,17 @@ export declare class ScriptingAPI {
|
|
|
206
245
|
* replay (.dat). The LuaRuntime binding reads the bytes from the VFS
|
|
207
246
|
* before calling here. Returns null on success or the failure reason. */
|
|
208
247
|
loadReplay(bytes: Uint8Array): string | null;
|
|
248
|
+
/** Deliver any replay chunk that has come due. Only the busted pump calls
|
|
249
|
+
* this — see MudSession.pumpReplay. */
|
|
250
|
+
pumpReplay(): number;
|
|
251
|
+
/** Commit a line held for a server-wrap continuation whose flush delay has
|
|
252
|
+
* elapsed. Same reason as {@link pumpReplay}: the busted runner blocks the
|
|
253
|
+
* event loop the timer would have fired on. */
|
|
254
|
+
pumpServerWrap(): boolean;
|
|
255
|
+
/** Put back the text of an OSC 8 link written concealed whose reveal delay
|
|
256
|
+
* has elapsed. Same reason again: the runner blocks the event loop the
|
|
257
|
+
* reveal timer would have fired on. */
|
|
258
|
+
pumpHyperlinkReveals(): boolean;
|
|
209
259
|
/** Mudlet `receiveMSP(text)`. Parses an MSP payload (`!!SOUND(...)` /
|
|
210
260
|
* `!!MUSIC(...)` tags) as if the server had sent it and dispatches the
|
|
211
261
|
* resulting sound/music commands through the normal `msp` event path
|
|
@@ -256,9 +306,9 @@ export declare class ScriptingAPI {
|
|
|
256
306
|
*/
|
|
257
307
|
getProfiles(): Record<string, {
|
|
258
308
|
host: string;
|
|
259
|
-
port:
|
|
309
|
+
port: string;
|
|
260
310
|
loaded: boolean;
|
|
261
|
-
connected
|
|
311
|
+
connected?: boolean;
|
|
262
312
|
description: string;
|
|
263
313
|
}>;
|
|
264
314
|
/** Mudlet `getMudletInfo()`. Echoes a short diagnostic block to the main
|
|
@@ -318,23 +368,35 @@ export declare class ScriptingAPI {
|
|
|
318
368
|
* of the two applies before it calls through, and only the type is knowable
|
|
319
369
|
* ahead of the call.
|
|
320
370
|
*
|
|
321
|
-
* `'readonly'` keys exist for `getConfig` but refuse every write
|
|
371
|
+
* `'readonly'` keys exist for `getConfig` but refuse every write; `'any'`
|
|
372
|
+
* keys take more than one value type and vet the value themselves.
|
|
322
373
|
*/
|
|
323
|
-
configKeyKind(key: string): 'bool' | 'num' | 'str' | 'readonly' | null;
|
|
374
|
+
configKeyKind(key: string): 'bool' | 'num' | 'str' | 'any' | 'readonly' | null;
|
|
324
375
|
/** Mudlet `setConfig(key, value)`. Returns true when the key is known and
|
|
325
376
|
* writable, false for unknown or read-only keys. */
|
|
326
377
|
setConfig(key: string, value: unknown): boolean;
|
|
327
|
-
/**
|
|
328
|
-
*
|
|
329
|
-
*
|
|
330
|
-
|
|
331
|
-
|
|
378
|
+
/**
|
|
379
|
+
* The connection a profile-name argument refers to, or null when no profile
|
|
380
|
+
* has that name. Matching ignores case, as Mudlet's does: it looks the name
|
|
381
|
+
* up as a folder, and the platforms it runs on mostly have case-insensitive
|
|
382
|
+
* ones — so `setProfileInformation(name:upper(), …)` has to find the profile
|
|
383
|
+
* it already has rather than start a second one beside it.
|
|
384
|
+
*/
|
|
385
|
+
private connectionByName;
|
|
386
|
+
/** Mudlet `getProfileInformation([profileName])`. The profile's free-text
|
|
387
|
+
* description ("" when unset), defaulting to this profile. Returns null for
|
|
388
|
+
* a name no profile has. */
|
|
389
|
+
getProfileInformation(profileName?: string): string | null;
|
|
390
|
+
/** Mudlet `setProfileInformation([profileName,] text)`. Stores the free-text
|
|
332
391
|
* description on the connection record (also editable from the connection
|
|
333
|
-
* screen).
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
clearProfileInformation()
|
|
392
|
+
* screen). False for a name no profile has — deliberately a refusal rather
|
|
393
|
+
* than a create, since in Mudlet the write goes through a call that makes
|
|
394
|
+
* whatever folder it is handed, and a folder there is a profile. */
|
|
395
|
+
setProfileInformation(text: string, profileName?: string): boolean;
|
|
396
|
+
/** Mudlet `clearProfileInformation([profileName])`. Puts the description
|
|
397
|
+
* back to what the profile started with: the blurb its game ships with in
|
|
398
|
+
* the bundled catalogue, or empty for a profile someone made up. */
|
|
399
|
+
clearProfileInformation(profileName?: string): boolean;
|
|
338
400
|
/** Mudlet `getProfileIcon()`. Returns the stored icon as a `data:` URI, or
|
|
339
401
|
* "" when the profile has no custom icon (the connection screen then shows
|
|
340
402
|
* the auto-generated name tile). */
|
|
@@ -356,6 +418,9 @@ export declare class ScriptingAPI {
|
|
|
356
418
|
installModule(path: string): InstallOutcome;
|
|
357
419
|
uninstallModule(name: string): boolean;
|
|
358
420
|
syncModule(name: string): Promise<void>;
|
|
421
|
+
/** Write every module flagged to sync back out to its own file. Called by
|
|
422
|
+
* saveProfile — see the note there. */
|
|
423
|
+
saveSyncedModules(): void;
|
|
359
424
|
reloadModule(name: string): boolean;
|
|
360
425
|
enableModuleSync(name: string): void;
|
|
361
426
|
disableModuleSync(name: string): void;
|
|
@@ -386,10 +451,26 @@ export declare class ScriptingAPI {
|
|
|
386
451
|
/** Hook for ProfileSession to start/stop the per-connection SessionLogger.
|
|
387
452
|
* Mudlet `startLogging(true|false)` toggles whether new output lines are
|
|
388
453
|
* recorded; the on/off transition is synchronous. */
|
|
389
|
-
setLoggingToggler(fn: ((enabled: boolean) => boolean) | null): void;
|
|
454
|
+
setLoggingToggler(fn: ((enabled: boolean, format: LogFormat) => boolean) | null): void;
|
|
390
455
|
/** Mudlet `startLogging(state)`. Returns true on success, false when
|
|
391
456
|
* the toggle isn't wired up yet (e.g. before ProfileSession mounts). */
|
|
392
|
-
|
|
457
|
+
/**
|
|
458
|
+
* Mudlet `startLogging(state)` → (ok, message, path, state). The state code
|
|
459
|
+
* distinguishes a change from a no-op: 1 started, 0 stopped, -1 already on,
|
|
460
|
+
* -2 already off; the two "already" cases answer nil rather than true, so a
|
|
461
|
+
* caller can tell "I turned it on" from "it was on".
|
|
462
|
+
*/
|
|
463
|
+
startLogging(enabled: boolean): {
|
|
464
|
+
ok: boolean;
|
|
465
|
+
message: string;
|
|
466
|
+
path: string | null;
|
|
467
|
+
state: number;
|
|
468
|
+
};
|
|
469
|
+
/** Where the live logger is writing its text log, or null when logging is
|
|
470
|
+
* off. Wired by ProfileSession alongside the toggler. */
|
|
471
|
+
private loggingPathProvider;
|
|
472
|
+
setLoggingPathProvider(fn: (() => string | null) | null): void;
|
|
473
|
+
private loggingPath;
|
|
393
474
|
/** Hook for ProfileSession to forward appendLog text to the live logger. */
|
|
394
475
|
setLogAppender(fn: ((text: string) => void) | null): void;
|
|
395
476
|
/** Mudlet `appendLog(text)`. Appends a line to the current session log.
|
|
@@ -483,11 +564,19 @@ export declare class ScriptingAPI {
|
|
|
483
564
|
isActive: boolean;
|
|
484
565
|
}> | null;
|
|
485
566
|
/** Mudlet `findItems(name, type [, exact [, caseSensitive]])`. Numeric ids of
|
|
486
|
-
* matching items/groups
|
|
487
|
-
|
|
567
|
+
* matching items/groups — empty when none match, null when there is no such
|
|
568
|
+
* item family (which the Lua wrapper reports as a bad item type). */
|
|
569
|
+
findItems(name: string, type: string, exact?: boolean, caseSensitive?: boolean): number[] | null;
|
|
488
570
|
/** Mudlet `isAncestorsActive(id, type)`. True when every ancestor group is
|
|
489
571
|
* enabled; null when no item of that type has the id. */
|
|
490
572
|
isAncestorsActive(id: number, type: string): boolean | null;
|
|
573
|
+
/** Next id from the profile's single item-id sequence — see
|
|
574
|
+
* ItemIdSequence. Backs the Lua runtime's temporary items. */
|
|
575
|
+
allocateItemId(): number;
|
|
576
|
+
/** Whether `type` names an item family at all — the tree-walking APIs
|
|
577
|
+
* (findItems, ancestors, isAncestorsActive) all refuse an unknown one, and
|
|
578
|
+
* refuse it differently from "nothing matched". */
|
|
579
|
+
isKnownItemType(type: string): boolean;
|
|
491
580
|
/** Mudlet `getProfileStats()`. Per-family total/active counts (+ trigger
|
|
492
581
|
* patterns). See ScriptingEngine.getProfileStats for mudix's caveats. */
|
|
493
582
|
getProfileStats(): Record<string, unknown>;
|
|
@@ -499,6 +588,11 @@ export declare class ScriptingAPI {
|
|
|
499
588
|
* empty patterns array creates a trigger group. Returns the new id, or
|
|
500
589
|
* -1 if `parent` is given but no trigger group of that name exists. */
|
|
501
590
|
permSubstringTrigger(name: string, parent: string, patterns: string[], code: string): number;
|
|
591
|
+
/** Mudlet `tempComplexRegexTrigger(...)`. See
|
|
592
|
+
* ScriptingEngine.createTempComplexTrigger. */
|
|
593
|
+
tempComplexTrigger(spec: TempComplexTriggerSpec): number;
|
|
594
|
+
/** Remove a temporary trigger by the id its creator returned. */
|
|
595
|
+
removeTemporaryTrigger(id: number): boolean;
|
|
502
596
|
/** Mudlet `permBeginOfLineStringTrigger(name, parent, patterns, luaCode)`.
|
|
503
597
|
* Same shape as permSubstringTrigger but each pattern matches only when it
|
|
504
598
|
* appears at the start of the line (`String.prototype.startsWith`, like the
|
|
@@ -561,6 +655,9 @@ export declare class ScriptingAPI {
|
|
|
561
655
|
/** Mudlet `getButtonState(name)`. Reads the pressed state of a two-state
|
|
562
656
|
* button. Returns nil when not found. */
|
|
563
657
|
getButtonState(name: string): boolean | null;
|
|
658
|
+
/** Which of Mudlet's button refusals applies to `name` — see
|
|
659
|
+
* ScriptingEngine.buttonKindByName. */
|
|
660
|
+
buttonKind(name: string): 'missing' | 'plain' | 'pushdown';
|
|
564
661
|
/** Mudlet `setButtonStyleSheet(name, css)`. Stores a CSS string on the
|
|
565
662
|
* ButtonNode; the renderer applies it inline. Returns false when not
|
|
566
663
|
* found. */
|
|
@@ -568,16 +665,34 @@ export declare class ScriptingAPI {
|
|
|
568
665
|
/** Mudlet `showToolBar(name)` / `hideToolBar(name)`. Toggles the toolbar's
|
|
569
666
|
* effective enabled flag — the existing button bar already gates render
|
|
570
667
|
* on `isEffectivelyEnabled`, so flipping the group's `enabled` field is
|
|
571
|
-
* the show/hide hook. Returns
|
|
572
|
-
setToolBarVisibility(name: string, show: boolean):
|
|
668
|
+
* the show/hide hook. Returns null on success, or why nothing moved. */
|
|
669
|
+
setToolBarVisibility(name: string, show: boolean): string | null;
|
|
573
670
|
setScript(name: string, code: string, pos: number): number;
|
|
574
|
-
/**
|
|
575
|
-
*
|
|
576
|
-
|
|
671
|
+
/** Removes the script with this numeric id. Backs permScript's rollback
|
|
672
|
+
* when the new body raises as it is run. True when one was removed. */
|
|
673
|
+
removeScriptById(id: number): boolean;
|
|
674
|
+
/** Mudlet `getScript(name [, pos]) → code, id`. Returns the source of the
|
|
675
|
+
* pos-th (1-indexed) script named `name` together with that script's own
|
|
676
|
+
* numeric id. Null when no script sits at that position, which Bridge.lua
|
|
677
|
+
* surfaces as Mudlet's `(-1, "script ... at position ... not found")`. */
|
|
577
678
|
getScript(name: string, pos: number): {
|
|
578
679
|
code: string;
|
|
579
|
-
|
|
680
|
+
id: number;
|
|
580
681
|
} | null;
|
|
682
|
+
/** When the `!osc8-docs` banner last went out — see {@link injectOsc8Docs}. */
|
|
683
|
+
private osc8DocsInjectedAt;
|
|
684
|
+
/**
|
|
685
|
+
* Mudlet's `!osc8-docs` easter egg (`TBuffer::appendLine`): text printed
|
|
686
|
+
* through the echo family that carries the phrase is swallowed whole — not
|
|
687
|
+
* just the phrase, the whole call — and a banner of worked OSC 8 examples
|
|
688
|
+
* goes into the MAIN console instead, whichever window the echo named.
|
|
689
|
+
*
|
|
690
|
+
* Returns true when the caller must print nothing. That happens even while
|
|
691
|
+
* the once-a-second debounce is suppressing the banner itself: an echo and
|
|
692
|
+
* the server response repeating it are two sightings of one phrase, and the
|
|
693
|
+
* phrase never belongs on screen either way.
|
|
694
|
+
*/
|
|
695
|
+
private injectOsc8Docs;
|
|
581
696
|
echo(text: string): void;
|
|
582
697
|
echoToWindow(win: string, text: string): void;
|
|
583
698
|
/**
|
|
@@ -630,6 +745,14 @@ export declare class ScriptingAPI {
|
|
|
630
745
|
* decides the behaviour (send / prompt / open URL); anything else is a
|
|
631
746
|
* no-op (it was already rejected at parse time). */
|
|
632
747
|
private runHyperlinkUri;
|
|
748
|
+
/**
|
|
749
|
+
* Activate an `<a href>` clicked inside a label's rich text — Mudlet's
|
|
750
|
+
* `TLabel::slot_linkActivated`. Wired onto the LabelManager in the
|
|
751
|
+
* constructor; see labelLinks.ts for how the schemes differ from the OSC 8
|
|
752
|
+
* ones {@link runHyperlinkUri} handles (chiefly: a scheme-less href is a Lua
|
|
753
|
+
* chunk, which is how Geyser packages hang code off a label link).
|
|
754
|
+
*/
|
|
755
|
+
activateLabelLink(href: string): void;
|
|
633
756
|
/**
|
|
634
757
|
* Build a {@link FormatHyperlink} for an OSC 8 link URI. The scheme decides
|
|
635
758
|
* the behaviour, mirroring Mudlet: `send:` fires the command immediately,
|
|
@@ -758,6 +881,17 @@ export declare class ScriptingAPI {
|
|
|
758
881
|
isAnsiFgColor(ansiColor: number): boolean;
|
|
759
882
|
isAnsiBgColor(ansiColor: number): boolean;
|
|
760
883
|
private matchesAnsiColor;
|
|
884
|
+
/**
|
|
885
|
+
* The colour one of `isAnsiFgColor`/`isAnsiBgColor`'s 0..16 codes names.
|
|
886
|
+
*
|
|
887
|
+
* This is Mudlet's own numbering (`TLuaInterpreterUI.cpp`), and it is not
|
|
888
|
+
* the ANSI one: 0 is the profile's default, then the eight colours follow in
|
|
889
|
+
* *light-first* pairs — 1 light black, 2 black, 3 light red, 4 red, and so
|
|
890
|
+
* on to 15 light white, 16 white. Anything outside 0..16 names no colour;
|
|
891
|
+
* the Bridge wrapper already refuses those with Mudlet's message, so this
|
|
892
|
+
* only has to decline to answer.
|
|
893
|
+
*/
|
|
894
|
+
private ansiColorCodeToRgb;
|
|
761
895
|
private readSelectionColor;
|
|
762
896
|
/**
|
|
763
897
|
* Resolve the rgb of `channel` for the character at `pos` in `buf`, falling
|
|
@@ -766,6 +900,13 @@ export declare class ScriptingAPI {
|
|
|
766
900
|
* (selection or cursor).
|
|
767
901
|
*/
|
|
768
902
|
private readColorAt;
|
|
903
|
+
/** The blue a link gets in `windowName` when the caller did not pass a
|
|
904
|
+
* format of its own — whichever of Mudlet's two link blues reads better
|
|
905
|
+
* against that console's background. */
|
|
906
|
+
private linkColor;
|
|
907
|
+
/** The profile's own foreground/background — what a cell carrying no colour
|
|
908
|
+
* of its own is drawn in, and what `isAnsi*Color(0)` asks about. */
|
|
909
|
+
private defaultColorRgb;
|
|
769
910
|
/**
|
|
770
911
|
* Mudlet `getTextFormat([windowName]) → table | nil, errMsg`. Reads the full
|
|
771
912
|
* set of display attributes of the character at the current selection's start
|
|
@@ -783,6 +924,7 @@ export declare class ScriptingAPI {
|
|
|
783
924
|
bold: boolean;
|
|
784
925
|
italic: boolean;
|
|
785
926
|
underline: boolean;
|
|
927
|
+
underlineStyle: UnderlineStyle | 'none';
|
|
786
928
|
strikeout: boolean;
|
|
787
929
|
reverse: boolean;
|
|
788
930
|
overline: boolean;
|
|
@@ -826,7 +968,10 @@ export declare class ScriptingAPI {
|
|
|
826
968
|
* (RGB) segments never match a positive index, matching Mudlet's
|
|
827
969
|
* palette-only semantics.
|
|
828
970
|
*/
|
|
829
|
-
currentLineMatchesColor(wantFg: number, wantBg: number
|
|
971
|
+
currentLineMatchesColor(wantFg: number, wantBg: number, window?: {
|
|
972
|
+
start: number;
|
|
973
|
+
length: number;
|
|
974
|
+
} | null): boolean;
|
|
830
975
|
/**
|
|
831
976
|
* The text of the first run on the current line carrying the wanted ANSI
|
|
832
977
|
* colours, or null when none does. A colour trigger reports that run as
|
|
@@ -837,12 +982,32 @@ export declare class ScriptingAPI {
|
|
|
837
982
|
* may already have recoloured the line, and Mudlet still matches against the
|
|
838
983
|
* colours the server sent.
|
|
839
984
|
*/
|
|
840
|
-
currentLineColorMatch(wantFg: number, wantBg: number
|
|
985
|
+
currentLineColorMatch(wantFg: number, wantBg: number, window?: {
|
|
986
|
+
start: number;
|
|
987
|
+
length: number;
|
|
988
|
+
} | null): string | null;
|
|
841
989
|
/** Per-segment ANSI palette indices (and text) of each line currently being
|
|
842
|
-
* processed, as it arrived — see {@link beginLine}.
|
|
843
|
-
*
|
|
844
|
-
*
|
|
990
|
+
* processed, as it arrived — see {@link beginLine}. {@link COLOR_DEFAULT}
|
|
991
|
+
* marks a segment left on the console's default colour, which is what a
|
|
992
|
+
* trigger asking for `-2` matches; {@link COLOR_UNPALETTED} marks an RGB
|
|
993
|
+
* colour outside the palette, which matches nothing. A stack, because a
|
|
994
|
+
* trigger can feedTriggers another line. */
|
|
845
995
|
private lineColorSnapshots;
|
|
996
|
+
/** Whether each line currently being processed arrived as a prompt — the
|
|
997
|
+
* fallback isPrompt() reads once a trigger has gagged the line itself. A
|
|
998
|
+
* stack for the same reason {@link lineColorSnapshots} is one. */
|
|
999
|
+
private triggerLinePrompts;
|
|
1000
|
+
/** How many lines are being processed at once — more than one whenever a
|
|
1001
|
+
* trigger calls feedTriggers. See beginLine/endLine. */
|
|
1002
|
+
private triggerLineDepth;
|
|
1003
|
+
/** Per nested line, the line the outer pass was on. See beginLine. */
|
|
1004
|
+
private outerTriggerLines;
|
|
1005
|
+
/** Told when text is inserted into the line a trigger is matching, so the
|
|
1006
|
+
* runtime can move the capture positions it recorded at match time —
|
|
1007
|
+
* otherwise `selectCaptureGroup` after an `insertText` selects the text
|
|
1008
|
+
* that has since slid to where the capture used to be. */
|
|
1009
|
+
private captureShiftHook;
|
|
1010
|
+
setCaptureShiftHook(fn: ((at: number, delta: number) => void) | null): void;
|
|
846
1011
|
/**
|
|
847
1012
|
* Flush echo output collected during the just-processed line's trigger run.
|
|
848
1013
|
* Called once per line (right after that line is rendered) so a trigger's
|
|
@@ -882,6 +1047,16 @@ export declare class ScriptingAPI {
|
|
|
882
1047
|
enableHorizontalScrollBar(windowName?: string): void;
|
|
883
1048
|
disableScrolling(windowName?: string): boolean;
|
|
884
1049
|
enableScrolling(windowName?: string): boolean;
|
|
1050
|
+
/** Mudlet `timeStampsEnabled(window)` — whether the console shows its
|
|
1051
|
+
* timestamp column. Null when no such window exists. */
|
|
1052
|
+
timeStampsEnabled(windowName: string): boolean | null;
|
|
1053
|
+
/** Mudlet `enableTimeStamps(window)` / `disableTimeStamps(window)`. False
|
|
1054
|
+
* when no such window exists. */
|
|
1055
|
+
setTimeStamps(windowName: string, visible: boolean): boolean;
|
|
1056
|
+
/** Mudlet `scrollingActive([window])` — whether the user can scroll back in
|
|
1057
|
+
* this console. True unless disableScrolling was called on it; the main
|
|
1058
|
+
* window is always scrollable. */
|
|
1059
|
+
scrollingActive(windowName?: string): boolean;
|
|
885
1060
|
/** Mudlet getScroll — 0-indexed buffer line at the top of the viewport. In
|
|
886
1061
|
* tail mode reports the last line (Mudlet's mCursorY behaviour at end). */
|
|
887
1062
|
getScroll(windowName?: string): number;
|
|
@@ -915,7 +1090,7 @@ export declare class ScriptingAPI {
|
|
|
915
1090
|
* Sets the scrollback cap (and the round-tripped batch-deletion size).
|
|
916
1091
|
* Returns false when the named console doesn't exist.
|
|
917
1092
|
*/
|
|
918
|
-
setConsoleBufferSize(windowName: string | undefined, linesLimit: number, batchSize?: number): boolean;
|
|
1093
|
+
setConsoleBufferSize(windowName: string | undefined, linesLimit: number, batchSize?: number, useMaximum?: boolean): boolean;
|
|
919
1094
|
getColumnNumber(windowName?: string): number;
|
|
920
1095
|
/** Mudlet `isPrompt()` — reports the per-line prompt flag at the current
|
|
921
1096
|
* cursor position. Lines pushed via beginLine carry the flag, so
|
|
@@ -956,6 +1131,10 @@ export declare class ScriptingAPI {
|
|
|
956
1131
|
* succeeds (persisted on the active profile).
|
|
957
1132
|
*/
|
|
958
1133
|
setWindowWrap(name: string, wrapAt: number): boolean;
|
|
1134
|
+
/** Tell the console the width to break stored lines at, so what `getLines`
|
|
1135
|
+
* reports matches what the window shows. Called whenever the wrap width or
|
|
1136
|
+
* either indent moves. */
|
|
1137
|
+
private applyStoredWrap;
|
|
959
1138
|
/**
|
|
960
1139
|
* Mudlet `getWindowWrap(name) → cols`. Reports the visual wrap width set by
|
|
961
1140
|
* setWindowWrap (0 when unset). For "main" reads the profile's stored
|
|
@@ -1035,25 +1214,29 @@ export declare class ScriptingAPI {
|
|
|
1035
1214
|
*/
|
|
1036
1215
|
deleteMiniConsole(name: string): boolean;
|
|
1037
1216
|
/**
|
|
1038
|
-
* MXP `<FRAME>` (Mudlet 4.21).
|
|
1039
|
-
*
|
|
1040
|
-
*
|
|
1041
|
-
*
|
|
1042
|
-
*
|
|
1043
|
-
* (`LEFT`/`TOP`/`WIDTH`/`HEIGHT`) accepts pixels, `N%` of the main window, or
|
|
1044
|
-
* `Nc` character cells.
|
|
1217
|
+
* MXP `<FRAME>` (Mudlet 4.21). All the layout thinking lives in
|
|
1218
|
+
* {@link MxpFrameManager}, a port of Mudlet's TMxpFrameManager — edge tiling
|
|
1219
|
+
* with accumulating borders, `<DEST>`-nested sub-frames, `TITLE` tab headers
|
|
1220
|
+
* and `DOCK` tab groups. This just owns the manager and satisfies its host
|
|
1221
|
+
* interface below. `dest` is the `<DEST>` frame open when the tag was parsed.
|
|
1045
1222
|
*/
|
|
1046
|
-
mxpFrame(name: string, attrs: Record<string, string
|
|
1223
|
+
mxpFrame(name: string, attrs: Record<string, string>, dest?: string): void;
|
|
1224
|
+
/** Tear every MXP frame down. MXP frames are per-connection state in Mudlet
|
|
1225
|
+
* (TMxpFrameManager::resetAllFrames), so a reconnect starts from a clean
|
|
1226
|
+
* main window rather than inheriting the last session's layout. */
|
|
1227
|
+
mxpResetFrames(): void;
|
|
1047
1228
|
/**
|
|
1048
|
-
* Write an MXP `<DEST>` redirected line into a frame's
|
|
1049
|
-
* false when no
|
|
1050
|
-
*
|
|
1051
|
-
*
|
|
1229
|
+
* Write an MXP `<DEST>` redirected line into a frame's console. Returns
|
|
1230
|
+
* false when no such frame exists (the caller then renders the text inline
|
|
1231
|
+
* in the main window, matching Mudlet). `eof` clears the frame first — the
|
|
1232
|
+
* status-frame "replace contents" idiom.
|
|
1052
1233
|
*/
|
|
1053
1234
|
mxpWriteToFrame(name: string, buffer: AnsiAwareBuffer, eof: boolean): boolean;
|
|
1054
|
-
/**
|
|
1055
|
-
*
|
|
1056
|
-
|
|
1235
|
+
/** Frames that have been written with `<DEST … EOF>` at least once, i.e. the
|
|
1236
|
+
* server treats them as replace-contents panes. Learned rather than
|
|
1237
|
+
* declared: MXP has no attribute for it. */
|
|
1238
|
+
private readonly mxpReplacedFrames;
|
|
1239
|
+
private readonly mxpFrames;
|
|
1057
1240
|
/**
|
|
1058
1241
|
* Mudlet `createBuffer(name)`. Registers a named off-screen console for
|
|
1059
1242
|
* formatting and storing rich text — like a miniconsole, but never shown
|
|
@@ -1072,6 +1255,13 @@ export declare class ScriptingAPI {
|
|
|
1072
1255
|
* but doesn't own the active selection.
|
|
1073
1256
|
*/
|
|
1074
1257
|
copy(windowName?: string): void;
|
|
1258
|
+
/**
|
|
1259
|
+
* Mudlet `cut()`. `copy()` and then delete what was copied, so the clipboard
|
|
1260
|
+
* holds exactly the text the line lost (TConsole::cut → TBuffer::cut). Takes
|
|
1261
|
+
* no window argument in Mudlet — it always acts on the main console — and is
|
|
1262
|
+
* a no-op without a selection there.
|
|
1263
|
+
*/
|
|
1264
|
+
cut(): void;
|
|
1075
1265
|
/**
|
|
1076
1266
|
* Mudlet `appendBuffer([window])`. Appends the clipboard's rich text (from
|
|
1077
1267
|
* the last `copy()`) as a new line at the end of the named console's buffer.
|
|
@@ -1089,9 +1279,10 @@ export declare class ScriptingAPI {
|
|
|
1089
1279
|
* Mudlet `createMapper([parent,] x, y, width, height)`. Creates a positioned
|
|
1090
1280
|
* mapper widget inside the given parent (defaults to `main`), or repositions
|
|
1091
1281
|
* it if it already exists. Singleton: Mudlet allows only one in-console
|
|
1092
|
-
* mapper at a time, so we reuse a fixed id
|
|
1093
|
-
*
|
|
1094
|
-
*
|
|
1282
|
+
* mapper at a time, so we reuse a fixed id — distinct from the dockable map
|
|
1283
|
+
* widget opened by `openMapWidget`. Both are client-owned ids (see
|
|
1284
|
+
* MAPPER_WIDGET_ID) so a script or a MUD cannot name a window over them.
|
|
1285
|
+
* Both render the same MapStore and stay in sync. Returns true on success.
|
|
1095
1286
|
*/
|
|
1096
1287
|
createMapper(x: number, y: number, width: number, height: number, parent?: string): boolean;
|
|
1097
1288
|
/**
|
|
@@ -1185,6 +1376,35 @@ export declare class ScriptingAPI {
|
|
|
1185
1376
|
clearCmdLineSuggestions(): void;
|
|
1186
1377
|
getCmdLineSuggestions(): string[];
|
|
1187
1378
|
private emitCmdLineSuggestions;
|
|
1379
|
+
private cmdLineBlacklist;
|
|
1380
|
+
addCmdLineBlacklist(word: string): void;
|
|
1381
|
+
removeCmdLineBlacklist(word: string): void;
|
|
1382
|
+
clearCmdLineBlacklist(): void;
|
|
1383
|
+
getCmdLineBlacklist(): string[];
|
|
1384
|
+
private emitCmdLineBlacklist;
|
|
1385
|
+
private saveCommandHistoryFlags;
|
|
1386
|
+
saveCommandHistoryFor(cmdLineName: string): boolean;
|
|
1387
|
+
setSaveCommandHistoryFor(cmdLineName: string, save: boolean): void;
|
|
1388
|
+
/**
|
|
1389
|
+
* The command-line history files an end-of-session save should write, as
|
|
1390
|
+
* `{ name, content }` pairs relative to the profile directory. Empty when
|
|
1391
|
+
* nothing is to be written.
|
|
1392
|
+
*
|
|
1393
|
+
* Mudlet does this from `Host::saveProfile()`, which emits
|
|
1394
|
+
* `signal_saveCommandLinesHistory` and lets every TCommandLine write its own
|
|
1395
|
+
* `command_history_<name>` — newest command first, one per line, capped at
|
|
1396
|
+
* the profile-wide save size. Both switches have to be on: the size, and the
|
|
1397
|
+
* command line's own flag.
|
|
1398
|
+
*
|
|
1399
|
+
* Only the main bar has a history to write. mudix's Geyser command lines
|
|
1400
|
+
* keep none, so unlike Mudlet there are no numbered files beside it — the
|
|
1401
|
+
* shape is here rather than a bare `saveMainHistory()` so that one gaining a
|
|
1402
|
+
* history is a change in this function alone.
|
|
1403
|
+
*/
|
|
1404
|
+
commandLineHistoryFiles(): {
|
|
1405
|
+
name: string;
|
|
1406
|
+
content: string;
|
|
1407
|
+
}[];
|
|
1188
1408
|
/**
|
|
1189
1409
|
* Mudlet `openUrl(url) → bool`. Opens a URL in a new browser tab. Special
|
|
1190
1410
|
* case: a `file:` prefix (as in `openUrl("file:" .. getMudletHomeDir())`)
|
|
@@ -1226,13 +1446,26 @@ export declare class ScriptingAPI {
|
|
|
1226
1446
|
private removeOwnedStyleTags;
|
|
1227
1447
|
setAppStyleSheet(css: string, tag?: string): boolean;
|
|
1228
1448
|
setUserWindowStyleSheet(name: string, css: string): boolean;
|
|
1449
|
+
/** Mudlet `getUserWindowStyleSheet(name)` — the QSS as it was set. */
|
|
1450
|
+
getUserWindowStyleSheet(name: string): string;
|
|
1451
|
+
private readonly userWindowCss;
|
|
1452
|
+
/** Mudlet `getCmdLineStyleSheet([name])`. Same story as above: the command
|
|
1453
|
+
* line's authored QSS, not the CSS the overlay ends up with. "main" is the
|
|
1454
|
+
* default and has no widget of its own to read back from. */
|
|
1455
|
+
getCmdLineStyleSheet(name: string): string;
|
|
1456
|
+
noteCmdLineStyleSheet(name: string, css: string): void;
|
|
1457
|
+
private readonly cmdLineCss;
|
|
1229
1458
|
/**
|
|
1230
1459
|
* Mudlet `setProfileStyleSheet(stylesheet)`. Installs (or replaces) a
|
|
1231
1460
|
* profile-wide CSS block. In Mudlet this themes the whole profile's
|
|
1232
1461
|
* widgets; the browser analogue is a single `<style>` tag in document.head,
|
|
1233
1462
|
* keyed separately from setAppStyleSheet's blocks so the two don't clobber
|
|
1234
|
-
* each other.
|
|
1235
|
-
*
|
|
1463
|
+
* each other. Always returns true.
|
|
1464
|
+
*
|
|
1465
|
+
* Deliberately raises NO sysAppStyleSheetChange: that event announces an
|
|
1466
|
+
* *application*-level change, and a profile sheet is not one. Raising it
|
|
1467
|
+
* here (as mudix used to) told every profile-agnostic theme handler to
|
|
1468
|
+
* re-apply itself over a change that was never theirs.
|
|
1236
1469
|
*/
|
|
1237
1470
|
setProfileStyleSheet(css: string): boolean;
|
|
1238
1471
|
/**
|
|
@@ -1296,9 +1529,30 @@ export declare class ScriptingAPI {
|
|
|
1296
1529
|
get mouseEvents(): import("../ui/MouseEventRegistry").MouseEventRegistry;
|
|
1297
1530
|
get sounds(): import("../ui/sound/SoundManager").SoundManager;
|
|
1298
1531
|
get videos(): import("../ui/video/VideoManager").VideoManager;
|
|
1299
|
-
/**
|
|
1300
|
-
*
|
|
1301
|
-
|
|
1532
|
+
/**
|
|
1533
|
+
* Mudlet `setMapBackgroundColor(r, g, b [, a])`. Persists into the profile
|
|
1534
|
+
* mapper settings so MapPanel picks it up on its next render pass.
|
|
1535
|
+
*
|
|
1536
|
+
* Returns the refusal message for a component outside 0-255 and `null` on
|
|
1537
|
+
* success — Bridge.lua turns the former into Mudlet's `(nil, errMsg)` pair.
|
|
1538
|
+
* The alpha is optional and defaults to opaque; it is stored only when it is
|
|
1539
|
+
* not, so an ordinary colour stays the plain `#rrggbb` the renderer and the
|
|
1540
|
+
* Mapper tab have always written.
|
|
1541
|
+
*/
|
|
1542
|
+
setMapBackgroundColor(r: number, g: number, b: number, a?: number): string | null;
|
|
1543
|
+
/** Mudlet `getMapBackgroundColor()` — the four components of the colour
|
|
1544
|
+
* {@link setMapBackgroundColor} stored, alpha included. */
|
|
1545
|
+
getMapBackgroundColor(): [number, number, number, number];
|
|
1546
|
+
/** Mudlet `setMapRoomExitsColor(r, g, b)`. The exit pen carries no alpha
|
|
1547
|
+
* either way, so this is the renderer's `lineColor` and nothing else. */
|
|
1548
|
+
setMapRoomExitsColor(r: number, g: number, b: number): string | null;
|
|
1549
|
+
/** Mudlet `getMapRoomExitsColor()` — three components, no alpha. */
|
|
1550
|
+
getMapRoomExitsColor(): [number, number, number];
|
|
1551
|
+
/** Mudlet `setDefaultAreaVisible(visible)`. Mudlet's `TMap::mShowDefaultArea`
|
|
1552
|
+
* decides whether the unnamed catch-all area rooms land in before they are
|
|
1553
|
+
* filed anywhere shows up in the area list; here that list is MapPanel's
|
|
1554
|
+
* area dropdown, which reads the same flag. */
|
|
1555
|
+
setDefaultAreaVisible(visible: boolean): boolean;
|
|
1302
1556
|
/** Mudlet `setMapRoomSize(size)`. Maps to renderer.settings.roomSize via
|
|
1303
1557
|
* the profile mapper field. Returns false for non-positive values. */
|
|
1304
1558
|
setMapRoomSize(size: number): boolean;
|
|
@@ -1343,6 +1597,24 @@ export declare class ScriptingAPI {
|
|
|
1343
1597
|
* Returns true on success, false when no connectionId is bound.
|
|
1344
1598
|
*/
|
|
1345
1599
|
saveWindowLayout(): boolean;
|
|
1600
|
+
/** Where Mudlet keeps the window layout: beside the profiles folder, not
|
|
1601
|
+
* inside one, because the layout is the application's rather than any one
|
|
1602
|
+
* profile's. Null when there is no VFS to write into. */
|
|
1603
|
+
private windowLayoutPath;
|
|
1604
|
+
/**
|
|
1605
|
+
* Mirror the snapshot to `windowLayout.dat`.
|
|
1606
|
+
*
|
|
1607
|
+
* The store is still where a layout survives a reload — this file is the
|
|
1608
|
+
* Mudlet-shaped copy, so a script (or a person poking at the profile
|
|
1609
|
+
* filesystem) finds the layout where Mudlet puts it and can read it. It is
|
|
1610
|
+
* JSON rather than Mudlet's `QMainWindow::saveState` blob: nothing outside
|
|
1611
|
+
* mudix reads it, and those bytes describe Qt dock widgets that have no
|
|
1612
|
+
* counterpart here.
|
|
1613
|
+
*/
|
|
1614
|
+
private writeWindowLayoutFile;
|
|
1615
|
+
/** The snapshot in `windowLayout.dat`, or null when there is no readable,
|
|
1616
|
+
* parsable file — in which case the caller falls back to the store. */
|
|
1617
|
+
private readWindowLayoutFile;
|
|
1346
1618
|
/**
|
|
1347
1619
|
* Mudlet `loadWindowLayout()` — restore the most recently saved snapshot
|
|
1348
1620
|
* for this connection. Re-applies geometry, dock state, font/colour, and
|
|
@@ -1670,6 +1942,11 @@ export declare class ScriptingAPI {
|
|
|
1670
1942
|
flushOutput(): void;
|
|
1671
1943
|
/** @deprecated use echo() */
|
|
1672
1944
|
print(text: string): void;
|
|
1945
|
+
/** Mudlet `Host::postMessage`. Writes a client message onto the main
|
|
1946
|
+
* console whatever the profile's error-echo preference — this is the
|
|
1947
|
+
* client telling the player something about the line in front of them,
|
|
1948
|
+
* not a script's error. */
|
|
1949
|
+
postSystemMessage(text: string): void;
|
|
1673
1950
|
printError(text: string, source?: ScriptLogSource): void;
|
|
1674
1951
|
destroy(): void;
|
|
1675
1952
|
private getConsole;
|