neděle 7. srpna 2011

Nedomrlá menu aplikací v Unity

Vývojáři Unity mají před sebou ještě moře práce a nehledě na koncepci, musí vyřešit mnoho čistě technických záležitostí kolem funkčnosti jejich díla. Prozatím tu máme dost prostoru pro různá alternativní řešení a obcházení problémů více, či méně elegantní cestou. Pokud nám to za to stojí. Mám tu další z těch méně elegantních (i když jak se to vezme), týkající se nepěkného chování menu některých aplikací v AppMenu, tedy onom globálním menu Unity panelu.


Appmenu v Unity 11.04 (zatím se chová stejně i Alfa 3 Ubuntu 11.10), stejně jako menu indikátorů v panelu, trochu upravuje klasický vzhled menu GNOME. Klasické menu umožňuje v jednotlivých položkch zobrazit vlevo v rezervovaném prostoru ikonu, nebo například zaškrtávátko (u položek které mohou mít stav zapnuto/vypnuto), dále jméno položky, klávesovou zkratku a po najetí nad položku menu i tooltip, tedy takovou tu bublinu s nápovědou, či dalšími informacemi. Ono se toho tedy dá vykouzlit víc, ale to už je mimo tento příspěvek. Všechny ty prvky mohou mít svůj smysl a být užitečné. Především v obsáhlejších nabídkách zpřehledňují orientaci, protože oko se lépe chytí na obrázek a zorientuje se v graficky rozmanitější struktuře, než ve sterilním sledu textových hesel, a klávesové zkratky i tooltipy mohou zefektivnit proces učení ovládání aplikace klávesnicí, bez nahlížení do manuálu.
Ubuntu se rozhodlo výchozí chování menu změnit alespoň ve svých komponentách a faktem je, že to mnohde dělá problémy. Rezervovanou oblast pro ikony nevyužívají ikony, ale pouze zaškrtávátka, ikony se zobrazují až dále, před jménem položky, což způsobuje nepěkné rozházení textu, pokud některé položky mají a některé nemají ikonu, a tooltipy jsou zakázány úplně. Zakázáno není zobrazení klávesových zkratek, ale přesto je některé aplikace v AppMenu ztrácejí, ačkoliv samotné je zobrazují. Výjimkou není ani to, že AppMenu nezobrazuje ikony, protože je z nějakého důvodu nenašlo, když přímo v aplikaci s tím problém není. Na následujícím obrázku je porovnání nabídky aplikace Inkscape, vlevo jak má být, přímo z aplikace, vpravo interpretace AppMenu.


Porovnání nativního menu aplikace s jeho interpretací Unity v panelu

Co se ikon týká, ty jsou v Ubuntu již několik generací po instalaci zakázány a je třeba je v nastavení GNOME povolit, ale zbytek se zatím musí řešit ignorací AppMenu a návratem menu do aplikace.

Zobrazení ikon v menu GNOME se dá jednoduše nastavit následujícím příkazem:

gconftool-2 -st bool /desktop/gnome/interface/menus_have_icons true

Opětovný zákaz nařídíte zcela logicky předchozím příkazem, kde true, vyměníte za false. A nebo si to naklikaáte pomocí aplikace gconf-editor.

Ovšem pokud jste již do systému nacpali GNOME 3, budete si muset nainstalovat aplikaci gnome-tweak-tool,  a ikony si zapnout tam.

sudo apt-get install gnome-tweak-tool

Použití AppMenu v Ubuntu řídí proměnná prostředí $UBUNTU_MENUPROXY, která obsahuje jméno pluginu AppMenu. Globální nastavení je v souboru /etc/X11/Xsession.d/80appmenu, v Ubuntu 11.10 je pro GNOME 3 přidán i /etc/X11/Xsession.d/80appmenu-gtk3. Pokud byste chtěli zakázat globální menu úplně, lepší než editovat původní konfigurační soubor, je založit nový, který nastavení přepíše. Číslo na začátku jména souboru určuje prioritu jejich vykonávání a pokud si uděláte soubor začínající číslem vyšším, provede se až po výchozím nastavení, které přepíše. Pak tedy můžete založit soubor třeba s názvem 81disableAppMenu:

sudo gedit /etc/X11/Xsession.d/81disableAppMenu

a vložit a uložit do něj následující obsah:

export UBUNTU_MENUPROXY=

Proměnná bude tedy prázdná.

Pokud vám globální menu vyhovuje, pouze u některých postižených aplikací ho chcete vypnout, můžete jim upravit desktopové spouštěče buď přímo v /usr/share/applications/, nebo vytvoříte upravenou variantu jen pro daného uživatele v ~/.local/share/applications/. Příkaz pro spuštění bez přesunu menu do panelu pak vypadá následovně:

UBUNTU_MENUPROXY=  aplikace

Za rovnítkem musí být mezera. Pokud je aplikace umístěna nestandardně mimo adresáře v systémové proměnné $PATH, zadáte i celou cestu k aplikaci, nebo doplníte $PATH. Nebo je takto můžete spouštět přímo z příkazového řádku.


2 komentáře:

  1. takový dotaz. Jak docílit vypnutí globálního menu pouze u nemaximalizovaných aplikací?

    OdpovědětSmazat
  2. Snad leda použít místo Unity klasický GNOME panel s appletem Maximus, ten to umí. Unity zatím k tomuto asi přesvědčit nelze. Bez úpravy zdrojáků AppMenu.

    OdpovědětSmazat

Zkuste prosím při komentováni používat místo volby Anonymní volbu Název/adresa URL, kde vyplníte nějakou přezdívku, adresu zadávat nemusíte. Vědět, které příspěvky jsou od jednoho člověka, je fajn. Díky.

Pokud by se vám náhodou odeslaný komentář na stránce nezobrazil, vytáhnu ho z koše hned jak si toho všimnu. I Google spam filter se občas sekne.