mirror of
https://github.com/microsoft/terminal.git
synced 2026-02-04 05:35:20 +00:00
Bash command line editing gets wrong cursor position #19523
Closed
opened 2026-01-31 06:46:00 +00:00 by claunia
·
36 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#19523
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 @dwmuller on GitHub (Mar 12, 2023).
Windows Terminal version
1.16.10262.0
Windows build number
10.0.22621.1265
Other Software
GNU bash, version 5.2.12(1)-release (x86_64-pc-msys)
Oh My Posh version 14.12.0 via winget pkg JanDeDobbeleer.OhMyPosh (only indirectly relevant)
Steps to reproduce
I am using Oh My Posh to generate complex command line prompts in bash. When browsing command line history, the text input cursor often gets stuck two characters to the right of where it should go, leaving two characters stuck at the start of the command line. These characters are not in the edit buffer, but command line editing is messed up because the position on the screen and in the edit buffer apparently no longer match.
I experimented a bit and the effect seems to be triggered by recalling command lines of a certain length in the history list. I think Oh My Posh is actually irrelevant to the problem, although the prompt it generates probably is. I got a repeatable state using this PS1 prompt:
I checked the prompt carefully, and all non-printing sequences seem to be properly wrapped with matching [..]. I was suspicious of the OSC 9;9 sequence at the end, but removing it does not fix the problem.
Enter this command:
echo 67890123678901
Now recall the command with up-arrow, then go back to an empty line with down-arrow. The characters "ec" will appear on the command line, with the text cursor after them, but if you enter a new command you'll find that the "ec" text is not part of the edit buffer. Repeating this with an echo command one character shorter does not produce this effect.
Other possibly relevant environment variables:
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:.tar=01;31:.tgz=01;31:.arc=01;31:.arj=01;31:.taz=01;31:.lha=01;31:.lz4=01;31:.lzh=01;31:.lzma=01;31:.tlz=01;31:.txz=01;31:.tzo=01;31:.t7z=01;31:.zip=01;31:.z=01;31:.dz=01;31:.gz=01;31:.lrz=01;31:.lz=01;31:.lzo=01;31:.xz=01;31:.zst=01;31:.tzst=01;31:.bz2=01;31:.bz=01;31:.tbz=01;31:.tbz2=01;31:.tz=01;31:.deb=01;31:.rpm=01;31:.jar=01;31:.war=01;31:.ear=01;31:.sar=01;31:.rar=01;31:.alz=01;31:.ace=01;31:.zoo=01;31:.cpio=01;31:.7z=01;31:.rz=01;31:.cab=01;31:.wim=01;31:.swm=01;31:.dwm=01;31:.esd=01;31:.jpg=01;35:.jpeg=01;35:.mjpg=01;35:.mjpeg=01;35:.gif=01;35:.bmp=01;35:.pbm=01;35:.pgm=01;35:.ppm=01;35:.tga=01;35:.xbm=01;35:.xpm=01;35:.tif=01;35:.tiff=01;35:.png=01;35:.svg=01;35:.svgz=01;35:.mng=01;35:.pcx=01;35:.mov=01;35:.mpg=01;35:.mpeg=01;35:.m2v=01;35:.mkv=01;35:.webm=01;35:.webp=01;35:.ogm=01;35:.mp4=01;35:.m4v=01;35:.mp4v=01;35:.vob=01;35:.qt=01;35:.nuv=01;35:.wmv=01;35:.asf=01;35:.rm=01;35:.rmvb=01;35:.flc=01;35:.avi=01;35:.fli=01;35:.flv=01;35:.gl=01;35:.dl=01;35:.xcf=01;35:.xwd=01;35:.yuv=01;35:.cgm=01;35:.emf=01;35:.ogv=01;35:.ogx=01;35:.aac=00;36:.au=00;36:.flac=00;36:.m4a=00;36:.mid=00;36:.midi=00;36:.mka=00;36:.mp3=00;36:.mpc=00;36:.ogg=00;36:.ra=00;36:.wav=00;36:.oga=00;36:.opus=00;36:.spx=00;36:.xspf=00;36:
TERM=xterm-256color
Expected Behavior
When recalling bash history, simply recalling the last command and then dismissing it should always leave the input line clear after the prompt, and the text cursor immediately after the prompt text.
Actual Behavior
Under some conditions, recalling history text and then dismissing it leaves extraneous characters on the current command line after the prompt, and the text cursor is positioned after them.
@zadjii-msft commented on GitHub (Mar 13, 2023):
I bet it's the unicode characters - I'd reckon one is one of those "renders two wide but is technically one wide", or something like that.
\uE0B6\uE62A\uE0B0\uE0B4Oh they're all powerline characters aren't they...
@carlos-zamora commented on GitHub (Mar 16, 2023):
Hi @dwmuller. We're having trouble visualizing this. Would you mind capturing a screen recording of the issue to help us out?
@zadjii-msft commented on GitHub (Mar 16, 2023):
Also, what's the literal text of your bashrc? that might help debug
@dwmuller commented on GitHub (Mar 20, 2023):
Oh, you didn't really want to see my literal .bashrc:
The only sourced file likely to have an effect on history scrolling is settings.bash, which contains this:
I tried to get a video of it using Win11's built-in snipping tool, but kept ending up with a file that was way too large to attach here. Open to suggestions on how to do that.
Here are some static pix with explanations. First, context, showing the last four lines of history. The history command entered here was prefixed by a space to keep it from being added to the tail of the history list:
Then, I pressed pressed ^L to clear the terminal, and pressed the up arrow once:
Then I press up-arrow again:

