Ranger előnézeti kép beállítása

Ranger
Ranger
A Ranger jobboldali panelje egy előnézeti panel, ahol a fájl tartalma vagy tulajdonságai jelennek meg. Ez a legtöbb esetben és alapbeállításnál igaz a szöveges állományokra. Ezenkívül bármilyen más állományra be kell állítani az előnézeti képet.
Az előnézeti kép itt csak a jobboldali panelben látható előnézet, nem pedig a megjelenítés, megnyitás lehetősége. A Ranger ezt kettéválasztja, két eltérő folyamatban kezeli.
Tipp: ha az előnézeti kép nem megfelelő, akkor próbáld megnyitni az állományt és úgy nézegetni. Bár nagyon fontos a Ranger jó beállítása, de esetleg egy, havi egyszer előkerülő fájltípus hosszadalmas előnézeti kép beállítása nem feltétlen szükséges. Az állományra állunk és az ENTER nyithatjuk meg. Illetve az r ar egy választási listát.
A beállítások relatív egyszerűek, pár helyen kell komolyabb munkát belefektetni. Ha valami nem megy, akkor a teljes konfigurációs könyvtár lementése után a google varázsod erejét hívjuk segítségül. Eddig mindenre adott választ.

Probléma esetén vegyük figyelembe, hogy a nézegető programocskák, a Python verzió, a használt terminál és maga a Ranger is változik. Így esetleg régebbi leírás már nem lesz működőképes.

Az összes fájltípus előnézetét a scope.sh konfigurációs fájl szabályozza. Ez egy normál shell szkript, és viselkedését részletesen dokumentálják a megjegyzésekben. Minden kellő mélységben dokumentált! A szerkesztése inkább pontosságot, mint komoly programozói tudást igényel.

Ha valami alap fájltípust nem, vagy nem jól jelenít meg a Ranger, akkor előbb az elvárt, ajánlott függőségeket nézzük végig. Bár az elején mi már minden elvárható eszközt felraktunk.

Alap scope.sh felépítés

Egy kódblokkot hozok példának, rövid, érthető:

## DjVu
image/vnd.djvu)
## Preview as text conversion (requires djvulibre)
djvutxt "${FILE_PATH}" | fmt -w "${PV_WIDTH}" && exit 5
exiftool "${FILE_PATH}" && exit 5
exit 1;;

A # a komment jele, magyarázat.
A image/vnd.djvu) a fájlformátum MIME nevét adja meg. Ez valami képi formátum (image) és vélhetően djvu kiterjesztésű. Ha új blokkot akarsz készíteni, akkor sem kell fejből tudni, itt megkeresheted.
A következő sorok adják meg a nézegető programot. Itt a djvutxt és a exiftool az a kettő, amit hozzárendeltek a fájltípushoz. Ha nem jelenik meg a nézegetőben, akkor ezt kikeresve telepíteni kell.
Nem is olyan nehéz a hibakeresés, ha picit odafigyel az ember.

Fontos Ranger jellemző!

Alap Ranger megoldás, hogy több programot is rendel egy-egy feladathoz. A felsorolás sorrendje adja a keresési sorrendet. Ha nem találja a djvutxt programot automatikusan a következőt használja, jelen esetben az exiftool-t. Ez lehetőséget ad a használati sorrend megadására: az a sor legyen elől amelyik programot használni akarjuk. Az eltérő nézegető, konvertáló programok eltérő minőséget, információt vagy kinézetet adhatnak, így van értelme a sorrend változtatásának!

A Ranger előkészítése

A szerkesztendő állomány az rc.conf , ahol #set preview_script ~/.config/ranger/scope.sh sort tudomásul vesszük, de nem nyúlunk hozzá. Ha más előnézeti szkriptet (pld. a scope.sh-t nagyon átírod) használnál, vagy máshova tetted az elérési útvonalat megadhatod. Ne tedd, csak ha tudod mit teszel.

set use_preview_script true

Ez már fontosabb bejegyzés, ezt leellenőrizzük, hogy true állásban van, és így használja a scope.sh-t. Általában abban lesz, de jó tudni, hogy ez az ami az előnézetet engedélyezi. Apró tipp:

