Lf második felvonás

enlightened Ez az oldal a közösségért készül. heart Kövess minket máshol is:  Linux Mint Magyar Közösség a Mastodon-on  Telegram csatorna – csak hírek  Beszélgessünk a Telegram – Linux csevegő csoport  Hírek olvasása RSS segítségével  Linux Mint Hivatalos Magyar Közösség a Facebook-on      Linux Mint Baráti Kör a Facebook-on
wink Ha hasznosnak találod, és szeretnéd, hogy folytatódjon, támogasd a munkát Ko-fi vagy Paypal segítségével. laugh

Ez egy ilyen időszak, és persze ismétlés a dudás anyja, vagy valami ilyesmi...

Szóval a második kedvenc fájlkezelőmnél (Vifm ruleZZZ!), az lf-nél is újragondolás van! A legfőbb ok, hogy a (egyébként zseni) ctpv előnézeti eszközhöz a fejlesztője évek óta nem igazán nyúl, és kezd meggyűlni a baja az újkori protokollokkal (pl. Wayland), így sajnos el kellett engednem...
Innentől igazi lf mókerré kellett válnom, és az egész koncepciót manuálisan összeütött konfigurációra építeni; vége a kényelmes Nikita majd megoldja helyettünk korszaknak...
Nyilván innentől kompromisszumos a dolog, pl. hogy ne keljen az összes terminál típusra külön képelőnézeti szkriptet kiagyalni, maradt öreg barátunk a chafa, kicsit darabos, kicsit kockás, de legalább a mienk, és mindegy neki milyen terminál van alatta (és a cleaner szkript nélkül is jól elvan).

De az eltelt időt nem töltöttem tétlenül, pár dologban kiokosodtam, van fejlődés is! Barátunk a denevér, vagyis a bat (mindnképpen telepítsük), a szöveges előnézeteket felturbóztam vele, az fzf integráció is fejlődött, mint ahogy a másoláskor felülírást végző rész apróbb problémái is javításra kerültek (köszi Skynet), és került bele egy tömeges átnevezést végző szakasz is (szerkesztőben megnyíló módszer, Vim, Kakoune használata erősen javasolt). Természetesen a konfig is tisztogatáson, csinosítgatáson esett át.
Fontos (!), mivel lusta vagyok felsorolni (és nem biztos hogy mindenki ezeket szereti, de bat, fd, chafa és trash-cli kell!), alaposan nézzétek át a konfigot és a preview szkriptet, és telepítsétek a hivatkozott alkalmazásokat, vagy az általatok kedvelt alternatívákat!

A konfigurációs állomány (~/.config/lf/lfrc):

# =========================
# ALAP BEÁLLÍTÁSOK
# =========================

set shell sh
set shellopts '-eu'
set hidden true
set number true
#set relativenumber true
set cursorpreviewfmt "\033[7m"
set icons true
set drawbox true
set ignorecase true
set smartcase true
set incsearch true
set preview true
set info size:time
set ratios 1:2:3
set mouse true

# =========================
# ELŐNÉZETI SZKRIPT
# =========================

#set cleaner ~/.config/lf/cleaner
set previewer ~/.config/lf/preview

# =========================
# BILLENTYŰK
# =========================

# funkció törlés
map y
map d
map m

map gh cd ~
map gp cd ~/Adatok/Pontfájlok/
map gc cd ~/.config/

map <c-u> half-up
map <c-d> half-down

map zh set hidden!

map <f-4>   $kak $f
map <f-3>   $most $f

# =========================
# FÁJL MŰVELETEK
# =========================

# mkdir
map <f-7> push %mkdir<space>
map md push %mkdir<space>

# MC szerű

map <f-5> copy
map yy copy
map <f-6> cut
map dd cut
map <f-9> paste
map <f-8> delete
map DD delete
map <delete> delete
map <f-2> rename

# =========================
# ARCHÍVUMOK
# =========================

cmd extract ${{
    case "$f" in
        *.tar.bz2) tar xjf "$f" ;;
        *.tar.gz) tar xzf "$f" ;;
        *.bz2) bunzip2 "$f" ;;
        *.rar) unrar x "$f" ;;
        *.gz) gunzip "$f" ;;
        *.tar) tar xf "$f" ;;
        *.tbz2) tar xjf "$f" ;;
        *.tgz) tar xzf "$f" ;;
        *.zip) unzip "$f" ;;
        *.7z) 7z x "$f" ;;
    esac
}}

map E extract

# =========================
# FZF INTEGRÁCIÓ
# =========================

cmd fzf ${{
    file="$(
        fd --hidden --exclude .git |
        fzf --preview 'bat --color=always {}'
    )"

    if [ -n "$file" ]; then
        lf -remote "send $id cd \"$(dirname "$file")\""
        lf -remote "send $id select \"$(basename "$file")\""
    fi
}}

