Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

xmake f --menu not responding in vscode terminal on windows #1610

Closed
xq114 opened this issue Aug 27, 2021 · 20 comments
Closed

xmake f --menu not responding in vscode terminal on windows #1610

xq114 opened this issue Aug 27, 2021 · 20 comments
Milestone

Comments

@xq114
Copy link
Contributor

xq114 commented Aug 27, 2021

描述问题

Windows上使用VSCode的terminal时,运行xmake f --menu,则上下左右方向键均无响应,只有Enter和Backspace有响应。在其他terminal都正常。

期待的结果

在vscode terminal中也能使用xmake f --menu功能

错误信息

相关环境

请提供编译和运行环境信息,下面是一些必须填写的基础信息,便于我们针对性排查问题:

  • xmake版本:2.5.6 dev
  • xmake运行平台:windows
  • xmake目标平台:windows

其他信息

image

@xq114
Copy link
Contributor Author

xq114 commented Aug 27, 2021

linux下vscode terminal也正常,windows上vscode remote连接linux使用也正常,只有原生windows环境vscode terminal有问题

@waruqi
Copy link
Member

waruqi commented Aug 27, 2021

这。。还真有在vscode terminal 下用这玩意的哈,等回头有时间看看 = =

@waruqi
Copy link
Member

waruqi commented Sep 9, 2021

我试了下,可以的么 这边没法复现,不过我这里是 powershell 不是 pwsh

@xq114
Copy link
Contributor Author

xq114 commented Sep 9, 2021

我试了下,可以的么 这边没法复现,不过我这里是 powershell 不是 pwsh

cmd里也有此问题

@waruqi
Copy link
Member

waruqi commented Sep 9, 2021

我这里都可以。

@xq114
Copy link
Contributor Author

xq114 commented Sep 9, 2021

Version: 1.60.0 (user setup)
Commit: e7d7e9a9348e6a8cc8c03f877d39cb72e5dfb1ff
Date: 2021-09-01T10:41:52.311Z
Electron: 13.1.8
Chrome: 91.0.4472.164
Node.js: 14.16.0
V8: 9.1.269.39-electron.0
OS: Windows_NT x64 10.0.19043

@waruqi
Copy link
Member

waruqi commented Sep 9, 2021

可以直接调下这里

function program:_input_key()

用 log:print()

日志文件在 project/.xmake/ui.log

@xq114
Copy link
Contributor Author

xq114 commented Sep 9, 2021

image

ui.log里面我按的上(450),下(456),左(452),右(454)都没识别

@xq114
Copy link
Contributor Author

xq114 commented Sep 9, 2021

在其他terminal里面这些是259、258、260、261

@waruqi
Copy link
Member

waruqi commented Sep 9, 2021

那这个要调下 pdcurse 里面 getch 为啥不识别了

case ALT_UP: temp_key = KEY_UP; break;

https://github.com/xmake-io/xmake-core-pdcurses/blob/5a522dc7ac23b8571f68851b844d3dd4dc6a67a5/pdcurses/getch.c#L160

@waruqi
Copy link
Member

waruqi commented Nov 16, 2021

在其他terminal里面这些是259、258、260、261

这些终端才是正常行为,pdcures 里面定义的也是这些。。

#define KEY_DOWN      0x102  /* Down arrow key */
#define KEY_UP        0x103  /* Up arrow key */
#define KEY_LEFT      0x104  /* Left arrow key */
#define KEY_RIGHT     0x105  /* Right arrow key */

https://github.com/wmcbrine/PDCurses/blob/ffb83fab0f7dcabdc40176e2e87fbff46e983d01/curses.h#L632-L635

ui.log里面我按的上(450),下(456),左(452),右(454)都没识别

这个是不正常的,我不知道你这 vscode 下为啥为收到这些,我这都是 259 等正常值。。感觉像是 vscode 的问题,跟 xmake 没啥太大关系

@waruqi
Copy link
Member

waruqi commented Nov 16, 2021

反正目前这边只能处理收到正常 key code 值,其他未知的 key 也没法额外做特殊 map,所以暂时无解,先 close 了

@xq114
Copy link
Contributor Author

xq114 commented Nov 16, 2021

