63 KiB
Contenido
- Instalación
- Configuración
- Ejecutando comandos como plugin [!]
- Nivel de acceso de los complementos
- Cree sus propios complementos
- Ejemplos
- Muestra el registro git de los cambios realizados en el archivo concreto junto con el código para una revisión rápida y sencilla.
- Cambio de directorio en el portapapeles mediante script de ayuda
- Cambiar el directorio a la ubicación de un enlace utilizando un script de ayuda con un contexto específico (actual)
- Cambiar a un directorio arbitrario sin script de ayuda
- Enviar todos los archivos sobre los que se pase el ratón a la selección X
- Búsqueda (find) rápida de la primera coincidencia en el subárbol y abrir en nuke
- Búsqueda rápida (usando fd)
- Búsqueda rápida con grep usando gr
- Contribuyendo plugins
Introducción
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.
Listado de Complementos
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
- Un plugin tiene que solicitar explícitamente a nnn que borre la selección, por ejemplo, después de operar con los archivos seleccionados.
- Los archivos que comienzan con un punto en el directorio de plugins son archivos internos y no deben utilizarse como plugins.
- »
- Instalación
Instalación
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.
- »
- Configuración
Configuración
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
- 'g:personal/convert2zoom' buscará en la subcarpeta personal dentro de la carpeta del complemento.
- 'b:boom;b:bulknew' hará que sólo se use la primera definición de b (b:boom).
- Una definición de keybinding de más de 1 carácter impedirá que se inicie nnn.
Omitir la actualización del directorio después de ejecutar un complemento [-]
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'
- »
- Ejecutando comandos como plugin [!]
Ejecutando comandos como 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.
Omitir la confirmación del usuario tras la ejecución del comando [*]
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.
Ejecutar una aplicación GUI como complemento [&]
¡Para ejecutar una aplicación GUI como complemento, añada & después de !.
1
export NNN_PLUG='m:-!&mousepad "$nnn"'
Página de salida de comandos no interactivos [|]
¡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
- Coloque $nnn (o las variables exportadas) entre comillas dobles ("$nnn").
- Use comillas simples para $NNN_PLUG para que no se interprete "$nnn".
- (De nuevo) añada ! antes del comando.
- ¡Para desactivar la actualización de directorios después de ejecutar un comando como plugin, anteponga -!
Algunos ejemplos útiles de comandos de teclado
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é. |
- »
- Nivel de acceso de los complementos
Nivel de acceso de los complementos
Cuando nnn ejecuta un complemento, hace lo siguiente:
- Cambia el directorio donde se va a ejecutar el complemento ($PWD apunta al directorio activo).
- Pasa tres argumentos al script:
- $1: El nombre del fichero sobre el que se pasa el cursor.
- $2: El directorio de trabajo (puede diferir de $PWD en caso de rutas con enlaces simbólicos; no canónico).
- $3: El archivo de salida del modo selector (- para stdout (salida estándar)) si nnn se ejecuta como selector de archivos.
- Establece la variable de entorno NNN_PIPE usada para controlar el directorio nnn activo.
- Establece la variable de entorno NNN_INCLUDE_HIDDEN a 1 si los archivos ocultos están activos, 0 en caso contrario.
- Establece la variable de entorno NNN_PREFER_SELECTION a 1 si el usuario prefiere utilizar la selección (véase la bandera -u de nnn), 0 en caso contrario.
- Exporta las Variables Especiales.
Los complementos también pueden leer el archivo .selection en el directorio config.
- »
- Cree sus propios complementos
Cree sus propios complementos
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.
Envío de datos a nnnn
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.
Recibir una notificación al pasar el ratón por encima de un archivo
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.
- »
- Ejemplos
Ejemplos
Hay muchos plugins proporcionados por nnn que se pueden utilizar como ejemplos. He aquí algunos ejemplos sencillos seleccionados.
Muestra el registro git de los cambios realizados en el archivo concreto junto con el código para una revisión rápida y sencilla.
1
2
3
#!/usr/bin/env sh
git log -p -- "$1"
Cambio de directorio en el portapapeles mediante script de ayuda
1
2
3
4
5
#!/usr/bin/env sh
. $(dirname $0)/.nnn-plugin-helper
nnn_cd "$(xsel -ob)"
Cambiar el directorio a la ubicación de un enlace utilizando un script de ayuda con un contexto específico (actual)
1
2
3
4
5
#!/usr/bin/env sh
. $(dirname $0)/.nnn-plugin-helper
nnn_cd "$(dirname $(readlink -fn $1))" 0
Cambiar a un directorio arbitrario sin script de ayuda
1
2
3
4
5
6
#!/usr/bin/env sh
printf "cd to: "
read -r dir
printf "%s" "0c$dir" > "$NNN_PIPE"
Enviar todos los archivos sobre los que se pase el ratón a la selección X
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
Búsqueda (find) rápida de la primera coincidencia en el subárbol y abrir en nuke
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
Búsqueda rápida (usando fd)
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
Búsqueda rápida con grep usando gr
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
- »
- Contribuyendo plugins
Contribuyendo plugins
- Añada secciones informativas como Descripción, Notas, Dependencias, Shell, Autor, etc. en el plugin.
- Añada una entrada en la tabla anterior. Tenga en cuenta que la lista está ordenada alfabéticamente por el nombre del plugin.
- Mantenga los comandos no portables (como notify-send) comentados para que los usuarios de cualquier otro SO/DE no se sorprendan.
- El archivo del plugin debe ser ejecutable.
- Si su plugin almacena datos, use ${XDG_CACHE_HOME:-$HOME/.cache}/nnn. Documéntelo en el archivo.
© Copyright Tano 2.023
Generated by gendoc v1.0.0