Skip to content

AZERTY workspace binds dead on be: detection only matches kb_layout = "fr", and fr_keys is wrong for Belgian #1807

Description

@rmdes

Version: 2.15.1 · Layout: kb_layout = "be" (Belgian AZERTY) · Hyprland 0.56.2

Problem

conf/keybindings/default.lua:16 enables AZERTY key names only for exactly fr:

if content:match('kb_layout%s*=%s*"fr"') and not content:match('kb_variant%s*=%s*"us"') then

With kb_layout = "be", is_fr stays false, so the loop at line 28 binds literal digits. On AZERTY layouts the digits are at shift level 2, so neither SUPER + <n> nor SUPER + SHIFT + <n> ever fires — all 20 workspace binds are silently dead. hyprctl binds shows them registered on keys 10, they just can't be produced without SHIFT.

fr_keys is also not reusable for be

Belgian and French differ at indices 6 and 8 (/usr/share/X11/xkb/symbols/):

index fr_keys (line 22) Belgian actual
6 minus section
8 underscore exclam
be: key <AE06> {[ section,    6, asciicircum, fiveeighths ]};
    key <AE08> {[ exclam,     8, bracketleft, trademark   ]};
fr: key <AE06> {[ minus,      6, bar,         fiveeighths ]};
    key <AE08> {[ underscore, 8, backslash,   trademark   ]};

So extending the match to be alone would still leave workspaces 6 and 8 broken.

Suggested fix

Key the table on the layout rather than a boolean:

local azerty_keys = {
    fr = { "ampersand","eacute","quotedbl","apostrophe","parenleft",
           "minus","egrave","underscore","ccedilla","agrave" },
    be = { "ampersand","eacute","quotedbl","apostrophe","parenleft",
           "section","egrave","exclam","ccedilla","agrave" },
}

Workaround

In custom.lua. Hyprland dispatches every matching bind rather than the first, so the dead digit binds must be unbound, not just shadowed:

local be_keys = { "ampersand","eacute","quotedbl","apostrophe","parenleft",
                  "section","egrave","exclam","ccedilla","agrave" }
for i = 1, 10 do
    local digit = i % 10
    hl.unbind("SUPER + " .. digit)
    hl.unbind("SUPER + SHIFT + " .. digit)
    hl.bind("SUPER + " .. be_keys[i], hl.dsp.focus({ workspace = i }), {})
    hl.bind("SUPER + SHIFT + " .. be_keys[i], hl.dsp.window.move({ workspace = i }), {})
end

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions