Meniu

BunsenLabs jgmenu - Cum este construit un meniu grafic

Designul jgmenu este foarte modular, oferind multa flexibilitate in modul de utilizare. Când jgmenu este pornit, doua procese sunt rulate pentru a produce meniul.

?????????????????     ??????????????????
? csv-generator ? --> ? graphical menu ?
?????????????????     ??????????????????

Primul proces produce continutul meniului, in timp ce al doilea genereaza meniul grafic. jgmenu_run este un script de infasurare polivalent care face urmatoarele in pseudo-cod:

if (jgmenu is already running)
    show menu
else
    start a new instance of jgmenu

Acest lucru il face potrivit pentru utilizarea cu panouri si comenzi rapide de la tastatura.

generatoare de csv

USAGE:  jgmenu_run pmenu|lx|apps|ob
  • lx genereaza jgmenuaromadate meniu CSV pentru freedesktop.org meniuriaplicatii definite, folosind libmenu-cache LXDE lui.

  • pmenu Scriptul Python originalpentru a genera jgmenuaromadate meniu CSV bazat pe .desktop si .directory fisiere gasite pe sistem, dar ignorând orice .menu fisiere.

  • aplicatiile genereaza date de meniu CSV aromate de jgmenu pentru aplicatiile de sistem care utilizeaza date de schema incorporate sau un fisier de schema specificat pentru a mapa categoriile catre directoare, mai degraba decâtfisierele desistem .director .

  • ob converteste datele existente din meniul openbox XML in CSV cu aroma jgmenu, dar nu genereaza date de meniu pentru aplicatiile de sistem.

Pentru a ilustra ce este un generator de cv, sa utilizam un caz foarte simplist al unui meniu de aplicatii de sistem:

#!/bin/bash
for f in /usr/share/applications/*.desktop; do
  app=$(grep '^Exec=' $f)
  echo ${app#*=}
done

Iesirea generata de acesta trebuie procesata pentru a face formatarea csv intr-un mod care poate fi folosit de jgmenu , care este ambalat cu un numar de generatoare de cv -uri (denumite si module). Modulele de aplicatii , pmenu si lx produc meniuri „aplicatie de sistem” si puteti adauga elemente de meniu in partea de sus si de jos a meniului radacina prin editarea prepend.csv si / sau append.csv .

Acestea produc meniu csv structurat astfel:

????????????????????????????????
? prepend.csv content          ?
????????????????????????????????<-- This is where "^tag(apps)" must appear
? (supplied by csv-generator..)|    if you want to show System Applications
? Graphics,^checkout(Graphics) ?    
? System,^checkout(System)     ?        
? etc.                         ?
?                              ?
????????????????????????????????
? append.csv content           ?
????????????????????????????????
? (supplied by csv-generator..)|
| ^tag(Graphics)               |
? gimp                         ?
? etc.                         ?
?                              ?
? ^tag(System)                 ?
? xterm                        ?
? etc.                         ?
????????????????????????????????

Sa ignoram append.csv si sa ne concentram pe prepend.csv . Am putea popula prepend.csv cu câteva aplicatii, pentru a produce un meniu de acest fel:

????????????????????????????????
? xterm                        ?
? firefox                      ?
????????????????????????????????
? Graphics,^checkout(Graphics) ?
? System,^checkout(System)     ?
? etc.                         ?
?                              ?
? ^tag(Graphics)               ?
? gimp                         ?
? etc.                         ?
?                              ?
? ^tag(System)                 ?
? xterm                        ?
? etc.                         ?
????????????????????????????????

În noul meniu BunsenLabs, am pus o linie ^ tag (aplicatii) la sfârsitul fisierului prepend.csv. Pentru a intelege acest truc, trebuie sa va dati seama ca procesul care intocmeste meniul grafic nu face decât sa citeasca linii din csv-generator si este complet ignorat de modul in care csv-generator isi face efectiv treaba.

În exemplul de mai jos, jgmenu va interpreta linia ^ tag (aplicatii) drept definitia nodului pentru meniul „aplicatie de sistem” (incepând cu „Grafica”).

Rezultatul acestei linii ^ tag () este, prin urmare, ca „aplicatiile de sistem” sunt intrerupte din meniul radacina si devin submeniu folosind ^ checkout () sau ^ root () .

????????????????????????????????
? xterm                        ?
? firefox                      ?
? applications,^checkout(apps) ?
?                              ?
? ^tag(apps)                   ?
????????????????????????????????
? Graphics,^checkout(Graphics) ?
? System,^checkout(System)     ?
? etc.                         ?
?                              ?
? ^tag(Graphics)               ?
? gimp                         ?
? etc.                         ?
?                              ?
? ^tag(System)                 ?
? xterm                        ?
? etc.                         ?
????????????????????????????????

Are ^ tag (aplicatii) trebuie sa vina la sfârsitul anului ?

Da. Desi nu trebuie sa fie „aplicatii”, trebuie doar sa corespunda cu linia „ Aplicatii, ^ checkout (orice) ” mai departe in prepend.csv , unde doriti sa apara in meniu.

Este un hack pentru a evita afisarea „directorilor desktop” din meniul radacina.

Deasupra liniei ^ (aplicatii) , putem adauga orice dorim - asa cum avem in noul meniu BunsenLabs.

Sub acesta puteti adauga orice doriti sa apara in partea de sus a submeniului Aplicatii.

Sourcing-ul fisierelor functioneaza la fel ca in cazul unui script shell - adica continutul fisierului provenit inlocuieste liniile care efectueaza aprovizionarea (linia care incepe cu un punct). Deci, atâta timp cât rezultatul net al oricarei aprovizionari paraseste ultima linie a fisierului prepend.csv ca acealiniemagic ^ tag () , puteti fisiere fisiere in orice mod / ordine doriti.

Extragerea datelor csv pentru aplicatii

Este posibil sa se creeze un meniu care sa afiseze doar datele Aplicatiilor, prin utilizarea unei variabile de mediu pentru a ignora prepend.csv si append.csv . Fie afisati direct un meniu doar pentru aplicatii, fie salvati cv-ul intr-un fisier care ar putea fi apoi furnizat de jgmenu --simple .

JGMENU_NO_PEND poate fi setat pentru aplicatii sau lx :

JGMENU_NO_PEND=1 jgmenu_run apps|lx | jgmenu --simple
.
or
.
JGMENU_NO_PEND=1 jgmenu_run apps|lx > mymenu.csv

Source: bunsenlabs.org

Andreea

"Rome wasn't built in a day" !
  • | 120 articole

Nici un comentariu inca. Fii primul!
  • powered by Verysign