Skip to content

Commit 7ba487a

Browse files
committed
优化交互打印
1 parent d4276fa commit 7ba487a

File tree

3 files changed

+53
-55
lines changed

3 files changed

+53
-55
lines changed

ChangeMirrors.sh

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2636,22 +2636,26 @@ function interactive_select_boolean() {
26362636
_SELECT_RESULT=""
26372637
local selected=0
26382638
local message="$1"
2639+
local menu_height=3 # 菜单总高度(标题行+空行+选项行)
2640+
local original_line
2641+
function store_position() {
2642+
# 保存菜单开始前的行位置
2643+
original_line=$(tput lines)
2644+
}
26392645
function clear_menu() {
2640-
tput rc
2641-
for ((i = 0; i < 2 + 2; i++)); do
2642-
echo -e "\r\033[K"
2646+
# 向上移动到菜单开始位置并清除菜单
2647+
for ((i = 0; i < ${menu_height}; i++)); do
2648+
tput cuu1 # 光标上移一行
2649+
tput el # 清除当前行
26432650
done
2644-
tput rc
26452651
}
26462652
function cleanup() {
26472653
clear_menu
2648-
tput rc
26492654
tput cnorm
2650-
tput rmcup
26512655
exit
26522656
}
26532657
function draw_menu() {
2654-
tput rc
2658+
# 绘制菜单不改变光标位置
26552659
echo -e "╭─ ${message}"
26562660
echo -e ""
26572661
if [ "$selected" -eq 0 ]; then
@@ -2660,16 +2664,7 @@ function interactive_select_boolean() {
26602664
echo -e "╰─ \033[2m○ 是 / \033[0m\033[32m●\033[0m 否"
26612665
fi
26622666
}
2663-
function draw_menu_confirmed() {
2664-
tput rc
2665-
echo -e "╭─ ${message}"
2666-
echo -e ""
2667-
if [ "$selected" -eq 0 ]; then
2668-
echo -e "╰─ \033[32m●\033[0m \033[1m是\033[0m\033[2m / ○ 否\033[0m"
2669-
else
2670-
echo -e "╰─ \033[2m○ 是 / \033[0m\033[32m●\033[0m \033[1m否\033[0m"
2671-
fi
2672-
}
2667+
26732668
function read_key() {
26742669
IFS= read -rsn1 key
26752670
if [[ $key == $'\x1b' ]]; then
@@ -2678,10 +2673,10 @@ function interactive_select_boolean() {
26782673
fi
26792674
echo "$key"
26802675
}
2681-
tput sc # 保存光标位置
2682-
tput civis # 隐藏光标
2683-
trap "cleanup" INT TERM # 捕捉脚本结束时恢复光标
2684-
draw_menu # 初始化菜单位置
2676+
tput civis # 隐藏光标
2677+
store_position # 记录当前位置
2678+
trap "cleanup" INT TERM
2679+
draw_menu # 初始化菜单位置
26852680
# 处理选择
26862681
while true; do
26872682
key=$(read_key)
@@ -2690,32 +2685,36 @@ function interactive_select_boolean() {
26902685
# 左箭头 / A
26912686
if [ "$selected" -gt 0 ]; then
26922687
selected=$((selected - 1))
2688+
clear_menu
2689+
draw_menu
26932690
fi
26942691
;;
26952692
"[C" | "d" | "D")
26962693
# 右箭头 / D
26972694
if [ "$selected" -lt 1 ]; then
26982695
selected=$((selected + 1))
2696+
clear_menu
2697+
draw_menu
26992698
fi
27002699
;;
27012700
"")
27022701
# Enter 键
2703-
draw_menu_confirmed
2702+
clear_menu # 先清除菜单
27042703
break
27052704
;;
27062705
*) ;;
27072706
esac
2708-
draw_menu
27092707
done
2710-
# clear_menu # 清除菜单
2711-
tput cnorm # 恢复光标
2712-
# tput rc # 恢复光标位置
2713-
# 处理结果
2708+
echo -e "╭─ ${message}"
2709+
echo -e ""
27142710
if [ "$selected" -eq 0 ]; then
2711+
echo -e "╰─ \033[32m●\033[0m \033[1m是\033[0m\033[2m / ○ 否\033[0m"
27152712
_SELECT_RESULT="true"
27162713
else
2714+
echo -e "╰─ \033[2m○ 是 / \033[0m\033[32m●\033[0m \033[1m否\033[0m"
27172715
_SELECT_RESULT="false"
27182716
fi
2717+
tput cnorm # 恢复光标
27192718
}
27202719
27212720
##############################################################################