:set use_preview_script false

a parancssorba máris kikapcsolja az összes előnézeti képet. Itt ne csak kép, vagy szövegre gondolj! Előnézeti "képként" lehetséges egy nagyon-nagyon nagy tömörítvény, pdf megtekintése is. Ezek lassíthatják a működést.

Sima szöveges állomány megjelenítése

A legegyszerűbb feladattal kezdünk, mert ez be lett állítva gyárilag. A legtöbb szöveg alapú fájl megfelelően regisztrálva van, és megjelenik. Ha a terminálod támogatja a színes, szintaxis kiemelt megjelenítést, és minden elvárt programot felraktál, akkor ez színes lesz és jól olvasható. Itt is kiemelem: használj modern terminált, ami együttműködik a Ranger-rel. Az életemet nagyon megkönnyíti a pld. a kitty, mert natívan megjeleníti a képeket a terminálban.

Komolyabb kihívás a képek megjelenítése. Igen, terminálban is megjeleníthető bármilyen kép, ha a Ranger jól van konfigurálva. Az eltérő terminálok és az eltérő megjelenítő eszközök miatt kisebb zökkenőkkel találkozhatunk, de eddig minden ideiglenesen előkerülő problémát meg tudtam oldani.

Képek megjelenítése Rangerben

Első lépésben érdemes átgondolni a terminálunk lehetőségeit. A Ranger urxvt, iTerm2, Kittyés Terminology képmegjelenítését támogatja, de a legtöbb modern terminálemulátorban sem lesz gond. A szerkesztendő állomány az rc.conf.

set preview_images true

Elsőként ezt leellenőrizzük, hogy engedélyezett a funkció.

set preview_images_method kitty

A bejegyzés felett normálisan leírták a lehetőségeket. Ha egy támogatott terminálemulátort használsz a dolgod egyszerű, megadod a terminált és működik is a képmegjelenítés. Bár nyilvánvaló, de ha támogatott terminált állítottál be más terminálban nem feltétlenül fog a képi megjelenítés működni!
Ezek további beállítás nélkül dolgoznak. Az iterm2-nél van két beállítási lehetőség, kitöltése értelmesszerű.

Ha más terminálemulátort használsz, akkor több lehetőséged van. Az egyik, ha az ueberzug képnézegetőt választod. Ez több disztribúcióban a csomagkezelőben elérhető. Ha nem, akkor van lehetőséged (Az ueberzug egy python csomag képek megjelenítésére különböző X11 terminálokon) pip (a python saját telepítője) módszerrel telepíteni.
Aki követte az ueberzug témát tudhatja, hogy ez a projekt megszűnt, nem fejleszti az eredeti programozó. Valószínűleg az ueberzug++ projekt veszi át a helyét.
Az ueberzug nem kíván további beállítást a telepítésen kívül.

Ha bármi miatt a fenti megoldás nem működik, akkor a w3m webböngésző képmegjelenítő részének (w3mimgdisplay) használatára is van mód. Ez eltérő néven szerepel (w3m-img Debian, Ubuntu, Linux Mint stb. alatt) különféle disztribúciók alatt.
A leírások szerint lehetnek problémák a megjelenítéssel, de én (Arch, Manjaro, MX Linux. Linux Mint) nem tapasztaltam problémát. A képeket jól megjeleníti, esetlegesen picit elcsúszva a jobb oldali panelon.
Itt a

set w3m_delay 0.02

késleltetés a kép megjelenítéséhez értéket emelni érdemes, ha a kép rosszul jelenik meg.

set w3m_offset 0

az eltolás értékét állítjuk be, ha a kép elcsúszva jelenik meg. Kis kísérletezés után már korrektül működik.
Ha a w3m program maga nem jelenít meg képeket, akkor a Ranger sem fogja megjeleníteni ebben a módban. Próbáld ki w3m xkcd.com vagy bármelyik honlap megadásával!
Néha fekete csíkok kerülnek a képek fölé. Ennek oka a w3mimgdisplay megbízhatatlan rajzolási mechanizmusa, egy megoldás lehet a

