diff --git a/hypr/cheatsheet.txt b/hypr/cheatsheet.txt index e7288a0..317dc62 100644 --- a/hypr/cheatsheet.txt +++ b/hypr/cheatsheet.txt @@ -14,9 +14,10 @@ Mod+Shift+V История буфера обмена Mod+H/J/K/L Фокус влево/вниз/вверх/вправо (также стрелки) Mod+Shift+H/J/K/L Переместить окно (также стрелки) Mod+Shift+Q Закрыть окно -Mod+F На весь экран +Mod+F Развернуть окно на весь экран, панель остаётся (повтор — вернуть) Mod+Shift+Space Плавающее / тайловое -Mod+Shift+F Плавающее / тайловое +Mod+Shift+F Настоящий полный экран без панели (повтор — выйти) + Программы, которые сами уходят в полный экран (F11, RDP, видео), остаются с панелью Mod+C Центрировать плавающее окно Mod+Shift+T Закрепить плавающее окно поверх всех Mod+E Сменить направление разбиения diff --git a/hypr/hyprland.lua b/hypr/hyprland.lua index 2d9799a..14faea4 100644 --- a/hypr/hyprland.lua +++ b/hypr/hyprland.lua @@ -169,9 +169,15 @@ for key, d in pairs(dirs) do end -- layout -b(mod .. " + F", hl.dsp.window.fullscreen()) +-- Mod+F maximizes (the DMS bar stays visible); Mod+Shift+F is real fullscreen without the bar. +b(mod .. " + F", hl.dsp.window.fullscreen({ mode = "maximized" })) +b(mod .. " + SHIFT + F", function() + local w = hl.get_active_window() + if not w then return end + if w.fullscreen ~= 2 then HL_FS_REAL = true end -- let the handler below leave this one alone + hl.dispatch(hl.dsp.window.fullscreen({ mode = "fullscreen" })) +end) b(mod .. " + SHIFT + SPACE", hl.dsp.window.float({ action = "toggle" })) -b(mod .. " + SHIFT + F", hl.dsp.window.float({ action = "toggle" })) b(mod .. " + C", hl.dsp.window.center()) b(mod .. " + E", hl.dsp.layout("togglesplit")) b(mod .. " + P", hl.dsp.window.pseudo()) @@ -241,6 +247,15 @@ b("XF86AudioPlay", dms("mpris playPause"), { locked = true }) b("XF86AudioNext", dms("mpris next"), { locked = true }) b("XF86AudioPrev", dms("mpris previous"), { locked = true }) +-- Programs that go fullscreen on their own (F11, RDP, video) keep the DMS bar visible: Hyprland shows them +-- maximized (1) while the program still believes it is fullscreen (2). +HL_FS_REAL = false +hl.on("window.fullscreen", function(w) + if not w or w.fullscreen ~= 2 then return end + if HL_FS_REAL then HL_FS_REAL = false; return end -- requested with Mod+Shift+F: keep it real + hl.dispatch(hl.dsp.window.fullscreen_state({ internal = 1, client = w.fullscreen_client, window = "address:" .. w.address })) +end) + ----------------- ---- RULES ------ -----------------