adjusted i3_workspaces to traverse down tree to get all open windows

This commit is contained in:
Paul Wilde 2022-05-17 16:01:24 +01:00
parent 28319104cd
commit f93a90d8f9

View file

@ -43,8 +43,12 @@ proc buildString(ws: Workspace): string =
else:
str &= " "
str &= "| " & ws.output & " | "
for app in ws.applications:
str &= app.class & " " & app.title & " | "
if ws.application.class != "":
str &= ws.application.class & " " & ws.application.title & " | "
else:
str = ""
# for app in ws.applications:
# str &= app.class & " " & app.title & " | "
return str
proc findWorkspace(workspace: string): Workspace =
@ -75,13 +79,15 @@ proc switchWorkspace(workspace: string) =
# apps.add(name)
# return (apps, focused)
#
proc getApplication(node: JsonNode): Application =
proc getApplication(node: JsonNode, ws: Workspace = Workspace()): Application =
var app = Application()
let window = node["window_properties"]
app.title = window["title"].getStr()
app.class = window["class"].getStr()
app.focused = node["focused"].getBool()
app.urgent = node["urgent"].getBool()
#echo ws.num
#echo app.title & " " & app.class
return app
# proc findWorkspaces(node: JsonNode) =
@ -118,27 +124,32 @@ proc newWorkspace(node: JsonNode): Workspace =
output: node["output"].getStr(),
)
proc findWorkspacesTree(node: JsonNode) =
proc findWorkspacesTree(node: JsonNode, parent: Workspace = Workspace()) =
for channel in node["nodes"].getElems():
### move this into for loop if want separate entry per window
var ws: Workspace = Workspace()
if node{"type"}.getStr() == "workspace":
if parent.num > 0:
ws = parent
elif node{"type"}.getStr() == "workspace":
if node["output"].getStr() == "__i3":
return
ws = newWorkspace(node)
###
if channel{"window_properties"} != nil:
let app = getApplication(channel)
let app = getApplication(channel,ws)
if ws.name != "":
#if app.focused:
# ws.focused = true
ws.applications.add(app)
ws.application = app
elif ws.num > 0 and len(channel{"nodes"}) > 0:
findWorkspacesTree(channel,ws)
else:
findWorkspacesTree(channel)
### move this into for loop if want separate entry per window
if ws.name != "":
ws.display_string = ws.buildString()
if ws.display_string != "":
my_workspaces.add(ws)
###
return