aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/prompt-toolkit/py2/prompt_toolkit/buffer_mapping.py
diff options
context:
space:
mode:
authornkozlovskiy <nmk@ydb.tech>2023-09-29 12:24:06 +0300
committernkozlovskiy <nmk@ydb.tech>2023-09-29 12:41:34 +0300
commite0e3e1717e3d33762ce61950504f9637a6e669ed (patch)
treebca3ff6939b10ed60c3d5c12439963a1146b9711 /contrib/python/prompt-toolkit/py2/prompt_toolkit/buffer_mapping.py
parent38f2c5852db84c7b4d83adfcb009eb61541d1ccd (diff)
downloadydb-e0e3e1717e3d33762ce61950504f9637a6e669ed.tar.gz
add ydb deps
Diffstat (limited to 'contrib/python/prompt-toolkit/py2/prompt_toolkit/buffer_mapping.py')
-rw-r--r--contrib/python/prompt-toolkit/py2/prompt_toolkit/buffer_mapping.py92
1 files changed, 92 insertions, 0 deletions
diff --git a/contrib/python/prompt-toolkit/py2/prompt_toolkit/buffer_mapping.py b/contrib/python/prompt-toolkit/py2/prompt_toolkit/buffer_mapping.py
new file mode 100644
index 0000000000..34f443bd47
--- /dev/null
+++ b/contrib/python/prompt-toolkit/py2/prompt_toolkit/buffer_mapping.py
@@ -0,0 +1,92 @@
+"""
+The BufferMapping contains all the buffers for a command line interface, and it
+keeps track of which buffer gets the focus.
+"""
+from __future__ import unicode_literals
+from .enums import DEFAULT_BUFFER, SEARCH_BUFFER, SYSTEM_BUFFER, DUMMY_BUFFER
+from .buffer import Buffer, AcceptAction
+from .history import InMemoryHistory
+
+import six
+
+__all__ = (
+ 'BufferMapping',
+)
+
+
+class BufferMapping(dict):
+ """
+ Dictionary that maps the name of the buffers to the
+ :class:`~prompt_toolkit.buffer.Buffer` instances.
+
+ This mapping also keeps track of which buffer currently has the focus.
+ (Some methods receive a 'cli' parameter. This is useful for applications
+ where this `BufferMapping` is shared between several applications.)
+ """
+ def __init__(self, buffers=None, initial=DEFAULT_BUFFER):
+ assert buffers is None or isinstance(buffers, dict)
+
+ # Start with an empty dict.
+ super(BufferMapping, self).__init__()
+
+ # Add default buffers.
+ self.update({
+ # For the 'search' and 'system' buffers, 'returnable' is False, in
+ # order to block normal Enter/ControlC behaviour.
+ DEFAULT_BUFFER: Buffer(accept_action=AcceptAction.RETURN_DOCUMENT),
+ SEARCH_BUFFER: Buffer(history=InMemoryHistory(), accept_action=AcceptAction.IGNORE),
+ SYSTEM_BUFFER: Buffer(history=InMemoryHistory(), accept_action=AcceptAction.IGNORE),
+ DUMMY_BUFFER: Buffer(read_only=True),
+ })
+
+ # Add received buffers.
+ if buffers is not None:
+ self.update(buffers)
+
+ # Focus stack.
+ self.focus_stack = [initial or DEFAULT_BUFFER]
+
+ def current(self, cli):
+ """
+ The active :class:`.Buffer`.
+ """
+ return self[self.focus_stack[-1]]
+
+ def current_name(self, cli):
+ """
+ The name of the active :class:`.Buffer`.
+ """
+ return self.focus_stack[-1]
+
+ def previous(self, cli):
+ """
+ Return the previously focussed :class:`.Buffer` or `None`.
+ """
+ if len(self.focus_stack) > 1:
+ try:
+ return self[self.focus_stack[-2]]
+ except KeyError:
+ pass
+
+ def focus(self, cli, buffer_name):
+ """
+ Focus the buffer with the given name.
+ """
+ assert isinstance(buffer_name, six.text_type)
+ self.focus_stack = [buffer_name]
+
+ def push_focus(self, cli, buffer_name):
+ """
+ Push buffer on the focus stack.
+ """
+ assert isinstance(buffer_name, six.text_type)
+ self.focus_stack.append(buffer_name)
+
+ def pop_focus(self, cli):
+ """
+ Pop buffer from the focus stack.
+ """
+ if len(self.focus_stack) > 1:
+ self.focus_stack.pop()
+ else:
+ raise IndexError('Cannot pop last item from the focus stack.')