ST, 즉 단순/불편한 터미널에서 키 바인딩을 사용자 정의하는 방법은 무엇입니까?

ST, 즉 단순/불편한 터미널에서 키 바인딩을 사용자 정의하는 방법은 무엇입니까?

내 해당 부분은 다음과 같습니다 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에서 다음을 가리키는 구조체의 공용체 멤버 주소를 사용하여 호출하는 것입니다 .Shortcutkeypress()x.cbpShortcut

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);
}

관련 정보