summaryrefslogtreecommitdiff
path: root/scripts/toggle_float_center.sh
blob: 831f1623a761339f5a883771fcf70fb10ff3c632 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash

# 切换窗口浮动:平铺 -> 浮动(缩放至 50%x75% 并居中) / 浮动 -> 平铺
#
# 注意:Lua 配置(hyprland.lua)下,`hyprctl dispatch` 是 hl.dispatch(...) 的包装,
# 旧 dispatcher 名(togglefloating/resizeactive/centerwindow/movecursor)已不可用,
# 必须使用 Lua 语法(hl.dsp.*)。

# 使用 grep 检查浮动状态
FLOATING=$(hyprctl activewindow | grep -oP 'floating:\s*\K\w+')

if [ "$FLOATING" = "0" ] || [ -z "$FLOATING" ]; then
    # 平铺 -> 浮动
    hyprctl dispatch "hl.dsp.window.float({ action = \"enable\" })"
    sleep 0.05

    # 计算屏幕逻辑尺寸:逻辑 = 像素 / scale(取聚焦显示器)
    eval "$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | "MW=\(.width / .scale) MH=\(.height / .scale) MX=\(.x) MY=\(.y)"')"

    W=$((MW * 50 / 100))   # 50% 宽
    H=$((MH * 75 / 100))   # 75% 高
    hyprctl dispatch "hl.dsp.window.resize({ x = $W, y = $H })"
    hyprctl dispatch "hl.dsp.window.center()"
    sleep 0.05
    # 移动鼠标到屏幕中心(对应原 movecursor 50% 50%)
    hyprctl dispatch "hl.dsp.cursor.move({ x = $((MX + MW / 2)), y = $((MY + MH / 2)) })"
else
    # 浮动 -> 平铺
    hyprctl dispatch "hl.dsp.window.float({ action = \"disable\" })"
fi