summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG11
-rw-r--r--docs/conf.py4
-rwxr-xr-xexamples/full-screen/simple-demos/floats.py2
-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
7 files changed, 56 insertions, 24 deletions
diff --git a/CHANGELOG b/CHANGELOG
index fa02b85..2728232 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,17 @@
CHANGELOG
=========
+3.0.47: 2024-06-10
+------------------
+
+New features:
+- Allow passing exception classes for `KeyboardInterrupt` and `EOFError` in
+ `PromptSession`.
+
+Fixes:
+- Compute padding parameters for `Box` widget lazily.
+
+
3.0.46: 2024-06-04
------------------
diff --git a/docs/conf.py b/docs/conf.py
index dbbcecc..1c6bb57 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -48,9 +48,9 @@ copyright = "2014-2024, Jonathan Slenders"
# built documents.
#
# The short X.Y version.
-version = "3.0.46"
+version = "3.0.47"
# The full version, including alpha/beta/rc tags.
-release = "3.0.46"
+release = "3.0.47"
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
diff --git a/examples/full-screen/simple-demos/floats.py b/examples/full-screen/simple-demos/floats.py
index 4d79c2b..d31b790 100755
--- a/examples/full-screen/simple-demos/floats.py
+++ b/examples/full-screen/simple-demos/floats.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
"""
-Horizontal split example.
+Floats example.
"""
from prompt_toolkit.application import Application
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,