Awesome is a pretty good tiling window manager I have recently taken some liking to. I initially started with it for the simple reason that I was working with a Matlab script which spawned tens of figures and I wanted to view them simultaneously. I am sure there are easier ways of viewing those graphs than switching window managers from Gnome (which I still think is pretty good) to Awesome, but it was a valid reason to procrastinate in my own way. :-)
Anyhow, some of the things I really missed from Gnome were:
- sticky notes
- Gnome-Do and Pidgin integration (opening IM windows by just Super + Space + Buddy name )
- Gnome-Do and Rhythmbox integration (playing songs by just Super + Space + Song name )
It is the last thing which I got tired of today and looked at how I can fix it. The configuration turned out to be fairly easy to, thanks to the general awesomeness of Awesome and handy Lua documentation. It happened in the following steps:
- Getting to know rhythmbox-client can play songs using their URI, which is just the path of the file in case of local files.
- Understanding how to configure awesome using /.config/awesome/rc.lua
- Figuring out how to get a prompt to type in a song name, which turned out fairly simple thanks to awful.prompt
- Understanding functions in Lua and writing functions for Notification and running the rhythmbox client:
myRhythmboxFunction =
function (c)
home = os.getenv("HOME")
file = io.open(home .. "/.song_list")
if not file then
myNotifyFunction("~/.song_list does not exist")
else
found = false
myNotifyFunction("Searching for " .. c)
c = string.lower(c)
for song in file:lines() do
songLower = string.lower(song)
if string.find(songLower, c) then found = true awful.util.spawn ("rhythmbox-client --play-uri=\"" .. song .. "\"") myNotifyFunction("Found, playing") break end end file:close() if not found then myNotifyFunction("Not found") end end end
It is not difficult to guess what this function does:
- Open the file /.song_list
- Read one line at a time and figure out whether the parameter occurs in the string or not (not very robust)
- If so, great! Play it!
- Otherwise, if no song is found, display a notification and let things be
- Understanding how to add global key bindings:
awful.key({ modkey, }, "p", function () awful.prompt.run({ prompt = "Play: " }, mypromptbox[mouse.screen].widget, myRhythmboxFunction, nil) end),
Here, mypromptbox is just the usual Run prompt which I have borrowed to act as the play prompt box.
After these rudimentary changes, I did:
find /my/music/folder | grep -v 'No directories' > ~/.song_list
To prepare the .song_list file needed in myRhythmboxFunction , and voila!
My songs are now Super + P + Song name away!
The next additions on my dashboard are the Pidgin integration and some sort of periodic mail notification without needing either evolution or thunderbird running in the background.
Some other holiday ...
No comments:
Post a Comment