1. Como funciona el sistem de plugins de Far Manager?

Primer debemos entender que Far Manager no es unicamente un explorador de archivos. Es una aplicacion extensible que permite que otros programas aniadan nuevas funcionalidades a su interfaz.

Por ejemplo, un plugin puede:

  • Agregar opciones al menu F11.
  • Crear paneles virtuales para explorar archivos ZIP, bases de datos u otros formatos.
  • Interceptar determinados eventos del teclado dentro del editor.
  • Leer o modificar el contenido del editor.
  • Mostrar dialogos, menus y resultados.
  • Ejecutar herramientas externas.
  • Procesar archivos seleccionados.

Arquitectura de un plugin

Sabemos que una DLL (Dynamic Link Library) es un archivo que contiene codigo ejecutable y funciones que otros programas pueden utilizar.

Por ejemplo, si desarrollamos algo en C++.

int sumar(int a, int b) {
 return a + b;
}

Podemos compilarlo dentro de una DLL. Sin embargo, crear una DLL no la convierte automaticamente en un plugin de Far Manager.

Debemos implementar las funciones y estructuras que exige su API.

Cuando Far Manager descrubre el plugin, puede obtener su informacion, inicializarlo y llamar a sus funciones para responder a eventos.

Esto se conoce como una arquitectura bada en plugins y callbacks.

2. Que encontramos en los archivos de TrueTemplate?

Revisando la documentacion, la configuracion y las DLL que contenia el ZIP de True Template. La distribucion esta organizada en varios componentes.

ArchivoFuncion
true-tpl.x64.dllPlugin compilado para Windows de 64 bits.
true-tpl.x86.dllPlugin compilado para Windows de 32 bits.
true.tpl.xmlConfiguracion principal de plantillas.
true-tpl.x64.iniValores persistentes, como contadores y cadenas.
true-tpl.eng.lngMensajes en ingles.
true-tpl.rus.lngMensajes en ruso.
true-tpl.txtDocumentacion tecnica detallada.
WHATSNEW.TXTHistorial de cambios y correciones.
Ademas true-tpl.xml esta codificado en UTF-16LE.

Algo importante que mecionar

La configuracion principal contiene estar tres inclusiones:

<TrueTpl>
  <Include File="templates\source\true-source.xml"/>
  <Include File="templates\text\true-text.xml"/>
  <Include File="templates\true-default.xml"/>
</TrueTpl>

Eso significa que True Template no almacena todas las plantillas en su DLL, sino que carga reglas y plantillas definidas en archivos externos.

Por tanto, para instalarlo correctamente necesitamos tambien el directorio templates del ZIP original. No basta con copiar unicamente los archivos que estan dentro de la carpeta.

Esto tiene una ventaja enorme: podemos agragar nuevas funciones de expansion sin recompilar el plugin.

3. Analice las funciones exportadas por TrueTemplate

Podemos inspeccionar directamente la DLL de 64 bits, mediante su tabla de exportaciones PE.

sudo apt-get install wine64-tools
 
winedump -j export archivo.dll

FuncionPara que sirve?
ConfigureWPermite configurar sus opciones.
ExitFARWGestiona el cierre del plugin.
GetGlobalInfoWIdentiica el plugin, su version y requisitos.
GetPluginInfoWDescribe como aparece en los menus.
OpenWAtiende solicitudes de apertura del plugin.
ProcessEditorEventWRecibe eventos del editor.
ProcessEditorInputWInterviene en el procesamiento de teclado y raton.
SetStartupInfoWRecibe los servicios de Far Manager.

Como se comunican?

Imagina que abres un archivo programa.cpp y escribes i seguido de un espacio.

Este es un flujo conceptual basado en las funciones y caracteristicas documentadas.

La diferencia entre eventos y funcione invocables

Hay dos modelos importantes que debemos aprender:

1. Plugins activados explicitamente

El usuario abre F11, selecciona nuestro plugin y Far Manager incova una funcion como OpenW.

Por ejemplo, un plugin que calcula el SHA-256 de un archivo seleccionado.

2. Plugins que repsonden a eventos

Far Manager comunica determinados acontecimientos a una funcion del plugin.

Por ejemplo, ProcessEditorInputW recibe informacion de entrada del editor. Esto permite implementar funciones como expansion de plantillas y atajos personalizados.

TrueTemplate utiliza ambos mecanismos.

4. Como crearemos nuestros propios plugins?

Tenemos diferentes alternativas, pero no todas tienen las mismas ventajas.

TecnologiaVentaja principalEvaluacion
C++Acceso directo a la API y muchos ejemplos existentesIdeal para aprender
RustSeguridad de memoria y control de bajo nivelBuena alternativa
Python mediante puenteDesarrollo rapido de automatizacionesUtil para prototipoos
Lua / macrosPersonalizacion y automatizacion sin compilar DLL propiasIdeal para tareas sencillas

5. Empecemos con un plugin sencillo

  • Hash inspector: Seleccionar un archivo y calcular sus hashes MD5, SHA-1 y SHA-256 sin salir de Far Manager. Seria un excelente primero proyecto util.

6. Recursos para comenzar

plugin.hpp oficial
Ejemplos de plugins de Far Manager
AdvCmpEx
Codigo fuente de TrueTemplate