diff --git a/.gitmodules b/.gitmodules index cc4b1b5..ce6e3ff 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ -[submodule "j4-dmenu-desktop"] - path = j4-dmenu-desktop - url = http://github.com/enkore/j4-dmenu-desktop.git +[submodule "spmenu"] + path = spmenu + url = https://git.speedie.site/speedie/spmenu diff --git a/config/spmenu/spmenu.conf b/config/spmenu/spmenu.conf new file mode 100644 index 0000000..03e4a22 --- /dev/null +++ b/config/spmenu/spmenu.conf @@ -0,0 +1,402 @@ +/* spmenu default configuration file + * + * Copy to ~/.config/spmenu/spmenu.conf to use. + * Note that you can @include other config files if you want + * + * Arguments will always override options in this configuration file. + * + * Example: @include "config.conf" + */ + +spmenu = { + /* General window options */ + window = ( { + position = 1; // Menu position (0: Bottom, 1: Top, 2: Center) + monitor = -1; // Monitor to spawn spmenu on, (-1, 0, 1, ...) + protocol = 0; // Protocol to attempt to use by default (0: X11, 1: Wayland) + border = 1; // X11 window border size (px) + margin-vertical = 0; // Inner vertical padding (px) + margin-horizontal = 5; // Inner horizontal padding (px) + padding-vertical = 0; // Outer vertical padding (px) + padding-horizontal = 0; // Outer horizontal padding (px) + width = 0; // Width when X and/or Y offset is set, 0 is the default (px) + managed = 0; // Allow your window manager to manage spmenu as a window (0/1) + alpha = 0; // Enable alpha/transparency (0/1) + x = 0; // X position offset (px) + y = 0; // Y position offset (px) + } + ); + + /* X11 properties */ + properties = ( { + class = "dmenu"; // _WM_CLASS property, for compatibility you may want to set it to 'dmenu'. (text) + dock = 1; // Set _NET_WM_WINDOW_TYPE_DOCK (0/1) + } + ); + + /* Text */ + text = ( { + font = "Hack Nerd Font 14"; // Font to use for all text (text) + leftarrow = "<"; // Left arrow text (text) + rightarrow = ">"; // Right arrow text (text) + password = "*"; // Password character (text) + prompt = ""; // Prompt text (text) + pretext = ""; // Pretext text (text) + input = ""; // Input text (text) + normal = "Normal"; // Normal mode text (text) + insert = "Insert"; // Insert mode text (text) + regex = "Regex"; // Insert mode text when regex is enabled (text) + capslockon = "Caps Lock"; // Caps Lock On text (text) + capslockoff = ""; // Caps Lock Off text (text) + padding = 0; // Horizontal padding around the text globally (px) + normitempadding = 0; // Horizontal padding around the normal item text (px) + selitempadding = 0; // Horizontal padding around the selected item text (px) + priitempadding = 0; // Horizontal padding around the high priority item text (px) + } + ); + + /* Colors */ + color = ( { + itemnormfg = "#ffffff"; // Normal item foreground color (#RRGGBB) + itemnormbg = "#173f4f"; // Normal item background color (#RRGGBB) + + itemnormfg2 = "#ffffff"; // Normal next item foreground color (#RRGGBB) + itemnormbg2 = "#173f4f"; // Normal next item background color (#RRGGBB) + + itemselfg = "#ffffff"; // Selected item foreground color (#RRGGBB) + itemselbg = "#124f5f"; // Selected item background color (#RRGGBB) + + itemmarkedfg = "#cccccc"; // Marked item foreground color (#RRGGBB) + itemmarkedbg = "#125f3d"; // Marked item background color (#RRGGBB) + + itemnormprifg = "#ffffff"; // Normal priority item foreground color (#RRGGBB) + itemnormpribg = "#266b85"; // Normal priority item background color (#RRGGBB) + + itemselprifg = "#ffffff"; // Selected priority item foreground color (#RRGGBB) + itemselpribg = "#225f76"; // Selected priority item background color (#RRGGBB) + + inputfg = "#ffffff"; // Input foreground color (#RRGGBB) + inputbg = "#1c4e61"; // Input background color (#RRGGBB) + + pretextfg = "#ffffff"; // Pretext foreground color (#RRGGBB) + pretextbg = "#127592"; // Pretext background color (#RRGGBB) + + menu = "#153a49"; // Menu color (#RRGGBB) + + promptfg = "#ffffff"; // Prompt foreground color (#RRGGBB) + promptbg = "#173f4f"; // Prompt background color (#RRGGBB) + + larrowfg = "#ffffff"; // Left arrow foreground color (#RRGGBB) + larrowbg = "#173f4f"; // Left arrow background color (#RRGGBB) + + rarrowfg = "#ffffff"; // Right arrow foreground color (#RRGGBB) + rarrowbg = "#173f4f"; // Right arrow background color (#RRGGBB) + + hlnormfg = "#ffffff"; // Normal highlight foreground color (#RRGGBB) + hlnormbg = "#153a49"; // Normal highlight background color (#RRGGBB) + + hlselfg = "#ffffff"; // Selected highlight foreground color (#RRGGBB) + hlselbg = "#153a49"; // Selected highlight background color (#RRGGBB) + + numfg = "#ffffff"; // Match count foreground color (#RRGGBB) + numbg = "#0e304b"; // Match count background color (#RRGGBB) + + modefg = "#ffffff"; // Mode indicator foreground color (#RRGGBB) + modebg = "#0e4b3f"; // Mode indicator background color (#RRGGBB) + + capsfg = "#ffffff"; // Caps lock indicator foreground color (#RRGGBB) + capsbg = "#0e3d4b"; // Caps lock indicator background color (#RRGGBB) + + border = "#173f4f"; // Border color (#RRGGBB) + + caretfg = "#ffffff"; // Caret (cursor) foreground color (#RRGGBB) + caretbg = "#124f5f"; // Caret (cursor) background color (#RRGGBB) + + sgr0 = "#20201d"; // SGR 0 color (#RRGGBB) + sgr1 = "#d73737"; // SGR 1 color (#RRGGBB) + sgr2 = "#60ac39"; // SGR 2 color (#RRGGBB) + sgr3 = "#cfb017"; // SGR 3 color (#RRGGBB) + sgr4 = "#6684e1"; // SGR 4 color (#RRGGBB) + sgr5 = "#b854d4"; // SGR 5 color (#RRGGBB) + sgr6 = "#1fad83"; // SGR 6 color (#RRGGBB) + sgr7 = "#a6a28c"; // SGR 7 color (#RRGGBB) + sgr8 = "#7d7a68"; // SGR 8 color (#RRGGBB) + sgr9 = "#d73737"; // SGR 9 color (#RRGGBB) + sgr10 = "#60ac39"; // SGR 10 color (#RRGGBB) + sgr11 = "#cfb017"; // SGR 11 color (#RRGGBB) + sgr12 = "#6684e1"; // SGR 12 color (#RRGGBB) + sgr13 = "#b854d4"; // SGR 13 color (#RRGGBB) + sgr14 = "#1fad83"; // SGR 14 color (#RRGGBB) + sgr15 = "#fefbec"; // SGR 15 color (#RRGGBB) + + coloritems = 1; // Color the selected item (0/1) + sgr = 1; // Interpret SGR sequences (0/1) + } + ); + + /* Alpha */ + alpha = ( { itemnormfg = 255; // Normal item foreground alpha (0-255) + itemnormbg = 182; // Normal item background alpha (0-255) + + itemnormfg2 = 255; // Normal next item foreground alpha (0-255) + itemnormbg2 = 182; // Normal next item background alpha (0-255) + + itemselfg = 255; // Selected item foreground alpha (0-255) + itemselbg = 182; // Selected item background alpha (0-255) + + itemmarkedfg = 255; // Marked item foreground alpha (0-255) + itemmarkedbg = 182; // Marked item background alpha (0-255) + + itemnormprifg = 255; // Normal priority item foreground alpha (0-255) + itemnormpribg = 182; // Normal priority item background alpha (0-255) + + itemselprifg = 255; // Selected priority item foreground alpha (0-255) + itemselpribg = 182; // Selected priority item background alpha (0-255) + + inputfg = 255; // Input foreground alpha (0-255) + inputbg = 182; // Input background alpha (0-255) + + pretextfg = 255; // Pretext foreground alpha (0-255) + pretextbg = 182; // Pretext background alpha (0-255) + + menu = 182; // Menu alpha (0-255) + + promptfg = 255; // Prompt foreground alpha (0-255) + promptbg = 182; // Prompt background alpha (0-255) + + larrowfg = 255; // Left arrow foreground alpha (0-255) + larrowbg = 182; // Left arrow background alpha (0-255) + + rarrowfg = 255; // Right arrow foreground alpha (0-255) + rarrowbg = 182; // Right arrow background alpha (0-255) + + hlnormfg = 255; // Normal highlight foreground alpha (0-255) + hlnormbg = 182; // Normal highlight background alpha (0-255) + + hlselfg = 255; // Selected highlight foreground alpha (0-255) + hlselbg = 182; // Selected highlight background alpha (0-255) + + numfg = 255; // Match count foreground alpha (0-255) + numbg = 182; // Match count background alpha (0-255) + + border = 182; // Border alpha (0-255) + + caretfg = 255; // Caret (cursor) foreground alpha (0-255) + caretbg = 182; // Caret (cursor) background alpha (0-255) + + modefg = 255; // Mode indicator foreground alpha (0-255) + modebg = 182; // Mode indicator background alpha (0-255) + + capsfg = 255; // Caps Lock indicator foreground alpha (0-255) + capsbg = 182; // Caps Lock indicator background alpha (0-255) + } + ); + + /* Powerline options */ + powerline = ( { + promptstyle = 1; // Prompt powerline style (0: >, 1: \, 2: )) + matchcountstyle = 1; // Match count powerline style (0: <, 1: /, 2: () + modestyle = 1; // Mode indicator powerline style (0: <, 1: /, 2: () + capsstyle = 1; // Caps lock indicator powerline style (0: <, 1: /, 2: () + itemstyle = 2; // Item powerline style (0: <, 1: /, 2: () + + prompt = 0; // Enable prompt powerline (0/1) + matchcount = 0; // Enable match count powerline (0/1) + mode = 0; // Enable mode indicator powerline (0/1) + caps = 0; // Enable caps lock indicator powerline (0/1) + item = 0; // Enable item powerline (0/1) + } + ); + + /* Hide options */ + hide = ( { + input = 0; // Hide input (0/1) + pretext = 0; // Hide pretext (0/1) + larrow = 0; // Hide left arrow (0/1) + rarrow = 0; // Hide right arrow (0/1) + items = 0; // Hide items (0/1) + prompt = 0; // Hide prompt (0/1) + powerline = 0; // Hide powerline (0/1) + caret = 0; // Hide caret (cursor) (0/1) + highlight = 0; // Hide highlighting (0/1) + matchcount = 0; // Hide match count (0/1) + mode = 0; // Hide mode indicator (0/1) + caps = 0; // Hide caps lock indicator (0/1) + image = 0; // Hide images (0/1) + } + ); + + /* Match options */ + match = ( { + sort = 1; // Sort items (0/1) + casesensitive = 0; // Enable case sensitivity when matching (0/1) + fuzzy = 1; // Enable fuzzy finding by default (0/1) + regex = 0; // Enable regex matching by default (0/1) + preselected = 0; // Preselect an item, 0 is the first item (number) + mark = 1; // Allow marking/selecting multiple items (0/1) + delimiters = " /?\"&[]"; // Word delimiter, used to delete words (text) + listfile = "NULL"; // File to read entries from. If set to NULL standard input is read. This is read every time a key is pressed. (text) + } + ); + + /* Line options */ + line = ( { + itemposition = 0; // Item position (0: Bottom, 1: Top) + height = 1; // Height of each line (px) + lines = 0; // Number of lines (number) + columns = 10; // Number of columns (number) + overridelines = 1; // Allow overriding lines using keybinds (0/1) + overridecolumns = 1; // Allow overriding columns using keybinds (0/1) + minlines = 0; // Minimum number of lines (number) + indentitems = 0; // Indent items to prompt width (0/1) + } + ); + + /* History options */ + history = ( { + max = 64; // Max number of entries (number) + duplicate = 0; // Save duplicate entries (0/1) + } + ); + + /* Centered options */ + center = ( { + width = 1000; // Menu width when centered (px) + } + ); + + /* Image options */ + image = ( { + width = 200; // Image width (px) + height = 200; // Image height (px) + resize = 1; // Allow spmenu to resize itself to fit the image (0/1) + gaps = 0; // Image gaps (px) + position = 0; // Image position (0: Top, 1: Bottom, 2: Center, 3: Top center) + type = 1; // Image type (0: Icon, 1: Image) + cache = 1; // Cache images (0/1) + maxcache = 512; // Max image size to cache (px) + cachedir = "default"; // Cache directory. "default" means spmenu will determine automatically based on $XDG_CACHE_DIR + } + ); + + /* File options */ + file = ( { + xresources = 1; // Load .Xresources on startup (0/1) + theme = 1; // Load theme (~/.config/spmenu/theme.conf) on runtime + binds = 1; // Load binds (~/.config/spmenu/binds.conf) on runtime + fifofile = "/tmp/spmenu.fifo" // Path to the spmenu FIFO + themefile = "NULL"; // Path to theme file to load on runtime. NULL means default. + bindsfile = "NULL"; // Path to binds file to load on runtime. NULL means default. + screenshotfile = "NULL"; // Screenshot file path. NULL means default. + screenshotname = "NULL"; // Screenshot file name. NULL means default. + screenshotdir = "NULL"; // Screenshot file directory. NULL means default. + } + ); + + /* Input options */ + input = ( { + fast = 1; // Grab keyboard before matching entries (0/1) + type = 1; // Allow typing (0/1) + password = 0; // Don't read standard input and replace all characters with the password character (0/1) + width = 0.3; // Width reserved for user input (menu width * ) + } + ); + + /* Caret options */ + caret = ( { + width = 0; // Caret width (0: Default) (px) + height = 0; // Caret height (0: Default) (px) + padding = 0; // Caret padding (px) + } + ); + + /* Output options */ + output = ( { + printindex = 0; // Print index instead of actual text (0/1) + incremental = 0; // Print text on every keypress (0/1) + } + ); + + /* Mode options */ + mode = ( { + default = 0; // Mode to start spmenu in (0: Normal mode, 1: Insert mode) + } + ); + + /* Pango markup options */ + pango = ( { + item = 1; // Interpret Pango markup for items (0/1) + prompt = 1; // Interpret Pango markup for the prompt (0/1) + input = 1; // Interpret Pango markup for the input (0/1) + pretext = 1; // Interpret Pango markup for the pretext (0/1) + leftarrow = 0; // Interpret Pango markup for the left arrow (0/1) + rightarrow = 0; // Interpret Pango markup for the right arrow (0/1) + numbers = 0; // Interpret Pango markup for the match count (0/1) + mode = 0; // Interpret Pango markup for the mode indicator (0/1) + caps = 0; // Interpret Pango markup for the caps lock indicator (0/1) + password = 0; // Interpret Pango markup for password input (0/1) + } + ); + + /* Mouse bindings + * + * See https://spmenu.speedie.site/Configurable+keybindings for a list of valid options. + */ + mouse = ( + /* Click Button Function Argument */ + { click = "ClickInput"; button = "Left Click"; function = "clear"; argument = "0"; }, // Left click on input: Clear the input + { click = "ClickPrompt"; button = "Left Click"; function = "clear"; argument = "0"; }, // Left click on prompt: Clear the input + { click = "ClickMode"; button = "Left Click"; function = "switchmode"; argument = "0"; }, // Left click on the mode indicator: Toggle mode + { click = "ClickNumber"; button = "Left Click"; function = "viewhist"; argument = "0"; }, // Click on the match count: Toggle viewing history buffer + { click = "ClickItem"; button = "Left Click"; function = "selecthover"; argument = "0"; }, // Left click on an item: Select it + { click = "ClickItem"; button = "Right Click"; function = "markhover"; argument = "0"; }, // Right click on an item: Mark it + { click = "None"; button = "Scroll Up"; function = "moveprev"; argument = "0"; }, // Scroll Up: Move to the previous page + { click = "None"; button = "Scroll Down"; function = "movenext"; argument = "0"; }, // Scroll Down: Move to the next page + + { + scrolldistance = 512; // Distance to scroll for a scroll action to count. Wayland only (number) + ignoreglobalmouse = 1; // Ignore hardcoded mouse binds (0/1) + } + ); + + /* Keys + * + * It is strongly recommended that you do NOT unbind any switchmode or quit + * function keybinds unless you know exactly what you're doing. + * If you ignore this warning and find that you can't exit spmenu, + * press Ctrl+Alt+Delete. Doing so will exit spmenu, even if no key is bound. + * + * Please note that at least on the US standard keyboard layout, + * `key` will differ if Shift is held down and the key is a number or symbol. + * + * See https://spmenu.speedie.site/Configurable+keybindings for a list of valid options. + */ + keys = ( + /* Mode Modifier Key Function Argument */ + { mode = -1; modifier = "None"; key = "Enter"; function = "selectitem"; argument = "+1"; }, // Enter: Select item + { mode = -1; modifier = "Shift"; key = "Enter"; function = "selectitem"; argument = "0"; }, // Shift+Enter: Select input + { mode = -1; modifier = "Ctrl"; key = "Enter"; function = "markitem"; argument = "0"; }, // Ctrl+Enter: Mark input + { mode = -1; modifier = "None"; key = "Tab"; function = "complete"; argument = "0"; }, // Tab: Tab complete + { mode = -1; modifier = "Ctrl"; key = "v"; function = "paste"; argument = "2"; }, // Ctrl+v: Paste from clipboard + { mode = -1; modifier = "None"; key = "Backspace"; function = "backspace"; argument = "0"; }, // Backspace: Backspace + { mode = -1; modifier = "Ctrl"; key = "Backspace"; function = "deleteword"; argument = "0"; }, // Ctrl+Backspace: Delete word + { mode = -1; modifier = "Ctrl+Shift"; key = "p"; function = "setprofile"; argument = "0"; }, // Ctrl+Shift+p: Open profile menu + { mode = -1; modifier = "Ctrl"; key = "="; function = "setimgsize"; argument = "+10"; }, // Ctrl+=: Increase image size by 10 + { mode = -1; modifier = "Ctrl"; key = "-"; function = "setimgsize"; argument = "-10"; }, // Ctrl+-: Decrease image size by 10 + { mode = -1; modifier = "None"; key = "Up"; function = "moveup"; argument = "0"; }, // k: Move up 1 item + { mode = -1; modifier = "None"; key = "Down"; function = "movedown"; argument = "0"; }, // j: Move down 1 item + { mode = -1; modifier = "None"; key = "Left"; function = "moveleft"; argument = "0"; }, // h: Move left 1 item + { mode = -1; modifier = "None"; key = "Right"; function = "moveright"; argument = "0"; }, // l: Move right 1 item + { mode = -1; modifier = "Ctrl"; key = "u"; function = "moveup"; argument = "5"; }, // Ctrl+u: Move up 5 items + { mode = -1; modifier = "Ctrl"; key = "d"; function = "movedown"; argument = "5"; }, // Ctrl+d: Move down 5 items + { mode = -1; modifier = "Ctrl"; key = "h"; function = "viewhist"; argument = "0"; }, // Ctrl+h: Toggle viewing history buffer + { mode = -1; modifier = "None"; key = "Esc"; function = "quit"; argument = "0"; }, // Esc: Exit + { mode = -1; modifier = "Ctrl"; key = "p"; function = "navhistory"; argument = "-1"; }, // Ctrl+p: Navigate to the previous entry in the history buffer + { mode = -1; modifier = "Ctrl"; key = "n"; function = "navhistory"; argument = "+1"; }, // Ctrl+n: Navigate to the next entry in the history buffer + { mode = -1; modifier = "None"; key = "PrintScr"; function = "screenshot"; argument = "0"; }, // Print Screen: Screenshot spmenu + + { ignoreglobalkeys = 1; // Ignore hardcoded keybinds (0/1) + forceinsertmode = 1; // Force insert mode to be used, disabling normal mode (0/1) + } + ), +}; diff --git a/dwm/config.def.h b/dwm/config.def.h index 164a6d5..6a3dc15 100644 --- a/dwm/config.def.h +++ b/dwm/config.def.h @@ -100,8 +100,9 @@ static const Layout layouts[] = { static Key keys[] = { /* modifier key function argument */ - { Mod4Mask, XK_s, spawn, SHCMD("j4-dmenu-desktop --dmenu dmenu -fn 'Hack Nerd Font:size=14' -nb '#173f4f' -nf '#ffffff' -sb '#124f5f' -sf '#eeeeee' -g 6 -l 6 --term st") }, - { Mod4Mask|ShiftMask, XK_s, spawn, SHCMD("dmenu_run -fn 'Hack Nerd Font:size=14' -nb '#173f4f' -nf '#ffffff' -sb '#124f5f' -sf '#eeeeee' -g 6 -l 6") }, + { Mod4Mask, XK_s, spawn, SHCMD("spmenu_run -d -a '-g 4 -l 10'") }, + { Mod4Mask|ShiftMask, XK_s, spawn, SHCMD("spmenu -run -a '-g 4-l 10'") }, + { Mod4Mask|Mod1Mask, XK_s, spawn, SHCMD("dmenu_run -fn 'Hack Nerd Font:size=14' -nb '#173f4f' -nf '#ffffff' -sb '#124f5f' -sf '#eeeeee' -g 6 -l 6") }, { MODKEY|ShiftMask, XK_Return, spawn, SHCMD("st -e") }, { MODKEY|ShiftMask, XK_t, spawn, SHCMD("tabbed -r 2 st -w ''") }, { MODKEY|ShiftMask, XK_i, spawn, SHCMD("firefox") }, @@ -124,7 +125,7 @@ static Key keys[] = { { MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, { MODKEY, XK_g, setlayout, {.v = &layouts[3]} }, - { MODKEY|ShiftMask, XK_t, setlayout, {.v = &layouts[4]} }, + { MODKEY|ShiftMask, XK_d, setlayout, {.v = &layouts[4]} }, { MODKEY|ShiftMask, XK_f, setlayout, {.v = &layouts[5]} }, { MODKEY, XK_space, setlayout, {0} }, { MODKEY|ShiftMask, XK_space, togglefloating, {0} }, diff --git a/j4-dmenu-desktop b/j4-dmenu-desktop deleted file mode 160000 index 65b1358..0000000 --- a/j4-dmenu-desktop +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 65b13587793d7660797e67b18e2f0daad6ec4708 diff --git a/spmenu b/spmenu new file mode 160000 index 0000000..bf5c36c --- /dev/null +++ b/spmenu @@ -0,0 +1 @@ +Subproject commit bf5c36c245b369b5b06ecc6068c655787118f2d1 diff --git a/tabbed/tabbed b/tabbed/tabbed index b936280..94422af 100755 Binary files a/tabbed/tabbed and b/tabbed/tabbed differ diff --git a/tabbed/xembed b/tabbed/xembed index 9ddf6e0..0bfa27a 100755 Binary files a/tabbed/xembed and b/tabbed/xembed differ