Skip to content

Commit 4d89a19

Browse files
committed
update suggestion method
1 parent dcc495a commit 4d89a19

File tree

5 files changed

+33
-2
lines changed

5 files changed

+33
-2
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
2626
- Added `DOMNode.displayed_children` https://github.com/Textualize/textual/pull/6070
2727
- Added `TextArea.UserInsert` message https://github.com/Textualize/textual/pull/6070
2828
- Added `TextArea.hide_suggestion_on_blur` boolean https://github.com/Textualize/textual/pull/6070
29+
- Added `OptionList.highlighted_option` property
30+
- Added `TextArea.update_suggestion` method
2931

3032
### Changed
3133

src/textual/_compositor.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -630,7 +630,10 @@ def add_widget(
630630
placement_scroll_offset = placement_offset - widget.scroll_offset
631631

632632
placements = [
633-
placement.process_offset(size.region, placement_scroll_offset)
633+
placement.process_offset(
634+
no_clip if styles.overlay == "screen" else size.region,
635+
placement_scroll_offset,
636+
)
634637
for placement in placements
635638
]
636639

src/textual/widgets/_footer.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,8 @@ def compose(self) -> ComposeResult:
256256
self.app.get_key_display(binding),
257257
"",
258258
binding.action,
259+
disabled=not enabled,
260+
tooltip=tooltip or binding.description,
259261
classes="-grouped",
260262
).data_bind(Footer.compact)
261263
yield FooterLabel(group.description)

src/textual/widgets/_option_list.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,18 @@ def option_count(self) -> int:
311311
"""The number of options."""
312312
return len(self._options)
313313

314+
@property
315+
def highlighted_option(self) -> Option | None:
316+
"""The currently highlighted options, or `None` if no option is highlighted,
317+
318+
Returns:
319+
An Option, or `None`.
320+
"""
321+
if self.highlighted is not None:
322+
return self.options[self.highlighted]
323+
else:
324+
return None
325+
314326
def clear_options(self) -> Self:
315327
"""Clear the content of the option list.
316328

src/textual/widgets/_text_area.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -662,6 +662,9 @@ def notify_style_update(self) -> None:
662662
self._line_cache.clear()
663663
super().notify_style_update()
664664

665+
def update_suggestion(self) -> None:
666+
"""An hook to update suggestions."""
667+
665668
def check_consume_key(self, key: str, character: str | None = None) -> bool:
666669
"""Check if the widget may consume the given key.
667670
@@ -1074,6 +1077,7 @@ def load_text(self, text: str) -> None:
10741077
self.history.clear()
10751078
self._set_document(text, self.language)
10761079
self.post_message(self.Changed(self).set_sender(self))
1080+
self.update_suggestion()
10771081

10781082
def _on_resize(self) -> None:
10791083
self._rewrap_and_refresh_virtual_size()
@@ -1534,7 +1538,10 @@ def edit(self, edit: Edit) -> EditResult:
15341538
Data relating to the edit that may be useful. The data returned
15351539
may be different depending on the edit performed.
15361540
"""
1537-
self.suggestion = ""
1541+
if self.suggestion.startswith(edit.text):
1542+
self.suggestion = self.suggestion[len(edit.text) :]
1543+
else:
1544+
self.suggestion = ""
15381545
old_gutter_width = self.gutter_width
15391546
result = edit.do(self)
15401547
self.history.record(edit)
@@ -1551,8 +1558,11 @@ def edit(self, edit: Edit) -> EditResult:
15511558

15521559
self._refresh_size()
15531560
edit.after(self)
1561+
15541562
self._build_highlight_map()
15551563
self.post_message(self.Changed(self))
1564+
self.update_suggestion()
1565+
15561566
return result
15571567

15581568
def undo(self) -> None:
@@ -1616,6 +1626,7 @@ def _undo_batch(self, edits: Sequence[Edit]) -> None:
16161626
edit.after(self)
16171627
self._build_highlight_map()
16181628
self.post_message(self.Changed(self))
1629+
self.update_suggestion()
16191630

16201631
def _redo_batch(self, edits: Sequence[Edit]) -> None:
16211632
"""Redo a batch of Edits in order.
@@ -1664,6 +1675,7 @@ def _redo_batch(self, edits: Sequence[Edit]) -> None:
16641675
edit.after(self)
16651676
self._build_highlight_map()
16661677
self.post_message(self.Changed(self))
1678+
self.update_suggestion()
16671679

16681680
async def _on_key(self, event: events.Key) -> None:
16691681
"""Handle key presses which correspond to document inserts."""

0 commit comments

Comments
 (0)