From 53b9ba2f8824afc7f50561735ddcae8bb986acd5 Mon Sep 17 00:00:00 2001 From: Harrison DiAmbrosio Date: Thu, 27 Nov 2025 11:54:17 -0500 Subject: [PATCH] dwm binds --- api.lua | 2 +- runtime/share/mezzaluna/init.lua | 257 ++++++++++++++++++++++--------- 2 files changed, 189 insertions(+), 70 deletions(-) diff --git a/api.lua b/api.lua index cb25ff9..7d39106 100644 --- a/api.lua +++ b/api.lua @@ -70,7 +70,7 @@ mez.options = { }, popups = nil, -- same options as windows, mimic window options if nil output = { - ["eDP-1"] = { + ["eDP-1"] = { brightness = 0.25, rate = "60.00", resolution = "1920x1080", diff --git a/runtime/share/mezzaluna/init.lua b/runtime/share/mezzaluna/init.lua index 40faff2..7a6df64 100644 --- a/runtime/share/mezzaluna/init.lua +++ b/runtime/share/mezzaluna/init.lua @@ -10,6 +10,193 @@ end mez.path.config = mez.fs.joinpath(env_conf, "mez", "init.lua") package.path = package.path..";"..mez.fs.joinpath(env_conf, "mez", "lua", "?.lua") +function print_table (t) + for key, value in pairs(t) do + print(key .. ":" .. value) + end +end + +local master = function() + local mast = { + master_ratio = 0.5, + stack = {}, + master = nil, + } + + local tile_views = function () + local res = mez.output.get_resolution(0) + + if #mast.stack == 0 then + mez.view.set_size(mast.master, res.width, res.height) + mez.view.set_position(mast.master, 0, 0) + else + mez.view.set_size(mast.master, res.width * mast.master_ratio, res.height) + mez.view.set_position(mast.master, 0, 0) + + for i, stack_id in ipairs(mast.stack) do + mez.view.set_size(stack_id, res.width * (1 - mast.master_ratio), res.height / #mast.stack) + mez.view.set_position(stack_id, res.width * mast.master_ratio, (res.height / #mast.stack * (i - 1))) + end + end + end + + mez.hook.add("ViewMapPre", { + callback = function(v) + mez.view.set_focused(v) + + if mast.master == nil then + mast.master = v + else + table.insert(mast.stack, #mast.stack + 1, v) + end + + tile_views() + end + }) + + mez.hook.add("ViewUnmapPost", { + callback = function(v) + if v == mast.master then + if #mast.stack > 0 then + mast.master = table.remove(mast.stack, 1) + else + mast.master = nil + end + else + for i, id in ipairs(mast.stack) do + if id == v then + if i == 1 then + mez.view.set_focused(mast.master) + elseif i == #mast.stack then + mez.view.set_focused(mast.stack[i - 1]) + else + mez.view.set_focused(mast.stack[i + 1]) + end + + table.remove(mast.stack, i) + end + end + end + + tile_views() + end + }) + + mez.input.add_keymap("alt|shift", "Return", { + press = function() + mez.api.spawn("alacritty") + end, + }) + + mez.input.add_keymap("alt|shift", "C", { + press = function () + mez.view.close(0) + end + }) + + mez.input.add_keymap("alt|shift", "q", { + press = function () + mez.api.exit(); + end + }) + + mez.input.add_keymap("alt", "Return", { + press = function() + local focused = mez.view.get_focused_id() + + if focused == mast.master then return end + + for i, id in ipairs(mast.stack) do + if focused == id then + local t = mast.master + mast.master = mast.stack[i] + mast.stack[i] = t + end + end + + tile_views() + end, + }) + + mez.input.add_keymap("alt", "j", { + press = function () + local focused = mez.view.get_focused_id() + + if focused == mast.master then + mez.view.set_focused(mast.stack[1]) + elseif focused == mast.stack[#mast.stack] then + mez.view.set_focused(mast.master) + else + for i, id in ipairs(mast.stack) do + -- TODO: use table.find + if focused == id then + mez.view.set_focused(mast.stack[i + 1]) + end + end + end + end + }) + + mez.input.add_keymap("alt", "k", { + press = function () + local focused = mez.view.get_focused_id() + + if focused == mast.master then + mez.view.set_focused(mast.stack[#mast.stack]) + elseif focused == mast.stack[1] then + mez.view.set_focused(mast.master) + else + for i, id in ipairs(mast.stack) do + -- TODO: use table.find + if focused == id then + mez.view.set_focused(mast.stack[i - 1]) + end + end + end + end + }) + + mez.input.add_keymap("alt", "h", { + press = function() + if mast.master_ratio > 0.15 then + mast.master_ratio = mast.master_ratio - 0.05 + tile_views() + end + end + }) + + mez.input.add_keymap("alt", "l", { + press = function() + if mast.master_ratio < 0.85 then + mast.master_ratio = mast.master_ratio + 0.05 + tile_views() + end + end + }) + + mez.input.add_keymap("alt", "Tab", { + press = function () + local focused = mez.view.get_focused_id() + local all = mez.view.get_all_ids() + + for _, id in ipairs(all) do + if id ~= focused then + mez.view.set_focused(id) + return + end + end + end + }) +end + +master() + +for i = 1, 12 do + mez.input.add_keymap("ctrl|alt", "XF86Switch_VT_"..i, { + press = function() mez.api.change_vt(i) end + }) +end + local test = function() -- View tests mez.api.spawn("alacritty") @@ -37,7 +224,7 @@ local test = function() mez.view.set_size(focused_view, 200, 200) -- Output tests - local focused_output = mez.output.get_focused_id(); + local focused_output = mez.output.get_focused_id() print(focused_output) local output_ids = mez.output.get_all_ids() @@ -61,71 +248,3 @@ local test = function() local res = mez.output.get_resolution(0) print(res.width .. ", " .. res.height) end - -mez.input.add_keymap("alt", "Return", { - press = function() - -- foot doesnt resize on uneven columns - -- this means alacritty is just better (period) - mez.api.spawn("alacritty") - end, -}) - -mez.input.add_keymap("alt", "c", { - press = function () - print("closing") - mez.view.close(0) - end -}) - -mez.input.add_keymap("alt", "q", { - press = function () - mez.api.exit(); - end -}) - -mez.input.add_keymap("alt", "v", { - press = function () - print(mez.view.check()) - end -}) - -mez.input.add_keymap("alt", "Tab", { - press = function () - local focused = mez.view.get_focused_id() - local all = mez.view.get_all_ids() - - for _, id in ipairs(all) do - if id ~= focused then - mez.view.set_focused(id) - return - end - end - end -}) - -for i = 1, 12 do - mez.input.add_keymap("ctrl|alt", "XF86Switch_VT_"..i, { - press = function() mez.api.change_vt(i) end - }) -end - -local tiler = function () - local res = mez.output.get_resolution(mez.output.get_focused_id()) - local all = mez.view.get_all_ids() - - for i, id in ipairs(all) do - mez.view.set_position(id, (res.width/ #all) * (i - 1), 0) - mez.view.set_size(id, res.width / #all, res.height) - end -end - -mez.input.add_keymap("alt", "t", { - press = function() test() end -}) - -mez.hook.add("ViewMapPre", { - callback = function(v) - tiler() - mez.view.set_focused(v) - end -})