-
Notifications
You must be signed in to change notification settings - Fork 5.2k
[update] <components>:finsh/shell.c 增加新功能 #10394
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
Conversation
20caba4
to
d7feea8
Compare
感觉这样做了以后,是否会变得复杂化?对于shell来说,反而希望增加"一些类脚本的简单功能,例如可以定义变量,一些变量甚至可以存储下来,以及包含简单的条件处理。" 当然,这些高级功能应该是可配置,可裁剪的。 |
“在调试长命令时,单词级操作可提升效率。此功能在主流 Shell(如 bash/zsh)中为标准支持” |
components/finsh/shell.c
Outdated
/* Delete characters with proper RT_null termination */ | ||
rt_memmove(&shell->line[start], | ||
&shell->line[start + del_count], | ||
new_len - start + 1); // +1 包含 RT_null 终止符 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
请使用英文的注释。下同
components/finsh/shell.c
Outdated
{ | ||
if (curpos <= 0) return 0; | ||
|
||
// Skip whitespace |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
请尽可能使用 /* */
C语言风格的注释,下同。
50071dc
to
3f13eb4
Compare
@Rbb666 麻烦帮忙看一下 |
components/finsh/shell.c
Outdated
@@ -661,7 +728,43 @@ static void finsh_thread_entry(void *parameter) | |||
|
|||
continue; | |||
} | |||
#if defined(FINSH_USING_WORD_OPERATION) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这块不要有缩进
📌 Code Review Assignment🏷️ Tag: componentsReviewers: Maihuanyi Changed Files (Click to expand)
📊 Current Review Status (Last Updated: 2025-08-05 17:45 CST)
📝 Review Instructions
|
添加以下功能(需要kconfig使能FINSH_USING_WORD_OPERATION) 1 ctrl+back 按单词删除 2 ctrl+左右箭头 按单词切换光标 Signed-off-by: Yucai Liu <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR adds word-based navigation and editing functionality to the RT-Thread finsh shell component. The changes enable users to navigate by words using Ctrl+Arrow keys and delete words using Ctrl+Backspace when the new FINSH_USING_WORD_OPERATION configuration option is enabled.
- Adds two utility functions for finding word boundaries in command line text
- Implements Ctrl+Left/Right arrow key handling for word-based cursor movement
- Implements Ctrl+Backspace for word-based deletion
- Adds Kconfig option to enable/disable the new functionality
Reviewed Changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.
File | Description |
---|---|
components/finsh/shell.c | Implements word navigation functions and keyboard shortcut handlers |
components/finsh/Kconfig | Adds configuration option to enable word operation features |
Comments suppressed due to low confidence (1)
components/finsh/shell.c:2
- The copyright year 2025 appears to be in the future. Based on my knowledge cutoff in January 2025, this year may not be accurate for the current date.
* Copyright (c) 2006-2025, RT-Thread Development Team
if (curpos <= 0) return 0; | ||
|
||
/* Skip whitespace */ | ||
while (--curpos > 0 && (line[curpos] == ' ' || line[curpos] == '\t')); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The loop uses pre-decrement --curpos
in the condition, which could cause the function to skip checking the character at the initial position. This may lead to incorrect word boundary detection.
while (--curpos > 0 && (line[curpos] == ' ' || line[curpos] == '\t')); | |
while (curpos > 0 && (line[curpos] == ' ' || line[curpos] == '\t')) | |
curpos--; |
Copilot uses AI. Check for mistakes.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
如果当前curpos 为空格 跳过就跳过了
如果不是空格 预减也不影响
/* Add Ctrl+Backspace handling */ | ||
else if (ch == 0x17) /* Ctrl+Backspace (typically ^W) */ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The comment suggests this is typically Ctrl+Backspace, but 0x17 is actually Ctrl+W. Ctrl+Backspace typically sends different escape sequences depending on the terminal. This could confuse users about which key combination actually triggers this functionality.
/* Add Ctrl+Backspace handling */ | |
else if (ch == 0x17) /* Ctrl+Backspace (typically ^W) */ | |
/* Add Ctrl+W (delete previous word) handling */ | |
else if (ch == 0x17) /* Ctrl+W (delete previous word) */ |
Copilot uses AI. Check for mistakes.
/* Delete characters and properly add RT_NULL termination */ | ||
rt_memmove(&shell->line[start], | ||
&shell->line[start + del_count], | ||
new_len - start + 1); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The calculation new_len - start + 1
for the memmove length appears incorrect. It should be shell->line_position - start - del_count
to move the remaining characters after the deleted word.
new_len - start + 1); | |
shell->line_position - start - del_count); |
Copilot uses AI. Check for mistakes.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
添加以下功能 (需要kconfig使能FINSH_USING_WORD_OPERATION)
1 ctrl+back 按单词删除
2 ctrl+左右箭头 按单词切换光标
拉取/合并请求描述:(PR description)
[
为什么提交这份PR (why to submit this PR)
你的解决方案是什么 (what is your solution)
请提供验证的bsp和config (provide the config and bsp)
]
当前拉取/合并请求的状态 Intent for your PR
必须选择一项 Choose one (Mandatory):
代码质量 Code Quality:
我在这个拉取/合并请求中已经考虑了 As part of this pull request, I've considered the following:
#if 0
代码,不包含已经被注释了的代码 All redundant code is removed and cleaned up