You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.8 KiB
73 lines
1.8 KiB
6 years ago
|
from __future__ import unicode_literals
|
||
|
from prompt_toolkit.application.current import get_app
|
||
|
from prompt_toolkit.eventloop.context import TaskLocal, TaskLocalNotSetError
|
||
|
from prompt_toolkit.utils import is_windows
|
||
|
from .base import Input
|
||
|
import sys
|
||
|
|
||
|
__all__ = [
|
||
|
'create_input',
|
||
|
'create_pipe_input',
|
||
|
'get_default_input',
|
||
|
'set_default_input',
|
||
|
]
|
||
|
|
||
|
|
||
|
def create_input(stdin=None):
|
||
|
stdin = stdin or sys.stdin
|
||
|
|
||
|
if is_windows():
|
||
|
from .win32 import Win32Input
|
||
|
return Win32Input(stdin)
|
||
|
else:
|
||
|
from .vt100 import Vt100Input
|
||
|
return Vt100Input(stdin)
|
||
|
|
||
|
|
||
|
def create_pipe_input():
|
||
|
"""
|
||
|
Create an input pipe.
|
||
|
This is mostly useful for unit testing.
|
||
|
"""
|
||
|
if is_windows():
|
||
|
from .win32_pipe import Win32PipeInput
|
||
|
return Win32PipeInput()
|
||
|
else:
|
||
|
from .posix_pipe import PosixPipeInput
|
||
|
return PosixPipeInput()
|
||
|
|
||
|
|
||
|
_default_input = TaskLocal()
|
||
|
|
||
|
|
||
|
def get_default_input():
|
||
|
"""
|
||
|
Get the input class to be used by default.
|
||
|
|
||
|
Called when creating a new Application(), when no `Input` has been passed.
|
||
|
"""
|
||
|
# Other create/return the default input.
|
||
|
try:
|
||
|
value = _default_input.get()
|
||
|
except TaskLocalNotSetError:
|
||
|
# If an application is already running, take the input from there.
|
||
|
# (This is important for the "ENTER for continue" prompts after
|
||
|
# executing system commands and displaying readline-style completions.)
|
||
|
app = get_app(return_none=True)
|
||
|
if app:
|
||
|
return app.input
|
||
|
|
||
|
return create_input()
|
||
|
else:
|
||
|
return value
|
||
|
|
||
|
|
||
|
def set_default_input(input):
|
||
|
"""
|
||
|
Set the default `Input` class.
|
||
|
|
||
|
(Used for instance, for the telnet submodule.)
|
||
|
"""
|
||
|
assert isinstance(input, Input)
|
||
|
_default_input.set(input)
|