1
0

__init__.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import os
  2. import sys
  3. def curses_tty_wrapper(function, *args, **kwargs):
  4. stdin_fd = os.dup(sys.stdin.fileno())
  5. stdout_fd = os.dup(sys.stdout.fileno())
  6. # set stdin to tty
  7. tty_in = open('/dev/tty', 'r')
  8. os.dup2(tty_in.fileno(), sys.stdin.fileno())
  9. # set stdout to tty
  10. tty_out = open('/dev/tty', 'w')
  11. os.dup2(tty_out.fileno(), sys.stdout.fileno())
  12. # os.system('ls -l /proc/self/fd/')
  13. import curses
  14. result = curses.wrapper(function, *args, **kwargs)
  15. # reset stdin and stdout
  16. os.dup2(stdin_fd, sys.stdin.fileno())
  17. os.dup2(stdout_fd, sys.stdout.fileno())
  18. return result
  19. def raw_input_with_default(prompt, default):
  20. import readline
  21. def pre_input_hook():
  22. readline.insert_text(default)
  23. readline.redisplay()
  24. readline.set_pre_input_hook(pre_input_hook)
  25. try:
  26. return raw_input(prompt)
  27. finally:
  28. readline.set_pre_input_hook(None)
  29. def int_input_with_default(prompt, default):
  30. if default:
  31. default = str(default)
  32. else:
  33. default = ''
  34. s = raw_input_with_default(prompt, default).strip()
  35. if s:
  36. return int(s)
  37. else:
  38. return None