fix: toggle-resion

This commit is contained in:
2026-06-27 11:20:47 +08:00
parent acac6c3650
commit 0548056ca4
5 changed files with 153 additions and 20 deletions
+71
View File
@@ -0,0 +1,71 @@
# CN_REGION 持久化到 ~/.config/fish/custom.fish(供 toggle-region / ff region 使用)
dotfile_region_custom_fish() {
echo "${HOME}/.config/fish/custom.fish"
}
dotfile_region_read() {
local custom val
custom="$(dotfile_region_custom_fish)"
if [ -f "$custom" ]; then
val=$(
grep -E '^[[:space:]]*set[[:space:]]+-gx[[:space:]]+CN_REGION[[:space:]]+' "$custom" 2>/dev/null |
tail -1 |
awk '{print $NF}'
)
if [ -n "$val" ]; then
echo "$val"
return 0
fi
fi
if [ -n "${CN_REGION:-}" ]; then
echo "$CN_REGION"
else
echo "0"
fi
}
dotfile_region_write() {
local val="$1"
local custom tmp
custom="$(dotfile_region_custom_fish)"
mkdir -p "$(dirname "$custom")"
tmp="$(mktemp)"
if [ -f "$custom" ]; then
grep -Ev '^[[:space:]]*# dotfile: CN_REGION|^[[:space:]]*set[[:space:]]+-gx[[:space:]]+CN_REGION[[:space:]]+' \
"$custom" >"$tmp" || true
else
: >"$tmp"
fi
{
cat "$tmp"
if [ -s "$tmp" ]; then
echo
fi
echo "# dotfile: CN_REGION (managed by ff region / toggle-region)"
echo "set -gx CN_REGION ${val}"
} >"${custom}.new"
mv "${custom}.new" "$custom"
rm -f "$tmp"
}
dotfile_region_toggle() {
local current next
current="$(dotfile_region_read)"
if [ "$current" = "1" ]; then
next=0
else
next=1
fi
dotfile_region_write "$next"
export CN_REGION="$next"
echo "$next"
}
dotfile_region_label() {
if [ "$1" = "1" ]; then
echo "国内"
else
echo "国外"
fi
}
+9 -12
View File
@@ -1,33 +1,30 @@
#!/bin/bash
# 切换 CN_REGION 环境变量(国内/国外镜像与安装源)
# 切换 CN_REGION 并持久化到 ~/.config/fish/custom.fish
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck disable=SC1091
source "$SCRIPT_DIR/common/help.sh"
# shellcheck disable=SC1091
source "$SCRIPT_DIR/common/region.sh"
usage() {
cat <<'EOF'
用法: toggle-region
在当前 shell 中切换 CN_REGION:
切换 CN_REGION 并写入 ~/.config/fish/custom.fish:
1 -> 0 国内 -> 国外
0/未设置 -> 1 国外 -> 国内
影响依赖 CN_REGION 的安装脚本(如 docker-install)。
fish 中推荐: ff region
通过 ff script 调用后,当前 fish 会话会自动同步该变量。
选项:
-h, --help 显示此帮助
说明: 仅影响当前 shell 会话;持久化请写入 fish/zsh 配置。
EOF
}
dotfile_help_requested "${1:-}" && dotfile_show_help
if [ "$CN_REGION" = "1" ]; then
export CN_REGION=0
echo "[INFO] Region switched to: 0 (国外)"
else
export CN_REGION=1
echo "[INFO] Region switched to: 1 (国内)"
fi
next="$(dotfile_region_toggle)"
echo "[INFO] Region switched to: ${next} ($(dotfile_region_label "$next"))"
echo "[INFO] 已写入 $(dotfile_region_custom_fish)"