And up-arrow a third time, now you can see the problem:

The spurious "ec" prefix is now sticky. Down-arrow twice, and hit enter to prove that what's actually in the edit buffer is "ls", not "ecls":

Hopefully that clarifies. Any command that's long enough triggers the problem.
@DHowett commented on GitHub (Mar 22, 2023):
Okay, so, there's one weird thing I couldn't account for...
Your
PS1has a newline in it that seems like it is guarded by\[and\]. If I do that, I get an unprintable character right after the newline (bash 5.0.3). I wonder if that's related...Reconstructing your actual
PS1from the version you shared was definitely challenging. 😄@dwmuller commented on GitHub (Mar 23, 2023):
I promise you, there is no way in hell that I could have created that PS1 value by hand. That's all courtesy of Oh My Posh. (Which, BTW, I made sure to update before I began documenting this problem.)
@dwmuller commented on GitHub (Mar 23, 2023):
BTW, although I won't bore you with the whole of my ~/.bash/prompt.bash, because it has some conditional logic for different environments, in a Bash for Windows shell the key command in that file which sets up the prompt is this:
If you actually start mucking around with oh-my-posh, I can share the config file with you as well.
@DHowett commented on GitHub (Mar 29, 2023):
Before I get into your OMP config (I'm glad you didn't write that yourself, it's a monster!), mind if I ask a couple followups?
TERMset toxterm?cygwin?@dwmuller commented on GitHub (Mar 30, 2023):
Excellent questions.
After
export TERM=xterm: The problem still occurs.After
export TERM=cygwin: The problem still occurs.Using mintty aka "Git Bash": The problem does not occur.
Tried the default Windows terminal, running bash under CMD. The problem does not occur.
Tried a very similar environment in WSL Ubuntu through Windows Terminal. The problem does not occur.
Note that the exact length of command needed to trigger the problem seems to vary a bit. The
echo 6789012345678901was not quite long enough sometimes. I don't know what causes the variation. But there's usually something long enough in my history buffer to trigger it.@dwmuller commented on GitHub (Mar 30, 2023):
I thought it was interesting that the problem didn't appear in a Terminal window running bash on WSL Ubuntu. There may be some differences in the PS1 generated for the two environments by Oh My Posh and my configuration. It's hard to compare them directly because graphic characters are displayed differently in the two environments. So I tried URL encoding them (I have a urlencode utility handy) using
urlencode "$PS1". Here is the result, first from the Windows environment, then from the WSL environment:TERM is set to xterm-256color in both of these environments.
Some differences are expected, because the prompts are visually different to signify the different environments:
versus:

And I just noticed that the greater-than sign isn't displaying in the WSL environment. Odd.
@DHowett commented on GitHub (Apr 27, 2023):
I just cannot come up with a rational reason that this would be happening! Ugh!
Time to pull out all the stops, I guess. Would you mind capturing a trace with the debug tap enabled? It shows off the communication between the console API translator and the Terminal. It's not conclusive, but it sure is enlightening.
@dwmuller commented on GitHub (Apr 27, 2023):
In the history list, I happened to have "exit", and then a long command line starting with "winget". After opening the new tab, I pressed the up arrow twice, then the down arrow.
Hope that helps!
@zadjii-msft commented on GitHub (Apr 27, 2023):
Uh, what
It's literally saying "go back to column 16, print
winget upgrade....", THEN "go back to column 18 and printexit, then erase the rest of the line"like, what
@j4james commented on GitHub (Apr 27, 2023):
I'm not overly familiar with the way these prompts work, so I may have this wrong, but my understanding was that you used those
\[ \]controls to indicate the portions of the prompt that are "non-printing" (e.g. things like the color escape sequences). That way the shell knows it can ignore those bits when calculating how much space the prompt will occupy.Looking at PS1 prompt that was provided in initial comment of this issue, once you strip out all the "non-printing" sections, what you're left with is something like this (I'm just approximating the powerline characters here):
But that's nothing like the real layout of the prompt. So if that's what the shell thinks it looks like, it's going to miscalculate how much space is remaining on the rest of the line, and it's going to assume the first line of input is wrapping sooner that it should.
If that's the case, it's not surprising that this ends up placing the cursor in the wrong position under certain circumstances (particularly when displaying input over a certain length).
@dwmuller commented on GitHub (Apr 30, 2023):
I wonder if this is related to #3546
@dwmuller commented on GitHub (Apr 30, 2023):
Oh good lord. I started digging deeper into what Oh My Posh sets up using the --init option, and there's way more going on here than is apparent from the PS1 value. It defines PS0, PS2, a shell function, and sets PROMPT_COMMAND to execute the shell function. The function sets up some context, puts the cursor at a calculated position, and defines PS1.
So there's more going on here than is apparent from my PS1. I won't bore you with the details just yet, but I'm analyzing it. Sorry about missing all this relevant information.
@dwmuller commented on GitHub (Apr 30, 2023):
So here's what I found.
The PS0 value is irrelevant, it gets set to an empty string, but via side effects it records a start time for a command so that the elapsed time can be calculated later.
The PS2 value is irrelevant for the purposes of this bug.
The function executed by PROMPT_COMMAND has the following relevant effects:
The method of calculating the row and column values:
Clever.
This makes me wonder if the problem arises in the terminal's response to the
\E[6nsequence. But I don't think that's the problem. OMP seems to be working OK, it's really readline that's manipulating the text after the prompt when you navigate history. It seems more likely that readline is interrogating the terminal for cursor position, and is getting an incorrect response.BTW, I also removed the option in my OMP config that was sending the PWD to the terminal. This removed some cruft from the end of the PS1 value, but had no effect on the bug.
@zadjii-msft commented on GitHub (May 3, 2023):
Alright, yea we're basically at a loss. We don't think it should be a bad response to
6n, that wouldn't have to traverse ConPTY. Maybe someone has messed up the cursor position off the>, but even then, that would only be a single cell, not two.I honestly don't know what else for us to do here except get this under a local repro and a live debugger.
Wait as a quick sanity check - if you set the default terminal emulator to Windows console host:

Does that repro this issue? That might be able to narrow it down to conpty or not.
@dwmuller commented on GitHub (May 7, 2023):
Tried it, it has no effect on the bug.
@rioka commented on GitHub (Jun 1, 2023):
I'm facing pretty much the same issue (using OMP, too): depending on the lenght of the prompt, the length of the command, and the width of the windows, the cursor get stuck
Moreover, the cursor ends up in different positions depending on the key you enter
Home, the final position (column) is correct (but it may be on the current line, or in the previous one)End, the final position is somewhere in the next line (which is empty of course)As a side note, when used in Conemu or mintty , it works as expected (or at least I did not notice this behavior so far).
@DavideCanton commented on GitHub (Jun 15, 2023):
Don't know if it is really related, but I have the same problem without using OMP.
Basically I have a
PS1="λ ", and it is enough to reproduce the issue:I believe @zadjii-msft's guess of unicode characters being not handled correctly is correct.
Reproduced with version 1.17.230526001, win 10, git bash, apparently it doesn't reproduce with powershell or cmd (but I don't use them too often, maybe I simply did not try enough).
@j4james commented on GitHub (Jun 15, 2023):
@DavideCanton In your case it looks like git bash is miscalculating the length of the prompt. I added some logging to OpenConsole to see exactly what it is sending us, and when you press up arrow the second time we get this:
CR(moves the cursor to the start of the line)CUFCUFCUF(moves the cursor forward 3 columns, up to thedincd foo)ICH 3(inserts 3 spaces at that point, giving youc d foomkdir(overwrites the spaces andd, giving youcmkdirfooCUFCUFCUFCUF(moves the cursor forward 4 columns, one past the end of the line)Those three
CUFsequences at the start are the problem. It looks like it thought the lambda was two columns wide, making the prompt three columns wide (when it should have been two).After some experimentation with other characters, I think it might be determining the width based on the UTF-8 byte count. For example, if you set the prompt to
PS1="ᴀ ", it thinks it's four columns wide, because theᴀ(U+1D00) is a three byte UTF-8 sequence.It's possible this is a misconfiguration of the locale, and it thinks its using an 8-bit code page. I don't know enough about git bash to know how you might fix that.
@DavideCanton commented on GitHub (Jun 15, 2023):
Hi, thanks for your response.
I suspected the problem was related to a wrong character length calculation, since adding many lambdas increases the count of wrong characters displayed when navigating through the history.
The strange thing is that opening the git bash standalone does not reproduce the issue, it happens only inside the windows terminal.
I fixed it by using
tput scandtput rc.@j4james commented on GitHub (Jun 15, 2023):
I reproduced it in a recent build of OpenConsole, so it's definitely not limited to Windows Terminal. But it's possible git bash is using the legacy console APIs rather than VT sequences when it detects an older versions of Windows.
This didn't help on my system. I can still reproduce the issue after executing those commands.
@DHowett commented on GitHub (Jun 15, 2023):
It may also be using mintty in its default configuration, which could have a different (and less correct) understanding of the width of that character!
@DavideCanton commented on GitHub (Jun 15, 2023):
Probably.
My bad, they are part of the fix but executing them is not enough.
I would link the stackoverflow response where I read it, but it seems SO is down :/This is the link of the SO response.
I fixed by setting
PS1='\n\['"`tput sc`"'\] \['"`tput rc`"'λ \]'@j4james commented on GitHub (Jun 15, 2023):
OK, that makes more sense. That works for me too. Interestingly they're not actually implementing the
scandrcoperations with escape sequences, but with direct calls to the consoleSetConsoleCursorPositionAPI. I'm assuming this is all just legacy code that's evolved over time and only partially transitioned from the old console APIs to VT sequences.@DHowett I initially thought that too, but that's not the case. If I request a DA report I get back
\x1b[?1;0c, which is what I would expect from old versions of conhost. Mintty would report something like\x1b[?64;...c.@j4james commented on GitHub (Jun 15, 2023):
I just realised there are actually two versions of git bash. The one that shows up in the start menu is
C:\Program Files\Git\git-bash.exe, and the one in Windows Terminal isC:\Program Files\Git\bin\bash.exe(this is also what I was testing in OpenConsole, which explains why it had the same issue as Windows Terminal). The former version appears to use console APIs, while the latter version is mostly VT sequences.@DavideCanton commented on GitHub (Jun 15, 2023):
I can confirm the problem arises with the
bash.exeinsidebin/.@dwmuller commented on GitHub (Jun 30, 2023):
I realized that Oh My Posh configuration files can be in YAML, which makes it a lot easier to comment out parts for experimenting. I subsequently stripped my config down to almost nothing, and am still seeing the problem.
I also noticed this FAQ entry for Oh My Posh: https://ohmyposh.dev/docs/faq#windows-terminal-unexpected-space-between-segmentstext
I figured that might be related, so I preceded each special Unicode character in the remaining configuration with \u200a. That didn't help either.
My prompt is down to this, piped through od so you can be sure you're seeing a representation of every character:
@dwmuller commented on GitHub (Jun 30, 2023):
I tried one more thing. The remaining visible character in my prompt was a Unicode character, which I didn't realize at first because it looks a lot like a greater-than sign. It shows up in the octal dump above as the sequence of bytes 342 235 257. Replacing that with an ASCII character makes the problem go away. Preceding the Unicode character with \u200a does not.
Further experimentation showed that putting any Unicode character in PS1 causes the problem. Try this:
@j4james commented on GitHub (Jul 1, 2023):
Yeah. This is what I was saying in https://github.com/microsoft/terminal/issues/14982#issuecomment-1592842298. My guess is that it's calculating the prompt length based on the number of bytes in the UTF-8 representation, rather than the actual glyph count.
@dwmuller commented on GitHub (Jul 1, 2023):
Holy frijole, I finally found a simple fix for this.
I was experimenting some more and was befuddled as to why this was happening:

\u2764 should be equivalent to \342\235\244, so bash clearly wasn't interpreting the \u prefix correctly. A search for answers turned up a Stackoverflow article with an interesting top answer that pointed to locale settings.
I checked the output of
localeand saw that LANG wasn't set:This appears to be the default state in Git Bash on Windows - my dotfiles don't change anything related to locale, and I've seen this problem on a variety of systems, including a new laptop that I freshly set up just a few weeks ago.
Executing
set LANG='C.UTF-8'fixed the \u problem and the positioning problem! So as @j4james guessed, this does seem to be a bash issue. Exporting LANG to the environment also seems to work and is visible to subordinate bash shells.In a bash shell on WSL2, where I wasn't seeing the problem, LANG is set to C.UTF-8 already.
Also, I'll mention another Stackoverflow article that I ran into along the way, because it had a very clever workaround for a similar problem, using the sc and rc escape sequences. See the first answer here.
I could close this, but I'll let the devs do that after verifying my assumption that it's purely a bash problem. Maybe you can think of some way to defend users against this .
@DHowett commented on GitHub (Jul 1, 2023):
AGH! Just today, I was going to ask you what
LANGwas set to. I decided that I must have already asked, and didn't choose to.So instead... can you share the commandline for your Git Bash profile?
If it doesn't contain
-l -i, it isn't starting with the correct environment. 😄@dwmuller commented on GitHub (Jul 1, 2023):
Ugh. The -l option causes LANG to be set, -i does not. The shortcut installed by (the choco version of) Git for Windows looks like this:

git-bash.exe seems to be a wrapper around bash.exe, which does set up the locale correctly.
I actually usually start it from Microsoft Terminal, where I set it up to run bash.exe directly without any options at all. Doh.
@zadjii-msft commented on GitHub (Jul 5, 2023):
holy butts. Well. I'm glad you figured it out!
LANGandLC_*have given us (and seemingly everyone) plenty of troubles in the past. I'm not sure there's any good way to immediately mitigate that. Hopefully though, this thread should have plenty of keywords in it to help some future folks hitting this find the right fix ☺️Thanks for following up!