mirror of
https://github.com/microsoft/terminal.git
synced 2026-02-04 05:35:20 +00:00
Add support for the DECPS escape sequence #11929
Closed
opened 2026-01-31 03:01:21 +00:00 by claunia
·
40 comments
No Branch/Tag Specified
main
automated/loc-update
feature/llm
dev/cazamor/sui/search
dev/pabhoj/actions_editor_search
dev/lhecker/11509-kitty-keyboard-protocol
dev/lhecker/11509-kitty-keyboard-protocol-wip
dev/pabhoj/actions_editor_visual
dev/cazamor/selfhost/2026-01-29
dev/duhowett/no-blank-issues-you-lost-privileges-for-that-fam
dev/lhecker/benchcat-fix
dev/lhecker/dcs-perf
dev/duhowett/eoy-25/allow-set-foreground
release-1.24
release-1.23
dev/cazamor/bot/deprecate-area-atlasengine
dev/pabhoj/actions_editor_followups
dev/cazamor/selfhost/2026-01-20
dev/cazamor/selfhost/2026-01-12
dev/cazamor/spec/auto-save
dev/duhowett/eoy-25/underline-colors-in-atlas-bug-redux
dev/duhowett/fhl-2024/asciicast-recorder
dev/duhowett/eoy-25/underline-colors-in-atlas-bug
dev/duhowett/hax/serial-port-support
dev/duhowett/connection-utf8
dev/lhecker/fused-event
dev/lhecker/18928-wip
dev/duhowett/fhl-2024/clang
dev/cazamor/uia-leak
dev/duhowett/win7-wpf-termcontrol-squash
release-1.22
dev/cazamor/selfhost/11-18-v3
dev/cazamor/selfhost/11-18
dev/duhowett/fhl-2025/bitmap-fonts
dev/duhowett/server-2025-vms
dev/duhowett/cant-believe-gotta-do-this-shit
dev/lhecker/1410-large-scrollback
dev/lhecker/dark-mode
dev/cazamor/sui/invert-cursor-color
dev/duhowett/fhl-2025/wt-command-palette-cmdpal-integration
dev/duhowett/fhl-2025/wt-json-relative-icons
dev/lhecker/fucking-service-locator
dev/duhowett/unicode-17
dev/duhowett/multi-blern
dev/lhecker/wellp2-alt
dev/duhowett/wellp2
dev/lhecker/1860-horizontal-scrollbar
dev/lhecker/fix-window-count
dev/cazamor/sui/tab-color-old
dev/duhowett/hax/conhost-icon
dev/duhowett/hax/sui-color-chip-border
dev/duhowett/hax/terminalsettings-as-a-lib-/with-types-merged-into-tsm
dev/pabhoj/page_control_input_cleanup
dev/duhowett/padding-in-atlas-rebase-20250729
dev/lhecker/attach-thread-input
dev/duhowett/portable-shader-members
msbuildcache-reenable
dev/cazamor/selfhost/1.24-2025-06-10
dev/cazamor/upgrade-settings-containers
dev/cazamor/sui/ext-page/powershell-stub
dev/cazamor/selfhost/1.24-2025-05-15
dev/pabhoj/sui_action_overhaul
dev/cazamor/selfhost/1.24-2025-05-06
dev/cazamor/selfhost/1.24-2025-04-29
dev/cazamor/sui/ext-page/lazy-load-objects
dev/cazamor/sui/ext-page/badge
dev/cazamor/selfhost/1.24
dev/lhecker/sdk-26100
dev/duhowett/testing
dev/jadelaga/VS-Pty.Net-1.22
dev/duhowett/fhl-2025/what-if-no-content-ids
dev/cazamor/a11y/vt-seq-prototype
dev/lhecker/18584-part2
dev/lhecker/get-lang-id
dev/duhowett/hax/clogs
release-1.21
dev/pabhoj/featurellm_fix_paste
dev/lhecker/grapheme-backup
dev/jadelaga/VS-Pty.netFixes
dev/lhecker/atlas-engine-compute-shader
dev/migrie/s/ai-providers
dev/lhecker/animated-cursor-wip
dev/pabhoj/featurellm_timeout
dev/lhecker/dark-mode-alt
dev/duhowett/osc-strided-table
dev/lhecker/bugbash
dev/pabhoj/featurellm_improve_parsing
dev/duhowett/coast-to-coast
dev/lhecker/curly-improvements
dev/duhowett/net8
dev/duhowett/onebranch-custom-pool
dev/lhecker/renderer-overhaul-2nd-attempt
dev/lhecker/cleanup
dev/cazamor/sui/confirmation-announcements
dev/lhecker/theme-quality
dev/duhowett/hax/cmake
dev/lhecker/winconpty-cleanup
dev/duhowett/learn/rewrite-highlights
dev/migrie/b/no-nesting-when-searching
release-1.20
dev/lhecker/14165-conhost-font-size
dev/duhowett/sel-2-spans
dev/lhecker/7118-cursor-color
dev/lhecker/remove-glyph-width
dev/lhecker/igfw-scroll-region
dev/lhecker/17656-win32im-double-encoding
dev/duhowett/fhl-2024/merge-idls
dev/duhowett/feed-forward-variables
dev/lhecker/remove-chrome-math
dev/duhowett/copylink
dev/duhowett/applicableactions
gh-readonly-queue/main/pr-17566-de50310295b7d92ed3d51f07974a2a945776bf9d
dev/lhecker/atlas-engine-stride-copy
dev/migrie/b/bump-nuget-in-c
dev/migrie/f/992-redux-redux
dev/migrie/f/filter-weight-input-too
dev/migrie/f/disable-nesting
dev/migrie/f/local-snippets-cleaner
dev/migrie/s/1553-mouse-bindings
selfhost-1.22-bugbash-2024-06-04
selfhost/1.22-bugbash-2024-06-04
dev/lhecker/15689-tab-drag-crash-fix
dev/migrie/f/sxnui-font-size-change
dev/migrie/f/local-snippets-on-action-refactor
dev/migrie/f/just-local-snippets
dev/migrie/save-input-patches
dev/migrie/f/md-pane-official
dev/migrie/base-pane
dev/migrie/fhl/tasks-pane
release-1.19
dev/migrie/b/17130-clear-marks-2
dev/migrie/b/17075-its-me-the-killer
dev/duhowett/i-figured-out-why-sometimes-the-publish-build-failed
dev/duhowett/nuget-publication-with-aad-app-id
selfhost-1.20
dev/duhowett/graph
dev/migrie/b/15803-activate-dont-copypasta
dev/duhowett/is-pgo-broken-because-of-sui-being-slower
dev/migrie/b/remove-terminaltab
dev/migrie/fhl/md-pane
dev/migrie/fhl/local-tasks-2024
dev/migrie/fhl/2024-inline-notebook
dev/duhowett/interface-projects
dev/duhowett/dead-loc
release-1.18
dev/migrie/fhl/2024-spring-merge-base
dev/duhowett/hax/l9
inbox
dev/migrie/14073-on-main
dev/duhowett/hax/conhost_dump_replay
user/lhecker/atlas-engine-srgb
dev/migrie/fhl/sxnui-tooltips-3
dev/migrie/7718-notifications-experiments
dev/migrie/fhl/7718-notifications
dev/migrie/fhl/7718-notifications-reboot
dev/lhecker/remove-gsl
dev/lhecker/16575-TerminateProcess
dev/lhecker/window-thread-climate-control
dev/lhecker/client-context-input-output-mode
dev/lhecker/ring-buffer-input-buffer
release-1.17
dev/lhecker/propsheet-fontdlg-refactor
dev/lhecker/renderer-overhaul
dev/pabhoj/test
dev/duhowett/chop
dev/lhecker/til-ulong-cleanup
dev/lhecker/til-env-cleanup
dev/migrie/f/16005-a11y-pane
dev/cazamor/a11y/fastpass
dev/migrie/b/15487-push-cwd
dev/migrie/b/15536-or-15219-idk
dev/duhowett/move-timers-down-into-core-interactivity-etc
dev/migrie/b/15812-broadcast-paste-two
dev/migrie/fhl-fall-2023/11162-quake-III-arena
dev/migrie/fhl-fall-2023/1620-automatic-tab-progress
dev/migrie/fhl-fall-2023/9992-quake-II
dev/migrie/fhl-fall-2023/9992-default-quake-settings
dev/migrie/fhl-fall-2023/9992-window-name-settings
dev/migrie/fhl-fall-2023/oceans
dev/lhecker/ColorScheme-improvements
dev/migrie/search-v2-v3
dev/migrie/pr-15717/its-dangerous-to-go-alone
dev/migrie/f/4768-taskbar-icons
dev/duhowett/padding-in-atlas
dev/migrie/f/3121-tooltips
dev/duhowett/sticky-control
dev/duhowett/fix-tracing-2
dev/migrie/b/add-support-for-vsc-marks
dev/migrie/f/1860-this-is-literally-what-less-is-for
dev/migrie/s/5916-draft
dev/lhecker/tracy
dev/migrie/s/north-star
dev/cazamor/tag-youre-it
dev/migrie/f/12336-let-it-mellow
dev/migrie/f/now-with-more-compat-settings
dev/migrie/f/compatibility-sui
dev/duhowett/hax/wpf-atlas
dev/duhowett/fgb
dev/migrie/b/15487-relative-paths-are-hard
dev/lhecker/colrv1
loc-update
dev/migrie/fhl/dyndep-csharp
dev/migrie/fhl/dyndep
dev/migrie/fhl-clickable-send-input
dev/migrie/f/cwd-hijinks-5506-15173
dev/lhecker/openconsole-async-start
1.17
dev/migrie/bump-scratch
dev/migrie/f/3726-restartConnection
dev/migrie/b/cxn-restarting-attempt-1-backport
dev/migrie/b/9053-part-3-the-actual-doing-of-the-thing
dev/migrie/b/13388-focus-logger
dev/migrie/b/9053-part-4-i-guess-defterm
dev/migrie/oop/3/of-the-silmarils
of-the-darkening-of-valinor
dev/migrie/fhl/notebook-proto-000
dev/migrie/f/narrator-buddy
dev/migrie/mux-2.8.2-march-2023
dev/migrie/f/roast-mutton
dev/migrie/f/12861-preview-input
dev/lhecker/clang-tidy
dev/migrie/f/3121-wE-dOnT-hAvE-dEv-DaYs
dev/duhowett/compiler-compliance
dev/duhowett/i-have-a-burning-hatred-for-ntstatus-of-later-so-why-not-fix-it
dev/duhowett/shorthand-namespaces
dev/duhowett/rename-all-dlls
dev/duhowett/errordialog
dev/lhecker/gsl-narrow
dev/migrie/b/11522-dumb-idea
release-1.16
dev/miniksa/env
dev/duhowett/hax/embed-everything
dev/migrie/b/13388-attempt-003
dev/migrie/b/14512-test-research
dev/migrie/b/13388-attempt-002
dev/migrie/b/14464-copyOnSelect-moving-text
dev/migrie/s/thema-schema-for-1.16
dev/migrie/s/theme-pair-schema
dev/migrie/b/13388-experiments-1
dev/cazamor/spec/a11y-vt-seq
dev/migrie/b/14557-empty-folder-dropdown
dev/cazamor/spec/a11y-vt-seq-v2
release-1.15
dev/migrie/f/process-model-v3-test-0
dev/lhecker/vsconfig
dev/migrie/s/5000-presentation
dev/lhecker/5907-startup-perf
dev/lhecker/winrt-file-api-benchmark
dev/duhowett/128-bit-compiler
dev/duhowett/hax/arm64-native-build
dev/migrie/fhl/more-shell-integration
dev/migrie/b/13388-experiments-0
dev/lhecker/til-to-ulong-improvements
dev/migrie/s/markdown-notebooks
dev/cazamor/a11y/nav-by-page
dev/cazamor/a11y/system-menu-support
dev/duhowett/no-private-registry-keys
dev/cazamor/wpf/uia-expose-enable-events
dev/cazamor/wpf/uia-events
extendAISpec
dev/migrie/fhl/clickSendInput
dev/migrie/fhl/save-command
dev/migrie/b/theme.profile
dev/migrie/b/13943-a-test-for-this
dev/migrie/oop/2/endgame
dev/duhowett/hax/merge_idl
dev/migrie/oop/2/infinity-war
dev/migrie/spellbot-cve
dev/cazamor/a11y-sev3/new-profile-announcement
dev/migrie/fhl/upside-down-mode
release-1.14
dev/migrie/f/9458-startupInfoToTerminal
dev/migrie/fhl/5916-triggers
dev/migrie/b/13523-context-menu
dev/migrie/b/6523-endpaint-outside-lock
dev/migrie/b/12413-OnUnhandledException
dev/lhecker/render-snapshot
dev/cazamor/1.15/scroll-to-point
dev/migrie/mux-2.8-aug-2022
dev/lhecker/lock-console-guard
dev/migrie/f/1504-final
dev/pabhoj/sui_follow_ups
dev/migrie/f/til-winrt.h
dev/cazamor/color-picker-redesign
dev/migrie/fhl/vscode-autocomplete-prototype
dev/migrie/f/1504-prototype
dev/migrie/oop/2/loki
dev/migrie/oop/2/wandavision
dev/migrie/b/8698-YOURE-OUT-OF-ORDER
fabricbot-configuration-migration
dev/migrie/b/12788-did-it-work
dev/migrie/b/localtests-ci-2022
dev/cazamor/1.14/replace-compareInBounds
dev/pabhoj/preview_string
dev/cazamor/ks/switchSelectionEndpoint
dev/migrie/oop/2/COM-ISwapChainProvider-attempt-1
dev/migrie/b/dxd-marker
release-1.13
dev/migrie/b/13066-for-defterm
dev/cazamor/revert-dwm
dev/migrie/b/13066-sw_flash_repeatedly
dev/migrie/b/no-cloaky-cloak
dev/migrie/f/apples-to-oranges
dev/migrie/f/no-custom-caption-btns
dev/migrie/f/10509-mica-and-transparent-titlebars
dev/migrie/b/12911-wpf-focus-fg
dev/migrie/titebar-colors
dev/lhecker/4015-cursor
dev/migrie/fhl/rgb-rainbow-window-frame
dev/migrie/fhl/scroll-marks-prototype
release-1.12
dev/miniksa/compliance
dev/migrie/f/default-icons
dev/migrie/fhl/10175-web-search-for-text
dev/migrie/fhl/menu-complete-prototype
dev/migrie/b/2988-merged-prototypes
dev/migrie/b/2988-niksa-msgs-prototype
dev/migrie/fhl/9583-colorSelection
dev/migrie/b/10609-sui-leak
dev/migrie/b/32-attempt-3
dev/migrie/release-1.12-rejuv-attempt-2
dev/migrie/demo-for-presentation
dev/migrie/b/32-but-im-here-for-12567
dev/duhowett/conpty_first_frame_blug
dev/migrie/b/11092-unfocused-acrylic-settings
dev/migrie/localtests-in-ci
dev/migrie/b/12356-attempt-2
dev/migrie/b/12353-with-null
dev/migrie/b/12387-trim-spaces
dev/migrie/b/5033-bad-start
dev/lhecker/12351-broken-locales
dev/migrie/b/8663-input-to-oem-crash
dev/migrie/b/11743-win10-opacity-is-hard
dev/migrie/f/ctrl-click-elevate
dev/migrie/b/12196-shim-localization
dev/lhecker/issue-4015-til-rect
dev/cazamor/eim/mvvm
dev/migrie/f/--elevate
dev/migrie/b/11668-i-think
dev/migrie/b/11994-wsl-mangline
dev/migrie/eim/3475-action-xmacros
dev/migrie/eim/incremental-build-000
dev/cazamor/a11y/fake-uia-data
dev/migrie/f/non-terminal-content-elevation-warning
dev/migrie/f/632-on-warning-dialog
dev/lhecker/rgba
dev/migrie/b/8480-keybindings-in-tabs
release-1.11
dev/migrie/b/11561-dead-ends
dev/migrie/oct-21-roadmap-update
dev/migrie/fhl/adaptive-card-extension
dev/cazamor/test/11440
dev/migrie/f/warning-dlg-automation
dev/migrie/b/1.12-crash-on-exit
dev/migrie/b/11146-next-tab-in-cmdpal
release-1.10
dev/migrie/5ff9a24-and-75e2b5f
dev/duhowtt/hax/cpal-jumplist-async
dev/lelian/actionid/1
dev/migrie/f/just-elevated-state
dev/lhecker/terminal-settings-cleanup
dev/migrie/gh-10824
dev/pabhoj/cursor_light
dev/migrie/oop/wandavision
dev/migrie/oop/endgame
dev/migrie/oop/infinity-war
dev/lhecker/app-state-actually-hidden
dev/migrie/b/6160-dynamic-default-warning
dev/mgirie/b/more-nchhittest-ideas
dev/migrie/b/9320-interfacial-separation
cinnamon/fhl/find-contextmenu
dev/lhecker/wsl-distro-generator-cleanup
dev/migrie/b/10875-but-more-clever
dev/migrie/b/broken-globalsummon-overloading
dev/duhowett/hax/rle-row
dev/migrie/fhl-2021/cmdpal-select-list
dev/migrie/fhl-2021/differential-pixel-shading
dev/duhowett/hax/no-writable-glyphat
dev/migrie/fhl-2021/more-shader-variables
dev/migrie/titlebar-shenannigans
dev/miniksa/win10_font_matching
dev/lhecker/conhost-oom
dev/migrie/b/10332-less-snappy-scrolling
dev/migrie/b/7422-1px-top-border
release-1.9
dev/cazamor/move-scratch
release-1.8
dev/miniksa/manifest_2
release-1.6
release-1.7
dev/migrie/oop/the-whole-thing
dev/migrie/oop/connection-factory
dev/migrie/f/quake-dropdown-2
dev/miniksa/rle2
dev/migrie/f/quake-toCurrent-experiments-2
dev/migrie/f/quake-toCurrent-experiments
dev/migrie/f/quake-dropdown
dev/cazamor/actions-page/template
dev/duhowett/hax/cursor_stamp_foreground_background
dev/migrie/f/1860-hey-might-was-well-hack-during-a-hackathon
dev/migrie/oop-terminal.control-split-control
dev/duhowett/hax/build-with-wholearchive
dev/cazamor/spec/tsm-actions-temp
dev/migrie/oop-tear-apart-control
dev/migrie/oop-scratch-3
dev/cazamor/sui/bugfix-reload-crash
dev/migrie/f/xmacro
dev/cazamor/sui/proto/profile-nav-view
dev/migrie/f/name-windows
dev/migrie/dol/messing-with-shaders-take-1
release-1.5
dev/cazamor/sui/inheritance-hyperlinks-test
dev/migrie/r/commandline-lib-002
dev/migrie/f/com.fabrikam.toaster
dev/cazamor/adaptive-cards-prototype
dev/migrie/f/commandline-lib
dev/miniksa/zipzoom2
dev/migrie/f/remote-commandlines
dev/migrie/f/632-elevated-profiles
dev/migrie/oop-broker-000
dev/migrie/fix-pr-7015
dev/duhowett/clang
dev/miniksa/input_tests_2
dev/miniksa/input2
dev/migrie/oop-rpc-000
release-1.4
dev/migrie/oop-mixed-elevation-1
dev/migrie/oop-window-content-1
cinnamon/open-json
dev/miniksa/input_tests
dev/duhowett/hax/tsm-graphviz
dev/miniksa/input
dev/duhowett/hax/caption_buttons
release-1.3
dev/cazamor/a11y/expand-line-under-viewport
dev/cazamor/acc/ch/word-nav-perf
dev/cazamor/spec/settings-ui-architecture-draft
dev/duhowett/hax/tap_upgrade
dev/migrie/f/pane-exit-animation
release-1.2
dev/migrie/move-lib-up-and-dll-down
release-1.1
dev/migrie/f/branch-2-backup
dev/migrie/f/settings-getters-only
dev/duhowett/hax/command_palette_search
dev/migrie/f/6856-let-terminalpage-expandcommands
dev/migrie/f/theming-2020
dev/migrie/oop-scratch-4
dev/duhowett/hax/punchout
dev/migrie/s/action-ids
dev/migrie/f/lets-just-generate-these
dev/migrie/oop-scratch-2
dev/miniksa/dcomp
dev/miniksa/gotta_go_fast_spsc
dev/miniksa/gotta_go_fast
dev/miniksa/perf_skip_checks
dev/miniksa/perf_buffer_dig
dev/migrie/s/1203-cursorTextColor
dev/migrie/f/fix-intellisense-i-guess-backup
release-1.0
dev/migrie/f/execute-commandlines
dev/migrie/f/2046-Command-Palette-v2
dev/migrie/b/6421-passthrough-alt
dev/migrie/b/moving-focus-is-hard
dev/miniksa/set
dev/migrie/f/1203-phase-1
dev/migrie/f/get-localtests-in-ci
dev/cazamor/drag-panes
dev/cazamor/tile-background
release-0.11
dev/duhowett/dev/duhowett/hax/appstate_remember
dev/duhowett/load_condrv
dev/duhowett/hax/wpf_win_8_hax
dev/migrie/b/3088-weird-exact-wrap-resize
release-0.10
dev/migrie/b/4591-custom-scaling-bug
dev/duhowett/hax/attr_smuggling
dev/migrie/b/5161-mingw-vim-fix
dev/miniksa/dx_bitmap
dev/migrie/b/1503-try-messing-with-cooked-read
dev/duhowett/eyebeam
dev/migrie/b/5113-experiments
dev/duhowett/hax-selection-exclusive
dev/migrie/f/more-vt-renderer-tracing
dev/miniksa/bitmap
dev/duhowett/wprp
dev/miniksa/bitmap-mad-with-power
dev/migrie/f/resize-quirk
dev/migrie/f/reflow-buffer-on-resize-002
wpf-renderer-revert
dev/miniksa/draw
release-0.9
dev/miniksa/tabs-color-fix
dev/miniksa/4309
dev/migrie/f/just-wrapping
dev/migrie/b/3490-try-another-resize-algo
release-0.8
dev/migrie/b/3490-a-simpler-resize
dev/migrie/b/3490-resize-down
dev/miniksa/4254
dev/migrie/f/conpty-wrapped-lines-2
dev/migrie/b/be-better-at-hiding
dev/migrie/f/3327-xaml-theming-proto
dev/miniksa/gardening2
release-0.7
dev/duhowett/conpty-flags
dev/migrie/f/603-vintage-opacity
dev/migrie/PR#3181-comments
dev/duhowett/font-64
release-0.5
dev/migrie/b/663-paste-lf-always
dev/migrie/b/2011-reordered-fallthrough-strings
dev/migrie/b/411-init-tab-stops
dev/migrie/b/json-patching-is-hard
dev/migrie/b/2455-try-getting-tests-working
dev/migrie/b/1223-change-256-table
dev/migrie/f/2171-openterm.cmd
dev/migrie/f/drag-panes
dev/migrie/f/2046-command-palette
release-0.3
dev/miniksa/manager
dev/migrie/f/non-terminal-panes
dev/migrie/f/passthrough-2019
dev/miniksa/shared_pch
dev/migrie/f/1897-less-duplicated-work
release-0.2
dev/cazamor/mcs/viewport-selection
dev/duhowett/version_hack
v1.24.10212.0
v1.23.20211.0
v1.24.3504.0
v1.23.13503.0
v1.24.2812.0
v1.23.12811.0
v1.24.2682.0
v1.23.12681.0
v1.24.2372.0
v1.23.12371.0
v1.23.12102.0
v1.22.12111.0
v1.23.11752.0
v1.22.11751.0
v1.22.11141.0
v1.23.11132.0
v1.23.10732.0
v1.22.10731.0
v1.21.10351.0
v1.22.10352.0
v1.23.10353.0
v1.22.3232.0
v1.21.3231.0
v1.22.2912.0
v1.21.2911.0
v1.22.2702.0
v1.21.2701.0
v1.22.2362.0
v1.21.2361.0
v1.21.1772.0
v1.20.11781.0
v1.21.1382.0
v1.20.11381.0
v1.21.1272.0
v1.20.11271.0
v1.20.11215.0
v1.19.11213.0
v1.20.10822.0
v1.19.10821.0
v1.20.10572.0
v1.19.10573.0
v1.20.10303.0
v1.19.10302.0
v1.18.10301.0
v1.20.10293.0
v1.19.10292.0
v1.18.10291.0
v1.18.3181.0
v1.19.3172.0
v1.19.2831.0
v1.18.2822.0
v1.19.2682.0
v1.18.2681.0
v1.18.1462.0
v1.17.11461.0
v1.18.1421.0
v1.17.11391.0
v1.17.11043.0
v1.16.10261.0
v1.17.1023
v1.16.10231.0
v1.15.3465.0
v1.16.3463.0
v1.15.2712.0
v1.15.2874.0
v1.16.2641.0
v1.16.2523.0
v1.15.2524.0
v1.15.2282.0
v1.14.2281.0
v1.14.1962.0
v1.15.2002.0
v1.15.2001.0
v1.15.1862.0
v1.14.1861.0
v1.14.1451.0
v1.14.1432.0
v1.13.11431.0
v1.13.10983.0
v1.12.10982.0
v1.13.10733.0
v1.12.10732.0
v1.13.10395.0
v1.12.10393.0
v1.13.10336.0
v1.12.10334.0
v1.12.3472.0
v1.11.3471.0
v1.12.2931.0
v1.12.2922.0
v1.11.2921.0
v1.11.2731.0
v1.10.2714.0
v1.11.2421.0
v1.10.2383.0
v1.10.1933.0
v1.9.1942.0
v1.9.1523.0
v1.8.1521.0
v1.9.1445.0
v1.8.1444.0
v1.8.1092.0
v1.7.1091.0
v1.8.1032.0
v1.7.1033.0
v1.7.572.0
v1.6.10571.0
v1.5.10411.0
v1.6.10412.0
v1.6.10272.0
v1.5.10271.0
v1.5.3242.0
v1.4.3243.0
v1.5.3142.0
v1.4.3141.0
v1.4.2652.0
v1.3.2651.0
v1.3.2382.0
v1.2.2381.0
v1.1.2233.0
v1.2.2234.0
v1.1.2021.0
v1.2.2022.0
v1.1.1812.0
v1.0.1811.0
v1.1.1671.0
v1.0.1401.0
v0.11.1333.0
v0.11.1251.0
v0.11.1191.0
v0.11.1111.0
v0.11.1121.0
v0.10.781.0
v0.10.761.0
v0.9.433.0
v0.8.10261.0
v0.8.10091.0
v0.7.3451.0
v0.7.3382.0
v0.7.3291.0
v0.7.3252.0
v0.6.3181.0
v0.6.2951.0
v0.6.2911.0
v0.5.2762.0
v0.5.2761.0
v0.5.2681.0
v0.5.2661.0
v0.3.2321.0
v0.4.2342.0
v0.4.2382.0
v0.3.2171.0
v0.3.2142.0
v0.2.1831.0
v0.2.1715.0
v0.2.1703.0
v0.1.1621.0
v0.1.1581.0
v0.1.1502.0
v0.1.1431.0
v0.1.1361.0
v0.1.1093.0
v0.1.1161.0
v0.1.1204.0
experiment-master
v0.1.1025.0
experiment-OutsideBuild
broken-tabstops
RS2-final
v0.1.1002.0
experiment-rel-windows-inbox
experiment-f-ServerApp
v0.1.1211.0
1904.29002
1810.02002
1708.14008
Labels
Clear labels
⛺ Reserved
A11yCO
A11yMAS
A11ySev1
A11ySev2
A11ySev3
A11yTTValidated
A11yUsable
A11yVoiceAccess
A11yWCAG
Area-Accessibility
Area-AtlasEngine
Area-AzureShell
Area-Build
Area-Build
Area-Chat
Area-CmdPal
Area-CodeHealth
Area-Commandline
Area-CookedRead
Area-DefApp
Area-Extensibility
Area-Fonts
Area-GroupPolicy
Area-i18n
Area-Input
Area-Interaction
Area-Interop
Area-Localization
Area-Output
Area-Performance
Area-Portable
Area-Quality
Area-Remoting
Area-Rendering
Area-Schema
Area-Server
Area-Settings
Area-SettingsUI
Area-ShellExtension
Area-ShellExtension
Area-ShellExtension
Area-Suggestions
Area-Suggestions
Area-TerminalConnection
Area-TerminalControl
Area-Theming
Area-UserInterface
Area-VT
Area-Windowing
Area-WPFControl
AutoMerge
Blocking-Ingestion
Culprit-Centennial
Culprit-WinUI
Disability-All
Disability-Blind
Disability-LowVision
Disability-Mobility
External-Blocked-WinUI3
Fixed
Gathering-Data
good first issue
HCL-E+D
HCL-WindowsTerminal
Help Wanted
Impact-Compatibility
Impact-Compliance
Impact-Correctness
Impact-Visual
In-PR
InclusionBacklog
InclusionBacklog-Windows TerminalWin32
InclusionCommitted-202206
Issue-Bug
Issue-Docs
Issue-Feature
Issue-Feature
Issue-Question
Issue-Samples
Issue-Scenario
Issue-Task
Needs-Attention
Needs-Author-Feedback
Needs-Bisect
Needs-Discussion
Needs-Repro
Needs-Tag-Fix
Needs-Tag-Fix
Needs-Triage
No-Recent-Activity
Priority-0
Priority-1
Priority-2
Priority-3
Product-Cmd.exe
Product-Colortool
Product-Colortool
Product-Colortool
Product-Conhost
Product-Conpty
Product-Meta
Product-Powershell
Product-Terminal
Product-WSL
pull-request
Resolution-Answered
Resolution-By-Design
Resolution-Duplicate
Resolution-External
Resolution-Fix-Available
Resolution-Fix-Committed
Resolution-No-Repro
Resolution-Won't-Fix
Severity-Blocking
Severity-Crash
Severity-DataLoss
spam
this-will-be-a-breaking-change
Tracking-External
WindowsTerminal_Win32
Work-Item
zAskModeBug
zInbox-Bug
Mirrored from GitHub Pull Request
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/terminal#11929
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @j4james on GitHub (Dec 31, 2020).
Description of the new feature/enhancement
The
DECPS(Play Sound) escape sequence was first introduced on the DEC VT520 terminals, and provides applications with a way to play a sequence of musical notes. The supported functionality is fairly rudimentary, but it's good enough for generating basic sound effects in games, making your build scripts play a little jingle when they complete successfully, or having your login MOTD wish you a happy birthday every year.Here's a little video demonstrating the sort of effects you can achieve (this is using a proof-of-concept implementation I've been experimenting with in conhost). Make sure the video player is not muted, otherwise you're obviously not going to hear anything.
https://user-images.githubusercontent.com/4181424/103430785-8957c700-4bbf-11eb-966c-14e916fbd03a.mp4
Proposed technical implementation details (optional)
My current implementation is using the Windows midi APIs to generate the notes, and I thought the square wave synth was probably the most appropriate instrument to match the kind of sounds that would be produced by terminals from that era.
I'm still working out some of the details, but I'd be keen to submit a PR at some point if this is something you might be willing to include.
@zadjii-msft commented on GitHub (Jan 4, 2021):
This is fantastic, I love it.
:shipit:
@skyline75489 commented on GitHub (Jan 5, 2021):
All those VT sequences keep surprising me.
@DHowett commented on GitHub (Jan 28, 2021):
Holy heck, I love this. I see no reason not to support it.
@j4james commented on GitHub (Feb 5, 2021):
In case anyone is curious about the status, I did actually have a PR ready to submit for this, but while writing up the details, I was reading over the docs again, and it occurred to me that I might not have interpreted the buffering mechanism correctly.
I only know of two other terminals that support this sequence, and I don't think either of them are correct either. So I really need to get hold of a real DEC terminal to test with if I want to be sure I'm getting it right.
So for now I'm putting my PR on hold. But if anyone reading this happens to have access to a real VT520 or VT525 terminal that they can test with, I'd love to hear from you.
@jerch commented on GitHub (Oct 4, 2021):
@j4james Is DECPS blocking on terminal side until the playback finished or is it possible to stack tones to chords by entering multiple sequences at once?
@j4james commented on GitHub (Oct 4, 2021):
@jerch I'm fairly certain it wasn't possible to play multiple sequences at once. This is a direct quote from the VT525 manual:
I'm just not entirely sure if they mean you can play one
DECPSsequence with up to 16 notes (and the nextDECPSwould block until the first is finished), or you could potentially send up to 16DECPSsequences, as long as each only contained a single note.This is probably not that big a deal for most people, but I was hoping to use the buffering as a way to do synchronized animations (like the demo above), and it's kind of essential that we get the behaviour correct for that.
@jerch commented on GitHub (Oct 5, 2021):
Hmm not sure either. Esp. the "can store 16 notes of specified volume and duration" sounds weird, almost like it is not a FIFO sample buffer, but a lookup table for pre-rendered wave forms, which you can only choose from in a timely fashion, while others would further block on the input buffer (due to needed rendering?). Maybe I am reading too much into it.
@j4james commented on GitHub (Oct 5, 2021):
"16 notes of specified volume and duration" just refers the fact that the
DECPSsequence takes one volume parameter, one duration parameter, and then multiple note parameters that are played with that volume and duration. If you want each note played at a different volume, or using a different duration, then you need a separateDECPSper note, but if you're playing a run of notes with the same volume and duration, you can do that with oneDECPSand save a few bytes (and possibly also avoid the buffer being blocked).@jerch commented on GitHub (Oct 5, 2021):
Multiple notes in one sequence? I only looked it up in EK-VT520-RM, seems I cannot find any trace of multiple notes in one sequence there. Where did you get that from?
@j4james commented on GitHub (Oct 5, 2021):
Yeah, I know it's not obvious - they mostly just show the one note parameter when documenting
DECPS- but there's a section in the Set-Up chapter (2.17 Sound, page 2-60), which describes the multiple-note capabilities. In my pdf edition it's on page 92.@jerch commented on GitHub (Oct 5, 2021):
Yepp found it, thx. Now reading all again the buffer description is not more obvious to me. The "16 ... of specified volume and duration" now kinda sounds like the buffer can only hold one volume/duration setting up to 16 notes?
Note the phrasing they use in that sentence:
Do they refer to one volume/duration setting as "sound control"? Not clear to me. If so, I'd say any new sequence would not enter the buffer until it was drained, because every sequence carries a volume/duration setting, thus a "sound control". Ofc this might be the same as in the prev seq, but prolly gets not evaluated before the buffer is free? At least that would be my guess from that phrasing. It further would imply, that excess notes beyond 16 in one seq would be ignored. Not sure whats the CSI param limit of vt500+, imho they can only use up to 16 at all, thus you could effectively only fill the buffer up to 14 notes (16 - Pvolume - Pduration)? Well lots of guessing here...
Edit: I think the right buffer semantics is not that important here beside the blocking times, for proper emulation with correct micro timings (which ofc is needed with sound stuff) it might be enough to simulate the user experienced behavior.
Edit2: I still have one of those vt525 boxes I grabbed from our data center 15ys ago. But not sure if that still works (not even sure if it supports this particular sequence). Will see how that goes...
@j4james commented on GitHub (Oct 5, 2021):
Yeah, that's the conclusion I came to as well. But I had initially implemented it another way, so I wasn't that keen to rewrite everything until I was certain of the correct behaviour. At the time I was hoping to pick up a VT525 from somewhere, but then covid happened, and I've been barricading myself from the zombies apocalypse ever since.
They generally refer to escape sequences as control functions, so I figured "sound control" meant the
DECPSsequence.Yeah, that's my thinking too.
I wondered about that as well. The DEC STD-070 specs says 16 is required, but the maximum is implementation defined, so it's reasonable to suppose the VT525 might have more than 16.
If you could get that working that would be fantastic!
@jerch commented on GitHub (Oct 5, 2021):
@j4james Just tried to replicate their tuning scheme, but kinda cannot figure out, what they used here. For equal midi tuning the frequency values are too low (more like based on 420Hz), and too narrow (the highest value is more than 50Hz off). Do you have a clue about the tuning they used? To me it seems that the values are not really in tune to any standard system.
Edit: Ok had an midikey offset by one, the closest I get is without that error actually is this:
To me the last one seems totally off, like the docs got the wrong frequency number or denoting the wrong note (C6 is much closer). The other tiny differences can be explained by a different tuning scale (not a big deal).
@j4james commented on GitHub (Oct 5, 2021):
Yeah, I assumed that was a mistake in the documentation, which isn't that uncommon for these manuals. I just used the standard note numbers and ignored the frequency values. If I remember correctly, the other terminals I tried were doing the same thing, although I think one shifted everything an octave lower.
FYI, I'm using MIDI for this, so for
DECPSnote numbers 1 to 25, the corresponding MIDI values are 72 to 96.@jerch commented on GitHub (Oct 5, 2021):
Yeah I basically do the same, but tuned to 447 Hz. Well I have no ready-to-go MIDI backend, thus have to set up the oscillators myself (simple sine wave for now).
@jerch commented on GitHub (Oct 6, 2021):
@j4james Another question - how did you map the volume levels? I currently map them equally into 0 .. 1 gain, but thats not quite right in terms of perceived "flat" volume steps (for that an exponential adjustment would be needed).
(I will not get home to grab the device before 2 weeks, so maybe you have an informed guess here?)
@j4james commented on GitHub (Oct 6, 2021):
I'm just taking the volume number in the range 0 to 7 and mapping that to a MIDI velocity in the range 0 to 127, using
volume * 127 / 7. It's been a long time since I worked on this, but I vaguely remember experimenting with some sort of exponential scale and deciding in the end that it sounded best this way. But I don't know whether that's just because of the way that MIDI velocity is interpreted, so I'm not sure this is very helpful to you.That said, I'm happy to adjust whatever I'm doing if it turns out that the real VT525 works differently.
@jerch commented on GitHub (Oct 7, 2021):
Changed it to a 2^n mapping on the gain, which sounds good to me in terms of dynamics discrimination. If I get the maths right behind it, that roughly covers a range of 48dB, as gain works a factor on the amplitude, where doubling accounts for ~6dB. (Well the range is a bit lower, as I had to use a compressor to get the crossfading of the oscillators clicking free.)
My early take on the sequence: https://github.com/xtermjs/xterm.js/pull/3494
(The implementation is certainly wrong in the blocking semantics, it currently blocks on every note for its playing time.)
@mintty commented on GitHub (Oct 14, 2021):
@j4james, would you mind uploading your mspacman.txt test file, please?
@j4james commented on GitHub (Oct 14, 2021):
@mintty I'd rather not do that yet, as that animation is based on my initial implementation that I'm almost sure is wrong. I don't want you (or anyone else) to try and be compatible with that if it's going to end up making your implementation incorrect too. Hopefully @jerch will be able to confirm the correct behaviour in the near future, and then I'll be happy to regenerate some proper test cases.
In the meantime, though, if you just want some test music (without the animations), I've got a few that I can probably add to a gist.
@j4james commented on GitHub (Oct 14, 2021):
Actually it turns out I already these as a bunch of
printfstatements which you should just be able to paste into a bash shell. I'm afraid they're kind of crap, but it's at least something to test with.Ms Pac-Man Theme
printf "\e[3;2;1;3;5,~\e[3;8;6;10;8;11,~\e[3;4;10;11;13;10,~\e[3;8;8;11,~\e[3;4;10;11;13;10;11;13;15;17,~\e[3;8;18;17;18,~"In the Hall of the Mountain King
printf "\e[3;8;1;3;4;6;8;4,~\e[3;16;8,~\e[3;8;7;3,~\e[3;16;7,~\e[3;8;6;2,~\e[3;16;6,~\e[3;8;1;3;4;6;8;4;8;13;11;8;4;8,~\e[3;32;11,~\e[3;8;8;10;12;13;15;12,~\e[3;16;15,~\e[3;8;16;12,~\e[3;16;16,~\e[3;8;15;12,~\e[3;16;15,~\e[3;8;8;10;12;13;15;12,~\e[3;16;15,~\e[3;8;16;12,~\e[3;16;16,~\e[3;32;15,~\e[3;8;13;15;16;18;20;16,~\e[3;16;20,~\e[3;8;19;15,~\e[3;16;19,~\e[3;8;18;14,~\e[3;16;18,~\e[3;8;13;15;16;18;20;16;20;25;23;20;16;20,~\e[3;32;23,~"Jingle Bells
printf "\e[3;8;12;12,~\e[3;16;12,~\e[3;8;12;12,~\e[3;16;12,~\e[3;8;12;15,~\e[3;12;8,~\e[3;4;10,~\e[3;24;12,~\e[3;8;0;13;13,~\e[3;12;13,~\e[3;4;13,~\e[3;8;13;12;12,~\e[3;4;12;12,~\e[3;8;15;15;13;10,~\e[3;24;8,~\e[3;8;0,~"Happy Birthday
printf "\e[3;10;8,~\e[3;5;8,~\e[3;15;10;8;13,~\e[3;30;12,~\e[3;10;8,~\e[3;5;8,~\e[3;15;10;8;15,~\e[3;30;13,~\e[3;10;8,~\e[3;5;8,~\e[3;15;20;17;13;12,~\e[3;30;10,~\e[3;10;18,~\e[3;5;18,~\e[3;15;17;13;15,~\e[3;30;13,~"Harry Potter Theme
printf "\e[3;12;3,~\e[3;18;8,~\e[3;6;11,~\e[3;12;10,~\e[3;24;8,~\e[3;12;15,~\e[3;36;13;10,~\e[3;18;8,~\e[3;6;11,~\e[3;12;10,~\e[3;24;7,~\e[3;12;9,~\e[3;60;3,~\e[3;12;3,~\e[3;18;8,~\e[3;6;11,~\e[3;12;10,~\e[3;24;8,~\e[3;12;15,~\e[3;24;18,~\e[3;12;17,~\e[3;24;16,~\e[3;12;12,~\e[3;18;16,~\e[3;6;15,~\e[3;12;14,~\e[3;24;2,~\e[3;12;11,~\e[3;60;8,~"Indiana Jones Theme
printf "\e[3;9;5,~\e[3;3;6,~\e[3;6;8,~\e[3;30;13,~\e[3;9;3,~\e[3;3;5,~\e[3;36;6,~\e[3;9;8,~\e[3;3;10,~\e[3;6;12,~\e[3;30;18,~\e[3;9;10,~\e[3;3;12,~\e[3;12;13;15;17,~\e[3;9;5,~\e[3;3;6,~\e[3;6;8,~\e[3;30;13,~\e[3;9;15,~\e[3;3;17,~\e[3;36;18,~\e[3;9;8,~\e[3;3;8,~\e[3;12;17,~\e[3;9;15,~\e[3;3;8,~\e[3;12;17,~\e[3;9;15,~\e[3;3;8,~\e[3;12;17,~\e[3;9;15,~\e[3;3;8,~\e[3;12;18,~\e[3;9;17,~\e[3;3;15,~\e[3;48;13,~"Star Wars: Imperial March
printf "\e[3;20;7;7;7,~\e[3;15;3,~\e[3;5;10,~\e[3;20;7,~\e[3;15;3,~\e[3;5;10,~\e[3;40;7,~\e[3;20;14;14;14,~\e[3;15;15,~\e[3;5;10,~\e[3;20;6,~\e[3;15;3,~\e[3;5;10,~\e[3;40;7,~\e[3;20;19;7;19,~\e[3;10;18;17,~\e[3;5;16;15,~\e[3;10;16;0;8,~\e[3;20;13,~\e[3;10;12;11,~\e[3;5;10;9,~\e[3;10;10;0;3,~\e[3;20;6,~\e[3;15;3,~\e[3;5;10,~\e[3;20;7,~\e[3;15;3,~\e[3;5;10,~\e[3;40;7,~"Cavalry Charge (Bugle Call)
printf "\e[3;6;1,~\e[3;3;0;1,~\e[3;6;1,~\e[3;3;0;1,~\e[3;6;1,~\e[3;3;0;1,~\e[3;6;1,~\e[3;3;0;1,~\e[3;6;1,~\e[3;3;0;1,~\e[3;6;1,~\e[3;3;0;1,~\e[3;6;8,~\e[3;3;0;5,~\e[3;6;8,~\e[3;3;0;5,~\e[3;6;8,~\e[3;3;0;5,~\e[3;6;1,~\e[3;3;0;1,~\e[3;6;1,~\e[3;3;0;1,~\e[3;6;1,~\e[3;3;0;1,~\e[3;6;8,~\e[3;3;0;5,~\e[3;6;8,~\e[3;3;0;5,~\e[3;6;8,~\e[3;3;0;5,~\e[3;36;1,~"Reveille (Bugle Call)
printf "\e[3;8;1;6,~\e[3;4;10;6,~\e[3;8;1;10;6,~\e[3;4;10;6,~\e[3;8;1;10;6,~\e[3;4;10;6,~\e[3;8;1;6,~\e[3;16;10,~\e[3;8;6;1;6,~\e[3;4;10;6,~\e[3;8;1;10;6,~\e[3;4;10;6,~\e[3;8;1;10;6,~\e[3;4;10;6,~\e[3;8;1;1,~\e[3;24;6,~\e[3;8;10;10;10;10;10,~\e[3;16;13,~\e[3;8;10;6;10;6;10;6,~\e[3;16;10,~\e[3;8;6;10;10;10;10;10,~\e[3;16;13,~\e[3;8;10;6;10;6;1;1,~\e[3;24;6,~"@jerch commented on GitHub (Oct 14, 2021):
@j4james Nice programming work (I guess you did that manually). There are only 2 or 3 glitches (notes and timings) as far as I remember those themes. 😸
Edit: Time to write a to/from MIDI converter? (jk)
@j4james commented on GitHub (Oct 14, 2021):
Yeah it was done manually. The simple ones I think I just copied directly from sheet music, but converting an orchestral score for a movie into a single channel of beeps was a little more complicated. 😊 To make things easier, I looked for some beginner piano renditions on youtube, and from there I just selected the subset of notes that I thought best represented the theme. Obviously not always with great results, but I think they're still fun to play with.
@mintty commented on GitHub (Oct 18, 2021):
@j4james, thanks for the printf examples, but how should they be interpreted? DECPS only defines 3 parameter per CSI sequence.
@j4james commented on GitHub (Oct 18, 2021):
@mintty See the comments above: https://github.com/microsoft/terminal/issues/8687#issuecomment-934215722
@ghost commented on GitHub (Jul 6, 2022):
:tada:This issue was addressed in #13208, which has now been successfully released as
Windows Terminal Preview v1.15.186.🎉Handy links:
@al20878 commented on GitHub (Feb 19, 2023):
DECPS can only play one note at a time.
DECPS_EK-VT520-RM_VT520_VT525_Programmer_Information_Jul94.pdf
This has been verified in the real hardware (VT520). Even though a sequence with multiple notes was shown elsewhere in the manual, it seems to be in error, and the multiple notes of the same volume and duration cannot be played by the same escape sequence. Each note must be programmed individually by its own escape sequence. If more than one notes specified, only the first one is actually played, and the remaining are simply ignored (without any added delay for the would-be duration).
@j4james commented on GitHub (Feb 19, 2023):
@al20878 Thanks for pointing that out, but we were aware of that. It was discussed in the thread here: https://github.com/jerch/xterm.js/issues/1#issuecomment-966387953. But ultimately I decided it was worth keeping multiple note support as an extension. Quoting myself from that thread:
@al20878 commented on GitHub (Feb 19, 2023):
Thanks, that's good to know! And that's exactly how I noticed it, too: the sample "melodies" up from this thread won't play on VT520. BTW, the comment seems to be unsure whether the last note would be playing -- while in fact VT520 plays only the first one, skipping all the rest from the same escape sequence -- verified.
So as implemented, the feature is an extended and backward compatible version of DECPS (would play output designed for VT52x), but it's not forward compatible. Thanks for making it clear now!
@j4james commented on GitHub (Feb 19, 2023):
@al20878 Yeah, that was the plan for now. Eventually I'm hoping we'll be able to gives users the option to specify exactly which terminal type they want to emulate, and then we can be more strict in terms of what we support, and disable the proprietary extensions like this. For now, though, I'm just going for backwards compatibility.
Btw, do you actually have a VT520 of your own that you're testing with? And if so, would you be willing to help us out with some additional testing? Right now I'm looking at the horizontal margin functionality, and I've created a bunch test cases I was hoping to persuade someone to run (see https://github.com/microsoft/terminal/issues/14876#issuecomment-1435959985). A VT520 would be perfect for that, but it's not essential if you don't the time.
@al20878 commented on GitHub (Feb 19, 2023):
@j4james I do have the real VT320, 330, 420, 520 (and 525 temporarily, I think). The terminals are connected to ancient OS's (like RSX11M or RSTS/E), and unfortunately don't fare will with Linux (because of the buffer overrun issues in the USB-UART port drivers, when software flow control is used -- it's a long story worth a long discussion). Your script seems to be written in Python, which my older (and well-behaving) OS's do not know (it wasn't invented back then). I can try running it on Linux, though, but because of the above-mentioned serial port issues, there's no guarantee of the correct results, however.
@j4james commented on GitHub (Feb 19, 2023):
@al20878 Wow! That's an impressive collection. Don't stress if you can't my test running, though. If I don't get a response from anyone else I can always try rewriting it in C.
@al20878 commented on GitHub (Mar 6, 2023):
Hi @j4james !
I had some spare time this weekend and was able to make a serial cable to connect VT520 to Linux (RPi). Then I downloaded your .py script and ran it. It runs pretty long, so I had to cancel it at some point (esp. when it was filling up the screen with letters and doing some text cutting), but I did notice output in reverse meaning (according to the opening comments in the source code) that some assumptions were not met. Anyways, I'm not exactly sure how to share the results with you. I can take a video on my phone and then send you a link. Also, I can try running the same thing (now that the cable is there) on VT420...
@j4james commented on GitHub (Mar 6, 2023):
Thanks for testing @al20878. I've replied to your message in issue #14876 where this functionality is being tracked.
@christianparpart commented on GitHub (May 23, 2023):
We (Contour terminal) do also support the mutliple notes notation (played sequentially). I wonder how many other modernish terminals can actually interpret DECPS apart from Windows Terminal and Contour. 🤔
@mintty commented on GitHub (May 23, 2023):
Mintty does, and offers a choice of sounds, produced with libao.
@j4james commented on GitHub (May 23, 2023):
@christianparpart That's excellent news!
Regarding other terminals, I believe ANSICON and RLogin both had some form of
DECPSsupport long before we added it to Windows Terminal. And I think Mintty and Xterm.js added support around the same time as us. So with Contour joining the club, that's now at least 6 that I know of. That's not a bad level of support for a feature that most people probably haven't heard of.Edit: Just double checking Xterm.js, and it looks to me like they never actually shipped their sound addon (https://github.com/xtermjs/xterm.js/pull/3494). That's a bit disappointing.
Edit2: I've also now realized you actually added
DECPSsupport ages ago. I thought that was a new thing. I don't know how I missed the initial release.@al20878 commented on GitHub (May 23, 2023):
@j4james commented on GitHub (May 23, 2023):
@al20878 Unfortunately not everyone handles the buffering correctly. From my past notes, I think ANSICON and Xterm.js got it right, but Mintty and RLogin don't block, and can sometimes drop notes (as you've noticed). It's not really a problem for apps that can handle the timing themselves with a manual delay, but it means you can't create simple text file animations that synchronize with the sound. That's actually one of the test cases I was hoping to create for you at some point, but I'm still blocked on the
DECSTGLTstuff at the moment.@mintty commented on GitHub (May 23, 2023):
For mintty, please install the package
libaoin addition (mentioned in the manual). Without it, mintty falls back to a simplified beep-style playing, with artefacts as you noticed.