@fairyhunter13/opentui-core 0.1.114 → 0.1.116
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/3d/SpriteResourceManager.d.ts +74 -0
- package/3d/SpriteUtils.d.ts +13 -0
- package/3d/TextureUtils.d.ts +24 -0
- package/3d/ThreeRenderable.d.ts +40 -0
- package/3d/WGPURenderer.d.ts +61 -0
- package/3d/animation/ExplodingSpriteEffect.d.ts +71 -0
- package/3d/animation/PhysicsExplodingSpriteEffect.d.ts +76 -0
- package/3d/animation/SpriteAnimator.d.ts +124 -0
- package/3d/animation/SpriteParticleGenerator.d.ts +62 -0
- package/3d/canvas.d.ts +44 -0
- package/3d/index.d.ts +12 -0
- package/3d/physics/PlanckPhysicsAdapter.d.ts +19 -0
- package/3d/physics/RapierPhysicsAdapter.d.ts +19 -0
- package/3d/physics/physics-interface.d.ts +27 -0
- package/3d.d.ts +2 -0
- package/3d.js +34041 -0
- package/3d.js.map +155 -0
- package/LICENSE +21 -0
- package/NativeSpanFeed.d.ts +41 -0
- package/Renderable.d.ts +334 -0
- package/animation/Timeline.d.ts +126 -0
- package/ansi.d.ts +13 -0
- package/buffer.d.ts +111 -0
- package/console.d.ts +144 -0
- package/edit-buffer.d.ts +98 -0
- package/editor-view.d.ts +73 -0
- package/index-dcj62y8t.js +20614 -0
- package/index-dcj62y8t.js.map +67 -0
- package/index-jyrhjc34.js +411 -0
- package/index-jyrhjc34.js.map +10 -0
- package/index-wc7ae60z.js +12299 -0
- package/index-wc7ae60z.js.map +42 -0
- package/index.d.ts +23 -0
- package/index.js +478 -0
- package/index.js.map +9 -0
- package/lib/KeyHandler.d.ts +61 -0
- package/lib/RGBA.d.ts +25 -0
- package/lib/ascii.font.d.ts +508 -0
- package/lib/border.d.ts +51 -0
- package/lib/bunfs.d.ts +7 -0
- package/lib/clipboard.d.ts +17 -0
- package/lib/clock.d.ts +15 -0
- package/lib/data-paths.d.ts +26 -0
- package/lib/debounce.d.ts +42 -0
- package/lib/detect-links.d.ts +6 -0
- package/lib/env.d.ts +42 -0
- package/lib/extmarks-history.d.ts +17 -0
- package/lib/extmarks.d.ts +89 -0
- package/lib/hast-styled-text.d.ts +17 -0
- package/lib/index.d.ts +21 -0
- package/lib/keymapping.d.ts +25 -0
- package/lib/objects-in-viewport.d.ts +24 -0
- package/lib/output.capture.d.ts +24 -0
- package/lib/parse.keypress-kitty.d.ts +2 -0
- package/lib/parse.keypress.d.ts +26 -0
- package/lib/parse.mouse.d.ts +30 -0
- package/lib/paste.d.ts +7 -0
- package/lib/queue.d.ts +15 -0
- package/lib/renderable.validations.d.ts +12 -0
- package/lib/scroll-acceleration.d.ts +43 -0
- package/lib/selection.d.ts +63 -0
- package/lib/singleton.d.ts +7 -0
- package/lib/stdin-parser.d.ts +87 -0
- package/lib/styled-text.d.ts +63 -0
- package/lib/terminal-capability-detection.d.ts +30 -0
- package/lib/terminal-palette.d.ts +50 -0
- package/lib/tree-sitter/assets/update.d.ts +11 -0
- package/lib/tree-sitter/client.d.ts +47 -0
- package/lib/tree-sitter/default-parsers.d.ts +2 -0
- package/lib/tree-sitter/download-utils.d.ts +21 -0
- package/lib/tree-sitter/index.d.ts +8 -0
- package/lib/tree-sitter/parser.worker.d.ts +1 -0
- package/lib/tree-sitter/parsers-config.d.ts +53 -0
- package/lib/tree-sitter/resolve-ft.d.ts +5 -0
- package/lib/tree-sitter/types.d.ts +82 -0
- package/lib/tree-sitter-styled-text.d.ts +14 -0
- package/lib/validate-dir-name.d.ts +1 -0
- package/lib/yoga.options.d.ts +32 -0
- package/package.json +53 -62
- package/parser.worker.js +899 -0
- package/parser.worker.js.map +12 -0
- package/plugins/core-slot.d.ts +72 -0
- package/plugins/registry.d.ts +42 -0
- package/plugins/types.d.ts +34 -0
- package/post/effects.d.ts +147 -0
- package/post/filters.d.ts +65 -0
- package/post/matrices.d.ts +20 -0
- package/renderables/ASCIIFont.d.ts +52 -0
- package/renderables/Box.d.ts +81 -0
- package/renderables/Code.d.ts +78 -0
- package/renderables/Diff.d.ts +142 -0
- package/renderables/EditBufferRenderable.d.ts +237 -0
- package/renderables/FrameBuffer.d.ts +16 -0
- package/renderables/Input.d.ts +67 -0
- package/renderables/LineNumberRenderable.d.ts +78 -0
- package/renderables/Markdown.d.ts +185 -0
- package/renderables/ScrollBar.d.ts +77 -0
- package/renderables/ScrollBox.d.ts +124 -0
- package/renderables/Select.d.ts +115 -0
- package/renderables/Slider.d.ts +47 -0
- package/renderables/TabSelect.d.ts +96 -0
- package/renderables/Text.d.ts +36 -0
- package/renderables/TextBufferRenderable.d.ts +105 -0
- package/renderables/TextNode.d.ts +91 -0
- package/renderables/TextTable.d.ts +140 -0
- package/renderables/Textarea.d.ts +63 -0
- package/renderables/TimeToFirstDraw.d.ts +24 -0
- package/renderables/__tests__/renderable-test-utils.d.ts +12 -0
- package/renderables/composition/VRenderable.d.ts +16 -0
- package/renderables/composition/constructs.d.ts +35 -0
- package/renderables/composition/vnode.d.ts +46 -0
- package/renderables/index.d.ts +23 -0
- package/renderables/markdown-parser.d.ts +10 -0
- package/renderer.d.ts +419 -0
- package/runtime-plugin-support.d.ts +3 -0
- package/runtime-plugin-support.js +29 -0
- package/runtime-plugin-support.js.map +10 -0
- package/runtime-plugin.d.ts +16 -0
- package/runtime-plugin.js +16 -0
- package/runtime-plugin.js.map +9 -0
- package/syntax-style.d.ts +54 -0
- package/testing/manual-clock.d.ts +17 -0
- package/testing/mock-keys.d.ts +81 -0
- package/testing/mock-mouse.d.ts +38 -0
- package/testing/mock-tree-sitter-client.d.ts +23 -0
- package/testing/spy.d.ts +7 -0
- package/testing/test-recorder.d.ts +61 -0
- package/testing/test-renderer.d.ts +23 -0
- package/testing.d.ts +6 -0
- package/testing.js +697 -0
- package/testing.js.map +15 -0
- package/text-buffer-view.d.ts +42 -0
- package/text-buffer.d.ts +67 -0
- package/types.d.ts +139 -0
- package/utils.d.ts +14 -0
- package/zig-structs.d.ts +155 -0
- package/zig.d.ts +353 -0
- package/dev/keypress-debug-renderer.ts +0 -148
- package/dev/keypress-debug.ts +0 -43
- package/dev/print-env-vars.ts +0 -32
- package/dev/test-tmux-graphics-334.sh +0 -68
- package/dev/thai-debug-test.ts +0 -68
- package/docs/development.md +0 -144
- package/scripts/build.ts +0 -400
- package/scripts/publish.ts +0 -60
- package/src/3d/SpriteResourceManager.ts +0 -286
- package/src/3d/SpriteUtils.ts +0 -70
- package/src/3d/TextureUtils.ts +0 -196
- package/src/3d/ThreeRenderable.ts +0 -197
- package/src/3d/WGPURenderer.ts +0 -294
- package/src/3d/animation/ExplodingSpriteEffect.ts +0 -513
- package/src/3d/animation/PhysicsExplodingSpriteEffect.ts +0 -429
- package/src/3d/animation/SpriteAnimator.ts +0 -633
- package/src/3d/animation/SpriteParticleGenerator.ts +0 -435
- package/src/3d/canvas.ts +0 -464
- package/src/3d/index.ts +0 -12
- package/src/3d/physics/PlanckPhysicsAdapter.ts +0 -72
- package/src/3d/physics/RapierPhysicsAdapter.ts +0 -66
- package/src/3d/physics/physics-interface.ts +0 -31
- package/src/3d/shaders/supersampling.wgsl +0 -201
- package/src/3d.ts +0 -3
- package/src/NativeSpanFeed.ts +0 -300
- package/src/Renderable.ts +0 -1704
- package/src/__snapshots__/buffer.test.ts.snap +0 -28
- package/src/animation/Timeline.test.ts +0 -2709
- package/src/animation/Timeline.ts +0 -598
- package/src/ansi.ts +0 -18
- package/src/benchmark/attenuation-benchmark.ts +0 -81
- package/src/benchmark/colormatrix-benchmark.ts +0 -128
- package/src/benchmark/gain-benchmark.ts +0 -80
- package/src/benchmark/latest-all-bench-run.json +0 -707
- package/src/benchmark/latest-async-bench-run.json +0 -336
- package/src/benchmark/latest-default-bench-run.json +0 -657
- package/src/benchmark/latest-large-bench-run.json +0 -707
- package/src/benchmark/latest-quick-bench-run.json +0 -207
- package/src/benchmark/markdown-benchmark.ts +0 -1796
- package/src/benchmark/native-span-feed-async-benchmark.ts +0 -355
- package/src/benchmark/native-span-feed-benchmark.md +0 -56
- package/src/benchmark/native-span-feed-benchmark.ts +0 -596
- package/src/benchmark/native-span-feed-compare.ts +0 -280
- package/src/benchmark/renderer-benchmark.ts +0 -754
- package/src/benchmark/text-table-benchmark.ts +0 -948
- package/src/buffer.test.ts +0 -291
- package/src/buffer.ts +0 -554
- package/src/console.test.ts +0 -612
- package/src/console.ts +0 -1254
- package/src/edit-buffer.test.ts +0 -1769
- package/src/edit-buffer.ts +0 -411
- package/src/editor-view.test.ts +0 -1032
- package/src/editor-view.ts +0 -284
- package/src/examples/ascii-font-selection-demo.ts +0 -245
- package/src/examples/assets/Water_2_M_Normal.jpg +0 -0
- package/src/examples/assets/concrete.png +0 -0
- package/src/examples/assets/crate.png +0 -0
- package/src/examples/assets/crate_emissive.png +0 -0
- package/src/examples/assets/forrest_background.png +0 -0
- package/src/examples/assets/hast-example.json +0 -1018
- package/src/examples/assets/heart.png +0 -0
- package/src/examples/assets/main_char_heavy_attack.png +0 -0
- package/src/examples/assets/main_char_idle.png +0 -0
- package/src/examples/assets/main_char_jump_end.png +0 -0
- package/src/examples/assets/main_char_jump_landing.png +0 -0
- package/src/examples/assets/main_char_jump_start.png +0 -0
- package/src/examples/assets/main_char_run_loop.png +0 -0
- package/src/examples/assets/roughness_map.jpg +0 -0
- package/src/examples/build.ts +0 -115
- package/src/examples/code-demo.ts +0 -924
- package/src/examples/console-demo.ts +0 -358
- package/src/examples/core-plugin-slots-demo.ts +0 -759
- package/src/examples/diff-demo.ts +0 -701
- package/src/examples/draggable-three-demo.ts +0 -259
- package/src/examples/editor-demo.ts +0 -322
- package/src/examples/extmarks-demo.ts +0 -196
- package/src/examples/focus-restore-demo.ts +0 -310
- package/src/examples/fonts.ts +0 -245
- package/src/examples/fractal-shader-demo.ts +0 -268
- package/src/examples/framebuffer-demo.ts +0 -674
- package/src/examples/full-unicode-demo.ts +0 -241
- package/src/examples/golden-star-demo.ts +0 -933
- package/src/examples/grayscale-buffer-demo.ts +0 -249
- package/src/examples/hast-syntax-highlighting-demo.ts +0 -129
- package/src/examples/index.ts +0 -926
- package/src/examples/input-demo.ts +0 -377
- package/src/examples/input-select-layout-demo.ts +0 -425
- package/src/examples/install.sh +0 -143
- package/src/examples/keypress-debug-demo.ts +0 -452
- package/src/examples/lib/HexList.ts +0 -122
- package/src/examples/lib/PaletteGrid.ts +0 -125
- package/src/examples/lib/standalone-keys.ts +0 -25
- package/src/examples/lib/tab-controller.ts +0 -243
- package/src/examples/lights-phong-demo.ts +0 -290
- package/src/examples/link-demo.ts +0 -220
- package/src/examples/live-state-demo.ts +0 -480
- package/src/examples/markdown-demo.ts +0 -725
- package/src/examples/mouse-interaction-demo.ts +0 -428
- package/src/examples/nested-zindex-demo.ts +0 -357
- package/src/examples/opacity-example.ts +0 -235
- package/src/examples/opentui-demo.ts +0 -1057
- package/src/examples/physx-planck-2d-demo.ts +0 -623
- package/src/examples/physx-rapier-2d-demo.ts +0 -655
- package/src/examples/relative-positioning-demo.ts +0 -323
- package/src/examples/scroll-example.ts +0 -214
- package/src/examples/scrollbox-mouse-test.ts +0 -112
- package/src/examples/scrollbox-overlay-hit-test.ts +0 -206
- package/src/examples/select-demo.ts +0 -237
- package/src/examples/shader-cube-demo.ts +0 -1015
- package/src/examples/simple-layout-example.ts +0 -591
- package/src/examples/slider-demo.ts +0 -617
- package/src/examples/split-mode-demo.ts +0 -453
- package/src/examples/sprite-animation-demo.ts +0 -443
- package/src/examples/sprite-particle-generator-demo.ts +0 -486
- package/src/examples/static-sprite-demo.ts +0 -193
- package/src/examples/sticky-scroll-example.ts +0 -308
- package/src/examples/styled-text-demo.ts +0 -282
- package/src/examples/tab-select-demo.ts +0 -219
- package/src/examples/terminal-title.ts +0 -29
- package/src/examples/terminal.ts +0 -305
- package/src/examples/text-node-demo.ts +0 -416
- package/src/examples/text-selection-demo.ts +0 -377
- package/src/examples/text-table-demo.ts +0 -503
- package/src/examples/text-truncation-demo.ts +0 -481
- package/src/examples/text-wrap.ts +0 -757
- package/src/examples/texture-loading-demo.ts +0 -259
- package/src/examples/timeline-example.ts +0 -670
- package/src/examples/transparency-demo.ts +0 -400
- package/src/examples/vnode-composition-demo.ts +0 -404
- package/src/examples/wide-grapheme-overlay-demo.ts +0 -280
- package/src/index.ts +0 -24
- package/src/lib/KeyHandler.integration.test.ts +0 -292
- package/src/lib/KeyHandler.stopPropagation.test.ts +0 -289
- package/src/lib/KeyHandler.test.ts +0 -662
- package/src/lib/KeyHandler.ts +0 -222
- package/src/lib/RGBA.test.ts +0 -984
- package/src/lib/RGBA.ts +0 -204
- package/src/lib/ascii.font.ts +0 -330
- package/src/lib/border.test.ts +0 -83
- package/src/lib/border.ts +0 -170
- package/src/lib/bunfs.test.ts +0 -27
- package/src/lib/bunfs.ts +0 -18
- package/src/lib/clipboard.test.ts +0 -41
- package/src/lib/clipboard.ts +0 -47
- package/src/lib/clock.ts +0 -35
- package/src/lib/data-paths.test.ts +0 -133
- package/src/lib/data-paths.ts +0 -109
- package/src/lib/debounce.ts +0 -106
- package/src/lib/detect-links.test.ts +0 -98
- package/src/lib/detect-links.ts +0 -56
- package/src/lib/env.test.ts +0 -228
- package/src/lib/env.ts +0 -209
- package/src/lib/extmarks-history.ts +0 -51
- package/src/lib/extmarks-multiwidth.test.ts +0 -322
- package/src/lib/extmarks.test.ts +0 -3457
- package/src/lib/extmarks.ts +0 -843
- package/src/lib/fonts/block.json +0 -405
- package/src/lib/fonts/grid.json +0 -265
- package/src/lib/fonts/huge.json +0 -741
- package/src/lib/fonts/pallet.json +0 -314
- package/src/lib/fonts/shade.json +0 -591
- package/src/lib/fonts/slick.json +0 -321
- package/src/lib/fonts/tiny.json +0 -69
- package/src/lib/hast-styled-text.ts +0 -59
- package/src/lib/index.ts +0 -21
- package/src/lib/keymapping.test.ts +0 -317
- package/src/lib/keymapping.ts +0 -115
- package/src/lib/objects-in-viewport.test.ts +0 -787
- package/src/lib/objects-in-viewport.ts +0 -153
- package/src/lib/output.capture.ts +0 -58
- package/src/lib/parse.keypress-kitty.protocol.test.ts +0 -340
- package/src/lib/parse.keypress-kitty.test.ts +0 -663
- package/src/lib/parse.keypress-kitty.ts +0 -439
- package/src/lib/parse.keypress.test.ts +0 -1849
- package/src/lib/parse.keypress.ts +0 -397
- package/src/lib/parse.mouse.test.ts +0 -552
- package/src/lib/parse.mouse.ts +0 -232
- package/src/lib/paste.ts +0 -16
- package/src/lib/queue.ts +0 -65
- package/src/lib/renderable.validations.test.ts +0 -87
- package/src/lib/renderable.validations.ts +0 -83
- package/src/lib/scroll-acceleration.ts +0 -98
- package/src/lib/selection.ts +0 -240
- package/src/lib/singleton.ts +0 -28
- package/src/lib/stdin-parser.test.ts +0 -2290
- package/src/lib/stdin-parser.ts +0 -1810
- package/src/lib/styled-text.ts +0 -178
- package/src/lib/terminal-capability-detection.test.ts +0 -202
- package/src/lib/terminal-capability-detection.ts +0 -79
- package/src/lib/terminal-palette.test.ts +0 -878
- package/src/lib/terminal-palette.ts +0 -383
- package/src/lib/tree-sitter/assets/README.md +0 -118
- package/src/lib/tree-sitter/assets/update.ts +0 -334
- package/src/lib/tree-sitter/assets.d.ts +0 -9
- package/src/lib/tree-sitter/cache.test.ts +0 -273
- package/src/lib/tree-sitter/client.test.ts +0 -1165
- package/src/lib/tree-sitter/client.ts +0 -607
- package/src/lib/tree-sitter/default-parsers.ts +0 -86
- package/src/lib/tree-sitter/download-utils.ts +0 -148
- package/src/lib/tree-sitter/index.ts +0 -28
- package/src/lib/tree-sitter/parser.worker.ts +0 -1042
- package/src/lib/tree-sitter/parsers-config.ts +0 -81
- package/src/lib/tree-sitter/resolve-ft.test.ts +0 -55
- package/src/lib/tree-sitter/resolve-ft.ts +0 -189
- package/src/lib/tree-sitter/types.ts +0 -82
- package/src/lib/tree-sitter-styled-text.test.ts +0 -1253
- package/src/lib/tree-sitter-styled-text.ts +0 -306
- package/src/lib/validate-dir-name.ts +0 -55
- package/src/lib/yoga.options.test.ts +0 -628
- package/src/lib/yoga.options.ts +0 -346
- package/src/plugins/core-slot.ts +0 -579
- package/src/plugins/registry.ts +0 -402
- package/src/plugins/types.ts +0 -46
- package/src/post/effects.ts +0 -930
- package/src/post/filters.ts +0 -489
- package/src/post/matrices.ts +0 -288
- package/src/renderables/ASCIIFont.ts +0 -219
- package/src/renderables/Box.test.ts +0 -205
- package/src/renderables/Box.ts +0 -326
- package/src/renderables/Code.test.ts +0 -2062
- package/src/renderables/Code.ts +0 -357
- package/src/renderables/Diff.regression.test.ts +0 -226
- package/src/renderables/Diff.test.ts +0 -3101
- package/src/renderables/Diff.ts +0 -1211
- package/src/renderables/EditBufferRenderable.test.ts +0 -288
- package/src/renderables/EditBufferRenderable.ts +0 -1166
- package/src/renderables/FrameBuffer.ts +0 -47
- package/src/renderables/Input.test.ts +0 -1228
- package/src/renderables/Input.ts +0 -247
- package/src/renderables/LineNumberRenderable.ts +0 -724
- package/src/renderables/Markdown.ts +0 -1393
- package/src/renderables/ScrollBar.ts +0 -422
- package/src/renderables/ScrollBox.ts +0 -883
- package/src/renderables/Select.test.ts +0 -1033
- package/src/renderables/Select.ts +0 -524
- package/src/renderables/Slider.test.ts +0 -456
- package/src/renderables/Slider.ts +0 -342
- package/src/renderables/TabSelect.test.ts +0 -197
- package/src/renderables/TabSelect.ts +0 -455
- package/src/renderables/Text.selection-buffer.test.ts +0 -123
- package/src/renderables/Text.test.ts +0 -2660
- package/src/renderables/Text.ts +0 -147
- package/src/renderables/TextBufferRenderable.ts +0 -518
- package/src/renderables/TextNode.test.ts +0 -1058
- package/src/renderables/TextNode.ts +0 -325
- package/src/renderables/TextTable.test.ts +0 -1421
- package/src/renderables/TextTable.ts +0 -1344
- package/src/renderables/Textarea.ts +0 -430
- package/src/renderables/TimeToFirstDraw.ts +0 -89
- package/src/renderables/__snapshots__/Code.test.ts.snap +0 -13
- package/src/renderables/__snapshots__/Diff.test.ts.snap +0 -785
- package/src/renderables/__snapshots__/Text.test.ts.snap +0 -421
- package/src/renderables/__snapshots__/TextTable.test.ts.snap +0 -215
- package/src/renderables/__tests__/LineNumberRenderable.scrollbox-simple.test.ts +0 -144
- package/src/renderables/__tests__/LineNumberRenderable.scrollbox.test.ts +0 -816
- package/src/renderables/__tests__/LineNumberRenderable.test.ts +0 -1865
- package/src/renderables/__tests__/LineNumberRenderable.wrapping.test.ts +0 -85
- package/src/renderables/__tests__/Markdown.code-colors.test.ts +0 -242
- package/src/renderables/__tests__/Markdown.test.ts +0 -2518
- package/src/renderables/__tests__/MultiRenderable.selection.test.ts +0 -87
- package/src/renderables/__tests__/Textarea.buffer.test.ts +0 -682
- package/src/renderables/__tests__/Textarea.destroyed-events.test.ts +0 -675
- package/src/renderables/__tests__/Textarea.editing.test.ts +0 -2041
- package/src/renderables/__tests__/Textarea.error-handling.test.ts +0 -35
- package/src/renderables/__tests__/Textarea.events.test.ts +0 -738
- package/src/renderables/__tests__/Textarea.highlights.test.ts +0 -590
- package/src/renderables/__tests__/Textarea.keybinding.test.ts +0 -3149
- package/src/renderables/__tests__/Textarea.paste.test.ts +0 -357
- package/src/renderables/__tests__/Textarea.rendering.test.ts +0 -1866
- package/src/renderables/__tests__/Textarea.scroll.test.ts +0 -733
- package/src/renderables/__tests__/Textarea.selection.test.ts +0 -1590
- package/src/renderables/__tests__/Textarea.stress.test.ts +0 -670
- package/src/renderables/__tests__/Textarea.undo-redo.test.ts +0 -383
- package/src/renderables/__tests__/Textarea.visual-lines.test.ts +0 -310
- package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.code.test.ts.snap +0 -221
- package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.scrollbox-simple.test.ts.snap +0 -89
- package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.scrollbox.test.ts.snap +0 -457
- package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.test.ts.snap +0 -158
- package/src/renderables/__tests__/__snapshots__/Textarea.rendering.test.ts.snap +0 -387
- package/src/renderables/__tests__/markdown-parser.test.ts +0 -217
- package/src/renderables/__tests__/renderable-test-utils.ts +0 -60
- package/src/renderables/composition/README.md +0 -8
- package/src/renderables/composition/VRenderable.ts +0 -32
- package/src/renderables/composition/constructs.ts +0 -127
- package/src/renderables/composition/vnode.ts +0 -289
- package/src/renderables/index.ts +0 -23
- package/src/renderables/markdown-parser.ts +0 -66
- package/src/renderer.ts +0 -2681
- package/src/runtime-plugin-support.ts +0 -39
- package/src/runtime-plugin.ts +0 -615
- package/src/syntax-style.test.ts +0 -841
- package/src/syntax-style.ts +0 -257
- package/src/testing/README.md +0 -210
- package/src/testing/capture-spans.test.ts +0 -194
- package/src/testing/integration.test.ts +0 -276
- package/src/testing/manual-clock.ts +0 -117
- package/src/testing/mock-keys.test.ts +0 -1378
- package/src/testing/mock-keys.ts +0 -457
- package/src/testing/mock-mouse.test.ts +0 -218
- package/src/testing/mock-mouse.ts +0 -247
- package/src/testing/mock-tree-sitter-client.ts +0 -73
- package/src/testing/spy.ts +0 -13
- package/src/testing/test-recorder.test.ts +0 -415
- package/src/testing/test-recorder.ts +0 -145
- package/src/testing/test-renderer.ts +0 -132
- package/src/testing.ts +0 -7
- package/src/tests/__snapshots__/absolute-positioning.snapshot.test.ts.snap +0 -481
- package/src/tests/__snapshots__/renderable.snapshot.test.ts.snap +0 -19
- package/src/tests/__snapshots__/scrollbox.test.ts.snap +0 -29
- package/src/tests/absolute-positioning.snapshot.test.ts +0 -638
- package/src/tests/allocator-stats.test.ts +0 -38
- package/src/tests/destroy-during-render.test.ts +0 -200
- package/src/tests/destroy-on-exit.fixture.ts +0 -36
- package/src/tests/destroy-on-exit.test.ts +0 -41
- package/src/tests/hover-cursor.test.ts +0 -98
- package/src/tests/native-span-feed-async.test.ts +0 -173
- package/src/tests/native-span-feed-close.test.ts +0 -120
- package/src/tests/native-span-feed-coverage.test.ts +0 -227
- package/src/tests/native-span-feed-edge-cases.test.ts +0 -352
- package/src/tests/native-span-feed-use-after-free.test.ts +0 -45
- package/src/tests/opacity.test.ts +0 -123
- package/src/tests/renderable.snapshot.test.ts +0 -524
- package/src/tests/renderable.test.ts +0 -1281
- package/src/tests/renderer.clock.test.ts +0 -158
- package/src/tests/renderer.console-startup.test.ts +0 -185
- package/src/tests/renderer.control.test.ts +0 -425
- package/src/tests/renderer.core-slot-binding.test.ts +0 -952
- package/src/tests/renderer.cursor.test.ts +0 -26
- package/src/tests/renderer.destroy-during-render.test.ts +0 -147
- package/src/tests/renderer.focus-restore.test.ts +0 -257
- package/src/tests/renderer.focus.test.ts +0 -294
- package/src/tests/renderer.idle.test.ts +0 -219
- package/src/tests/renderer.input.test.ts +0 -2237
- package/src/tests/renderer.kitty-flags.test.ts +0 -195
- package/src/tests/renderer.mouse.test.ts +0 -1274
- package/src/tests/renderer.palette.test.ts +0 -629
- package/src/tests/renderer.selection.test.ts +0 -49
- package/src/tests/renderer.slot-registry.test.ts +0 -684
- package/src/tests/renderer.useMouse.test.ts +0 -47
- package/src/tests/runtime-plugin-node-modules-cycle.fixture.ts +0 -76
- package/src/tests/runtime-plugin-node-modules-mjs.fixture.ts +0 -43
- package/src/tests/runtime-plugin-node-modules-no-bare-rewrite.fixture.ts +0 -67
- package/src/tests/runtime-plugin-node-modules-package-type-cache.fixture.ts +0 -72
- package/src/tests/runtime-plugin-node-modules-runtime-specifier.fixture.ts +0 -44
- package/src/tests/runtime-plugin-node-modules-scoped-package-bare-rewrite.fixture.ts +0 -85
- package/src/tests/runtime-plugin-path-alias.fixture.ts +0 -43
- package/src/tests/runtime-plugin-resolve-roots.fixture.ts +0 -65
- package/src/tests/runtime-plugin-support.fixture.ts +0 -11
- package/src/tests/runtime-plugin-support.test.ts +0 -19
- package/src/tests/runtime-plugin-windows-file-url.fixture.ts +0 -30
- package/src/tests/runtime-plugin.fixture.ts +0 -40
- package/src/tests/runtime-plugin.test.ts +0 -354
- package/src/tests/scrollbox-culling-bug.test.ts +0 -114
- package/src/tests/scrollbox-hitgrid-resize.test.ts +0 -136
- package/src/tests/scrollbox-hitgrid.test.ts +0 -909
- package/src/tests/scrollbox.test.ts +0 -1530
- package/src/tests/wrap-resize-perf.test.ts +0 -276
- package/src/tests/yoga-setters.test.ts +0 -921
- package/src/text-buffer-view.test.ts +0 -705
- package/src/text-buffer-view.ts +0 -189
- package/src/text-buffer.test.ts +0 -347
- package/src/text-buffer.ts +0 -250
- package/src/types.ts +0 -161
- package/src/utils.ts +0 -88
- package/src/zig/ansi.zig +0 -268
- package/src/zig/bench/README.md +0 -50
- package/src/zig/bench/buffer-draw-text-buffer_bench.zig +0 -887
- package/src/zig/bench/edit-buffer_bench.zig +0 -476
- package/src/zig/bench/native-span-feed_bench.zig +0 -100
- package/src/zig/bench/rope-markers_bench.zig +0 -713
- package/src/zig/bench/rope_bench.zig +0 -514
- package/src/zig/bench/styled-text_bench.zig +0 -470
- package/src/zig/bench/text-buffer-coords_bench.zig +0 -362
- package/src/zig/bench/text-buffer-view_bench.zig +0 -459
- package/src/zig/bench/text-chunk-graphemes_bench.zig +0 -273
- package/src/zig/bench/utf8_bench.zig +0 -799
- package/src/zig/bench-utils.zig +0 -431
- package/src/zig/bench.zig +0 -217
- package/src/zig/buffer-methods.zig +0 -211
- package/src/zig/buffer.zig +0 -2281
- package/src/zig/build.zig +0 -289
- package/src/zig/build.zig.zon +0 -16
- package/src/zig/edit-buffer.zig +0 -825
- package/src/zig/editor-view.zig +0 -802
- package/src/zig/event-bus.zig +0 -13
- package/src/zig/event-emitter.zig +0 -65
- package/src/zig/file-logger.zig +0 -92
- package/src/zig/grapheme.zig +0 -599
- package/src/zig/lib.zig +0 -1854
- package/src/zig/link.zig +0 -333
- package/src/zig/logger.zig +0 -43
- package/src/zig/mem-registry.zig +0 -125
- package/src/zig/native-span-feed-bench-lib.zig +0 -7
- package/src/zig/native-span-feed.zig +0 -708
- package/src/zig/renderer.zig +0 -1393
- package/src/zig/rope.zig +0 -1220
- package/src/zig/syntax-style.zig +0 -161
- package/src/zig/terminal.zig +0 -987
- package/src/zig/test.zig +0 -72
- package/src/zig/tests/README.md +0 -18
- package/src/zig/tests/buffer-methods_test.zig +0 -1109
- package/src/zig/tests/buffer_test.zig +0 -2557
- package/src/zig/tests/edit-buffer-history_test.zig +0 -271
- package/src/zig/tests/edit-buffer_test.zig +0 -1689
- package/src/zig/tests/editor-view_test.zig +0 -3299
- package/src/zig/tests/event-emitter_test.zig +0 -249
- package/src/zig/tests/grapheme_test.zig +0 -1304
- package/src/zig/tests/link_test.zig +0 -190
- package/src/zig/tests/mem-registry_test.zig +0 -473
- package/src/zig/tests/memory_leak_regression_test.zig +0 -159
- package/src/zig/tests/native-span-feed_test.zig +0 -1264
- package/src/zig/tests/renderer_test.zig +0 -1017
- package/src/zig/tests/rope-nested_test.zig +0 -712
- package/src/zig/tests/rope_fuzz_test.zig +0 -238
- package/src/zig/tests/rope_test.zig +0 -2362
- package/src/zig/tests/segment-merge.test.zig +0 -148
- package/src/zig/tests/syntax-style_test.zig +0 -557
- package/src/zig/tests/terminal_test.zig +0 -754
- package/src/zig/tests/text-buffer-drawing_test.zig +0 -3237
- package/src/zig/tests/text-buffer-highlights_test.zig +0 -666
- package/src/zig/tests/text-buffer-iterators_test.zig +0 -776
- package/src/zig/tests/text-buffer-segment_test.zig +0 -320
- package/src/zig/tests/text-buffer-selection_test.zig +0 -1035
- package/src/zig/tests/text-buffer-selection_viewport_test.zig +0 -358
- package/src/zig/tests/text-buffer-view_test.zig +0 -3649
- package/src/zig/tests/text-buffer_test.zig +0 -2191
- package/src/zig/tests/unicode-width-map.zon +0 -3909
- package/src/zig/tests/utf8_no_zwj_test.zig +0 -260
- package/src/zig/tests/utf8_test.zig +0 -4057
- package/src/zig/tests/utf8_wcwidth_cursor_test.zig +0 -267
- package/src/zig/tests/utf8_wcwidth_test.zig +0 -357
- package/src/zig/tests/word-wrap-editing_test.zig +0 -498
- package/src/zig/tests/wrap-cache-perf_test.zig +0 -113
- package/src/zig/text-buffer-iterators.zig +0 -499
- package/src/zig/text-buffer-segment.zig +0 -404
- package/src/zig/text-buffer-view.zig +0 -1371
- package/src/zig/text-buffer.zig +0 -1180
- package/src/zig/utf8.zig +0 -1948
- package/src/zig/utils.zig +0 -9
- package/src/zig-structs.ts +0 -261
- package/src/zig.ts +0 -3884
- package/tsconfig.build.json +0 -24
- package/tsconfig.json +0 -27
- /package/{src/lib/tree-sitter/assets → assets}/javascript/highlights.scm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/javascript/tree-sitter-javascript.wasm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/markdown/highlights.scm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/markdown/injections.scm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/markdown/tree-sitter-markdown.wasm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/markdown_inline/highlights.scm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/markdown_inline/tree-sitter-markdown_inline.wasm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/typescript/highlights.scm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/typescript/tree-sitter-typescript.wasm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/zig/highlights.scm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/zig/tree-sitter-zig.wasm +0 -0
|
@@ -1,754 +0,0 @@
|
|
|
1
|
-
const std = @import("std");
|
|
2
|
-
const builtin = @import("builtin");
|
|
3
|
-
const testing = std.testing;
|
|
4
|
-
const ansi = @import("../ansi.zig");
|
|
5
|
-
const Terminal = @import("../terminal.zig");
|
|
6
|
-
const utf8 = @import("../utf8.zig");
|
|
7
|
-
|
|
8
|
-
test "parseXtversion - kitty format" {
|
|
9
|
-
var term = Terminal.init(.{});
|
|
10
|
-
const response = "\x1bP>|kitty(0.40.1)\x1b\\";
|
|
11
|
-
term.processCapabilityResponse(response);
|
|
12
|
-
|
|
13
|
-
try testing.expectEqualStrings("kitty", term.getTerminalName());
|
|
14
|
-
try testing.expectEqualStrings("0.40.1", term.getTerminalVersion());
|
|
15
|
-
try testing.expect(term.term_info.from_xtversion);
|
|
16
|
-
try testing.expect(term.caps.osc52);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
test "parseXtversion - ghostty format" {
|
|
20
|
-
var term = Terminal.init(.{});
|
|
21
|
-
const response = "\x1bP>|ghostty 1.1.3\x1b\\";
|
|
22
|
-
term.processCapabilityResponse(response);
|
|
23
|
-
|
|
24
|
-
try testing.expectEqualStrings("ghostty", term.getTerminalName());
|
|
25
|
-
try testing.expectEqualStrings("1.1.3", term.getTerminalVersion());
|
|
26
|
-
try testing.expect(term.term_info.from_xtversion);
|
|
27
|
-
try testing.expect(term.caps.osc52);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
test "parseXtversion - tmux format" {
|
|
31
|
-
var term = Terminal.init(.{});
|
|
32
|
-
const response = "\x1bP>|tmux 3.5a\x1b\\";
|
|
33
|
-
term.processCapabilityResponse(response);
|
|
34
|
-
|
|
35
|
-
try testing.expectEqualStrings("tmux", term.getTerminalName());
|
|
36
|
-
try testing.expectEqualStrings("3.5a", term.getTerminalVersion());
|
|
37
|
-
try testing.expect(term.term_info.from_xtversion);
|
|
38
|
-
try testing.expect(term.caps.osc52);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
test "parseXtversion - with prefix data" {
|
|
42
|
-
var term = Terminal.init(.{});
|
|
43
|
-
const response = "\x1b[1;1R\x1bP>|tmux 3.5a\x1b\\";
|
|
44
|
-
term.processCapabilityResponse(response);
|
|
45
|
-
|
|
46
|
-
try testing.expectEqualStrings("tmux", term.getTerminalName());
|
|
47
|
-
try testing.expectEqualStrings("3.5a", term.getTerminalVersion());
|
|
48
|
-
try testing.expect(term.term_info.from_xtversion);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
test "parseXtversion - full kitty response" {
|
|
52
|
-
var term = Terminal.init(.{});
|
|
53
|
-
const response = "\x1b[?1016;2$y\x1b[?2027;0$y\x1b[?2031;2$y\x1b[?1004;1$y\x1b[?2026;2$y\x1b[1;2R\x1b[1;3R\x1bP>|kitty(0.40.1)\x1b\\\x1b[?0u\x1b_Gi=1;EINVAL:Zero width/height not allowed\x1b\\\x1b[?62;c";
|
|
54
|
-
term.processCapabilityResponse(response);
|
|
55
|
-
|
|
56
|
-
try testing.expectEqualStrings("kitty", term.getTerminalName());
|
|
57
|
-
try testing.expectEqualStrings("0.40.1", term.getTerminalVersion());
|
|
58
|
-
try testing.expect(term.term_info.from_xtversion);
|
|
59
|
-
try testing.expect(term.caps.kitty_keyboard);
|
|
60
|
-
try testing.expect(term.caps.kitty_graphics);
|
|
61
|
-
try testing.expect(term.caps.osc52);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
test "parseXtversion - full ghostty response" {
|
|
65
|
-
var term = Terminal.init(.{});
|
|
66
|
-
const response = "\x1b[?1016;1$y\x1b[?2027;1$y\x1b[?2031;2$y\x1b[?1004;1$y\x1b[?2004;2$y\x1b[?2026;2$y\x1b[1;1R\x1b[1;1R\x1bP>|ghostty 1.1.3\x1b\\\x1b[?0u\x1b_Gi=1;OK\x1b\\\x1b[?62;22c";
|
|
67
|
-
term.processCapabilityResponse(response);
|
|
68
|
-
|
|
69
|
-
try testing.expectEqualStrings("ghostty", term.getTerminalName());
|
|
70
|
-
try testing.expectEqualStrings("1.1.3", term.getTerminalVersion());
|
|
71
|
-
try testing.expect(term.term_info.from_xtversion);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
test "environment variables - should be overridden by xtversion" {
|
|
75
|
-
var term = Terminal.init(.{});
|
|
76
|
-
|
|
77
|
-
// First check environment (simulated by setting values directly)
|
|
78
|
-
term.term_info.name_len = 6;
|
|
79
|
-
@memcpy(term.term_info.name[0..6], "vscode");
|
|
80
|
-
term.term_info.version_len = 5;
|
|
81
|
-
@memcpy(term.term_info.version[0..5], "1.0.0");
|
|
82
|
-
term.term_info.from_xtversion = false;
|
|
83
|
-
|
|
84
|
-
try testing.expectEqualStrings("vscode", term.getTerminalName());
|
|
85
|
-
try testing.expectEqualStrings("1.0.0", term.getTerminalVersion());
|
|
86
|
-
try testing.expect(!term.term_info.from_xtversion);
|
|
87
|
-
|
|
88
|
-
// Now process xtversion response - should override
|
|
89
|
-
const response = "\x1bP>|kitty(0.40.1)\x1b\\";
|
|
90
|
-
term.processCapabilityResponse(response);
|
|
91
|
-
|
|
92
|
-
try testing.expectEqualStrings("kitty", term.getTerminalName());
|
|
93
|
-
try testing.expectEqualStrings("0.40.1", term.getTerminalVersion());
|
|
94
|
-
try testing.expect(term.term_info.from_xtversion);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
test "remote ignores env overrides but accepts capability responses" {
|
|
98
|
-
if (builtin.os.tag == .windows) return error.SkipZigTest;
|
|
99
|
-
|
|
100
|
-
var env = std.process.EnvMap.init(testing.allocator);
|
|
101
|
-
defer env.deinit();
|
|
102
|
-
try env.put("TMUX", "/tmp/tmux-1000/default,12345,0");
|
|
103
|
-
try env.put("TERM_PROGRAM", "iTerm.app");
|
|
104
|
-
try env.put("WT_SESSION", "test-session");
|
|
105
|
-
|
|
106
|
-
var term = Terminal.init(.{ .remote = true, .env_map = &env });
|
|
107
|
-
|
|
108
|
-
try testing.expect(!term.in_tmux);
|
|
109
|
-
try testing.expect(!term.caps.osc52);
|
|
110
|
-
try testing.expect(!term.caps.explicit_cursor_positioning);
|
|
111
|
-
|
|
112
|
-
term.processCapabilityResponse("\x1bP>|kitty(0.40.1)\x1b\\");
|
|
113
|
-
try testing.expect(term.caps.osc52);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
test "setHostEnvVar applies env overrides in shared library mode" {
|
|
117
|
-
var term = Terminal.init(.{});
|
|
118
|
-
defer term.deinit();
|
|
119
|
-
|
|
120
|
-
try term.setHostEnvVar(testing.allocator, "TERM", "screen");
|
|
121
|
-
try testing.expect(term.skip_graphics_query);
|
|
122
|
-
try testing.expect(term.caps.unicode == .wcwidth);
|
|
123
|
-
try testing.expect(term.caps.explicit_cursor_positioning);
|
|
124
|
-
|
|
125
|
-
try term.setHostEnvVar(testing.allocator, "OPENTUI_FORCE_UNICODE", "1");
|
|
126
|
-
try testing.expect(term.caps.unicode == .unicode);
|
|
127
|
-
|
|
128
|
-
try term.setHostEnvVar(testing.allocator, "OPENTUI_GRAPHICS", "0");
|
|
129
|
-
try testing.expect(term.skip_graphics_query);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
test "environment overrides - enables hyperlinks for WSL Windows Terminal xterm" {
|
|
133
|
-
var env = std.process.EnvMap.init(testing.allocator);
|
|
134
|
-
defer env.deinit();
|
|
135
|
-
try env.put("WSL_DISTRO_NAME", "Ubuntu");
|
|
136
|
-
try env.put("WT_SESSION", "test-session");
|
|
137
|
-
try env.put("TERM", "xterm-256color");
|
|
138
|
-
|
|
139
|
-
const term = Terminal.init(.{ .env_map = &env });
|
|
140
|
-
|
|
141
|
-
try testing.expect(term.caps.hyperlinks);
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
test "environment overrides - does not enable hyperlinks for WSL without WT_SESSION" {
|
|
145
|
-
var env = std.process.EnvMap.init(testing.allocator);
|
|
146
|
-
defer env.deinit();
|
|
147
|
-
try env.put("WSL_DISTRO_NAME", "Ubuntu");
|
|
148
|
-
try env.put("TERM", "xterm-256color");
|
|
149
|
-
|
|
150
|
-
const term = Terminal.init(.{ .env_map = &env });
|
|
151
|
-
|
|
152
|
-
try testing.expect(!term.caps.hyperlinks);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
test "environment overrides - does not enable hyperlinks for WSL non-xterm terms" {
|
|
156
|
-
var env = std.process.EnvMap.init(testing.allocator);
|
|
157
|
-
defer env.deinit();
|
|
158
|
-
try env.put("WSL_INTEROP", "/run/WSL/123_interop");
|
|
159
|
-
try env.put("WT_SESSION", "test-session");
|
|
160
|
-
try env.put("TERM", "screen-256color");
|
|
161
|
-
|
|
162
|
-
const term = Terminal.init(.{ .env_map = &env });
|
|
163
|
-
|
|
164
|
-
try testing.expect(!term.caps.hyperlinks);
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
test "parseXtversion - terminal name only" {
|
|
168
|
-
var term = Terminal.init(.{});
|
|
169
|
-
const response = "\x1bP>|wezterm\x1b\\";
|
|
170
|
-
term.processCapabilityResponse(response);
|
|
171
|
-
|
|
172
|
-
try testing.expectEqualStrings("wezterm", term.getTerminalName());
|
|
173
|
-
try testing.expectEqualStrings("", term.getTerminalVersion());
|
|
174
|
-
try testing.expect(term.term_info.from_xtversion);
|
|
175
|
-
try testing.expect(term.caps.osc52);
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
test "parseXtversion - empty response" {
|
|
179
|
-
var term = Terminal.init(.{});
|
|
180
|
-
|
|
181
|
-
const initial_name_len = term.term_info.name_len;
|
|
182
|
-
const initial_version_len = term.term_info.version_len;
|
|
183
|
-
|
|
184
|
-
const response = "\x1bP>|\x1b\\";
|
|
185
|
-
term.processCapabilityResponse(response);
|
|
186
|
-
|
|
187
|
-
try testing.expectEqual(initial_name_len, term.term_info.name_len);
|
|
188
|
-
try testing.expectEqual(initial_version_len, term.term_info.version_len);
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
// Test buffer for capturing terminal output
|
|
192
|
-
const TestWriter = struct {
|
|
193
|
-
buffer: std.ArrayListUnmanaged(u8),
|
|
194
|
-
allocator: std.mem.Allocator,
|
|
195
|
-
|
|
196
|
-
pub fn init(allocator: std.mem.Allocator) TestWriter {
|
|
197
|
-
return .{ .buffer = .{}, .allocator = allocator };
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
pub fn deinit(self: *TestWriter) void {
|
|
201
|
-
self.buffer.deinit(self.allocator);
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
pub fn writeAll(self: *TestWriter, data: []const u8) !void {
|
|
205
|
-
try self.buffer.appendSlice(self.allocator, data);
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
pub fn print(self: *TestWriter, comptime fmt: []const u8, args: anytype) !void {
|
|
209
|
-
try self.buffer.writer(self.allocator).print(fmt, args);
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
pub fn getWritten(self: *TestWriter) []const u8 {
|
|
213
|
-
return self.buffer.items;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
pub fn reset(self: *TestWriter) void {
|
|
217
|
-
self.buffer.clearRetainingCapacity();
|
|
218
|
-
}
|
|
219
|
-
};
|
|
220
|
-
|
|
221
|
-
test "queryTerminalSend - sends unwrapped queries when not in tmux" {
|
|
222
|
-
// Note: This test may fail if running inside tmux since checkEnvironmentOverrides
|
|
223
|
-
// reads TMUX/TERM env vars. We test the logic directly instead.
|
|
224
|
-
var term = Terminal.init(.{});
|
|
225
|
-
|
|
226
|
-
// Skip test if actually running in tmux
|
|
227
|
-
if (term.in_tmux) return error.SkipZigTest;
|
|
228
|
-
|
|
229
|
-
var writer = TestWriter.init(testing.allocator);
|
|
230
|
-
defer writer.deinit();
|
|
231
|
-
|
|
232
|
-
try term.queryTerminalSend(&writer);
|
|
233
|
-
|
|
234
|
-
const output = writer.getWritten();
|
|
235
|
-
|
|
236
|
-
// Should contain xtversion
|
|
237
|
-
try testing.expect(std.mem.indexOf(u8, output, "\x1b[>0q") != null);
|
|
238
|
-
|
|
239
|
-
// Should contain unwrapped DECRQM queries (single ESC)
|
|
240
|
-
try testing.expect(std.mem.indexOf(u8, output, "\x1b[?1016$p") != null);
|
|
241
|
-
try testing.expect(std.mem.indexOf(u8, output, "\x1b[?2027$p") != null);
|
|
242
|
-
try testing.expect(std.mem.indexOf(u8, output, "\x1b[?u") != null);
|
|
243
|
-
|
|
244
|
-
// Should NOT contain tmux DCS wrapper
|
|
245
|
-
try testing.expect(std.mem.indexOf(u8, output, "\x1bPtmux;") == null);
|
|
246
|
-
|
|
247
|
-
// Should mark capability queries as pending
|
|
248
|
-
try testing.expect(term.capability_queries_pending);
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
test "queryTerminalSend - sends DCS wrapped queries when in tmux" {
|
|
252
|
-
// Note: This test checks logic when in_tmux is true.
|
|
253
|
-
// We can't easily force in_tmux=true since checkEnvironmentOverrides resets it,
|
|
254
|
-
// so we test this via sendPendingQueries tests instead.
|
|
255
|
-
var term = Terminal.init(.{});
|
|
256
|
-
|
|
257
|
-
// Only run the DCS wrapping test if actually in tmux
|
|
258
|
-
if (!term.in_tmux) return error.SkipZigTest;
|
|
259
|
-
|
|
260
|
-
var writer = TestWriter.init(testing.allocator);
|
|
261
|
-
defer writer.deinit();
|
|
262
|
-
|
|
263
|
-
try term.queryTerminalSend(&writer);
|
|
264
|
-
|
|
265
|
-
const output = writer.getWritten();
|
|
266
|
-
|
|
267
|
-
// Should contain xtversion (unwrapped - used for detection)
|
|
268
|
-
try testing.expect(std.mem.indexOf(u8, output, "\x1b[>0q") != null);
|
|
269
|
-
|
|
270
|
-
// Should contain tmux DCS wrapper start and doubled ESC for queries
|
|
271
|
-
// wrapForTmux wraps all queries together with one DCS envelope
|
|
272
|
-
try testing.expect(std.mem.indexOf(u8, output, "\x1bPtmux;\x1b\x1b[?1016$p") != null);
|
|
273
|
-
|
|
274
|
-
// Should NOT mark capability queries as pending (already sent wrapped)
|
|
275
|
-
try testing.expect(!term.capability_queries_pending);
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
test "sendPendingQueries - sends wrapped queries after tmux detected via xtversion" {
|
|
279
|
-
var term = Terminal.init(.{});
|
|
280
|
-
term.in_tmux = false;
|
|
281
|
-
term.capability_queries_pending = true;
|
|
282
|
-
term.graphics_query_pending = true;
|
|
283
|
-
|
|
284
|
-
// Simulate tmux detected via xtversion
|
|
285
|
-
term.term_info.from_xtversion = true;
|
|
286
|
-
term.term_info.name_len = 4;
|
|
287
|
-
@memcpy(term.term_info.name[0..4], "tmux");
|
|
288
|
-
|
|
289
|
-
var writer = TestWriter.init(testing.allocator);
|
|
290
|
-
defer writer.deinit();
|
|
291
|
-
|
|
292
|
-
const did_send = try term.sendPendingQueries(&writer);
|
|
293
|
-
|
|
294
|
-
try testing.expect(did_send);
|
|
295
|
-
|
|
296
|
-
const output = writer.getWritten();
|
|
297
|
-
|
|
298
|
-
// Should send DCS wrapped capability queries (wrapForTmux wraps all queries together)
|
|
299
|
-
try testing.expect(std.mem.indexOf(u8, output, "\x1bPtmux;\x1b\x1b[?1016$p") != null);
|
|
300
|
-
|
|
301
|
-
// Should send DCS wrapped graphics query
|
|
302
|
-
try testing.expect(std.mem.indexOf(u8, output, "\x1bPtmux;\x1b\x1b_G") != null);
|
|
303
|
-
|
|
304
|
-
// Should clear pending flags
|
|
305
|
-
try testing.expect(!term.capability_queries_pending);
|
|
306
|
-
try testing.expect(!term.graphics_query_pending);
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
test "sendPendingQueries - sends unwrapped graphics query for non-tmux terminal" {
|
|
310
|
-
var term = Terminal.init(.{});
|
|
311
|
-
term.in_tmux = false;
|
|
312
|
-
term.capability_queries_pending = true;
|
|
313
|
-
term.graphics_query_pending = true;
|
|
314
|
-
|
|
315
|
-
// Simulate non-tmux terminal detected via xtversion
|
|
316
|
-
term.term_info.from_xtversion = true;
|
|
317
|
-
term.term_info.name_len = 5;
|
|
318
|
-
@memcpy(term.term_info.name[0..5], "kitty");
|
|
319
|
-
|
|
320
|
-
var writer = TestWriter.init(testing.allocator);
|
|
321
|
-
defer writer.deinit();
|
|
322
|
-
|
|
323
|
-
const did_send = try term.sendPendingQueries(&writer);
|
|
324
|
-
|
|
325
|
-
try testing.expect(did_send);
|
|
326
|
-
|
|
327
|
-
const output = writer.getWritten();
|
|
328
|
-
|
|
329
|
-
// Should NOT send DCS wrapped capability queries (not tmux)
|
|
330
|
-
try testing.expect(std.mem.indexOf(u8, output, "\x1bPtmux;") == null);
|
|
331
|
-
|
|
332
|
-
// Should send unwrapped graphics query
|
|
333
|
-
try testing.expect(std.mem.indexOf(u8, output, "\x1b_Gi=31337") != null);
|
|
334
|
-
|
|
335
|
-
// Should clear pending flags
|
|
336
|
-
try testing.expect(!term.capability_queries_pending);
|
|
337
|
-
try testing.expect(!term.graphics_query_pending);
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
test "sendPendingQueries - sends unwrapped graphics query even without xtversion response" {
|
|
341
|
-
// This covers terminals that support kitty graphics but don't respond to xtversion.
|
|
342
|
-
// The graphics query should still be sent (unwrapped) so we can detect graphics support.
|
|
343
|
-
var term = Terminal.init(.{});
|
|
344
|
-
term.in_tmux = false;
|
|
345
|
-
term.term_info.from_xtversion = false;
|
|
346
|
-
term.capability_queries_pending = true;
|
|
347
|
-
term.graphics_query_pending = true;
|
|
348
|
-
|
|
349
|
-
var writer = TestWriter.init(testing.allocator);
|
|
350
|
-
defer writer.deinit();
|
|
351
|
-
|
|
352
|
-
const did_send = try term.sendPendingQueries(&writer);
|
|
353
|
-
|
|
354
|
-
try testing.expect(did_send);
|
|
355
|
-
|
|
356
|
-
const output = writer.getWritten();
|
|
357
|
-
|
|
358
|
-
// Should send unwrapped graphics query (not tmux, so no DCS wrapper)
|
|
359
|
-
try testing.expect(std.mem.indexOf(u8, output, "\x1b_Gi=31337") != null);
|
|
360
|
-
try testing.expect(std.mem.indexOf(u8, output, "\x1bPtmux;") == null);
|
|
361
|
-
|
|
362
|
-
// Should clear graphics pending flag
|
|
363
|
-
try testing.expect(!term.graphics_query_pending);
|
|
364
|
-
|
|
365
|
-
// Capability queries should NOT be re-sent (no xtversion means we don't know if tmux,
|
|
366
|
-
// but they were already sent unwrapped in queryTerminalSend)
|
|
367
|
-
try testing.expect(!term.capability_queries_pending);
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
test "sendPendingQueries - skips graphics when skip_graphics_query is set" {
|
|
371
|
-
var term = Terminal.init(.{});
|
|
372
|
-
term.in_tmux = true;
|
|
373
|
-
term.skip_graphics_query = true;
|
|
374
|
-
term.graphics_query_pending = true;
|
|
375
|
-
term.capability_queries_pending = false;
|
|
376
|
-
|
|
377
|
-
var writer = TestWriter.init(testing.allocator);
|
|
378
|
-
defer writer.deinit();
|
|
379
|
-
|
|
380
|
-
const did_send = try term.sendPendingQueries(&writer);
|
|
381
|
-
|
|
382
|
-
try testing.expect(!did_send);
|
|
383
|
-
|
|
384
|
-
const output = writer.getWritten();
|
|
385
|
-
try testing.expect(std.mem.indexOf(u8, output, "Gi=31337") == null);
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
test "isXtversionTmux - detects tmux from xtversion" {
|
|
389
|
-
var term = Terminal.init(.{});
|
|
390
|
-
|
|
391
|
-
// Not from xtversion
|
|
392
|
-
term.term_info.from_xtversion = false;
|
|
393
|
-
term.term_info.name_len = 4;
|
|
394
|
-
@memcpy(term.term_info.name[0..4], "tmux");
|
|
395
|
-
try testing.expect(!term.isXtversionTmux());
|
|
396
|
-
|
|
397
|
-
// From xtversion but not tmux
|
|
398
|
-
term.term_info.from_xtversion = true;
|
|
399
|
-
term.term_info.name_len = 5;
|
|
400
|
-
@memcpy(term.term_info.name[0..5], "kitty");
|
|
401
|
-
try testing.expect(!term.isXtversionTmux());
|
|
402
|
-
|
|
403
|
-
// From xtversion and is tmux
|
|
404
|
-
term.term_info.name_len = 4;
|
|
405
|
-
@memcpy(term.term_info.name[0..4], "tmux");
|
|
406
|
-
try testing.expect(term.isXtversionTmux());
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
// ============================================================================
|
|
410
|
-
// GRAPHEME CURSOR POSITIONING CAPABILITY TESTS
|
|
411
|
-
// ============================================================================
|
|
412
|
-
|
|
413
|
-
test "processCapabilityResponse - tmux sets explicit_cursor_positioning" {
|
|
414
|
-
var term: Terminal = .{};
|
|
415
|
-
|
|
416
|
-
term.caps.explicit_cursor_positioning = false;
|
|
417
|
-
term.caps.unicode = .unicode;
|
|
418
|
-
|
|
419
|
-
const response = "\x1bP>|tmux 3.5a\x1b\\";
|
|
420
|
-
term.processCapabilityResponse(response);
|
|
421
|
-
|
|
422
|
-
try testing.expect(term.caps.explicit_cursor_positioning);
|
|
423
|
-
try testing.expectEqual(utf8.WidthMethod.wcwidth, term.caps.unicode);
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
test "processCapabilityResponse - alacritty sets explicit_cursor_positioning" {
|
|
427
|
-
var term: Terminal = .{};
|
|
428
|
-
|
|
429
|
-
term.caps.explicit_cursor_positioning = false;
|
|
430
|
-
|
|
431
|
-
const response = "\x1bP>|alacritty 0.13.0\x1b\\";
|
|
432
|
-
term.processCapabilityResponse(response);
|
|
433
|
-
|
|
434
|
-
try testing.expect(term.caps.explicit_cursor_positioning);
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
test "processCapabilityResponse - kitty does not set explicit_cursor_positioning" {
|
|
438
|
-
var term: Terminal = .{};
|
|
439
|
-
|
|
440
|
-
term.caps.explicit_cursor_positioning = false;
|
|
441
|
-
|
|
442
|
-
const response = "\x1bP>|kitty(0.40.1)\x1b\\";
|
|
443
|
-
term.processCapabilityResponse(response);
|
|
444
|
-
|
|
445
|
-
try testing.expect(!term.caps.explicit_cursor_positioning);
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
test "processCapabilityResponse - ghostty does not set explicit_cursor_positioning" {
|
|
449
|
-
var term: Terminal = .{};
|
|
450
|
-
|
|
451
|
-
term.caps.explicit_cursor_positioning = false;
|
|
452
|
-
|
|
453
|
-
const response = "\x1bP>|ghostty 1.1.3\x1b\\";
|
|
454
|
-
term.processCapabilityResponse(response);
|
|
455
|
-
|
|
456
|
-
try testing.expect(!term.caps.explicit_cursor_positioning);
|
|
457
|
-
}
|
|
458
|
-
|
|
459
|
-
// ============================================================================
|
|
460
|
-
// CLIPBOARD (OSC 52) TESTS
|
|
461
|
-
// ============================================================================
|
|
462
|
-
|
|
463
|
-
test "writeClipboard - generates basic OSC52 sequence" {
|
|
464
|
-
if (builtin.os.tag == .windows) return error.SkipZigTest;
|
|
465
|
-
|
|
466
|
-
var env = std.process.EnvMap.init(testing.allocator);
|
|
467
|
-
defer env.deinit();
|
|
468
|
-
|
|
469
|
-
var term = Terminal.init(.{ .env_map = &env });
|
|
470
|
-
term.caps.osc52 = true;
|
|
471
|
-
|
|
472
|
-
var writer = TestWriter.init(testing.allocator);
|
|
473
|
-
defer writer.deinit();
|
|
474
|
-
|
|
475
|
-
try term.writeClipboard(&writer, .clipboard, "aGVsbG8=");
|
|
476
|
-
|
|
477
|
-
const output = writer.getWritten();
|
|
478
|
-
// Should be: ESC]52;c;aGVsbG8=ESC\
|
|
479
|
-
try testing.expectEqualStrings("\x1b]52;c;aGVsbG8=\x1b\\", output);
|
|
480
|
-
}
|
|
481
|
-
|
|
482
|
-
test "writeClipboard - supports different targets" {
|
|
483
|
-
if (builtin.os.tag == .windows) return error.SkipZigTest;
|
|
484
|
-
|
|
485
|
-
var env = std.process.EnvMap.init(testing.allocator);
|
|
486
|
-
defer env.deinit();
|
|
487
|
-
|
|
488
|
-
var term = Terminal.init(.{ .env_map = &env });
|
|
489
|
-
term.caps.osc52 = true;
|
|
490
|
-
|
|
491
|
-
var writer = TestWriter.init(testing.allocator);
|
|
492
|
-
defer writer.deinit();
|
|
493
|
-
|
|
494
|
-
try term.writeClipboard(&writer, .primary, "test");
|
|
495
|
-
try testing.expect(std.mem.indexOf(u8, writer.getWritten(), "\x1b]52;p;") != null);
|
|
496
|
-
|
|
497
|
-
writer.reset();
|
|
498
|
-
try term.writeClipboard(&writer, .secondary, "test");
|
|
499
|
-
try testing.expect(std.mem.indexOf(u8, writer.getWritten(), "\x1b]52;s;") != null);
|
|
500
|
-
|
|
501
|
-
writer.reset();
|
|
502
|
-
try term.writeClipboard(&writer, .query, "test");
|
|
503
|
-
try testing.expect(std.mem.indexOf(u8, writer.getWritten(), "\x1b]52;q;") != null);
|
|
504
|
-
}
|
|
505
|
-
|
|
506
|
-
test "writeClipboard - returns error when OSC52 not supported" {
|
|
507
|
-
if (builtin.os.tag == .windows) return error.SkipZigTest;
|
|
508
|
-
|
|
509
|
-
var term = Terminal.init(.{});
|
|
510
|
-
term.caps.osc52 = false;
|
|
511
|
-
|
|
512
|
-
var writer = TestWriter.init(testing.allocator);
|
|
513
|
-
defer writer.deinit();
|
|
514
|
-
|
|
515
|
-
const result = term.writeClipboard(&writer, .clipboard, "test");
|
|
516
|
-
try testing.expectError(error.NotSupported, result);
|
|
517
|
-
}
|
|
518
|
-
|
|
519
|
-
test "writeClipboard - wraps in DCS passthrough for tmux" {
|
|
520
|
-
if (builtin.os.tag == .windows) return error.SkipZigTest;
|
|
521
|
-
|
|
522
|
-
var env = std.process.EnvMap.init(testing.allocator);
|
|
523
|
-
defer env.deinit();
|
|
524
|
-
try env.put("TMUX", "/tmp/tmux-1000/default,12345,0");
|
|
525
|
-
|
|
526
|
-
var term = Terminal.init(.{ .env_map = &env });
|
|
527
|
-
term.caps.osc52 = true;
|
|
528
|
-
|
|
529
|
-
var writer = TestWriter.init(testing.allocator);
|
|
530
|
-
defer writer.deinit();
|
|
531
|
-
|
|
532
|
-
try term.writeClipboard(&writer, .clipboard, "test");
|
|
533
|
-
|
|
534
|
-
const output = writer.getWritten();
|
|
535
|
-
// Should start with tmux DCS wrapper
|
|
536
|
-
try testing.expect(std.mem.startsWith(u8, output, "\x1bPtmux;"));
|
|
537
|
-
// Should end with DCS terminator
|
|
538
|
-
try testing.expect(std.mem.endsWith(u8, output, "\x1b\\"));
|
|
539
|
-
// Should have doubled ESC characters inside
|
|
540
|
-
try testing.expect(std.mem.indexOf(u8, output, "\x1b\x1b") != null);
|
|
541
|
-
}
|
|
542
|
-
|
|
543
|
-
test "writeClipboard - wraps in DCS passthrough for GNU Screen" {
|
|
544
|
-
if (builtin.os.tag == .windows) return error.SkipZigTest;
|
|
545
|
-
|
|
546
|
-
var env = std.process.EnvMap.init(testing.allocator);
|
|
547
|
-
defer env.deinit();
|
|
548
|
-
try env.put("STY", "12345.pts-0.hostname");
|
|
549
|
-
|
|
550
|
-
var term = Terminal.init(.{ .env_map = &env });
|
|
551
|
-
term.caps.osc52 = true;
|
|
552
|
-
|
|
553
|
-
var writer = TestWriter.init(testing.allocator);
|
|
554
|
-
defer writer.deinit();
|
|
555
|
-
|
|
556
|
-
try term.writeClipboard(&writer, .clipboard, "test");
|
|
557
|
-
|
|
558
|
-
const output = writer.getWritten();
|
|
559
|
-
// Should start with DCS (but not tmux prefix)
|
|
560
|
-
try testing.expect(std.mem.startsWith(u8, output, "\x1bP"));
|
|
561
|
-
try testing.expect(!std.mem.startsWith(u8, output, "\x1bPtmux;"));
|
|
562
|
-
// Should end with DCS terminator
|
|
563
|
-
try testing.expect(std.mem.endsWith(u8, output, "\x1b\\"));
|
|
564
|
-
// Should have doubled ESC characters
|
|
565
|
-
try testing.expect(std.mem.indexOf(u8, output, "\x1b\x1b") != null);
|
|
566
|
-
}
|
|
567
|
-
|
|
568
|
-
test "writeClipboard - handles tmux sessions" {
|
|
569
|
-
if (builtin.os.tag == .windows) return error.SkipZigTest;
|
|
570
|
-
|
|
571
|
-
var env = std.process.EnvMap.init(testing.allocator);
|
|
572
|
-
defer env.deinit();
|
|
573
|
-
try env.put("TMUX", "/tmp/tmux-1000/default,12345,0");
|
|
574
|
-
|
|
575
|
-
var term = Terminal.init(.{ .env_map = &env });
|
|
576
|
-
term.caps.osc52 = true;
|
|
577
|
-
|
|
578
|
-
var writer = TestWriter.init(testing.allocator);
|
|
579
|
-
defer writer.deinit();
|
|
580
|
-
|
|
581
|
-
try term.writeClipboard(&writer, .clipboard, "test");
|
|
582
|
-
|
|
583
|
-
const output = writer.getWritten();
|
|
584
|
-
// Should have tmux DCS wrapper
|
|
585
|
-
try testing.expect(std.mem.startsWith(u8, output, "\x1bPtmux;"));
|
|
586
|
-
// Should end with DCS terminator
|
|
587
|
-
try testing.expect(std.mem.endsWith(u8, output, "\x1b\\"));
|
|
588
|
-
// Should have doubled ESC characters
|
|
589
|
-
try testing.expect(std.mem.indexOf(u8, output, "\x1b\x1b") != null);
|
|
590
|
-
}
|
|
591
|
-
|
|
592
|
-
test "caps.osc52 - clipboard capability flag" {
|
|
593
|
-
var term = Terminal.init(.{});
|
|
594
|
-
|
|
595
|
-
term.caps.osc52 = false;
|
|
596
|
-
try testing.expect(!term.caps.osc52);
|
|
597
|
-
|
|
598
|
-
term.caps.osc52 = true;
|
|
599
|
-
try testing.expect(term.caps.osc52);
|
|
600
|
-
}
|
|
601
|
-
|
|
602
|
-
fn countSubstring(haystack: []const u8, needle: []const u8) usize {
|
|
603
|
-
var count: usize = 0;
|
|
604
|
-
var i: usize = 0;
|
|
605
|
-
while (i < haystack.len) {
|
|
606
|
-
if (std.mem.startsWith(u8, haystack[i..], needle)) {
|
|
607
|
-
count += 1;
|
|
608
|
-
i += needle.len;
|
|
609
|
-
} else {
|
|
610
|
-
i += 1;
|
|
611
|
-
}
|
|
612
|
-
}
|
|
613
|
-
return count;
|
|
614
|
-
}
|
|
615
|
-
|
|
616
|
-
test "queryTerminalSend - skips OSC 66 queries when OPENTUI_FORCE_EXPLICIT_WIDTH=false" {
|
|
617
|
-
if (builtin.os.tag == .windows) return error.SkipZigTest;
|
|
618
|
-
|
|
619
|
-
var env = std.process.EnvMap.init(testing.allocator);
|
|
620
|
-
defer env.deinit();
|
|
621
|
-
try env.put("OPENTUI_FORCE_EXPLICIT_WIDTH", "false");
|
|
622
|
-
|
|
623
|
-
var term = Terminal.init(.{ .env_map = &env });
|
|
624
|
-
|
|
625
|
-
var writer = TestWriter.init(testing.allocator);
|
|
626
|
-
defer writer.deinit();
|
|
627
|
-
|
|
628
|
-
try term.queryTerminalSend(&writer);
|
|
629
|
-
|
|
630
|
-
const output = writer.getWritten();
|
|
631
|
-
|
|
632
|
-
// Should not contain OSC 66 queries
|
|
633
|
-
try testing.expect(std.mem.indexOf(u8, output, "\x1b]66;") == null);
|
|
634
|
-
|
|
635
|
-
// Should still contain other queries
|
|
636
|
-
try testing.expect(std.mem.indexOf(u8, output, "\x1b[>0q") != null); // xtversion
|
|
637
|
-
|
|
638
|
-
// Verify the flag was set correctly
|
|
639
|
-
try testing.expect(term.skip_explicit_width_query);
|
|
640
|
-
try testing.expect(!term.caps.explicit_width);
|
|
641
|
-
}
|
|
642
|
-
|
|
643
|
-
test "queryTerminalSend - sends OSC 66 queries by default" {
|
|
644
|
-
if (builtin.os.tag == .windows) return error.SkipZigTest;
|
|
645
|
-
|
|
646
|
-
var env = std.process.EnvMap.init(testing.allocator);
|
|
647
|
-
defer env.deinit();
|
|
648
|
-
|
|
649
|
-
var term = Terminal.init(.{ .env_map = &env });
|
|
650
|
-
|
|
651
|
-
var writer = TestWriter.init(testing.allocator);
|
|
652
|
-
defer writer.deinit();
|
|
653
|
-
|
|
654
|
-
try term.queryTerminalSend(&writer);
|
|
655
|
-
|
|
656
|
-
const output = writer.getWritten();
|
|
657
|
-
|
|
658
|
-
// Should contain OSC 66 explicit width query
|
|
659
|
-
try testing.expect(std.mem.indexOf(u8, output, "\x1b]66;w=1; \x1b\\") != null);
|
|
660
|
-
|
|
661
|
-
// Should contain OSC 66 scaled text query
|
|
662
|
-
try testing.expect(std.mem.indexOf(u8, output, "\x1b]66;s=2; \x1b\\") != null);
|
|
663
|
-
|
|
664
|
-
// Verify the flag was not set
|
|
665
|
-
try testing.expect(!term.skip_explicit_width_query);
|
|
666
|
-
}
|
|
667
|
-
|
|
668
|
-
test "queryTerminalSend - sends OSC 66 queries when OPENTUI_FORCE_EXPLICIT_WIDTH=true" {
|
|
669
|
-
if (builtin.os.tag == .windows) return error.SkipZigTest;
|
|
670
|
-
|
|
671
|
-
var env = std.process.EnvMap.init(testing.allocator);
|
|
672
|
-
defer env.deinit();
|
|
673
|
-
try env.put("OPENTUI_FORCE_EXPLICIT_WIDTH", "true");
|
|
674
|
-
|
|
675
|
-
var term = Terminal.init(.{ .env_map = &env });
|
|
676
|
-
|
|
677
|
-
var writer = TestWriter.init(testing.allocator);
|
|
678
|
-
defer writer.deinit();
|
|
679
|
-
|
|
680
|
-
try term.queryTerminalSend(&writer);
|
|
681
|
-
|
|
682
|
-
const output = writer.getWritten();
|
|
683
|
-
|
|
684
|
-
// Should contain OSC 66 queries
|
|
685
|
-
try testing.expect(std.mem.indexOf(u8, output, "\x1b]66;w=1; \x1b\\") != null);
|
|
686
|
-
try testing.expect(std.mem.indexOf(u8, output, "\x1b]66;s=2; \x1b\\") != null);
|
|
687
|
-
|
|
688
|
-
// Verify the capability was forced on
|
|
689
|
-
try testing.expect(term.caps.explicit_width);
|
|
690
|
-
try testing.expect(!term.skip_explicit_width_query);
|
|
691
|
-
}
|
|
692
|
-
|
|
693
|
-
test "setMouseMode - enable without movement keeps click/drag only" {
|
|
694
|
-
var term = Terminal.init(.{});
|
|
695
|
-
var writer = TestWriter.init(testing.allocator);
|
|
696
|
-
defer writer.deinit();
|
|
697
|
-
|
|
698
|
-
try term.setMouseMode(&writer, true, false);
|
|
699
|
-
|
|
700
|
-
const output = writer.getWritten();
|
|
701
|
-
const idx_disable_any = std.mem.indexOf(u8, output, ansi.ANSI.disableAnyEventTracking).?;
|
|
702
|
-
const idx_enable_mouse = std.mem.indexOf(u8, output, ansi.ANSI.enableMouseTracking).?;
|
|
703
|
-
const idx_enable_button = std.mem.indexOf(u8, output, ansi.ANSI.enableButtonEventTracking).?;
|
|
704
|
-
const idx_enable_sgr = std.mem.indexOf(u8, output, ansi.ANSI.enableSGRMouseMode).?;
|
|
705
|
-
try testing.expect(std.mem.indexOf(u8, output, ansi.ANSI.enableAnyEventTracking) == null);
|
|
706
|
-
try testing.expect(idx_disable_any < idx_enable_mouse);
|
|
707
|
-
try testing.expect(idx_enable_mouse < idx_enable_button);
|
|
708
|
-
try testing.expect(idx_enable_button < idx_enable_sgr);
|
|
709
|
-
|
|
710
|
-
try testing.expect(term.state.mouse);
|
|
711
|
-
try testing.expect(!term.state.mouse_movement);
|
|
712
|
-
}
|
|
713
|
-
|
|
714
|
-
test "setMouseMode - enable with movement enables any-event tracking" {
|
|
715
|
-
var term = Terminal.init(.{});
|
|
716
|
-
var writer = TestWriter.init(testing.allocator);
|
|
717
|
-
defer writer.deinit();
|
|
718
|
-
|
|
719
|
-
try term.setMouseMode(&writer, true, true);
|
|
720
|
-
|
|
721
|
-
const output = writer.getWritten();
|
|
722
|
-
const idx_enable_mouse = std.mem.indexOf(u8, output, ansi.ANSI.enableMouseTracking).?;
|
|
723
|
-
const idx_enable_button = std.mem.indexOf(u8, output, ansi.ANSI.enableButtonEventTracking).?;
|
|
724
|
-
const idx_enable_any = std.mem.indexOf(u8, output, ansi.ANSI.enableAnyEventTracking).?;
|
|
725
|
-
const idx_enable_sgr = std.mem.indexOf(u8, output, ansi.ANSI.enableSGRMouseMode).?;
|
|
726
|
-
try testing.expect(idx_enable_mouse < idx_enable_button);
|
|
727
|
-
try testing.expect(idx_enable_button < idx_enable_any);
|
|
728
|
-
try testing.expect(idx_enable_any < idx_enable_sgr);
|
|
729
|
-
try testing.expect(std.mem.indexOf(u8, output, ansi.ANSI.disableAnyEventTracking) == null);
|
|
730
|
-
|
|
731
|
-
try testing.expect(term.state.mouse);
|
|
732
|
-
try testing.expect(term.state.mouse_movement);
|
|
733
|
-
}
|
|
734
|
-
|
|
735
|
-
test "restoreTerminalModes - respects mouse movement setting" {
|
|
736
|
-
var term = Terminal.init(.{});
|
|
737
|
-
term.state.mouse = true;
|
|
738
|
-
term.state.mouse_movement = false;
|
|
739
|
-
|
|
740
|
-
var writer = TestWriter.init(testing.allocator);
|
|
741
|
-
defer writer.deinit();
|
|
742
|
-
|
|
743
|
-
try term.restoreTerminalModes(&writer);
|
|
744
|
-
|
|
745
|
-
const output = writer.getWritten();
|
|
746
|
-
const idx_disable_any = std.mem.indexOf(u8, output, ansi.ANSI.disableAnyEventTracking).?;
|
|
747
|
-
const idx_enable_mouse = std.mem.indexOf(u8, output, ansi.ANSI.enableMouseTracking).?;
|
|
748
|
-
const idx_enable_button = std.mem.indexOf(u8, output, ansi.ANSI.enableButtonEventTracking).?;
|
|
749
|
-
const idx_enable_sgr = std.mem.indexOf(u8, output, ansi.ANSI.enableSGRMouseMode).?;
|
|
750
|
-
try testing.expect(idx_disable_any < idx_enable_mouse);
|
|
751
|
-
try testing.expect(idx_enable_mouse < idx_enable_button);
|
|
752
|
-
try testing.expect(idx_enable_button < idx_enable_sgr);
|
|
753
|
-
try testing.expect(std.mem.indexOf(u8, output, ansi.ANSI.enableAnyEventTracking) == null);
|
|
754
|
-
}
|