set draw_borders true

beállítása.

Úgy tűnik, hogy a w3m beállítás nem működik az xcompmgr-ral, esetleg más kompozítorral sem. A megoldás egyszerű: vagy kikapcsolod a kompozítálást, vagy másik képmegjelenítőt állítasz be.

A következő beállítások már több munkával járnak. Mielőtt nekiállsz kipróbálni a szerkeszteni kívánt fájlokból egy biztonsági másolatot készíts.

Ranger képmegjelenítése mpv-vel

Az mpv egy nagyon kezes videólejátszó program, amit be tudunk építeni a Ranger-be. Ehhez 0.25 vagy magasabb verziószámú kell. Meg tudod nézni a verziót mpv -V paranccsal.
Az mpv képelőnézeti módszer lehetővé teszi a Ranger számára, hogy egy külső klienst vezéreljen a média megtekintéséhez. Ennek a megközelítésnek az az előnye, hogy mind a képek, mind a videók egyetlen, külön ablakon osztoznak. Ehhez a ~/.config/ranger/commands.py állományt kell szerkeszteni:

import subprocess
import json
import atexit
import socket
from pathlib import Path

import logging
logger = logging.getLogger(__name__)
import traceback

from ranger.ext.img_display import ImageDisplayer, register_image_displayer

@register_image_displayer("mpv")
class MPVImageDisplayer(ImageDisplayer):
    """Implementation of ImageDisplayer using mpv, a general media viewer.
    Opens media in a separate X window.
    mpv 0.25+ needs to be installed for this to work.
    """

    def _send_command(self, path, sock):

        message = '{"command": ["raw","loadfile",%s]}\n' % json.dumps(path)
        s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
        s.connect(str(sock))
        logger.info('-> ' + message)
        s.send(message.encode())
        message = s.recv(1024).decode()
        logger.info('<- ' + message)

    def _launch_mpv(self, path, sock):

        proc = subprocess.Popen([
            * os.environ.get("MPV", "mpv").split(),
            "--no-terminal",
            "--force-window",
            "--input-ipc-server=" + str(sock),
            "--image-display-duration=inf",
            "--loop-file=inf",
            "--no-osc",
            "--no-input-default-bindings",
            "--keep-open",
            "--idle",
            "--",
            path,
        ])

        @atexit.register
        def cleanup():
            proc.terminate()
            sock.unlink()

    def draw(self, path, start_x, start_y, width, height):

        path = os.path.abspath(path)
        cache = Path(os.environ.get("XDG_CACHE_HOME", "~/.cache")).expanduser()
        cache = cache / "ranger"
        cache.mkdir(exist_ok=True)
        sock = cache / "mpv.sock"

        try:
            self._send_command(path, sock)
        except (ConnectionRefusedError, FileNotFoundError):
            logger.info('LAUNCHING ' + path)
            self._launch_mpv(path, sock)
        except Exception as e:
            logger.exception(traceback.format_exc())
            sys.exit(1)
        logger.info('SUCCESS')

A ~/.config/ranger/rc.conf állományban négy értéket kell beállítani:

set preview_images true
set preview_images_method mpv
set use_preview_script true
set preview_script ~/path/to/your/scope.sh

Az utolsó bejegyzés gyakorlatilag csak annyit tesz, hogy set preview_script ~/.config/ranger/scope.sh elől kiveszed a # jelet.
Ez a képeket egy külön ablakban (nem a jobb oldali panelben) jeleníti meg.

Képmegjelenítés imv-vel

Szintén a ~/.config/ranger/commands.py állományba illesszük be a

from ranger.ext.img_display import ImageDisplayer, register_image_displayer
from subprocess import Popen, PIPE, run
import time

