buninu-linux 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/LICENSES/Bun-LICENSE.md +84 -0
- package/LICENSES/GCC-Runtime-Library-Exception-3.1.txt +73 -0
- package/LICENSES/GPL-2.0.txt +338 -0
- package/LICENSES/GPL-3.0.txt +674 -0
- package/LICENSES/LGPL-2.1.txt +501 -0
- package/LICENSES/Linux-syscall-note.txt +25 -0
- package/LICENSES/musl-COPYRIGHT.txt +193 -0
- package/NOTICE.md +184 -0
- package/README.md +537 -0
- package/build-image.sh +44 -0
- package/build-uki.sh +75 -0
- package/fetch-alpine.sh +80 -0
- package/fetch-bun.sh +41 -0
- package/fetch-plus-build.sh +11 -0
- package/hello/build-hello.sh +14 -0
- package/hello/hello.c +50 -0
- package/index.js +235 -0
- package/initramfs/bin/sh +3 -0
- package/initramfs/buninu/.bashrc +11 -0
- package/initramfs/buninu/ARCHITECTURE.md +452 -0
- package/initramfs/buninu/CHANGELOG.md +580 -0
- package/initramfs/buninu/LICENSE +21 -0
- package/initramfs/buninu/README.md +1161 -0
- package/initramfs/buninu/apps/bun/make-bunBin.sh +99 -0
- package/initramfs/buninu/apps/bunmsh/CHANGELOG.md +493 -0
- package/initramfs/buninu/apps/bunmsh/LICENSE +21 -0
- package/initramfs/buninu/apps/bunmsh/LICENSE-MICRO +58 -0
- package/initramfs/buninu/apps/bunmsh/LICENSE-MKSH +295 -0
- package/initramfs/buninu/apps/bunmsh/PORTING.md +192 -0
- package/initramfs/buninu/apps/bunmsh/README.md +1042 -0
- package/initramfs/buninu/apps/bunmsh/bunmsh +7 -0
- package/initramfs/buninu/apps/bunmsh/bunshell.md +61 -0
- package/initramfs/buninu/apps/bunmsh/help/README.md +2237 -0
- package/initramfs/buninu/apps/bunmsh/help/alias.md +22 -0
- package/initramfs/buninu/apps/bunmsh/help/basename.md +38 -0
- package/initramfs/buninu/apps/bunmsh/help/builtin.md +25 -0
- package/initramfs/buninu/apps/bunmsh/help/bun.md +27 -0
- package/initramfs/buninu/apps/bunmsh/help/bunmsh.md +47 -0
- package/initramfs/buninu/apps/bunmsh/help/cat.md +31 -0
- package/initramfs/buninu/apps/bunmsh/help/catfancy.md +35 -0
- package/initramfs/buninu/apps/bunmsh/help/cd.md +22 -0
- package/initramfs/buninu/apps/bunmsh/help/chmod.md +27 -0
- package/initramfs/buninu/apps/bunmsh/help/clear.md +21 -0
- package/initramfs/buninu/apps/bunmsh/help/colon.md +22 -0
- package/initramfs/buninu/apps/bunmsh/help/command.md +27 -0
- package/initramfs/buninu/apps/bunmsh/help/cp.md +28 -0
- package/initramfs/buninu/apps/bunmsh/help/curl.md +181 -0
- package/initramfs/buninu/apps/bunmsh/help/cut.md +25 -0
- package/initramfs/buninu/apps/bunmsh/help/date.md +25 -0
- package/initramfs/buninu/apps/bunmsh/help/dirname.md +25 -0
- package/initramfs/buninu/apps/bunmsh/help/echo.md +25 -0
- package/initramfs/buninu/apps/bunmsh/help/env.md +27 -0
- package/initramfs/buninu/apps/bunmsh/help/eval.md +22 -0
- package/initramfs/buninu/apps/bunmsh/help/exec.md +22 -0
- package/initramfs/buninu/apps/bunmsh/help/exit.md +21 -0
- package/initramfs/buninu/apps/bunmsh/help/export.md +22 -0
- package/initramfs/buninu/apps/bunmsh/help/false.md +22 -0
- package/initramfs/buninu/apps/bunmsh/help/find.md +33 -0
- package/initramfs/buninu/apps/bunmsh/help/getopts.md +28 -0
- package/initramfs/buninu/apps/bunmsh/help/grep.md +34 -0
- package/initramfs/buninu/apps/bunmsh/help/head.md +27 -0
- package/initramfs/buninu/apps/bunmsh/help/kill.md +43 -0
- package/initramfs/buninu/apps/bunmsh/help/ln.md +28 -0
- package/initramfs/buninu/apps/bunmsh/help/ls.md +37 -0
- package/initramfs/buninu/apps/bunmsh/help/lsbun.md +29 -0
- package/initramfs/buninu/apps/bunmsh/help/lsfancy.md +37 -0
- package/initramfs/buninu/apps/bunmsh/help/md5sum.md +21 -0
- package/initramfs/buninu/apps/bunmsh/help/mkdir.md +27 -0
- package/initramfs/buninu/apps/bunmsh/help/mktemp.md +26 -0
- package/initramfs/buninu/apps/bunmsh/help/mv.md +26 -0
- package/initramfs/buninu/apps/bunmsh/help/print.md +30 -0
- package/initramfs/buninu/apps/bunmsh/help/printf.md +25 -0
- package/initramfs/buninu/apps/bunmsh/help/pspa.md +38 -0
- package/initramfs/buninu/apps/bunmsh/help/pspac.md +57 -0
- package/initramfs/buninu/apps/bunmsh/help/pwd.md +21 -0
- package/initramfs/buninu/apps/bunmsh/help/read.md +27 -0
- package/initramfs/buninu/apps/bunmsh/help/readonly.md +27 -0
- package/initramfs/buninu/apps/bunmsh/help/realpath.md +21 -0
- package/initramfs/buninu/apps/bunmsh/help/rm.md +33 -0
- package/initramfs/buninu/apps/bunmsh/help/rmdir.md +27 -0
- package/initramfs/buninu/apps/bunmsh/help/sed.md +29 -0
- package/initramfs/buninu/apps/bunmsh/help/seq.md +29 -0
- package/initramfs/buninu/apps/bunmsh/help/serve.md +50 -0
- package/initramfs/buninu/apps/bunmsh/help/set.md +26 -0
- package/initramfs/buninu/apps/bunmsh/help/sha256sum.md +21 -0
- package/initramfs/buninu/apps/bunmsh/help/shift.md +23 -0
- package/initramfs/buninu/apps/bunmsh/help/sleep.md +25 -0
- package/initramfs/buninu/apps/bunmsh/help/sort.md +29 -0
- package/initramfs/buninu/apps/bunmsh/help/source.md +23 -0
- package/initramfs/buninu/apps/bunmsh/help/tab.md +30 -0
- package/initramfs/buninu/apps/bunmsh/help/tac.md +29 -0
- package/initramfs/buninu/apps/bunmsh/help/tail.md +27 -0
- package/initramfs/buninu/apps/bunmsh/help/tee.md +25 -0
- package/initramfs/buninu/apps/bunmsh/help/test.md +30 -0
- package/initramfs/buninu/apps/bunmsh/help/time.md +29 -0
- package/initramfs/buninu/apps/bunmsh/help/touch.md +26 -0
- package/initramfs/buninu/apps/bunmsh/help/tr.md +26 -0
- package/initramfs/buninu/apps/bunmsh/help/true.md +22 -0
- package/initramfs/buninu/apps/bunmsh/help/type.md +21 -0
- package/initramfs/buninu/apps/bunmsh/help/umask.md +22 -0
- package/initramfs/buninu/apps/bunmsh/help/unalias.md +28 -0
- package/initramfs/buninu/apps/bunmsh/help/uname.md +31 -0
- package/initramfs/buninu/apps/bunmsh/help/unset.md +28 -0
- package/initramfs/buninu/apps/bunmsh/help/wc.md +27 -0
- package/initramfs/buninu/apps/bunmsh/help/whence.md +26 -0
- package/initramfs/buninu/apps/bunmsh/help/which.md +41 -0
- package/initramfs/buninu/apps/bunmsh/help/yes.md +23 -0
- package/initramfs/buninu/apps/bunmsh/index.js +7 -0
- package/initramfs/buninu/apps/bunmsh/package.json +30 -0
- package/initramfs/buninu/apps/bunmsh/serve.js +468 -0
- package/initramfs/buninu/apps/bunmsh/single-exe/README.md +402 -0
- package/initramfs/buninu/apps/bunmsh/single-exe/assetsHelper.js +371 -0
- package/initramfs/buninu/apps/bunmsh/single-exe/assetsLoader.mjs +85 -0
- package/initramfs/buninu/apps/bunmsh/single-exe/assetsPacker.js +218 -0
- package/initramfs/buninu/apps/bunmsh/single-exe/compiled.js +527 -0
- package/initramfs/buninu/apps/bunmsh/single-exe/entry.mjs +17 -0
- package/initramfs/buninu/apps/bunmsh/src/cat-fancy.js +117 -0
- package/initramfs/buninu/apps/bunmsh/src/cat-operands.js +31 -0
- package/initramfs/buninu/apps/bunmsh/src/completion.js +363 -0
- package/initramfs/buninu/apps/bunmsh/src/curl.js +1191 -0
- package/initramfs/buninu/apps/bunmsh/src/environment.js +61 -0
- package/initramfs/buninu/apps/bunmsh/src/fancy-ls.js +186 -0
- package/initramfs/buninu/apps/bunmsh/src/find.js +119 -0
- package/initramfs/buninu/apps/bunmsh/src/history.js +198 -0
- package/initramfs/buninu/apps/bunmsh/src/main.js +850 -0
- package/initramfs/buninu/apps/bunmsh/src/mouse.js +103 -0
- package/initramfs/buninu/apps/bunmsh/src/shell.js +3932 -0
- package/initramfs/buninu/apps/bunmsh/test/catfancy.test.js +102 -0
- package/initramfs/buninu/apps/bunmsh/test/curl.test.js +335 -0
- package/initramfs/buninu/apps/bunmsh/test/reference-source.sh +1 -0
- package/initramfs/buninu/apps/bunmsh/test/reference.test.js +817 -0
- package/initramfs/buninu/apps/bunmsh/test/serve/README.md +3 -0
- package/initramfs/buninu/apps/bunmsh/test/serve/bad.json +1 -0
- package/initramfs/buninu/apps/bunmsh/test/serve/data.json +1 -0
- package/initramfs/buninu/apps/bunmsh/test/serve/data.json5 +1 -0
- package/initramfs/buninu/apps/bunmsh/test/serve/data.jsonc +2 -0
- package/initramfs/buninu/apps/bunmsh/test/serve/data.jsonl +2 -0
- package/initramfs/buninu/apps/bunmsh/test/serve/data.ndjson +1 -0
- package/initramfs/buninu/apps/bunmsh/test/serve/data.toml +3 -0
- package/initramfs/buninu/apps/bunmsh/test/serve/data.ts +15 -0
- package/initramfs/buninu/apps/bunmsh/test/serve/data.xml +1 -0
- package/initramfs/buninu/apps/bunmsh/test/serve/data.yaml +3 -0
- package/initramfs/buninu/apps/bunmsh/test/serve/data.yml +1 -0
- package/initramfs/buninu/apps/bunmsh/test/serve.test.js +241 -0
- package/initramfs/buninu/apps/bunmsh/test/shell.test.js +2092 -0
- package/initramfs/buninu/apps/bunmsh/test/shell1.test.js +1087 -0
- package/initramfs/buninu/apps/bunmsh/test/shell2.test.js +457 -0
- package/initramfs/buninu/apps/bunmsh/test/shell3.test.js +741 -0
- package/initramfs/buninu/apps/bunmsh/test/t.sh +12 -0
- package/initramfs/buninu/apps/bunx/bunx.js +172 -0
- package/initramfs/buninu/apps/cmdlist +48 -0
- package/initramfs/buninu/apps/jsgotty/LICENSE +23 -0
- package/initramfs/buninu/apps/jsgotty/LICENSES/Apache-2.0-zmodem.js.txt +201 -0
- package/initramfs/buninu/apps/jsgotty/NOTICE +21 -0
- package/initramfs/buninu/apps/jsgotty/README.en.md +294 -0
- package/initramfs/buninu/apps/jsgotty/README.md +296 -0
- package/initramfs/buninu/apps/jsgotty/client.mjs +700 -0
- package/initramfs/buninu/apps/jsgotty/env.sh +2 -0
- package/initramfs/buninu/apps/jsgotty/gotty.js +3334 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/.package-lock.json +35 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/LICENSE.md +9 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/README.md +319 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/common.gypi +20 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/except.gypi +25 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/index.js +12 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/napi-inl.deprecated.h +186 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/napi-inl.h +6607 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/napi.h +3201 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/node_addon_api.gyp +32 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/node_api.gyp +9 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/noexcept.gypi +26 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/nothing.c +0 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/package-support.json +21 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/package.json +480 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/tools/README.md +73 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/tools/check-napi.js +99 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/tools/clang-format.js +71 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/tools/conversion.js +301 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/tools/eslint-format.js +79 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/LICENSE +20 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/README.md +548 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/browser.js +8 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/index.js +22 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/buffer-util.js +131 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/constants.js +19 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/event-target.js +292 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/extension.js +203 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/limiter.js +55 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/permessage-deflate.js +528 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/receiver.js +760 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/sender.js +607 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/stream.js +161 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/subprotocol.js +62 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/validation.js +152 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/websocket-server.js +562 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/websocket.js +1407 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/package.json +70 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/wrapper.mjs +21 -0
- package/initramfs/buninu/apps/jsgotty/package-lock.json +46 -0
- package/initramfs/buninu/apps/jsgotty/package.json +19 -0
- package/initramfs/buninu/apps/jsgotty/patches/windowsPtyAgent.js +326 -0
- package/initramfs/buninu/apps/jsgotty/patches/windowsTerminal.js +204 -0
- package/initramfs/buninu/apps/jsgotty/rz.js +199 -0
- package/initramfs/buninu/apps/jsgotty/single-exe/README.md +384 -0
- package/initramfs/buninu/apps/jsgotty/single-exe/assetsHelper.js +371 -0
- package/initramfs/buninu/apps/jsgotty/single-exe/assetsLoader.mjs +85 -0
- package/initramfs/buninu/apps/jsgotty/single-exe/assetsPacker.js +218 -0
- package/initramfs/buninu/apps/jsgotty/single-exe/compiled.js +498 -0
- package/initramfs/buninu/apps/jsgotty/single-exe/entry.mjs +23 -0
- package/initramfs/buninu/apps/jsgotty/single-exe/packAssets.sh +7 -0
- package/initramfs/buninu/apps/jsgotty/static/css/index.css +13 -0
- package/initramfs/buninu/apps/jsgotty/static/css/kitty.css +61 -0
- package/initramfs/buninu/apps/jsgotty/static/css/xterm.css +218 -0
- package/initramfs/buninu/apps/jsgotty/static/css/xterm_customize.css +35 -0
- package/initramfs/buninu/apps/jsgotty/static/favicon.ico +0 -0
- package/initramfs/buninu/apps/jsgotty/static/help.md +125 -0
- package/initramfs/buninu/apps/jsgotty/static/icon.svg +66 -0
- package/initramfs/buninu/apps/jsgotty/static/icon_192.png +0 -0
- package/initramfs/buninu/apps/jsgotty/static/index.html +164 -0
- package/initramfs/buninu/apps/jsgotty/static/js/gotty.js +31537 -0
- package/initramfs/buninu/apps/jsgotty/static/js/gotty.js.LICENSE.txt +7 -0
- package/initramfs/buninu/apps/jsgotty/static/js/gotty.js.map +1 -0
- package/initramfs/buninu/apps/jsgotty/static/js/gotty.licenses.txt +650 -0
- package/initramfs/buninu/apps/jsgotty/static/js/kitty.js +1101 -0
- package/initramfs/buninu/apps/jsgotty/static/js/windows_bridge.js +194 -0
- package/initramfs/buninu/apps/jsgotty/static/js/xterm-addon-unicode11.js +2 -0
- package/initramfs/buninu/apps/jsgotty/static/js/zmodem.js +1 -0
- package/initramfs/buninu/apps/jsgotty/static/manifest.json +15 -0
- package/initramfs/buninu/apps/jsgotty/sz.js +273 -0
- package/initramfs/buninu/apps/jsgotty/tests/kitty-order.test.js +58 -0
- package/initramfs/buninu/apps/jsgotty/tests/websocket-origin.test.js +54 -0
- package/initramfs/buninu/apps/jsgotty/viu.mjs +422 -0
- package/initramfs/buninu/apps/jsgotty/wgotty +62 -0
- package/initramfs/buninu/apps/jsgotty/windows-bridge-node.js +60 -0
- package/initramfs/buninu/apps/jsgotty/zmodem-node.js +262 -0
- package/initramfs/buninu/apps/jsmdcui/CHANGELOG.md +1118 -0
- package/initramfs/buninu/apps/jsmdcui/LICENSE +22 -0
- package/initramfs/buninu/apps/jsmdcui/README.md +1283 -0
- package/initramfs/buninu/apps/jsmdcui/cdp-maze.js +141 -0
- package/initramfs/buninu/apps/jsmdcui/clean.sh +9 -0
- package/initramfs/buninu/apps/jsmdcui/demos/basic.jpg +0 -0
- package/initramfs/buninu/apps/jsmdcui/demos/chinese.md +32 -0
- package/initramfs/buninu/apps/jsmdcui/demos/event.md +170 -0
- package/initramfs/buninu/apps/jsmdcui/demos/good.jpg +0 -0
- package/initramfs/buninu/apps/jsmdcui/demos/image-processor.md +366 -0
- package/initramfs/buninu/apps/jsmdcui/demos/image-processor.zh-TW.md +366 -0
- package/initramfs/buninu/apps/jsmdcui/demos/img-change.md +73 -0
- package/initramfs/buninu/apps/jsmdcui/demos/imgtool-zh.md +298 -0
- package/initramfs/buninu/apps/jsmdcui/demos/imgtool.md +298 -0
- package/initramfs/buninu/apps/jsmdcui/demos/maze.md +149 -0
- package/initramfs/buninu/apps/jsmdcui/demos/reactive.md +40 -0
- package/initramfs/buninu/apps/jsmdcui/demos/reader.md +513 -0
- package/initramfs/buninu/apps/jsmdcui/demos/select.md +63 -0
- package/initramfs/buninu/apps/jsmdcui/demos/todo-zh.md +190 -0
- package/initramfs/buninu/apps/jsmdcui/demos/todo.md +191 -0
- package/initramfs/buninu/apps/jsmdcui/edit +9 -0
- package/initramfs/buninu/apps/jsmdcui/jsmdcui.sh +16 -0
- package/initramfs/buninu/apps/jsmdcui/llm-maze.txt +94 -0
- package/initramfs/buninu/apps/jsmdcui/package.json +29 -0
- package/initramfs/buninu/apps/jsmdcui/project_structure.txt +35 -0
- package/initramfs/buninu/apps/jsmdcui/runmd.mjs +1140 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/atom-dark.micro +33 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/bubblegum.micro +31 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/cmc-16.micro +47 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/cmc-tc.micro +43 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/darcula.micro +34 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/default.micro +1 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/dracula-tc.micro +49 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/dukedark-tc.micro +38 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/dukelight-tc.micro +38 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/dukeubuntu-tc.micro +38 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/geany.micro +29 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/gotham.micro +29 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/gruvbox-tc.micro +29 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/gruvbox.micro +26 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/material-tc.micro +36 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/monokai-dark.micro +28 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/monokai.micro +34 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/one-dark.micro +39 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/railscast.micro +37 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/simple.micro +33 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/solarized-tc.micro +31 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/solarized.micro +30 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/sunny-day.micro +29 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/twilight.micro +40 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/zenburn.micro +30 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/help/actions.md +161 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/help/cdp.md +130 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/help/colors.md +421 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/help/commands.md +161 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/help/copypaste.md +149 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/help/defaultkeys.md +148 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/help/help.md +1283 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/help/keybindings.md +355 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/help/linter.md +90 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/help/options.md +709 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/help/plugins.md +544 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/help/tutorial.md +112 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/cdp/cdp-server.js +1263 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/cdp/cdp.js +203 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/chapter/chapter.js +111 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/diff/diff.js +46 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/example/example.js +117 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/linter/linter.js +281 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/plugins/autoclose/autoclose.lua +75 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/plugins/ftoptions/ftoptions.lua +17 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/plugins/literate/README.md +5 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/plugins/literate/literate.lua +55 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/plugins/status/help/status.md +21 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/plugins/status/status.lua +62 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/LICENSE +22 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/PowerShell.yaml +128 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/README.md +63 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ada.yaml +43 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/apacheconf.yaml +59 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/arduino.yaml +101 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/asciidoc.yaml +51 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/asm.yaml +123 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ats.yaml +99 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/awk.yaml +44 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/b.yaml +87 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/bat.yaml +57 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/c.yaml +60 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/caddyfile.yaml +23 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/cake.yaml +7 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/clojure.yaml +38 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/cmake.yaml +42 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/coffeescript.yaml +56 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/colortest.yaml +19 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/conky.yaml +17 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/cpp.yaml +91 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/crontab.yaml +36 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/crystal.yaml +72 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/csharp.yaml +52 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/css.yaml +44 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/csx.yaml +8 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/cuda.yaml +68 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/cython.yaml +52 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/d.yaml +121 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/dart.yaml +46 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/default.yaml +10 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/dockerfile.yaml +36 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/dot.yaml +29 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/elixir.yaml +30 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/elm.yaml +38 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/erb.yaml +42 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/erlang.yaml +45 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/fish.yaml +48 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/forth.yaml +34 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/fortran.yaml +64 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/freebsd-kernel.yaml +14 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/fsharp.yaml +48 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gdscript.yaml +61 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gemini.yaml +19 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gentoo-ebuild.yaml +48 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gentoo-etc-portage.yaml +23 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/git-commit.yaml +35 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/git-config.yaml +14 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/git-rebase-todo.yaml +19 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gleam.yaml +69 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/glsl.yaml +26 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gnuplot.yaml +15 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/go.yaml +62 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/godoc.yaml +17 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/golo.yaml +73 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gomod.yaml +31 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/graphql.yaml +47 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/groff.yaml +30 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/groovy.yaml +111 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/haml.yaml +16 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/hare.yaml +52 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/haskell.yaml +52 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/hc.yaml +52 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/html.yaml +70 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/html4.yaml +25 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/html5.yaml +25 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ini.yaml +23 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/inputrc.yaml +14 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/java.yaml +37 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/javascript.yaml +124 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/jinja2.yaml +19 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/json.yaml +39 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/jsonnet.yaml +92 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/julia.yaml +57 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/justfile.yaml +40 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/keymap.yaml +27 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/kickstart.yaml +16 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/kotlin.yaml +66 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/kvlang.yaml +67 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ledger.yaml +14 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/lfe.yaml +17 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/lilypond.yaml +26 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/lisp.yaml +17 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/log.yaml +92 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/lua.yaml +111 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/mail.yaml +25 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/makefile.yaml +38 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/man.yaml +12 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/markdown.yaml +65 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/mc.yaml +23 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/meson.yaml +51 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/micro.yaml +34 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/mpdconf.yaml +13 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/msbuild.yaml +6 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nanorc.yaml +16 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nftables.yaml +30 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nginx.yaml +22 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nim.yaml +27 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nix.yaml +32 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nu.yaml +114 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/objc.yaml +60 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ocaml.yaml +43 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/octave.yaml +83 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/odin.yaml +64 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/pascal.yaml +45 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/patch.yaml +14 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/peg.yaml +16 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/perl.yaml +58 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/php.yaml +60 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/pkg-config.yaml +12 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/po.yaml +12 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/pony.yaml +37 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/pov.yaml +21 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/privoxy-action.yaml +14 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/privoxy-config.yaml +10 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/privoxy-filter.yaml +12 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/proto.yaml +40 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/prql.yaml +84 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/puppet.yaml +22 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/python2.yaml +60 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/python3.yaml +80 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/r.yaml +32 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/raku.yaml +42 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/reST.yaml +18 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/renpy.yaml +15 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/rpmspec.yaml +43 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ruby.yaml +73 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/rust.yaml +78 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/sage.yaml +60 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/scad.yaml +53 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/scala.yaml +33 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/sed.yaml +13 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/sh.yaml +69 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/sls.yaml +15 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/smalltalk.yaml +55 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/solidity.yaml +41 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/sql.yaml +35 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/stata.yaml +67 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/svelte.yaml +27 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/swift.yaml +103 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/systemd.yaml +16 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/tcl.yaml +18 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/terraform.yaml +87 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/tex.yaml +32 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/toml.yaml +56 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/twig.yaml +55 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/typescript.yaml +49 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/v.yaml +80 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/vala.yaml +26 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/verilog.yaml +60 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/vhdl.yaml +37 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/vi.yaml +31 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/vue.yaml +64 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/xml.yaml +37 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/xresources.yaml +14 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/yaml.yaml +34 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/yum.yaml +12 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/zig.yaml +52 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/zscript.yaml +72 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/zsh.yaml +52 -0
- package/initramfs/buninu/apps/jsmdcui/single-exe/README.md +396 -0
- package/initramfs/buninu/apps/jsmdcui/single-exe/assetsHelper.js +371 -0
- package/initramfs/buninu/apps/jsmdcui/single-exe/assetsLoader.mjs +85 -0
- package/initramfs/buninu/apps/jsmdcui/single-exe/assetsPacker.js +218 -0
- package/initramfs/buninu/apps/jsmdcui/single-exe/compiled.js +498 -0
- package/initramfs/buninu/apps/jsmdcui/single-exe/entry.mjs +17 -0
- package/initramfs/buninu/apps/jsmdcui/single-exe/packAssets.sh +7 -0
- package/initramfs/buninu/apps/jsmdcui/src/MDCUI_DEFAULT_EDIT +0 -0
- package/initramfs/buninu/apps/jsmdcui/src/buffer/backup.js +165 -0
- package/initramfs/buninu/apps/jsmdcui/src/buffer/buffer.js +126 -0
- package/initramfs/buninu/apps/jsmdcui/src/buffer/fixed3-codec.js +140 -0
- package/initramfs/buninu/apps/jsmdcui/src/buffer/loc.js +38 -0
- package/initramfs/buninu/apps/jsmdcui/src/buffer/message.js +29 -0
- package/initramfs/buninu/apps/jsmdcui/src/build-args.js +40 -0
- package/initramfs/buninu/apps/jsmdcui/src/config/clean.js +172 -0
- package/initramfs/buninu/apps/jsmdcui/src/config/colorscheme.js +99 -0
- package/initramfs/buninu/apps/jsmdcui/src/config/config.js +125 -0
- package/initramfs/buninu/apps/jsmdcui/src/config/defaults.js +109 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/fence-events.mjs +144 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/heading-ids.mjs +1568 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/id-collision.mjs +111 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/identity.mjs +26 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/kitty-debug.mjs +25 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/kitty-images.mjs +280 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/kitty-mode.mjs +6 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/rerender-queue.mjs +66 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/rpc.mjs +1554 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/server.mjs +128 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/table-render.mjs +286 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/table-row-edit.mjs +226 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/task-checkbox.mjs +60 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/template-components.mjs +253 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/text-block-resize.mjs +177 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/tui-links.mjs +560 -0
- package/initramfs/buninu/apps/jsmdcui/src/display/ansi-style.js +60 -0
- package/initramfs/buninu/apps/jsmdcui/src/highlight/highlighter.js +243 -0
- package/initramfs/buninu/apps/jsmdcui/src/highlight/parser.js +225 -0
- package/initramfs/buninu/apps/jsmdcui/src/index.js +9586 -0
- package/initramfs/buninu/apps/jsmdcui/src/lua/engine.js +68 -0
- package/initramfs/buninu/apps/jsmdcui/src/platform/archive.js +50 -0
- package/initramfs/buninu/apps/jsmdcui/src/platform/clipboard.js +278 -0
- package/initramfs/buninu/apps/jsmdcui/src/platform/commands.js +221 -0
- package/initramfs/buninu/apps/jsmdcui/src/platform/terminal.js +5 -0
- package/initramfs/buninu/apps/jsmdcui/src/plugins/js-bridge.js +3377 -0
- package/initramfs/buninu/apps/jsmdcui/src/plugins/manager.js +674 -0
- package/initramfs/buninu/apps/jsmdcui/src/runtime/encodings.js +10 -0
- package/initramfs/buninu/apps/jsmdcui/src/runtime/registry.js +134 -0
- package/initramfs/buninu/apps/jsmdcui/src/screen/cell-buffer.js +81 -0
- package/initramfs/buninu/apps/jsmdcui/src/screen/events.js +263 -0
- package/initramfs/buninu/apps/jsmdcui/src/screen/screen.js +249 -0
- package/initramfs/buninu/apps/jsmdcui/src/screen/vt100.js +571 -0
- package/initramfs/buninu/apps/jsmdcui/src/shell/shell.js +70 -0
- package/initramfs/buninu/apps/jsmdcui/testapp.md +78 -0
- package/initramfs/buninu/apps/jsmdcui/tests/assets-helper.test.js +150 -0
- package/initramfs/buninu/apps/jsmdcui/tests/backup.test.js +158 -0
- package/initramfs/buninu/apps/jsmdcui/tests/cat-markdown.test.js +139 -0
- package/initramfs/buninu/apps/jsmdcui/tests/cdp-security.test.js +32 -0
- package/initramfs/buninu/apps/jsmdcui/tests/cdp-websocket-test.html +46 -0
- package/initramfs/buninu/apps/jsmdcui/tests/cmphex3b64.js +95 -0
- package/initramfs/buninu/apps/jsmdcui/tests/compiled-runtime.test.js +139 -0
- package/initramfs/buninu/apps/jsmdcui/tests/config-settings.test.js +52 -0
- package/initramfs/buninu/apps/jsmdcui/tests/demo.test.js +448 -0
- package/initramfs/buninu/apps/jsmdcui/tests/docs-sync.test.js +14 -0
- package/initramfs/buninu/apps/jsmdcui/tests/fence-events.test.js +1293 -0
- package/initramfs/buninu/apps/jsmdcui/tests/heading-ids.test.js +559 -0
- package/initramfs/buninu/apps/jsmdcui/tests/heading-list-selector.test.js +2393 -0
- package/initramfs/buninu/apps/jsmdcui/tests/id-collision.test.js +514 -0
- package/initramfs/buninu/apps/jsmdcui/tests/jmigt.js +16 -0
- package/initramfs/buninu/apps/jsmdcui/tests/js-plugin-prompts.test.js +110 -0
- package/initramfs/buninu/apps/jsmdcui/tests/key-event.md +10 -0
- package/initramfs/buninu/apps/jsmdcui/tests/kitty-demo.md +184 -0
- package/initramfs/buninu/apps/jsmdcui/tests/kitty-images.test.js +288 -0
- package/initramfs/buninu/apps/jsmdcui/tests/kitty-mode.test.js +14 -0
- package/initramfs/buninu/apps/jsmdcui/tests/platform-commands.test.js +18 -0
- package/initramfs/buninu/apps/jsmdcui/tests/platform-terminal.test.js +8 -0
- package/initramfs/buninu/apps/jsmdcui/tests/pty-demo.js +492 -0
- package/initramfs/buninu/apps/jsmdcui/tests/rerender-queue.test.js +130 -0
- package/initramfs/buninu/apps/jsmdcui/tests/table-render.test.js +150 -0
- package/initramfs/buninu/apps/jsmdcui/tests/table-row-edit.test.js +138 -0
- package/initramfs/buninu/apps/jsmdcui/tests/task-checkbox.test.js +33 -0
- package/initramfs/buninu/apps/jsmdcui/tests/template-components.test.js +422 -0
- package/initramfs/buninu/apps/jsmdcui/tests/text-block-resize.test.js +222 -0
- package/initramfs/buninu/apps/jsmdcui/tests/textarea.md +8 -0
- package/initramfs/buninu/apps/jsmdcui/tests/tui-links.test.js +298 -0
- package/initramfs/buninu/apps/jsmdcui/tests/wui-responsive-images.test.js +60 -0
- package/initramfs/buninu/apps/jsmdcui/tests/wui.test.js +108 -0
- package/initramfs/buninu/apps/jsmdcui/tests/wv-client.js +96 -0
- package/initramfs/buninu/apps/jsmdcui/tui +7 -0
- package/initramfs/buninu/apps/jsmdcui/wui +9 -0
- package/initramfs/buninu/apps/musl-la/LICENSES/GPL-3.0.txt +674 -0
- package/initramfs/buninu/apps/musl-la/LICENSES/gcc_runtime_exception.txt +73 -0
- package/initramfs/buninu/apps/musl-la/LICENSE_musl.txt +193 -0
- package/initramfs/buninu/apps/musl-la/NOTICE +41 -0
- package/initramfs/buninu/apps/musl-la/ld-musl-aarch64.so.1 +0 -0
- package/initramfs/buninu/apps/musl-la/libgcc_s.so.1 +0 -0
- package/initramfs/buninu/apps/musl-la/libstdc++.so.6 +0 -0
- package/initramfs/buninu/apps/musl-la/musl-la.sh +36 -0
- package/initramfs/buninu/apps/native-bridge/native-bridge.js +199 -0
- package/initramfs/buninu/apps/native-bridge/package.json +8 -0
- package/initramfs/buninu/apps/tts/tts.js +214 -0
- package/initramfs/buninu/apps/xclip/xclip.js +121 -0
- package/initramfs/buninu/apps/xdg-open/xdg-open.js +151 -0
- package/initramfs/buninu/bin/bun.bat +37 -0
- package/initramfs/buninu/bin/bun.sh +57 -0
- package/initramfs/buninu/bin/buninu-help.bat +4 -0
- package/initramfs/buninu/bin/buninu-help.sh +7 -0
- package/initramfs/buninu/bin/bunmsh.bat +3 -0
- package/initramfs/buninu/bin/bunmsh.sh +5 -0
- package/initramfs/buninu/bin/bunx.bat +3 -0
- package/initramfs/buninu/bin/glow.bat +3 -0
- package/initramfs/buninu/bin/glow.sh +5 -0
- package/initramfs/buninu/bin/init.js +779 -0
- package/initramfs/buninu/bin/install.js +570 -0
- package/initramfs/buninu/bin/jmi.bat +3 -0
- package/initramfs/buninu/bin/jmi.sh +5 -0
- package/initramfs/buninu/bin/jsgotty.bat +3 -0
- package/initramfs/buninu/bin/jsgotty.sh +5 -0
- package/initramfs/buninu/bin/jsmdcui.bat +11 -0
- package/initramfs/buninu/bin/libsh-loader.c +135 -0
- package/initramfs/buninu/bin/libsh-loader.so +0 -0
- package/initramfs/buninu/bin/multicall.sh +103 -0
- package/initramfs/buninu/bin/native-bridge.bat +3 -0
- package/initramfs/buninu/bin/rz.bat +3 -0
- package/initramfs/buninu/bin/rz.sh +5 -0
- package/initramfs/buninu/bin/shc.js +5 -0
- package/initramfs/buninu/bin/showimg.bat +3 -0
- package/initramfs/buninu/bin/showimg.sh +5 -0
- package/initramfs/buninu/bin/switch_to_android.sh +9 -0
- package/initramfs/buninu/bin/switch_to_linux.sh +7 -0
- package/initramfs/buninu/bin/sz.bat +3 -0
- package/initramfs/buninu/bin/sz.sh +5 -0
- package/initramfs/buninu/bin/tts.bat +3 -0
- package/initramfs/buninu/bin/xclip.bat +3 -0
- package/initramfs/buninu/bin/xdg-open.bat +3 -0
- package/initramfs/buninu/demo-server.js +64 -0
- package/initramfs/buninu/icon.png +0 -0
- package/initramfs/buninu/package.json +59 -0
- package/initramfs/etc/resolv.conf +1 -0
- package/initramfs/init.js +339 -0
- package/initramfs/lib/ld-musl-x86_64.so.1 +0 -0
- package/initramfs/lib/libc.musl-x86_64.so.1 +0 -0
- package/initramfs/lib/libgcc_s.so.1 +0 -0
- package/initramfs/lib/libstdc++.so.6 +0 -0
- package/initramfs/usr/bin/env +7 -0
- package/package.json +42 -0
- package/run-qemu.sh +44 -0
- package/scripts/fetch.sh +26 -0
- package/scripts/pack-initramfs.sh +41 -0
- package/test/build-init-bootstrap.sh +23 -0
- package/test/init-bootstrap.c +55 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
|
|
3
|
+
// Wraps native-bridge's raw speak()/ttsStatus() -- which never block, since
|
|
4
|
+
// TextToSpeech's completion signal is a callback the far side has no way to
|
|
5
|
+
// push to us over this protocol -- in the polling loop most callers actually
|
|
6
|
+
// want. Invoked as a subprocess this necessarily blocks the caller until
|
|
7
|
+
// speech finishes (or --async is given): that is expected, the same as any
|
|
8
|
+
// other CLI tool that waits for the thing it started.
|
|
9
|
+
import { speak, ttsStatus, available } from "../native-bridge/native-bridge.js"
|
|
10
|
+
|
|
11
|
+
// Buninu is cross-OS, not just Android: when native-bridge isn't available,
|
|
12
|
+
// fall back to a locally-spawned platform TTS command instead of just
|
|
13
|
+
// failing. This block is copied verbatim from jsmdcui's own
|
|
14
|
+
// src/index.js detectTtsCmd() (same pitch/speed/lang math, same command
|
|
15
|
+
// construction) rather than reimplemented, since the PowerShell quoting in
|
|
16
|
+
// the win32 branch is exactly the kind of thing that is easy to silently
|
|
17
|
+
// break by hand-retyping and hard to verify without a real Windows machine.
|
|
18
|
+
//
|
|
19
|
+
// One deliberate omission from the original: it ends with an
|
|
20
|
+
// `if (Bun.which("tts")) return {cmd:['tts'],via:'arg'}` fallback. Calling
|
|
21
|
+
// that from inside this exact script (also registered as Buninu's "tts"
|
|
22
|
+
// command, ahead of anything else named "tts" on PATH) would just be this
|
|
23
|
+
// script invoking itself -- the same self-reference risk xclip.js avoids
|
|
24
|
+
// around ClipboardManager's own "xclip" search, so it is left out here.
|
|
25
|
+
function detectTtsCmd(speed, pitch) {
|
|
26
|
+
const platform = process.platform;
|
|
27
|
+
|
|
28
|
+
const lang = process.env.TTS_LANG || 'zh-TW'
|
|
29
|
+
process.env.TTS_LANG = lang ;
|
|
30
|
+
|
|
31
|
+
if (platform === "android") {
|
|
32
|
+
if (Bun.which("termux-tts-speak"))
|
|
33
|
+
return { cmd: ["termux-tts-speak", "-p", String(pitch), "-r", String(speed)], via: "arg" };
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (platform === "darwin") {
|
|
37
|
+
// say -r <wpm>; pitch via [[pbas n]] embedded TTS command (0-127, 48 = normal)
|
|
38
|
+
const rate = Math.round(175 * speed);
|
|
39
|
+
const pitchN = Math.max(0, Math.min(127, Math.round(48 * pitch)));
|
|
40
|
+
return {
|
|
41
|
+
cmd: ["say", "-r", String(rate)],
|
|
42
|
+
via: "arg",
|
|
43
|
+
textTransform: pitchN !== 48 ? (t) => `[[pbas ${pitchN}]] ${t}` : null,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (platform === "win32") {
|
|
48
|
+
// Rate property: -10 to 10 (0 = normal); pitch via SSML <prosody>
|
|
49
|
+
const rate = Math.max(-10, Math.min(10, Math.round((speed - 1) * 10)));
|
|
50
|
+
const pitchPct = Math.round((pitch - 1) * 100);
|
|
51
|
+
const pitchAttr = (pitchPct >= 0 ? "+" : "") + pitchPct + "%";
|
|
52
|
+
for (const shell of ["pwsh.exe", "powershell.exe"]) {
|
|
53
|
+
if (Bun.which(shell)) {
|
|
54
|
+
const psCmd =
|
|
55
|
+
"Add-Type -AssemblyName System.Speech; " +
|
|
56
|
+
`$s = New-Object System.Speech.Synthesis.SpeechSynthesizer; $s.Rate = ${rate}; ` +
|
|
57
|
+
`$t = [Console]::In.ReadToEnd(); ` +
|
|
58
|
+
`$x = [System.Security.SecurityElement]::Escape($t); ` +
|
|
59
|
+
`$s.SpeakSsml('<speak xml:lang="${lang}" version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"><prosody pitch="${pitchAttr}">' + $x + '</prosody></speak>')`;
|
|
60
|
+
return { cmd: [shell, "-NoProfile", "-Command", psCmd], via: "stdin" };
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Linux / Android fallback: espeak-ng / espeak
|
|
66
|
+
// Speed: -s <wpm> (175 = normal), Pitch: -p <n> (0-99, 50 = normal)
|
|
67
|
+
for (const bin of ["espeak-ng", "espeak"]) {
|
|
68
|
+
if (Bun.which(bin)) {
|
|
69
|
+
const spd = Math.round(175 * speed);
|
|
70
|
+
const pit = Math.max(0, Math.min(99, Math.round(50 * pitch)));
|
|
71
|
+
return { cmd: [bin, '-s', spd, '-p', pit], via: "arg" };
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Also copied verbatim (as the spawn side of the same jsmdcui code path,
|
|
79
|
+
// runTts) other than operating on the whole text at once instead of
|
|
80
|
+
// per-sentence, since a CLI invocation has no buffer/cursor to highlight
|
|
81
|
+
// against sentence by sentence the way the jsmdcui TUI does.
|
|
82
|
+
async function speakViaPlatformCommand(text, cmd) {
|
|
83
|
+
const spawnOpts = { stdout: "ignore", stderr: "ignore", env: process.env };
|
|
84
|
+
spawnOpts.stdin = cmd.via === "stdin" ? new Blob([text]) : "ignore";
|
|
85
|
+
|
|
86
|
+
if (cmd.via === "arg") {
|
|
87
|
+
text = (text + "")
|
|
88
|
+
.replace(/^-+/, "")
|
|
89
|
+
.replaceAll("`", "")
|
|
90
|
+
.replaceAll("$", "");
|
|
91
|
+
if (cmd.textTransform) text = cmd.textTransform(text);
|
|
92
|
+
}
|
|
93
|
+
const args = cmd.via === "arg" ? [...cmd.cmd, text] : cmd.cmd;
|
|
94
|
+
const proc = Bun.spawn(args, spawnOpts);
|
|
95
|
+
return await proc.exited;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Not too short: each tick is a full unix-socket round trip, and TTS
|
|
99
|
+
// utterances run several seconds at minimum, so polling faster just burns
|
|
100
|
+
// cycles without getting the answer any sooner.
|
|
101
|
+
const POLL_MS = 500
|
|
102
|
+
|
|
103
|
+
// No wall-clock cap by default. Real TTS tooling doesn't invent one: espeak-ng
|
|
104
|
+
// has no timeout concept at all (its man page documents speed/pitch/gaps but
|
|
105
|
+
// nothing about how long it may block), and Windows SAPI's WaitUntilDone
|
|
106
|
+
// treats -1 ("wait forever") as the documented default -- a fixed cap here
|
|
107
|
+
// would just mean this tool gives up early on long text, which has nothing
|
|
108
|
+
// to do with the host actually being broken. The loop below still can't hang
|
|
109
|
+
// on a genuinely dead host: each poll has call()'s own 5s timeout (throws,
|
|
110
|
+
// caught below), and the loop condition itself already exits the moment
|
|
111
|
+
// status leaves "speaking" -- "unknown"/"error" are the real failure signal,
|
|
112
|
+
// not a timer. Pass --timeout to opt into a bounded wait instead.
|
|
113
|
+
const argv = process.argv.slice(2)
|
|
114
|
+
|
|
115
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
116
|
+
console.log(`
|
|
117
|
+
Usage: tts <text>
|
|
118
|
+
tts "hello world"
|
|
119
|
+
tts -f "interrupt and say this instead"
|
|
120
|
+
tts -a "say this, don't wait for it to finish"
|
|
121
|
+
tts --timeout 30000 "give up after 30s if still speaking"
|
|
122
|
+
tts --pitch 1.2 --speed 0.8 "slower and higher-pitched"
|
|
123
|
+
|
|
124
|
+
-f, --flush interrupt whatever is currently speaking
|
|
125
|
+
-a, --async print the handle and exit immediately instead of polling
|
|
126
|
+
--timeout <ms> give up and exit non-zero after this long (default: none,
|
|
127
|
+
wait as long as it takes -- matches espeak-ng/SAPI)
|
|
128
|
+
--pitch <n> 1.0 is normal (default: $TTS_PITCH, or 1 if unset)
|
|
129
|
+
--speed <n> 1.0 is normal (default: $TTS_SPEED, or 1 if unset)
|
|
130
|
+
`)
|
|
131
|
+
process.exit(0)
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const flush = argv.includes("-f") || argv.includes("--flush")
|
|
135
|
+
const isAsync = argv.includes("-a") || argv.includes("--async")
|
|
136
|
+
|
|
137
|
+
const optValue = (flag, envFallback) => {
|
|
138
|
+
const i = argv.indexOf(flag)
|
|
139
|
+
const raw = i !== -1 ? argv[i + 1] : process.env[envFallback]
|
|
140
|
+
const n = Number(raw)
|
|
141
|
+
return Number.isFinite(n) ? n : 1
|
|
142
|
+
}
|
|
143
|
+
const timeoutIdx = argv.indexOf("--timeout")
|
|
144
|
+
const maxWaitMs = timeoutIdx !== -1 ? Number(argv[timeoutIdx + 1]) : null
|
|
145
|
+
const pitch = optValue("--pitch", "TTS_PITCH")
|
|
146
|
+
const speed = optValue("--speed", "TTS_SPEED")
|
|
147
|
+
|
|
148
|
+
const valueFlags = new Set(["--timeout", "--pitch", "--speed"])
|
|
149
|
+
const text = argv.find((a, i) => !a.startsWith("-") && !valueFlags.has(argv[i - 1])) ?? ""
|
|
150
|
+
|
|
151
|
+
if (!available()) {
|
|
152
|
+
// No Android native bridge -- fall back to a local platform TTS command
|
|
153
|
+
// (see detectTtsCmd() above). flush/polling/handles are all native-bridge
|
|
154
|
+
// concepts specific to Android's async TextToSpeech callback; there is no
|
|
155
|
+
// equivalent "interrupt what's currently speaking" here, so -f/--flush is
|
|
156
|
+
// silently a no-op on this path.
|
|
157
|
+
const cmd = detectTtsCmd(speed, pitch)
|
|
158
|
+
if (!cmd) {
|
|
159
|
+
console.error("no TTS backend found: no native bridge, and no termux-tts-speak/say/PowerShell/espeak-ng/espeak on PATH")
|
|
160
|
+
process.exit(1)
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
if (isAsync) {
|
|
164
|
+
speakViaPlatformCommand(text, cmd)
|
|
165
|
+
process.exit(0)
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
const code = await speakViaPlatformCommand(text, cmd)
|
|
169
|
+
process.exit(code === 0 ? 0 : 1)
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
let handle
|
|
173
|
+
try {
|
|
174
|
+
handle = await speak(text, speed, pitch, flush)
|
|
175
|
+
} catch (e) {
|
|
176
|
+
console.error(`speak failed: ${e.message}`)
|
|
177
|
+
process.exit(1)
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
if (isAsync) {
|
|
181
|
+
console.log(handle)
|
|
182
|
+
process.exit(0)
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
const start = Date.now()
|
|
186
|
+
let status = "speaking"
|
|
187
|
+
|
|
188
|
+
while (status === "speaking") {
|
|
189
|
+
if (maxWaitMs != null && Date.now() - start > maxWaitMs) {
|
|
190
|
+
console.error(`tts: gave up waiting for "${handle}" after ${maxWaitMs}ms`)
|
|
191
|
+
process.exit(1)
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
await new Promise(resolve => setTimeout(resolve, POLL_MS))
|
|
195
|
+
|
|
196
|
+
try {
|
|
197
|
+
status = await ttsStatus(handle)
|
|
198
|
+
} catch (e) {
|
|
199
|
+
console.error(`ttsStatus failed: ${e.message}`)
|
|
200
|
+
process.exit(1)
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
if (status === "error") {
|
|
205
|
+
console.error(`tts: "${handle}" reported an error`)
|
|
206
|
+
process.exit(1)
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
if (status === "unknown") {
|
|
210
|
+
console.error(`tts: "${handle}" went unknown before finishing`)
|
|
211
|
+
process.exit(1)
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
process.exit(0)
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
|
|
3
|
+
// Ported from ../tmpk/bin/xclip.sh (the DroidScript-era xclip). That version
|
|
4
|
+
// bridged to native only through DroidScript's dsapi.pipe; this one uses
|
|
5
|
+
// native-bridge instead. The core semantics are unchanged: "primary" is
|
|
6
|
+
// local-file-only (matches X11's mouse-selection clipboard, which xclip also
|
|
7
|
+
// keeps separate from the real clipboard), and only "-selection clipboard"
|
|
8
|
+
// (or its "-clip"/"-clipboard" shorthand) touches the real system clipboard.
|
|
9
|
+
import { getcb, setcb, available } from "../native-bridge/native-bridge.js"
|
|
10
|
+
import { ClipboardManager } from "../jsmdcui/src/platform/clipboard.js"
|
|
11
|
+
|
|
12
|
+
// Buninu is cross-OS, not just Android, so the "clipboard" register falls
|
|
13
|
+
// back through: native-bridge (Android) -> jsmdcui's own ClipboardManager
|
|
14
|
+
// (win32/darwin only, see below) -> wl-copy/wl-paste (Linux, Wayland).
|
|
15
|
+
//
|
|
16
|
+
// ClipboardManager is deliberately NOT used on Linux-like platforms
|
|
17
|
+
// (including Android): its own backend detection searches PATH for a binary
|
|
18
|
+
// literally named "xclip" there, and this script is itself registered as
|
|
19
|
+
// Buninu's "xclip" command, ahead of any real system xclip on PATH -- using
|
|
20
|
+
// it here would make this script shell out to itself. Its win32/darwin
|
|
21
|
+
// branches never search for "xclip" at all, so those two are safe.
|
|
22
|
+
let desktopClipboard = null
|
|
23
|
+
function getDesktopClipboard() {
|
|
24
|
+
if (process.platform !== "win32" && process.platform !== "darwin") return null
|
|
25
|
+
if (!desktopClipboard) desktopClipboard = new ClipboardManager()
|
|
26
|
+
return desktopClipboard
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const wlAvailable = () => !!(Bun.which("wl-copy") && Bun.which("wl-paste"))
|
|
30
|
+
const wlRead = () => {
|
|
31
|
+
const proc = Bun.spawnSync(["wl-paste", "--no-newline"])
|
|
32
|
+
return proc.success ? new TextDecoder().decode(proc.stdout) : null
|
|
33
|
+
}
|
|
34
|
+
const wlWrite = (text) => Bun.spawnSync(["wl-copy"], { stdin: Buffer.from(text) }).success
|
|
35
|
+
|
|
36
|
+
const argv = process.argv.slice(2)
|
|
37
|
+
|
|
38
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
39
|
+
console.log(`
|
|
40
|
+
Usage: Paste/Copy
|
|
41
|
+
xclip -o [-selection clipboard]
|
|
42
|
+
xclip -o [-clip]
|
|
43
|
+
echo hello | xclip [-selection clipboard]
|
|
44
|
+
echo hello | xclip [-clip]
|
|
45
|
+
|
|
46
|
+
Uses primary by default(mouse selection)
|
|
47
|
+
`)
|
|
48
|
+
process.exit(0)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const selMatch = argv.join(" ").match(/-selection\s+(\S+)/)
|
|
52
|
+
const cb = selMatch ? selMatch[1]
|
|
53
|
+
: argv.some(a => a.includes("-clip")) ? "clipboard"
|
|
54
|
+
: "primary"
|
|
55
|
+
|
|
56
|
+
process.stderr.write(`\x1b[35mClipboard 剪貼板📋 : ${cb} \n\x1b[0m`)
|
|
57
|
+
|
|
58
|
+
const cbf = `${process.env.HOME}/.xclip.${cb}`
|
|
59
|
+
const useNative = cb !== "primary"
|
|
60
|
+
const desktop = useNative ? getDesktopClipboard() : null
|
|
61
|
+
|
|
62
|
+
if (useNative && !available() && !desktop && !wlAvailable())
|
|
63
|
+
process.stderr.write(`no system clipboard found (no native bridge, no ClipboardManager backend, no wl-copy/wl-paste)\nNo native clipboard now!\n`)
|
|
64
|
+
|
|
65
|
+
const isPaste = argv.some(a => a.toLowerCase() === "-o")
|
|
66
|
+
|
|
67
|
+
if (isPaste) {
|
|
68
|
+
process.stderr.write(`\x1b[33mPaste 貼上 📋 \n\x1b[0m`)
|
|
69
|
+
|
|
70
|
+
if (useNative) {
|
|
71
|
+
if (available()) {
|
|
72
|
+
try {
|
|
73
|
+
await Bun.write(cbf, (await getcb()) ?? "")
|
|
74
|
+
} catch (e) {
|
|
75
|
+
process.stderr.write(`getcb failed: ${e.message}\n`)
|
|
76
|
+
}
|
|
77
|
+
} else if (desktop) {
|
|
78
|
+
try {
|
|
79
|
+
await Bun.write(cbf, desktop.read("clipboard") ?? "")
|
|
80
|
+
} catch (e) {
|
|
81
|
+
process.stderr.write(`clipboard read failed: ${e.message}\n`)
|
|
82
|
+
}
|
|
83
|
+
} else if (wlAvailable()) {
|
|
84
|
+
const text = wlRead()
|
|
85
|
+
if (text != null) await Bun.write(cbf, text)
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const file = Bun.file(cbf)
|
|
90
|
+
if (await file.exists()) process.stdout.write(new Uint8Array(await file.arrayBuffer()))
|
|
91
|
+
} else {
|
|
92
|
+
process.stderr.write(`\x1b[33mCopy 複製 ✂️ \n\x1b[0m`)
|
|
93
|
+
|
|
94
|
+
const input = await Bun.stdin.arrayBuffer()
|
|
95
|
+
await Bun.write(cbf, input)
|
|
96
|
+
|
|
97
|
+
if (useNative) {
|
|
98
|
+
if (available()) {
|
|
99
|
+
try {
|
|
100
|
+
await setcb(new TextDecoder().decode(input))
|
|
101
|
+
} catch (e) {
|
|
102
|
+
process.stderr.write(`setcb failed: ${e.message}\n`)
|
|
103
|
+
}
|
|
104
|
+
} else if (desktop) {
|
|
105
|
+
try {
|
|
106
|
+
desktop.write(new TextDecoder().decode(input), "clipboard")
|
|
107
|
+
} catch (e) {
|
|
108
|
+
process.stderr.write(`clipboard write failed: ${e.message}\n`)
|
|
109
|
+
}
|
|
110
|
+
} else if (wlAvailable()) {
|
|
111
|
+
wlWrite(new TextDecoder().decode(input))
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// Explicit exit: call()'s own timeout race means every await above is
|
|
117
|
+
// guaranteed to settle, but a getcb()/setcb() that hit that timeout leaves
|
|
118
|
+
// an abandoned fetch running, which keeps Bun's event loop alive on its own.
|
|
119
|
+
// Without this, xclip could still hang after printing everything it needs
|
|
120
|
+
// to -- the shell would just never get its prompt back.
|
|
121
|
+
process.exit(0)
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
|
|
3
|
+
// Android goes through native-bridge's xdgOpen (MainActivity.java validates
|
|
4
|
+
// the path stays under Buninu's home and serves it back out through a
|
|
5
|
+
// read-only content:// provider; a bare URL just goes to ACTION_VIEW). The
|
|
6
|
+
// other platforms each have their own "open with whatever the OS thinks is
|
|
7
|
+
// the default handler" mechanism -- macOS/Windows are real OS
|
|
8
|
+
// commands/APIs, but Linux's is conventionally *also* a command named
|
|
9
|
+
// xdg-open, so this script has to be careful not to find itself on PATH.
|
|
10
|
+
import {
|
|
11
|
+
xdgOpen as bridgeOpen, available, openWebView, showWebView,
|
|
12
|
+
} from "../native-bridge/native-bridge.js"
|
|
13
|
+
const fs = require("fs")
|
|
14
|
+
|
|
15
|
+
// MINAPK_WEBVIEW names *which* of the host app's WebViews to open into (0 is
|
|
16
|
+
// the console, 1 the app WebView, -1 whichever is in front); unset means the
|
|
17
|
+
// unchanged behavior of handing the target to the system's default handler.
|
|
18
|
+
// It is read here rather than being detected by the host, because it is an
|
|
19
|
+
// environment variable of this Bun process tree -- the host app's own process
|
|
20
|
+
// cannot see a value exported in this shell a moment ago, and the whole point
|
|
21
|
+
// of the variable is that it can be.
|
|
22
|
+
//
|
|
23
|
+
// Deliberately never Number()/parseInt(): Number("") is 0, and 0 is a
|
|
24
|
+
// perfectly valid WebView id, so an exported-but-empty MINAPK_WEBVIEW= (the
|
|
25
|
+
// usual way to switch something off) would come out meaning "open in the
|
|
26
|
+
// console" -- i.e. navigate the terminal away. parseInt would likewise turn
|
|
27
|
+
// "1x" into 1. Only a bare optionally-signed integer counts; anything else is
|
|
28
|
+
// reported and treated as unset.
|
|
29
|
+
function webViewIdFromEnv() {
|
|
30
|
+
const raw = (process.env.MINAPK_WEBVIEW ?? "").trim()
|
|
31
|
+
if (raw === "") return null
|
|
32
|
+
if (!/^-?\d+$/.test(raw)) {
|
|
33
|
+
process.stderr.write(
|
|
34
|
+
`xdg-open: ignoring MINAPK_WEBVIEW=${raw} (not an integer WebView id)\n`)
|
|
35
|
+
return null
|
|
36
|
+
}
|
|
37
|
+
return Number(raw)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Only URLs. A filesystem path stays on the bridgeOpen path even when
|
|
41
|
+
// MINAPK_WEBVIEW is set: WebView's setAllowFileAccess defaults to false from
|
|
42
|
+
// API 30 on, so a file:// URL under Buninu's home would load as a blank page,
|
|
43
|
+
// whereas the host's xdgOpen already serves that file properly through its
|
|
44
|
+
// read-only content:// provider.
|
|
45
|
+
const isUrl = (target) => /^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//.test(target)
|
|
46
|
+
|
|
47
|
+
// The host answers with the id it actually used -- a JSON number -- and with
|
|
48
|
+
// a string when something went wrong: "error: no such WebView: 9" from the
|
|
49
|
+
// dispatcher, or rpc.mjs's own "Unknown func ..." when the APK is older than
|
|
50
|
+
// these functions and does not list them in _discover. rpc.mjs also *resolves*
|
|
51
|
+
// to an Error object instead of throwing when the fetch itself fails. So
|
|
52
|
+
// success is checked as "is genuinely a number", never by parsing the result:
|
|
53
|
+
// see webViewIdFromEnv above for why a coercing parse is dangerous here.
|
|
54
|
+
//
|
|
55
|
+
// showWebView(-1) means "switch to the next one", not "the one just loaded",
|
|
56
|
+
// so the switch uses the id openWebView resolved and handed back, not the id
|
|
57
|
+
// that was asked for.
|
|
58
|
+
async function openInWebView(id, url) {
|
|
59
|
+
const opened = await openWebView(id, url)
|
|
60
|
+
if (typeof opened !== "number" || !Number.isInteger(opened)) {
|
|
61
|
+
process.stderr.write(
|
|
62
|
+
`xdg-open: MINAPK_WEBVIEW=${id}: ${opened?.message ?? opened}\n`)
|
|
63
|
+
return false
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const shown = await showWebView(opened)
|
|
67
|
+
if (typeof shown !== "number" || !Number.isInteger(shown)) {
|
|
68
|
+
// Loaded but not brought to the front: say so rather than reporting
|
|
69
|
+
// success for something the user cannot see, but do not fall back to the
|
|
70
|
+
// system handler either -- the page really is loaded in that WebView.
|
|
71
|
+
process.stderr.write(
|
|
72
|
+
`xdg-open: loaded in WebView ${opened} but could not switch to it: ` +
|
|
73
|
+
`${shown?.message ?? shown}\n`)
|
|
74
|
+
}
|
|
75
|
+
return true
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Buninu's own bin/ is prepended to PATH ahead of any real system binary of
|
|
79
|
+
// the same name (same concern as xclip.js/tts.js), and this script is
|
|
80
|
+
// itself registered as Buninu's "xdg-open" command -- a naive PATH search
|
|
81
|
+
// would just find this file. Skip Buninu's own bin dir and keep looking
|
|
82
|
+
// further down PATH for wherever a real xdg-open actually lives.
|
|
83
|
+
function findSystemXdgOpen() {
|
|
84
|
+
const ownBinDir = process.env.BUNINU_HOME ? `${process.env.BUNINU_HOME}/bin` : null
|
|
85
|
+
for (const dir of (process.env.PATH || "").split(":").filter(Boolean)) {
|
|
86
|
+
if (dir === ownBinDir) continue
|
|
87
|
+
const candidate = `${dir}/xdg-open`
|
|
88
|
+
try {
|
|
89
|
+
fs.accessSync(candidate, fs.constants.X_OK)
|
|
90
|
+
return candidate
|
|
91
|
+
} catch {}
|
|
92
|
+
}
|
|
93
|
+
return null
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
async function runCommand(args) {
|
|
97
|
+
const proc = Bun.spawn(args, { stdout: "ignore", stderr: "ignore" })
|
|
98
|
+
return (await proc.exited) === 0
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const argv = process.argv.slice(2)
|
|
102
|
+
|
|
103
|
+
if (argv.length === 0 || argv.includes("-h") || argv.includes("--help")) {
|
|
104
|
+
console.log("usage: xdg-open <file-or-url>")
|
|
105
|
+
process.exit(argv.length === 0 ? 1 : 0)
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const target = argv[0]
|
|
109
|
+
let ok = false
|
|
110
|
+
|
|
111
|
+
try {
|
|
112
|
+
if (process.platform === "android") {
|
|
113
|
+
if (available()) {
|
|
114
|
+
const webViewId = webViewIdFromEnv()
|
|
115
|
+
// A failed WebView open falls back to the system handler rather than
|
|
116
|
+
// failing outright: the request was "open this", and MINAPK_WEBVIEW
|
|
117
|
+
// only says where it would be preferred. openInWebView has already
|
|
118
|
+
// explained on stderr why it could not.
|
|
119
|
+
ok = webViewId !== null && isUrl(target)
|
|
120
|
+
? (await openInWebView(webViewId, target)) || (await bridgeOpen(target))
|
|
121
|
+
: await bridgeOpen(target)
|
|
122
|
+
} else if (Bun.which("termux-open")) {
|
|
123
|
+
// Plain Termux (no minapk) still reports platform "android" but has
|
|
124
|
+
// no PKG_BRIDGE_SOCK -- termux-open (Termux:API) does the same
|
|
125
|
+
// ACTION_VIEW-based open, same fallback relationship as tts.js's
|
|
126
|
+
// termux-tts-speak branch when native-bridge isn't available.
|
|
127
|
+
ok = await runCommand(["termux-open", target])
|
|
128
|
+
} else {
|
|
129
|
+
throw new Error("no native bridge and no termux-open (install termux-api, or run inside minapk's APK)")
|
|
130
|
+
}
|
|
131
|
+
} else if (process.platform === "darwin") {
|
|
132
|
+
ok = await runCommand(["open", target])
|
|
133
|
+
} else if (process.platform === "win32") {
|
|
134
|
+
// start is a cmd builtin, not a real executable, and needs an empty ""
|
|
135
|
+
// title argument first or it treats a quoted target as the title.
|
|
136
|
+
ok = await runCommand(["cmd", "/c", "start", "", target])
|
|
137
|
+
} else {
|
|
138
|
+
const real = findSystemXdgOpen()
|
|
139
|
+
if (!real) throw new Error("no system xdg-open found on PATH")
|
|
140
|
+
ok = await runCommand([real, target])
|
|
141
|
+
}
|
|
142
|
+
} catch (e) {
|
|
143
|
+
process.stderr.write(`xdg-open: ${e.message}\n`)
|
|
144
|
+
process.exit(1)
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// Explicit exit: bridgeOpen() goes through native-bridge's call(), whose own
|
|
148
|
+
// timeout race leaves an abandoned fetch running the event loop on a
|
|
149
|
+
// timeout -- without this, xdg-open could hang after printing everything it
|
|
150
|
+
// needs to.
|
|
151
|
+
process.exit(ok ? 0 : 1)
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
@echo off
|
|
2
|
+
setlocal EnableExtensions EnableDelayedExpansion
|
|
3
|
+
|
|
4
|
+
set "BUNINU_BUN_ARCHIVE=%~dp0..\apps\bun\bunBin.tgz"
|
|
5
|
+
set "BUNINU_BUN_WX=%~dp0bun-wx.exe"
|
|
6
|
+
set "BUNINU_EXTRACT_BUN="
|
|
7
|
+
|
|
8
|
+
if exist "%BUNINU_BUN_ARCHIVE%" (
|
|
9
|
+
if not exist "%BUNINU_BUN_WX%" set "BUNINU_EXTRACT_BUN=1"
|
|
10
|
+
|
|
11
|
+
if exist "%BUNINU_BUN_WX%" if exist "%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" (
|
|
12
|
+
for /f "delims=" %%U in ('"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -NoProfile -NonInteractive -Command "if ((Get-Item -LiteralPath $env:BUNINU_BUN_ARCHIVE).LastWriteTimeUtc -gt (Get-Item -LiteralPath $env:BUNINU_BUN_WX).LastWriteTimeUtc) { '1' }"') do set "BUNINU_EXTRACT_BUN=%%U"
|
|
13
|
+
)
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
if defined BUNINU_EXTRACT_BUN (
|
|
17
|
+
tar -xzf "%BUNINU_BUN_ARCHIVE%" -C "%~dp0"
|
|
18
|
+
if errorlevel 1 (
|
|
19
|
+
echo Failed to extract Bun archive: %BUNINU_BUN_ARCHIVE% 1>&2
|
|
20
|
+
exit /b 1
|
|
21
|
+
)
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
if exist "%~dp0bun-wx.exe" (
|
|
25
|
+
"%~dp0bun-wx.exe" %*
|
|
26
|
+
exit /b !ERRORLEVEL!
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
for /f "delims=" %%B in ('where bun.exe 2^>nul') do (
|
|
30
|
+
if /I not "%%~dpB"=="%~dp0" (
|
|
31
|
+
"%%~fB" %*
|
|
32
|
+
exit /b !ERRORLEVEL!
|
|
33
|
+
)
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
echo Bun Binary not found: %~dp0bun-wx.exe ^(and no external bun.exe found in PATH^) 1>&2
|
|
37
|
+
exit /b 127
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
|
|
3
|
+
sd=$(dirname "$(realpath "$0")")
|
|
4
|
+
|
|
5
|
+
bunBinTgz=$sd/../apps/bun/bunBin.tgz
|
|
6
|
+
|
|
7
|
+
annl=androidNativeLibs
|
|
8
|
+
|
|
9
|
+
if [ -f /system/bin/linker64 ] ; then
|
|
10
|
+
if [ -f "$sd"/$annl/libbun.so ] ; then
|
|
11
|
+
exec "$sd"/$annl/libbun.so "$@"
|
|
12
|
+
elif uname -m | grep -q aarch64 ; then
|
|
13
|
+
bunBin="$sd"/bun-la
|
|
14
|
+
else
|
|
15
|
+
bunBin="$sd"/bun-lx
|
|
16
|
+
fi
|
|
17
|
+
elif [ -d "$WINDIR" ] ; then
|
|
18
|
+
bunBin="$sd"/bun-wx.exe
|
|
19
|
+
elif uname -m | grep -q aarch64 ; then
|
|
20
|
+
bunBin="$sd"/bun-la
|
|
21
|
+
else
|
|
22
|
+
bunBin="$sd"/bun-lx
|
|
23
|
+
fi
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
if [ -f "$bunBinTgz" ] &&
|
|
27
|
+
[ "$bunBinTgz" -nt "$bunBin" ] ; then
|
|
28
|
+
tar -xzvf "$bunBinTgz" -C "$sd"
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
if [ -f "$bunBin" ] ; then
|
|
33
|
+
exec "$bunBin" "$@"
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
# The package bin directory can contain a `bun` symlink back to this script.
|
|
37
|
+
# Search PATH manually so that a system/user-installed Bun outside this
|
|
38
|
+
# directory can be used without recursively executing bun.sh again.
|
|
39
|
+
oldIFS=$IFS
|
|
40
|
+
IFS=:
|
|
41
|
+
for pathDir in ${PATH:-} ; do
|
|
42
|
+
[ -n "$pathDir" ] || pathDir=.
|
|
43
|
+
if [ "$(realpath "$pathDir" 2>/dev/null)" = "$sd" ] ; then
|
|
44
|
+
continue
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
for externalBun in "$pathDir/bun" "$pathDir/bun.exe" ; do
|
|
48
|
+
if [ -f "$externalBun" ] && [ -x "$externalBun" ] ; then
|
|
49
|
+
IFS=$oldIFS
|
|
50
|
+
exec "$externalBun" "$@"
|
|
51
|
+
fi
|
|
52
|
+
done
|
|
53
|
+
done
|
|
54
|
+
IFS=$oldIFS
|
|
55
|
+
|
|
56
|
+
echo "Bun Binary not found: $bunBin (and no external Bun found in PATH)" 1>&2
|
|
57
|
+
exit 127
|