Traducción al Español que llevé a cabo sobre lo citado en su repositorio.
Los plugins amplían las capacidades de nnn. Son scripts ejecutables (o binarios) con los que nnn puede comunicarse y activar. Este mecanismo encaja perfectamente con el diseño fundamental para mantener el núcleo del gestor de archivos ligero y rápido, delegando tareas repetitivas (pero no necesariamente específicas del gestor de archivos) a los plugins que se pueden ejecutar con teclas de acceso rápido personalizadas.
nnn es agnóstico en cuanto al lenguaje de los plugins. Puede escribir un plugin en cualquier lenguaje (de scripting) en el que se sienta cómodo.
Complemento [a-z] | Descripción | Leng | Dependencias |
---|---|---|---|
autojump | Navega hasta dir/ruta | sh | jump, autojump, zoxide, z, z.lua |
boom | Reproduce música aleatoria del dir | sh | moc |
bulknew | Crea varios archivos/directorios a la vez | bash | sed, xargs, mktemp |
cdpath | cd al directorio desde CDPATH | sh | fzf |
chksum | Crea y verifica sumas de comprobación | sh | md5sum, sha256sum |
cmusq | Pone en cola/reproducir archivos/directorios en el reproductor cmus | sh | cmus pgrep |
diff | Diff para la selección (limitado a 2 para los directorios) | sh | vimdiff, mktemp |
dragdrop | Arrastrar/soltar archivos desde/hacia nnn | sh | dragon |
dups | Lista de archivos duplicados no vacíos en el directorio actual | bash | find, md5sum, sort uniq xargs |
finder | Ejecuta comando find personalizado (almacenado en histfile) y lista. | sh | - |
fixname | Limpia el nombre del archivo para que sea más fácil de usar. | bash | sed |
fzcd | Búsqueda difusa en varios directorios (o $PWD) y visita al archivo | sh | fzf, (find) |
fzhist | Selecciona un cmd del historial, edítalo en $EDITOR y ejecútalo | sh | fzf, mktemp |
fzopen | Búsqueda difusa de archivos en el subárbol para editarlos/abrirlos/elegirlos. | sh | fzf, xdg-open/open |
fzplug | Fuzzy encuentra, previsualiza y ejecuta otros plugins | sh | fzf |
getplug | Actualiza plugins a la versión nnn instalada | sh | curl |
gitroot | Cambia a la raíz del repositorio git actual | sh | git |
gpge | Cifrar/descifrar archivos mediante GPG | sh | gpg |
gutenread | Navega, descarga, lee desde el Proyecto Gutenberg | sh | curl, unzip, w3m epr (opcional) |
gsconnect | Implementación de kdeconnect en GNOME. | sh | gsconnectp |
imgresize | Redimensiona por lotes las imágenes en dir a la resolución de pantalla. | sh | imgp |
imgur | Sube una imagen a imgur (desde imgur-screenshot). | bash | - |
imgview | Ver imágenes (en miniatura), establece fondos de pantalla, renombra y mucho más. | sh | Consulte la documentación del archivo. |
ipinfo | Obtiene la dirección IP externa y la información whois | sh | curl, whois |
kdeconnect | Envía los archivos seleccionados a un dispositivo Android. | sh | kdeconnect-cli |
launch | Lanzador de aplicaciones GUI. | sh | fzf |
mimelist | Listar archivos por mime en el subárbol. | sh | - |
moclyrics | Mostrar la letra de la canción que se reproduce en el moc | sh | ddgr, moc |
mocq | Cola/reproducir selección/dir/archivo en moc. | sh | moc |
mp3conv | Extraer audio de multimedia como mp3 | sh | ffmpeg |
mtpmount | Alternar montaje de dispositivo MTP (ej. Android) | sh | gvfs-tmp |
nback | Realiza una copia de seguridad de nnn config. | sh | tar, awk, mktemp |
nmount | Conmutar el estado de montaje de un dispositivo como usuario normal. | sh | pmount, udisks2 |
nuke | Abridor de archivos de ejemplo (sólo CLI por defecto). | sh | Véase la documentación del archivo |
oldbigfile | Listar archivos grandes por tiempo de acceso. | sh | find, sort |
openall | Abre los archivos seleccionados. juntos o uno a uno. | bash | - |
organize | Organizar automáticamente los archivos en directorios por tipo de archivo. | sh | file |
pdfread | Lee en voz alta un PDF o un archivo de texto. | sh | pdftotext, mpv, pico2wave |
preview-tabbed | Vista previa de archivos con Tabbed/xembed. | bash | Véase la documentación del archivo. |
preview-tui | Vista previa con Tmux. kitty, QuickLook, xterm, $TERMINAL. | sh | Véase la documentación del archivo. |
pskill | Lista difusa por nombre y matar proceso o zombi. | sh | fzf, ps, sudo/doas |
renamer | Renombra por lotes una selección o archivos en dir. | sh | qmv/vidir |
ringtone | Crea un tono de llamada mp3 con tasa de bits variable a partir de un archivo. | sh | date, ffmpeg |
rsynccp | Proporciona el porcentaje de progreso en modo verboso de acciones copiar y pegar. | sh | rsync |
splitjoin | Dividir archivo o unir selección. | sh | split, cat |
suedit | Editar archivo con permisos de superusuario | sh | sudoedit, sudo, doas |
togglex | Conmuta el modo ejecutable para la selección | sh | chmod2 |
umounttree | Desmonta un punto de montaje remoto desde. | sh | fusermount |
upload | Sube a Firefox Send o ix.io (texto) o file.io (bin). | sh | ffsend, curl, jq, tr |
x2sel | Copia lista de archivos del portapapeles del sistema a la selección. | sh | Consulte la documentación del archivo. |
xdgdefault | Establece la aplicación predeterminada para el tipo de archivo sobre el que se pasa el cursor. | sh | xdg-utils, fzf, dmenu |
Nota
El siguiente comando instala o actualiza (después de la copia de seguridad) todos los plugins:
1
sh -c "$(curl -Ls https://raw.githubusercontent.com/jarun/nnn/master/plugins/getplugs)"
Los complementos se instalan en ${XDG_CONFIG_HOME:-$HOME/.config}/nnn/plugins.
Configure la variable de entorno NNN_PLUG para asignar combinaciones de teclas e invocar plugins directamente utilizando el atajo de teclado del plugin (;) seguido del carácter de tecla asignado. Por ejemplo, con la siguiente configuración:
1
export NNN_PLUG='f:finder;o:fzopen;p:mocq;d:diffs;t:nmount;v:imgview'
plugin finder puede invocarse con la combinación de teclas ;f, fzopen puede ejecutarse con ;o y así sucesivamente... Los pares de teclas y plugins se muestran en la ayuda y en la pantalla de configuración.
Alternativamente, se puede combinar con Alt (es decir, Alt+tecla).
Para seleccionar y ejecutar un complemento no asignado, pulse Enter (para entrar en el directorio del plugin) en el indicador del plugin.
Para ejecutar un plugin al inicio, utilice la opción -P seguida de la tecla del complemento.
Si la lista de plugins es demasiado larga, pruebe a dividirlos en secciones:
NNN_PLUG_PERSONAL='g:personal/convert2zoom;p:personal/echo' NNN_PLUG_TRABAJO='j:trabajo/prettyjson;d:trabajo/foobar' NNN_PLUG_ENLINEA='e:!go run "$nnn"*' NNN_PLUG_PORDEFECTO='1:ipinfo;p:preview-tui;o:fzz;b:nbak' NNN_PLUG="$NNN_PLUG_PERSONAL;$NNN_PLUG_TRABAJO;$NNN_PLUG_PORDEFECTO;$NNN_PLUG_ENLINEA" export NNN_PLUG
Nota
nnn actualiza el directorio después de ejecutar un plugin para reflejar cualquier cambio realizado por el plugin. Para desactivarlo, añada un - antes del nombre del complemento:
1
export NNN_PLUG='p:-plugin'
Para asignar claves a comandos cli arbitrarios que no estén en segundo plano e invocarlos como plugins, añada ! antes del comando.
1
export NNN_PLUG='x:!chmod +x "$nnn";g:!git log;s:!smplayer "$nnn"'
Ahora ;x puede usarse para hacer ejecutable un archivo, ;g puede usarse para el git log de un directorio de proyecto git, ;s puede usarse para previsualizar un archivo multimedia parcialmente descargado.
nnn espera la confirmación del usuario (el prompt Press Enter to Continue (Pulse Enter para continuar)) después de ejecutar un comando como complemento (a diferencia de los complementos que pueden añadir un read para esperar). Para omitir esto, añada un * después del comando.
1
export NNN_PLUG='s:!smplayer "$nnn"*;n:-!vim /home/tano/Dropbox/Publico/nota_sincronizada*'
Ahora no habrá prompt después de ;s y ;n.
Nota
No use * con programas que se ejecutan y salen, por ejemplo, cat.
¡Para ejecutar una aplicación GUI como complemento, añada & después de !.
1
export NNN_PLUG='m:-!&mousepad "$nnn"'
¡Para mostrar la salida de comandos de ejecución y salida que no necesitan la entrada del usuario, añada | (pipe, tubería) después de !.
1
export NNN_PLUG='m:-!|mediainfo "$nnn";t:-!|tree -ps;l:-!|ls -lah --group-directories-first'
Esta opción es incompatible con & (la salida del terminal se enmascara para los programas GUI) e ignora * (la salida ya está paginada para el usuario).
Importante
tecla:comando | Descripción |
---|---|
c:!convert "$nnn" png:- | xclip -sel clipboard -t image/png* | Copiar imagen al portapapeles. |
C:!cp -rv "$nnn" "$nnn".cp | Crear una copia del archivo cuando el puntero pasa sobre él. |
e:-!sudo -E vim "$nnn"* | Editar archivo con vim como superusuario. |
g:-!git diff | Muestra diferencias en el estado de un repositorio git. |
h:-!hx "$nnn"* | Muestra archivo sobrevolado en el editor hexadecimal hx. |
k:-!fuser -kiv "$nnn"* | Matar proceso interactivamente usando el archivo sobre el que se desplaza el puntero del mouse. |
l:-!git log | Muestra log de repositorio git. |
n:-!vi /home/usuario/Dropbox/dir/nota* | Toma notas rápidas en un archivo/directorio de notas sincronizado. |
p:-!less -iR "$nnn"* | Navega el archivo sobre el que se pasa el puntero del mouse usando el paginador less. |
s:-!&smplayer -minigui "$nnn" | Reproducir archivos multimedia sobrevolados, incluso descargas inacabadas. |
x:!chmod +x "$nnn" | Hacer ejecutable el archivo sobrevolado. |
y:-!sync* | Vaciar/limpiar escrituras en caché. |
Cuando nnn ejecuta un complemento, hace lo siguiente:
Los complementos también pueden leer el archivo .selection en el directorio config.
Los complementos pueden escribirse en cualquier lenguaje de programación. Sin embargo, se prefieren los scripts de shell compatibles con POSIX ejecutables en sh.
Haga que el archivo sea ejecutable. Colóquelo en el directorio de complementos. Opcionalmente, añada una tecla de acceso rápido en $NNN_PLUG para uso frecuente.
nnn proporciona un mecanismo para que los complementos envíen datos a nnn para controlar su directorio activo o invocar el modo lista. La forma de hacerlo es escribiendo en la tubería apuntada por la variable de entorno NNN_PIPE. El complemento debe escribir una única cadena en el formato (<->)<ctxcode><opcode><data> sin una nueva línea al final. Por ejemplo, 1c/etc.
El caracter - opcional al principio de la cadena indica a nnn que borre la selección. En los casos en que la transferencia de datos a nnn tenga que ocurrir mientras se lee el archivo de selección (por ejemplo, en un bucle), el complemento debe crear una copia tmp del archivo de selección, informar a nnn para que borre la selección y luego hacer el procesamiento subsiguiente con el archivo tmp. Un cmd paginado [|] o GUI [&] ejecutado como complemento no puede borrar la selección.
El ctxcode indica el contexto para cambiar el directorio activo de.
Código de contexto | Significado |
---|---|
+ | Contexto inteligente (próximo inactivo si no actual). |
0 | Contexto actual. |
1-4 | Número de contexto. |
El opcode indica el tipo de operación.
Opcode | Operación |
---|---|
c | Cambia de directorio. |
l | Muestra archivos en modo lista. |
p | Archivo de selección sobrescrito. |
Para facilitar el proceso, hemos creado un script de ayuda llamado .nnn-plugin-helper y una función llamada nnn_cd. nnn_cd recibe la ruta a la que se va a cambiar como primer argumento y el contexto como segundo argumento opcional. Si no se proporciona un contexto, se solicita explícitamente. Para saltarse esto y elegir el contexto actual, establezca la variable CUR_CTX en .nnn-plugin-helper (o en el complemento específico después de obtener .nnn-plugin-helper) a 1. Puede encontrar ejemplos de uso en la sección Ejemplos.
Si se establece NNN_FIFO, nnn lo abrirá y escribirá todos los archivos sobre los que se pase el ratón. Esto se puede utilizar en complementos y scripts externos, por ejemplo, para implementar vistas previas de archivos.
No olvide bifurcar en segundo plano para evitar el bloqueo de nnn.
Para más detalles sobre la configuración y uso de los complementos de previsualización, visite Live Previews.
Hay muchos plugins proporcionados por nnn que se pueden utilizar como ejemplos. He aquí algunos ejemplos sencillos seleccionados.
1
2
3
#!/usr/bin/env sh
git log -p -- "$1"
1
2
3
4
5
#!/usr/bin/env sh
. $(dirname $0)/.nnn-plugin-helper
nnn_cd "$(xsel -ob)"
1
2
3
4
5
#!/usr/bin/env sh
. $(dirname $0)/.nnn-plugin-helper
nnn_cd "$(dirname $(readlink -fn $1))" 0
1
2
3
4
5
6
#!/usr/bin/env sh
printf "cd to: "
read -r dir
printf "%s" "0c$dir" > "$NNN_PIPE"
1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env sh
if [ -z "$NNN_FIFO" ] ; then
exit 1
fi
while read FILE ; do
printf "%s" "$FILE" | xsel
done < "$NNN_FIFO" &
disown
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/env sh
NUKE="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/plugins/nuke"
printf "file name: "
read -r pattern
entry=$(find . -type f -iname "$pattern" -print -quit 2>/dev/null)
if [ -n "$entry" ]; then
"$NUKE" "$entry"
fi
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env sh
. "$(dirname "$0")"/.nnn-plugin-helper
printf "pattern: "
read -r pattern
if [ -n "$pattern" ]; then
printf "%s" "+l" > "$NNN_PIPE"
eval "fd -HI $pattern -0" > "$NNN_PIPE"
fi
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env sh
. "$(dirname "$0")"/.nnn-plugin-helper
printf "pattern: "
read -r pattern
if [ -n "$pattern" ]; then
printf "%s" "+l" > "$NNN_PIPE"
eval "rg -l0 --hidden -S $pattern" > "$NNN_PIPE"
fi