map F fzf

# =========================
# GYORS ELŐNÉZET
# =========================

map zp set preview!

# =========================
# RENDEZÉS
# =========================

map sn set sortby natural
map ss set sortby size
map st set sortby time

# =========================
# VÁGÓLAP WAYLAND
# =========================

map Y %printf "%s" "$f" | wl-copy

# =========================
# KUKA
# =========================

cmd trash %trash-put "$fx"

map T trash

# =========================
# ZIP 
# =========================

cmd zip ${{
    printf "archive name: "
    read ans
    zip -r "$ans.zip" $fx
}}

map Z zip

# =========================
# KONFIG BETÖLTÉS
# =========================

map C source ~/.config/lf/lfrc

# =========================
# KILÉPÉS
# =========================

map Q quit

# =========================
# TÖMEGES ÁTNEVEZÉS
# =========================

cmd bulkrename ${{
    old="$(mktemp)"
    new="$(mktemp)"

    if [ -n "$fs" ]; then
        printf '%s\n' "$fs" | while IFS= read -r f; do
            basename "$f"
        done > "$old"
    else
        find . -maxdepth 1 -mindepth 1 -printf '%P\n' > "$old"
    fi

    cp "$old" "$new"

    kak "$new"

    [ "$(wc -l < "$old")" -ne "$(wc -l < "$new")" ] && {
        rm -f "$old" "$new"
        exit 1
    }

    paste "$old" "$new" |
    while IFS="$(printf '\t')" read -r src dst; do
        [ "$src" = "$dst" ] && continue
        [ -e "$dst" ] && continue

        mv -- "$src" "$dst"
    done

    rm -f "$old" "$new"

    lf -remote "send $id reload"
}}

# =========================
# FELÜLÍRÁS
# =========================

cmd overwrite ${{

    mode="$(head -1 ~/.local/share/lf/files)"
    tail -n +2 ~/.local/share/lf/files | while IFS= read -r file; do

        case "$mode" in

            copy)
                rsync -a "$file" ./
                ;;

            move)
                rsync -a --remove-source-files "$file" ./
                ;;

        esac

    done

    lf -remote "send $id load"
    lf -remote "send $id echo done"

}}

map P overwrite

# =========================
# KÜLSŐ PROGRAMOK
# =========================

cmd open ${{

    mime="$(file --mime-type -Lb "$f")"

    case "$(basename "$f")" in

        # markdown
        *.md)
            marker "$f" >/dev/null 2>&1 &
            ;;

        # media
        *.png|*.jpg|*.jpeg|*.gif|*.webp)
            imv "$f" >/dev/null 2>&1 &
            ;;

        *.mp4|*.mkv|*.webm|*.avi)
            mpv "$f" >/dev/null 2>&1 &
            ;;

        *.mp3|*.flac|*.ogg)
            mpv "$f" >/dev/null 2>&1 &
            ;;

        *.pdf)
            zathura "$f" >/dev/null 2>&1 &
            ;;

        *.html)
            firefox "$f" >/dev/null 2>&1 &
            ;;

        # dotfiles
        .*)
            kak "$f"
            ;;

        *)
            case "$mime" in

                text/*|*/xml|application/json)
                    kak "$f"
                    ;;

                *)
                    xdg-open "$f" >/dev/null 2>&1 &
                    ;;
            esac
            ;;
    esac
}}

map o open
map <enter> open

Az előnézeti szkript (~/.config/lf/preview):

#!/bin/sh

file="$1"
w="$2"
h="$3"

mime=$(file --mime-type -Lb "$file")

# thumbnail cache
cache="/tmp/lf-preview"

mkdir -p "$cache"

preview_image() {
    chafa \
        --format symbols \
        --symbols block+border \
        --fill block \
        --size "${w}x${h}" \
        "$1"
}

case "$mime" in

    image/*)
        preview_image "$file"
        ;;

    application/pdf)

        pdftotext \
            -l 10 \
            "$file" - 2>/dev/null | \
            bat \
                --language=txt \
                --style=plain \
                --color=always
        ;;
    
    video/*)

        thumb="$cache/$(basename "$file").jpg"

        if [ ! -f "$thumb" ]; then
            ffmpegthumbnailer \
                -i "$file" \
                -o "$thumb" \
                -s 0 >/dev/null 2>&1
        fi

        preview_image "$thumb"
        ;;

    text/*)
        bat --color=always "$file"
        ;;

    *)
        file "$file"
        ;;
esac

Az lf nagy kedvenc, úgy alakítgatod ahogy csak akarod, tényleg nincs lehetetlen, csak idő és türelem legyen hozzá elég!

Első felvonás: https://linuxmint.hu/blog/2025/10/lf-fajlkezelo-kedvcsinalo

Berus