Ir al contenido

Buscador

Un buscador sobre una lista de resultados en una superficie flotante: la base de la paleta de comandos y del buscador de archivos. ui.fuzzy_filter(query, items, key=) ordena los elementos (el mejor primero) y devuelve [(item, positions), ...]; pasa esos pares a picker para resaltar las coincidencias. ui.fuzzy_match puntúa una cadena y ui.highlighted dibuja una con sus coincidencias.

ui.picker · Categoría: Capas flotantes · Referencia completa →

BuscadorBuscador
  • Para tus propios buscadores: archivos, símbolos, ramas, proyectos, emoji.
import pyzed as pz
from pyzed import ui
class Finder(pz.App):
def __init__(self):
self.query, self.selected = "", 0
self.files = ["src/app.rs", "src/render.rs", "README.md"]
def view(self):
matches = ui.fuzzy_filter(self.query, self.files)
items = [(ui.PaletteItem(f, lambda f=f: self.open(f), icon="file"), positions)
for f, positions in matches[:50]]
return ui.picker(self.query, lambda q: setattr(self, "query", q), items,
selected=self.selected, placeholder="Search files…")
Buscador: Con coincidenciasBuscador: Con coincidencias
Con coincidencias
Código
files = ["src/app.rs", "src/render.rs", "app.py"]
items = ui.fuzzy_filter("app", [ui.PaletteItem(f, on_open, icon="file-code") for f in files],
key=lambda item: item.label)
ui.picker("app", on_query, items, width=380)
Buscador: empty_text=Buscador: empty_text=
empty_text=
Código
ui.picker("zzz", on_query, [], empty_text="No files match", width=380)
Buscador: PaletteItem(detail=)Buscador: PaletteItem(detail=)
PaletteItem(detail=)
Código
ui.picker("", on_query, [(ui.PaletteItem("main", on_open, icon="git-branch", detail="2 hours ago"), []),
(ui.PaletteItem("docs", on_open, icon="git-branch", detail="yesterday"), [])], width=380)
Buscador: ui.highlightedBuscador: ui.highlighted
ui.highlighted
Código
t = pz.theme.current()
score, positions = ui.fuzzy_match("tgsw", "editor: toggle soft wrap")
ui.highlighted("editor: toggle soft wrap", positions, color=t.text, match_color=t.accent, size=15)

fuzzy_match devuelve (score, positions) o None; highlighted pinta esas posiciones.

Buscador: Resaltar coincidenciasBuscador: Resaltar coincidencias

Buscador tiene 2 eventos propios, en la tabla de abajo. Como todo widget, también tiene los 18 eventos comunes (click, double_click, right_click, mouse_enter, drag, key_down, resize…), que se conectan con .on(...): mira Eventos y Eventos de cada componente.

Evento El handler recibe Cuándo
on_query (text) Callable que recibe el texto nuevo.
on_submit () Mensaje o callable que se envía al pulsar Enter.

El handler recibe es lo que Pyzed le pasa a tu función: () es nada. Cualquier handler también puede ser un mensaje (un valor que no se puede llamar), que va a update().

Los mismos eventos escritos de tres formas. Imperativa: métodos de la app que cambian self. Declarativa: los handlers producen mensajes y un único update() decide. Funcional: una función pura dibuja un estado inmutable y pide cambios con set_state(...). Mira Imperativo, declarativo y funcional.

class Finder(pz.App):
def __init__(self):
self.query, self.opened = "", None
self.files = ["src/app.rs", "src/render.rs", "README.md"]
def matches(self):
return ui.fuzzy_filter(self.query, self.files)
def open_first(self): # on_submit: Enter
found = self.matches()
self.opened = found[0][0] if found else None
def view(self):
items = [(ui.PaletteItem(f, lambda f=f: setattr(self, "opened", f), icon="file"), positions)
for f, positions in self.matches()]
return ui.picker(self.query, lambda q: setattr(self, "query", q), items, # on_query
on_submit=self.open_first, placeholder="Search files…")
picker(
query,
on_query,
items,
*,
selected=0,
placeholder='Search…',
input_id='picker',
on_submit=None,
width=560,
max_height=340,
empty_text='No matches',
theme=None,
)

Una lista con buscador en una superficie flotante. Es la base de la paleta y del buscador de archivos.

Propiedad Por defecto Descripción
query obligatorio Texto buscado.
items obligatorio Pares (PaletteItem, posiciones), por ejemplo de fuzzy_filter.
selected 0 Índice resaltado.
placeholder "Search…" Texto de ayuda cuando está vacío.
input_id "picker" Id del campo.
width 560 Ancho: píxeles, "fill", "shrink" o "fill:N" (proporción).
max_height 340 Alto máximo en píxeles.
empty_text "No matches" Texto cuando no hay resultados.
theme None Tema a usar en lugar del actual (pyzed.theme.current()).

Eventos: on_query, on_submit (eventos).

Referencia completa →

fuzzy_filter(query, items, key=<class 'str'>)

Filtra y ordena items por puntuación difusa. Devuelve [(item, posiciones), ...].

Propiedad Por defecto Descripción
query obligatorio Texto buscado.
items obligatorio Elementos.
key <class 'str'> Función que da el texto de cada elemento.

Referencia completa →

fuzzy_match(query, candidate)

Devuelve (puntuación, posiciones) si todas las letras de query aparecen en orden en candidate; si no, None. Premia los inicios de palabra y las letras consecutivas.

Propiedad Por defecto Descripción
query obligatorio Texto buscado.
candidate obligatorio Texto candidato.

Referencia completa →

highlighted(text, positions, *, color, match_color, size=13.5, weight=None)

Texto con los caracteres de positions resaltados (coincidencias de la búsqueda difusa).

Propiedad Por defecto Descripción
text obligatorio Texto.
positions obligatorio Índices a resaltar.
color obligatorio Color del texto o del icono.
match_color obligatorio Color de las coincidencias.
size 13.5 Tamaño.
weight None Peso del texto.

Referencia completa →