spmenu/README.html
2023-05-13 21:27:12 +02:00

333 lines
10 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<title>README</title>
<style>
html {
color: #1a1a1a;
background-color: #fdfdfd;
}
body {
margin: 0 auto;
max-width: 36em;
padding-left: 50px;
padding-right: 50px;
padding-top: 50px;
padding-bottom: 50px;
hyphens: auto;
overflow-wrap: break-word;
text-rendering: optimizeLegibility;
font-kerning: normal;
}
@media (max-width: 600px) {
body {
font-size: 0.9em;
padding: 12px;
}
h1 {
font-size: 1.8em;
}
}
@media print {
html {
background-color: white;
}
body {
background-color: transparent;
color: black;
font-size: 12pt;
}
p, h2, h3 {
orphans: 3;
widows: 3;
}
h2, h3, h4 {
page-break-after: avoid;
}
}
p {
margin: 1em 0;
}
a {
color: #1a1a1a;
}
a:visited {
color: #1a1a1a;
}
img {
max-width: 100%;
}
h1, h2, h3, h4, h5, h6 {
margin-top: 1.4em;
}
h5, h6 {
font-size: 1em;
font-style: italic;
}
h6 {
font-weight: normal;
}
ol, ul {
padding-left: 1.7em;
margin-top: 1em;
}
li > ol, li > ul {
margin-top: 0;
}
blockquote {
margin: 1em 0 1em 1.7em;
padding-left: 1em;
border-left: 2px solid #e6e6e6;
color: #606060;
}
code {
font-family: Menlo, Monaco, Consolas, 'Lucida Console', monospace;
font-size: 85%;
margin: 0;
hyphens: manual;
}
pre {
margin: 1em 0;
overflow: auto;
}
pre code {
padding: 0;
overflow: visible;
overflow-wrap: normal;
}
.sourceCode {
background-color: transparent;
overflow: visible;
}
hr {
background-color: #1a1a1a;
border: none;
height: 1px;
margin: 1em 0;
}
table {
margin: 1em 0;
border-collapse: collapse;
width: 100%;
overflow-x: auto;
display: block;
font-variant-numeric: lining-nums tabular-nums;
}
table caption {
margin-bottom: 0.75em;
}
tbody {
margin-top: 0.5em;
border-top: 1px solid #1a1a1a;
border-bottom: 1px solid #1a1a1a;
}
th {
border-top: 1px solid #1a1a1a;
padding: 0.25em 0.5em 0.25em 0.5em;
}
td {
padding: 0.125em 0.5em 0.25em 0.5em;
}
header {
margin-bottom: 4em;
text-align: center;
}
#TOC li {
list-style: none;
}
#TOC ul {
padding-left: 1.3em;
}
#TOC > ul {
padding-left: 0;
}
#TOC a:not(:hover) {
text-decoration: none;
}
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style>
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
</head>
<body>
<figure>
<img src="docs/spmenu.svg" title="spmenu" style="width:25.0%"
alt="spmenu logo" />
<figcaption aria-hidden="true">spmenu logo</figcaption>
</figure>
<h1 id="spmenu">spmenu</h1>
<h2 id="what-is-spmenu">What is spmenu?</h2>
<p>spmenu is an X11 menu application 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>, which handles both $PATH
listing, .desktop entries and file listing.</p>
<p>While spmenu is based on dmenu, and is also fully compatible with
dmenu, spmenu introduces many new features which can be useful in shell
scripting. There are way too many to list, but spmenu has a <a
href="https://spmenu.speedie.site">wiki</a> which goes through features
in more detail.</p>
<h2 id="dependencies">Dependencies</h2>
<ul>
<li>libX11
<ul>
<li>If youre using macOS, XQuartz is a dependency instead.</li>
<li>If youre using Wayland, <code>xorg-xwayland</code> is a
dependency.</li>
</ul></li>
<li>libXrender</li>
<li>freetype</li>
<li>imlib2
<ul>
<li>Used for image support, can be disabled during compile time.</li>
</ul></li>
<li>libXinerama
<ul>
<li>Used for multi-monitor support, can be disabled during compile
time.</li>
</ul></li>
<li>OpenSSL
<ul>
<li>Used to calculate MD5 of images if image support is enabled, can be
disabled during compile time.</li>
</ul></li>
<li>Pango
<ul>
<li>Can be disabled if you dont want/need Pango markup during compile
time.</li>
</ul></li>
<li>libconfig
<ul>
<li>Can be disabled if you dont want/need config file support during
compile time.</li>
</ul></li>
<li>meson
<ul>
<li>Used to compile spmenu, not optional unless youre experienced with
build systems.</li>
</ul></li>
</ul>
<h2 id="installation">Installation</h2>
<ul>
<li><p>If youre using macOS you may want to consider looking at <a
href="https://spmenu.speedie.site/index.php/Using+spmenu+on+macOS">this
wiki artic le</a> for more information.</p></li>
<li><p>If you are on Arch GNU/Linux, you can add <a
href="https://git.speedie.site/speedie-repository">my repository</a>
which includes <code>spmenu</code> as well as other useful packages.
Then simply <code>pacman -S spmenu</code>.</p></li>
<li><p>Or if you are on Gentoo GNU/Linux, you can add <a
href="https://git.speedie.site/speedie-overlay">my overlay</a> which
includes <code>x11-misc/spmenu</code> as well as other useful packages.
Then simply <code>emerge spmenu</code>.</p></li>
</ul>
<p>If you still need/want to manually compile, follow along with manual
compilation.</p>
<p>Here were manually compiling spmenu. This is likely what youll want
to do if youre using any distribution but Arch or Gentoo.</p>
<p>Git is required to clone the repository, but you can also use <a
href="https://ls.speedie.site">releases</a>. Those can be unpacked using
<code>tar -xpvf /path/to/spmenu-version.tar.gz</code>.</p>
<p>To install Git:</p>
<ul>
<li><p>Gentoo: <code>emerge dev-vcs/git</code></p></li>
<li><p>Arch: <code>pacman -S git</code></p></li>
<li><p>Debian: <code>apt-get install git</code></p></li>
</ul>
<p>You will also need the dependencies for spmenu. Youll have to find
those packages in your distribution repositories.</p>
<p>To clone the repository using Git:</p>
<p><code>git clone https://git.speedie.site/spmenu</code></p>
<p><code>cd spmenu/</code></p>
<p>Configure the build by running these commands:</p>
<p><code>mkdir -p build/ # Create a build/ directory, Meson will use this as the working directory</code></p>
<p><code>meson setup build # This will check to make sure all dependencies are found. If you're recompiling you may want to pass --reconfigure as an argument</code></p>
<p>Now, to build it run <code>ninja -C build</code>. If all went well
you should have a binary in the <code>build/</code> directory.</p>
<p>Finally, to install it all, run:</p>
<p><code>meson install -C build --destdir /usr # /usr may be overriden to /usr/local or anything else if you use macOS or simply want another destination directory</code></p>
<p>To generate documentation, which may be necessary if youre pushing
new changes to your Git repository, run
<code>scripts/make/generate-docs.sh</code> <strong>in the current
directory</strong>.</p>
<p>To generate a tarball, run <code>scripts/make/generate-pkg.sh</code>
<strong>in the current directory</strong>. If you want to generate a
Pacman package, run <code>scripts/make/generate-pacman-pkg.sh</code>
instead.</p>
<p>See <a
href="https://spmenu.speedie.site/index.php/Using+spmenu+on+macOS">this
wiki article</a> for more information.</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>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>Image support: Ability to display icons, similar to rofi</li>
<li>Text drawing: Use cairo for text drawing over Xft.</li>
<li>Lines: Rofi-like newlines in the same entry
<ul>
<li>Just need to <code>XMoveResizeWindow()</code> as well as
<code>mh += bh</code> and <code>y += bh</code> for each added line.</li>
</ul></li>
<li>Matching: Add support for contextual completions similar to
xprompt</li>
<li>Matching: Regex matching
<ul>
<li>Probably use some minimal public domain library for this, Id like
to avoid adding more external dependencies unless its a common
dependency most people already have.</li>
</ul></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>X11: Move from Xlib to libXcb</li>
<li>Wayland: Wayland support, but only if it doesnt require writing any
extra code which as of now seems unlikely, or if someone makes a patch.
<ul>
<li>Before this can even be done, replace Xft with cairo, deal with
keybinds in some Wayland compatible way, remove .Xresources usage and
figure out a way to preserve X11 compatibility as I do not want to use
Wayland as of now.</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>
<p>None discovered yet! :)</p>
<h2 id="scripts">Scripts</h2>
<p>Theres a page dedicated to user scripts <a
href="https://spmenu.speedie.site/index.php/User+scripts">over on the
wiki</a>. Feel free to contribute and try scripts on there.</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>
<h2 id="wiki">Wiki</h2>
<p>spmenu has <a href="https://spmenu.speedie.site">a wiki</a> for more
extensive documentation. Contributions to the wiki are appreciated!</p>
</body>
</html>