@register_image_displayer("imv")
class IMVImageDisplayer(ImageDisplayer):
    """
    Implementation of ImageDisplayer using imv
    """
    is_initialized = False

    def __init__(self):
        self.process = None

    def initialize(self):
        """ start imv """
        if (self.is_initialized and self.process.poll() is None and
                not self.process.stdin.closed):
            return

        self.process = Popen(['imv'], cwd=self.working_dir,
                             stdin=PIPE, universal_newlines=True)
        self.is_initialized = True
        time.sleep(1)

    def draw(self, path, start_x, start_y, width, height):
        self.initialize()
        run(['imv-msg', str(self.process.pid), 'close'])
        run(['imv-msg', str(self.process.pid), 'open', path])

    def clear(self, start_x, start_y, width, height):
        self.initialize()
        run(['imv-msg', str(self.process.pid), 'close'])

    def quit(self):
        if self.is_initialized and self.process.poll() is None:
            self.process.terminate()

Majd a ~/.config/ranger/rc.conf

set preview_images true
set preview_images_method imv
set use_preview_script true
set preview_script ~/path/to/your/scope.sh

beállításával indítsuk újra a Ranger-t.

Ami fontos: a Ranger követi a Linuxos hagyományokat. Azonos feladathoz több eszközt is ad, kis eltéréssel. Neked kell a fentiek közül kiválasztani azt ami neked megfelel.

ANSII Art képek

Az ANSII Art "képek" szöveges képek, érdekes, de már ritkább művek. Az előnézeti képük beállítása egyszerű. Ehhez a libcaca programot használja, ami a img2txt csomag része. A csomag telepítése után szerkeszteni kell a ~/.config/ranger/rc.conf állományt.

set preview_images false
set use_preview_script true
set preview_script ~/path/to/your/scope.sh

A fontos beállítás a set preview_images false mert enélkül sima szövegként jelenítené meg a Ranger a képet. Ezzel kikapcsoljuk az összes előnézeti képet! Nem túl praktikus.

RAW fotók előnézete

Pár fényképezőgép típus - a Canon .CR2, Olympus .ORF, és a Sony .ARW - nyers fotóit jelentethetjük meg. Az exiftool csomag szükséges hozzá.

