feat(xkeyboard): Add variant support to layout label (#2163)
* Add variant support to xkeyboard layout label Solves #316 * Run style checks, I guess? * Add comment * Return nothing if there is no variant * Update CHANGELOG
This commit is contained in:
parent
6f13fe93a3
commit
0d2838fcd5
@ -33,6 +33,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
([`#2294`](https://github.com/polybar/polybar/issues/2294))
|
([`#2294`](https://github.com/polybar/polybar/issues/2294))
|
||||||
- `internal/network`: `speed-unit = B/s` can be used to customize how network
|
- `internal/network`: `speed-unit = B/s` can be used to customize how network
|
||||||
speeds are displayed.
|
speeds are displayed.
|
||||||
|
- `internal/xkeyboard`: `%variant%` can be used to parse the layout variant
|
||||||
|
([`#316`](https://github.com/polybar/polybar/issues/316))
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
- Slight changes to the value ranges the different ramp levels are responsible
|
- Slight changes to the value ranges the different ramp levels are responsible
|
||||||
|
@ -44,7 +44,7 @@ namespace evt {
|
|||||||
using xkb_action_message = xpp::xkb::event::action_message<connection&>;
|
using xkb_action_message = xpp::xkb::event::action_message<connection&>;
|
||||||
using xkb_access_x_notify = xpp::xkb::event::access_x_notify<connection&>;
|
using xkb_access_x_notify = xpp::xkb::event::access_x_notify<connection&>;
|
||||||
using xkb_extension_device_notify = xpp::xkb::event::extension_device_notify<connection&>;
|
using xkb_extension_device_notify = xpp::xkb::event::extension_device_notify<connection&>;
|
||||||
}
|
} // namespace evt
|
||||||
|
|
||||||
class keyboard {
|
class keyboard {
|
||||||
public:
|
public:
|
||||||
@ -62,7 +62,9 @@ class keyboard {
|
|||||||
};
|
};
|
||||||
|
|
||||||
explicit keyboard(vector<layout>&& layouts_, map<indicator::type, indicator>&& indicators_, unsigned char group)
|
explicit keyboard(vector<layout>&& layouts_, map<indicator::type, indicator>&& indicators_, unsigned char group)
|
||||||
: layouts(forward<decltype(layouts)>(layouts_)), indicators(forward<decltype(indicators)>(indicators_)), current_group(group) {}
|
: layouts(forward<decltype(layouts)>(layouts_))
|
||||||
|
, indicators(forward<decltype(indicators)>(indicators_))
|
||||||
|
, current_group(group) {}
|
||||||
|
|
||||||
const indicator& get(const indicator::type& i) const;
|
const indicator& get(const indicator::type& i) const;
|
||||||
void set(unsigned int state);
|
void set(unsigned int state);
|
||||||
@ -71,6 +73,7 @@ class keyboard {
|
|||||||
unsigned char current() const;
|
unsigned char current() const;
|
||||||
const string group_name(size_t index = 0) const;
|
const string group_name(size_t index = 0) const;
|
||||||
const string layout_name(size_t index = 0) const;
|
const string layout_name(size_t index = 0) const;
|
||||||
|
const string variant_name(size_t index = 0) const;
|
||||||
const string indicator_name(const indicator::type&) const;
|
const string indicator_name(const indicator::type&) const;
|
||||||
size_t size() const;
|
size_t size() const;
|
||||||
|
|
||||||
@ -90,6 +93,6 @@ namespace xkb_util {
|
|||||||
vector<keyboard::layout> get_layouts(connection& conn, xcb_xkb_device_spec_t device);
|
vector<keyboard::layout> get_layouts(connection& conn, xcb_xkb_device_spec_t device);
|
||||||
map<keyboard::indicator::type, keyboard::indicator> get_indicators(connection& conn, xcb_xkb_device_spec_t device);
|
map<keyboard::indicator::type, keyboard::indicator> get_indicators(connection& conn, xcb_xkb_device_spec_t device);
|
||||||
string parse_layout_symbol(string&& name);
|
string parse_layout_symbol(string&& name);
|
||||||
}
|
} // namespace xkb_util
|
||||||
|
|
||||||
POLYBAR_NS_END
|
POLYBAR_NS_END
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
#include "modules/xkeyboard.hpp"
|
#include "modules/xkeyboard.hpp"
|
||||||
|
|
||||||
#include "drawtypes/iconset.hpp"
|
#include "drawtypes/iconset.hpp"
|
||||||
#include "drawtypes/label.hpp"
|
#include "drawtypes/label.hpp"
|
||||||
|
#include "modules/meta/base.inl"
|
||||||
#include "utils/factory.hpp"
|
#include "utils/factory.hpp"
|
||||||
#include "x11/atoms.hpp"
|
#include "x11/atoms.hpp"
|
||||||
#include "x11/connection.hpp"
|
#include "x11/connection.hpp"
|
||||||
|
|
||||||
#include "modules/meta/base.inl"
|
|
||||||
|
|
||||||
POLYBAR_NS
|
POLYBAR_NS
|
||||||
|
|
||||||
namespace modules {
|
namespace modules {
|
||||||
@ -25,8 +25,6 @@ namespace modules {
|
|||||||
*/
|
*/
|
||||||
xkeyboard_module::xkeyboard_module(const bar_settings& bar, string name_)
|
xkeyboard_module::xkeyboard_module(const bar_settings& bar, string name_)
|
||||||
: static_module<xkeyboard_module>(bar, move(name_)), m_connection(connection::make()) {
|
: static_module<xkeyboard_module>(bar, move(name_)), m_connection(connection::make()) {
|
||||||
|
|
||||||
|
|
||||||
// Setup extension
|
// Setup extension
|
||||||
// clang-format off
|
// clang-format off
|
||||||
m_connection.xkb().select_events_checked(XCB_XKB_ID_USE_CORE_KBD,
|
m_connection.xkb().select_events_checked(XCB_XKB_ID_USE_CORE_KBD,
|
||||||
@ -121,6 +119,7 @@ namespace modules {
|
|||||||
if (m_layout) {
|
if (m_layout) {
|
||||||
m_layout->reset_tokens();
|
m_layout->reset_tokens();
|
||||||
m_layout->replace_token("%name%", m_keyboard->group_name(m_keyboard->current()));
|
m_layout->replace_token("%name%", m_keyboard->group_name(m_keyboard->current()));
|
||||||
|
m_layout->replace_token("%variant%", m_keyboard->variant_name(m_keyboard->current()));
|
||||||
|
|
||||||
auto const current_layout = m_keyboard->layout_name(m_keyboard->current());
|
auto const current_layout = m_keyboard->layout_name(m_keyboard->current());
|
||||||
auto icon = m_layout_icons->get(current_layout, DEFAULT_LAYOUT_ICON);
|
auto icon = m_layout_icons->get(current_layout, DEFAULT_LAYOUT_ICON);
|
||||||
@ -287,6 +286,6 @@ namespace modules {
|
|||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} // namespace modules
|
||||||
|
|
||||||
POLYBAR_NS_END
|
POLYBAR_NS_END
|
||||||
|
@ -64,6 +64,21 @@ const string keyboard::layout_name(size_t index) const {
|
|||||||
return layouts[index].symbols[index];
|
return layouts[index].symbols[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get current variant name
|
||||||
|
* "GROUP (VARIANT)"
|
||||||
|
* ^^^^^^^
|
||||||
|
*/
|
||||||
|
const string keyboard::variant_name(size_t index) const {
|
||||||
|
string group_name = this->group_name(index);
|
||||||
|
if (int start = group_name.find('(') + 1) {
|
||||||
|
int num_chars = group_name.find(')') - start;
|
||||||
|
return group_name.substr(start, num_chars);
|
||||||
|
} else {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get indicator name
|
* Get indicator name
|
||||||
*/
|
*/
|
||||||
@ -212,6 +227,6 @@ namespace xkb_util {
|
|||||||
}
|
}
|
||||||
return move(name);
|
return move(name);
|
||||||
}
|
}
|
||||||
}
|
} // namespace xkb_util
|
||||||
|
|
||||||
POLYBAR_NS_END
|
POLYBAR_NS_END
|
||||||
|
Loading…
Reference in New Issue
Block a user