Skip to documentation
SLOP

tiny.xkb.keymap

Reference tiny.xkb keymap

Defined in tiny.xkb.

API (32)

Actions

Public operations.

Types and contracts

Public types and contracts.

Namespaces

Public namespaces.

Values and defaults

Public values and defaults.

No direct callersNo direct callstiny.xkbkeymap
Static calls · unresolved targets: unknown · external targets: unknown.

Source

Source: lib/xkb/src/keymap/model.zig:72

zig
pub const Definition = struct {    modifiers: []const Modifier,    types: []const KeyType,    keys: []const Key,};

Source: lib/xkb/src/keymap/model.zig:54

zig
pub const Group = struct {    type_index: usize,    levels: []const Level,};

Source: lib/xkb/src/keymap/model.zig:65

zig
pub const Key = struct {    code: Keycode,    groups: []const Group,    out_of_range: OutOfRange = .wrap,    repeats: bool = false,};

Source: lib/xkb/src/keymap/model.zig:38

zig
pub const KeyType = struct {    modifiers: ModifierMask,    level_count: usize,    entries: []const TypeEntry,};

Source: lib/xkb/src/keymap/model.zig:100

zig
pub const Keymap = opaque {    pub const Storage = struct {        bytes: [@sizeOf(Backing)]u8 align(@alignOf(Backing)),    };    pub fn init(storage_value: *Storage, definition: Definition) ValidationError!*const Keymap {        const layout_count = try validate(definition);        const backing: *Backing = @ptrCast(storage_value);        backing.* = .{            .definition = definition,            .layout_count = layout_count,        };        return @ptrCast(storage_value);    }    pub fn modifierIndex(self: *const Keymap, name: []const u8) ?usize {        for (self.storage().definition.modifiers, 0..) |modifier, index| {            if (std.mem.eql(u8, modifier.name, name)) return index;        }        return null;    }    pub fn modifierMapping(self: *const Keymap, index: usize) ?ModifierMask {        const modifiers = self.storage().definition.modifiers;        if (index >= modifiers.len) return null;        return modifiers[index].mapping;    }    pub fn canonicalModifierMask(self: *const Keymap) ModifierMask {        _ = self;        return core_modifier_mask;    }    pub fn effectiveModifiers(self: *const Keymap, input: ModifierMask) ModifierMask {        const modifiers = self.storage().definition.modifiers;        var result = input & core_modifier_mask;        for (modifiers[core_modifier_count..], core_modifier_count..) |modifier, index| {            if (input & modifierBit(index) != 0) result |= modifier.mapping;        }        return result;    }    pub fn resolveToCanonicalModifiers(self: *const Keymap, input: ModifierMask) ModifierMask {        return (input & core_modifier_mask) |            self.effectiveModifiers(input & ~core_modifier_mask);    }    pub fn layoutCount(self: *const Keymap) usize {        return self.storage().layout_count;    }    pub fn keyType(self: *const Keymap, index: usize) ?*const KeyType {        const types = self.storage().definition.types;        if (index >= types.len) return null;        return &types[index];    }    pub fn key(self: *const Keymap, code: Keycode) ?*const Key {        const keys = self.storage().definition.keys;        var low: usize = 0;        var high = keys.len;        while (low < high) {            const middle = low + (high - low) / 2;            const candidate = &keys[middle];            if (code < candidate.code) {                high = middle;            } else if (code > candidate.code) {                low = middle + 1;            } else {                return candidate;            }        }        return null;    }    pub fn group(self: *const Keymap, key_value: *const Key, effective_layout: i32) ?usize {        _ = self;        if (key_value.groups.len == 0) return null;        return groupInRange(effective_layout, key_value.groups.len, key_value.out_of_range);    }    fn storage(self: *const Keymap) *const Backing {        return @ptrCast(@alignCast(self));    }};

Source: lib/xkb/src/keymap/model.zig:44

zig
pub const Level = struct {    symbols: []const xkb.keysym.Keysym,    uppercase_symbols: ?[]const xkb.keysym.Keysym = null,    pub fn resolvedSymbols(self: *const Level, uppercase: bool) []const xkb.keysym.Keysym {        if (uppercase) return self.uppercase_symbols orelse self.symbols;        return self.symbols;    }};

Source: lib/xkb/src/keymap/model.zig:10

zig
pub const Modifier = struct {    name: []const u8,    mapping: ModifierMask,    kind: Kind,    pub const Kind = enum {        real,        virtual,    };};

Source: lib/xkb/src/keymap/model.zig:59

zig
pub const OutOfRange = union(enum) {    wrap,    saturate,    redirect: usize,};

Source: lib/xkb/src/keymap/model.zig:32

zig
pub const TypeEntry = struct {    modifiers: ModifierMask,    preserve: ModifierMask = 0,    level: usize,};

Source: lib/xkb/src/keymap/model.zig:78

zig
pub const ValidationError = error{    TooManyModifiers,    InvalidCoreModifiers,    DuplicateModifierName,    InvalidModifierMapping,    EmptyKeyType,    InvalidTypeEntry,    DuplicateTypeEntry,    InvalidGroupType,    InvalidGroupLevels,    InvalidGroupRedirect,    InvalidKeyOrder,    InvalidLayoutCount,    InvalidKeysym,    InvalidUppercaseSymbols,};

Source: lib/xkb/src/keymap/model.zig:5

