Ejemplos de plugins
Para ayudar a los desarrolladores a comprender cómo interactúan las interfaces de Lertaro.PluginSdk, este capítulo analiza cuatro plugins representativos incluidos en el repositorio de Lertaro.
1. CoreExtensions —— Acciones, menús Shell y Panel rápido
El plugin CoreExtensions constituye el paquete de extensiones principal de Lertaro e implementa IPlugin, IActionProvider, IConfigurable y varios proveedores secundarios.
Puntos clave de implementación
- Acciones estáticas (
IActionProvider.GetActions()): Registra acciones esenciales sobre archivos, como abrir y ubicar elementos, copiar rutas y archivos, añadir a Favoritos, cambiar nombres, usar la consola, eliminar y ejecutar como Administrador. - Integración con menús Shell de Windows (
IDynamicActionProvider): Se comunica con las interfaces COM del Shell medianteShellMenuActionProvider, renderizando menús contextuales completos (con submenús como "Enviar a", 7-Zip, VS Code) dentro del menúCtrl+O. - Formularios de configuración por esquemas (
IConfigurable): Define esquemas con grupos anidados (Group), listas de cadenas (StringList) y asignación de atajos (Hotkey), generando formularios nativos en Configuración sin escribir XAML. - Pestañas para el Panel rápido (
IQuickPanelTabProvider):FavoritesTabProvider/HistoryTabProvider: sirven los favoritos y el historial que el anfitrión ya tiene cargados, en lugar de volver a leerlos del disco; la consulta del historial se despacha fuera del hilo de interfaz (Task.Run), así que invocar el panel nunca espera por ella.WindowsRecentTabProvider: Recorre la carpetaRecenten segundo plano, resuelve accesos directos COM y añadeMetadata.Modifiedpara su ordenación.LastDirectoryTabProvider/RecentFilesTabProvider: Consulta directamenteExplorerPathServiceyRecentFilesServicedel anfitrión.
2. PinyinAlias —— Motor de transliteración para caracteres no ASCII
PinyinAlias proporciona búsqueda por pinyin completo y siglas para nombres de archivos en chino, implementando IAliasLiveMatcherProvider (una IAliasProvider) e ITranslationProvider.
Puntos clave de implementación
- Límites de alfabetos (
InputRanges/OutputRanges): Declara un único rango ideográfico CJK (U+3007–U+9FFD) como límite de entrada ya–zen minúsculas como salida, permitiendo dividir consultas mixtas en segmentos literales y de alias. - Comprobación previa rápida (
CanHandle(text)): Detecta si el texto contiene caracteres chinos antes de generar alias, devolviendofalseinmediatamente para cadenas en inglés. - Coincidencia de lecturas en vivo (
IAliasLiveMatcherProvider): las lecturas ya no se escriben en el índice. El plugin construye un comparador bit-paralelo inmutable por término de búsqueda (2–63 letras/dígitos ASCII) y el host lo ejecuta sobre los caracteres del propio candidato: cada carácter consume un prefijo no vacío de una de sus lecturas, así que una coincidencia es siempre un tramo contiguo y un nombre polifónico no ocupa nada extra.GetAliases(text)ya solo emite la escritura simplificada de un nombre tradicional. - Localización incrustada y caché segura: Traduce el nombre del plugin mediante
ITranslationProvidery almacena los JSON analizados en un diccionario protegido conlock.
3. FlowLauncherBridge —— Compatibilidad entre ecosistemas y entornos aislados
El plugin FlowLauncherBridge demuestra la creación de un sistema de puente a gran escala para integrar los ecosistemas externos de la comunidad en Lertaro.
Puntos clave de implementación
- Puente multiproceso y multilenguaje: Ejecuta plugins escritos en C# (.NET), Python 3.12, Node.js v20 LTS y binarios
.exe. - Entornos autónomos aislados: Despliega los entornos aislados de Python y Node.js bajo el directorio de datos compartido de Lertaro (
SharedDataDirectory\FlowData\PythonEmbeded-{arch}), no en la carpeta de datos de cada usuario. Cada plugin habla con su intérprete a través de la entrada/salida estándar redirigida que transporta JSON-RPC: no hay tubería con nombre y nunca se toca la variable PATH del sistema. - Formularios dinámicos y vistas previas en WebView2: Asigna formularios
SettingsTemplate.yaml/.jsonaPluginConfigSchemay renderiza tarjetas interactivas (diccionarios, tiempo, etc.) dentro de QuickLook.
4. FileUnlocker —— Acción para liberar la ocupación de archivos
FileUnlocker muestra un plugin de acción especializada que consulta la ocupación de archivos mediante Windows Restart Manager y solicita su liberación.
Puntos clave de implementación
- Restricción de selección única: Solo ofrece la acción para un archivo existente seleccionado, evitando solicitudes ambiguas sobre carpetas o selecciones múltiples.
- Información de procesos: Muestra el nombre, PID y ruta del ejecutable de cada proceso que usa el archivo, con una opción de actualización para los cambios de estado.
- Liberación mediante solicitud: Solicita a los procesos implicados que liberen el archivo y desactiva el botón si no se detecta ningún proceso o hay una operación en curso.
- Marco de ventana del anfitrión: Aloja la vista WPF en el diálogo
PluginWindowadaptado al tema del SDK, sin duplicar en el plugin la gestión del tema, DPI, barra de tareas o Alt+Tab.