updates to nano

This commit is contained in:
Raven Scott
2026-04-04 07:44:07 -04:00
parent f13e2db689
commit e4910e1acd
14 changed files with 428 additions and 299 deletions
+1 -1
View File
@@ -190,7 +190,7 @@ When **`BARE_OS_VFS_UNION_PREFIXES`** overlays the personal drive on system path
| Command | Notes |
| ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`edit`** | Full-screen in-terminal editor over **`ctx.vfs`**: multi-line buffer, search / goto / save-as, optional syntax highlighting. Requires **`stdout.isTTY`**; exits with a clear error if stdin/stdout is not a TTY. Source: **`src/edit.js`** with preamble **`lib/edit-ansi.js`**, **`edit-highlight.js`**, **`edit-buffer.js`**, **`edit-key-parse.js`**, **`edit-tui.js`**. |
| **`edit`** | Full-screen in-terminal editor over **`ctx.vfs`**: multi-line buffer, search / goto / save-as, optional syntax highlighting. Requires a TTY (**`stdin.isTTY`** in **`src/edit.js`**); exits with a clear error if stdin is not a TTY. On exit, the TUI leaves **alternate-screen** mode (**`?1049l`**) when enabled (default), restoring the pre-editor terminal view; set **`BARE_EDIT_NO_ALTSCREEN`** to any non-empty value to use a **full clear** (**`2J`**) instead on terminals where alternate-screen misbehaves. Source: **`src/edit.js`** with preamble **`lib/edit-ansi.js`**, **`edit-highlight.js`**, **`edit-buffer.js`**, **`edit-key-parse.js`**, **`edit-tui.js`**. |
| **`nano`** | Same built artifact as **`edit`** (**`build.mjs`** maps **`nano`** → **`src/edit.js`** and the same preamble). **`/bin/nano`** is installed for muscle memory; the default shell alias **`nano``edit`** (see **`defaultShellAliases`** in **`shell.js`**) makes **`nano`** invoke that binary. **`man edit`** and **`man nano`** describe flags and keys. |
### 5.2b HTTP clients (`curl` / `wget`)
+19
View File
@@ -1091,6 +1091,8 @@ async function bareOsRunEditTui(ctx, opts) {
const reader = bareEditCreateStdinReader(stdin)
let suspended = false
/** When true, alternate-screen mode was entered (?1049h); {@link bareEditWrite} must send ?1049l on exit. */
let useAltScreen = false
try {
if (typeof ctx.suspendReplForSubprocess === 'function') {
ctx.suspendReplForSubprocess()
@@ -1099,6 +1101,18 @@ async function bareOsRunEditTui(ctx, opts) {
if (typeof stdin.setRawMode === 'function') stdin.setRawMode(true)
if (typeof stdin.resume === 'function') stdin.resume()
const envEdit =
ctx.env && typeof ctx.env === 'object'
? /** @type {Record<string, string>} */ (ctx.env)
: {}
const bareEditNoAltScreen =
envEdit.BARE_EDIT_NO_ALTSCREEN != null &&
String(envEdit.BARE_EDIT_NO_ALTSCREEN) !== ''
if (!bareEditNoAltScreen) {
bareEditWrite(ctx, stdout, '\x1b[?1049h')
useAltScreen = true
}
draw()
for (;;) {
@@ -1282,6 +1296,11 @@ async function bareOsRunEditTui(ctx, opts) {
}
} finally {
try {
if (useAltScreen) {
bareEditWrite(ctx, stdout, '\x1b[?1049l')
} else {
bareEditWrite(ctx, stdout, '\x1b[2J\x1b[H')
}
bareEditWrite(ctx, stdout, '\x1b[?25h\x1b[0m')
} catch {
/* ignore */
+19
View File
@@ -1091,6 +1091,8 @@ async function bareOsRunEditTui(ctx, opts) {
const reader = bareEditCreateStdinReader(stdin)
let suspended = false
/** When true, alternate-screen mode was entered (?1049h); {@link bareEditWrite} must send ?1049l on exit. */
let useAltScreen = false
try {
if (typeof ctx.suspendReplForSubprocess === 'function') {
ctx.suspendReplForSubprocess()
@@ -1099,6 +1101,18 @@ async function bareOsRunEditTui(ctx, opts) {
if (typeof stdin.setRawMode === 'function') stdin.setRawMode(true)
if (typeof stdin.resume === 'function') stdin.resume()
const envEdit =
ctx.env && typeof ctx.env === 'object'
? /** @type {Record<string, string>} */ (ctx.env)
: {}
const bareEditNoAltScreen =
envEdit.BARE_EDIT_NO_ALTSCREEN != null &&
String(envEdit.BARE_EDIT_NO_ALTSCREEN) !== ''
if (!bareEditNoAltScreen) {
bareEditWrite(ctx, stdout, '\x1b[?1049h')
useAltScreen = true
}
draw()
for (;;) {
@@ -1282,6 +1296,11 @@ async function bareOsRunEditTui(ctx, opts) {
}
} finally {
try {
if (useAltScreen) {
bareEditWrite(ctx, stdout, '\x1b[?1049l')
} else {
bareEditWrite(ctx, stdout, '\x1b[2J\x1b[H')
}
bareEditWrite(ctx, stdout, '\x1b[?25h\x1b[0m')
} catch {
/* ignore */
+146 -146
View File
@@ -25,6 +25,12 @@
"compactEncoding"
]
},
{
"path": "/lib/bare/bundles/protomux.js",
"keys": [
"protomux"
]
},
{
"path": "/lib/bare/bundles/bareUrl.js",
"keys": [
@@ -32,9 +38,9 @@
]
},
{
"path": "/lib/bare/bundles/protomux.js",
"path": "/lib/bare/bundles/bareEncoding.js",
"keys": [
"protomux"
"bareEncoding"
]
},
{
@@ -49,12 +55,6 @@
"bareEvents"
]
},
{
"path": "/lib/bare/bundles/bareEncoding.js",
"keys": [
"bareEncoding"
]
},
{
"path": "/lib/bare/bundles/bareAbort.js",
"keys": [
@@ -73,12 +73,6 @@
"bareAnsiEscapes"
]
},
{
"path": "/lib/bare/bundles/bareAddonResolve.js",
"keys": [
"bareAddonResolve"
]
},
{
"path": "/lib/bare/bundles/bareReadline.js",
"keys": [
@@ -86,15 +80,9 @@
]
},
{
"path": "/lib/bare/bundles/bareAppKit.js",
"path": "/lib/bare/bundles/bareAddonResolve.js",
"keys": [
"bareAppKit"
]
},
{
"path": "/lib/bare/bundles/bareApk.js",
"keys": [
"bareApk"
"bareAddonResolve"
]
},
{
@@ -109,6 +97,12 @@
"bareAsyncHooks"
]
},
{
"path": "/lib/bare/bundles/bareApk.js",
"keys": [
"bareApk"
]
},
{
"path": "/lib/bare/bundles/bareAssert.js",
"keys": [
@@ -122,9 +116,9 @@
]
},
{
"path": "/lib/bare/bundles/bareBmp.js",
"path": "/lib/bare/bundles/bareAppKit.js",
"keys": [
"bareBmp"
"bareAppKit"
]
},
{
@@ -134,9 +128,9 @@
]
},
{
"path": "/lib/bare/bundles/bareBuffer.js",
"path": "/lib/bare/bundles/bareBmp.js",
"keys": [
"bareBuffer"
"bareBmp"
]
},
{
@@ -152,15 +146,15 @@
]
},
{
"path": "/lib/bare/bundles/bareBluetoothApple.js",
"path": "/lib/bare/bundles/bareBuffer.js",
"keys": [
"bareBluetoothApple"
"bareBuffer"
]
},
{
"path": "/lib/bare/bundles/bareBoot.js",
"path": "/lib/bare/bundles/bareBluetoothApple.js",
"keys": [
"bareBoot"
"bareBluetoothApple"
]
},
{
@@ -175,6 +169,12 @@
"bareConsole"
]
},
{
"path": "/lib/bare/bundles/bareBoot.js",
"keys": [
"bareBoot"
]
},
{
"path": "/lib/bare/bundles/bareBundleId.js",
"keys": [
@@ -193,18 +193,18 @@
"bareDebugLog"
]
},
{
"path": "/lib/bare/bundles/bareDelta.js",
"keys": [
"bareDelta"
]
},
{
"path": "/lib/bare/bundles/bareChannel.js",
"keys": [
"bareChannel"
]
},
{
"path": "/lib/bare/bundles/bareDelta.js",
"keys": [
"bareDelta"
]
},
{
"path": "/lib/bare/bundles/bareDiagnosticsChannel.js",
"keys": [
@@ -241,18 +241,18 @@
"bareDgram"
]
},
{
"path": "/lib/bare/bundles/bareFfmpeg.js",
"keys": [
"bareFfmpeg"
]
},
{
"path": "/lib/bare/bundles/bareFfmpegEncodings.js",
"keys": [
"bareFfmpegEncodings"
]
},
{
"path": "/lib/bare/bundles/bareFfmpeg.js",
"keys": [
"bareFfmpeg"
]
},
{
"path": "/lib/bare/bundles/bareFormat.js",
"keys": [
@@ -271,30 +271,24 @@
"bareFormData"
]
},
{
"path": "/lib/bare/bundles/bareFs.js",
"keys": [
"bareFs"
]
},
{
"path": "/lib/bare/bundles/bareHeif.js",
"keys": [
"bareHeif"
]
},
{
"path": "/lib/bare/bundles/bareHrtime.js",
"keys": [
"bareHrtime"
]
},
{
"path": "/lib/bare/bundles/bareGtk.js",
"keys": [
"bareGtk"
]
},
{
"path": "/lib/bare/bundles/bareHrtime.js",
"keys": [
"bareHrtime"
]
},
{
"path": "/lib/bare/bundles/bareFileLogger.js",
"keys": [
@@ -308,9 +302,9 @@
]
},
{
"path": "/lib/bare/bundles/bareImageResample.js",
"path": "/lib/bare/bundles/bareFs.js",
"keys": [
"bareImageResample"
"bareFs"
]
},
{
@@ -319,6 +313,12 @@
"bareIco"
]
},
{
"path": "/lib/bare/bundles/bareImageResample.js",
"keys": [
"bareImageResample"
]
},
{
"path": "/lib/bare/bundles/bareHttp1.js",
"keys": [
@@ -337,18 +337,6 @@
"bareHttps"
]
},
{
"path": "/lib/bare/bundles/bareJpeg.js",
"keys": [
"bareJpeg"
]
},
{
"path": "/lib/bare/bundles/bareLief.js",
"keys": [
"bareLief"
]
},
{
"path": "/lib/bare/bundles/bareIntl.js",
"keys": [
@@ -362,9 +350,9 @@
]
},
{
"path": "/lib/bare/bundles/bareInspector.js",
"path": "/lib/bare/bundles/bareJpeg.js",
"keys": [
"bareInspector"
"bareJpeg"
]
},
{
@@ -373,6 +361,18 @@
"bareLogger"
]
},
{
"path": "/lib/bare/bundles/bareInspector.js",
"keys": [
"bareInspector"
]
},
{
"path": "/lib/bare/bundles/bareLief.js",
"keys": [
"bareLief"
]
},
{
"path": "/lib/bare/bundles/bareLink.js",
"keys": [
@@ -421,18 +421,18 @@
"bareNative"
]
},
{
"path": "/lib/bare/bundles/bareNet.js",
"keys": [
"bareNet"
]
},
{
"path": "/lib/bare/bundles/bareNodeFetch.js",
"keys": [
"bareNodeFetch"
]
},
{
"path": "/lib/bare/bundles/bareNet.js",
"keys": [
"bareNet"
]
},
{
"path": "/lib/bare/bundles/bareMedia.js",
"keys": [
@@ -451,6 +451,18 @@
"bareOs"
]
},
{
"path": "/lib/bare/bundles/barePerformance.js",
"keys": [
"barePerformance"
]
},
{
"path": "/lib/bare/bundles/bareNodeRuntime.js",
"keys": [
"bareNodeRuntime"
]
},
{
"path": "/lib/bare/bundles/barePack.js",
"keys": [
@@ -458,9 +470,9 @@
]
},
{
"path": "/lib/bare/bundles/barePerformance.js",
"path": "/lib/bare/bundles/barePackDrive.js",
"keys": [
"barePerformance"
"barePackDrive"
]
},
{
@@ -475,30 +487,12 @@
"barePipe"
]
},
{
"path": "/lib/bare/bundles/barePackDrive.js",
"keys": [
"barePackDrive"
]
},
{
"path": "/lib/bare/bundles/bareNodeRuntime.js",
"keys": [
"bareNodeRuntime"
]
},
{
"path": "/lib/bare/bundles/barePunycode.js",
"keys": [
"barePunycode"
]
},
{
"path": "/lib/bare/bundles/bareDev.js",
"keys": [
"bareDev"
]
},
{
"path": "/lib/bare/bundles/bareQuerystring.js",
"keys": [
@@ -506,9 +500,9 @@
]
},
{
"path": "/lib/bare/bundles/bareQueueMicrotask.js",
"path": "/lib/bare/bundles/bareDev.js",
"keys": [
"bareQueueMicrotask"
"bareDev"
]
},
{
@@ -518,15 +512,15 @@
]
},
{
"path": "/lib/bare/bundles/bareRealm.js",
"path": "/lib/bare/bundles/bareQueueMicrotask.js",
"keys": [
"bareRealm"
"bareQueueMicrotask"
]
},
{
"path": "/lib/bare/bundles/bareRuntime.js",
"path": "/lib/bare/bundles/bareRealm.js",
"keys": [
"bareRuntime"
"bareRealm"
]
},
{
@@ -536,9 +530,15 @@
]
},
{
"path": "/lib/bare/bundles/barePromClient.js",
"path": "/lib/bare/bundles/bareRuntime.js",
"keys": [
"barePromClient"
"bareRuntime"
]
},
{
"path": "/lib/bare/bundles/bareSdl.js",
"keys": [
"bareSdl"
]
},
{
@@ -554,9 +554,9 @@
]
},
{
"path": "/lib/bare/bundles/bareSdl.js",
"path": "/lib/bare/bundles/barePromClient.js",
"keys": [
"bareSdl"
"barePromClient"
]
},
{
@@ -590,9 +590,9 @@
]
},
{
"path": "/lib/bare/bundles/bareStorage.js",
"path": "/lib/bare/bundles/bareSvg.js",
"keys": [
"bareStorage"
"bareSvg"
]
},
{
@@ -601,6 +601,12 @@
"bareStream"
]
},
{
"path": "/lib/bare/bundles/bareStorage.js",
"keys": [
"bareStorage"
]
},
{
"path": "/lib/bare/bundles/bareStdio.js",
"keys": [
@@ -608,21 +614,9 @@
]
},
{
"path": "/lib/bare/bundles/bareSvg.js",
"path": "/lib/bare/bundles/bareSubprocess.js",
"keys": [
"bareSvg"
]
},
{
"path": "/lib/bare/bundles/bareSystemLogger.js",
"keys": [
"bareSystemLogger"
]
},
{
"path": "/lib/bare/bundles/bareTap.js",
"keys": [
"bareTap"
"bareSubprocess"
]
},
{
@@ -632,9 +626,9 @@
]
},
{
"path": "/lib/bare/bundles/bareTcp.js",
"path": "/lib/bare/bundles/bareSystemLogger.js",
"keys": [
"bareTcp"
"bareSystemLogger"
]
},
{
@@ -644,9 +638,9 @@
]
},
{
"path": "/lib/bare/bundles/bareSubprocess.js",
"path": "/lib/bare/bundles/bareTap.js",
"keys": [
"bareSubprocess"
"bareTap"
]
},
{
@@ -668,15 +662,15 @@
]
},
{
"path": "/lib/bare/bundles/bareType.js",
"path": "/lib/bare/bundles/bareTcp.js",
"keys": [
"bareType"
"bareTcp"
]
},
{
"path": "/lib/bare/bundles/bareUiKit.js",
"path": "/lib/bare/bundles/bareType.js",
"keys": [
"bareUiKit"
"bareType"
]
},
{
@@ -691,6 +685,12 @@
"bareTty"
]
},
{
"path": "/lib/bare/bundles/bareUiKit.js",
"keys": [
"bareUiKit"
]
},
{
"path": "/lib/bare/bundles/bareUnpack.js",
"keys": [
@@ -721,12 +721,24 @@
"bareUnionBundle"
]
},
{
"path": "/lib/bare/bundles/bareUtils.js",
"keys": [
"bareUtils"
]
},
{
"path": "/lib/bare/bundles/bareWebKit.js",
"keys": [
"bareWebKit"
]
},
{
"path": "/lib/bare/bundles/bareV8ToIstanbul.js",
"keys": [
"bareV8ToIstanbul"
]
},
{
"path": "/lib/bare/bundles/bareWhich.js",
"keys": [
@@ -751,18 +763,6 @@
"bareWinUi"
]
},
{
"path": "/lib/bare/bundles/bareV8ToIstanbul.js",
"keys": [
"bareV8ToIstanbul"
]
},
{
"path": "/lib/bare/bundles/bareUtils.js",
"keys": [
"bareUtils"
]
},
{
"path": "/lib/bare/bundles/bareXdiff.js",
"keys": [
@@ -776,9 +776,9 @@
]
},
{
"path": "/lib/bare/bundles/bareWs.js",
"path": "/lib/bare/bundles/bareZmq.js",
"keys": [
"bareWs"
"bareZmq"
]
},
{
@@ -788,9 +788,9 @@
]
},
{
"path": "/lib/bare/bundles/bareZmq.js",
"path": "/lib/bare/bundles/bareWs.js",
"keys": [
"bareZmq"
"bareWs"
]
}
],
File diff suppressed because one or more lines are too long
@@ -258,6 +258,8 @@ async function bareOsRunEditTui(ctx, opts) {
const reader = bareEditCreateStdinReader(stdin)
let suspended = false
/** When true, alternate-screen mode was entered (?1049h); {@link bareEditWrite} must send ?1049l on exit. */
let useAltScreen = false
try {
if (typeof ctx.suspendReplForSubprocess === 'function') {
ctx.suspendReplForSubprocess()
@@ -266,6 +268,18 @@ async function bareOsRunEditTui(ctx, opts) {
if (typeof stdin.setRawMode === 'function') stdin.setRawMode(true)
if (typeof stdin.resume === 'function') stdin.resume()
const envEdit =
ctx.env && typeof ctx.env === 'object'
? /** @type {Record<string, string>} */ (ctx.env)
: {}
const bareEditNoAltScreen =
envEdit.BARE_EDIT_NO_ALTSCREEN != null &&
String(envEdit.BARE_EDIT_NO_ALTSCREEN) !== ''
if (!bareEditNoAltScreen) {
bareEditWrite(ctx, stdout, '\x1b[?1049h')
useAltScreen = true
}
draw()
for (;;) {
@@ -449,6 +463,11 @@ async function bareOsRunEditTui(ctx, opts) {
}
} finally {
try {
if (useAltScreen) {
bareEditWrite(ctx, stdout, '\x1b[?1049l')
} else {
bareEditWrite(ctx, stdout, '\x1b[2J\x1b[H')
}
bareEditWrite(ctx, stdout, '\x1b[?25h\x1b[0m')
} catch {
/* ignore */
@@ -5,11 +5,16 @@
"synopsis": [
"edit [OPTION]... [OPERAND]..."
],
"description": "Bare OS implementation of edit. Full behavior is defined in packages/bare-os-coreutils/src/edit.js.",
"description": "Full-screen terminal editor over the VFS (same binary as nano). Requires a TTY. On exit, restores the main terminal view using the alternate screen (xterm-style ?1049) when supported, or clears the display otherwise. See packages/bare-os-coreutils/src/edit.js and lib/edit-tui.js.",
"options": [],
"environment": [
"NO_COLOR — disable syntax highlighting colors",
"BARE_EDIT_NO_ALTSCREEN — any non-empty value skips alternate-screen mode; exit uses a full display clear instead of ?1049l"
],
"keywords": [
"edit",
"bare-os",
"coreutils"
]
],
"bareOsNotes": "Integrated with the fish-style REPL via suspend/resume around raw TTY mode; teardown runs in a finally block so the cursor and screen state are restored on normal exit."
}
@@ -5,7 +5,7 @@
"synopsis": [
"nano [OPTION]... [OPERAND]..."
],
"description": "Bare OS implementation of nano. Full behavior is defined in packages/bare-os-coreutils/src/nano.js.",
"description": "Same full-screen editor as edit(1); built from src/edit.js. See man edit for terminal teardown and environment.",
"options": [],
"keywords": [
"nano",
+1 -1
View File
@@ -6,6 +6,6 @@
"description": "Build JS /bin utilities for bare-operating-system (concat + stage to kernel/)",
"scripts": {
"build": "node ./scripts/ensure-man-pages.mjs && node ./build.mjs",
"test": "node ./test/help-bin-list.test.mjs && node ./test/edit-key-parse.test.mjs"
"test": "node ./test/help-bin-list.test.mjs && node ./test/edit-key-parse.test.mjs && node ./test/edit-teardown.test.mjs"
}
}
@@ -0,0 +1,29 @@
import test from 'brittle'
import { readFile } from 'node:fs/promises'
import { dirname, join } from 'node:path'
import { fileURLToPath } from 'node:url'
const __dirname = dirname(fileURLToPath(import.meta.url))
const tuiPath = join(__dirname, '../lib/edit-tui.js')
const kernelEditPath = join(__dirname, '../../../kernel/bin/edit')
test('edit-tui finally tears down alternate screen or clears display', async (t) => {
const src = await readFile(tuiPath, 'utf8')
t.ok(src.includes('[?1049h'), 'expected alternate-screen enter when alt mode enabled')
t.ok(src.includes('[?1049l'), 'expected alternate-screen leave in finally')
t.ok(
(src.match(/\\x1b\[2J\\x1b\[H/g) || []).length >= 2,
'expected full clear sequence in draw and in finally fallback'
)
t.ok(src.includes('BARE_EDIT_NO_ALTSCREEN'), 'expected env gate for alternate screen')
})
test('shipped kernel/bin/edit includes TTY teardown escapes', async (t) => {
const bin = await readFile(kernelEditPath, 'utf8')
t.ok(bin.includes('[?1049h'), 'kernel edit should enter alternate screen')
t.ok(bin.includes('[?1049l'), 'kernel edit should leave alternate screen in finally')
t.ok(
(bin.match(/\\x1b\[2J\\x1b\[H/g) || []).length >= 2,
'kernel edit should full-clear in draw and finally fallback'
)
})
+19
View File
@@ -1091,6 +1091,8 @@ async function bareOsRunEditTui(ctx, opts) {
const reader = bareEditCreateStdinReader(stdin)
let suspended = false
/** When true, alternate-screen mode was entered (?1049h); {@link bareEditWrite} must send ?1049l on exit. */
let useAltScreen = false
try {
if (typeof ctx.suspendReplForSubprocess === 'function') {
ctx.suspendReplForSubprocess()
@@ -1099,6 +1101,18 @@ async function bareOsRunEditTui(ctx, opts) {
if (typeof stdin.setRawMode === 'function') stdin.setRawMode(true)
if (typeof stdin.resume === 'function') stdin.resume()
const envEdit =
ctx.env && typeof ctx.env === 'object'
? /** @type {Record<string, string>} */ (ctx.env)
: {}
const bareEditNoAltScreen =
envEdit.BARE_EDIT_NO_ALTSCREEN != null &&
String(envEdit.BARE_EDIT_NO_ALTSCREEN) !== ''
if (!bareEditNoAltScreen) {
bareEditWrite(ctx, stdout, '\x1b[?1049h')
useAltScreen = true
}
draw()
for (;;) {
@@ -1282,6 +1296,11 @@ async function bareOsRunEditTui(ctx, opts) {
}
} finally {
try {
if (useAltScreen) {
bareEditWrite(ctx, stdout, '\x1b[?1049l')
} else {
bareEditWrite(ctx, stdout, '\x1b[2J\x1b[H')
}
bareEditWrite(ctx, stdout, '\x1b[?25h\x1b[0m')
} catch {
/* ignore */
+19
View File
@@ -1091,6 +1091,8 @@ async function bareOsRunEditTui(ctx, opts) {
const reader = bareEditCreateStdinReader(stdin)
let suspended = false
/** When true, alternate-screen mode was entered (?1049h); {@link bareEditWrite} must send ?1049l on exit. */
let useAltScreen = false
try {
if (typeof ctx.suspendReplForSubprocess === 'function') {
ctx.suspendReplForSubprocess()
@@ -1099,6 +1101,18 @@ async function bareOsRunEditTui(ctx, opts) {
if (typeof stdin.setRawMode === 'function') stdin.setRawMode(true)
if (typeof stdin.resume === 'function') stdin.resume()
const envEdit =
ctx.env && typeof ctx.env === 'object'
? /** @type {Record<string, string>} */ (ctx.env)
: {}
const bareEditNoAltScreen =
envEdit.BARE_EDIT_NO_ALTSCREEN != null &&
String(envEdit.BARE_EDIT_NO_ALTSCREEN) !== ''
if (!bareEditNoAltScreen) {
bareEditWrite(ctx, stdout, '\x1b[?1049h')
useAltScreen = true
}
draw()
for (;;) {
@@ -1282,6 +1296,11 @@ async function bareOsRunEditTui(ctx, opts) {
}
} finally {
try {
if (useAltScreen) {
bareEditWrite(ctx, stdout, '\x1b[?1049l')
} else {
bareEditWrite(ctx, stdout, '\x1b[2J\x1b[H')
}
bareEditWrite(ctx, stdout, '\x1b[?25h\x1b[0m')
} catch {
/* ignore */
@@ -25,6 +25,12 @@
"compactEncoding"
]
},
{
"path": "/lib/bare/bundles/protomux.js",
"keys": [
"protomux"
]
},
{
"path": "/lib/bare/bundles/bareUrl.js",
"keys": [
@@ -32,9 +38,9 @@
]
},
{
"path": "/lib/bare/bundles/protomux.js",
"path": "/lib/bare/bundles/bareEncoding.js",
"keys": [
"protomux"
"bareEncoding"
]
},
{
@@ -49,12 +55,6 @@
"bareEvents"
]
},
{
"path": "/lib/bare/bundles/bareEncoding.js",
"keys": [
"bareEncoding"
]
},
{
"path": "/lib/bare/bundles/bareAbort.js",
"keys": [
@@ -73,12 +73,6 @@
"bareAnsiEscapes"
]
},
{
"path": "/lib/bare/bundles/bareAddonResolve.js",
"keys": [
"bareAddonResolve"
]
},
{
"path": "/lib/bare/bundles/bareReadline.js",
"keys": [
@@ -86,15 +80,9 @@
]
},
{
"path": "/lib/bare/bundles/bareAppKit.js",
"path": "/lib/bare/bundles/bareAddonResolve.js",
"keys": [
"bareAppKit"
]
},
{
"path": "/lib/bare/bundles/bareApk.js",
"keys": [
"bareApk"
"bareAddonResolve"
]
},
{
@@ -109,6 +97,12 @@
"bareAsyncHooks"
]
},
{
"path": "/lib/bare/bundles/bareApk.js",
"keys": [
"bareApk"
]
},
{
"path": "/lib/bare/bundles/bareAssert.js",
"keys": [
@@ -122,9 +116,9 @@
]
},
{
"path": "/lib/bare/bundles/bareBmp.js",
"path": "/lib/bare/bundles/bareAppKit.js",
"keys": [
"bareBmp"
"bareAppKit"
]
},
{
@@ -134,9 +128,9 @@
]
},
{
"path": "/lib/bare/bundles/bareBuffer.js",
"path": "/lib/bare/bundles/bareBmp.js",
"keys": [
"bareBuffer"
"bareBmp"
]
},
{
@@ -152,15 +146,15 @@
]
},
{
"path": "/lib/bare/bundles/bareBluetoothApple.js",
"path": "/lib/bare/bundles/bareBuffer.js",
"keys": [
"bareBluetoothApple"
"bareBuffer"
]
},
{
"path": "/lib/bare/bundles/bareBoot.js",
"path": "/lib/bare/bundles/bareBluetoothApple.js",
"keys": [
"bareBoot"
"bareBluetoothApple"
]
},
{
@@ -175,6 +169,12 @@
"bareConsole"
]
},
{
"path": "/lib/bare/bundles/bareBoot.js",
"keys": [
"bareBoot"
]
},
{
"path": "/lib/bare/bundles/bareBundleId.js",
"keys": [
@@ -193,18 +193,18 @@
"bareDebugLog"
]
},
{
"path": "/lib/bare/bundles/bareDelta.js",
"keys": [
"bareDelta"
]
},
{
"path": "/lib/bare/bundles/bareChannel.js",
"keys": [
"bareChannel"
]
},
{
"path": "/lib/bare/bundles/bareDelta.js",
"keys": [
"bareDelta"
]
},
{
"path": "/lib/bare/bundles/bareDiagnosticsChannel.js",
"keys": [
@@ -241,18 +241,18 @@
"bareDgram"
]
},
{
"path": "/lib/bare/bundles/bareFfmpeg.js",
"keys": [
"bareFfmpeg"
]
},
{
"path": "/lib/bare/bundles/bareFfmpegEncodings.js",
"keys": [
"bareFfmpegEncodings"
]
},
{
"path": "/lib/bare/bundles/bareFfmpeg.js",
"keys": [
"bareFfmpeg"
]
},
{
"path": "/lib/bare/bundles/bareFormat.js",
"keys": [
@@ -271,30 +271,24 @@
"bareFormData"
]
},
{
"path": "/lib/bare/bundles/bareFs.js",
"keys": [
"bareFs"
]
},
{
"path": "/lib/bare/bundles/bareHeif.js",
"keys": [
"bareHeif"
]
},
{
"path": "/lib/bare/bundles/bareHrtime.js",
"keys": [
"bareHrtime"
]
},
{
"path": "/lib/bare/bundles/bareGtk.js",
"keys": [
"bareGtk"
]
},
{
"path": "/lib/bare/bundles/bareHrtime.js",
"keys": [
"bareHrtime"
]
},
{
"path": "/lib/bare/bundles/bareFileLogger.js",
"keys": [
@@ -308,9 +302,9 @@
]
},
{
"path": "/lib/bare/bundles/bareImageResample.js",
"path": "/lib/bare/bundles/bareFs.js",
"keys": [
"bareImageResample"
"bareFs"
]
},
{
@@ -319,6 +313,12 @@
"bareIco"
]
},
{
"path": "/lib/bare/bundles/bareImageResample.js",
"keys": [
"bareImageResample"
]
},
{
"path": "/lib/bare/bundles/bareHttp1.js",
"keys": [
@@ -337,18 +337,6 @@
"bareHttps"
]
},
{
"path": "/lib/bare/bundles/bareJpeg.js",
"keys": [
"bareJpeg"
]
},
{
"path": "/lib/bare/bundles/bareLief.js",
"keys": [
"bareLief"
]
},
{
"path": "/lib/bare/bundles/bareIntl.js",
"keys": [
@@ -362,9 +350,9 @@
]
},
{
"path": "/lib/bare/bundles/bareInspector.js",
"path": "/lib/bare/bundles/bareJpeg.js",
"keys": [
"bareInspector"
"bareJpeg"
]
},
{
@@ -373,6 +361,18 @@
"bareLogger"
]
},
{
"path": "/lib/bare/bundles/bareInspector.js",
"keys": [
"bareInspector"
]
},
{
"path": "/lib/bare/bundles/bareLief.js",
"keys": [
"bareLief"
]
},
{
"path": "/lib/bare/bundles/bareLink.js",
"keys": [
@@ -421,18 +421,18 @@
"bareNative"
]
},
{
"path": "/lib/bare/bundles/bareNet.js",
"keys": [
"bareNet"
]
},
{
"path": "/lib/bare/bundles/bareNodeFetch.js",
"keys": [
"bareNodeFetch"
]
},
{
"path": "/lib/bare/bundles/bareNet.js",
"keys": [
"bareNet"
]
},
{
"path": "/lib/bare/bundles/bareMedia.js",
"keys": [
@@ -451,6 +451,18 @@
"bareOs"
]
},
{
"path": "/lib/bare/bundles/barePerformance.js",
"keys": [
"barePerformance"
]
},
{
"path": "/lib/bare/bundles/bareNodeRuntime.js",
"keys": [
"bareNodeRuntime"
]
},
{
"path": "/lib/bare/bundles/barePack.js",
"keys": [
@@ -458,9 +470,9 @@
]
},
{
"path": "/lib/bare/bundles/barePerformance.js",
"path": "/lib/bare/bundles/barePackDrive.js",
"keys": [
"barePerformance"
"barePackDrive"
]
},
{
@@ -475,30 +487,12 @@
"barePipe"
]
},
{
"path": "/lib/bare/bundles/barePackDrive.js",
"keys": [
"barePackDrive"
]
},
{
"path": "/lib/bare/bundles/bareNodeRuntime.js",
"keys": [
"bareNodeRuntime"
]
},
{
"path": "/lib/bare/bundles/barePunycode.js",
"keys": [
"barePunycode"
]
},
{
"path": "/lib/bare/bundles/bareDev.js",
"keys": [
"bareDev"
]
},
{
"path": "/lib/bare/bundles/bareQuerystring.js",
"keys": [
@@ -506,9 +500,9 @@
]
},
{
"path": "/lib/bare/bundles/bareQueueMicrotask.js",
"path": "/lib/bare/bundles/bareDev.js",
"keys": [
"bareQueueMicrotask"
"bareDev"
]
},
{
@@ -518,15 +512,15 @@
]
},
{
"path": "/lib/bare/bundles/bareRealm.js",
"path": "/lib/bare/bundles/bareQueueMicrotask.js",
"keys": [
"bareRealm"
"bareQueueMicrotask"
]
},
{
"path": "/lib/bare/bundles/bareRuntime.js",
"path": "/lib/bare/bundles/bareRealm.js",
"keys": [
"bareRuntime"
"bareRealm"
]
},
{
@@ -536,9 +530,15 @@
]
},
{
"path": "/lib/bare/bundles/barePromClient.js",
"path": "/lib/bare/bundles/bareRuntime.js",
"keys": [
"barePromClient"
"bareRuntime"
]
},
{
"path": "/lib/bare/bundles/bareSdl.js",
"keys": [
"bareSdl"
]
},
{
@@ -554,9 +554,9 @@
]
},
{
"path": "/lib/bare/bundles/bareSdl.js",
"path": "/lib/bare/bundles/barePromClient.js",
"keys": [
"bareSdl"
"barePromClient"
]
},
{
@@ -590,9 +590,9 @@
]
},
{
"path": "/lib/bare/bundles/bareStorage.js",
"path": "/lib/bare/bundles/bareSvg.js",
"keys": [
"bareStorage"
"bareSvg"
]
},
{
@@ -601,6 +601,12 @@
"bareStream"
]
},
{
"path": "/lib/bare/bundles/bareStorage.js",
"keys": [
"bareStorage"
]
},
{
"path": "/lib/bare/bundles/bareStdio.js",
"keys": [
@@ -608,21 +614,9 @@
]
},
{
"path": "/lib/bare/bundles/bareSvg.js",
"path": "/lib/bare/bundles/bareSubprocess.js",
"keys": [
"bareSvg"
]
},
{
"path": "/lib/bare/bundles/bareSystemLogger.js",
"keys": [
"bareSystemLogger"
]
},
{
"path": "/lib/bare/bundles/bareTap.js",
"keys": [
"bareTap"
"bareSubprocess"
]
},
{
@@ -632,9 +626,9 @@
]
},
{
"path": "/lib/bare/bundles/bareTcp.js",
"path": "/lib/bare/bundles/bareSystemLogger.js",
"keys": [
"bareTcp"
"bareSystemLogger"
]
},
{
@@ -644,9 +638,9 @@
]
},
{
"path": "/lib/bare/bundles/bareSubprocess.js",
"path": "/lib/bare/bundles/bareTap.js",
"keys": [
"bareSubprocess"
"bareTap"
]
},
{
@@ -668,15 +662,15 @@
]
},
{
"path": "/lib/bare/bundles/bareType.js",
"path": "/lib/bare/bundles/bareTcp.js",
"keys": [
"bareType"
"bareTcp"
]
},
{
"path": "/lib/bare/bundles/bareUiKit.js",
"path": "/lib/bare/bundles/bareType.js",
"keys": [
"bareUiKit"
"bareType"
]
},
{
@@ -691,6 +685,12 @@
"bareTty"
]
},
{
"path": "/lib/bare/bundles/bareUiKit.js",
"keys": [
"bareUiKit"
]
},
{
"path": "/lib/bare/bundles/bareUnpack.js",
"keys": [
@@ -721,12 +721,24 @@
"bareUnionBundle"
]
},
{
"path": "/lib/bare/bundles/bareUtils.js",
"keys": [
"bareUtils"
]
},
{
"path": "/lib/bare/bundles/bareWebKit.js",
"keys": [
"bareWebKit"
]
},
{
"path": "/lib/bare/bundles/bareV8ToIstanbul.js",
"keys": [
"bareV8ToIstanbul"
]
},
{
"path": "/lib/bare/bundles/bareWhich.js",
"keys": [
@@ -751,18 +763,6 @@
"bareWinUi"
]
},
{
"path": "/lib/bare/bundles/bareV8ToIstanbul.js",
"keys": [
"bareV8ToIstanbul"
]
},
{
"path": "/lib/bare/bundles/bareUtils.js",
"keys": [
"bareUtils"
]
},
{
"path": "/lib/bare/bundles/bareXdiff.js",
"keys": [
@@ -776,9 +776,9 @@
]
},
{
"path": "/lib/bare/bundles/bareWs.js",
"path": "/lib/bare/bundles/bareZmq.js",
"keys": [
"bareWs"
"bareZmq"
]
},
{
@@ -788,9 +788,9 @@
]
},
{
"path": "/lib/bare/bundles/bareZmq.js",
"path": "/lib/bare/bundles/bareWs.js",
"keys": [
"bareZmq"
"bareWs"
]
}
],
File diff suppressed because one or more lines are too long