summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/prompt_toolkit/__init__.py2
-rw-r--r--src/prompt_toolkit/layout/screen.py2
-rw-r--r--src/prompt_toolkit/shortcuts/prompt.py12
-rw-r--r--src/prompt_toolkit/widgets/base.py47
4 files changed, 42 insertions, 21 deletions
diff --git a/src/prompt_toolkit/__init__.py b/src/prompt_toolkit/__init__.py
index 9f194f1..7f6f302 100644
--- a/src/prompt_toolkit/__init__.py
+++ b/src/prompt_toolkit/__init__.py
@@ -28,7 +28,7 @@ from .formatted_text import ANSI, HTML
from .shortcuts import PromptSession, print_formatted_text, prompt
# Don't forget to update in `docs/conf.py`!
-__version__ = "3.0.46"
+__version__ = "3.0.47"
assert pep440.match(__version__)
diff --git a/src/prompt_toolkit/layout/screen.py b/src/prompt_toolkit/layout/screen.py
index 0f19f52..475f540 100644
--- a/src/prompt_toolkit/layout/screen.py
+++ b/src/prompt_toolkit/layout/screen.py
@@ -169,7 +169,7 @@ class Screen:
#: Escape sequences to be injected.
self.zero_width_escapes: defaultdict[int, defaultdict[int, str]] = defaultdict(
- lambda: defaultdict(lambda: "")
+ lambda: defaultdict(str)
)
#: Position of the cursor.
diff --git a/src/prompt_toolkit/shortcuts/prompt.py b/src/prompt_toolkit/shortcuts/prompt.py
index 115d890..d0732bc 100644
--- a/src/prompt_toolkit/shortcuts/prompt.py
+++ b/src/prompt_toolkit/shortcuts/prompt.py
@@ -324,6 +324,10 @@ class PromptSession(Generic[_T]):
:param input: `Input` object. (Note that the preferred way to change the
input/output is by creating an `AppSession`.)
:param output: `Output` object.
+ :param interrupt_exception: The exception type that will be raised when
+ there is a keyboard interrupt (control-c keypress).
+ :param eof_exception: The exception type that will be raised when there is
+ an end-of-file/exit event (control-d keypress).
"""
_fields = (
@@ -410,6 +414,8 @@ class PromptSession(Generic[_T]):
refresh_interval: float = 0,
input: Input | None = None,
output: Output | None = None,
+ interrupt_exception: type[BaseException] = KeyboardInterrupt,
+ eof_exception: type[BaseException] = EOFError,
) -> None:
history = history or InMemoryHistory()
clipboard = clipboard or InMemoryClipboard()
@@ -459,6 +465,8 @@ class PromptSession(Generic[_T]):
self.reserve_space_for_menu = reserve_space_for_menu
self.tempfile_suffix = tempfile_suffix
self.tempfile = tempfile
+ self.interrupt_exception = interrupt_exception
+ self.eof_exception = eof_exception
# Create buffers, layout and Application.
self.history = history
@@ -811,7 +819,7 @@ class PromptSession(Generic[_T]):
@handle("<sigint>")
def _keyboard_interrupt(event: E) -> None:
"Abort when Control-C has been pressed."
- event.app.exit(exception=KeyboardInterrupt, style="class:aborting")
+ event.app.exit(exception=self.interrupt_exception(), style="class:aborting")
@Condition
def ctrl_d_condition() -> bool:
@@ -826,7 +834,7 @@ class PromptSession(Generic[_T]):
@handle("c-d", filter=ctrl_d_condition & default_focused)
def _eof(event: E) -> None:
"Exit when Control-D has been pressed."
- event.app.exit(exception=EOFError, style="class:exiting")
+ event.app.exit(exception=self.eof_exception(), style="class:exiting")
suspend_supported = Condition(suspend_to_background_supported)
diff --git a/src/prompt_toolkit/widgets/base.py b/src/prompt_toolkit/widgets/base.py
index 709b7a9..e2330e9 100644
--- a/src/prompt_toolkit/widgets/base.py
+++ b/src/prompt_toolkit/widgets/base.py
@@ -59,7 +59,7 @@ from prompt_toolkit.layout.controls import (
FormattedTextControl,
GetLinePrefixCallable,
)
-from prompt_toolkit.layout.dimension import AnyDimension, to_dimension
+from prompt_toolkit.layout.dimension import AnyDimension
from prompt_toolkit.layout.dimension import Dimension as D
from prompt_toolkit.layout.margins import (
ConditionalMargin,
@@ -636,31 +636,44 @@ class Box:
modal: bool = False,
key_bindings: KeyBindings | None = None,
) -> None:
- if padding is None:
- padding = D(preferred=0)
-
- def get(value: AnyDimension) -> D:
- if value is None:
- value = padding
- return to_dimension(value)
-
- self.padding_left = get(padding_left)
- self.padding_right = get(padding_right)
- self.padding_top = get(padding_top)
- self.padding_bottom = get(padding_bottom)
+ self.padding = padding
+ self.padding_left = padding_left
+ self.padding_right = padding_right
+ self.padding_top = padding_top
+ self.padding_bottom = padding_bottom
self.body = body
+ def left() -> AnyDimension:
+ if self.padding_left is None:
+ return self.padding
+ return self.padding_left
+
+ def right() -> AnyDimension:
+ if self.padding_right is None:
+ return self.padding
+ return self.padding_right
+
+ def top() -> AnyDimension:
+ if self.padding_top is None:
+ return self.padding
+ return self.padding_top
+
+ def bottom() -> AnyDimension:
+ if self.padding_bottom is None:
+ return self.padding
+ return self.padding_bottom
+
self.container = HSplit(
[
- Window(height=self.padding_top, char=char),
+ Window(height=top, char=char),
VSplit(
[
- Window(width=self.padding_left, char=char),
+ Window(width=left, char=char),
body,
- Window(width=self.padding_right, char=char),
+ Window(width=right, char=char),
]
),
- Window(height=self.padding_bottom, char=char),
+ Window(height=bottom, char=char),
],
width=width,
height=height,