Hlavní navigace

Pipe-menu v Openboxu

Jakub Šťastný 22. 1. 2007

Pipe... co to? Pipe-menu! Pokud jste to nikdy neslyšeli, pak vězte, že je to menu, které vznikne "on the fly" jako výstup skriptu, právě v okamžiku, kdy dané menu rozbalíte. V okenním manažeru najde velmi široké uplatnění. Dnes se na ně podíváme a zkusíme si rovnou jedno takové drobné demonstrační napsat.

K čemu to je dobré? No, fantazii se meze nekladou, já to používám například na:

  • změnu pozadí
  • záložky Firefoxu
  • záložky Thunaru (Nautilu)
  • killnutí nejvíce vytěžujících aplikací (CPU, RAM)
  • rychlý přístup k TODO souborům
  • rychlý přístup k dokumentaci (v /usr/share/doc)

Kde je získat

Po internetu se nějaká toulají. Mohlo by jich sice být víc, ale když se hledá, najde se ledacos. Některé zajímavé odkazy jsou pod článkem.

Mám v úmyslu dát k dispozici má pipe-menu (ono ohlášené překvapení), ale bohužel vůbec nebyl čas je dopsat, takže je dodám v pozdějších dílech seriálu.

Jak je psát

Pište si je jak chcete, ale pokud chcete, aby vám to chodilo, mělo by to mít zhruba takovýto výstup:

<openbox_pipe_menu>
  <menu id="jedinecny_identifikator" label="Linux">
    <item label="Root">
      <action name="execute">

        <execute>firefox www.root.cz</execute>
      </action>
    </item>
    <item label="Slashdot">
      <action name="execute">

        <execute>firefox www.slashdot.org</execute>
      </action>
    </item>
  </menu>
  <menu id="jedinecny_identifikator_II" label="Ruby">

    <item label="The Pragmatic Programmers">
      <action name="execute">
        <execute>firefox www.ruby-doc.org/docs/ProgrammingRuby</execute>
      </action>
    </item>

    (...)
  </menu>
</openbox_pipe_menu>

Jdeme na to

Asi není tak úplně nejlepší psát je hned v Céčku, Fortranu nebo assembleru, nejideálnější bude sáhnout po něčem jako je Ruby, Python a podobně. Kdyby to náhodou (nedej Tuxi!) někoho napadlo – rozhodně ne bash, tyhle skripty už jsou nad jeho schopnosti.

Ale abych tu o nich jen nežvanil, zkusíme si rovnou jedno drobné napsat. A použijeme třeba Ruby. Budou to záložky Nautilu, Thunaru a podobných GTK filemanagerů.

Jediné, co potřebujeme vědět, že záložky jsou uloženy v souboru ~/.gtk-bookmarks. Tedy samozřejmě pokud jste si nějaké vytvořili.

#!/usr/bin/env ruby

# Vyberte filemanager.
# Nautilus je nutné spouštět s volbou --no-desktop,
# jinak vám nastaví plochu z Gnome, což má mj. za následek,
# že se vůbec nedostanete k menu (nemáte-li ho namapované
# na nějaké klávesové zkratce) a budete muset nautilus killnout.
program = "thunar"
#program = "nautilus --no-desktop"

# otevření souboru se záložkami
# (ENV je hash proměnných prostředí, jako je třeba HOME nebo CFLAGS)
gtk_file = File.open("#{ENV['HOME']}/.gtk-bookmarks", "r")

# tag počátku pipe-menu
puts "<openbox_pipe_menu>"

# Cyklus prolézá řádky souboru, vytahuje data
# a tiskne je na STDIN v námi zadané podobě
# Totéž dosáhneme zápisem "for line in gtk_file",
# nicméně v Ruby se zpravidla dává přednost zápisu
# metody each nebo jí podobných - inu Ruby
# je prostě vyloženě objektový jazyk.

gtk_file.each do
   |line|
   line.chomp!                            # odstranění znaku konce řádku
   label = line.sub(/\w+:\/{2}/, '')      # název bude bez "file://" na počátku
   # jeden z možných zápisů stringu, ve kterém
   # mají být interpretovány escape sekvence
   # a vyhodnocovány kusy kódu v #{}
   puts %Q{
   <item label="#{label}">
      <action name="Execute">
         <execute>#{program} #{line}</execute>
      </action>

   </item>
   }
end

# ukončovací tag
puts "</openbox_pipe_menu>"

Menu máme. Kromě uložení není od věci dát mu právo spuštění ( chmod +x gtk_menu.rb). Teď už stačí pouze zapsat do souboru  menu.xml:

<menu execute="~/.config/openbox/gtk_menu.rb" id="gtk" label="GTK záložky"/>

Poslední věc, kterou je třeba udělat, je zavolání openboxové akce reconfigure (pravděpodobně máte v menu) a je hotovo. Jednoduché, že?

Příště

Původně jsem se chtěl věnovat jenom Openboxu jako samostatnému prostředí, ale protože Openbox můžete používat jako správce oken místo Metacity nebo KWin v Gnome či KDE, určitě toto téma aspoň naťuknu.

Odkazy

Našli jste v článku chybu?

23. 2. 2007 19:10

No jo, já se taky těším na internacionalizované řetězce. :-) Přijde mi to rozhodně jako lepší řešení než „Unicode musí stačit všem“. Co mají pak dělat národy, jejichž vypiplaná národní kódování nejsou bezeztrátově obousměrně převoditelná s Unicode (Číňané a Japonci, především) a nemůžou si ani do runtimu zasunout příslušný modul?
Měšec.cz: Finančním poradcům hrozí vracení provizí

Finančním poradcům hrozí vracení provizí

Podnikatel.cz: E-Ježíšek si i letos zařádí. Nákupy od 2 do 5 tisíc

E-Ježíšek si i letos zařádí. Nákupy od 2 do 5 tisíc

Root.cz: Vypadl Google a rozbilo se toho hodně

Vypadl Google a rozbilo se toho hodně

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Vitalia.cz: Dáte si jahody s plísní?

Dáte si jahody s plísní?

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

DigiZone.cz: Sony KD-55XD8005 s Android 6.0

Sony KD-55XD8005 s Android 6.0

Měšec.cz: Jak levně odeslat balík přímo z domu?

Jak levně odeslat balík přímo z domu?

Vitalia.cz: Znáte „černý detox“? Ani to nezkoušejte

Znáte „černý detox“? Ani to nezkoušejte

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla