Co jsou komodity
Brzy zjistíte, že převážná část utilit pro OS 2.x / 3.x jsou tzv. komodity. Ovšem ne každý čtenář ví, co komodity jsou. Tento článek se snaží podat základní, všem přístupné vysvětlení. Šalamounská definice říká, že komodity jsou programy používající funkce knihovny "commodities.library". To samozřejmě není žádné rozumné vysvětlení.
Nyní malé jazykové odbočení. Používám termín komodita jako český ekvivalent anglického termínu "commodity". Podle slovníku toto slovo označuje druh zboží používaného k obchodování, což i v češtině lze označit slovem komodita. Je to tedy vlastně původně ekonomický termín, ovšem na Amize nabyl jiného významu.
Komodity se objevily až s OS 2.04. Hlavním impulsem pro jejich zavedení byla snaha omezit vzájemné konflikty současně spuštěných utilit. Jednalo se hlavně o utility měnící chování systému, především o programy nějak měnící účinky vstupních informací (například tlačítek myši). Pod OS 1.3 se často stávalo, že pokud jste současně spustili několik takovýchto utilit měnících chování systému, Amiga se zhroutila (známé "Guru"). Příčina byla dost prostá - každá utilita se do systému instalovala svou cestou, neexistovaly žádné jasné standardy, a tak často došlo ke kolizi programů.
Co jsou komodity
Komodity jsou pravým opakem uvedené situace. Do systému se instalují funkcemi knihovny "commodities.library", tedy jednotným způsobem. Knihovna zajišťuje také jednotné zpracování dat ze vstupního proudu (tedy především z klávesnice a myši).
Běžného uživatele ovšem stěží budou zajímat programátorské finesy komodit, pro něj jsou důležité jejich vnější, "viditelné" projevy a vlastnosti. Ty se soustřeďují do dvou oblastí. Za prvé existují uživatelsky měnitelné parametry společné všem komoditám. Někdy je lze zadávat i jako argumenty v CLI, ale častěji vystupují jako ToolTypes (nastavitelné parametry) v ikonách komodit.
Druhou oblast představuje program pro centrální správu komodit, což nejčastěji bývá program "Exchange".
Nejprve se podívejme na ToolTypes komodit. Jsou tři (konkrétní komodita jich samozřejmě může mít a také mívá více, ale tyto tři jsou společné všem komoditám). Jejich označení vždy začíná písmeny "CX", což je programátorská zkratka používaná k označení komodit.
Prvním je parametr CX_PRIORITY. Jeho formát je jednoduchý:
CX_PRIORITY=<n>
kde n je celé číslo. Implicitně má komodita prioritu o hodnotě 0. Samozřejmě, že i současně spuštěné komodity mohou mít stejnou prioritu.
Někdy to však může působit potíže. Priorita komodit totiž určuje pořadí, v němž přistupují k informacím vstupního proudu.
Amiga řadí všechny vstupní informace (z klávesnice, myši, případně dalších vstupních zařízení) do jednotného proudu, z něhož si informace mohou odebírat jednotlivé programy. Komodity obvykle přistupují k těmto informacím jako první, protože tak mohou měnit účinek vstupních informací. Ovšem pokud je komodit spuštěno více najednou (a to v multitaskovém prostředí Amigy není nijak neobvyklé),je záhodno, aby si samotné komodity mezi sebou "domluvily"pořadí, v němž budou vstupní informace odebírat. A právě priorita určuje toto pořadí. Čím vyšší priorita, tím dříve komodita ke vstupnímu proudu přistoupí a obvykle jej také přefiltruje. Tak lze účinně vyřešit konflikty dané kolizemi na vstupu - kdo dřív přijde, ten dřív mele.
Mnohé komodity mají i grafické uživatelské rozhraní, jež obvykle dovoluje konfigurovat chování komodity. Pro takové komodity jsou důležité další dva parametry.
Parametr CX_POPUP určuje, zda se grafické rozhraní otevře po spuštění komodity. Jeho formát má dvě možné podoby:
CX_POPUP=YES
CX_POPUP=NO
Hodnota "YES" sděluje, že se grafické rozhraní komodity má po spuštění automaticky zobrazit. Naopak hodnota "NO" rozhraní nezobrazí. Implicitně bývá nastavena hodnota "YES".
Tím se dostáváme k dalšímu důležitému rysu komodit. Komodity mohou totiž pracovat "ve skrytu". Program měnící například účinek tlačítek myši na práci s okny většinou nemusí být viditelný, vlastně to ani není žádoucí. Naopak je však vhodné, aby bylo možné měnit jeho konfiguraci "za chodu", a to maximálně intuitivním způsobem. Řešení nabízené komoditami je prosté, ale účinné - na požádání může komodita otevřít okno s ovládacími prvky a po nastavení nových hodnot můžete okno zavřít - komodita ovšem pracuje dále.
Pokud komoditu používáte často, je nejvhodnější umístit ji do adresáře "WBStartup", aby se spustila automaticky po zavedení systému. Většinou pak asi nebudete chtít, aby komodita automaticky zobrazila své rozhraní, takže použijete parametr "CX_POPUP=NO".
Může se ovšem stát, že budete chtít dočasně změnit určitý parametr komodity. K tomu samozřejmě potřebujete nějaký způsob, jak zobrazit její grafické rozhraní, jež je právě skryto. Jednou možností je dvojí klepnutí myší na ikonu již spuštěné komodity. Nespustí se další kopie komodity (to by obvykle ani nemělo smysl), pouze se zobrazí její rozhraní. Funguje to ve většině případů.
Ikona komodity však může být pohřbena někde v hlubinách adresářové struktury, a tak se nabízí i rychlejší způsob - aktivace rozhraní určitou kombinací kláves (anglicky se označuje jako "popup key"). Protože můžete mít spuštěno více komodit současně, je nutné, aby se tyto kombinace lišily. To lze zařídit, protože každé komoditě s grafickým rozhraním můžete nadefinovat vlastní aktivační kombinaci. Nastavuje ji parametr CX_POPKEY. Má následující formát:
CX_POPKEY=<klávesa>
kde <klávesa> je určitá klávesa nebo kombinace kláves. Doprovodný článek "Jak se definují klávesy pro komodity" popisuje přesný formát definice. Komodita samozřejmě obvykle mívá implicitní aktivační kombinaci, explicitní definice je nutná jen v případě shodných implicitních definicí. (Mimochodem, aktuální aktivační kombinace se většinou zobrazuje v titulní liště okna rozhraní).
Jistě, pod OS 1.3 také některé utility nabízely podobné aktivační kombinace, ale ty často byly pevně nastavené a pokud je bylo možno konfigurovat, měl každý program svůj vlastní formát k nastavení kombinace. Komodity naopak nabízí jednotný formát aktivačních kombinací.
Jistě vás také zajímá způsob, jímž se rozhraní opět skryje. Téměř každá komodita nabízí menu "Project", jež má alespoň dvě položky - "Quit" a "Hide". Položka "Quit" komoditu úplně vypne, zatímco položka "Hide" pouze skryje grafické rozhraní. Položka "Hide" má klávesový ekvivalent "Amiga-H". Některé komodity též nabízejí gadget "Hide" se stejnou funkcí. Kromě toho mívá okno rozhraní závěrný gadget, který většinou funguje jako ekvivalent položky "Hide".
Ovšem ne všechny komodity mají grafické rozhraní. Pro některé by ani nemělo smysl (není v nich co konfigurovat), u jiných je autor prostě z nějakého důvodu neimplementoval a konfigurace se provádí pomocí ToolTypes, což samozřejmě snižuje komfort komodity, ale často se tak významně zmenšuje velikost programu. Pro takové komodity nemají parametry CX_POPUP a CX_POPKEY význam a dvojí klepnutí na jejich ikonu je obvykle vypíná.
OS 2.x/3.x však nabízí také možnost centrální správy komodit. Tímto řídícím ústředím je program "Exchange" (někdy také nazývaný "Commodities Exchange"), implicitně umístěný v adresáři "Tools/Commodities".
Je zde vhodné zdůraznit, že tento program lze nahradit jiným programem se stejnými funkcemi, jedná se vlastně jen o určité, "rozhraním obalené" funkce knihovny "commodities.library". Nicméně většina čtenářů se nejčastěji setká s tímto programem, jeho možné alternativy zřejmě budou tématem jiných článků.
Program "Exchange" je sám také komodita vybavená grafickým uživatelským rozhraním. Implicitně toto rozhraní zobrazíte kombinací "Ctrl-Alt-Help". Jeho podobu pod OS 3.1 na mé Amize vidíte na obrázku (kombinaci jsem si změnil na Alt-Help). V OS 2.04 vypadal tento program poněkud jinak (gadgety měly poněkud odlišné názvy a uspořádání), ale funkce měl stejné.
Okno programu "Exchange" je rozděleno na několik oblastí. Posuvný seznam "Available Commodities" vypisuje všechny komodity, jež jsou v současnosti nainstalovány do systému. Je-li jich hodně, můžete seznamem procházet proporcionálním gadgetem nebo šipkovými gadgety. Levým tlačítkem myši můžete
některou z komodit v seznamu zvolit.
Po zvolení komodity se v poli "Information" objeví stručný popis komodity. Většinou je zde uveden název programu, číslo verze, autor a stručný popis účelu programu. Pod tímto polem jsou čtyři gadgety, jimiž lze s komoditou pracovat.
Horní dva gadgety lze použít jen pro komodity s grafickým rozhraním. Gadget "Show Interface" zobrazí grafické rozhraní komodity (stejně jako aktivační kombinace), naopak gadget "Hide Interface" rozhraní zavře. Tyto gadgety jsou tedy alternativou k výše uvedeným postupům, hodí se hlavně
uživatelům, kteří si nepamatují aktivační kombinace. Nemá-li zvolená komodita grafické rozhraní, jsou tyto dva gadgety vypojené.
Dále tu máme cyklický gadget, jenž může nabývat hodnot "Active" a "Inactive". Tímto gadgetem lze komoditu dočasně vypnout. Komodity sice bez problémů koexistují, ale v určitých situacích se může stát, že budete chtít účinky některé z komodit vypojit a později opět aktivovat. Jistě, komoditu by bylo možné vypnout a opět spustit, ovšem cyklický gadget nabízí pohodlnější řešení. Nastavíte-li jej pro zvolenou komoditu na hodnotu "Inactive", komodita přestane působit, avšak zůstane nadále v paměti, bude "spát". Když později gadget přepnete na hodnotu "Active", komodita opět "procitne". Jednotlivé komodity samozřejmě můžete uspávat a probouzet nezávisle na sobě.
Poslední gadget, "Remove", zvolenou komoditu odstraní ze systému, vypne ji. Komodita pochopitelně zmizí ze seznamu "Available Commodities".
Jak již bylo řečeno, i sám program "Exchange" je komodita a zobrazí se v seznamu komodit. Všechny zde popsané gadgety může použít také sám na sebe, může se jimi například skrýt nebo vypnout. Program "Exchange" (nebo jeho náhrady) tedy dovoluje spravovat všechny komodity z jedné aplikace, což ocení zvláště uživatelé velkého počtu komodit (patřím mezi ně).
Nyní tedy již víte, co jako řadoví uživatelé můžete s komoditami provádět. K tomu samozřejmě ale také nějaké komodity potřebujete. S OS 2.x/3.x se jich několik dodává, avšak je třeba říci, že se nejedná o žádné zázraky.
Chudou standardní nabídku vám však vynahradí PD programy, kde naleznete komodit obrovské množství. Z výše uvedených vlastností komodit by již mělo být zřejmé, proč je převážná většina utilit pro OS 2.x/3.x implementována jako komodity. Ostatně i některé komerční programy jsou komodity - například Directory Opus. Mimochodem, programy užívající Magic User Interface (skvělé rozšíření standardního uživatelského rozhraní Amigy) jsou automaticky komoditami.
Já osobně jsem z počátku, při prvních nesmělých krůčcích pod OS 2.04 na A500, komoditám mnoho pozornosti nevěnoval, avšak dnes (s A3000 a OS 3.1) bych si již práci bez nich nedovedl představit. Považuji komodity za jeden z nejlepších rysů Amigy, který podstatně zjednodušuje správu systému.
Doufám, že také vám, našim čtenářům, tento článek pomůže lépe využít své Amigy s pomocí komodit.
Jak se definují klávesy pro komodity
Aktivační kombinace kláves pro komodity ("popup keys") se definují způsobem, který vychází z objektového přístupu. Vlastně by se nemělo mluvit o klávesách, protože definice může zahrnovat i mnohé další vstupní události. V podstatě se jedná o filtr pro vstupní události. Je však pravda, že nejčastěji se skutečně jedná o klávesy.
Je rovněž nutno zdůraznit, že tyto definice nejsou omezeny pouze na aktivační kombinace, mnohé komodity s nimi pracují i jinak. Znalost tohoto formátu vám tedy jistě přijde vhod.
Obecně vypadá formát takto:
[<třída>] {[-][<modifikátor>]} [-][upstroke][<kód klávesy>]
Ve všech klíčových slovech a kódech se rozlišují malá a velká písmena.
<Třída> je třídou vstupní události. Je to volitelný parametr, pokud jej vypustíte, bude použita třída rawkey.
<Modifikátor> je doplňující signál, který mění význam určité klávesy. Nejčastěji se jedná o přeřaďovače klávesnice. Modifikátor též lze "negovat" - pokud před něj vložíte znaménko mínus (-), bude zadaný modifikátor ignorován, což má význam především pro klávesu Caps Lock. Modifikátorů lze uvést více současně, avšak pokud zadáte vícekrát tentýž modifikátor, bude použit pouze jednou.
Samotná vlastní klávesa (nebo jiná událost) je dána <kódem klávesy>.
Mimoto lze použít v definici klíčové slovo upstroke. Normálně je vstupní událost vygenerována při stisku klávesy, což také obvykle stačí. Pokud byste z nějakého důvodu chtěli nechat událost generovat při uvolnění klávesy, zadejte slovo upstroke. Událost též lze generovat jak při stisku, tak při uvolnění klávesy, k tomu stačí do definice vložit výraz - upstroke.
To by byla obecná definice, nyní se podíváme na konkrétní kódy. Předtím však ještě jedno upozornění. Knihovna "commodities.library" verze 37, tedy verze dodávaná s OS 2.04, má některé chyby a omezení. Od verze 38 (OS 2.1) výše nabízí tato knihovna dodatečné kódy a jsou z ní odstraněny chyby. Kódy použitelné až od OS 2.1 budou vždy označeny hvězdičkou (*).
Nejprve probereme modifikátory. Jak uvidíte, kromě přeřaďovačů klávesnice se může jednat také o tlačítka myši a o další speciální záležitosti:
| Modifikátor | Popis |
|---|---|
| lshift, left_shift | Levá klávesa Shift |
| rshift, right_shift | Pravá klávesa Shift |
| shift | Kterákoli klávesa Shift |
| lalt, left_alt | Levá klávesa Alt |
| alt | Kterákoli klávesa Alt |
| capslock, caps_lock | Klávesa Caps Lock |
| caps | Kterákoli klávesa Shift nebo klávesa Caps Lock |
| control, ctrl | Klávesa Ctrl |
| lcommand, lamiga, left_amiga, left_command | Levá Amiga klávesa |
| rcommand, ramiga, right_amiga, right_command | Pravá Amiga klávesa |
| numericpad, numpad, num_pad, numeric_pad | Tyto modifikátory je nutno použít pro jakoukoli klávesu numerického bloku. |
| leftbutton, lbutton, left_button | Levé tlačítko myši |
| midbutton, mbutton, middle_button, middle_button | Prostřední tlačítko myši (na třítlačítkové myši) |
| rightbutton, rbutton, right_button | Pravé tlačítko myši |
| repeat | Opakování klávesy, má význam pouze pro události třídy rawkey (vstupy z klávesnice). |
Poznámka: Chyba v OS 2.04 nedovoluje použít modifikátory leftbutton, midbutton a rightbutton. Od OS 2.1 výše je tato chyba opravena.
Dále můžete vybírat ze čtyř tříd vstupních událostí:
| Třída události | Popis |
|---|---|
| rawkey | Tato implicitní třída zahrnuje všechny vstupy z klávesnice. Vždy je nutno zadat kód klávesy. |
| rawmouse | Tato třída popisuje všechny operace s tlačítky myši, pro něž musíte zadat příslušný kód. |
| diskinserted | K události této třídy dojde při vložení diskety do mechaniky. Žádné další kódy již nejsou třeba. |
| diskinserted | K události této třídy dojde při vyjmutí diskety z mechaniky. Žádné další kódy již nejsou třeba. |
Pro třídy rawkey a rawmouse jsou tedy nutné další kódy kláves. Ty naleznete v následujících tabulkách:
Kódy kláves třídy rawkey:
| Kód | Význam |
|---|---|
| A - Z, 0-9, atd. | Běžné ASCII znaky |
| F1, F2, ..., F10, F11, F12 | Funkční klávesy |
Kurzorové klávesy:
| Kód | Význam |
|---|---|
| up, cursor_up | Horní šipka |
| down, cursor_down | Dolní šipka |
| left, cursor_left | Levá šipka |
| right, cursor_right | Pravá šipka |
Speciální klávesy:
| Kód | Význam |
|---|---|
| esc, escape | Esc |
| backspace | Backspace |
| comma | Čárka (,) |
| del | Del |
| help | Help |
| tab | TAB |
| return | Return |
| space, spacebar | Mezerník |
Klávesy numerického bloku:
| Kód | Význam |
|---|---|
| enter | Enter |
| insert | Ins (0) |
| delete | Del (.) |
| page_up | PgUp (9) |
| page_down | PgDn (3) |
| home | Home (7) |
| end | End (1) |
Poznámka: Klávesy numerického bloku vyžadují současné použití modifikátoru numericpad.
Kódy kláves třídy rawmouse (Poznámka: Všechny tyto kódy jsou k dispozici až od OS 2.1.)
| Kód | Význam |
|---|---|
| mouse_leftpress | Stisk levého tlačítka myši |
| mouse_middlepress | Stisk prostředního tlačítka myši (na třítlačítkové myši) |
| mouse_rightpress | Stisk pravého tlačítka myši |
A nyní se můžeme podívat na konkrétní příklady:
| Kód | Význam |
|---|---|
| ralt t | Pravá klávesa Alt + "t" |
| lalt t | Levá klávesa Alt + "t" |
| alt t | Kterákoli klávesa Alt + "t" |
| -capslock alt t | Kterákoli klávesa Alt + "t", stav klávesy Caps Lock bude ignorován |
| ctrl alt help | Ctrl + Alt + Help |
| rcommand F10 | Pravá Amiga klávesa + F10 |
| numericpad enter | Enter na numerickém bloku |



