Skip to content

Instantly share code, notes, and snippets.

@1xch
Last active December 31, 2015 16:09
Show Gist options
  • Save 1xch/8011253 to your computer and use it in GitHub Desktop.
Save 1xch/8011253 to your computer and use it in GitHub Desktop.
modal search for awesomewm/lua
require("awful")
default_search_modes = {
i = {prompt="IMDB", search="https://imdb.com/"},
w = {prompt="Wikipedia", search="https://wikipedia.com/"},
g = {prompt="Google", search="https://google.com/"},
}
local function create_wbox()
wbox = awful.wibox({ position = "bottom", ontop = true, screen = mouse.screen })
p = awful.widget.prompt({ layout = awful.widget.layout.horizontal.leftright })
wbox.widgets = {p}
end
local function destroy_wbox()
wbox = nil
end
local function local_search_table(st)
for k, v in pairs(st) do default_search_modes[k] = v end
return default_search_modes
end
local function get_prompt_text(search_item)
sip = search_item["prompt"] or search_item["search"]
return "Search " .. sip .. ":"
end
local function grab_search_item(search_table)
return function (m, k, e)
-- wait ~1.5 sec
if k then
create_wbox()
awful.prompt.run({ prompt = get_prompt_text(search_table[k]) },
p.widget,
function () awful.util.spawn(browser) end,
nil)
-- nothing pressed then exit
end
end
end
local function grab_search(lsearch)
return function (m, k, e)
if event == "release" then
keygrabber.run(grab_search_item(lsearch))
end
end
end
local function raise_search_if(search_table)
lsearch = local_search_table(search_table)
keygrabber.run(grab_search(lsearch))
end
modal_search = {raise_search = raise_search_if}
return modal_search
require("awful")
default_search_modes = {
i = {prompt="IMDB", search="https://imdb.com/"},
w = {prompt="Wikipedia", search="https://wikipedia.com/"},
g = {prompt="Google", search="https://google.com/"},
}
local function local_search_table(st)
for k, v in pairs(st) do default_search_modes[k] = v end
return default_search_modes
end
local function get_prompt_text(search_item)
sip = search_item["prompt"] or search_item["search"]
return "Search " .. sip .. ":"
end
local function grab_search_item(k, lsearch)
wbox = awful.wibox({ position = "bottom", ontop = true, screen = mouse.screen })
p = awful.widget.prompt({ layout = awful.widget.layout.horizontal.leftright })
wbox.widgets = {p}
awful.prompt.run({ prompt = get_prompt_text(lsearch[k]) },
p.widget,
function () awful.util.spawn(browser) end,
nil)
end
local function grab_search(lsearch)
return function (m, k, e)
grab_search_item(k, lsearch)
return true
end
end
local function raise_search(search_table)
lsearch = local_search_table(search_table)
keygrabber.run(grab_search(lsearch))
end
modal_search = {raise_search = raise_search}
return modal_search
-- in your variable defs
search_mode = {
a = {prompt="a_search_engine", search="https://a_search_engine.com/?="}
}
-- in your keybinds table
awful.key({ modkey }, "s", function () modal_search.raise_search(search_mode) end),
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment