xiaoxx970 / chatgpt-in-terminal

Use ChatGPT in terminal
MIT License
201 stars 27 forks source link

单行模式下实现用esc+Enter换行 #20

Closed xiaoxx970 closed 1 year ago

xiaoxx970 commented 1 year ago

https://github.com/xiaoxx970/chatgpt-in-terminal/blob/e3086e0091dbf2418fff2eef45c2912d6a957ac7/chat.py#L616

如题,这是一个之前我不认为能实现的功能,但是如果这个key binding支持绑定ecs+Enter那就好办了

MichaelC001 commented 1 year ago

请问现在这版里面怎么改快捷键?想把esc+Enter改成Ctrl+Enter?或者说自定义快捷键?代码里面能直接改吗? 如果能把Enter改为发送,ctrl+enter改为换行,有一个很好的用法:可以用repl的功能。比如之前我用tmux分屏,左边python代码,右边终端,快捷键发送左边的一行代码,右边运行。现在左边是英文文章,右边是ai,提前定义好翻译功能,在左边看到不懂的一行文字,直接快捷键发送到右边(自动带一个回车),就能直接运行给出翻译,光标保持在左边,完全不影响写或者改文章。

xiaoxx970 commented 1 year ago

请问现在这版里面怎么改快捷键?想把esc+Enter改成Ctrl+Enter

这个如果是windows的话我不太了解,但是mac下,不论Ctrl+Enter或者Shift+Enter,它都是传不到终端里的,对于终端来说,都只是按了Enter,所以这是一个不太好解决的问题,唯一确定的就是Esc+Enter能被格平台的终端识别

Ace-Radom commented 1 year ago

理论上win的终端是可以传入ctrl enter的 并且win terminal也没有占用这个快捷键 所以理论上确实可以实现 这个我晚点去做一些测试 在你做好全平台适配的版本后我再研究研究有什么比较好的方法解决这个问题吧

Ace-Radom commented 1 year ago

经过测试windows终端可以接收Ctrl+Enter 但问题出在prompt_toolkit上 我在他的Keys绑定定义里没有找到Ctrl+Enter的定义 估计是因为多平台问题所以没有支持 另外一个键盘事件库Keyboard倒是可以传入Ctrl+Enter 但那又是一个新的库 prompt_toolkit支持绑定的有Shift+Escape Escape+Enter一样没有找到直接支持 也不知道有没有别的方法去识别出来

MichaelC001 commented 1 year ago

请问现在这版里面怎么改快捷键?想把esc+Enter改成Ctrl+Enter

这个如果是windows的话我不太了解,但是mac下,不论Ctrl+Enter或者Shift+Enter,它都是传不到终端里的,对于终端来说,都只是按了Enter,所以这是一个不太好解决的问题,唯一确定的就是Esc+Enter能被格平台的终端识别

我只是举个例子,我是mac,只是想了解怎么能改快捷键。终端下不能绑定的键例如“ctrl+;”我一般是在终端app里面设置需要的功能到其他键,例如“shift+ctrl+u“ 再用karabiner 把ctrl+;映射到shift ctrl u

MichaelC001 commented 1 year ago

请问现在这版里面怎么改快捷键?想把esc+Enter改成Ctrl+Enter?或者说自定义快捷键?代码里面能直接改吗? 如果能把Enter改为发送,ctrl+enter改为换行,有一个很好的用法:可以用repl的功能。比如之前我用tmux分屏,左边python代码,右边终端,快捷键发送左边的一行代码,右边运行。现在左边是英文文章,右边是ai,提前定义好翻译功能,在左边看到不懂的一行文字,直接快捷键发送到右边(自动带一个回车),就能直接运行给出翻译,光标保持在左边,完全不影响写或者改文章。

自己回答:关闭multi line mode,可以实现我上面说的repl功能。

xiaoxx970 commented 1 year ago

@MichaelC001 根据文档,在mac下按 option+Enter 和按 esc+Enter 是等效的,再加上我现在实现了单行模式下用esc+Enter换行,也就是实现了 option+Enter 换行,而 Enter 则是提交,应该能更好的解决你的问题了。如果你要改其他快捷键换行,修改这行就可以: https://github.com/xiaoxx970/chatgpt-in-terminal/blob/a0a619218d6ce3ba2d431a4089e0fcd0ee6a3c74/chat.py#L739