spmenu/README.html

192 lines
7.4 KiB
HTML
Raw Normal View History

<h1 id="spmenu">spmenu</h1>
<figure>
<img src="/docs/preview.png" alt="image" />
<figcaption aria-hidden="true">image</figcaption>
</figure>
<h2 id="what-is-spmenu">What is spmenu?</h2>
<p>spmenu is an X11 menu application based on <a
href="https://tools.suckless.org/dmenu">dmenu</a> which takes standard
input, parses it, and lets the user choose an option and sends the
selected option to standard output.</p>
<p>In addition to this, it also serves as a run launcher through the
included shell script <code>spmenu_run</code>. Alternatively you may use
<code>spmenu_desktop</code> which lists .desktop entries instead of
$PATH.</p>
<p>It is designed to integrate well with my <a
href="https://dwm.suckless.org">dwm</a> fork, <a
href="https://git.speedie.gq/speedwm">speedwm</a>.</p>
<h2 id="special-features">Special features</h2>
<p>This build of spmenu has some features written for this build. Of
course if you want, this is free software so you can use it in your own
build.</p>
<ul>
<li>dwm-like keybind array (See keybinds.h)</li>
<li>Vim-like modes, including indicator.</li>
<li>The ability to move around items with keybinds.</li>
<li>Customizable/dynamic line/column size.</li>
<li>Powerlines</li>
<li>Web browser like keybindings.</li>
<li>256 color support through SGR codes.</li>
<li>Image support (somewhat based on <a
href="https://github.com/Cloudef/dmenu-pango-imlib">this
repository</a>)</li>
<li>Option to block typing.</li>
<li>Rewritten arguments, old arguments still work though.</li>
<li>Hiding each part of the menu.</li>
</ul>
<p>..and more!</p>
<h2 id="other-features">Other features</h2>
<p>Note: This is an incomplete list, its just here to give you an idea
of what this build has to offer.</p>
<ul>
<li>Pango markup support</li>
<li>Alpha transparency</li>
<li>Pywal/.Xresources support</li>
<li>Grid</li>
<li>Colored Emoji/Font support</li>
<li>Highlighting</li>
<li>Right-to-left language support</li>
<li>Case-insensitive by default</li>
<li>Padding; useful with patched dwm with barpadding or speedwm.</li>
<li>Fuzzy-finding</li>
<li>Preselect support</li>
<li>Line-height</li>
<li>History support</li>
<li>Customizable bar height</li>
</ul>
<h2 id="dependencies">Dependencies</h2>
<ul>
<li>libX11</li>
<li>libXrender</li>
<li>freetype</li>
<li>imlib2
<ul>
<li>Used for image support, can be disabled if you dont want this by:
<ul>
<li>build.sh: Setting <code>imlib2=false</code> in
<code>buildconf</code>.</li>
<li>Makefile: Editing <code>toggle.mk</code> and commenting out a few
lines.</li>
</ul></li>
</ul></li>
<li>libXinerama
<ul>
<li>Can be disabled if you dont want/need multi-monitor support by:
<ul>
<li>build.sh: Setting <code>xinerama=false</code> in
<code>buildconf</code>.</li>
<li>Makefile: Editing <code>toggle.mk</code> and commenting out a few
lines.</li>
</ul></li>
</ul></li>
<li>tcc compiler
<ul>
<li>You can swap it out for GCC or any other C99 compatible compiler by:
<ul>
<li>Makefile: Passing <code>CC="gcc"</code> to the <code>make</code>
command.</li>
<li>build.sh: Adding <code>CC="gcc"</code> to the
<code>buildconf</code>. command if you want)</li>
</ul></li>
</ul></li>
<li>OpenSSL
<ul>
<li>Used to calculate MD5 of images if image support is enabled, can be
disabled if you dont want this by:
<ul>
<li>build.sh: Setting <code>imlib2=false</code> and
<code>openssl=false</code> in <code>buildconf</code>.</li>
<li>Makefile: Editing <code>toggle.mk</code> and commenting out a few
lines.</li>
</ul></li>
</ul></li>
<li>Pango
<ul>
<li>Can be disabled if you dont want/need Pango markup by:
<ul>
<li>build.sh: Setting <code>pango=false</code> and
<code>pangoxft=false</code> in <code>buildconf</code>.</li>
<li>Makefile: Editing <code>toggle.mk</code> and commenting out a few
lines.</li>
</ul></li>
</ul></li>
</ul>
<h2 id="installation-gnulinux-bsd-macosos-xmac-os-x">Installation
(GNU/Linux, *BSD, macOS/OS X/Mac OS X)</h2>
<p><code>emerge dev-vcs/git # Install dev-vcs/git using your favorite package manager</code></p>
<p><code>git clone https://git.speedie.gq/spmenu</code></p>
<p><code>cd spmenu/</code></p>
<p><code>./build.sh # Run as root.</code></p>
<p>Report any issues with the build.sh script. Theres also a Makefile
which you can use but it may require editing host.mk and toggle.mk
manually.</p>
<h2 id="installation-gentoo-gnulinux">Installation (Gentoo
GNU/Linux)</h2>
<p>If you are on Gentoo GNU/Linux, you can add <a
href="https://git.speedie.gq/speedie-overlay">my overlay</a> which
includes <code>x11-misc/spmenu</code> as well as other useful
packages.</p>
<h2 id="installation-arch-gnulinux">Installation (Arch GNU/Linux)</h2>
<p>If you are on Arch GNU/Linux, you can add <a
href="https://git.speedie.gq/speedie-repository">my repository</a> which
includes <code>spmenu</code> as well as other useful packages.</p>
2023-03-31 18:05:12 +02:00
<p>Theres also a PKGBUILD. To use it, simply
<code>make install_arch</code> in the directory the PKGBUILD is
located.</p>
<p>If you wish to package spmenu for your GNU/Linux distribution, feel
free to add it to this list.</p>
<h2 id="todo">TODO</h2>
<p>Pull requests would be greatly appreciated for any of these
issues!</p>
<h3 id="general">General</h3>
<ul>
<li>Key: Mouse bind array (Likely mouse.h).</li>
<li>Config file: Add configuration file using (probably) libconfig,
allowing keybinds to be configured without recompiling spmenu.</li>
<li>Image support: Stop using OpenSSL for caching images, mostly because
MD5() is deprecated as of OpenSSL 3.0, but this would also make it very
easy to have LibreSSL compatibility.</li>
<li>Matching: Add support for contextual completions similar to
xprompt</li>
<li>Text drawing: Use cairo for text drawing over Xft.</li>
<li>Matching: FIFO, used to dynamically refresh entries.</li>
</ul>
<h3
id="unlikely-but-maybe-at-some-point-in-the-distant-future">Unlikely,
but maybe at some point in the distant future</h3>
<ul>
<li>Wayland: Wayland support, but only if it doesnt require writing any
extra code which as of now seems unlikely.
<ul>
<li>Before this can even be done, we need to add a configuration file
using anything but .Xresources, replace Xft with cairo, deal with
keybinds in some Wayland compatible way, and figure out a way to
preserve X11 compatibility as I do not want to use Wayland anyway.</li>
<li>You can just use XWayland anyway if you happen to use Wayland, so
its not like you will be unable to use spmenu in its current
state.</li>
</ul></li>
</ul>
<h3 id="bugs">Bugs</h3>
<ul>
<li>Text drawing: Pango will sometimes spit out errors for invalid
markup. Silencing this would be a good idea.</li>
<li>Items: If we have zero lines, the width of items that contain SGR
sequences will be the max size of one item. This is fine, and there is
not much I can do about it without significant rewrites I dont think
are worth doing.</li>
<li>Image support: Images take a long time to load sometimes,
particularly when items are selected using the cursor so what we really
need is a way to ] skip over images after a set time limit</li>
</ul>
<h2 id="scripts">Scripts</h2>
<p>This build of spmenu should work with all spmenu/dmenu scripts. <a
href="https://git.speedie.gq/speedwm-extras">Here</a> are a few Ive
written/use. If your scripts are useful enough, and written with spmenu
in mind, feel free to pull request and put your scripts here!</p>
<h2 id="more-information">More information</h2>
<p>See the included <code>man</code> page.</p>
<h2 id="license">License</h2>
<p>spmenu is licensed under the MIT license. See the included LICENSE
file for more information!</p>