Lf fájlkezelő kedvcsináló

Segítséget kaptál? Szívesen töltöd itt az idődet? Visszajársz hozzánk? Támogasd a munkákat: Ko-fi és Paypal!

Az lf egy rangerre hajazó fájlkezelő, de annál lényegesen gyorsabb és stabilabb, a koncepció alapja a minimalizmus. Az lf minimális funkcionalitással bír (gyk. a coreutils köré épülve), de minden megoldható vele, ehhez viszont komolyan hekkülni kell, tehát a "bekapcsolom és használom" típusú felhasználók itt abba is hagyhatják az olvasást. Gyakorlatilag az lfrc konfigurációs állományban történik minden, parancsokat, billentyűkötéseket definiálhatunk egy shell szkript formájában.

Előnézetek generálására is lehetőségünk van, külső szkriptet, vagy hozzám hasonlóan a kimondottan az lf-hez készült remek ctpv-t használva (Debian alatt a fordításához a libmagic-dev és a libssl-dev csomagok kellenek), elérhető itt: https://github.com/NikitaIvanovV/ctpv

A fájlok megnyitása a rendszer alapértelmezett programjaival történik (én így használom), de lehetőség van a ranger-féle rifle használatára is (export OPENER='rifle').

Nézzük az lfrc fájlomat!

# Berus lfrc

# ───────────────────────────────
# Általános beállítások
# ───────────────────────────────

set hidden         true          # rejtett fájlok mutatása alapból
set preview        true          # előnézet panel engedélyezése
# set icons          true        # ikonok bekapcsolása (külön icons fájllal)
set ignorecase     true          # kis/nagybetű ne számítson
set scrolloff      3             # 3 sor margó a kurzor körül
# set ratios         1:2         # bal panel (könyvtárfa) : jobb panel (előnézet)
set info           size:time     # infósáv: fájlméret + módosítási idő
set dircounts      true          # könyvtárakban fájlok számát is írja ki
set sortby         natural       # természetes (emberi) rendezés
set reverse        false         # rendezés növekvő legyen
set number                       # sorszám be
set drawbox true                 # keret be
set incsearch                    # keresés gépeléskor

# Shell beállítása

set shell bash
set shellopts '-eu'
set ifs "\n"

# Prompt formátum (felső sor)

set promptfmt "\033[1;32m%u@%h\033[0m:\033[1;34m%d\033[0m %f"

# ───────────────────────────────
# Billentyűleképezések
# ───────────────────────────────

# Alap navigáció

map <c-l>   redraw
map <esc>   clear
map <space> toggle
map <insert> toggle
map u       unselect
map *       invert
map zh      set hidden!
map <enter> open

# Fájlműveletek

map <f-5>    copy
map <f-6>    cut
map <f-9>    paste
map <f-8>    delete
map <delete> delete
map <f-2>    rename
map a        rename
map R        reload

# Shell parancsok

map E       $gvim $f        # aktuális fájl megnyitása szerkesztővel
map e       $vim $f         # aktuális fájl megnyitása szerkesztővel
map <f-4>   $vim $f         # aktuális fájl megnyitása szerkesztővel
map O       $xdg-open $f    # megnyitás alapértelmezett alkalmazással
map <f-3>   $most $f        # fájl megtekintése lapozóval
map s       $bat --style=plain --paging=always $f  # színes megtekintés (bat-tal)

# Kijelöltek tömörítése/tömörítés kicsomagolása

# map za      %zip -r archive.zip $fx
# map zx      %unzip $f
# map zt      %tar -czvf archive.tar.gz $fx
# map zu      %tar -xzvf $f

# Kicsomagolás (atool)

cmd extract ${{
    set -f
    atool -x $fx
}}

# Fájl kukába helyezése (trash-cli kell hozzá)

cmd trash %trash-put $fx

map D trash

# Gyors ugrás könyvtárakhoz

map gb cd ~
map gc cd ~/.config
map gp cd ~/Adatok/dotfiles/home/berus/

# ───────────────────────────────
# Egyéni parancsok
# ───────────────────────────────

# Gyors keresés fzf-fel

cmd fzf_jump ${{
    res="$(find -L . -mindepth 1 | fzf)"
    [ -n "$res" ] && lf -remote "send $id select \"$res\""
}}

map f fzf_jump

# Könyvtár létrehozása

cmd mkdir %mkdir "$@"

map m push :mkdir<space>
map <f-7> push :mkdir<space>

# Beillesztés felűlírással

cmd overwrite &{{
set -f
mode=$(head -1 ~/.local/share/lf/files)
list=$(sed 1d ~/.local/share/lf/files)
set -- _ $list; shift
[ $# -gt 0 ] || exit
case $mode in
copy)
rsync -r "$@" ./
;;
move)
rsync -r --remove-source-files "$@" ./
;;
esac
lf -remote 'save\nmove\n'
lf -remote "send $id load"
lf -remote "send $id echo \"\033[0;32mpasted $# file(s)\033[0m\""
}}

map o overwrite

# Gyors előnézet generálás (ctpv használatával)

set previewer ctpv
set cleaner ctpvclear
&ctpv -s $id
&ctpvquit $id

Az "Általános beállítások" rész szerintem elég egyértelmű, a set ratios 1:2 paranccsal pl. kétpaneles módra válthatunk.

A promptnál ANSI színkódokat használunk, a mutatók pedig a következőek:

  %u - Felhasználónév
  %h - Hostname
  %d - Aktuális könyvtár
  %f - Kijelölt fájl(ok)
  %t - Kijelölt fájlok száma
  %s - Könyvtárban lévő fájlok száma
  %p - Kijelölés százalékban

"Billentyűleképezések": formátum map gomb parancs. Teljesen felforgathatjuk az alapértelmezéseket, ahogy én meg is tettem.

Alapvető navigáció (eredeti):

  Nyíl billentyűk vagy h,j,k,l - Navigálás a fájlok között
  Enter - Belépés könyvtárba vagy fájl megnyitása
  Backspace vagy h - Visszalépés szülő könyvtárba
  gg - Ugrás a lista elejére
  G - Ugrás a lista végére
  Space - Fájl kijelölése/megjelölése
  y - Kijelölt fájlok másolása
  d - Kijelölt fájlok áthelyezése
  Del - Kijelölt fájlok törlése
  R - Fájl/mappa átnevezése
  / - Fájl keresése
  n - Következő találat
  N - Előző találat

A kuka használatához a trash-cli programra van szükségünk. Nálam a D billentyű a kukába helyez, Del ill. F8 töröl.

"Egyéni parancsok": az fzf gyorskeresés és könyvtár létrehozása elég egyértelmű. A "Beillesztés felülírással" már érdekesebb téma.
Alapértelmezésben ha már létező fájlt másolunk nem kérdez rá hogy mit tegyen, egyszerűen átnevezi a fájlt és a meglévő mellé írja; ez így elég kényelmetlen tud lenni.
Az itt látható hekkülés ezt a problémát oldja meg, o billentyűre felül írja a meglévő fájlt (az rsync kell hozzá; lehet nálam okosabbaknak van erre egyszerűbb megoldása, de ez nekem müxik).

Belső parancsok futtatásához : gomb, shell parancsokhoz $.

Kedvcsinálónak ennyi elég is, szkript írogatásban járatosaknak a végtelen lehetőségek tárháza, a többiek meg a 2. mondatnál úgyis abbahagyták az olvasást; szerintem egy remek programocska remek koncepcióval, én szinte folyamatosan bizergálom, hogy még kézreesőbb legyen!

Az lf GitHub oldala: https://github.com/gokcehan/lf

 

Berus