mirror of
https://github.com/leahneukirchen/cwm.git
synced 2023-08-10 21:13:12 +03:00
Apply cwm-3-exec.diff from http://aon.iki.fi/cwm/. Document the new
key binding.
This commit is contained in:
parent
fa515a82d0
commit
890a32aa33
2
calmwm.h
2
calmwm.h
@ -378,6 +378,7 @@ int grab_drag(struct client_ctx *);
|
||||
void grab_menuinit(struct screen_ctx *);
|
||||
void *grab_menu(XButtonEvent *, struct menu_q *);
|
||||
void grab_label(struct client_ctx *);
|
||||
void grab_exec(void);
|
||||
|
||||
void xfree(void *);
|
||||
void *xmalloc(size_t);
|
||||
@ -425,6 +426,7 @@ void kbfunc_client_nogroup(struct client_ctx *, void *);
|
||||
void kbfunc_client_maximize(struct client_ctx *, void *);
|
||||
void kbfunc_client_vmaximize(struct client_ctx *, void *);
|
||||
void kbfunc_menu_search(struct client_ctx *, void *);
|
||||
void kbfunc_exec(struct client_ctx *, void *);
|
||||
void kbfunc_term(struct client_ctx *cc, void *arg);
|
||||
void kbfunc_lock(struct client_ctx *cc, void *arg);
|
||||
|
||||
|
1
conf.c
1
conf.c
@ -185,6 +185,7 @@ conf_setup(struct conf *c)
|
||||
XK_Return, ControlMask|Mod1Mask, 0, NULL);
|
||||
conf_bindkey(c, kbfunc_lock,
|
||||
XK_Delete, ControlMask|Mod1Mask, 0, NULL);
|
||||
conf_bindkey(c, kbfunc_exec, XK_question, Mod1Mask, 0, NULL);
|
||||
conf_bindkey(c, kbfunc_client_hide,
|
||||
XK_Return, Mod1Mask, KBFLAG_NEEDCLIENT, 0);
|
||||
conf_bindkey(c, kbfunc_client_lower,
|
||||
|
2
cwm.1
2
cwm.1
@ -81,6 +81,8 @@ Switch to next group.
|
||||
Switch to previous group.
|
||||
.It Fa C-M-=
|
||||
Toggle vertical maximization of window.
|
||||
.It Fa M-?
|
||||
Spawn \&"Exec program\&" dialog.
|
||||
.El
|
||||
|
||||
The mouse bindings are also important, they are:
|
||||
|
79
grab.c
79
grab.c
@ -430,6 +430,85 @@ grab_label(struct client_ctx *cc)
|
||||
XUnmapWindow(G_dpy, sc->searchwin);
|
||||
}
|
||||
|
||||
#define ExecMask (KeyPressMask|ExposureMask)
|
||||
|
||||
void
|
||||
grab_exec(void)
|
||||
{
|
||||
int x, y, dx, dy, fontheight, focusrevert, len;
|
||||
char cmdstr[MAXPATHLEN];
|
||||
char dispstr[MAXPATHLEN + sizeof("exec>") - 1];
|
||||
char chr, str[2];
|
||||
enum ctltype ctl;
|
||||
struct fontdesc *font = DefaultFont;
|
||||
struct screen_ctx *sc = screen_current();
|
||||
XEvent e;
|
||||
Window focuswin;
|
||||
|
||||
cmdstr[0] = '\0';
|
||||
|
||||
xu_ptr_getpos(sc->rootwin, &x, &y);
|
||||
|
||||
dy = fontheight = font_ascent(font) + font_descent(font) + 1;
|
||||
dx = font_width(font, "exec>", 5);
|
||||
|
||||
XMoveResizeWindow(G_dpy, sc->searchwin, x, y, dx, dy);
|
||||
XSelectInput(G_dpy, sc->searchwin, ExecMask);
|
||||
XMapRaised(G_dpy, sc->searchwin);
|
||||
|
||||
XGetInputFocus(G_dpy, &focuswin, &focusrevert);
|
||||
XSetInputFocus(G_dpy, sc->searchwin,
|
||||
RevertToPointerRoot, CurrentTime);
|
||||
|
||||
for (;;) {
|
||||
XMaskEvent(G_dpy, ExecMask, &e);
|
||||
|
||||
switch (e.type) {
|
||||
case KeyPress:
|
||||
if (input_keycodetrans(e.xkey.keycode, e.xkey.state,
|
||||
&ctl, &chr, 0) < 0)
|
||||
continue;
|
||||
|
||||
switch (ctl) {
|
||||
case CTL_ERASEONE:
|
||||
if ((len = strlen(cmdstr)) > 0)
|
||||
cmdstr[len - 1] = '\0';
|
||||
break;
|
||||
case CTL_RETURN:
|
||||
if (strlen(cmdstr) > 0)
|
||||
u_spawn(cmdstr);
|
||||
goto out;
|
||||
break;
|
||||
case CTL_ABORT:
|
||||
goto out;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (chr != '\0') {
|
||||
str[0] = chr;
|
||||
str[1] = '\0';
|
||||
strlcat(cmdstr, str, sizeof(cmdstr));
|
||||
}
|
||||
case Expose:
|
||||
snprintf(dispstr, sizeof(dispstr), "exec>%s", cmdstr);
|
||||
|
||||
dx = font_width(font, dispstr, strlen(dispstr));
|
||||
dy = fontheight;
|
||||
|
||||
XClearWindow(G_dpy, sc->searchwin);
|
||||
XResizeWindow(G_dpy, sc->searchwin, dx, dy);
|
||||
|
||||
font_draw(font, dispstr, strlen(dispstr),
|
||||
sc->searchwin, 0, font_ascent(font) + 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
out:
|
||||
XSetInputFocus(G_dpy, focuswin, focusrevert, CurrentTime);
|
||||
XUnmapWindow(G_dpy, sc->searchwin);
|
||||
}
|
||||
|
||||
int
|
||||
_sweepcalc(struct client_ctx *cc, int x0, int y0, int motionx, int motiony)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user