Memorandum

覚書

Awesomeでfreedesktopを利用したメニューをつくる

f:id:tatsunode:20150527163127p:plain

上に示したのがタイル型ウィンドウマネージャAwesomeのデフォルトのメニューである. 設定ファイルにメニューのエントリとして記述したコマンドを実行できる.

そのため,アプリケーションをインストールしても設定ファイルを 書き換えなければ,そのインストールしたアプリケーションはメニューから選択できるようにはならない.

f:id:tatsunode:20150527210333p:plain

例えば上のgnomeのメニューはインストールしたアプリケーションが 自動で追加される.

Awesomeでは,awesome-freedesktopというAwesomeライブラリを用いることで, 他のデスクトップ環境のようなアプリケーションが自動で登録されるメニューが作れる.

インストール

git clone https://github.com/terceiro/awesome-freedesktop
cd awesome-freedesktop
cp -R freedesktop ~/.config/awesome/

rc.luaのmenuの設定を書き換える

まずfreedesktopを読み込んでおく. local freedesktop = require('freedesktop')

  • menu設定の書き換え

デフォルトの設定ではmenuの設定は以下のようになっている.

-- {{{ Menu
-- Create a laucher widget and a main menu
myawesomemenu = {
   { "manual", terminal .. " -e man awesome" },
   { "edit config", editor_cmd .. " " .. awesome.conffile },
   { "restart", awesome.restart },
   { "quit", awesome.quit }
}
mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon },
                                    { "open terminal", terminal }
                                  }
                        })
mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon,
                                     menu = mymainmenu })
-- Menubar configuration
menubar.utils.terminal = terminal -- Set the terminal for applications that require it
-- }}}

メニュー中のアプリケーションやアイコンを直接記述している. この部分を以下のように書き換えることでfreedesktopで管理されている アプリケーションが自動的にメニューに表示される. アイコンもfreedesktopで設定されているものに変わる.

-- {{{ Menu
freedesktop.utils.terminal = terminal
menu_items = freedesktop.menu.new()
myawesomemenu = {
   { "manual", terminal .. " -e man awesome", freedesktop.utils.lookup_icon({ icon = 'help' }) },
   { "edit config", editor_cmd .. " " .. awful.util.getdir("config") .. "/rc.lua", freedesktop.utils.lookup_icon({ icon = 'package_settings' }) },
   { "restart", awesome.restart, freedesktop.utils.lookup_icon({ icon = 'gtk-refresh' }) },
   { "quit", "oblogout", freedesktop.utils.lookup_icon({ icon = 'gtk-quit' }) }
}
table.insert(menu_items, { "awesome", myawesomemenu, beautiful.awesome_icon })
table.insert(menu_items, { "open terminal", terminal, freedesktop.utils.lookup_icon({icon = 'terminal'}) })
mymainmenu = awful.menu({ items = menu_items, theme = { width = 150 } })
mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon, menu = mymainmenu })
-- }}}