diff options
Diffstat (limited to 'run-shell-3')
-rw-r--r-- | run-shell-3/README.md | 34 | ||||
-rw-r--r-- | run-shell-3/blur.png | bin | 0 -> 329592 bytes | |||
-rw-r--r-- | run-shell-3/pixelate.png | bin | 0 -> 133469 bytes | |||
-rw-r--r-- | run-shell-3/run-shell.lua | 134 |
4 files changed, 168 insertions, 0 deletions
diff --git a/run-shell-3/README.md b/run-shell-3/README.md new file mode 100644 index 0000000..039a23c --- /dev/null +++ b/run-shell-3/README.md @@ -0,0 +1,34 @@ +# Run Shell + +Blurs / pixelates background and shows widget with run prompt: + +![screenshot](./blur.png) + +![screenshot](./pixelate.png) + +## Installation + +1. To blur / pixelate the background this widget used [ffmpeg](https://www.ffmpeg.org/) and [frei0r](https://frei0r.dyne.org/) plugins (if you want to pixelate the background), which you need to install. Installation of those depends on your distribution, for ffmpeg just follow the installation section of the site, for frei0r I was able to install it by simply running + + ``` + sudo apt-get install frei0r-plugins + ``` + +1. Clone this repo under **~/.config/awesome/**: + + ```bash + git clone https://github.com/streetturtle/awesome-wm-widgets.git ~/.config/awesome/ + ``` + +1. Require weather widget at the beginning of **rc.lua**: + + ```lua + local run_shell = require("awesome-wm-widgets.run_shell.run_shell") + ``` + +1. Use it (don't forget to comment out the default prompt): + + ```lua + awful.key({modkey}, "r", function () run_shell.launch() end), + ``` +:warning: I am not 100% sure but it may (memory) leak. If awesome uses lots of RAM just reload config (Ctrl + Mod4 + r). diff --git a/run-shell-3/blur.png b/run-shell-3/blur.png Binary files differnew file mode 100644 index 0000000..4e8b54c --- /dev/null +++ b/run-shell-3/blur.png diff --git a/run-shell-3/pixelate.png b/run-shell-3/pixelate.png Binary files differnew file mode 100644 index 0000000..fedf320 --- /dev/null +++ b/run-shell-3/pixelate.png diff --git a/run-shell-3/run-shell.lua b/run-shell-3/run-shell.lua new file mode 100644 index 0000000..8fab5fd --- /dev/null +++ b/run-shell-3/run-shell.lua @@ -0,0 +1,134 @@ +------------------------------------------------- +-- Run Shell for Awesome Window Manager +-- More details could be found here: +-- https://github.com/streetturtle/awesome-wm-widgets/tree/master/run-shell + +-- @author Pavel Makhov +-- @copyright 2018 Pavel Makhov +-- @copyright 2019 Pavel Makhov +------------------------------------------------- + +local capi = { + screen = screen, + client = client, +} +local awful = require("awful") +local gfs = require("gears.filesystem") +local wibox = require("wibox") +local gears = require("gears") +local naughty = require("naughty") +local completion = require("awful.completion") + +local run_shell = awful.widget.prompt() + +local widget = {} + +function widget.new() + local widget_instance = { + _cached_wiboxes = {}, + _cmd_pixelate = [[bash -c 'ffmpeg -loglevel panic -f x11grab -video_size 1920x1060 -y -i :0.0+%s,20 -vf frei0r=pixeliz0r -vframes 1 /tmp/i3lock-%s.png ; echo done']], + _cmd_blur = [[bash -c 'ffmpeg -loglevel panic -f x11grab -video_size 1920x1060 -y -i :0.0+%s,20 -filter_complex "boxblur=9" -vframes 1 /tmp/i3lock-%s.png ; echo done']] + } + + function widget_instance:_create_wibox() + local w = wibox { + visible = false, + ontop = true, + height = 1060, + width = 1920 + } + + w:setup { + { + { + { + { + markup = '<span font="awesomewm-font 14" color="#ffffff">a</span>', + widget = wibox.widget.textbox, + }, + id = 'icon', + left = 10, + layout = wibox.container.margin + }, + { + run_shell, + left = 10, + layout = wibox.container.margin, + }, + id = 'left', + layout = wibox.layout.fixed.horizontal + }, + widget = wibox.container.background, + bg = '#333333', + shape = function(cr, width, height) + gears.shape.rounded_rect(cr, width, height, 3) + end, + shape_border_color = '#74aeab', + shape_border_width = 1, + forced_width = 200, + forced_height = 50 + }, + layout = wibox.container.place + } + + return w + end + + function widget_instance:launch(s, c) + c = c or capi.client.focus + s = mouse.screen + -- naughty.notify { text = 'screen ' .. s.index } + if not self._cached_wiboxes[s] then + self._cached_wiboxes[s] = {} + -- naughty.notify { text = 'nope' } + end + if not self._cached_wiboxes[s][1] then + self._cached_wiboxes[s][1] = self:_create_wibox() + -- naughty.notify { text = 'nope' } + end + local w = self._cached_wiboxes[s][1] + local rnd = math.random() + awful.spawn.with_line_callback(string.format(self._cmd_blur, tostring(awful.screen.focused().geometry.x), rnd), { + stdout = function(line) + w.visible = true + w.bgimage = '/tmp/i3lock-' .. rnd ..'.png' + awful.placement.top(w, { margins = { top = 20 }, parent = awful.screen.focused() }) + awful.prompt.run { + prompt = 'Run: ', + bg_cursor = '#74aeab', + textbox = run_shell.widget, + completion_callback = completion.shell, + exe_callback = function(...) + run_shell:spawn_and_handle_error(...) + end, + history_path = gfs.get_cache_dir() .. "/history", + done_callback = function() + w.visible = false + w.bgimage = '' + awful.spawn([[bash -c 'rm -f /tmp/i3lock*']]) + end + } + end, + stderr = function(line) + naughty.notify { text = "ERR:" .. line } + end, + }) + + end + + return widget_instance +end + +local function get_default_widget() + if not widget.default_widget then + widget.default_widget = widget.new() + end + return widget.default_widget +end + +function widget.launch(...) + return get_default_widget():launch(...) +end + +return widget + |