diff --git a/docs/spmenu.conf b/docs/spmenu.conf index 36edaf2..3d9be9a 100644 --- a/docs/spmenu.conf +++ b/docs/spmenu.conf @@ -218,30 +218,35 @@ spmenu = { * * See https://spmenu.speedie.site/index.php/Configurable+keybindings for a list of valid options. */ - mouse = ( { click = "clickinput"; + mouse = ( // Left click on input: Clear the input + { click = "clickinput"; modifier = "None"; button = "Left Click"; function = "clear"; argument = "0"; }, + // Left click on prompt: Clear the input { click = "clickprompt"; modifier = "None"; button = "Left Click"; function = "clear"; argument = "0"; }, + // Left click on the mode indicator: Toggle mode { click = "clickmode"; modifier = "None"; button = "Left Click"; function = "switchmode"; argument = "0"; }, + // Click on the match count: Toggle viewing history buffer { click = "clicknumber"; modifier = "None"; button = "Left Click"; function = "viewhist"; argument = "0"; }, + // Left click on an item: Select it { click = "clickselitem"; modifier = "None"; button = "Left Click"; @@ -256,366 +261,420 @@ spmenu = { * * See https://spmenu.speedie.site/index.php/Configurable+keybindings for a list of valid options. */ - keys = ( { mode = -1; + keys = ( // Enter: Select item + { mode = -1; modifier = "None"; key = "Enter"; function = "selectitem"; argument = "+1"; }, + // Shift+Enter: Select input { mode = -1; modifier = "Shift"; key = "Enter"; function = "selectitem"; argument = "0"; }, + // Tab: Tab complete { mode = -1; modifier = "None"; key = "Tab"; function = "complete"; argument = "0"; }, + // Ctrl+v: Paste from clipboard { mode = -1; modifier = "Ctrl"; key = "v"; function = "paste"; argument = "2"; }, + // Ctrl+Shift+v: Paste from selection { mode = -1; modifier = "Ctrl+Shift"; key = "v"; function = "paste"; argument = "1"; }, + // Backspace: Backspace { mode = -1; modifier = "None"; key = "Backspace"; function = "backspace"; argument = "0"; }, + // Ctrl+Backspace: Delete word { mode = -1; modifier = "Ctrl"; key = "Backspace"; function = "deleteword"; argument = "0"; }, + // Ctrl+Left: Move caret (cursor) one word to the left { mode = -1; modifier = "Ctrl"; key = "Left"; function = "moveword"; argument = "-1"; }, + // Ctrl+Right: Move caret (cursor) one word to the right { mode = -1; modifier = "Ctrl"; key = "Right"; function = "moveword"; argument = "+1"; }, + // Left: Move caret (cursor) one character to the left { mode = -1; modifier = "None"; key = "Left"; function = "movecursor"; argument = "-1"; }, + // Right: Move caret (cursor) one character to the right { mode = -1; modifier = "None"; key = "Right"; function = "movecursor"; argument = "+1"; }, + // Ctrl+Shift+p: Open profile menu { mode = -1; modifier = "Ctrl+Shift"; key = "p"; function = "setprofile"; argument = "0"; }, + // Escape: Switch mode { mode = 1; modifier = "None"; key = "Esc"; function = "switchmode"; argument = "0"; }, + // i: Switch mode { mode = 0; modifier = "None"; key = "i"; function = "switchmode"; argument = "0"; }, + // /: Switch mode { mode = 0; modifier = "None"; key = "/"; function = "switchmode"; argument = "0"; }, + // Ctrl+=: Increase image size by 1 { mode = 0; modifier = "Ctrl"; key = "="; function = "setimgsize"; argument = "+1"; }, + // Ctrl+-: Decrease image size by 1 { mode = 0; modifier = "Ctrl"; key = "-"; function = "setimgsize"; argument = "-1"; }, - { mode = 0; - modifier = "None"; - key = "-"; - function = "setimgsize"; - argument = "-10"; - }, + // -: Increase image size by 10 { mode = 0; modifier = "None"; key = "="; function = "setimgsize"; argument = "+10"; }, + // =: Decrease image size by 10 { mode = 0; - modifier = "Shift"; + modifier = "None"; key = "-"; function = "setimgsize"; - argument = "-100"; + argument = "-10"; }, + // Shift+=: Increase image size by 100 { mode = 0; modifier = "Shift"; key = "="; function = "setimgsize"; argument = "+100"; }, + // Shift+-: Decrease image size by 100 + { mode = 0; + modifier = "Shift"; + key = "-"; + function = "setimgsize"; + argument = "-100"; + }, + // Shift+0: Set image size to the default { mode = 0; modifier = "Shift"; key = "0"; function = "defaultimg"; argument = "0"; }, + // r: Rotate image { mode = 0; modifier = "None"; key = "r"; function = "rotateimg"; argument = "0"; }, + // p: Toggle image position { mode = 0; modifier = "None"; key = "p"; function = "setimgpos"; argument = "+1"; }, + // Ctrl+1: Decrease image gaps by 1 { mode = 0; modifier = "Ctrl"; key = "1"; function = "setimggaps"; argument = "-1"; }, + // Ctrl+2: Increase image gaps by 1 { mode = 0; modifier = "Ctrl"; key = "2"; function = "setimggaps"; argument = "+1"; }, + // 1: Decrease image gaps by 10 { mode = 0; modifier = "None"; key = "1"; function = "setimggaps"; argument = "-10"; }, + // 2: Increase image gaps by 10 { mode = 0; modifier = "None"; key = "2"; function = "setimggaps"; argument = "+10"; }, + // Shift+1: Decrease image gaps by 100 { mode = 0; modifier = "Shift"; key = "1"; function = "setimggaps"; argument = "-100"; }, + // Shift+2: Increase image gaps by 100 { mode = 0; modifier = "Shift"; key = "2"; function = "setimggaps"; argument = "+100"; }, + // t: Toggle image { mode = 0; modifier = "None"; key = "t"; function = "toggleimg"; argument = "0"; }, + // h: Flip image horizontally { mode = 0; modifier = "None"; key = "h"; function = "flipimg"; argument = "1"; }, + // v: Flip image vertically { mode = 0; modifier = "None"; key = "v"; function = "flipimg"; argument = "0"; }, + // k: Move up 1 item { mode = 0; modifier = "None"; key = "k"; function = "moveup"; argument = "0"; }, + // j: Move down 1 item { mode = 0; modifier = "None"; key = "j"; function = "movedown"; argument = "0"; }, + // h: Move left 1 item { mode = 0; modifier = "None"; key = "h"; function = "moveleft"; argument = "0"; }, + // l: Move right 1 item { mode = 0; modifier = "None"; key = "l"; function = "moveright"; argument = "0"; }, + // Ctrl+u: Move up 5 items { mode = 0; modifier = "Ctrl"; key = "u"; function = "moveup"; argument = "5"; }, + // Ctrl+d: Move down 5 items { mode = 0; modifier = "Ctrl"; key = "d"; function = "movedown"; argument = "5"; }, + // Ctrl+k: Increase lines by 1 { mode = 0; modifier = "Ctrl"; key = "k"; function = "setlines"; argument = "+1"; }, + // Ctrl+j: Decrease lines by 1 { mode = 0; modifier = "Ctrl"; key = "j"; function = "setlines"; argument = "-1"; }, + // Ctrl+Alt+Shift+k: Increase lines by 5 { mode = 0; modifier = "Ctrl+Alt+Shift"; key = "k"; function = "setlines"; argument = "+5"; }, + // Ctrl+Alt+Shift+j: Decrease lines by 5 { mode = 0; modifier = "Ctrl+Alt+Shift"; key = "j"; function = "setlines"; argument = "-5"; }, + // Ctrl+l: Increase columns by 1 { mode = 0; modifier = "Ctrl"; key = "l"; function = "setcolumns"; argument = "+1"; }, + // Ctrl+h: Decrease columns by 1 { mode = 0; modifier = "Ctrl"; key = "h"; function = "setcolumns"; argument = "-1"; }, + // Ctrl+Alt+Shift+h: Increase columns by 5 { mode = 0; modifier = "Ctrl+Alt+Shift"; key = "h"; function = "setcolumns"; argument = "+5"; }, + // Ctrl+Alt+Shift+l: Decrease columns by 5 { mode = 0; modifier = "Ctrl+Alt+Shift"; key = "l"; function = "setcolumns"; argument = "-5"; }, - { mode = 0; - modifier = "Ctrl"; - key = "k"; - function = "restoresel"; - argument = "0"; - }, + // Ctrl+u: Toggle highlighting { mode = 0; modifier = "None"; key = "u"; function = "togglehighlight"; argument = "0"; }, + // Ctrl+h: Toggle viewing history buffer { mode = 0; modifier = "Ctrl+Shift"; key = "h"; function = "viewhist"; argument = "0"; }, + // d: Clear the input { mode = 0; modifier = "None"; key = "d"; function = "clear"; argument = "0"; }, + // c: Clear the input and enter insert mode { mode = 0; modifier = "None"; key = "c"; function = "clearins"; argument = "0"; }, + // Esc: Exit { mode = 0; modifier = "None"; key = "Esc"; function = "quit"; argument = "0"; }, + // Home: Move to the start { mode = 0; modifier = "None"; key = "Home"; function = "movestart"; argument = "0"; }, + // End: Move to the end { mode = 0; modifier = "None"; key = "End"; function = "moveend"; argument = "0"; }, + // g: Move to the start { mode = 0; modifier = "None"; key = "g"; function = "movestart"; argument = "0"; }, + // Shift+g: Move to the end { mode = 0; modifier = "Shift"; key = "g"; function = "moveend"; argument = "0"; }, + // Next: Move to the next entry (redo) { mode = 0; modifier = "None"; key = "Next"; function = "movenext"; argument = "0"; }, + // Prior: Move to the previous entry (undo) { mode = 0; modifier = "None"; key = "Prior"; function = "moveprev"; argument = "0"; }, + // Alt+p: Navigate to the previous entry in the history buffer { mode = 0; modifier = "Alt"; key = "p"; function = "navhistory"; argument = "-1"; }, + // Alt+n: Navigate to the next entry in the history buffer { mode = 0; modifier = "Alt"; key = "n"; diff --git a/keybinds.h b/keybinds.h index 179dc7a..71b0193 100644 --- a/keybinds.h +++ b/keybinds.h @@ -87,7 +87,6 @@ static Key keys[] = { { 0, CONTROL, XK_l, setcolumns, {.i = -1 } }, { 0, CONTROL|ALT|SHIFT, XK_h, setcolumns, {.i = +5 } }, { 0, CONTROL|ALT|SHIFT, XK_l, setcolumns, {.i = -5 } }, - { 0, CONTROL, XK_k, restoresel, {0} }, { 0, 0, XK_u, togglehighlight, {0} }, { 0, CONTROL|SHIFT, XK_h, viewhist, {0} }, { 0, 0, XK_d, clear, {0} }, diff --git a/libs/arg.c b/libs/arg.c index 8cb0745..3175d4e 100644 --- a/libs/arg.c +++ b/libs/arg.c @@ -328,14 +328,7 @@ clearins(Arg *arg) curMode = 1; allowkeys = 0; - - if (!curMode) { - strcpy(modetext, normtext); - } else { - strcpy(modetext, instext); - } - - if (hidemode) strcpy(modetext, ""); + strncpy(modetext, instext, 15); calcoffsets(); drawmenu(); diff --git a/libs/draw.c b/libs/draw.c index 5ab95e1..9b0fcc5 100644 --- a/libs/draw.c +++ b/libs/draw.c @@ -118,11 +118,11 @@ drawitemtext(struct item *item, int x, int y, int w) } else if (nextchar == 22) { fg &= ~8; scm[0] = textclrs[fg]; + } else if (nextchar == 38) { + bgfg = 2; } else if (nextchar >= 30 && nextchar <= 37) { fg = nextchar % 10 | (fg & 8); scm[0] = textclrs[fg]; - } else if (nextchar == 38) { - bgfg = 2; } else if (nextchar >= 40 && nextchar <= 47) { bg = nextchar % 10; scm[1] = textclrs[bg]; diff --git a/libs/xrdb.c b/libs/xrdb.c index c790603..fdf10a1 100644 --- a/libs/xrdb.c +++ b/libs/xrdb.c @@ -13,6 +13,7 @@ resource_load(XrmDatabase db, char *name, enum resource_type rtype, void *dst) snprintf(fullname, sizeof(fullname), "%s.%s", "spmenu", name); fullname[sizeof(fullname) - 1] = '\0'; XrmGetResource(db, fullname, "*", &type, &ret); + if (!xresources) return; if (!(ret.addr == NULL || strncmp("String", type, 64))) { switch (rtype) { // type case STRING: @@ -37,7 +38,7 @@ load_xresources(void) ResourcePref *p; display = XOpenDisplay(NULL); resm = XResourceManagerString(display); - if (!resm) + if (!resm || !xresources) return; db = XrmGetStringDatabase(resm);