diff options
Diffstat (limited to 'awesome/lib/awful/widget/prompt.lua')
-rw-r--r-- | awesome/lib/awful/widget/prompt.lua | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/awesome/lib/awful/widget/prompt.lua b/awesome/lib/awful/widget/prompt.lua new file mode 100644 index 0000000..ff9d904 --- /dev/null +++ b/awesome/lib/awful/widget/prompt.lua @@ -0,0 +1,64 @@ +--------------------------------------------------------------------------- +-- @author Julien Danjou <julien@danjou.info> +-- @copyright 2009 Julien Danjou +-- @classmod awful.widget.prompt +--------------------------------------------------------------------------- + +local setmetatable = setmetatable + +local completion = require("awful.completion") +local util = require("awful.util") +local spawn = require("awful.spawn") +local prompt = require("awful.prompt") +local widget_base = require("wibox.widget.base") +local textbox = require("wibox.widget.textbox") +local type = type + +local widgetprompt = { mt = {} } + +--- Run method for promptbox. +-- +-- @param promptbox The promptbox to run. +local function run(promptbox) + return prompt.run { + prompt = promptbox.prompt, + textbox = promptbox.widget, + completion_callback = completion.shell, + history_path = util.get_cache_dir() .. "/history", + exe_callback = function (...) + promptbox:spawn_and_handle_error(...) + end, + } +end + +local function spawn_and_handle_error(self, ...) + local result = spawn(...) + if type(result) == "string" then + self.widget:set_text(result) + end +end + +--- Create a prompt widget which will launch a command. +-- +-- @param args Arguments table. "prompt" is the prompt to use. +-- @return A launcher widget. +function widgetprompt.new(args) + args = args or {} + local widget = textbox() + local promptbox = widget_base.make_widget(widget) + + promptbox.widget = widget + promptbox.widget:set_ellipsize("start") + promptbox.run = run + promptbox.spawn_and_handle_error = spawn_and_handle_error + promptbox.prompt = args.prompt or "Run: " + return promptbox +end + +function widgetprompt.mt:__call(...) + return widgetprompt.new(...) +end + +return setmetatable(widgetprompt, widgetprompt.mt) + +-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80 |