@bobfrankston/msger 0.1.82 → 0.1.83
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/README.md +15 -4
- package/cli.d.ts.map +1 -1
- package/cli.js +72 -5
- package/cli.js.map +1 -1
- package/cli.ts +54 -5
- package/clihandler.d.ts +11 -0
- package/clihandler.d.ts.map +1 -1
- package/clihandler.js +152 -1
- package/clihandler.js.map +1 -1
- package/clihandler.ts +152 -2
- package/msger-native/Cargo.toml +0 -1
- package/msger-native/bin/msgernative.exe +0 -0
- package/msger-native/src/main.rs +28 -240
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -81,16 +81,27 @@ msger --help
|
|
|
81
81
|
|
|
82
82
|
## JSON Configuration Files
|
|
83
83
|
|
|
84
|
-
You can store message box configuration in a JSON file for reuse
|
|
84
|
+
You can store message box configuration in a JSON file for reuse. JSON files support comments (JSON5 format).
|
|
85
85
|
|
|
86
86
|
```bash
|
|
87
87
|
# Load configuration from file
|
|
88
|
-
msger config.json
|
|
88
|
+
msger -load config.json
|
|
89
89
|
|
|
90
|
-
# Override specific values
|
|
91
|
-
msger config.json
|
|
90
|
+
# Override specific values from loaded config
|
|
91
|
+
msger -load config.json -title "New Title" -size 800,600
|
|
92
|
+
|
|
93
|
+
# Save current command-line options to a file (only saves explicitly specified values)
|
|
94
|
+
msger -title "My Dialog" -message "Hello" -buttons Yes No -save my-config.json
|
|
95
|
+
|
|
96
|
+
# Load base config, override, and save the overrides
|
|
97
|
+
msger -load base.json -title "Modified" -save modified.json
|
|
98
|
+
|
|
99
|
+
# Save and show (saves config then displays the message box)
|
|
100
|
+
msger -title "Test" -message "Saving config..." -save test.json
|
|
92
101
|
```
|
|
93
102
|
|
|
103
|
+
**Note:** The `-save` option saves only the explicitly specified command-line arguments, not derived defaults. This keeps config files minimal and allows defaults to evolve.
|
|
104
|
+
|
|
94
105
|
### Complete JSON Structure
|
|
95
106
|
|
|
96
107
|
```json
|
package/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["cli.ts"],"names":[],"mappings":";AAKA,wBAA8B,IAAI,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["cli.ts"],"names":[],"mappings":";AAKA,wBAA8B,IAAI,kBA8GjC"}
|
package/cli.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { showMessageBox } from './shower.js';
|
|
3
|
-
import { parseCliArgs, showHelp, showVersion } from './clihandler.js';
|
|
3
|
+
import { parseCliArgs, showHelp, showVersion, loadConfigFile, saveConfigFile } from './clihandler.js';
|
|
4
4
|
export default async function main() {
|
|
5
5
|
const args = process.argv.slice(2);
|
|
6
6
|
// No arguments - show help
|
|
@@ -9,7 +9,57 @@ export default async function main() {
|
|
|
9
9
|
process.exit(0);
|
|
10
10
|
}
|
|
11
11
|
// Parse command line arguments
|
|
12
|
-
const { options, showHelp: shouldShowHelp, showVersion: shouldShowVersion } = parseCliArgs(args);
|
|
12
|
+
const { options, showHelp: shouldShowHelp, showVersion: shouldShowVersion, loadFile, saveFile } = parseCliArgs(args);
|
|
13
|
+
// Load config file if specified
|
|
14
|
+
let finalOptions = options;
|
|
15
|
+
if (loadFile) {
|
|
16
|
+
try {
|
|
17
|
+
const loadedConfig = loadConfigFile(loadFile);
|
|
18
|
+
// Merge: CLI args override loaded config
|
|
19
|
+
// Only override properties that were explicitly set (not undefined/empty)
|
|
20
|
+
finalOptions = { ...loadedConfig };
|
|
21
|
+
if (options.title)
|
|
22
|
+
finalOptions.title = options.title;
|
|
23
|
+
if (options.message)
|
|
24
|
+
finalOptions.message = options.message;
|
|
25
|
+
if (options.html)
|
|
26
|
+
finalOptions.html = options.html;
|
|
27
|
+
if (options.url)
|
|
28
|
+
finalOptions.url = options.url;
|
|
29
|
+
if (options.size)
|
|
30
|
+
finalOptions.size = options.size;
|
|
31
|
+
if (options.pos)
|
|
32
|
+
finalOptions.pos = options.pos;
|
|
33
|
+
if (options.buttons && options.buttons.length > 0)
|
|
34
|
+
finalOptions.buttons = options.buttons;
|
|
35
|
+
if (options.allowInput !== undefined)
|
|
36
|
+
finalOptions.allowInput = options.allowInput;
|
|
37
|
+
if (options.defaultValue)
|
|
38
|
+
finalOptions.defaultValue = options.defaultValue;
|
|
39
|
+
if (options.inputPlaceholder)
|
|
40
|
+
finalOptions.inputPlaceholder = options.inputPlaceholder;
|
|
41
|
+
if (options.timeout !== undefined)
|
|
42
|
+
finalOptions.timeout = options.timeout;
|
|
43
|
+
if (options.alwaysOnTop !== undefined)
|
|
44
|
+
finalOptions.alwaysOnTop = options.alwaysOnTop;
|
|
45
|
+
if (options.fullscreen !== undefined)
|
|
46
|
+
finalOptions.fullscreen = options.fullscreen;
|
|
47
|
+
if (options.zoomPercent !== undefined)
|
|
48
|
+
finalOptions.zoomPercent = options.zoomPercent;
|
|
49
|
+
if (options.icon)
|
|
50
|
+
finalOptions.icon = options.icon;
|
|
51
|
+
if (options.dev !== undefined)
|
|
52
|
+
finalOptions.dev = options.dev;
|
|
53
|
+
if (options.debug !== undefined)
|
|
54
|
+
finalOptions.debug = options.debug;
|
|
55
|
+
if (options.detach !== undefined)
|
|
56
|
+
finalOptions.detach = options.detach;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
console.error('Error loading config:', error.message);
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
13
63
|
// Help always takes precedence and exits
|
|
14
64
|
if (shouldShowHelp) {
|
|
15
65
|
showHelp();
|
|
@@ -29,15 +79,32 @@ export default async function main() {
|
|
|
29
79
|
if (shouldShowVersion) {
|
|
30
80
|
showVersion();
|
|
31
81
|
}
|
|
82
|
+
// Save config file if specified
|
|
83
|
+
if (saveFile) {
|
|
84
|
+
try {
|
|
85
|
+
// Save only the explicit CLI arguments, not the merged/derived settings
|
|
86
|
+
// This preserves defaults as defaults
|
|
87
|
+
saveConfigFile(saveFile, options);
|
|
88
|
+
console.log(`Configuration saved to: ${saveFile}`);
|
|
89
|
+
// If save was the only operation (no content to show), exit
|
|
90
|
+
if (!finalOptions.message && !finalOptions.url && !finalOptions.html) {
|
|
91
|
+
process.exit(0);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
console.error('Error saving config:', error.message);
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
32
99
|
// If no actual message/content was provided, show help
|
|
33
|
-
if (!
|
|
100
|
+
if (!finalOptions.message && !finalOptions.url && !finalOptions.html) {
|
|
34
101
|
showHelp();
|
|
35
102
|
process.exit(0);
|
|
36
103
|
}
|
|
37
104
|
try {
|
|
38
|
-
const result = await showMessageBox(
|
|
105
|
+
const result = await showMessageBox(finalOptions);
|
|
39
106
|
// If detached, exit immediately without printing result
|
|
40
|
-
if (
|
|
107
|
+
if (finalOptions.detach) {
|
|
41
108
|
process.exit(0);
|
|
42
109
|
}
|
|
43
110
|
console.log(JSON.stringify(result, null, 2));
|
package/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["cli.ts"],"names":[],"mappings":"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"}
|
package/cli.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
import { showMessageBox } from './shower.js';
|
|
4
|
-
import { parseCliArgs, showHelp, showVersion } from './clihandler.js';
|
|
4
|
+
import { parseCliArgs, showHelp, showVersion, loadConfigFile, saveConfigFile } from './clihandler.js';
|
|
5
5
|
|
|
6
6
|
export default async function main() {
|
|
7
7
|
const args = process.argv.slice(2);
|
|
@@ -13,7 +13,39 @@ export default async function main() {
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
// Parse command line arguments
|
|
16
|
-
const { options, showHelp: shouldShowHelp, showVersion: shouldShowVersion } = parseCliArgs(args);
|
|
16
|
+
const { options, showHelp: shouldShowHelp, showVersion: shouldShowVersion, loadFile, saveFile } = parseCliArgs(args);
|
|
17
|
+
|
|
18
|
+
// Load config file if specified
|
|
19
|
+
let finalOptions = options;
|
|
20
|
+
if (loadFile) {
|
|
21
|
+
try {
|
|
22
|
+
const loadedConfig = loadConfigFile(loadFile);
|
|
23
|
+
// Merge: CLI args override loaded config
|
|
24
|
+
// Only override properties that were explicitly set (not undefined/empty)
|
|
25
|
+
finalOptions = { ...loadedConfig };
|
|
26
|
+
if (options.title) finalOptions.title = options.title;
|
|
27
|
+
if (options.message) finalOptions.message = options.message;
|
|
28
|
+
if (options.html) finalOptions.html = options.html;
|
|
29
|
+
if (options.url) finalOptions.url = options.url;
|
|
30
|
+
if (options.size) finalOptions.size = options.size;
|
|
31
|
+
if (options.pos) finalOptions.pos = options.pos;
|
|
32
|
+
if (options.buttons && options.buttons.length > 0) finalOptions.buttons = options.buttons;
|
|
33
|
+
if (options.allowInput !== undefined) finalOptions.allowInput = options.allowInput;
|
|
34
|
+
if (options.defaultValue) finalOptions.defaultValue = options.defaultValue;
|
|
35
|
+
if (options.inputPlaceholder) finalOptions.inputPlaceholder = options.inputPlaceholder;
|
|
36
|
+
if (options.timeout !== undefined) finalOptions.timeout = options.timeout;
|
|
37
|
+
if (options.alwaysOnTop !== undefined) finalOptions.alwaysOnTop = options.alwaysOnTop;
|
|
38
|
+
if (options.fullscreen !== undefined) finalOptions.fullscreen = options.fullscreen;
|
|
39
|
+
if (options.zoomPercent !== undefined) finalOptions.zoomPercent = options.zoomPercent;
|
|
40
|
+
if (options.icon) finalOptions.icon = options.icon;
|
|
41
|
+
if (options.dev !== undefined) finalOptions.dev = options.dev;
|
|
42
|
+
if (options.debug !== undefined) finalOptions.debug = options.debug;
|
|
43
|
+
if (options.detach !== undefined) finalOptions.detach = options.detach;
|
|
44
|
+
} catch (error: any) {
|
|
45
|
+
console.error('Error loading config:', error.message);
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
17
49
|
|
|
18
50
|
// Help always takes precedence and exits
|
|
19
51
|
if (shouldShowHelp) {
|
|
@@ -40,17 +72,34 @@ export default async function main() {
|
|
|
40
72
|
showVersion();
|
|
41
73
|
}
|
|
42
74
|
|
|
75
|
+
// Save config file if specified
|
|
76
|
+
if (saveFile) {
|
|
77
|
+
try {
|
|
78
|
+
// Save only the explicit CLI arguments, not the merged/derived settings
|
|
79
|
+
// This preserves defaults as defaults
|
|
80
|
+
saveConfigFile(saveFile, options);
|
|
81
|
+
console.log(`Configuration saved to: ${saveFile}`);
|
|
82
|
+
// If save was the only operation (no content to show), exit
|
|
83
|
+
if (!finalOptions.message && !finalOptions.url && !finalOptions.html) {
|
|
84
|
+
process.exit(0);
|
|
85
|
+
}
|
|
86
|
+
} catch (error: any) {
|
|
87
|
+
console.error('Error saving config:', error.message);
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
43
92
|
// If no actual message/content was provided, show help
|
|
44
|
-
if (!
|
|
93
|
+
if (!finalOptions.message && !finalOptions.url && !finalOptions.html) {
|
|
45
94
|
showHelp();
|
|
46
95
|
process.exit(0);
|
|
47
96
|
}
|
|
48
97
|
|
|
49
98
|
try {
|
|
50
|
-
const result = await showMessageBox(
|
|
99
|
+
const result = await showMessageBox(finalOptions);
|
|
51
100
|
|
|
52
101
|
// If detached, exit immediately without printing result
|
|
53
|
-
if (
|
|
102
|
+
if (finalOptions.detach) {
|
|
54
103
|
process.exit(0);
|
|
55
104
|
}
|
|
56
105
|
|
package/clihandler.d.ts
CHANGED
|
@@ -6,7 +6,18 @@ export declare function parseCliArgs(args: string[]): {
|
|
|
6
6
|
options: MessageBoxOptions;
|
|
7
7
|
showHelp: boolean;
|
|
8
8
|
showVersion: boolean;
|
|
9
|
+
loadFile?: string;
|
|
10
|
+
saveFile?: string;
|
|
9
11
|
};
|
|
12
|
+
/**
|
|
13
|
+
* Load configuration from JSON file (supports JSON with comments)
|
|
14
|
+
*/
|
|
15
|
+
export declare function loadConfigFile(filePath: string): Partial<MessageBoxOptions>;
|
|
16
|
+
/**
|
|
17
|
+
* Save configuration to JSON file with helpful comments
|
|
18
|
+
* Only saves non-default values to keep the file minimal
|
|
19
|
+
*/
|
|
20
|
+
export declare function saveConfigFile(filePath: string, options: MessageBoxOptions): void;
|
|
10
21
|
export declare function showHelp(): void;
|
|
11
22
|
export declare function showVersion(): void;
|
|
12
23
|
//# sourceMappingURL=clihandler.d.ts.map
|
package/clihandler.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clihandler.d.ts","sourceRoot":"","sources":["clihandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"clihandler.d.ts","sourceRoot":"","sources":["clihandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAmGhD;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IAC1C,OAAO,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,CAuOA;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAgB3E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAoGjF;AAED,wBAAgB,QAAQ,IAAI,IAAI,CAE/B;AAED,wBAAgB,WAAW,IAAI,IAAI,CAElC"}
|
package/clihandler.js
CHANGED
|
@@ -2,6 +2,7 @@ import packageJson from './package.json' with { type: 'json' };
|
|
|
2
2
|
import fs from 'fs';
|
|
3
3
|
import path from 'path';
|
|
4
4
|
import { execSync } from 'child_process';
|
|
5
|
+
import JSON5 from 'json5';
|
|
5
6
|
const HELP_TEXT = `
|
|
6
7
|
msger v${packageJson.version} - Fast, lightweight, cross-platform message box (Rust-powered)
|
|
7
8
|
|
|
@@ -31,6 +32,8 @@ Options:
|
|
|
31
32
|
-detach Leave window open after app exits (parent process returns immediately)
|
|
32
33
|
-fullscreen Start window in fullscreen mode (F11 to toggle, Escape to exit)
|
|
33
34
|
-ontop Keep window always on top of other windows
|
|
35
|
+
-load <file> Load options from JSON file (supports comments)
|
|
36
|
+
-save <file> Save current options to JSON file
|
|
34
37
|
-dev Open DevTools (F12) automatically on startup (for debugging)
|
|
35
38
|
-debug Return debug info (HTML, size) in result
|
|
36
39
|
-v, -version, --version Show version number
|
|
@@ -191,6 +194,14 @@ export function parseCliArgs(args) {
|
|
|
191
194
|
cli.debug = true;
|
|
192
195
|
i++;
|
|
193
196
|
}
|
|
197
|
+
else if (arg === '-load' || arg === '--load') {
|
|
198
|
+
cli.load = args[++i];
|
|
199
|
+
i++;
|
|
200
|
+
}
|
|
201
|
+
else if (arg === '-save' || arg === '--save') {
|
|
202
|
+
cli.save = args[++i];
|
|
203
|
+
i++;
|
|
204
|
+
}
|
|
194
205
|
else if (!arg.startsWith('-')) {
|
|
195
206
|
// Non-option argument - part of the message
|
|
196
207
|
messageWords.push(arg);
|
|
@@ -308,7 +319,147 @@ export function parseCliArgs(args) {
|
|
|
308
319
|
options.pos.screen = cli.screen;
|
|
309
320
|
}
|
|
310
321
|
}
|
|
311
|
-
return {
|
|
322
|
+
return {
|
|
323
|
+
options,
|
|
324
|
+
showHelp: cli.help || false,
|
|
325
|
+
showVersion: cli.version || false,
|
|
326
|
+
loadFile: cli.load,
|
|
327
|
+
saveFile: cli.save
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Load configuration from JSON file (supports JSON with comments)
|
|
332
|
+
*/
|
|
333
|
+
export function loadConfigFile(filePath) {
|
|
334
|
+
const absolutePath = path.resolve(filePath);
|
|
335
|
+
if (!fs.existsSync(absolutePath)) {
|
|
336
|
+
throw new Error(`Config file not found: ${absolutePath}`);
|
|
337
|
+
}
|
|
338
|
+
const fileContent = fs.readFileSync(absolutePath, 'utf-8');
|
|
339
|
+
try {
|
|
340
|
+
// Use JSON5 to parse (supports comments and trailing commas)
|
|
341
|
+
const config = JSON5.parse(fileContent);
|
|
342
|
+
return config;
|
|
343
|
+
}
|
|
344
|
+
catch (error) {
|
|
345
|
+
throw new Error(`Failed to parse config file ${filePath}: ${error.message}`);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Save configuration to JSON file with helpful comments
|
|
350
|
+
* Only saves non-default values to keep the file minimal
|
|
351
|
+
*/
|
|
352
|
+
export function saveConfigFile(filePath, options) {
|
|
353
|
+
const absolutePath = path.resolve(filePath);
|
|
354
|
+
// Create a clean object without undefined values or defaults
|
|
355
|
+
const config = {};
|
|
356
|
+
if (options.title && options.title !== 'Message')
|
|
357
|
+
config.title = options.title;
|
|
358
|
+
if (options.message)
|
|
359
|
+
config.message = options.message;
|
|
360
|
+
if (options.html)
|
|
361
|
+
config.html = options.html;
|
|
362
|
+
if (options.url)
|
|
363
|
+
config.url = options.url;
|
|
364
|
+
// Only save size if explicitly set
|
|
365
|
+
if (options.size)
|
|
366
|
+
config.size = options.size;
|
|
367
|
+
if (options.pos)
|
|
368
|
+
config.pos = options.pos;
|
|
369
|
+
// Only save buttons if not the default ['OK']
|
|
370
|
+
if (options.buttons && options.buttons.length > 0 && JSON.stringify(options.buttons) !== '["OK"]') {
|
|
371
|
+
config.buttons = options.buttons;
|
|
372
|
+
}
|
|
373
|
+
if (options.allowInput)
|
|
374
|
+
config.allowInput = options.allowInput;
|
|
375
|
+
if (options.defaultValue)
|
|
376
|
+
config.defaultValue = options.defaultValue;
|
|
377
|
+
if (options.inputPlaceholder)
|
|
378
|
+
config.inputPlaceholder = options.inputPlaceholder;
|
|
379
|
+
if (options.timeout)
|
|
380
|
+
config.timeout = options.timeout;
|
|
381
|
+
if (options.alwaysOnTop)
|
|
382
|
+
config.alwaysOnTop = options.alwaysOnTop;
|
|
383
|
+
if (options.fullscreen)
|
|
384
|
+
config.fullscreen = options.fullscreen;
|
|
385
|
+
if (options.zoomPercent && options.zoomPercent !== 100)
|
|
386
|
+
config.zoomPercent = options.zoomPercent;
|
|
387
|
+
if (options.icon)
|
|
388
|
+
config.icon = options.icon;
|
|
389
|
+
if (options.dev)
|
|
390
|
+
config.dev = options.dev;
|
|
391
|
+
if (options.debug)
|
|
392
|
+
config.debug = options.debug;
|
|
393
|
+
// Build JSON content - only include non-empty sections
|
|
394
|
+
const sections = [];
|
|
395
|
+
// Title (always include if set)
|
|
396
|
+
if (config.title) {
|
|
397
|
+
sections.push(` // Window title\n "title": ${JSON.stringify(config.title)}`);
|
|
398
|
+
}
|
|
399
|
+
// Message
|
|
400
|
+
if (config.message) {
|
|
401
|
+
sections.push(` // Message content (plain text)\n "message": ${JSON.stringify(config.message)}`);
|
|
402
|
+
}
|
|
403
|
+
// HTML
|
|
404
|
+
if (config.html) {
|
|
405
|
+
sections.push(` // HTML content (overrides message)\n "html": ${JSON.stringify(config.html)}`);
|
|
406
|
+
}
|
|
407
|
+
// URL
|
|
408
|
+
if (config.url) {
|
|
409
|
+
sections.push(` // URL to load (overrides message and html)\n "url": ${JSON.stringify(config.url)}`);
|
|
410
|
+
}
|
|
411
|
+
// Size
|
|
412
|
+
if (config.size) {
|
|
413
|
+
sections.push(` // Window size\n "size": {\n "width": ${config.size.width},\n "height": ${config.size.height}\n }`);
|
|
414
|
+
}
|
|
415
|
+
// Position
|
|
416
|
+
if (config.pos) {
|
|
417
|
+
const screenPart = config.pos.screen !== undefined ? `,\n "screen": ${config.pos.screen}` : '';
|
|
418
|
+
sections.push(` // Window position\n "pos": {\n "x": ${config.pos.x},\n "y": ${config.pos.y}${screenPart}\n }`);
|
|
419
|
+
}
|
|
420
|
+
// Buttons
|
|
421
|
+
if (config.buttons) {
|
|
422
|
+
sections.push(` // Button labels\n "buttons": ${JSON.stringify(config.buttons)}`);
|
|
423
|
+
}
|
|
424
|
+
// Input options
|
|
425
|
+
if (config.allowInput || config.defaultValue || config.inputPlaceholder) {
|
|
426
|
+
const inputParts = [];
|
|
427
|
+
if (config.allowInput)
|
|
428
|
+
inputParts.push(` "allowInput": true`);
|
|
429
|
+
if (config.defaultValue)
|
|
430
|
+
inputParts.push(` "defaultValue": ${JSON.stringify(config.defaultValue)}`);
|
|
431
|
+
if (config.inputPlaceholder)
|
|
432
|
+
inputParts.push(` "inputPlaceholder": ${JSON.stringify(config.inputPlaceholder)}`);
|
|
433
|
+
if (inputParts.length > 0) {
|
|
434
|
+
sections.push(` // Input field options\n${inputParts.join(',\n')}`);
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
// Window behavior
|
|
438
|
+
const behaviorParts = [];
|
|
439
|
+
if (config.alwaysOnTop)
|
|
440
|
+
behaviorParts.push(` "alwaysOnTop": true`);
|
|
441
|
+
if (config.fullscreen)
|
|
442
|
+
behaviorParts.push(` "fullscreen": true`);
|
|
443
|
+
if (config.timeout)
|
|
444
|
+
behaviorParts.push(` "timeout": ${config.timeout}`);
|
|
445
|
+
if (config.zoomPercent)
|
|
446
|
+
behaviorParts.push(` "zoomPercent": ${config.zoomPercent}`);
|
|
447
|
+
if (config.icon)
|
|
448
|
+
behaviorParts.push(` "icon": ${JSON.stringify(config.icon)}`);
|
|
449
|
+
if (behaviorParts.length > 0) {
|
|
450
|
+
sections.push(` // Window behavior\n${behaviorParts.join(',\n')}`);
|
|
451
|
+
}
|
|
452
|
+
// Development options
|
|
453
|
+
const devParts = [];
|
|
454
|
+
if (config.dev)
|
|
455
|
+
devParts.push(` "dev": true`);
|
|
456
|
+
if (config.debug)
|
|
457
|
+
devParts.push(` "debug": true`);
|
|
458
|
+
if (devParts.length > 0) {
|
|
459
|
+
sections.push(` // Development options\n${devParts.join(',\n')}`);
|
|
460
|
+
}
|
|
461
|
+
const jsonContent = `{\n${sections.join(',\n\n')}\n}\n`;
|
|
462
|
+
fs.writeFileSync(absolutePath, jsonContent, 'utf-8');
|
|
312
463
|
}
|
|
313
464
|
export function showHelp() {
|
|
314
465
|
console.log(HELP_TEXT);
|
package/clihandler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clihandler.js","sourceRoot":"","sources":["clihandler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"clihandler.js","sourceRoot":"","sources":["clihandler.ts"],"names":[],"mappings":"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"}
|
package/clihandler.ts
CHANGED
|
@@ -3,6 +3,7 @@ import packageJson from './package.json' with { type: 'json' };
|
|
|
3
3
|
import fs from 'fs';
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import { execSync } from 'child_process';
|
|
6
|
+
import JSON5 from 'json5';
|
|
6
7
|
|
|
7
8
|
interface CliOptions {
|
|
8
9
|
message?: string;
|
|
@@ -29,6 +30,8 @@ interface CliOptions {
|
|
|
29
30
|
dev?: boolean;
|
|
30
31
|
help?: boolean;
|
|
31
32
|
version?: boolean;
|
|
33
|
+
load?: string;
|
|
34
|
+
save?: string;
|
|
32
35
|
}
|
|
33
36
|
|
|
34
37
|
const HELP_TEXT = `
|
|
@@ -60,6 +63,8 @@ Options:
|
|
|
60
63
|
-detach Leave window open after app exits (parent process returns immediately)
|
|
61
64
|
-fullscreen Start window in fullscreen mode (F11 to toggle, Escape to exit)
|
|
62
65
|
-ontop Keep window always on top of other windows
|
|
66
|
+
-load <file> Load options from JSON file (supports comments)
|
|
67
|
+
-save <file> Save current options to JSON file
|
|
63
68
|
-dev Open DevTools (F12) automatically on startup (for debugging)
|
|
64
69
|
-debug Return debug info (HTML, size) in result
|
|
65
70
|
-v, -version, --version Show version number
|
|
@@ -95,7 +100,13 @@ Security Note:
|
|
|
95
100
|
/**
|
|
96
101
|
* Parse command line arguments into message box options
|
|
97
102
|
*/
|
|
98
|
-
export function parseCliArgs(args: string[]): {
|
|
103
|
+
export function parseCliArgs(args: string[]): {
|
|
104
|
+
options: MessageBoxOptions;
|
|
105
|
+
showHelp: boolean;
|
|
106
|
+
showVersion: boolean;
|
|
107
|
+
loadFile?: string;
|
|
108
|
+
saveFile?: string;
|
|
109
|
+
} {
|
|
99
110
|
const cli: CliOptions = {
|
|
100
111
|
buttons: [],
|
|
101
112
|
input: false,
|
|
@@ -196,6 +207,12 @@ export function parseCliArgs(args: string[]): { options: MessageBoxOptions; show
|
|
|
196
207
|
} else if (arg === '-debug' || arg === '--debug') {
|
|
197
208
|
cli.debug = true;
|
|
198
209
|
i++;
|
|
210
|
+
} else if (arg === '-load' || arg === '--load') {
|
|
211
|
+
cli.load = args[++i];
|
|
212
|
+
i++;
|
|
213
|
+
} else if (arg === '-save' || arg === '--save') {
|
|
214
|
+
cli.save = args[++i];
|
|
215
|
+
i++;
|
|
199
216
|
} else if (!arg.startsWith('-')) {
|
|
200
217
|
// Non-option argument - part of the message
|
|
201
218
|
messageWords.push(arg);
|
|
@@ -313,7 +330,140 @@ export function parseCliArgs(args: string[]): { options: MessageBoxOptions; show
|
|
|
313
330
|
}
|
|
314
331
|
}
|
|
315
332
|
|
|
316
|
-
return {
|
|
333
|
+
return {
|
|
334
|
+
options,
|
|
335
|
+
showHelp: cli.help || false,
|
|
336
|
+
showVersion: cli.version || false,
|
|
337
|
+
loadFile: cli.load,
|
|
338
|
+
saveFile: cli.save
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Load configuration from JSON file (supports JSON with comments)
|
|
344
|
+
*/
|
|
345
|
+
export function loadConfigFile(filePath: string): Partial<MessageBoxOptions> {
|
|
346
|
+
const absolutePath = path.resolve(filePath);
|
|
347
|
+
|
|
348
|
+
if (!fs.existsSync(absolutePath)) {
|
|
349
|
+
throw new Error(`Config file not found: ${absolutePath}`);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
const fileContent = fs.readFileSync(absolutePath, 'utf-8');
|
|
353
|
+
|
|
354
|
+
try {
|
|
355
|
+
// Use JSON5 to parse (supports comments and trailing commas)
|
|
356
|
+
const config = JSON5.parse(fileContent);
|
|
357
|
+
return config;
|
|
358
|
+
} catch (error: any) {
|
|
359
|
+
throw new Error(`Failed to parse config file ${filePath}: ${error.message}`);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
* Save configuration to JSON file with helpful comments
|
|
365
|
+
* Only saves non-default values to keep the file minimal
|
|
366
|
+
*/
|
|
367
|
+
export function saveConfigFile(filePath: string, options: MessageBoxOptions): void {
|
|
368
|
+
const absolutePath = path.resolve(filePath);
|
|
369
|
+
|
|
370
|
+
// Create a clean object without undefined values or defaults
|
|
371
|
+
const config: any = {};
|
|
372
|
+
|
|
373
|
+
if (options.title && options.title !== 'Message') config.title = options.title;
|
|
374
|
+
if (options.message) config.message = options.message;
|
|
375
|
+
if (options.html) config.html = options.html;
|
|
376
|
+
if (options.url) config.url = options.url;
|
|
377
|
+
// Only save size if explicitly set
|
|
378
|
+
if (options.size) config.size = options.size;
|
|
379
|
+
if (options.pos) config.pos = options.pos;
|
|
380
|
+
// Only save buttons if not the default ['OK']
|
|
381
|
+
if (options.buttons && options.buttons.length > 0 && JSON.stringify(options.buttons) !== '["OK"]') {
|
|
382
|
+
config.buttons = options.buttons;
|
|
383
|
+
}
|
|
384
|
+
if (options.allowInput) config.allowInput = options.allowInput;
|
|
385
|
+
if (options.defaultValue) config.defaultValue = options.defaultValue;
|
|
386
|
+
if (options.inputPlaceholder) config.inputPlaceholder = options.inputPlaceholder;
|
|
387
|
+
if (options.timeout) config.timeout = options.timeout;
|
|
388
|
+
if (options.alwaysOnTop) config.alwaysOnTop = options.alwaysOnTop;
|
|
389
|
+
if (options.fullscreen) config.fullscreen = options.fullscreen;
|
|
390
|
+
if (options.zoomPercent && options.zoomPercent !== 100) config.zoomPercent = options.zoomPercent;
|
|
391
|
+
if (options.icon) config.icon = options.icon;
|
|
392
|
+
if (options.dev) config.dev = options.dev;
|
|
393
|
+
if (options.debug) config.debug = options.debug;
|
|
394
|
+
|
|
395
|
+
// Build JSON content - only include non-empty sections
|
|
396
|
+
const sections: string[] = [];
|
|
397
|
+
|
|
398
|
+
// Title (always include if set)
|
|
399
|
+
if (config.title) {
|
|
400
|
+
sections.push(` // Window title\n "title": ${JSON.stringify(config.title)}`);
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
// Message
|
|
404
|
+
if (config.message) {
|
|
405
|
+
sections.push(` // Message content (plain text)\n "message": ${JSON.stringify(config.message)}`);
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
// HTML
|
|
409
|
+
if (config.html) {
|
|
410
|
+
sections.push(` // HTML content (overrides message)\n "html": ${JSON.stringify(config.html)}`);
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
// URL
|
|
414
|
+
if (config.url) {
|
|
415
|
+
sections.push(` // URL to load (overrides message and html)\n "url": ${JSON.stringify(config.url)}`);
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
// Size
|
|
419
|
+
if (config.size) {
|
|
420
|
+
sections.push(` // Window size\n "size": {\n "width": ${config.size.width},\n "height": ${config.size.height}\n }`);
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
// Position
|
|
424
|
+
if (config.pos) {
|
|
425
|
+
const screenPart = config.pos.screen !== undefined ? `,\n "screen": ${config.pos.screen}` : '';
|
|
426
|
+
sections.push(` // Window position\n "pos": {\n "x": ${config.pos.x},\n "y": ${config.pos.y}${screenPart}\n }`);
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
// Buttons
|
|
430
|
+
if (config.buttons) {
|
|
431
|
+
sections.push(` // Button labels\n "buttons": ${JSON.stringify(config.buttons)}`);
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
// Input options
|
|
435
|
+
if (config.allowInput || config.defaultValue || config.inputPlaceholder) {
|
|
436
|
+
const inputParts: string[] = [];
|
|
437
|
+
if (config.allowInput) inputParts.push(` "allowInput": true`);
|
|
438
|
+
if (config.defaultValue) inputParts.push(` "defaultValue": ${JSON.stringify(config.defaultValue)}`);
|
|
439
|
+
if (config.inputPlaceholder) inputParts.push(` "inputPlaceholder": ${JSON.stringify(config.inputPlaceholder)}`);
|
|
440
|
+
if (inputParts.length > 0) {
|
|
441
|
+
sections.push(` // Input field options\n${inputParts.join(',\n')}`);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
// Window behavior
|
|
446
|
+
const behaviorParts: string[] = [];
|
|
447
|
+
if (config.alwaysOnTop) behaviorParts.push(` "alwaysOnTop": true`);
|
|
448
|
+
if (config.fullscreen) behaviorParts.push(` "fullscreen": true`);
|
|
449
|
+
if (config.timeout) behaviorParts.push(` "timeout": ${config.timeout}`);
|
|
450
|
+
if (config.zoomPercent) behaviorParts.push(` "zoomPercent": ${config.zoomPercent}`);
|
|
451
|
+
if (config.icon) behaviorParts.push(` "icon": ${JSON.stringify(config.icon)}`);
|
|
452
|
+
if (behaviorParts.length > 0) {
|
|
453
|
+
sections.push(` // Window behavior\n${behaviorParts.join(',\n')}`);
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
// Development options
|
|
457
|
+
const devParts: string[] = [];
|
|
458
|
+
if (config.dev) devParts.push(` "dev": true`);
|
|
459
|
+
if (config.debug) devParts.push(` "debug": true`);
|
|
460
|
+
if (devParts.length > 0) {
|
|
461
|
+
sections.push(` // Development options\n${devParts.join(',\n')}`);
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
const jsonContent = `{\n${sections.join(',\n\n')}\n}\n`;
|
|
465
|
+
|
|
466
|
+
fs.writeFileSync(absolutePath, jsonContent, 'utf-8');
|
|
317
467
|
}
|
|
318
468
|
|
|
319
469
|
export function showHelp(): void {
|
package/msger-native/Cargo.toml
CHANGED
|
@@ -9,7 +9,6 @@ tao = "0.30"
|
|
|
9
9
|
serde = { version = "1.0", features = ["derive"] }
|
|
10
10
|
serde_json = "1.0"
|
|
11
11
|
image = "0.24"
|
|
12
|
-
clap = { version = "4.5", features = ["derive"] }
|
|
13
12
|
|
|
14
13
|
[target.'cfg(windows)'.dependencies]
|
|
15
14
|
windows = { version = "0.58", features = ["Win32_UI_WindowsAndMessaging", "Win32_Foundation", "Win32_UI_Shell"] }
|
|
Binary file
|
package/msger-native/src/main.rs
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
use serde::{Deserialize, Serialize};
|
|
2
2
|
use std::io::{self, Read};
|
|
3
|
-
use std::fs;
|
|
4
3
|
use tao::{
|
|
5
4
|
event::{Event, WindowEvent, ElementState, KeyEvent},
|
|
6
5
|
event_loop::{ControlFlow, EventLoop},
|
|
@@ -9,7 +8,6 @@ use tao::{
|
|
|
9
8
|
platform::windows::WindowExtWindows,
|
|
10
9
|
};
|
|
11
10
|
use wry::{WebViewBuilder, WebContext};
|
|
12
|
-
use clap::Parser;
|
|
13
11
|
|
|
14
12
|
#[cfg(windows)]
|
|
15
13
|
use windows::Win32::UI::WindowsAndMessaging::{
|
|
@@ -58,104 +56,6 @@ unsafe extern "system" fn subclass_proc(
|
|
|
58
56
|
// JavaScript API to inject into webviews
|
|
59
57
|
const MSGER_JS_API: &str = include_str!("msger-api.js");
|
|
60
58
|
|
|
61
|
-
/// Message box application with webview support
|
|
62
|
-
#[derive(Parser, Debug)]
|
|
63
|
-
#[command(name = "msgernative")]
|
|
64
|
-
#[command(about = "Display message boxes with HTML/URL content", long_about = None)]
|
|
65
|
-
struct Cli {
|
|
66
|
-
/// JSON file to load default options from
|
|
67
|
-
#[arg(short, long, value_name = "FILE")]
|
|
68
|
-
json: Option<String>,
|
|
69
|
-
|
|
70
|
-
/// Window title
|
|
71
|
-
#[arg(long)]
|
|
72
|
-
title: Option<String>,
|
|
73
|
-
|
|
74
|
-
/// Plain text message to display
|
|
75
|
-
#[arg(long)]
|
|
76
|
-
message: Option<String>,
|
|
77
|
-
|
|
78
|
-
/// HTML content to display
|
|
79
|
-
#[arg(long)]
|
|
80
|
-
html: Option<String>,
|
|
81
|
-
|
|
82
|
-
/// URL to load
|
|
83
|
-
#[arg(long)]
|
|
84
|
-
url: Option<String>,
|
|
85
|
-
|
|
86
|
-
/// Window width
|
|
87
|
-
#[arg(long)]
|
|
88
|
-
width: Option<i32>,
|
|
89
|
-
|
|
90
|
-
/// Window height
|
|
91
|
-
#[arg(long)]
|
|
92
|
-
height: Option<i32>,
|
|
93
|
-
|
|
94
|
-
/// Window X position
|
|
95
|
-
#[arg(long)]
|
|
96
|
-
x: Option<i32>,
|
|
97
|
-
|
|
98
|
-
/// Window Y position
|
|
99
|
-
#[arg(long)]
|
|
100
|
-
y: Option<i32>,
|
|
101
|
-
|
|
102
|
-
/// Screen number (for multi-monitor setups)
|
|
103
|
-
#[arg(long)]
|
|
104
|
-
screen: Option<i32>,
|
|
105
|
-
|
|
106
|
-
/// Button labels (comma-separated)
|
|
107
|
-
#[arg(long, value_delimiter = ',')]
|
|
108
|
-
buttons: Option<Vec<String>>,
|
|
109
|
-
|
|
110
|
-
/// Default input value
|
|
111
|
-
#[arg(long)]
|
|
112
|
-
default_value: Option<String>,
|
|
113
|
-
|
|
114
|
-
/// Input placeholder text
|
|
115
|
-
#[arg(long)]
|
|
116
|
-
input_placeholder: Option<String>,
|
|
117
|
-
|
|
118
|
-
/// Allow text input
|
|
119
|
-
#[arg(long)]
|
|
120
|
-
allow_input: bool,
|
|
121
|
-
|
|
122
|
-
/// Timeout in seconds
|
|
123
|
-
#[arg(long)]
|
|
124
|
-
timeout: Option<u64>,
|
|
125
|
-
|
|
126
|
-
/// Auto-size window to content
|
|
127
|
-
#[arg(long)]
|
|
128
|
-
auto_size: bool,
|
|
129
|
-
|
|
130
|
-
/// Keep window always on top
|
|
131
|
-
#[arg(long)]
|
|
132
|
-
always_on_top: bool,
|
|
133
|
-
|
|
134
|
-
/// Start in fullscreen mode
|
|
135
|
-
#[arg(long)]
|
|
136
|
-
fullscreen: bool,
|
|
137
|
-
|
|
138
|
-
/// Zoom percentage
|
|
139
|
-
#[arg(long)]
|
|
140
|
-
zoom_percent: Option<f64>,
|
|
141
|
-
|
|
142
|
-
/// Enable debug mode
|
|
143
|
-
#[arg(long)]
|
|
144
|
-
debug: bool,
|
|
145
|
-
|
|
146
|
-
/// Path to window icon
|
|
147
|
-
#[arg(long)]
|
|
148
|
-
icon: Option<String>,
|
|
149
|
-
|
|
150
|
-
/// Enable developer mode
|
|
151
|
-
#[arg(long)]
|
|
152
|
-
dev: bool,
|
|
153
|
-
|
|
154
|
-
/// Positional argument (if ends with .json, treated as JSON file)
|
|
155
|
-
#[arg(value_name = "FILE_OR_JSON")]
|
|
156
|
-
file: Option<String>,
|
|
157
|
-
}
|
|
158
|
-
|
|
159
59
|
#[derive(Deserialize, Debug)]
|
|
160
60
|
#[serde(rename_all = "camelCase")]
|
|
161
61
|
struct Position {
|
|
@@ -352,145 +252,17 @@ fn escape_html(s: &str) -> String {
|
|
|
352
252
|
.replace('\'', "'")
|
|
353
253
|
}
|
|
354
254
|
|
|
355
|
-
fn load_options_from_json(json_str: &str) -> Result<MessageBoxOptions, serde_json::Error> {
|
|
356
|
-
serde_json::from_str(json_str)
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
fn merge_cli_with_options(cli: &Cli, mut options: MessageBoxOptions) -> MessageBoxOptions {
|
|
360
|
-
// Override with CLI arguments if provided
|
|
361
|
-
if let Some(ref title) = cli.title {
|
|
362
|
-
options.title = title.clone();
|
|
363
|
-
}
|
|
364
|
-
if let Some(ref message) = cli.message {
|
|
365
|
-
options.message = Some(message.clone());
|
|
366
|
-
}
|
|
367
|
-
if let Some(ref html) = cli.html {
|
|
368
|
-
options.html = Some(html.clone());
|
|
369
|
-
}
|
|
370
|
-
if let Some(ref url) = cli.url {
|
|
371
|
-
options.url = Some(url.clone());
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
// Handle size - if CLI provides width or height, update both old fields and size object
|
|
375
|
-
if cli.width.is_some() || cli.height.is_some() {
|
|
376
|
-
let existing_size = options.size.take().unwrap_or(Size {
|
|
377
|
-
width: options.width,
|
|
378
|
-
height: options.height,
|
|
379
|
-
});
|
|
380
|
-
let new_size = Size {
|
|
381
|
-
width: cli.width.unwrap_or(existing_size.width),
|
|
382
|
-
height: cli.height.unwrap_or(existing_size.height),
|
|
383
|
-
};
|
|
384
|
-
// Update both for backward compatibility
|
|
385
|
-
options.width = new_size.width;
|
|
386
|
-
options.height = new_size.height;
|
|
387
|
-
options.size = Some(new_size);
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
// Handle position
|
|
391
|
-
if cli.x.is_some() || cli.y.is_some() || cli.screen.is_some() {
|
|
392
|
-
let existing_pos = options.pos.take().unwrap_or(Position {
|
|
393
|
-
x: 0,
|
|
394
|
-
y: 0,
|
|
395
|
-
screen: None,
|
|
396
|
-
});
|
|
397
|
-
options.pos = Some(Position {
|
|
398
|
-
x: cli.x.unwrap_or(existing_pos.x),
|
|
399
|
-
y: cli.y.unwrap_or(existing_pos.y),
|
|
400
|
-
screen: cli.screen.or(existing_pos.screen),
|
|
401
|
-
});
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
if let Some(ref buttons) = cli.buttons {
|
|
405
|
-
options.buttons = buttons.clone();
|
|
406
|
-
}
|
|
407
|
-
if let Some(ref default_value) = cli.default_value {
|
|
408
|
-
options.default_value = Some(default_value.clone());
|
|
409
|
-
}
|
|
410
|
-
if let Some(ref input_placeholder) = cli.input_placeholder {
|
|
411
|
-
options.input_placeholder = Some(input_placeholder.clone());
|
|
412
|
-
}
|
|
413
|
-
if cli.allow_input {
|
|
414
|
-
options.allow_input = true;
|
|
415
|
-
}
|
|
416
|
-
if let Some(timeout) = cli.timeout {
|
|
417
|
-
options.timeout = Some(timeout);
|
|
418
|
-
}
|
|
419
|
-
if cli.auto_size {
|
|
420
|
-
options.auto_size = true;
|
|
421
|
-
}
|
|
422
|
-
if cli.always_on_top {
|
|
423
|
-
options.always_on_top = true;
|
|
424
|
-
}
|
|
425
|
-
if cli.fullscreen {
|
|
426
|
-
options.fullscreen = true;
|
|
427
|
-
}
|
|
428
|
-
if let Some(zoom_percent) = cli.zoom_percent {
|
|
429
|
-
options.zoom_percent = Some(zoom_percent);
|
|
430
|
-
}
|
|
431
|
-
if cli.debug {
|
|
432
|
-
options.debug = true;
|
|
433
|
-
}
|
|
434
|
-
if let Some(ref icon) = cli.icon {
|
|
435
|
-
options.icon = Some(icon.clone());
|
|
436
|
-
}
|
|
437
|
-
if cli.dev {
|
|
438
|
-
options.dev = true;
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
options
|
|
442
|
-
}
|
|
443
255
|
|
|
444
256
|
fn main() {
|
|
445
|
-
//
|
|
446
|
-
let
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
.expect("Failed to parse JSON input");
|
|
455
|
-
merge_cli_with_options(&cli, base_options)
|
|
456
|
-
} else if let Some(ref file) = cli.file {
|
|
457
|
-
// First positional argument - check if it's a .json file
|
|
458
|
-
if file.ends_with(".json") {
|
|
459
|
-
let json_str = fs::read_to_string(file)
|
|
460
|
-
.unwrap_or_else(|e| panic!("Failed to read JSON file '{}': {}", file, e));
|
|
461
|
-
let base_options = load_options_from_json(&json_str)
|
|
462
|
-
.expect("Failed to parse JSON input");
|
|
463
|
-
merge_cli_with_options(&cli, base_options)
|
|
464
|
-
} else {
|
|
465
|
-
// Not a JSON file, read from stdin
|
|
466
|
-
let mut input = String::new();
|
|
467
|
-
io::stdin()
|
|
468
|
-
.read_to_string(&mut input)
|
|
469
|
-
.expect("Failed to read stdin");
|
|
470
|
-
let base_options = load_options_from_json(&input)
|
|
471
|
-
.expect("Failed to parse JSON input");
|
|
472
|
-
merge_cli_with_options(&cli, base_options)
|
|
473
|
-
}
|
|
474
|
-
} else {
|
|
475
|
-
// Check if stdin has data (piped input)
|
|
476
|
-
use std::io::IsTerminal;
|
|
477
|
-
if !io::stdin().is_terminal() {
|
|
478
|
-
// Data piped via stdin
|
|
479
|
-
let mut input = String::new();
|
|
480
|
-
io::stdin()
|
|
481
|
-
.read_to_string(&mut input)
|
|
482
|
-
.expect("Failed to read stdin");
|
|
483
|
-
let base_options = load_options_from_json(&input)
|
|
484
|
-
.expect("Failed to parse JSON input");
|
|
485
|
-
merge_cli_with_options(&cli, base_options)
|
|
486
|
-
} else {
|
|
487
|
-
// No JSON file, no stdin - create default options and apply CLI args
|
|
488
|
-
let default_json = "{}";
|
|
489
|
-
let base_options = load_options_from_json(default_json)
|
|
490
|
-
.expect("Failed to create default options");
|
|
491
|
-
merge_cli_with_options(&cli, base_options)
|
|
492
|
-
}
|
|
493
|
-
};
|
|
257
|
+
// Read JSON from stdin
|
|
258
|
+
let mut input = String::new();
|
|
259
|
+
io::stdin()
|
|
260
|
+
.read_to_string(&mut input)
|
|
261
|
+
.expect("Failed to read stdin");
|
|
262
|
+
|
|
263
|
+
// Parse JSON into options
|
|
264
|
+
let options: MessageBoxOptions = serde_json::from_str(&input)
|
|
265
|
+
.expect("Failed to parse JSON input");
|
|
494
266
|
|
|
495
267
|
// Create event loop and window
|
|
496
268
|
let event_loop = EventLoop::new();
|
|
@@ -505,10 +277,26 @@ fn main() {
|
|
|
505
277
|
// On Windows, get the actual monitor position if screen number provided
|
|
506
278
|
#[cfg(target_os = "windows")]
|
|
507
279
|
if let Some(screen_num) = pos.screen {
|
|
508
|
-
// Get all monitors
|
|
509
|
-
|
|
280
|
+
// Get all monitors and sort them by physical layout
|
|
281
|
+
// (bottom row first, then left to right)
|
|
282
|
+
let mut monitors: Vec<_> = event_loop.available_monitors().collect();
|
|
283
|
+
|
|
284
|
+
// Sort by Top (descending - bottom first), then by Left (ascending - left to right)
|
|
285
|
+
monitors.sort_by(|a, b| {
|
|
286
|
+
let a_pos = a.position();
|
|
287
|
+
let b_pos = b.position();
|
|
288
|
+
|
|
289
|
+
// Compare Y positions (descending - higher Y = lower on screen = bottom row)
|
|
290
|
+
match b_pos.y.cmp(&a_pos.y) {
|
|
291
|
+
std::cmp::Ordering::Equal => {
|
|
292
|
+
// Same row: sort by X position (ascending - left to right)
|
|
293
|
+
a_pos.x.cmp(&b_pos.x)
|
|
294
|
+
}
|
|
295
|
+
other => other,
|
|
296
|
+
}
|
|
297
|
+
});
|
|
510
298
|
|
|
511
|
-
// Get the specific monitor by index
|
|
299
|
+
// Get the specific monitor by index from sorted list
|
|
512
300
|
if let Some(monitor) = monitors.get(screen_num as usize) {
|
|
513
301
|
// Get the monitor's actual position from the OS
|
|
514
302
|
let monitor_pos = monitor.position();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bobfrankston/msger",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.83",
|
|
4
4
|
"description": "Fast, lightweight, cross-platform message box - Rust-powered alternative to msgview",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./index.js",
|
|
@@ -56,6 +56,7 @@
|
|
|
56
56
|
"@types/node": "^24.9.1"
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
|
-
"ansi-to-html": "^0.7.2"
|
|
59
|
+
"ansi-to-html": "^0.7.2",
|
|
60
|
+
"json5": "^2.2.3"
|
|
60
61
|
}
|
|
61
62
|
}
|