55 lines
1.5 KiB
Python
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 == "")
|
|
)
|