zig
pub const Keycode = u32;
Called byCallsNo direct callstest sourcelib.xkb.src.keymap.modeltest: compiled keymap validates and r...test sourcelib.xkb.src.keymap.modeltest: empty keymaps retain core modif...keymap.KeymapcanonicalModifierMask
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallstest sourcelib.xkb.src.keymap.modeltest: compiled keymap validates and r...test sourcelib.xkb.src.keymap.modeltest: empty keymaps retain core modif...keymapmodifierBitkeymap.KeymapeffectiveModifiers
Static calls · unresolved targets: 0 · external targets: 1.
Called byCallstest sourcelib.xkb.src.keymap.modeltest: empty keymaps retain core modif...keymapgroupInRangekeymap.Keymapgroup
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallstest sourcelib.xkb.src.keymap.modeltest: canonical levels reject NoSymbo...test sourcelib.xkb.src.keymap.modeltest: compiled construction requires ...test sourcelib.xkb.src.keymap.modeltest: compiled keymap validates and r...test sourcelib.xkb.src.keymap.modeltest: empty keymaps retain core modif...private sourcelib.xkb.src.keymap.modelvalidatekeymap.Keymapinit
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callstest sourcelib.xkb.src.keymap.modeltest: compiled keymap validates and r...test sourcelib.xkb.src.keymap.modeltest: empty keymaps retain core modif...keymap.Keymapkey
Static calls · unresolved targets: 0 · external targets: 1.
Called byCallsNo direct callstest sourcelib.xkb.src.keymap.modeltest: compiled keymap validates and r...test sourcelib.xkb.src.keymap.modeltest: empty keymaps retain core modif...keymap.KeymaplayoutCount
Static calls · unresolved targets: 0 · external targets: 1.
Called byCallsNo direct callstest sourcelib.xkb.src.keymap.modeltest: compiled keymap validates and r...keymap.KeymapmodifierIndex
Static calls · unresolved targets: 0 · external targets: 1.

Source: lib/xkb/src/keymap/model.zig:4

zig
pub const ModifierMask = u32;

Source: lib/xkb/src/keymap/model.zig:7

zig
pub const core_modifier_count = 8;

Source: lib/xkb/src/keymap/model.zig:8

zig
pub const core_modifier_mask: ModifierMask = (1 << core_modifier_count) - 1;

Source: lib/xkb/src/keymap/model.zig:21

zig
pub const core_modifiers = [_]Modifier{    .{ .name = "Shift", .mapping = 1 << 0, .kind = .real },    .{ .name = "Lock", .mapping = 1 << 1, .kind = .real },    .{ .name = "Control", .mapping = 1 << 2, .kind = .real },    .{ .name = "Mod1", .mapping = 1 << 3, .kind = .real },    .{ .name = "Mod2", .mapping = 1 << 4, .kind = .real },    .{ .name = "Mod3", .mapping = 1 << 5, .kind = .real },    .{ .name = "Mod4", .mapping = 1 << 6, .kind = .real },    .{ .name = "Mod5", .mapping = 1 << 7, .kind = .real },};

Source: lib/xkb/src/keymap/model.zig:196

zig
pub fn groupInRange(group: i32, count: usize, out_of_range: OutOfRange) usize {    std.debug.assert(count != 0);    if (group >= 0 and @as(usize, @intCast(group)) < count) return @intCast(group);    return switch (out_of_range) {        .redirect => |redirect| if (redirect < count) redirect else 0,        .saturate => if (group < 0) 0 else count - 1,        .wrap => @intCast(@mod(@as(i64, group), @as(i64, @intCast(count)))),    };}
Called byCallsNo direct callskeymap.Keymapgrouptest sourcelib.xkb.src.keymap.modeltest: key group policies cover negati...keymapgroupInRange
Static calls · unresolved targets: 0 · external targets: 0.

Source: lib/xkb/src/keymap/model.zig:6

zig
pub const max_layouts = 32;

Source: lib/xkb/src/keymap/model.zig:191

zig
pub fn modifierBit(index: usize) ModifierMask {    std.debug.assert(index < @bitSizeOf(ModifierMask));    return @as(ModifierMask, 1) << @intCast(index);}
Called byCallsNo direct callskeymap.KeymapeffectiveModifierstest sourcelib.xkb.src.keymap.modeltest: compiled keymap validates and r...keymapmodifierBit
Static calls · unresolved targets: 0 · external targets: 0.

Source: lib/xkb/src/keymap/root.zig

zig
const model = @import("model.zig");pub const text = @import("text/root.zig");pub const ModifierMask = model.ModifierMask;pub const Keycode = model.Keycode;pub const max_layouts = model.max_layouts;pub const core_modifier_count = model.core_modifier_count;pub const core_modifier_mask = model.core_modifier_mask;pub const Modifier = model.Modifier;pub const core_modifiers = model.core_modifiers;pub const TypeEntry = model.TypeEntry;pub const KeyType = model.KeyType;pub const Level = model.Level;pub const Group = model.Group;pub const OutOfRange = model.OutOfRange;pub const Key = model.Key;pub const Definition = model.Definition;pub const ValidationError = model.ValidationError;pub const Keymap = model.Keymap;pub const modifierBit = model.modifierBit;pub const groupInRange = model.groupInRange;

Source: lib/xkb/src/root.zig:51

zig
pub const keymap = @import("keymap/root.zig");

Audit

Definitions32
Public names32
Members40
Version26.7.0
Revisiondaab053ee433