Pasívne okná v Awesome WM

29.05.2021 | 17:34 | Mirecove dristy | Miroslav Bendík

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.

Výsledok
Obrázok 1: Výsledok
    • RE: Pasívne okná v Awesome WM 29.05.2021 | 19:32
      Avatar bedňa LegacyIce-antiX  Administrátor

      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.

      Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
      • RE: Pasívne okná v Awesome WM 30.05.2021 | 06:44
        Avatar Miroslav Bendík Gentoo  Administrátor

        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.

        • RE: Pasívne okná v Awesome WM 30.05.2021 | 10:46
          Avatar bedňa LegacyIce-antiX  Administrátor

          IceWM vie vrstvy, takže sa naň nedá kliknúť, keď beží nižšie.

          Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
          • RE: Pasívne okná v Awesome WM 30.05.2021 | 16:26
            Avatar Miroslav Bendík Gentoo  Administrátor

            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 ;)

            • RE: Pasívne okná v Awesome WM 30.05.2021 | 17:20
              Avatar bedňa LegacyIce-antiX  Administrátor
              pochváliť svojim rendererom ;)

              Pekné to máš, ako sa s tým dá zahrať?

              Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
              • RE: Pasívne okná v Awesome WM 30.05.2021 | 17:24
                Avatar Miroslav Bendík Gentoo  Administrátor

                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 ;)

                • RE: Pasívne okná v Awesome WM 30.05.2021 | 17:25
                  Avatar bedňa LegacyIce-antiX  Administrátor

                  Trochu som čakal, že to nebude až tak easy :)

                  Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
        • RE: Pasívne okná v Awesome WM 30.05.2021 | 11:39
          Avatar bedňa LegacyIce-antiX  Administrátor

          Aha pochopil som terminál je nepriehľadný.

          Osobne používam taktiku, že okno navrchu posúvam inam ak zavadzá s numpadom.

          Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
        • RE: Pasívne okná v Awesome WM 30.05.2021 | 14:10
          Avatar bedňa LegacyIce-antiX  Administrátor

          Vložil som otázku do IceWM diskusie, tak som zvedavý na odpoveď.

          Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
          • RE: Pasívne okná v Awesome WM 31.05.2021 | 10:28
            Avatar 743   Návštevník

            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.

          • RE: Pasívne okná v Awesome WM 31.05.2021 | 10:50
            Avatar Miroslav Bendík Gentoo  Administrátor

            Neviem, či

            Obviously you can't modify the event mask for some other application.

            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ť.

            • RE: Pasívne okná v Awesome WM 03.06.2021 | 22:23
              Avatar bedňa LegacyIce-antiX  Administrátor

              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.

              Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
              • RE: Pasívne okná v Awesome WM 06.06.2021 | 15:05
                Avatar 1337   Návštevník

                gratulujem.Urobil si zo seba zas dementa aj tu aj na icewm githube. Zasa raz..

    • RE: Pasívne okná v Awesome WM 31.05.2021 | 11:09
      Avatar redhawk75   Používateľ

      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.