Add initial version of Sonowrite
This commit is contained in:
commit
1c5b6d745b
|
@ -0,0 +1,3 @@
|
|||
/.idea
|
||||
__pycache__
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
[tool.poetry]
|
||||
name = "sonowrite"
|
||||
version = "0.1.0"
|
||||
description = ""
|
||||
authors = ["Olivier 'reivilibre'"]
|
||||
|
||||
[tool.poetry.dependencies]
|
||||
python = "^3.8"
|
||||
|
||||
[tool.poetry.dev-dependencies]
|
||||
|
||||
[build-system]
|
||||
requires = ["poetry-core>=1.0.0"]
|
||||
build-backend = "poetry.core.masonry.api"
|
|
@ -0,0 +1,61 @@
|
|||
import subprocess
|
||||
import sys, tty
|
||||
from pathlib import Path
|
||||
from subprocess import PIPE
|
||||
|
||||
|
||||
def speak(text: str) -> None:
|
||||
#print(f"TALK {text}")
|
||||
proc = subprocess.Popen(f"espeak --stdin --stdout | paplay", stdin=PIPE, shell=True)
|
||||
proc.stdin.write(text.encode("UTF-8") + b"\n")
|
||||
proc.stdin.flush()
|
||||
proc.stdin.close()
|
||||
exit_code = proc.wait()
|
||||
if exit_code != 0:
|
||||
raise ValueError("speak failed")
|
||||
|
||||
|
||||
def main(target: Path) -> None:
|
||||
tty.setcbreak(sys.stdin.fileno())
|
||||
sys.stdout.write("\n\n\n--- Sonowrite ---\n\n\n")
|
||||
|
||||
textbuf = ""
|
||||
wordbuf = ""
|
||||
linebuf = ""
|
||||
|
||||
with open(target, "w") as fout:
|
||||
while True:
|
||||
c = sys.stdin.read(1)
|
||||
|
||||
#sys.stdout.write(repr(c))
|
||||
if c == "\x7f": # Backspace
|
||||
sys.stdout.write("\x1b[D\x1b[K")
|
||||
elif c == "@":
|
||||
pass
|
||||
else:
|
||||
sys.stdout.write(c)
|
||||
fout.write(c)
|
||||
|
||||
sys.stdout.flush()
|
||||
|
||||
if c in (" ", ".", ",", "\n"):
|
||||
# echo previous word
|
||||
speak(textbuf.lstrip(" \n.,"))
|
||||
textbuf = ""
|
||||
elif c == "@":
|
||||
# TODO echo previous line?
|
||||
speak(linebuf)
|
||||
continue
|
||||
elif c == "\x7f":
|
||||
textbuf = textbuf[:-1]
|
||||
wordbuf = wordbuf[:-1]
|
||||
linebuf = linebuf[:-1]
|
||||
|
||||
|
||||
textbuf += c
|
||||
wordbuf += c
|
||||
linebuf += c
|
||||
|
||||
if __name__ == '__main__':
|
||||
the_target = Path(sys.argv[1])
|
||||
main(the_target)
|
Loading…
Reference in New Issue