From bafd48d3df9b43a1d49ec015eff30619d595468b Mon Sep 17 00:00:00 2001 From: Aylur Date: Tue, 15 Oct 2024 13:25:45 +0000 Subject: update lua and gjs layout installing the gjs package through meson or npm now results in the same exposed structure lua: fix rockspec docs: aur package --- lang/lua/astal/binding.lua | 71 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 lang/lua/astal/binding.lua (limited to 'lang/lua/astal/binding.lua') diff --git a/lang/lua/astal/binding.lua b/lang/lua/astal/binding.lua new file mode 100644 index 0000000..ba1e6e4 --- /dev/null +++ b/lang/lua/astal/binding.lua @@ -0,0 +1,71 @@ +local lgi = require("lgi") +local GObject = lgi.require("GObject", "2.0") + +---@class Binding +---@field emitter table|Variable +---@field property? string +---@field transformFn function +local Binding = {} + +---@param emitter table +---@param property? string +---@return Binding +function Binding.new(emitter, property) + return setmetatable({ + emitter = emitter, + property = property, + transformFn = function(v) + return v + end, + }, Binding) +end + +function Binding:__tostring() + local str = "Binding<" .. tostring(self.emitter) + if self.property ~= nil then + str = str .. ", " .. self.property + end + return str .. ">" +end + +function Binding:get() + if self.property ~= nil and GObject.Object:is_type_of(self.emitter) then + return self.transformFn(self.emitter[self.property]) + end + if type(self.emitter.get) == "function" then + return self.transformFn(self.emitter:get()) + end + error("can not get: Not a GObject or a Variable " + self) +end + +---@param transform fun(value: any): any +---@return Binding +function Binding:as(transform) + local b = Binding.new(self.emitter, self.property) + b.transformFn = function(v) + return transform(self.transformFn(v)) + end + return b +end + +---@param callback fun(value: any) +---@return function +function Binding:subscribe(callback) + if self.property ~= nil and GObject.Object:is_type_of(self.emitter) then + local id = self.emitter.on_notify:connect(function() + callback(self:get()) + end, self.property, false) + return function() + GObject.signal_handler_disconnect(self.emitter, id) + end + end + if type(self.emitter.subscribe) == "function" then + return self.emitter:subscribe(function() + callback(self:get()) + end) + end + error("can not subscribe: Not a GObject or a Variable " + self) +end + +Binding.__index = Binding +return Binding -- cgit v1.2.3 From 8306ec0789854f9e04bc1708c4a7dc2afc1b4c90 Mon Sep 17 00:00:00 2001 From: Kevin <119447307+tokyob0t@users.noreply.github.com> Date: Fri, 25 Oct 2024 13:50:00 -0300 Subject: docs: lua docs (#50) --- lang/lua/astal/binding.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'lang/lua/astal/binding.lua') diff --git a/lang/lua/astal/binding.lua b/lang/lua/astal/binding.lua index ba1e6e4..a21fc26 100644 --- a/lang/lua/astal/binding.lua +++ b/lang/lua/astal/binding.lua @@ -4,7 +4,7 @@ local GObject = lgi.require("GObject", "2.0") ---@class Binding ---@field emitter table|Variable ---@field property? string ----@field transformFn function +---@field transform_fn function local Binding = {} ---@param emitter table @@ -30,10 +30,10 @@ end function Binding:get() if self.property ~= nil and GObject.Object:is_type_of(self.emitter) then - return self.transformFn(self.emitter[self.property]) + return self.transform_fn(self.emitter[self.property]) end if type(self.emitter.get) == "function" then - return self.transformFn(self.emitter:get()) + return self.transform_fn(self.emitter:get()) end error("can not get: Not a GObject or a Variable " + self) end @@ -42,8 +42,8 @@ end ---@return Binding function Binding:as(transform) local b = Binding.new(self.emitter, self.property) - b.transformFn = function(v) - return transform(self.transformFn(v)) + b.transform_fn = function(v) + return transform(self.transform_fn(v)) end return b end -- cgit v1.2.3 From 4a5308c82e0134f87b7e1ccc56e4fa2778b69fdd Mon Sep 17 00:00:00 2001 From: Aylur Date: Sat, 26 Oct 2024 11:50:43 +0200 Subject: fix: lua flake and lib --- lang/lua/astal/binding.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lang/lua/astal/binding.lua') diff --git a/lang/lua/astal/binding.lua b/lang/lua/astal/binding.lua index a21fc26..2944ec4 100644 --- a/lang/lua/astal/binding.lua +++ b/lang/lua/astal/binding.lua @@ -14,7 +14,7 @@ function Binding.new(emitter, property) return setmetatable({ emitter = emitter, property = property, - transformFn = function(v) + transform_fn = function(v) return v end, }, Binding) -- cgit v1.2.3