Hlavní navigace

Pipe-menu v Openboxu

Jakub Šťastný

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?