Dialog

Dialog
25.01.2013 02:00 | Články | Milan Dvorský
Dialog je program umožňujúci zobrazovať otázky, hlásenia alebo správy pomocou dialógových okien zo shell skriptu. Je tu zároveň množstvo možností ako tieto správy a okná upravovať. Tu vám ponúkam pokus o zhrnutie tých najpoužívanejších, pri väčšine z nich som aj overila funkčnost. Do kódu je možné vkladať súčasne viac rôznych dialógových okien.


Podporované dialógové typy


calendar, checklist, dselect, editbox, form, fselect, gauge, infobox, inputbox, inputmenu, menu, mixedform, mixedgauge, msgbox (message), passwordbox, passwordform, pause, progressbox, radiolist, tailbox, tailboxbg, textbox, timebox, yesno

Každé dialógové okno má aspoň tri parametre:
  • text, bude sa zobrazovať vždy vo vnútri dialógového okna
  • výška okna
  • šírka okna


Ďalšie parametre závisia od typu dialógu :
--calendar   text výška šírka deň mesiac rok
Kalendár zobrazuje mesiac, deň a rok v samostatne upraviteľných oknách. Ak sú tieto hodnoty nesprávne alebo záporné, dialóg zobrazí hodnoty aktuélneho dátumu. Medzi hodnotami je možné presúvať sa šípkami, a medzi jednotlivými oknami pomocou tab a backtab. Po potvrdení je na výstupe dátum vo forme deň/mesiac/rok.

--checklist   text výška šírka výška-zoznamu [statusy položiek]
Checklist je podobný ako menu box. Obsahuje niekoľko vstupov vo forme menu. Rozdiel je ale v tom, že na rozdiel od menu, kde môže byť vybratá práve jedna položka, v checkliste môže byť každá položka zaškrtnutá (vybratá) alebo nezaškrtnutá. Počiatočný stav každej položky, teda či je vybratá alebo nie, je určený jeho statusom. Po potvrdení bude na výpise reťazec ktorý dialóg vytvorí z vybraných položiek.

--editbox   súbor výška šírka
Editbox zobrazuje kópiu súboru, ktorú je možné upravovať. Pomocou tlačidiel backspace, delete a kurzorových tlačidiel sa dajú upraviť preklepové chyby. Tiež sú rozoznávané tlačidlá pageup, pagedown. Potvrdenie musí byť realizované cez kliknutie na tlačídlo “OK“, v prípade stlačenia ENTER len editbox prejde na nový riadok v súbore.

--infobox   text výška šírka
Infobox zobrazuje správu užívateľovi. Ukončí sa ale okamžite po jej zobrazení. Obrazovka sa nevymaže, dialógové okno bude zobrazené kým nebude neskôr pomocou dialógu vymazané. Infobox je užitočný keď chceme užívateľa informovať že prebieha určitá operácia, a bude trvať nejaký čas kým bude ukončená.

--inputbox   text výška šírka [init]
Používa sa v prípade že chceme používateľovi položiť otázku a očakávame od neho ako odpoveď reťazec znakov. Pri písaní tohto reťazca je možné opravovať chyby tlačidlami delete,backspace a kurzorovými klávesami. Ak je vpísaný reťazec príliš dlhý, okno sa postupne scroluje nadol. Pri ukončení je tento reťazec použitý ako výstup. Init je reťazec ktorý bude vpísaný v okne ako predvolený.

--menu   text výška šírka výška-menu [tag item]
V dialógovom okne je zobrazený zoznam položiek vo forme menu, s ktorých si užívateľ može jednu vybrať. Každá položka je charakterizovaná reťazcami tag a item. Tag určuje meno položky aby bolo možné ju odlíšiť od ostatných položiek menu. Item obsahuje krátky opis možnosti ktorú položka predstavuje. Užívateľ sa v menu môže pohybovať pomocou kurzorových šípiek. Ak sa všetky položky menu nezmestia do dialógového okna, okno sa bude dať scrollovať.

