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: Devuelve colecciones en memoria con cero coste de E/S.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 IAliasProvider e ITranslationProvider.
Puntos clave de implementación
- Límites de alfabetos (
InputRanges/OutputRanges): Declara los bloques ideográficos CJK como 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. - Combinaciones polifónicas (
GetAliases(text)): Construye un mapa silábico y genera combinaciones unidas por|(hasta un máximo de 32 para evitar saturación), permitiendo búsquedas paralelas. - 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 plugins de la comunidad Flow Launcher.
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 entornos de Python y Node.js en la carpeta de datos de Lertaro y se comunica mediante tuberías con nombre usando JSON-RPC sin modificar la variable PATH.
- 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.