Control de proyectos locales en Go con TUI interactiva, cache local y comandos rapidos.
Repositorio: https://github.com/jad21/pj.git
pj esta pensado para el flujo diario: registrar proyectos, buscarlos en una vista bonita y entrar rapido a trabajar.
- Catalogo local de proyectos con persistencia (
bbolt, sin servidor). - Busqueda y filtro en TUI con datos de Git y tamano.
- Acceso rapido por nombre (
pj <name>). - Operaciones de mantenimiento (
add,del,rename, limpieza de caches pesados). - Inicio rapido: muestra cache primero y refresca metadatos en segundo plano.
go install github.com/jad21/pj/cmd/pj@v0.1.1curl -sf https://goblin.run/github.com/jad21/pj | CMD_PATH="/cmd/pj" shOpcional (sin sudo, instala en el home):
curl -sf https://goblin.run/github.com/jad21/pj | CMD_PATH="/cmd/pj" PREFIX="$HOME/.local/bin" shVerificar:
pj --helpgit clone https://github.com/jad21/pj.git
cd pj
go install ./cmd/pjSi pj no se encuentra en la terminal, agregar el binario de Go al PATH:
export PATH="$PATH:$(go env GOPATH)/bin"Desde el root del proyecto:
go build -o "$GOPATH/bin/pj" ./cmd/pjVerificar:
pj --help# Agrega el directorio actual
pj add .
# Agrega varios paths de una vez
pj add ~/codes/app1 ~/codes/app2 /tmp/demo
# Agrega todos los subdirectorios inmediatos
pj add -a .
# Agrega subdirectorios de varias bases
pj add -a ~/codes ~/work# Lista usando cache (rapido)
pj list
# Fuerza recalc de branch/commit/size antes de listar
pj list --refreshpj rename viejo nuevo
pj del nuevo
pj del /ruta/absoluta/del/proyecto# Interactivo: abre shell dentro del proyecto
pj catalog
# Solo path (scripts, pipes, subshell)
pj catalog --path
pj catalog -p
# Ejemplo clasico para cd
cd "$(pj catalog --path)"Si pj <name> no encuentra match exacto:
- Si hay una sola coincidencia por filtro, entra directo.
- Si hay varias (o ninguna), abre la TUI con ese filtro aplicado.
Sin editar ~/.bashrc, pj guarda la ultima ruta activa y puede reabrirla desde otra sesion:
# Abre shell en la ultima ruta guardada
pj last
# Solo imprime la ruta (para scripts)
pj last --pathDetalle: en shells bash, pj actualiza la ruta durante la sesion usando PROMPT_COMMAND; en otros shells guarda al menos la ruta inicial al entrar.
Ejecuta:
pjLa TUI muestra columnas:
NAMEBRANCHCOMMITLAST UPDATEDSIZE(humano)PATH
| Accion | Tecla |
|---|---|
| Buscar/filter | Escribir |
| Limpiar filtro / salir | Esc |
| Navegar | Flechas / rueda |
| Abrir shell en proyecto | Enter |
| Limpiar carpetas pesadas | Ctrl+L |
| Eliminar proyecto (con confirmacion) | Ctrl+D |
| Renombrar proyecto (dialogo) | Ctrl+N |
| Abrir con opener detectado | Ctrl+O |
| Ordenar por columna | Clic en titulo o F1..F6 |
| Invertir orden | Ctrl+R |
| Salir | Esc o Ctrl+C |
La accion de limpieza elimina, en la raiz del proyecto seleccionado:
.venvvenvnode_modules.cache
Luego recalcula y guarda el tamano actualizado.
En ~/.bashrc:
if command -v pj >/dev/null 2>&1; then
source <(pj completion bash)
alias repo='pj'
fiEl proyecto ya soporta completion de nombres para pj/pg leyendo cache (pj names --cached) para que TAB responda rapido.
Recargar shell:
source ~/.bashrcpj(TUI) inicia con datos en cache y actualiza metadatos en segundo plano.pj listusa cache por defecto.pj list --refreshrecalcula todo cuando hace falta precision inmediata.- Completion de nombres consulta cache, no recalcula metadatos.
- DB:
$XDG_DATA_HOME/pj/projects.db - Fallback:
~/.local/share/pj/projects.db
- No duplica proyectos por path.
- Tambien evita duplicados por symlink (
EvalSymlinks). - Los paths bajo home se muestran compactados como
~/...en listados/TUI.
- Go + Cobra (CLI)
- Bubble Tea + Lip Gloss (TUI)
- bbolt (DB local)
Este proyecto se distribuye bajo licencia MIT. Ver LICENSE.