Aqui está a parte correspondente do meu config.h
:
/* Internal keyboard shortcuts. */
#define MODKEY Mod1Mask
#define TERMMOD (ControlMask|ShiftMask)
static Shortcut shortcuts[] = {
/* mask keysym function argument */
{ XK_ANY_MOD, XK_Break, sendbreak, {.i = 0} },
{ ControlMask, XK_Print, toggleprinter, {.i = 0} },
{ ShiftMask, XK_Print, printscreen, {.i = 0} },
{ XK_ANY_MOD, XK_Print, printsel, {.i = 0} },
{ TERMMOD, XK_Prior, zoom, {.f = +1} },
{ TERMMOD, XK_Next, zoom, {.f = -1} },
{ TERMMOD, XK_Home, zoomreset, {.f = 0} },
{ TERMMOD, XK_C, clipcopy, {.i = 0} },
{ TERMMOD, XK_V, clippaste, {.i = 0} },
{ TERMMOD, XK_Y, selpaste, {.i = 0} },
{ TERMMOD, XK_Num_Lock, numlock, {.i = 0} },
};
Agora, qual é o propósito da coluna argument
?
O endereço do argumento na quarta coluna é passado para a função listada na terceira coluna. Por exemplo, observe como a
zoom()
função é listada duas vezes em argumentos diferentes para atalhos diferentes.O
Shortcut
tipo de dados que compõe ashortcuts[]
matriz em sua pergunta é definidox.c
como uma estrutura de quatro membros:O último membro de
Shortcut
,Arg
, é definidost.h
como uma união de quatro:Um exemplo de
func
serShortcut
chamado com o endereço do membro da união da struct acontece emkeypress()
fromx.c
, ondebp
aponta para aShortcut
:Um exemplo concreto de alavancagem dessa configuração pode ser visto
zoom()
onde o flutuador naArg
união é usado. A partir da configuração em sua pergunta,arg->f
nesta função pode ser+1
ou-1
aumentar ou diminuir o tamanho da fonte: