[update] <components>:finsh/shell.c 增加新功能#10394
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 终止符 |
components/finsh/shell.c
Outdated
| { | ||
| if (curpos <= 0) return 0; | ||
|
|
||
| // Skip whitespace |
50071dc to
3f13eb4
Compare
|
@Rbb666 麻烦帮忙看一下 |
components/finsh/shell.c
Outdated
|
|
||
| continue; | ||
| } | ||
| #if defined(FINSH_USING_WORD_OPERATION) |
📌 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 <1486344514@qq.com>
There was a problem hiding this comment.
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.
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--; |
There was a problem hiding this comment.
如果当前curpos 为空格 跳过就跳过了
如果不是空格 预减也不影响
| /* Add Ctrl+Backspace handling */ | ||
| else if (ch == 0x17) /* Ctrl+Backspace (typically ^W) */ |
There was a problem hiding this comment.
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) */ |
| /* 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.
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); |

添加以下功能 (需要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