--inputmenu   text výška šírka výška-menu [tag item]
Podobé klasickému menuboxu. Rozdiely ale sú:
  • Položky nie sú automaticky centrované, ale sú zarovnané doľava.
  • Je pridané tlačidlo “Rename“, pomocou neho sa dá premenovať akákoľvek položka.

--msgbox   text vyška šírka
Message box zobrazí užívateľovi správu. Po jej prečítaní užívateľ klikne na tlačidlo “OK“ alebo stlačí ENTER, čo ukončí dialogové okno a shell bude pokračovať v daľšom vykonávaní programu. Ak sa správa nezmestí do okna, je možné okno scrollovať. Ak užívateľ stlačí ESC, dialóg vráti exit status.

--pause   text výška šírka sekundy
Zobrazí “počítadlo“ na spodnej časti dialógového okna, ktoré indikuje koľko času ešte zostáva do konca pauzy. Pauza skončí ked vyprší čas počítadla, alebo užívateľ odklikne tlačidlo “OK“ pripadne “Cancel“ (ESC)

--passwordbox   text výšky šírka
Správa sa rovnako ako --inputbox   , ale údaje vkladané užívateľom nie sú zobrazované. Je to užitočné, ak je vkladané heslo, alebo iné súkromné informácie.

--radiolist   text výška šírka výška-zoznamu [tag item status]
Rovnaký ako menubox, jediný rozdiel je v tom, že je možné rozhodnúť ktorá položka bude práve vybratá nastavením statusu na hodnotu on. Na výstupe bude meno vybratej položky.

--textbox   súbor výška šírka
Vie zobraziť obsah zadaného textového súboru v dialógovom okne. Slúži ako textový prehliadač. Užívateľ sa vie v texte pohybovať kurzorovými klávesami a klávesami: page-up, page-down, HOME a END.

--timebox   text výška [šírka hodiny minúty sekundy]
Zobrazí sa dialógové okno v ktorom je možné nadstaviť hodnotu hodín, minút sekúnd. Ak sú tieto hodnoty nesprávne alebo záporné, dialóg zobrazí hodnoty aktuélneho času. Medzi hodnotami je možné presúvať sa šípkami, a medzi jednotlivými oknami pomocou tab a backtab. Po potvrdení je na výstupe čas vo forme h:m:s.

--yesno   text výška šírka
Dialógové okno má tlačídlá “yes“ a “no“, medzi ktorými môže užívateľ prepínať pomocou tabulátora. Používa sa na kladenie jednoduchých otázok používateľovi.

Tu je zoznam niektorých nastavení, pomocou ktorých je možné modifikovať a využiť tento „zázrak“ podľa svojich predstáv:

--file   file
Dialog bude čítať parametre zo súboru ktorého názov zadáme v argumente.

--ascii-lines  
Namiesto grafických čiar okolo okien vykresľuje + a – z ASCII tabulky.

--aspect  
Umožňuje určitú kontrolu rozmerov vrámci okna (argument 0-9).

--backtitle  
Určuje reťazec ktorý bude zobrazený v hornej časti obrazovky na pozadí.

--begin   y x
Špecifikuje pozíciu horného ľavého rohu dialógového okna na obrazovke.

--cancel-label    string
Prepíše text tlačidla “Cancel“.

--clear  
Vymaže okná z obrazovky, ponechá len pozadie.

--and-widget  
Vymaže obsah predchádzajúceho zobrazenia okien.

--keep-window  
Doplnok –and-widget, ponechá okná na obrazovke, pokial je nadstavené,nieje možné okno zmazať pomocou --and-widget   ani --clear   , pretože pri vykreslení nového dialógového okna program najskôr “zreparuje“ okná v ktorých je zapnuté --keep-window  

