mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 14:38:11 +00:00
LibKeyboard+keymap: Support querying the keymap via commandline
This commit is contained in:
parent
a2c21a55e1
commit
dd4e670f72
4 changed files with 52 additions and 7 deletions
|
@ -33,17 +33,23 @@
|
|||
|
||||
namespace Keyboard {
|
||||
|
||||
CharacterMap::CharacterMap(const String& file_name)
|
||||
CharacterMap::CharacterMap(const String& map_name)
|
||||
{
|
||||
#ifdef KERNEL
|
||||
m_character_map_data = default_character_map;
|
||||
#else
|
||||
auto result = CharacterMapFile::load_from_file(file_name);
|
||||
auto result = CharacterMapFile::load_from_file(map_name);
|
||||
ASSERT(result.has_value());
|
||||
|
||||
m_character_map_data = result.value();
|
||||
#endif
|
||||
m_character_map_name = file_name;
|
||||
m_character_map_name = map_name;
|
||||
}
|
||||
|
||||
CharacterMap::CharacterMap(const String& map_name, const CharacterMapData& map_data)
|
||||
: m_character_map_data(map_data)
|
||||
, m_character_map_name(map_name)
|
||||
{
|
||||
}
|
||||
|
||||
#ifndef KERNEL
|
||||
|
@ -54,6 +60,26 @@ int CharacterMap::set_system_map()
|
|||
return syscall(SC_setkeymap, ¶ms);
|
||||
}
|
||||
|
||||
Result<CharacterMap, OSError> CharacterMap::fetch_system_map()
|
||||
{
|
||||
CharacterMapData map_data;
|
||||
char keymap_name[50 + 1] = { 0 };
|
||||
|
||||
Syscall::SC_getkeymap_params params {
|
||||
map_data.map, map_data.shift_map,
|
||||
map_data.alt_map,
|
||||
map_data.altgr_map,
|
||||
map_data.shift_altgr_map,
|
||||
{ keymap_name, sizeof(keymap_name) }
|
||||
};
|
||||
int rc = syscall(SC_getkeymap, ¶ms);
|
||||
if (rc < 0) {
|
||||
return OSError(-rc);
|
||||
}
|
||||
|
||||
return CharacterMap { keymap_name, map_data };
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
u32 CharacterMap::get_char(KeyEvent event)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue