1
0
Fork 0
mycli/mycli/clibuffer.py
Daniel Baumann f15fe4f59f
Merging upstream version 1.29.2.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-02-09 19:16:42 +01:00

55 lines
1.5 KiB
Python

from prompt_toolkit.enums import DEFAULT_BUFFER
from prompt_toolkit.filters import Condition
from prompt_toolkit.application import get_app
from .packages import special
def cli_is_multiline(mycli):
@Condition
def cond():
doc = get_app().layout.get_buffer_by_name(DEFAULT_BUFFER).document
if not mycli.multi_line:
return False
else:
return not _multiline_exception(doc.text)
return cond
def _multiline_exception(text):
orig = text
text = text.strip()
# Multi-statement favorite query is a special case. Because there will
# be a semicolon separating statements, we can't consider semicolon an
# EOL. Let's consider an empty line an EOL instead.
if text.startswith("\\fs"):
return orig.endswith("\n")
return (
# Special Command
text.startswith("\\")
or
# Delimiter declaration
text.lower().startswith("delimiter")
or
# Ended with the current delimiter (usually a semi-column)
text.endswith(special.get_current_delimiter())
or text.endswith("\\g")
or text.endswith("\\G")
or text.endswith(r"\e")
or text.endswith(r"\clip")
or
# Exit doesn't need semi-column`
(text == "exit")
or
# Quit doesn't need semi-column
(text == "quit")
or
# To all teh vim fans out there
(text == ":q")
or
# just a plain enter without any text
(text == "")
)