--colors  
Mení atribúty písma. Použitie \Zx, x je kód farby alebo nastavenia ktoré chceme na písme zmeniť. (x=0-7, farby v tomto poradí: čierna, červená, zelená, žltá, modrá, purpurová, cyan, biela. Tučné písmo – b, obrátené – r, podčiarknuté - u. Nadstavenia sa dajú kombinovať. \Zb\Z1 je tučné červené písmo.

--column-separator   
Rozdeľovanie textu do stĺpcov, prípadne jeho úprava pri používaní chechboxov, menu.

--cr-wrap  
Nastavenie obtiekania a zalomenia textu.

--defaultno  
Nadstaví ako predvolené tlačidlo dialog boxu yes/no hodnotu no, inak je predvolené yes.

--default-item    string
Nadstavenie predvolenej hodnoty v checkliste, formuláry, alebo v menu. Ak nieje použité, ako predvolená hodnota je nadstavený vždy prvý prvok zoznamu.

--exit-label   string
Reťazec použije ako náhradu za “EXIT“ v tlačidle

--extra-button  
Zobrazí ďalšie tlačidlo medzi tlačidlami “OK“ a “Cancel“

--extra-label   string
Zadaný reťazec bude použitý v extra tlačidle vytvorenom pomocou --extra-label  

--help  
Do dialógového okna vypíše nápovedu, ak niesu zadané žiadne iné nastavenia.

--help-button  
Pri tlačidlách “OK“ a “Cancel“ (v checklistoch, radiolistoch, a v menu) zobrazí aj tlačdlo “Help“.
Ak je popri tom použité aj –item-help   , návratová hodnota po stlačení bude rovnaká ako v prípade “OK“ tlačidla a text použitý v –item-help   bude použitý ako dialógový výstup. Inak návratová hodnotá zaznamená stlačenie “HELPu“ a nevytlačí žiadnu správu.

--help-label   string
Prepíše text tlačidla “HELP“

--ignore  
Ignorovanie nastavení ktoré dialog nevie rozoznať (niektoré dobre známe ako --icon   sú ignorované tak, či tak). Je to dobré voľba kôli kompatibilite.

--insecure  
Pri zadvaní hesla sa už nezobrazujú hviezdičky - nie veľmi bezpečné riešenie.

--item-help  
Pre checklist, radiolist a menubox pridá v dolnej časti obrazovky stĺpec z informáciami pre momentálne vybratú položku.

--keep-tite  
Dialog kontroluje či program beží na predvolenej obrazovke, ak áno, snaží sa prepnúť beh programu na alternatívnu obrazovku. Toto prepínanie môže komplikovať beh programu keď script spúšta dialóg niekoľko krát za sebou. Ak použijete možnosť --keep-tite   , toto prepínanie sa potláča.

--max-input   size
Limituje vstupné reťazce na zadanú veľkosť. Bez použitia tejto možnosti je limit 2048.

--no-cancel  
--nocancel  
Zakáže, nepoužije tlačidlo “Cancel“ v checklistoch, inputboxoch, menuboxoch. Script ale stále testuje, či relácia okna nebola ukončená s klávesnice tlačidlom ESC.

--no-collapse  
Bez použitia tohto prepínača dialóg premieňa tabulátory na medzery a pri výskyte viacerých medzier automaticky zobrazí iba jednu medzeru. Použitie tejto voľby tieto funkcie vypína.

Obtiekanie textu bude ale stále rovnaké. Pre nadstavenie použite --trim   , --cr-wrap   .

--no-label   string
Prepíše text tlačidla “No“.

--no-lines  
Okolo dialógových okien sa nebudú vykresľovať čiary (rám).

--no-ok  
--nook  
V dialógovom okne chcecklistu, inputboxu a menuboxu nebude zobrazovať tlačidlo “OK“. Stále ale funguje ENTER ako potvrdenie vstupu.

--ok-label   string
Prepíše text tlačidla “Ok“

--no-shadow  
Tiene dialogových okien sa nebudú zobrazovať.

--output-fd   fd
Nastaví ako cieľ výstupu zadaný súbor. Väčšina scriptov vypisuje chybové správy na štandardný výstup, ale môžu byť zapisované aj do súboru. Záleží na scripte.

--separator   string
--output-separator   string
Zadaný reťazec bude oddeľovať dialógový výstup namiesto newline alebo medzery

--print-maxsize  
Na dialogový výstup vytlači maximálnu veľkosť dialógového okna

--print-size  
Na dialogový výstup vytlači aktuálnu veľkosť dialógového okna

--print-version  
--version  
Na dialogový výstup vytlačí aktuálnu verziu dialógu

--shadow  
Bude sa zobrazovat tieň dialogového okna na jeho pravej a dolnej strane

--sleep   secs
Po spracovaní a vykreslení dialógu, čaká zadaný počet sekúnd

--tab-correct  
Každý vyskytujúci sa tabulátor automaticky prevádza na jednu alebo viac medzier

--tab-len   n
Pri použití –tab-correct   , tento prepínač určuje na koľko medzier bude prevedený tabulátor. Predvolená hodnota je 8. Tento prepínač je efektívny len pre textboxy

--timeout   secs
Ak dialog nezaznamená žiadny podnet od užívateľa, program po zadanom počte sekúnd automaticky skončí. Ak je ako počet sekúnd zadaná nula, prepínač je ignorovaný.

--title   string
Reťazec je použitý ako titulok okna, zobrazený na vrchole dialogového okna.




Autorkou príspevku je Michaela Zaťková  
Neprešlo jazykovou úpravou.
Domovská stránka projektu
    • manual 25.01.2013 | 15:58
      pejta   Návštevník
      Som síce rád že tu po dlhej dobe pribudol článok, a nemám príliš právo kritizovať, keďže sám ničím neprispievam. Ale preložiť časť manuálovj stránky a vydávať to za článok? To vážne?
      • Re: manual 25.01.2013 | 16:33
        Avatar Milan Dvorský debian,mint kde,android  Administrátor
        je to napisane, ze je to skor ako prispevok ... a pre ludi, co nevedia anglicky sa to zide. dalsia vec je ta, ze niektore prepinace su myslim viac popisane, nez v manuali ...
    • jajaj 26.01.2013 | 10:31
      Avatar Stanislav Hoferek Greenie 18.04  Používateľ
      dialog robí s obrázkami a nie je jediný obrázok? dabljú tí ef?
    • Diki 26.01.2013 | 11:39
      Avatar missy   Používateľ
      Ako začiatočník som sa snažila niečo vyskúšať a zhrnúť, aspoň niečo vyprodukovať, nejak začať. Ale vidím že experti snahu nováčika neocenia :) Nevadí, nemôže byť všetko dokonalé.
      • Re: Diki 26.01.2013 | 12:00
        Avatar Stanislav Hoferek Greenie 18.04  Používateľ
        práve naopak, oceňujeme, no tvoja robota má dobrý základ, ktorý treba len trochu doplniť.

        osobne by som pridal aspoň 2 obrázky a nejaký ten príklad, kedy sa to hodí. Tak napríklad môžeš urobiť grafický výstup informácii o hardvéri. Pekne to rozpíš a nebude frflať (skoro) nikto :)
      • Re: Diki 01.02.2013 | 12:46
        tomo_tn   Návštevník
        Dialog je super, sam som ho pouzival na vytvorenie instalatora (vlastne ku tomu bol navrhnuty) a naozaj sa s nim robi dobre. Avsak podla mna pre zainstalovany system uz nema takmer ziadne vyuzitie, preto podla mna chyba v "clanku" aspon spomenutie DropInReplacementu Xdialog
        • Re: Diki 02.02.2013 | 21:44
          jan   Návštevník
          .... uz nema takmer ziadne vyuzitie,
          rekl bych ze ne. Prave delam administrativni UI pro server a proto jsem pri hledani prikladu k 'dialogu' zavital i sem. Na servru vetsinou neni vubec X a proto se neco jako dialog dost hodi.
          • RE: Re: Diki 13.06.2013 | 22:04
            Avatar pavel   Návštevník
            Bohužel, Xdialog není přítomen ve všech distribucích, sice je možné jej "nějak" do distribuce dostat, ale pouze z repozitářů "třetích stran". Sám dosud hledám náhradu za "timebox" a "calendar". Pěkný článek.