A scope.sh saját állományunkba az image/* blokk elé kell bemásolni az alábbi sorokat:

handle_image() {
    local mimetype="${1}"
    case "${mimetype}" in
        # SVG
        # image/svg+xml)
        #     convert "${FILE_PATH}" "${IMAGE_CACHE_PATH}" && exit 6
        #     exit 1;;

        # BEGIN SNIPPET
        image/x-canon-cr2|image/x-olympus-orf|image/tiff)
            local orientation
            # extract orientation from RAW file using exiftool (identify won't work)
            orientation=$( exiftool -b -Orientation "${FILE_PATH}")
            exiftool -b -PreviewImage "${FILE_PATH}" > "${IMAGE_CACHE_PATH}"
            if [[ -n "$orientation" && "$orientation" != 1 ]]; then
                # ...auto-rotate the image according to the EXIF data.
                exiftool -overwrite_original_in_place -Orientation="$orientation" -n "${IMAGE_CACHE_PATH}"
                mogrify -auto-orient "${IMAGE_CACHE_PATH}"
            fi
            exit 6;;
        # END SNIPPET

        # Image
        image/*)
            local orientation
            local orientation
            orientation="$( identify -format '%[EXIF:Orientation]\n' -- "${FILE_PATH}" )"

Újraindítás után már szépen mutatja a képeket.

PDF megjelenítése Ranger előnézetben

A PDF nagyon elterjedt formátum, az előnézeti képét a Ranger két formában támogatja. Az alap beállítás a szöveges megjelenítés, ahol a PDF fájlt átkonvertálja szöveggé és azt jeleníti meg. A másik megoldás a képpé való konvertálás.
A beállítások a scope.sh állományban lesznek.A szöveges megjelenítésnél több lehetséges programot felsorolnak, ezek egyike mindenképp kell.

 ## PDF
 pdf)
 ## Preview as text conversion
     pdftotext -l 10 -nopgbrk -q -- "${FILE_PATH}" - | \
         fmt -w "${PV_WIDTH}" && exit 5
     mutool draw -F txt -i -- "${FILE_PATH}" 1-10 | \
         fmt -w "${PV_WIDTH}" && exit 5
     exiftool "${FILE_PATH}" && exit 5
         exit 1;;

Alapbeállítás szerint a pdftotext és a mutool tíz oldalt generál. Ez általában elég is, de ha több vagy kevesebb kell akkor itt az -l 10 illetve a 1-10 értéket át lehet írni.

A grafikus, képként való megjelenítéshez előbb ezeket a sorokat érdemes kikommentelni, mindegyik elé kerüljön egy # jel. Majd megkeresni a


  ## PDF
   application/pdf)
       pdftoppm -f 1 -l 1 \
                -scale-to-x "${DEFAULT_SIZE%x*}" \
                -scale-to-y -1 \
                -singlefile \
                -jpeg -tiffcompression jpeg \
                -- "${FILE_PATH}" "${IMAGE_CACHE_PATH%.*}" \
           && exit 6 || exit 1;;

blokkot megkeresni, és ahol egy # jel van, azt kivenni. Így aktiváljuk a PDF képi előnézetét. A működéshez apdftoppm szükséges!

Melyik az ideális? A szöveges megjelenítés nem tudja megjeleníteni azokat a pdf fájlokat, amik nem szöveget, hanem kép imageket tartalmaznak. Ilyen lehet a beszkennelt dokumentum, ami képként tárolja az információt és nem szövegként. Ezeket csak a második megoldás jeleníti meg! De nagy állománynál lassú is lehet.

Tömörítvények és deb, rpm csomagok előnézete

Ha az összes ajánlott csomagokat tudtad telepíteni, itt nem lesz teendőd. A Ranger alapbeállítása szerint az összes ismertebb tömörítőt kezeli, plusz a Debian (Ubuntu, Linux Mint, MX Linux) és RedHat (Fedora stb.) csomagokat is. A probléma akkor van, ha a terjesztésed nem adja az atool parancsot. Ilyenkor a linkelt oldalon található csomagot letöltve és telepítve már működik a betekintés.
Ez a lehetőség a tömörítvényben lévő fájlok listáját mutatja, egyes fájlokba nem tekinthetünk bele. Ahhoz ki kell csomagolni és belépni a kicsomagolás könyvtárába.
Tipp: ha deb, vagy rpm csomagokat használsz, akkor mindenképp érdemes ezt a lehetőséget kihasználni. Ilyenkor látjuk a csomagban lévő fájlokat és azok telepítési útvonalát is.

Torrent fájlok megtekintése

A kedvelt fájlmegosztó módszer a torrent használata. A letöltést vezérlő fájlokba tudunk betekinteni ezzel a megoldással. Alapbeállítás jó, telepíteni kell a transmission-show programot. Ez a transmission-cli csomag része.
Ezzel a torrent állomány metaadatait nézheted meg.

Irodai csomagok állományai

A LibreOffice csomag által készített állományok előnézetéhez két csomagot érdemes telepíteni. A odt2txt csomag szöveges betekintést ad, gyors és működik. A másik megoldás markdown formába konvertálás és annak a megjelenítése. Ehhez az univerzálisan használt pandoc csomag kell. Mindkettő elérhető a legtöbb Linux disztribúcióban.
Az xlsx megjelenéshez kell egy csomagtelepítést tenni. A xlsx2csv beszerzéshez a pip install xlsx2csv futtatása kell. Ha sima userként telepítve nem működik az előnézet, akkor root joggal felrakva már megy. A "sima" azaz régebbi xls megjelenítéshez a xls2csv lehetőséget használja, ne keverd össze a kettőt!
A képen láthatóan elég "szöveges" a megjelenítés, akinek grafikusabb kell esetleg ezzel a leírással elindulhat. Nem próbáltam ki, így véleményt nem tudok alkotni róla! Egy dolog miatt tettem be: ez egy jó minta, hogy képpé próbáljuk alakítani az állományt, majd a képet jelenítettjük meg. Esetlegesen ezt fel lehet használni egy unikálisabb fájlformátumnál is.

SVG, Inkscape állományok

Alapból be van állítva, de valami miatt ki lett kommentelve az svg állományok megjelenítése. Kommenteljük ki, mert enélkül esetleges a normális megjelenítés Ranger alatt, csak az előnézeti képpel rendelkezőket mutatja!

Egyéb, nem támogatott formátumok

A Ranger, amikor előnézeti képet generálnál, akkor azt a "${IMAGE_CACHE_PATH}" változóban megadott helyen keresi. Ez be van állítva, hiszen eddig is használtuk. Ha egy nem támogatott fájlból tudsz generálni egy képállományt, akkor azt már meg tudja jeleníteni, ha a kilépési kódnak a 6 adod meg. Ez viszonylag egyszerű, erre jó példa az SVG-nél említett rész:

        # SVG
         image/svg+xml|image/svg)
             convert -- "${FILE_PATH}" "${IMAGE_CACHE_PATH}" && exit 6
             exit 1;;

A convert azt a fájl a háttérben átkonvertálja amin állunk, az IMAGE_CACHE_PATH-ban megadott könyvtárban, majd az exit 6 kilépési kóddal utasítjuk jelenítse meg a képet, amelyre a IMAGE_CACHE_PATH mutat, kép előnézeteként. Ez első nézetre nem túl összetett, de el lehet ezzel játszani sokat. Kell egy olyan parancs, ami konvertál, és azt jól fel kell paraméterezni.

Videó előnézetek

Hasonlóképp ki lett kommentelve a videó előnézeti képek megjelenítése. Ha kell, érdemes ezt is beállítani. A
ffmpegthumbnailer-t használja. Egy állóképet ad, ami nem feltétlen nagy segítség,de megfelelő.

Ami rossz: lelassíthatja a Ranger müködését

Biztosan tapasztaltál lassulást, ha pld. nagyobb tömörítvények közt lapoztál, vagy egypár nagyobb telepítő csomag közt. Meg akarja nyitni, bele akar nézni. Ez lassít. Ideális lenne ideiglenesen kikapcsolni majd vissza. Itt is van lehetőség a megszokott egyszerű, de nem túl szelektív megoldásra: a konfigurációban letiltjuk az előnézetet. Ez nem túl Ranger-es!
Ha belenézel a z kötésekbe, akkor látod, hogy ott sok érdekes megoldás definiálásra került.

map zi    set preview_images!
map zp    set preview_files!
map zP    set preview_directories!
map zv    set use_preview_script!

Nagyon nem kell kitérni a beállítások értelmezésére, a megadott előnézeti megjelenítést lehet ki- és bekapcsolni. Így akár az összes előnézetet, akár pedig csak egy típusú előnézetet ki lehet iktatni ha az zavaró. Majd ugyanazzal a kombinációval vissza.

! a váltókapcsoló

Egy adott funkciót - ha annak van értelme - beállít, majd letilt ugyanazzal a kapcsolóval. Gyakorlatilag a funkció értékét állítja át, mint egy váltó kapcsoló. Sok helyen használják, így érdemes észben tartani ezt a lehetőséget.
Így egy kombinációval kétféle eredményt elérhetünk. Nem kell megjegyezni két kombinációt.

Mekkora legyen a legnagyobb méret

Logikus elgondolás, hogy lapozgatás, görgetés közben egy-egy nagyon nagy állományt nem akarunk megnyíttati a Ranger alatt előnézeti képhez. Lassú is lehet ilyenkor a nyitás. Van egy beállítási lehetőség, amit érdemes ismerni:

Avoid previewing files larger than this size, in bytes.

set preview_max_size 0

A 0 érték minden méretet enged. Add meg azt, ami neked a megjelenítésekkor a legnagyobb méret szokott lenni.

Összefoglalva a Ranger preview részét

Nagyon sok formátumot alapból, még többet kis munkával meg tud jeleníteni. De biztosan lesz olyan, amit nem. Amire nem tértem ki, azokat vagy nem használom, vagy nem találtam rá működő megoldást. Ha van olyan, amit nem soroltam fel, akkor a google sokat tud segíteni. Amit érdemes követni: ha nem túl fontos az előnézeti kép, akkor nem érdemes sok melót beletenni, mert gyorsan meg lehet nyitni egy állományt és megnézni.