mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-05 04:06:08 -05:00
Bindings are matched in one out of three ways: * By translated (by XKB) symbols * By untranslated symbols * By raw key codes A translated symbol is affected by pressed modifiers, some of which can be “consumed”. Consumed modifiers to not partake in the comparison with the binding’s modifiers. In this mode, ctrl+shift+2 maps to ctrl+@ on a US layout. Untranslated symbols, or un-shifted symbols refer to the “base” symbol of the pressed key, i.e. it’s unaffected by modifiers. In this mode, consumed modifiers *do* partake in the comparison with the binding’s modifiers, and ctrl+shift+2 maps to ctrl+shift+2 on a US layout. More examples: ctrl+shift+u maps to ctrl+U in the translated lookup, while ctrl+shift+u maps to ctrl+shift+u in the untranslated lookup. Finally, we also match raw key codes. This allows our bindings to work using the same physical keys when the user switches between latin and non-latin layouts. This means key bindings in foot.ini *must* not include both +shift+ and a *shifted* key. I.e. ctrl+shift+U is not a valid combo as it cannot be triggered. Unfortunately, this was how you were supposed to write bindings up until now... so, we try to detect such bindings, log a deprecation warning and then “fix” the binding for the user. When specifying bindings in foot.ini, both ctrl+U and ctrl+shift+u are valid, and will work. The latter is preferred though, since we cannot detect the raw key code for the former variant. Personally, I also prefer the latter one because it is more explicit; it’s more obvious which keys are involved. However, in some cases it makes more sense to use the other variant. Typically for non-letter combos.
25 lines
746 B
C
25 lines
746 B
C
#pragma once
|
|
|
|
#include <stdbool.h>
|
|
#include <xkbcommon/xkbcommon.h>
|
|
#include <tllist.h>
|
|
|
|
#include "config.h"
|
|
#include "terminal.h"
|
|
|
|
static inline bool urls_mode_is_active(const struct terminal *term)
|
|
{
|
|
return tll_length(term->urls) > 0;
|
|
}
|
|
|
|
void urls_collect(
|
|
const struct terminal *term, enum url_action action, url_list_t *urls);
|
|
void urls_assign_key_combos(const struct config *conf, url_list_t *urls);
|
|
|
|
void urls_render(struct terminal *term);
|
|
void urls_reset(struct terminal *term);
|
|
|
|
void urls_input(struct seat *seat, struct terminal *term, uint32_t key,
|
|
xkb_keysym_t sym, xkb_mod_mask_t mods, xkb_mod_mask_t consumed,
|
|
const xkb_keysym_t *raw_syms, size_t raw_count,
|
|
uint32_t serial);
|