Addressed Telescope TODO; enhanced Telescope search

This commit is contained in:
2026-03-21 17:19:10 -05:00
parent d6e0823e21
commit 511138316a
3 changed files with 80 additions and 27 deletions

View File

@@ -1,6 +1,7 @@
___ ___
### Add ### Add
1. Add Godot LSP Client 1. Add Godot LSP Client
1. Add TreeSitter
1. Add Collapsable code blocks 1. Add Collapsable code blocks
1. Add Plugin to <Shift\><Ctrl\>| and <Ctrl\>| to split views up, down, left, right 1. Add Plugin to <Shift\><Ctrl\>| and <Ctrl\>| to split views up, down, left, right
1. Add <Ctrl\>i to **lsp_manager** to list who implements xyz 1. Add <Ctrl\>i to **lsp_manager** to list who implements xyz
@@ -9,10 +10,9 @@ ___
### Change ### Change
1. Make **telescope** plugin a generic base to allow query mode additions through plugins 1. Make **telescope** plugin a generic base to allow query mode additions through plugins
1. Make **lsp_manager** hard coded values configurable, plus add fields to UI 1. Make **lsp_manager** hard coded values configurable, plus add fields to UI
___ ___
### Fix ### Fix
- Fix **telescope** search selection when items hidden such that
hidden items don't get selected on up/down key
- Fix to make acive tab on **tabs_bar** scroll to center - Fix to make acive tab on **tabs_bar** scroll to center
- Fix **file_state_watcher** to prompt refrsh if external changes applied - Fix **file_state_watcher** to prompt refrsh if external changes applied
- Fix on lsp client unload to close files lsp side and unload server endpoint - Fix on lsp client unload to close files lsp side and unload server endpoint

View File

@@ -45,6 +45,7 @@ class ListBox(Gtk.ListBox):
def _row_activated(self, list_box, row = None): def _row_activated(self, list_box, row = None):
row = self.get_selected_row() row = self.get_selected_row()
if not row: return
file = row.get_children()[0].file file = row.get_children()[0].file
event = Event_Factory.create_event( event = Event_Factory.create_event(
@@ -70,25 +71,63 @@ class ListBox(Gtk.ListBox):
def search_changed(self, entry): def search_changed(self, entry):
self.search_buffer_names(entry) self.search_buffer_names(entry)
for row in self.get_children(): for row in self.get_children():
if not row.is_visible(): continue if not row.is_visible(): continue
self.select_row(row) self.select_row(row)
break
def fuzzy_score(self, query, text):
query = query.lower()
text = text.lower()
score = 0
q_idx = 0
for char in text:
if q_idx < len(query) and char == query[q_idx]:
score += 1
q_idx += 1
return score if q_idx == len(query) else 0
def search_buffer_names(self, entry): def search_buffer_names(self, entry):
text = entry.get_text() query = entry.get_text().lower()
if not text: rows = []
for row in self.get_children():
row.show()
return
for row in self.get_children(): for row in self.get_children():
child = row.get_children()[0] child = row.get_children()[0]
label_text = child.get_label()
score = self.fuzzy_score(query, label_text) if query else 1
child.label_text = label_text if not hasattr(child, "label_text") else child.label_text
row.show() \ rows.append((score, row, child, label_text))
if text in child.get_label() else \
rows.sort(key = lambda x: x[0], reverse = True)
for score, row, child, label_text in rows:
if query and score > 0:
highlighted = self.highlight_match(label_text, query)
child.set_markup(highlighted)
row.show()
elif not query:
child.set_label(child.label_text)
row.show()
else:
row.hide() row.hide()
def highlight_match(self, text, query):
i = 0
result = ""
for char in text:
if i < len(query) and char.lower() == query[i].lower():
result += f"<b><i><u>{char}</u></i></b>"
i += 1
else:
result += char
return result
def activate_row(self): def activate_row(self):
self._row_activated(self) self._row_activated(self)
@@ -97,29 +136,43 @@ class ListBox(Gtk.ListBox):
def move_row_selection_up(self): def move_row_selection_up(self):
row = self.get_selected_row() row = self.get_selected_row()
next_row = self.get_row_at_index(row.get_index() - 1) if not row: return
if not next_row: rows = [r for r in self.get_children() if r.is_visible()]
next_row = self.get_row_at_index( if not rows: return
len( self.get_children() ) - 1
)
self.select_row(next_row) try:
idx = rows.index(row)
except ValueError:
return
next_idx = (idx - 1) % len(rows)
self.select_row(rows[next_idx])
def move_row_selection_down(self): def move_row_selection_down(self):
row = self.get_selected_row() row = self.get_selected_row()
next_row = self.get_row_at_index(row.get_index() + 1) if not row: return
if not next_row: rows = [r for r in self.get_children() if r.is_visible()]
next_row = self.get_row_at_index(0) if not rows: return
self.select_row(next_row) try:
idx = rows.index(row)
except ValueError:
return
next_idx = (idx + 1) % len(rows)
self.select_row(rows[next_idx])
def add_row(self, file): def add_row(self, file):
row = Gtk.ListBoxRow()
label = Gtk.Label(label = file.fname) label = Gtk.Label(label = file.fname)
label.file = file label.file = file
label.show()
self.add(label) row.add(label)
row.show_all()
self.add(row)
def remove_row(self, event): def remove_row(self, event):
for row in self.get_children(): for row in self.get_children():

BIN
src/newton.zip Normal file

Binary file not shown.