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

4番目の列のパラメータアドレスは、3番目の列にリストされている関数に渡されます。たとえば、zoom()さまざまなホットキーのさまざまなパラメータを使用して、関数がどのように2回一覧表示されるかを確認します。


Shortcut質問で配列を構成するデータ型は、次の4つのメンバーで構成される構造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);
}

おすすめ記事