내 해당 부분은 다음과 같습니다 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} },
};
자, 이 칼럼의 목적은 무엇입니까 argument
?
답변1
네 번째 열의 매개변수 주소는 세 번째 열에 나열된 함수로 전달됩니다. 예를 들어, zoom()
다양한 단축키에 대한 다양한 매개변수를 사용하여 함수가 어떻게 두 번 나열되는지 확인하세요.
Shortcut
질문에서 배열을 구성하는 데이터 유형은 다음 네 가지 멤버로 구성된 구조 shortcuts[]
로 정의됩니다.x.c
typedef struct {
uint mod;
KeySym keysym;
void (*func)(const Arg *);
const Arg arg;
} Shortcut;
Shortcut
, 의 마지막 멤버는 4개의 합집합으로 Arg
정의됩니다 .st.h
typedef union {
int i;
uint ui;
float f;
const void *v;
} Arg;
func
예를 들어, from에서 다음을 가리키는 구조체의 공용체 멤버 주소를 사용하여 호출하는 것입니다 .Shortcut
keypress()
x.c
bp
Shortcut
if (ksym == bp->keysym && match(bp->mod, e->state)) {
bp->func(&(bp->arg));
...
이 설정을 활용하는 구체적인 예는 공용체에서 zoom()
부동 소수점이 사용되는 곳에서 볼 수 있습니다 . Arg
질문의 구성에 따라 arg->f
이 기능에서 글꼴 크기를 늘리거나 줄일 +1
수 있습니다 -1
.
void
zoom(const Arg *arg)
{
Arg larg;
larg.f = usedfontsize + arg->f;
zoomabs(&larg);
}