CLI and App
App is a singleton instance of an Astal.Application.
Depending on gtk version require paths will differ
local App = require("astal.gtk3.app")
local App = require("astal.gtk4.app") -- not yet availableEntry point
App:start is a wrapper function for App:run that will only run the application if there is no instance already running with the specified name.
App:start({
instance_name = "my-instance", -- defaults to "astal"
main = function()
-- setup anything
-- instantiate widgets
end,
})Messaging from CLI
If you want to interact with an instance from the CLI, you can do so by sending a request.
App:start({
main = function() end,
---@param request string
---@param res fun(response: any): nil
request_handler = function(request, res)
if request == "say hi" then
return res("hi cli")
end
res("unknown command")
end
})astal say hi
# hi cliToggling Windows by their name
In order for Astal to know about your windows, you have to register them. You can do this by specifying a unique name and calling App:add_window.
local App = require("astal.gtk3.app")
local function Bar()
return Widget.Window({
name = "Bar",
setup = function(self)
App:add_window(self)
end,
Widget.Box()
})
endYou can also invoke App:add_window by simply passing the App to the application prop.
local App = require("astal.gtk3.app")
local function Bar()
return Widget.Window({
name = "Bar",
application = App,
Widget.Box()
})
endastal -t BarWARNING
When assigning the application prop make sure name comes before. Props are set sequentially and if name is applied after application it won't work.
Client instances
The first time App:start is invoked the main function gets called. While that instance is running any subsequent execution of the script will call the client function.
App:start({
-- main instance
main = function(...)
local args = { ... }
print(string.format("{%s}", table.concat(args, ", ")))
end,
-- client instance
client = function(request, ...)
local res = request("you can send a request to the main instance")
print(res)
end,
-- this runs in the main instance
request_handler = function(request, res)
res("response from main instance")
end
})