DockerInstallation.sh

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1185,22 +1185,26 @@ function interactive_select_boolean() {
11851185
_SELECT_RESULT=""
11861186
local selected=0
11871187
local message="$1"
1188+
local menu_height=3 # 菜单总高度(标题行+空行+选项行)
1189+
local original_line
1190+
function store_position() {
1191+
# 保存菜单开始前的行位置
1192+
original_line=$(tput lines)
1193+
}
11881194
function clear_menu() {
1189-
tput rc
1190-
for ((i = 0; i < 2 + 2; i++)); do
1191-
echo -e "\r\033[K"
1195+
# 向上移动到菜单开始位置并清除菜单
1196+
for ((i = 0; i < ${menu_height}; i++)); do
1197+
tput cuu1 # 光标上移一行
1198+
tput el # 清除当前行
11921199
done
1193-
tput rc
11941200
}
11951201
function cleanup() {
11961202
clear_menu
1197-
tput rc
11981203
tput cnorm
1199-
tput rmcup
12001204
exit
12011205
}
12021206
function draw_menu() {
1203-
tput rc
1207+
# 绘制菜单不改变光标位置
12041208
echo -e "╭─ ${message}"
12051209
echo -e ""
12061210
if [ "$selected" -eq 0 ]; then
@@ -1209,16 +1213,7 @@ function interactive_select_boolean() {
12091213
echo -e "╰─ \033[2m○ 是 / \033[0m\033[32m●\033[0m 否"
12101214
fi
12111215
}
1212-
function draw_menu_confirmed() {
1213-
tput rc
1214-
echo -e "╭─ ${message}"
1215-
echo -e ""
1216-
if [ "$selected" -eq 0 ]; then
1217-
echo -e "╰─ \033[32m●\033[0m \033[1m是\033[0m\033[2m / ○ 否\033[0m"
1218-
else
1219-
echo -e "╰─ \033[2m○ 是 / \033[0m\033[32m●\033[0m \033[1m否\033[0m"
1220-
fi
1221-
}
1216+
12221217
function read_key() {
12231218
IFS= read -rsn1 key
12241219
if [[ $key == $'\x1b' ]]; then
@@ -1227,10 +1222,10 @@ function interactive_select_boolean() {
12271222
fi
12281223
echo "$key"
12291224
}
1230-
tput sc # 保存光标位置
1231-
tput civis # 隐藏光标
1232-
trap "cleanup" INT TERM # 捕捉脚本结束时恢复光标
1233-
draw_menu # 初始化菜单位置
1225+
tput civis # 隐藏光标
1226+
store_position # 记录当前位置
1227+
trap "cleanup" INT TERM
1228+
draw_menu # 初始化菜单位置
12341229
# 处理选择
12351230
while true; do
12361231
key=$(read_key)
@@ -1239,32 +1234,36 @@ function interactive_select_boolean() {
12391234
# 左箭头 / A
12401235
if [ "$selected" -gt 0 ]; then
12411236
selected=$((selected - 1))
1237+
clear_menu
1238+
draw_menu
12421239
fi
12431240
;;
12441241
"[C" | "d" | "D")
12451242
# 右箭头 / D
12461243
if [ "$selected" -lt 1 ]; then
12471244
selected=$((selected + 1))
1245+
clear_menu
1246+
draw_menu
12481247
fi
12491248
;;
12501249
"")
12511250
# Enter 键
1252-
draw_menu_confirmed
1251+
clear_menu # 先清除菜单
12531252
break
12541253
;;
12551254
*) ;;
12561255
esac
1257-
draw_menu
12581256
done
1259-
# clear_menu # 清除菜单
1260-
tput cnorm # 恢复光标
1261-
# tput rc # 恢复光标位置
1262-
# 处理结果
1257+
echo -e "╭─ ${message}"
1258+
echo -e ""
12631259
if [ "$selected" -eq 0 ]; then
1260+
echo -e "╰─ \033[32m●\033[0m \033[1m是\033[0m\033[2m / ○ 否\033[0m"
12641261
_SELECT_RESULT="true"
12651262
else
1263+
echo -e "╰─ \033[2m○ 是 / \033[0m\033[32m●\033[0m \033[1m否\033[0m"
12661264
_SELECT_RESULT="false"
12671265
fi
1266+
tput cnorm # 恢复光标
12681267
}
12691268
12701269
handle_command_options "$@"

docs/use/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ hide:
136136

137137
---
138138

139-
请通过方向键 ++arrow-up++++arrow-down++++arrow-left++++arrow-right++ 或 ++w++++a++++s++++d++ 控制选项并按 ++enter++ 回车键确认。如果发现交互异常那么请改变终端软件的窗口大小后重试,窗口尽量不要太小
139+
请通过方向键 ++arrow-up++++arrow-down++++arrow-left++++arrow-right++ 或 ++w++++a++++s++++d++ 控制选项并按 ++enter++ 回车键确认。如果发现交互异常那么请改变终端软件的窗口大小后重试,另外窗口不要铺满全屏
140140

141141
</div>
142142

0 commit comments

Comments
 (0)