I3wm tipp – lebegő ablak

i3wm és i3gaps
I3 ablakkezelő

I3wm tipp sorozatunkat egy kellemes, és jól használható szkripttel folytatom. A szkript eredetileg az i3wm kiegészítésére készült, de nem kizárt, hogy bármely olyan tiling wm alatt működik, aminél van lebegő ablak és egy ablak class értékéhez rendelhetünk tulajdonságot. Én az i3wm reddit csatornáján találtam, és mentettem le.

Mi a mai i3wm tipp?

Sok esetben jó lenne egy olyan megoldás, hogy egy honlapról, vagy képből szövegből stb. egy részletet kivágjunk és azt, mint egy kép lebegtessük a munkadokumentum stb. felett. Ilyen lehet egy kód szerkesztése, aminél a leírás – amiből dolgozunk – éppen felhasznált szakaszát szeretnénk látni a kódszerkesztő ablak felett kicsiben lebegni. Bár megoldható, hogy egy lebegő ablakba tegyük a leírást, majd azt bepozicionáljuk a megfelelő helyre, de ez macera, hosszabb idő, plusz pár perces munkához irreálisan sok munka. Főleg akkor, ha még kicsinyíteni, nagyítani is kell a lebegő ablakban a tartalmat.
Egyszerűbb lenne a tartalmat körbevágni és képként pozicionálni egy lebegő ablakba. Ha ez így homályos, akkor nézd meg ezt a videót.

A szkript és a beállítása

Három lépésben kell megtenni a beállítást. Az első, hogy az i3wm konfigurációjában létrehozzunk egy bejegyzést, ami definiálja az ablakunk minőségét. Az eredeti bejegyzésben lévő két sort másolom ide, majd pár tipp is lesz, amivel esetleg kiegészítheted.

for_window [class="^custom-float-no-border$"] floating enable
for_window [class="^custom-float-no-border$"] border pixel 0

Azaz lefordítva: legyen a custom-float-no-border class tulajdonságú ablak, ha van olyan lebegő, és keret nélküli. Szuper, ez egyértelmű.

I3wm tipp, de szerintem a legtöbb erre alkalmas tiling wm alatt is megoldható:

Majd láthatjátok amikor kipróbáljátok a keretnélküliség nem feltétlen praktikus, nem válik el attól, amiből vágtunk. Adhatsz neki keretet is.
Ha már lebegő ablak, akkor annak adhatunk pozíciót is, hogy oda ugorjon rögvest. Praktikus, ha megszoktuk a használatát és jellemzően pld. a jobb felső sarokban akarjuk látni.

Maga a szkript egyszerű:

#!/bin/bash

rect=$(xrectsel)
sleep 0.1
read -r w h x y <<< "$(echo "$rect" | grep -Eo '[[:digit:]]+' | tr '\n' ' ')"
dest=$(mktemp /tmp/XXXXXXXX.png)
echo -n "$dest" | xclip
scrot -a "$x","$y","$w","$h" -o "$dest"
nohup feh -x "$dest" >/dev/null 2>&1 &
sleep 0.1
wid=$(xdotool getwindowfocus)
xdotool set_window --class "custom-float-no-border" "$wid"
xdotool windowmove "$wid" "$x" "$y"

Hozz létre egy üres szövegfájlt és másold bele, majd adj neki futási jogot.

A harmadik lépés már szerintem egyértelmű: kapjon egy billentyűkombinációt.

A használat egyszerű: szkript indításakor a kurzor megváltozik, majd kijelöljük a téglalapot, amit ki akarunk vágni. Mivel ez lebegő ablak odahúzzuk, ahova karjuk és mindig felül lesz.

Függőségek:

xrectsel
grep
scrot
feh
xdotool

ezek nagy része valószínűleg fenn is lesz, de ha valami nem, akkor azért a szkript panaszkodni fog és telepíteni kell.

Mivel a szerző egy rövid leírást is adott, én is megteszem

Az xrectsel segítségével szerezzük be a képernyőn a kijelölt terület geometriai adatait.
A képernyőképet a scrot-tal szükségeltjük. Ez a /tmp/XXXXXXXX.png nevet kapja, az ideiglenes könyvtárban.
A feh használatával jelenítjük meg a képernyőképet; a -x kapcsoló meghatározza a feh-nek, hogy az ablak méretének meg kell egyeznie a képernyőkép tényleges méretével; mivel azonban az i3wm wm tiling wm, ez csak akkor értelmezhető, ha lebegő ablakot csinálunk belőle.
Az xdotool segítségével állítjuk be a WMCLASS-t a feh számára, ezzel az elején megadottak szerint
lebegő ablak lesz, majd helyezze át az eredeti helyre, ahol a területet kijelöltük. Erről az utolsó sor gondoskodik, ezt törölni, vagy módosítani kell esetleg, ha máshova akarjuk tenni alapból az ablakot. Még nem nagyon próbálkoztam ezzel, de a lehetőség fennáll, hiszen a lebegő ablak oda kerül, ahova akarom…

Ennyi! Remélem hasznos volt ez a kis i3wm tipp.

Related Posts