51 lines
1.2 KiB
Plaintext
51 lines
1.2 KiB
Plaintext
#!/bin/kuroko
|
|
import kuroko
|
|
import os
|
|
|
|
def jsonFilter(c):
|
|
let mapping = {
|
|
'"': '\\"',
|
|
'\\': '\\\\',
|
|
'\b': '\\b',
|
|
'\f': '\\f',
|
|
'\n': '\\n',
|
|
'\r': '\\r',
|
|
'\t': '\\t',
|
|
}
|
|
return mapping[c] if c in mapping else c
|
|
|
|
def dumpJson(o):
|
|
if isinstance(o,list):
|
|
return '[' + ','.join([dumpJson(i) for i in o]) + ']'
|
|
else if isinstance(o,int):
|
|
return repr(o)
|
|
else if isinstance(o,str):
|
|
return '"' + ''.join([jsonFilter(c) for c in o]) + '"'
|
|
else if isinstance(o,dict):
|
|
return '{' + ','.join([dumpJson(k) + ':' + dumpJson(v) for k, v in o.items()]) + '}'
|
|
else:
|
|
return dumpJson(str(o))
|
|
|
|
let msg = {}
|
|
let args = kuroko.argv[1:]
|
|
let sock = os.open("/dev/pex/toast",os.O_WRONLY)
|
|
|
|
if not sock:
|
|
print("No toast daemon.")
|
|
return 1
|
|
|
|
while args:
|
|
let arg = args.pop(0)
|
|
if arg == '--icon':
|
|
msg['icon'] = args.pop(0)
|
|
else if arg == '--duration':
|
|
msg['duration'] = int(args.pop(0))
|
|
else if arg.startswith('--'):
|
|
print("Unrecognized option:",arg)
|
|
else:
|
|
msg['body'] = arg
|
|
print("Sending toast:", dumpJson(msg),"to",sock)
|
|
os.write(sock, dumpJson(msg).encode())
|
|
|
|
|