Terminal: Alt arrow keys print extra characters

Created on 7 Oct 2019  Â·  9Comments  Â·  Source: microsoft/terminal

Terminal Version: 0.5.2762.0
Microsoft Windows [Version 10.0.18362.356]

Steps to reproduce

Open terminal. Press alt-up, alt-down, alt-right, alt-left.

(For byobu: start byobu with 'byobu'. Press F2 to add a new tab. Press alt-right and alt-left to switch between tabs.)

Expected behavior

Observed behavior

  • c:\windows\system32\bash.exe: ABCD is printed out as expected.
  • c:\windows\system32\bash.exe in byobu: Byobu tabs are switched on alt-left and alt-right. (Only a single session is running so alt-up and alt-down just error out as expected.) No additional characters are printed out, as expected.
  • Windows Powershell terminal (run->powershell): Nothing is printed out. (Expected? I don't know.)
  • Terminal App powershell: ☻♠♦ is printed out.
  • Terminal App ubuntu: Aâ—˜B☻Câ™ D♦ is printed out.
  • Terminal App ubuntu in byobu: Byobu tabs are are switched as expected, BUT when alt is released one of ◘☻♠♦ is printed out depending on which arrow key was pressed last.
Area-Input Area-TerminalControl Issue-Bug Needs-Tag-Fix Product-Terminal Resolution-Fix-Committed

Most helpful comment

can confirm, I too face this. Within tmux, if i switch panes using Alt+direction keys, i get funny chars on the command line

All 9 comments

I'm having the same issue. Happens in both fish and bash.

I use alt-left and alt-right to navigate through words on a command.

Terminal version: 0.5.2762.0
Windows 10 version 18362.388 (1903)

Confirmed! Possible regression from #2836 (/cc @lhecker)?

@DHowett-MSFT This issue is caused by the use of ToUnicodeEx(), which has the following warning...

As ToUnicodeEx translates the virtual-key code, it also changes the state of the kernel-mode keyboard buffer. This state-change affects dead keys, ligatures, alt+numpad key entry, and so on. It might also cause undesired side-effects if used in conjunction with TranslateMessage (which also changes the state of the kernel-mode keyboard buffer).

I'll open a PR.

@paulwhiting I was not able to exactly replicate your observed behavior. Is there a way to switch between "keypad mode" on/off? I'm "Press[ing] alt-up, alt-down, alt-right, alt-left" (in that order) and I'm not really certain why I'm getting these different results:

  • C:\Windows\System32bash.exe: Alt+Up/Down causes a beep (or "bing") and Alt+Left/Right jumps between words
  • Terminal App powershell: ◘☻♠♦ is printed out.
  • Terminal App ubuntu: ♦◘☻♠ is printed out.

I believe num lock should do what you want? My keyboard doesn't have a numeric keypad, just standalone arrow keys. You're not seeing the ABCD characters because your underlying shell is handling those. It's the extra one of ♦◘☻♠ that pops up after letting go of alt that's the problem.

In my case, the extra keystroke will happens when I "release the Alt key" after pressing Alt+Left/Right/Up/Down.
If I don't release Alt key, the control key \cA \cB \cC \cD won't come out.

can confirm, I too face this. Within tmux, if i switch panes using Alt+direction keys, i get funny chars on the command line

Hi folks, sorry for stating the obvious. Please review/approve the PR so this can be addressed. Thanks!

Thanks, everyone!

:tada:This issue was addressed in #3117, which has now been successfully released as Windows Terminal Preview v0.7.3291.0.:tada:

Handy links:

Was this page helpful?
0 / 5 - 0 ratings

Related issues

DieselMeister picture DieselMeister  Â·  3Comments

ghost picture ghost  Â·  3Comments

wkbrd picture wkbrd  Â·  3Comments

dev-logan picture dev-logan  Â·  3Comments

mrmlnc picture mrmlnc  Â·  3Comments