Pasívne okná v Awesome WM
V dnešnom mini blogu si ukážeme, ako zmeniť ľubovoľné okno na pasívne okno (tj. okno, ktoré nereaguje na myš).
Využitie
Možno sa pýtate, na čo je také okno dobré? Nuž blog píšem v čase, keď sa hrajú MS v ľadovom hokeji. Chcel som popri ľahkom programovaní vedieť, ako hrajeme a nemal som poruke ďalší display. Takže som skúsil upraviť vlastnosti okna tak, aby bolo polopriehľadné, nad všetkými oknami a bolo úplne transparentné pre myš.
Ako na to?
Doprogramovať zmenu vlastností okna po stlačení klávesovej skratky je pomerne triviálna záležitosť. Najskôr pridáme klávesovú skratku do premennej clientkey
. Ako klávesovú skratku som si zvolil Meta-Shift-t
.
clientkeys = gears.table.join( -- ... awful.key({ modkey, "Shift" }, "t", function (c) -- telo funkcie end, {description = "transient client", group = "client"})
V obsluhe klávesovej skratky budem používať vlastnoť transient_to_input
klienta c
. Nedefinovaná vlastnosť má hodnotu nil
. To nám umožní pri prvej aktivácii funkcie nastaviť jednorázovo niektoré užitočné vlastnosti okna, ako napr. zobrazenie nad ostatnými oknami, skrytie orámovania, zobrazenie na všetkých plochách a priehľadnosť. Neskôr je možné tieto vlastnosti zmeniť, ale nastavenie / zrušenie pastívneho okna už nebude mať vplyv na tieto vlastnosti.
V nasledujúcom výpise je telo funkcie:
local cairo = require("lgi").cairo -- nastavenie pri prvej aktivácii if c.transient_to_input == nil then c.ontop = true c.sticky = true c.opacity = .5 c.border_width = 0 end if c.transient_to_input then -- nastaviť aktívne c.transient_to_input = false c.focusable = true c.shape_input = nil else -- nastaviť neaktívne c.transient_to_input = true c.focusable = false c.shape_input = cairo.ImageSurface(cairo.Format.RGB24, 0, 0)._native end
Vlastnosti ontop
, sticky
, opacity
a border_width
jednorázovo nastavujú zobrazenie nad ostatnými oknami, na všetkých plochách, priehľadnosť a šírku okraja.
Hodnota focusable
umožňuje zakázať focus okna pomocou klávesnice a prejdením myšou nad oknom. Focus sa dá stále získať kliknutím na titulok okna, alebo na názov okna v paneli.
Najzaujímavejšou vlastnosťou je shape_input
. V X11 sa dá oknu nastaviť plocha, ktorá reaguje na myš. V tomto prípade cairo.ImageSurface(cairo.Format.RGB24, 0, 0)._native
vytvorí plochu s nulovou veľkosťou. Ak sa nastaví vlastnosť shape_input
, bude okno kompletne ignorovať myš. Stále sa však dá focusovať kliknutím na paneli. Vďaka tomu je možné rovnakou klávesovou skratkou vrátiť okno do normálneho stavu.
Pre pridávanie komentárov sa musíte prihlásiť.
Preto používam IceWM, prv než si na niečo pomyslím už to niekto naprogramoval.
Čiže vrstvy, alebo okná ktoré su na všetkých plochách používam denne a furt mi tam niečo beží.
Za posledné dva roky mám denno, denne zatapetovaný vývojarsky facebook, neskutočne ako tí chlapy valia zadarmo a odmietli aj financie od GNU, hoci samotný RMS mal emitentý záujem o to aby sa IceWM dostalo pod GNU. Hoci samotné IceWM je pod GNU/LGPL.
Nie, nenaprogramoval. IceWM nevie oknu nastaviť transparentnosť pre myš. To je pre mňa kľúčové, pretože nechcem mať na ploche polopriehľadné okno, ktoré aj tak zavadzia keď potrebujem kliknúť na niečo pod nim.
IceWM vie vrstvy, takže sa naň nedá kliknúť, keď beží nižšie.
Ide práve o to, že okno je nad všetkými ostatnými, ale dá sa cez neho normálne interagovať s oknami pod ním, video ukážka. Inak vo video ukážke sa tak trochu musím pochváliť svojim rendererom ;)
Pekné to máš, ako sa s tým dá zahrať?
Najjednoduchšie je asi stiahnuť zo shadertoy-a example, (shadertoy.py download URL vystup.json), extrahovať zdrojáky (shadertoy.py extract_sources vystup.json) a potom upravovať fragment shader ;)
Trochu som čakal, že to nebude až tak easy :)
Aha pochopil som terminál je nepriehľadný.
Osobne používam taktiku, že okno navrchu posúvam inam ak zavadzá s numpadom.
Vložil som otázku do IceWM diskusie, tak som zvedavý na odpoveď.
Myslis si ze Mirec potrebuje aby si zanho vkladal dake otazky do icewm diskusie? Hadam je vidiet ze vie co robi a keby sa potreboval opytat, opyta sa sam. V tej diskusii akurat zas robis zo seba dementa, rovnako ako tu. Naozaj sa nad sebou a svojim egom zamysli.
Neviem, či
je celkom pravdivé. Zase až tak som sa v črevách xlibu nehrabal, ale keď som mal winid mohol som rôzne vlastnosti okna nastavovať aj mimo vlastnej aplikácie. Nakoniec aj awesome je X klient a pritom nastavuje shape cudziemu oknu. Možno by stačilo napísať podobnú aplikáciu ako napr. transset, ktorá by na základe winid nastavila ľubovoľnému oknu masku. A možno má túto právomoc len okno a WM. Nechce sa mi to skúšať.
Tak nakoniec som si napísal skript čo funguje inak, ale funguje výborne :) Skákajúce okno.
Proste stačí mať nad oknom myš, stlačiť Win+J a stane sa z neho skákujúce, ktoré sa uhýba myške. Ako to chcete ukončiť stlačíťe zas Win+J a to je všetko.
gratulujem.Urobil si zo seba zas dementa aj tu aj na icewm githube. Zasa raz..
pekne.
ako wm je fajn ale niektore veci, mne osobne, chybaju.
pravda awesome wm som nepouzival ale dobre si to pozriet.
IceWM spravilo obrovsky skok, ale stale to nie je ono.