Introduction
Introduction Statistics Contact Development Disclaimer Help
add key bindings for moving to the word start or end - dmenu - dynamic menu
git clone git://git.suckless.org/dmenu
Log
Files
Refs
README
LICENSE
---
commit e2a280541eab62717d6a9a72d047c832e5cb1edc
parent 889512811d7ae410eb4ab60be3568278b3e23f2e
Author: Quentin Rameau <[email protected]>
Date: Tue, 13 Mar 2018 17:15:09 +0100
add key bindings for moving to the word start or end
Mod1+b/^Left and Mod1+f/^Right
Diffstat:
M dmenu.1 | 12 ++++++++++++
M dmenu.c | 34 +++++++++++++++++++++++++++++…
2 files changed, 46 insertions(+), 0 deletions(-)
---
diff --git a/dmenu.1 b/dmenu.1
@@ -100,6 +100,12 @@ Confirm input. Prints the input text to stdout and exits,…
.B Escape
Exit without selecting an item, returning failure.
.TP
+.B Ctrl-Left
+Move cursor to the start of the current word
+.TP
+.B Ctrl-Right
+Move cursor to the end of the current word
+.TP
C\-a
Home
.TP
@@ -160,6 +166,12 @@ Paste from primary X selection
C\-Y
Paste from X clipboard
.TP
+M\-b
+Move cursor to the start of the current word
+.TP
+M\-f
+Move cursor to the end of the current word
+.TP
M\-g
Home
.TP
diff --git a/dmenu.c b/dmenu.c
@@ -288,6 +288,22 @@ nextrune(int inc)
}
static void
+movewordedge(int dir)
+{
+ if (dir < 0) { /* move cursor to the start of the word*/
+ while (cursor > 0 && strchr(worddelimiters, text[nextrune(-1)]…
+ cursor = nextrune(-1);
+ while (cursor > 0 && !strchr(worddelimiters, text[nextrune(-1)…
+ cursor = nextrune(-1);
+ } else { /* move cursor to the end of the word */
+ while (text[cursor] && strchr(worddelimiters, text[cursor]))
+ cursor = nextrune(+1);
+ while (text[cursor] && !strchr(worddelimiters, text[cursor]))
+ cursor = nextrune(+1);
+ }
+}
+
+static void
keypress(XKeyEvent *ev)
{
char buf[32];
@@ -334,6 +350,14 @@ keypress(XKeyEvent *ev)
XConvertSelection(dpy, (ev->state & ShiftMask) ? clip …
utf8, utf8, win, CurrentTime);
return;
+ case XK_Left:
+ movewordedge(-1);
+ ksym = NoSymbol;
+ break;
+ case XK_Right:
+ movewordedge(+1);
+ ksym = NoSymbol;
+ break;
case XK_Return:
case XK_KP_Enter:
break;
@@ -345,6 +369,14 @@ keypress(XKeyEvent *ev)
}
else if (ev->state & Mod1Mask)
switch(ksym) {
+ case XK_b:
+ movewordedge(-1);
+ ksym = NoSymbol;
+ break;
+ case XK_f:
+ movewordedge(+1);
+ ksym = NoSymbol;
+ break;
case XK_g: ksym = XK_Home; break;
case XK_G: ksym = XK_End; break;
case XK_h: ksym = XK_Up; break;
@@ -359,6 +391,8 @@ keypress(XKeyEvent *ev)
if (!iscntrl(*buf))
insert(buf, len);
break;
+ case NoSymbol:
+ break;
case XK_Delete:
if (text[cursor] == '\0')
return;
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.