f85c746af0
"Cotejo" means nothing outside Spanish and is hard to pronounce elsewhere, so the project is now Kotej: same root, but it reads and sounds the same in English and Spanish. Renamed throughout — engine, targets, bundle ids and the URL scheme, which is now kotej://compare. Icon generated with Codex: two facing panels split by a seam, content lines on each side and one amber line marking a difference — the tool's job at a glance, still legible at 16pt. 34 tests still green; kotej:// verified end to end against the demo JARs. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UfhDYRLTpGJSKGP1m3LVJN
64 lines
2.6 KiB
Markdown
64 lines
2.6 KiB
Markdown
# Kotej
|
|
|
|
Comparador de ficheros, carpetas y **artefactos** (ZIP/JAR/EAR/WAR) para macOS.
|
|
Ligero, sin dependencias externas y con el motor aislado del interfaz.
|
|
|
|
## Qué lo diferencia
|
|
|
|
- **Los archivos son carpetas.** Un JAR, un EAR o un WAR se abren y comparan como
|
|
si fueran directorios, **incluido anidado** (EAR → JAR → clases).
|
|
- **Comparación semántica.** Dos JSON o dos XML que significan lo mismo no se
|
|
marcan como distintos aunque cambie el orden de claves, los atributos o el
|
|
formato. Y puedes exigir byte a byte cuando lo necesites.
|
|
- **Rápido por diseño.** La comparación es por niveles: el directorio central de
|
|
un ZIP ya trae CRC32 y tamaño de cada entrada, así que **dos JAR idénticos se
|
|
resuelven sin descomprimir nada**. Solo se lee el contenido que hace falta.
|
|
|
|
## Modos de comparación
|
|
|
|
| Modo | Cuándo |
|
|
|---|---|
|
|
| **Byte a byte** | Exactitud total; cualquier bit distinto cuenta |
|
|
| **Texto** | Tolera fin de línea, espacios finales, mayúsculas o líneas en blanco (configurable) |
|
|
| **Semántica** | JSON/XML equivalentes canónicamente, aunque los bytes difieran |
|
|
|
|
Por defecto cada fichero usa el modo que le corresponde según su tipo
|
|
(JSON/XML → semántica, texto → texto, resto → binaria).
|
|
|
|
## Integración con Finder
|
|
|
|
Con la app instalada, activa la extensión en **Ajustes del Sistema → General →
|
|
Elementos de inicio y extensiones → Extensiones de Finder → Kotej**. Después,
|
|
en el menú contextual del Finder:
|
|
|
|
- Selecciona **dos** elementos → *Comparar los 2 elementos con Kotej*
|
|
- O selecciona uno → *Seleccionar para comparar*, y en otro → *Comparar con “…”*
|
|
|
|
También responde a `kotej://compare?left=/ruta/a&right=/ruta/b`, que abre la
|
|
comparación en una pestaña.
|
|
|
|
## Pestañas
|
|
|
|
Cada pestaña es una comparación independiente, con su propio estado y opciones.
|
|
`⌘T` abre una, `⌘W` la cierra. Una comparación que llega desde el Finder reutiliza
|
|
la pestaña actual si está vacía, y si no abre otra: nunca pisa lo que estabas
|
|
comparando.
|
|
|
|
## Estado
|
|
|
|
- ✅ **Motor** (`KotejEngine`): lector ZIP propio, escaneo de árboles, archivos
|
|
anidados, comparación por niveles, comparadores binario/texto/JSON/XML y diff
|
|
de líneas.
|
|
- ✅ **App** SwiftUI: **pestañas** (varias comparaciones en una ventana),
|
|
comparación vacía con arrastrar y soltar, árbol side-by-side, filtro "solo
|
|
diferencias", diff de fichero y resumen.
|
|
- ✅ **Idiomas**: sigue el del sistema, con **inglés y español** incluidos.
|
|
- ✅ **Extensión de Finder**.
|
|
- ⏳ Licencia por decidir; CLI para CI pendiente.
|
|
|
|
## Desarrollo
|
|
|
|
```bash
|
|
swift test
|
|
```
|