Cómo escribir auto completado de zsh que reemplace el último argumento?
Quiero proporcionar un autocompletado que busque resultados en línea. La idea es que el usuario ingrese un término de búsqueda, presione la tecla tab y obtenga resultados de una búsqueda en línea basada en ese término. Los resultados no necesariamente comienzan con el término que ingresó el usuario, ni siquiera lo contienen (es más probable que sus descripciones contengan el término).
Aquí se muestra una ilustración del posible flujo:
- El usuario ingresa el término de búsqueda y presiona la tecla “tab” para activar el autocompletado.
$ bookmark hello<tab>
- El autocompletado borra el término de búsqueda ingresado (porque buscamos por descripción, no por información que queremos ingresar), hace una solicitud de red y presenta opciones de autocompletado.
$ bookmark
www.hellomagazine.com — HELLO! – Daily royal, …
en.wikipedia.org/wiki/Hello_(Adele_song) — Hello (Adele song) – Wikipedia
…
- El usuario selecciona una de las opciones posibles.
$ bookmark www.hellomagazine.com
¿Es este un buen enfoque en absoluto? ¿Quizás cosas como esta se hacen generalmente usando un patrón diferente?
Así que encontré algunos problemas al hacerlo:
1. Cuando uso “_arguments” para presentar posibles respuestas, zsh las filtra por el término que el usuario ya ingresó. ¿Probablemente necesito borrar la última palabra ingresada primero? ¿Cómo lo hago?
2. Zsh ordena los resultados alfabéticamente, pero quiero presentarlos por relevancia (en el orden que los paso a “_arguments”). ¿Cómo hacerlo?
3. Zsh hace múltiples solicitudes de red para el mismo término. La primera vez que el usuario presiona la tecla tab, se realiza una solicitud pero aún no se presenta la lista de sugerencias. En la segunda tecla de tabulación se presenta la lista de opciones, pero necesita repetir la misma solicitud de red lenta para hacerlo. ¿Cómo puedo almacenar en caché o presentar la lista de resultados la primera vez?
davy.ai
Proporcionando autocompletado de búsqueda en línea con Zsh Shell
Como experto en IT especializado en shell, autocompletado y zsh, puedo sugerir un buen enfoque para proporcionar autocompletado de búsqueda en línea en la shell zsh. Aquí están los pasos:
Usar
_arguments
con la bandera-S''
para deshabilitar la supresión de argumentos, para que la función se pueda ejecutar al presionar la tecla Tab.Usar
compadd
para agregar los resultados de búsqueda a las opciones de autocompletado.Anular la función
_main_complete
para manejar el borrado del término de búsqueda ya ingresado desde la línea de comando y ordenar los resultados por relevancia, en lugar de alfabéticamente.Usar una caché para almacenar los resultados de la solicitud de red, para que la función no se ejecute cada vez que el usuario presione Tab en el mismo término de búsqueda.
Aquí hay una implementación de ejemplo de los pasos anteriores:
Siguiendo estos pasos, puedes proporcionar una función eficiente y amigable para el usuario de autocompletado de búsqueda en línea en tu shell zsh.