paradoxxxzero_butterfly/butterfly/escapes.py
Florian Mounier fbd71d55ef Fix lint
2018-06-04 11:03:06 +02:00

71 lines
1.4 KiB
Python

import sys
import termios
import tty
from contextlib import contextmanager
from butterfly.utils import ansi_colors as colors # noqa: F401
@contextmanager
def html():
sys.stdout.write('\x1bP;HTML|')
yield
sys.stdout.write('\x1bP')
sys.stdout.flush()
@contextmanager
def image(mime='image'):
sys.stdout.write('\x1bP;IMAGE|%s;' % mime)
yield
sys.stdout.write('\x1bP\n')
sys.stdout.flush()
@contextmanager
def prompt():
sys.stdout.write('\x1bP;PROMPT|')
yield
sys.stdout.write('\x1bP')
sys.stdout.flush()
@contextmanager
def text():
sys.stdout.write('\x1bP;TEXT|')
yield
sys.stdout.write('\x1bP')
sys.stdout.flush()
def geolocation():
sys.stdout.write('\x1b[?99n')
sys.stdout.flush()
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
rv = sys.stdin.read(1)
if rv != '\x1b':
raise
rv = sys.stdin.read(1)
if rv != '[':
raise
rv = sys.stdin.read(1)
if rv != '?':
raise
loc = ''
while rv != 'R':
rv = sys.stdin.read(1)
if rv != 'R':
loc += rv
except Exception:
return
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
if not loc or ';' not in loc:
return
return tuple(map(float, loc.split(';')))