import std/[os,osproc] import std/json import std/rdstdin import marshal type i3BarData* = object title*: string full_text*: string short_text*: string color*: string border*: string background*: string type i3BarInput* = object button*: int x*: int y*: int const background* = "#000000" const backgroundalt* = "#bb222222" const backgroundalt2* = "#bb333333" const foreground* = "#dfdfdf" const foregroundalt* = "#777" const foregroundalt2* = "#ccc" const black* = "#000000" const white* = "#FFFFFF" const yellow* = "#ffb52a" const red* = "#e60053" const purple* = "#9f78e1" const blue* = "#0a6cf5" const lightblue* = "#7296EF" const lighterblue* = "#B5DDF7" const green* = "#4b9901" const lightgreen* = "#00ff00" const grey* = "#dfdfdf" const darkgrey* = "#444" const primary* = yellow const secondary* = red const alert* = "#bd2c40" var loop* = true var stoploop* = false var dmenu* = false proc newi3BarData*(): i3BarData = return i3BarData( title: "Info : ", full_text: "", short_text: "", color: foreground, border: white, background: black ) proc debugLog*(str: string) = let f = open("/tmp/debug.txt",fmAppend) defer: f.close() f.writeLine(str) proc parseInput*(): i3BarInput = let input = readLineFromStdin("") try: let jsonNode = parseJson(input) let i3input = to(jsonNode, i3BarInput) return i3input except: return i3BarInput() proc clearInput*(count: int = 1) = for x in countup(1, count): discard readLineFromStdin("") proc getArguments*(): seq[string] = let args = commandLineParams() return args proc outputJSON*(data: i3barData) = echo $$data proc runDMenu*(data: i3BarData) = var cmd = "echo " & $data.full_text & " | dmenu " #cmd = cmd & " -l 2 " cmd = cmd & " -p \"" & $data.title & "\"" cmd = cmd & " -nb \"" & $data.background & "\"" cmd = cmd & " -nf \"" & $data.color & "\"" cmd = cmd & " -sb \"" & $data.border & "\"" cmd = cmd & " -sf \"" & $data.color & "\"" discard execCmd(cmd) discard execCmd("i3-msg mode \"default\"") let args = getArguments() for arg in args: if arg == "noloop": stoploop = true if arg == "dmenu": stoploop = true dmenu = true