Luastatus - Generator de date de stare pentru panouri, și susținerea i3bar DWM - open source

Prima versiune luastatus - Generator de date universal pentru panoul de stat care acceptă i3bar și DWM. Programul este scris în C și sub licența GNU v3 LGPL.

Cele mai multe dintre generatoarele de date pentru panouri de starea WM țiglă sau actualiza informațiile de pe timer-ul (de exemplu, conky), sau necesită un semnal pentru a redesena (de exemplu, i3status). Panoul ca o parte din mediile de desktop au tendința de a actualiza informațiile instantaneu și în mod automat ca luastatus.

luastatus de lucru cu module descărcabilă a două tipuri: plug-in-uri (responsabile de a face cu orice sursă de eveniment) și așa-numitul barlib'y (responsabil pentru lucrul cu o bară de stare specifică).

Schema de luastatus următoare:

  • Unul dintre plug-in rapoarte că a existat un eveniment, și generează o descrie, obiectul Lua.
  • Chemat funcție definită de utilizator (widget.cb) la acel obiect ca argument.
  • Valoarea returnată este trecut la ea în barlib.

Barlib, de asemenea, poate alerta programul widget care widget-ul a fost un eveniment. In acest caz, de asemenea, generează barlib-obiect care descrie Lua evenimentul, și funcția definită de utilizator (widget.event) este cauzat ea ca argument. De exemplu, barlib i3 să spun atunci când un utilizator face clic pe widget, și transmite informații despre ce buton este apăsat, și a fost făcut poziția.

În acest moment următoarele pluginuri:

  • alsa - monitorizează modificarea volumului canalului ALSA.
  • fs - genereaza un eveniment de timer, widget-ul trimite informațiile privind numărul de spațiul ocupat în sistemul de fișiere. Aceasta susține, de asemenea, FIFO de trezire.
  • MPD - monitorizează volumul și MPD lista de redare curentă.
  • țeavă - și începe procesul generează un eveniment de fiecare dată când generează un șir de stdout (pot specifica diferite splitter de ieșire). Acest șir este trecut la widget-ul.
  • timer - un contor de timp generează un eveniment (cum ar fi un widget, widget ceas sau citind fișierele din / proc). Aceasta susține, de asemenea, FIFO de trezire.
  • Xkb - monitorizează aspectul tastaturii curentă și trece numărul de grup widget de aspect activ și numele acestuia.
  • xtitle - monitorizează fereastra activă în prezent și informează titlul.

Și barlib'y următoarele:

Ei bine, w creați 10 fluxuri

Odată configurat 10 fire și trage de fiecare dată Lua-funcție - mult mai puțin costisitoare decât procesele pentru a produce de fiecare dată.

XFCE4-panou, de exemplu, prin procesul de widget-ul păstrează - și nimeni nu se plânge. Bănuiesc că panourile de odihnă DE deține, de asemenea, orice flux sau procesul de widget-ul.

Și cârje mult mai puțin - nu nevoie de nimeni pentru a trimite nici un semnal pentru a analiza ceva Schell, etc.

Fluxurile de sute de ori (sau chiar mai mult) procese eficiente. Și nici un context comutator pentru a le încetini la nivelul proceselor, și mai bash.

De exemplu, simpla aplicare folosind QtCore cheltui aproximativ 1M instrucțiuni numai la conectarea și inițializarea. În același „timp“ poate da naștere și ucide sute de fire.

Fluxurile de sute de ori (sau chiar mai mult) procese eficiente.

QtCore cheltui aproximativ 1M instrucțiuni numai la conectarea și inițializarea.

Este ceva de-a face cu ea?

Ce este flexibilitatea?

Faptul că am un sistem SCADA, și eu pot scrie un plug-in pentru monitorizarea la Bache / B / centrat / limba SML / convenabil și pentru a trage proces anumite evenimente.

În cazul dumneavoastră trebuie să scrie în Lua? Pe exclusiv pentru ei singuri? Și dacă funcționează prin intermediul dbus, interfata dbus la mine în oraș B / Lua?

Acest lucru nu este valabil pentru toate sursele de evenimente și, în general, Spike.

Spike pentru a lansa un proces să se ocupe de eveniment? În Unix este o tradiție, deci este: Pipe, server de forkan, ipc.

Și Lua este perfect pentru acest gunoi, cred.

Și există orice fel de ruleaza plug-in ca o aplicație separată în tava de sistem.

„Cum în tava“ - este necesar să se facă bifurcație, pentru a crea fereastra și a cerut să acopere zareparentila lui.

Practic, ceva de genul acesta, probabil, se întâmplă acolo, deoarece Am alergat la bar, și ea are proces de 3 filiale.

Nu am înțeles. Se propune ca fiecare extensie cu descriptorii de fișier, și timpul în care trebuie să-l tragă din nou, în cazul în care acești descriptori vor fi nimic, a dat? Un program de bază va fi poll'it lor? Și ce au GTK și „eveniment-bucla“?

GTK face cu faptul că aveți un GTK gui pe panoul în sine, și plugin-ul GTK gui. În cazul în care acestea există, în același proces, ei trebuie să lucreze într-un singur fir (de fapt - în firul principal) în ciclul general al evenimentelor. Într-un alt GTK nu se poate. Dacă doriți să păstrați gui, separat, vezi mai sus despre furca. -)

Tu, desigur, pot crea fire pentru a efectua operații asincrone și schimbul de date cu fluxul principal prin IPC, dar este „pe o bază comună.“ GTK Inutil în paralelizare sarcini pe care nici un ajutor.