pi-sync-system-theme 0.2.2 → 0.2.4
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/index.ts +10 -21
- package/package.json +1 -1
package/index.ts
CHANGED
|
@@ -61,7 +61,7 @@ const DEFAULT_CONFIG: Config = {
|
|
|
61
61
|
const GLOBAL_CONFIG_PATH = path.join(os.homedir(), ".pi", "agent", "system-theme.json");
|
|
62
62
|
const DETECTION_TIMEOUT_MS = 1200;
|
|
63
63
|
const MIN_POLL_MS = 1000;
|
|
64
|
-
const OSC11_QUERY_TIMEOUT_MS =
|
|
64
|
+
const OSC11_QUERY_TIMEOUT_MS = 3200;
|
|
65
65
|
const OSC11_MIN_INTERVAL_MS = 15_000;
|
|
66
66
|
const OSC11_DISABLE_AFTER_FAILURES = 3;
|
|
67
67
|
const OSC11_DISABLE_COOLDOWN_MS = 60_000;
|
|
@@ -211,33 +211,23 @@ const OSC11_QUERY_SCRIPT = `
|
|
|
211
211
|
'use strict';
|
|
212
212
|
const fs = require('fs');
|
|
213
213
|
|
|
214
|
-
const O_NONBLOCK = fs.constants.O_NONBLOCK ?? 0;
|
|
215
214
|
let fd;
|
|
216
|
-
try { fd = fs.openSync('/dev/tty', fs.constants.O_RDWR | fs.constants.O_NOCTTY
|
|
215
|
+
try { fd = fs.openSync('/dev/tty', fs.constants.O_RDWR | fs.constants.O_NOCTTY); }
|
|
217
216
|
catch { process.exit(1); }
|
|
218
217
|
|
|
219
|
-
// Send OSC 11 query
|
|
220
|
-
// Use ST terminator for better compatibility with tmux passthrough.
|
|
218
|
+
// Send OSC 11 query (ST terminator)
|
|
221
219
|
try { fs.writeSync(fd, '\x1b]11;?\x1b\\'); }
|
|
222
220
|
catch { try { fs.closeSync(fd); } catch {} process.exit(1); }
|
|
223
221
|
|
|
224
222
|
const buf = Buffer.alloc(1024);
|
|
225
223
|
let response = '';
|
|
226
|
-
const deadline = Date.now() +
|
|
224
|
+
const deadline = Date.now() + 2500;
|
|
227
225
|
|
|
228
226
|
function tryRead() {
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
response += buf.toString('utf8', 0, n);
|
|
234
|
-
if (response.length > 8192) response = response.slice(-4096);
|
|
235
|
-
} catch (err) {
|
|
236
|
-
const code = err && err.code;
|
|
237
|
-
if (code === 'EAGAIN' || code === 'EWOULDBLOCK') return;
|
|
238
|
-
return;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
227
|
+
try {
|
|
228
|
+
const n = fs.readSync(fd, buf, 0, buf.length);
|
|
229
|
+
if (n > 0) response += buf.toString('utf8', 0, n);
|
|
230
|
+
} catch {}
|
|
241
231
|
}
|
|
242
232
|
|
|
243
233
|
function to8Bit(hex) {
|
|
@@ -249,8 +239,7 @@ function to8Bit(hex) {
|
|
|
249
239
|
|
|
250
240
|
function done() {
|
|
251
241
|
try { fs.closeSync(fd); } catch {}
|
|
252
|
-
|
|
253
|
-
const m = response.match(/rgb:([0-9a-fA-F]{2,4})\\/([0-9a-fA-F]{2,4})\\/([0-9a-fA-F]{2,4})/);
|
|
242
|
+
const m = response.match(/rgb:([0-9a-fA-F]{2,8})\\/([0-9a-fA-F]{2,8})\\/([0-9a-fA-F]{2,8})/);
|
|
254
243
|
if (m) {
|
|
255
244
|
const r = to8Bit(m[1]);
|
|
256
245
|
const g = to8Bit(m[2]);
|
|
@@ -264,7 +253,7 @@ function done() {
|
|
|
264
253
|
function poll() {
|
|
265
254
|
tryRead();
|
|
266
255
|
if (response.includes('rgb:') || Date.now() > deadline) return done();
|
|
267
|
-
setTimeout(poll,
|
|
256
|
+
setTimeout(poll, 20);
|
|
268
257
|
}
|
|
269
258
|
|
|
270
259
|
poll();
|