From 12668472f86d0f7bb3f74363f4ab2e1b7dd6ad25 Mon Sep 17 00:00:00 2001 From: Alice Gaudon Date: Tue, 13 Aug 2019 23:58:50 +0200 Subject: [PATCH] Update keyboard layout widget and small improvements --- README.md | 1 + default_config.lua | 41 ++++++++----- simple/core/hotkey.lua | 4 ++ simple/init.lua | 92 ++++++++++-------------------- simple/media_control.lua | 28 ++++----- simple/widgets/keyboard_layout.lua | 26 +++++++++ 6 files changed, 101 insertions(+), 91 deletions(-) create mode 100644 simple/widgets/keyboard_layout.lua diff --git a/README.md b/README.md index efe4ad8..bc2d779 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,7 @@ By default, Simple Awesome uses - Improve "leave menu"'s design - Modify "start menu", make everything work - Make "start menu" and "leave menu" not sticky (they currently stay open and focus even when clicking outside) +- Replace the os menu with a custom widget ## Arisu personal todo diff --git a/default_config.lua b/default_config.lua index f655401..8f4c73c 100644 --- a/default_config.lua +++ b/default_config.lua @@ -73,10 +73,7 @@ config.keys = { -- Hotkeys globally available (through the entire OS, regardless of what's focused) config.keys.global_keys = { -- Application launcher - launcher = { - { config.keys.modkey }, - "space", - }, + launcher = { { config.keys.modkey }, "space", }, -- -- Media and volume controls @@ -84,23 +81,32 @@ config.keys.global_keys = { -- media_control = { -- Raise volume - raiseVolume = "XF86AudioRaiseVolume", + raiseVolume = { {}, "XF86AudioRaiseVolume" }, -- Lower volume - lowerVolume = "XF86AudioLowerVolume", + lowerVolume = { {}, "XF86AudioLowerVolume" }, -- Toggle mute - toggleMute = "XF86AudioMute", + toggleMute = { {}, "XF86AudioMute" }, -- Toggle Play / Pause - playPause = "XF86AudioPlay", + playPause = { {}, "XF86AudioPlay" }, -- Next track - nextTrack = "XF86AudioNext", + nextTrack = { {}, "XF86AudioNext" }, -- Previous track - previousTrack = "XF86AudioPrev", + previousTrack = { {}, "XF86AudioPrev" }, }, + + -- Keyboard layout + keyboard_layout = { + -- Switch between layouts + switch = { { "Mod1" }, "Shift_L" }, + + -- Switch between layouts (alternative) + switch_alt = { { "Shift" }, "Alt_L" }, + } } @@ -108,8 +114,17 @@ config.keys.global_keys = { -- Widgets -- config.widgets = { + -- Keyboard layout widget + keyboard_layout = { + enabled = true, + layouts = { "fr", "us" }, + layout_switch_command = "setxkbmap", + }, + -- Enable/disable the system resources monitoring widget - system_resources = true, + system_resources = { + enabled = true, + }, } @@ -135,10 +150,6 @@ config.theme = awful.util.getdir("config") .. "/theme.lua" -- Screenshot utility config.screenshot_utility_command = "flameshot gui" --- Keyboard layout -config.kbSwitchCmd = "setxkbmap" -config.kbLayouts = { "fr", "us" } - -- Run menu config.windowSwitcher = "rofi -show window -config " .. awful.util.getdir("config") .. "/assets/rofi/themes/paper-float.rasi" diff --git a/simple/core/hotkey.lua b/simple/core/hotkey.lua index 693dd59..9c111de 100644 --- a/simple/core/hotkey.lua +++ b/simple/core/hotkey.lua @@ -4,6 +4,10 @@ local gears = require("gears") local global_keys = {} function make(hotkey, action, identity) + if hotkey == nil then + return nil + end + local modifiers = hotkey[1] local key = hotkey[2] return awful.key(modifiers, key, action, identity) diff --git a/simple/init.lua b/simple/init.lua index f4f5eb8..c231f44 100644 --- a/simple/init.lua +++ b/simple/init.lua @@ -111,10 +111,18 @@ hotkey.registerKeys(media_control.getKeys(config.keys.global_keys.media_control) -- System resources local system_resources_widget -if config.widgets.system_resources then +if config.widgets.system_resources.enabled then system_resources_widget = require("simple/widgets/system_resources") end +-- Keyboard map indicator and switcher +local keyboard_layout = require("simple/widgets/keyboard_layout") +local keyboard_layout_widget +if config.widgets.keyboard_layout.enabled then + keyboard_layout_widget = keyboard_layout.widget +end +hotkey.registerKeys(keyboard_layout.getKeys(config.keys.global_keys.keyboard_layout)) + -- -- Auto start @@ -133,68 +141,31 @@ end -- -- Launcher (start menu) -- -local launcher = awful.widget.launcher({ +local launcher = awful.widget.button({ image = beautiful.awesome_icon, - menu = awful.menu({ - items = { - { "Hotkeys", function() hotkeys_popup.show_help(nil, awful.screen.focused()) end }, - { "Manual", config.awesome.terminal .. " -e man awesome" }, - { "Edit config", config.awesome.editor_cmd .. " " .. awesome.conffile }, - { "Open terminal", config.awesome.terminal } - } - }), }) - - --- Keyboard map indicator and switcher -mykeyboardlayout = awful.widget.keyboardlayout() - -kbdlayout = {} -kbdlayout.cur = 1 -kbdlayout.switch = function() - kbdlayout.cur = (kbdlayout.cur % #(config.kbLayouts)) + 1 - local t = config.kbLayouts[kbdlayout.cur] - os.execute(config.kbSwitchCmd .. " " .. t) -end +launcher:buttons(gears.table.join(launcher:buttons(), + awful.button({}, 1, nil, showAppLauncher))) shutdown_icon = awesome.load_image(awful.util.getdir("config") .. "/assets/icons/power.svg") restart_icon = awesome.load_image(awful.util.getdir("config") .. "/assets/icons/refresh-cw.svg") logout_icon = awesome.load_image(awful.util.getdir("config") .. "/assets/icons/log-out.svg") lock_icon = awesome.load_image(awful.util.getdir("config") .. "/assets/icons/lock.svg") -shutdownMenu_items = { - { - "Shutdown", - function() - os.execute('shutdown now') - end, - shutdown_icon - }, - { - "Restart", - function() - os.execute('shutdown -r now') - end, - restart_icon - }, - { - "Logout", - function() - awesome.quit() - end, - logout_icon - }, - { - "Lock", - function() - awful.spawn("xscreensaver-command -lock") - end, - lock_icon - } -} -shutdownMenu_launcher = awful.widget.launcher({ +os_menu = awful.widget.launcher({ image = beautiful.awesome_icon, - menu = awful.menu({ items = shutdownMenu_items }) + menu = awful.menu({ + items = { + { "Hotkeys", function() hotkeys_popup.show_help(nil, awful.screen.focused()) end }, + { "Manual", config.awesome.terminal .. " -e man awesome" }, + { "Edit config", config.awesome.editor_cmd .. " " .. awesome.conffile }, + { "Open terminal", config.awesome.terminal }, + { "Lock", function() awful.spawn("xscreensaver-command -lock") end, lock_icon }, + { "Logout", function() awesome.quit() end, logout_icon }, + { "Restart", function() os.execute('shutdown -r now') end, restart_icon }, + { "Shutdown", function() os.execute('shutdown now') end, shutdown_icon }, + } + }) }) @@ -332,20 +303,20 @@ awful.screen.connect_for_each_screen(function(s) { -- Left widgets layout = wibox.layout.fixed.horizontal, - mylauncher, + launcher, s.mytaglist, s.mypromptbox, }, s.mytasklist, -- Middle widget { -- Right widgets - matchesScreen(config.system_resources_widget_screens) and system_resources_widget.widget or nil, layout = wibox.layout.fixed.horizontal, - mykeyboardlayout, + matchesScreen(config.system_resources_widget_screens) and system_resources_widget.widget or nil, + keyboard_layout_widget, wibox.widget.systray(), mytextclock, s.mylayoutbox, - shutdownMenu_launcher, + os_menu, }, } end) @@ -453,11 +424,6 @@ hotkey.registerKeys(awful.key({ config.keys.modkey, }, "s", hotkeys_popup.show_h -- Menubar awful.key({ config.keys.modkey }, "space", function() os.execute(config.runMenu) end, { description = "show the run menu", group = "launcher" }), - -- Keyboard layout switch - awful.key({ "Mod1" }, "Shift_L", function() kbdlayout.switch() end, - { description = "switch keyboard layout" }), - awful.key({ "Shift" }, "Alt_L", function() kbdlayout.switch() end, - { description = "switch keyboard layout" }), -- Flameshot awful.key({}, "Print", function() os.execute(config.screenshot_utility_command) end, { description = "Take a screenshot using the screenshot utility", group = "utilities" })) diff --git a/simple/media_control.lua b/simple/media_control.lua index 4f10dcb..5ae7b10 100644 --- a/simple/media_control.lua +++ b/simple/media_control.lua @@ -16,6 +16,8 @@ local gears = require("gears") local naughty = require("naughty") local wibox = require("wibox") +local hotkey = require("simple/core/hotkey") + local config = require("config") local hasPlayerctl = os.execute("playerctl -v") == true @@ -183,20 +185,20 @@ end function getKeys(config) return -- Volume control - config.raiseVolume ~= nil and awful.key({}, config.raiseVolume, raiseVolume, - { description = "Raise volume", group = "media control" }) or nil, - config.lowerVolume ~= nil and awful.key({}, config.lowerVolume, lowerVolume, - { description = "Lower volume", group = "media control" }) or nil, - config.toggleMute ~= nil and awful.key({}, config.toggleMute, toggleMute, - { description = "Toggle mute audio", group = "media control" }) or nil, + hotkey.make(config.raiseVolume, raiseVolume, + { description = "Raise volume", group = "media control" }), + hotkey.make(config.lowerVolume, lowerVolume, + { description = "Lower volume", group = "media control" }), + hotkey.make(config.toggleMute, toggleMute, + { description = "Toggle mute audio", group = "media control" }), - -- Media control - config.playPause ~= nil and awful.key({}, config.playPause, playPause, - { description = "Toggle Play / Pause", group = "media control" }) or nil, - config.nextTrack ~= nil and awful.key({}, config.nextTrack, nextTrack, - { description = "Next track", group = "media control" }) or nil, - config.previousTrack ~= nil and awful.key({}, config.previousTrack, previousTrack, - { description = "Previous track", group = "media control" }) or nil + -- Media control + hotkey.make(config.playPause, playPause, + { description = "Toggle Play / Pause", group = "media control" }), + hotkey.make(config.nextTrack, nextTrack, + { description = "Next track", group = "media control" }), + hotkey.make(config.previousTrack, previousTrack, + { description = "Previous track", group = "media control" }) end return { diff --git a/simple/widgets/keyboard_layout.lua b/simple/widgets/keyboard_layout.lua new file mode 100644 index 0000000..3a07c4f --- /dev/null +++ b/simple/widgets/keyboard_layout.lua @@ -0,0 +1,26 @@ +local awful = require("awful") + +local hotkey = require("simple/core/hotkey") + +local config = require("config") + + +local widget = awful.widget.keyboardlayout() +local layouts = config.widgets.keyboard_layout.layouts + +local current_layout_index = 1 +function switchLayout() + current_layout_index = (current_layout_index % #(layouts)) + 1 + os.execute(config.widgets.keyboard_layout.layout_switch_command .. " " .. layouts[current_layout_index]) +end + +return { + widget = widget, + switch = switchLayout, + getKeys = function(config) + return hotkey.make(config.switch, switchLayout, + { description = "switch keyboard layout" }), + hotkey.make(config.switch_alt, switchLayout, + { description = "switch keyboard layout (alternative)" }) + end +} \ No newline at end of file