wmtools/i3bar_base.nim
2022-04-28 12:50:07 +01:00

99 lines
2.2 KiB
Nim

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