On 230924-093006, Hiltjo Posthuma 'hil...@codemadness.org' wrote:
>
>
>On Sun, Sep 24, 2023 at 05:34:48AM +0000, suiso67@macadamia.rocks wrote:
>> From: suiso67 <suiso67@macadamia.rocks>
>>
>> ---
>>  config.def.h | 43 +++++++++++++++++++++++++++++++++++++++++++
>>  dwm.c        | 47 +++++++++++++++++++++++++++++++++++++++++++++++
>>  2 files changed, 90 insertions(+)
>>
>> diff --git a/config.def.h b/config.def.h
>> index 061ad66..98ff36f 100644
>> --- a/config.def.h
>> +++ b/config.def.h
>> @@ -51,6 +51,8 @@ static const Layout layouts[] = {
>>      { MODKEY|ControlMask,           KEY,      toggleview,     {.ui = 1 << 
>> TAG} }, \
>>      { MODKEY|ShiftMask,             KEY,      tag,            {.ui = 1 << 
>> TAG} }, \
>>      { MODKEY|ControlMask|ShiftMask, KEY,      toggletag,      {.ui = 1 << 
>> TAG} },
>> +#define KEYEVENT(SRC_MOD,SRC_KEY,DST_MOD,DST_KEY) \
>> +    { SRC_MOD, SRC_KEY, sendkeyevent, { .v = &(const KeyShortcut){ DST_MOD, 
>> DST_KEY } } },
>>
>>  /* helper for spawning shell commands in the pre dwm-5.0 fashion */
>>  #define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
>> @@ -84,6 +86,47 @@ static const Key keys[] = {
>>      { MODKEY,                       XK_period, focusmon,       {.i = +1 } },
>>      { MODKEY|ShiftMask,             XK_comma,  tagmon,         {.i = -1 } },
>>      { MODKEY|ShiftMask,             XK_period, tagmon,         {.i = +1 } },
>> +    // Navigation(two-handed)
>> +    KEYEVENT(Mod1Mask, XK_h, 0, XK_Left)
>> +    KEYEVENT(Mod1Mask, XK_l, 0, XK_Right)
>> +    KEYEVENT(Mod1Mask, XK_k, 0, XK_Up)
>> +    KEYEVENT(Mod1Mask, XK_j, 0, XK_Down)
>> +    KEYEVENT(Mod1Mask, XK_p, 0, XK_Up)
>> +    KEYEVENT(Mod1Mask, XK_n, 0, XK_Down)
>> +    KEYEVENT(Mod1Mask, XK_i, ControlMask, XK_Left)
>> +    KEYEVENT(Mod1Mask, XK_o, ControlMask, XK_Right)
>> +    KEYEVENT(Mod1Mask, XK_q, ControlMask, XK_Left)
>> +    KEYEVENT(Mod1Mask, XK_w, ControlMask, XK_Right)
>> +    KEYEVENT(Mod1Mask, XK_equal, ControlMask, XK_Home)
>> +    KEYEVENT(Mod1Mask, XK_minus, ControlMask, XK_End)
>> +    // Navigation(one-handed)
>> +    KEYEVENT(Mod1Mask, XK_s, 0, XK_Up)
>> +    KEYEVENT(Mod1Mask, XK_x, 0, XK_Down)
>> +    KEYEVENT(Mod1Mask, XK_z, 0, XK_Left)
>> +    KEYEVENT(Mod1Mask, XK_c, 0, XK_Right)
>> +    KEYEVENT(Mod1Mask, XK_d, 0, XK_Return)
>> +    KEYEVENT(Mod1Mask, XK_a, 0, XK_Home)
>> +    KEYEVENT(Mod1Mask, XK_e, 0, XK_End)
>> +    // Selection(two-handed)
>> +    KEYEVENT(Mod1Mask|ShiftMask, XK_h, ShiftMask, XK_Left)
>> +    KEYEVENT(Mod1Mask|ShiftMask, XK_l, ShiftMask, XK_Right)
>> +    KEYEVENT(Mod1Mask|ShiftMask, XK_k, ShiftMask, XK_Up)
>> +    KEYEVENT(Mod1Mask|ShiftMask, XK_j, ShiftMask, XK_Down)
>> +    KEYEVENT(Mod1Mask|ShiftMask, XK_p, ShiftMask, XK_Up)
>> +    KEYEVENT(Mod1Mask|ShiftMask, XK_n, ShiftMask, XK_Down)
>> +    KEYEVENT(Mod1Mask|ShiftMask, XK_i, ControlMask|ShiftMask, XK_Left)
>> +    KEYEVENT(Mod1Mask|ShiftMask, XK_o, ControlMask|ShiftMask, XK_Right)
>> +    KEYEVENT(Mod1Mask|ShiftMask, XK_equal, ControlMask|ShiftMask, XK_Home)
>> +    KEYEVENT(Mod1Mask|ShiftMask, XK_minus, ControlMask|ShiftMask, XK_End)
>> +    // Selection(one-handed)
>> +    KEYEVENT(Mod1Mask|ShiftMask, XK_s, ShiftMask, XK_Up)
>> +    KEYEVENT(Mod1Mask|ShiftMask, XK_x, ShiftMask, XK_Down)
>> +    KEYEVENT(Mod1Mask|ShiftMask, XK_z, ShiftMask, XK_Left)
>> +    KEYEVENT(Mod1Mask|ShiftMask, XK_c, ShiftMask, XK_Right)
>> +    KEYEVENT(Mod1Mask|ShiftMask, XK_q, ControlMask|ShiftMask, XK_Left)
>> +    KEYEVENT(Mod1Mask|ShiftMask, XK_w, ControlMask|ShiftMask, XK_Right)
>> +    KEYEVENT(Mod1Mask|ShiftMask, XK_a, ShiftMask, XK_Home)
>> +    KEYEVENT(Mod1Mask|ShiftMask, XK_e, ShiftMask, XK_End)
>>      TAGKEYS(                        XK_1,                      0)
>>      TAGKEYS(                        XK_2,                      1)
>>      TAGKEYS(                        XK_3,                      2)
>> diff --git a/dwm.c b/dwm.c
>> index e5efb6a..6988c77 100644
>> --- a/dwm.c
>> +++ b/dwm.c
>> @@ -106,6 +106,11 @@ typedef struct {
>>      const Arg arg;
>>  } Key;
>>
>> +typedef struct {
>> +    unsigned int mod;
>> +    KeySym keysym;
>> +} KeyShortcut;
>> +
>>  typedef struct {
>>      const char *symbol;
>>      void (*arrange)(Monitor *);
>> @@ -196,6 +201,7 @@ static void restack(Monitor *m);
>>  static void run(void);
>>  static void scan(void);
>>  static int sendevent(Client *c, Atom proto);
>> +static void sendkeyevent(const Arg *arg);
>>  static void sendmon(Client *c, Monitor *m);
>>  static void setclientstate(Client *c, long state);
>>  static void setfocus(Client *c);
>> @@ -1458,6 +1464,47 @@ sendevent(Client *c, Atom proto)
>>      return exists;
>>  }
>>
>> +XKeyEvent
>> +createkeyevent(Display *display, Window win, Window rootWindow, int type, 
>> KeyShortcut *keyShortcut)
>> +{
>> +    int keysym = keyShortcut->keysym;
>> +    unsigned int modifier = keyShortcut->mod;
>> +
>> +    XKeyEvent event;
>> +    event.type = type;
>> +    event.display = display;
>> +    event.window = win;
>> +    event.root = rootWindow;
>> +    event.subwindow = None;
>> +    event.time = CurrentTime;
>> +    event.x = 1;
>> +    event.y = 1;
>> +    event.x_root = 1;
>> +    event.y_root = 1;
>> +    event.same_screen = True;
>> +    event.keycode = XKeysymToKeycode(display, keysym);
>> +    event.state = modifier;
>> +
>> +    return event;
>> +}
>> +
>> +void sendkeyevent(const Arg *arg)
>> +{
>> +    Window rootWindow = XDefaultRootWindow(dpy);
>> +
>> +    Window focusedWindow;
>> +    int revert;
>> +    XGetInputFocus(dpy, &focusedWindow, &revert);
>> +
>> +    KeyShortcut *keyShortcut = (KeyShortcut *)arg->v;
>> +
>> +    XKeyEvent event = createkeyevent(dpy, focusedWindow, rootWindow, 
>> KeyPress, keyShortcut);
>> +    XSendEvent(event.display, event.window, True, KeyPressMask, (XEvent 
>> *)&event);
>> +
>> +    event = createkeyevent(dpy, focusedWindow, rootWindow, KeyRelease, 
>> keyShortcut);
>> +    XSendEvent(event.display, event.window, True, KeyReleaseMask, (XEvent 
>> *)&event);
>> +}
>> +
>>  void
>>  setfocus(Client *c)
>>  {
>> --
>> 2.42.0
>>
>>
>>
>
>Hi,
>
>You can upload it to the wiki if you want,
>
>-- 
>Kind regards,
>Hiltjo
>
>
>

Sorry for interrupting, I mistook the word "patch" and thought I should
send this to here. Thank you for letting me know.


Reply via email to