我debug了一下,原因是VSCode基于ConPTY,而ConPTY(Pseudo Terminal)相当于加了一层虚拟键盘,所以和普通terminal输出不同。在其他使用ConPTY API的terminal(extraterm,etc)里面都能复现这个问题。ConPTY API不会设置extended,因此具有和Console API不同的行为,而pdcurses没有对ConPTY API的这种行为进行支持。

https://github.com/wmcbrine/PDCurses/blob/HEAD/wincon/pdckbd.c#L444-L453

这里state&extended结果在传统console上是0x100,在ConPTY里面是0,所以原来map到KEY_UP的键会map到KEY_A2,KEY_DOWN map到KEY_C2,以此类推。所以会出不同结果。

https://github.com/wmcbrine/PDCurses/blob/HEAD/wincon/pdckbd.c#L236-L239

https://github.com/wmcbrine/PDCurses/blob/HEAD/wincon/pdckbd.c#L72-L75

关于这些键位,pdcurses的解释是Virtual keyboard上的键,见

https://github.com/wmcbrine/PDCurses/blob/HEAD/curses.h#L766-L774

MS现在在推新的ConPTY,未来基于ConPTY的terminal可能会越来越多,不支持ConPTY还是有影响的。这里还是改下好。

@waruqi
Copy link
Member

waruqi commented Nov 16, 2021

,而pdcurses没有对ConPTY API的这种行为进行支持。

它没支持,那这是需要 pdcurses 改什么么?我看它不是已经识别标示为 virtual key 了么

如果这些虚拟键位的值在所有 ConPTY 终端上 map 关系一致,key up对应的值固定,我可以外面兼容处理下 map

@xq114
Copy link
Contributor Author

xq114 commented Nov 17, 2021

,而pdcurses没有对ConPTY API的这种行为进行支持。

它没支持,那这是需要 pdcurses 改什么么?我看它不是已经识别标示为 virtual key 了么

如果这些虚拟键位的值在所有 ConPTY 终端上 map 关系一致,key up对应的值固定,我可以外面兼容处理下 map

是固定的

@waruqi
Copy link
Member

waruqi commented Nov 17, 2021

7f3706c 我加上了,再试试

@waruqi waruqi added this to the v2.6.1 milestone Nov 17, 2021
@xq114
Copy link
Contributor Author

xq114 commented Nov 17, 2021

error: @programdir\core\ui\program.lua:353: table index is nil
stack traceback:
        @programdir\core\base\utils.lua:290: in metamethod 'newindex'
        @programdir\core\ui\program.lua:353: in function 'ui/application._key_map'
        @programdir\core\ui\program.lua:396: in function 'ui/application._input_key'
        @programdir\core\ui\program.lua:143: in function 'ui/application.event' 
        @programdir\core\ui\program.lua:228: in function 'ui/application.loop'  
        @programdir\core\ui\application.lua:110: in function <@programdir\core\ui\application.lua:105>
        [C]: in function 'xpcall'
        @programdir\core\base\utils.lua:280: in function 'sandbox/modules/utils.trycall'
        @programdir\core\ui\application.lua:116: in function 'ui/application.run'
        @programdir\actions\config\menuconf.lua:404: in function <@programdir\actions\config\menuconf.lua:403>
        (...tail calls...)
        @programdir\actions\config\main.lua:282: in function <@programdir\actions\config\main.lua:249>
        (...tail calls...)
        [C]: in function 'xpcall'
        @programdir\core\base\utils.lua:280: in function 'sandbox/modules/utils.trycall'
        (...tail calls...)
        @programdir\core\base\task.lua:519: in function 'base/task.run'
        @programdir\core\main.lua:278: in upvalue 'cotask'
        @programdir\core\base\scheduler.lua:371: in function <@programdir\core\base\scheduler.lua:368>

@waruqi
Copy link
Member

waruqi commented Nov 17, 2021

改进过了,不过需要等 https://github.com/xmake-io/xmake/actions/runs/1470072651 上跑完,才能全量更新,因为改了 core

xmake update master

@waruqi
Copy link
Member

waruqi commented Nov 17, 2021

@xq114
Copy link
Contributor Author

xq114 commented Nov 17, 2021

现在可以了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants