feat: 上传我的配置

This commit is contained in:
2026-02-06 17:17:48 +08:00
parent 5ae578a012
commit ac517ad717
126 changed files with 15159 additions and 0 deletions

View File

@@ -0,0 +1,134 @@
#!/bin/bash
# =================语言=================
if env | grep -q "zh_CN"; then
STR_NEXT="📸 截取下一张 (仅需定高度)"
STR_FINISH="💾 完成并处理"
STR_ABORT="❌ 放弃"
STR_ERR="错误"
STR_SAVED="已保存"
else
STR_NEXT="📸 Capture Next (Height only)"
STR_FINISH="💾 Finish"
STR_ABORT="❌ Abort"
STR_ERR="Error"
STR_SAVED="Saved"
fi
# =================配置=================
CONFIG_DIR="$HOME/.cache/longshot-sh"
CONFIG_FILE="$CONFIG_DIR/mode"
SAVE_DIR="$HOME/Pictures/Screenshots/longshots"
TMP_DIR="/tmp/longshot_grim_$(date +%s)"
FILENAME="longshot_$(date +%Y%m%d_%H%M%S).png"
RESULT_PATH="$SAVE_DIR/$FILENAME"
TMP_STITCHED="$TMP_DIR/stitched.png"
mkdir -p "$SAVE_DIR" "$TMP_DIR"
cleanup() { rm -rf "$TMP_DIR"; }
trap cleanup EXIT SIGINT SIGTERM
# 菜单工具
# [修改]: 将 fuzzel 宽度从 45 调整为 30使其更紧凑
CMD_FUZZEL="fuzzel -d --anchor=top --y-margin=20 --lines=3 --width=30"
CMD_WOFI="wofi --dmenu --lines 3"
CMD_ROFI="rofi -dmenu -l 3"
if command -v fuzzel &> /dev/null; then MENU_CMD="$CMD_FUZZEL"
elif command -v wofi &> /dev/null; then MENU_CMD="$CMD_WOFI"
elif command -v rofi &> /dev/null; then MENU_CMD="$CMD_ROFI"
else exit 1; fi
# [新增]: 动态计算宽度函数 (主要针对 wofi)
function get_dynamic_width() {
local text="$1"
# 获取最长行的长度
local max_len=$(echo -e "$text" | wc -L)
# 计算: 字符数 * 28px + 60px 边距 (可根据屏幕分辨率微调)
echo $(( max_len * 28 + 60 ))
}
# [修改]: 增加对 wofi 的动态宽度支持
function show_menu() {
local content="$1"
if [[ "$MENU_CMD" == *"wofi"* ]]; then
# 如果是 wofi计算宽度并附加参数
local width=$(get_dynamic_width "$content")
echo -e "$content" | $MENU_CMD --width "$width"
else
# 其他工具 (fuzzel/rofi) 保持原样
echo -e "$content" | $MENU_CMD
fi
}
# ======================================
# Step 1: 第一张截图 (直接开始,不询问)
# ======================================
# 用户在主菜单点击了 "选择区域",所以这里直接 Slurp
GEO_1=$(slurp)
if [ -z "$GEO_1" ]; then exit 0; fi
IFS=', x' read -r FIX_X FIX_Y FIX_W FIX_H <<< "$GEO_1"
grim -g "$GEO_1" "$TMP_DIR/001.png"
# ======================================
# Step 2: 循环截图
# ======================================
INDEX=2
DO_SAVE=false
while true; do
# 菜单提示下一张 (show_menu 会自动处理宽度)
ACTION=$(show_menu "$STR_NEXT\n$STR_FINISH\n$STR_ABORT")
case "$ACTION" in
*"📸"*)
sleep 0.2
GEO_NEXT=$(slurp)
if [ -z "$GEO_NEXT" ]; then continue; fi
# 锁定宽度和X轴只取新高度
IFS=', x' read -r _TX NEW_Y _TW NEW_H <<< "$GEO_NEXT"
FINAL_GEO="${FIX_X},${NEW_Y} ${FIX_W}x${NEW_H}"
IMG_NAME="$(printf "%03d" $INDEX).png"
grim -g "$FINAL_GEO" "$TMP_DIR/$IMG_NAME"
((INDEX++))
;;
*"💾"*) DO_SAVE=true; break ;;
*"❌"*) exit 0 ;;
*) break ;; # 意外退出
esac
done
# ======================================
# Step 3: 处理与自动动作
# ======================================
COUNT=$(ls "$TMP_DIR"/*.png 2>/dev/null | wc -l)
if [ "$COUNT" -gt 0 ] && [ "$DO_SAVE" = true ]; then
# 拼接
magick "$TMP_DIR"/*.png -append "$TMP_STITCHED"
mv "$TMP_STITCHED" "$RESULT_PATH"
# 复制到剪贴板
if command -v wl-copy &> /dev/null; then wl-copy < "$RESULT_PATH"; fi
# 读取配置执行动作
FINAL_MODE=$(cat "$CONFIG_FILE" 2>/dev/null || echo "PREVIEW")
case "$FINAL_MODE" in
"PREVIEW")
imv "$RESULT_PATH"
;;
"EDIT")
if command -v satty &> /dev/null; then satty -f "$RESULT_PATH"
else imv "$RESULT_PATH"; fi
;;
"SAVE")
notify-send -i "$RESULT_PATH" "Longshot" "$STR_SAVED: $(basename "$RESULT_PATH")"
;;
esac
fi