add separate man page for spmenu_run

This commit is contained in:
speedie 2023-05-16 20:50:08 +02:00
parent 5aefbf249a
commit 82fa3eaa95
9 changed files with 360 additions and 36 deletions

View file

@ -1,17 +1,17 @@
spmenu spmenu
====== ======
spmenu is a program for X11 that reads standard input and allows the user to spmenu is an X11 menu application which takes standard input, parses
select items separated by a newline. It's a fork of it, and lets the user choose an option and sends the
[suckless's dmenu](https://tools.suckless.org/dmenu) which is a good more selected option to standard output.
minimal alternative to spmenu.
What makes spmenu different from all the dmenu forks is that spmenu has In addition to this, it also serves as a run launcher through the included
features like color support, Vim-like modes, image support, shell script `spmenu_run`, which handles both $PATH listing, .desktop entries
proper mouse/keybind configuration, and more. and file listing. See spmenu_run(1) for more information related to
using spmenu as a run launcher.
It should be noted that most of these features may be disabled by the user, either While spmenu is based on dmenu, and is also fully compatible with dmenu,
during compile time or through configuration. spmenu introduces many new features which can be useful in shell scripting.
## Usage ## Usage
@ -23,6 +23,9 @@ This allows things like `printf "Apple\nOrange\nPear\n" | spmenu`. This command
will spawn an spmenu window with three items, 'Apple', 'Orange' and 'Pear'. will spawn an spmenu window with three items, 'Apple', 'Orange' and 'Pear'.
This can be used in shell scripts to create interactive menus. This can be used in shell scripts to create interactive menus.
spmenu doesn't strictly read standard input, it can read from files too using
the `-lf` or `--list-file` argument.
On top of this, you can specify arguments to change the behavior of spmenu. On top of this, you can specify arguments to change the behavior of spmenu.
See a list below for a list. See a list below for a list.

131
docs/run-docs.md Normal file
View file

@ -0,0 +1,131 @@
spmenu_run
==========
spmenu includes a powerful Bash script called spmenu_run. It has several
different components, but the run launcher component lists out
executable programs in $PATH and displays them to the user in a list.
Not only that but it optionally shows recently run programs first in the list,
which is very useful.
By default it also saves history, which can be viewed by calling
`viewhistory` in your spmenu config. By default the keybind
is Ctrl+h in normal mode.
The selected option is then piped to /bin/sh (by default). This component
allows you to select multiple entries by calling `markitem`. By default
the keybind is Ctrl+Enter in any mode. The selected item(s) are then
executed in order one after one. The run launcher also has some
extra awesome features such as:
- Prepending `#` will spawn it in a terminal instead of just a shell.
- Prepending `?` will run the command in a function, most of the time used to
display the man page.
- Prepending `magnet` will open a magnet link in $TORRENT
- Prepending `www` will open a page in $BROWSER
Most of the time you don't need to prepend `www` though, for example
typing in `https://gnu.org` will open gnu.org in $BROWSER even
without the prefix. Same goes for magnet links.
In addition to the $PATH listing, spmenu_run also allows listing out
and displaying .desktop entries through the desktop component.
It does this in style too by default, by displaying the program icon.
Finally, it also comes with a file manager component. Out of the box
this is very basic, but could be expanded to allow for features
proper file managers usually have. It is intended to be used in
your shell scripts with the `-o` flag to select a file. You can
see this in action in the spmenuify theme manager.
It can be configured through editing `~/.config/spmenu/run/config`. The
configuration file can also be moved by setting `${XDG_CONFIG_HOME}`.
For more information regarding configuration, see 'Configuration'.
## Usage
Running `spmenu_run` in a shell will execute spmenu_run using the
default component (defined in the configuration file). You can
override this using arguments. Note that you can always override
this using arguments, see Arguments for more information.
## Arguments
You may use long, descriptive arguments or the shorter arguments.
`-x, --run`
: List entries in $PATH
`-f, --fm dir`
: List files and directories in dir
`-d, --desktop`
: List .desktop entries
`-p, --full-path`
: Print the full path to the file selected (-fm)
`-np, --no-full-path`
: Don't print the full path to the file selected (-fm)
`-cc, --clear-cache`
: Clear cache, useful if you just installed/uninstalled a program. (-d)
`-dm, --dmenu`
: Run spmenu_run using dmenu instead of spmenu
`-ndm, --no-dmenu`
: Run spmenu_run using spmenu instead of dmenu
`-h, --help`
: Print help
`-o, --stdout`
: Print to standard input and do not execute the selected item
`-no, --no-stdout`
: Don't print to standard input, execute the selected item
`-a, --args args`
: Pass args to spmenu
## Configuration
When spmenu_run is started for the first time, a default configuration file
is created at `~/.config/spmenu/run/config`. This configuration file unlike
the spmenu configuration file is configured in Bash, allowing you to use
POSIX compliant features as well as Bash features.
Most of the variables are already defined, and there are several functions
you can define yourself which spmenu_run will execute on a certain condition.
This allows for a very customizable run launcher, because it means almost anything
Bash can do can be done with spmenu_run.
spmenu_run will execute the following functions
(from your `~/.config/spmenu/run/config` file) if they are found:
- `run_pre_func` before spawning spmenu.
- `run_post_func` after spawning spmenu, selected item passed as an argument.
- `desktop_pre_func` before spawning spmenu.
- `desktop_post_func` after spawning spmenu, selected item passed as an argument.
- `fm_pre_func` before spawning spmenu.
- `fm_post_func` after spawning spmenu, selected item passed as an argument.
- `fm_pre_list_func` right before listing out files.
- `fm_post_list_func` right after listing out files.
- `fm_dir_func` before changing directory to the selected directory.
- `fm_line_func` for each line in ls output, the line is passed as an argument,
including SGR colors.
- `read_man` when reading a man page, selected item passed as an argument.
More detailed documentation regarding this is available in the spmenu wiki including
example functions that can be copied into your configuration.
## License
spmenu_run is licensed under the MIT license just like spmenu itself because
that's the original suckless license. See the included LICENSE file for more information.
## Reporting issues
Please report issues on the
[Codeberg repository](https://codeberg.org/speedie/spmenu) or alternatively
email me.

View file

@ -83,6 +83,7 @@ project_target = executable(
) )
install_man('spmenu.1') install_man('spmenu.1')
install_man('spmenu_run.1')
install_data(sources : 'docs/docs.md', install_dir : 'share/spmenu') install_data(sources : 'docs/docs.md', install_dir : 'share/spmenu')
install_data(sources : 'docs/code-docs.md', install_dir : 'share/spmenu') install_data(sources : 'docs/code-docs.md', install_dir : 'share/spmenu')
install_data(sources : 'docs/example.Xresources', install_dir : 'share/spmenu') install_data(sources : 'docs/example.Xresources', install_dir : 'share/spmenu')

View file

@ -7,5 +7,10 @@ pandoc --standalone --to man .man.md -o spmenu.1
pandoc --standalone .man.md -o spmenu.html pandoc --standalone .man.md -o spmenu.html
rm -f .man.md rm -f .man.md
printf "%% spmenu_run(1) ${version} | \$PATH/.desktop launcher and file manager\n" > .man.md
grep -v docs/preview.png docs/run-docs.md >> .man.md
pandoc --standalone --to man .man.md -o spmenu_run.1
rm -f .man.md
scripts/make/generate-code-docs.sh docs/code-docs.md code.html || return scripts/make/generate-code-docs.sh docs/code-docs.md code.html || return
pandoc --standalone README.md -o README.html pandoc --standalone README.md -o README.html

View file

@ -9,6 +9,7 @@ cp -rf LICENSE meson.build meson.options *.h *.c scripts/ docs/ libs/ themes/ PK
[ -f host.mk ] && cp host.mk spmenu-${version} || : [ -f host.mk ] && cp host.mk spmenu-${version} || :
[ -f toggle.mk ] && cp toggle.mk spmenu-${version} || : [ -f toggle.mk ] && cp toggle.mk spmenu-${version} || :
[ -f spmenu.1 ] && cp spmenu.1 spmenu-${version} || : [ -f spmenu.1 ] && cp spmenu.1 spmenu-${version} || :
[ -f spmenu_run.1 ] && cp spmenu_run.1 spmenu-${version} || :
tar -cf spmenu-${version}.tar spmenu-${version} tar -cf spmenu-${version}.tar spmenu-${version}
gzip spmenu-${version}.tar gzip spmenu-${version}.tar
rm -rf spmenu-${version} rm -rf spmenu-${version}

View file

@ -160,17 +160,19 @@ print_cli_help() {
spmenu_run - Run launcher for spmenu spmenu_run - Run launcher for spmenu
spmenu_run -x, --run List entries in \$PATH. spmenu_run -x, --run List entries in \$PATH.
spmenu_run -f, --fm <dir> List files and directories in <dir>. spmenu_run -fm, --fm <dir> List files and directories in <dir>
spmenu_run -d, --desktop List .desktop entries. spmenu_run -d, --desktop List .desktop entries.
spmenu_run -p, --full-path Print the full path to the file selected (-fm) spmenu_run -p, --full-path Print the full path to the file selected (-fm)
spmenu_run -np, --no-full-path Don't print the full path to the file selected (-fm) spmenu_run -np, --no-full-path Don't print the full path to the file selected (-fm)
spmenu_run -cc, --clear-cache Clear cache, useful if you just installed/uninstalled a program. spmenu_run -cc, --clear-cache Clear cache, useful if you just installed/uninstalled a program (-d)
spmenu_run -dm, --dmenu Run spmenu_run using dmenu instead of spmenu. spmenu_run -dm, --dmenu Run spmenu_run using dmenu instead of spmenu
spmenu_run -ndm, --no-dmenu Run spmenu_run using spmenu instead of dmenu. spmenu_run -ndm, --no-dmenu Run spmenu_run using spmenu instead of dmenu
spmenu_run -h, --help Print this help. spmenu_run -h, --help Print this help
spmenu_run -o, --stdout Print to standard input and do not execute the selected item. spmenu_run -o, --stdout Print to standard input and do not execute the selected item
spmenu_run -no, --no-stdout Don't print to standard input, execute the selected item. spmenu_run -no, --no-stdout Don't print to standard input, execute the selected item
spmenu_run -a, --args <args> Pass <args> to spmenu. spmenu_run -a, --args <args> Pass <args> to spmenu
See spmenu(1) and spmenu_run(1) for more information.
EOF EOF
} }

View file

@ -18,18 +18,19 @@
.hy .hy
.SH spmenu .SH spmenu
.PP .PP
spmenu is a program for X11 that reads standard input and allows the spmenu is an X11 menu application which takes standard input, parses it,
user to select items separated by a newline. and lets the user choose an option and sends the selected option to
It\[cq]s a fork of suckless\[cq]s standard output.
dmenu (https://tools.suckless.org/dmenu) which is a good more minimal
alternative to spmenu.
.PP .PP
What makes spmenu different from all the dmenu forks is that spmenu has In addition to this, it also serves as a run launcher through the
features like color support, Vim-like modes, image support, proper included shell script \f[V]spmenu_run\f[R], which handles both $PATH
mouse/keybind configuration, and more. listing, .desktop entries and file listing.
See spmenu_run(1) for more information related to using spmenu as a run
launcher.
.PP .PP
It should be noted that most of these features may be disabled by the While spmenu is based on dmenu, and is also fully compatible with dmenu,
user, either during compile time or through configuration. spmenu introduces many new features which can be useful in shell
scripting.
.SS Usage .SS Usage
.PP .PP
On runtime, spmenu reads from standard input (stdin). On runtime, spmenu reads from standard input (stdin).
@ -43,6 +44,9 @@ This command will spawn an spmenu window with three items, `Apple',
`Orange' and `Pear'. `Orange' and `Pear'.
This can be used in shell scripts to create interactive menus. This can be used in shell scripts to create interactive menus.
.PP .PP
spmenu doesn\[cq]t strictly read standard input, it can read from files
too using the \f[V]-lf\f[R] or \f[V]--list-file\f[R] argument.
.PP
On top of this, you can specify arguments to change the behavior of On top of this, you can specify arguments to change the behavior of
spmenu. spmenu.
See a list below for a list. See a list below for a list.

View file

@ -169,15 +169,16 @@
<h1 class="title">spmenu(1) 1.1.2 | fancy dynamic menu</h1> <h1 class="title">spmenu(1) 1.1.2 | fancy dynamic menu</h1>
</header> </header>
<h1 id="spmenu">spmenu</h1> <h1 id="spmenu">spmenu</h1>
<p>spmenu is a program for X11 that reads standard input and allows the <p>spmenu is an X11 menu application which takes standard input, parses
user to select items separated by a newline. Its a fork of <a it, and lets the user choose an option and sends the selected option to
href="https://tools.suckless.org/dmenu">sucklesss dmenu</a> which is a standard output.</p>
good more minimal alternative to spmenu.</p> <p>In addition to this, it also serves as a run launcher through the
<p>What makes spmenu different from all the dmenu forks is that spmenu included shell script <code>spmenu_run</code>, which handles both $PATH
has features like color support, Vim-like modes, image support, proper listing, .desktop entries and file listing. See spmenu_run(1) for more
mouse/keybind configuration, and more.</p> information related to using spmenu as a run launcher.</p>
<p>It should be noted that most of these features may be disabled by the <p>While spmenu is based on dmenu, and is also fully compatible with
user, either during compile time or through configuration.</p> dmenu, spmenu introduces many new features which can be useful in shell
scripting.</p>
<h2 id="usage">Usage</h2> <h2 id="usage">Usage</h2>
<p>On runtime, spmenu reads from standard input (stdin). spmenu items <p>On runtime, spmenu reads from standard input (stdin). spmenu items
are separated by a newline (<code>\n</code>). When (by default) Enter is are separated by a newline (<code>\n</code>). When (by default) Enter is
@ -186,6 +187,8 @@ pressed, the selected item will be piped to stdout.</p>
<code>printf "Apple\nOrange\nPear\n" | spmenu</code>. This command will <code>printf "Apple\nOrange\nPear\n" | spmenu</code>. This command will
spawn an spmenu window with three items, Apple, Orange and Pear. spawn an spmenu window with three items, Apple, Orange and Pear.
This can be used in shell scripts to create interactive menus.</p> This can be used in shell scripts to create interactive menus.</p>
<p>spmenu doesnt strictly read standard input, it can read from files
too using the <code>-lf</code> or <code>--list-file</code> argument.</p>
<p>On top of this, you can specify arguments to change the behavior of <p>On top of this, you can specify arguments to change the behavior of
spmenu. See a list below for a list.</p> spmenu. See a list below for a list.</p>
<h2 id="arguments">Arguments</h2> <h2 id="arguments">Arguments</h2>

174
spmenu_run.1 Normal file
View file

@ -0,0 +1,174 @@
.\" Automatically generated by Pandoc 3.0.1
.\"
.\" Define V font for inline verbatim, using C font in formats
.\" that render this, and otherwise B font.
.ie "\f[CB]x\f[]"x" \{\
. ftr V B
. ftr VI BI
. ftr VB B
. ftr VBI BI
.\}
.el \{\
. ftr V CR
. ftr VI CI
. ftr VB CB
. ftr VBI CBI
.\}
.TH "spmenu_run" "1" "" "1.1.2" "$PATH/.desktop launcher and file manager"
.hy
.SH spmenu_run
.PP
spmenu includes a powerful Bash script called spmenu_run.
It has several different components, but the run launcher component
lists out executable programs in $PATH and displays them to the user in
a list.
Not only that but it optionally shows recently run programs first in the
list, which is very useful.
.PP
By default it also saves history, which can be viewed by calling
\f[V]viewhistory\f[R] in your spmenu config.
By default the keybind is Ctrl+h in normal mode.
.PP
The selected option is then piped to /bin/sh (by default).
This component allows you to select multiple entries by calling
\f[V]markitem\f[R].
By default the keybind is Ctrl+Enter in any mode.
The selected item(s) are then executed in order one after one.
The run launcher also has some extra awesome features such as:
.IP \[bu] 2
Prepending \f[V]#\f[R] will spawn it in a terminal instead of just a
shell.
.IP \[bu] 2
Prepending \f[V]?\f[R] will run the command in a function, most of the
time used to display the man page.
.IP \[bu] 2
Prepending \f[V]magnet\f[R] will open a magnet link in $TORRENT
.IP \[bu] 2
Prepending \f[V]www\f[R] will open a page in $BROWSER
.PP
Most of the time you don\[cq]t need to prepend \f[V]www\f[R] though, for
example typing in \f[V]https://gnu.org\f[R] will open gnu.org in
$BROWSER even without the prefix.
Same goes for magnet links.
.PP
In addition to the $PATH listing, spmenu_run also allows listing out and
displaying .desktop entries through the desktop component.
It does this in style too by default, by displaying the program icon.
.PP
Finally, it also comes with a file manager component.
Out of the box this is very basic, but could be expanded to allow for
features proper file managers usually have.
It is intended to be used in your shell scripts with the \f[V]-o\f[R]
flag to select a file.
You can see this in action in the spmenuify theme manager.
.PP
It can be configured through editing
\f[V]\[ti]/.config/spmenu/run/config\f[R].
The configuration file can also be moved by setting
\f[V]${XDG_CONFIG_HOME}\f[R].
For more information regarding configuration, see `Configuration'.
.SS Usage
.PP
Running \f[V]spmenu_run\f[R] in a shell will execute spmenu_run using
the default component (defined in the configuration file).
You can override this using arguments.
Note that you can always override this using arguments, see Arguments
for more information.
.SS Arguments
.PP
You may use long, descriptive arguments or the shorter arguments.
.TP
\f[V]-x, --run\f[R]
List entries in $PATH
.TP
\f[V]-f, --fm dir\f[R]
List files and directories in dir
.TP
\f[V]-d, --desktop\f[R]
List .desktop entries
.TP
\f[V]-p, --full-path\f[R]
Print the full path to the file selected (-fm)
.TP
\f[V]-np, --no-full-path\f[R]
Don\[cq]t print the full path to the file selected (-fm)
.TP
\f[V]-cc, --clear-cache\f[R]
Clear cache, useful if you just installed/uninstalled a program.
(-d)
.TP
\f[V]-dm, --dmenu\f[R]
Run spmenu_run using dmenu instead of spmenu
.TP
\f[V]-ndm, --no-dmenu\f[R]
Run spmenu_run using spmenu instead of dmenu
.TP
\f[V]-h, --help\f[R]
Print help
.TP
\f[V]-o, --stdout\f[R]
Print to standard input and do not execute the selected item
.TP
\f[V]-no, --no-stdout\f[R]
Don\[cq]t print to standard input, execute the selected item
.TP
\f[V]-a, --args args\f[R]
Pass args to spmenu
.SS Configuration
.PP
When spmenu_run is started for the first time, a default configuration
file is created at \f[V]\[ti]/.config/spmenu/run/config\f[R].
This configuration file unlike the spmenu configuration file is
configured in Bash, allowing you to use POSIX compliant features as well
as Bash features.
.PP
Most of the variables are already defined, and there are several
functions you can define yourself which spmenu_run will execute on a
certain condition.
This allows for a very customizable run launcher, because it means
almost anything Bash can do can be done with spmenu_run.
.PP
spmenu_run will execute the following functions (from your
\f[V]\[ti]/.config/spmenu/run/config\f[R] file) if they are found:
.IP \[bu] 2
\f[V]run_pre_func\f[R] before spawning spmenu.
.IP \[bu] 2
\f[V]run_post_func\f[R] after spawning spmenu, selected item passed as
an argument.
.IP \[bu] 2
\f[V]desktop_pre_func\f[R] before spawning spmenu.
.IP \[bu] 2
\f[V]desktop_post_func\f[R] after spawning spmenu, selected item passed
as an argument.
.IP \[bu] 2
\f[V]fm_pre_func\f[R] before spawning spmenu.
.IP \[bu] 2
\f[V]fm_post_func\f[R] after spawning spmenu, selected item passed as an
argument.
.IP \[bu] 2
\f[V]fm_pre_list_func\f[R] right before listing out files.
.IP \[bu] 2
\f[V]fm_post_list_func\f[R] right after listing out files.
.IP \[bu] 2
\f[V]fm_dir_func\f[R] before changing directory to the selected
directory.
.IP \[bu] 2
\f[V]fm_line_func\f[R] for each line in ls output, the line is passed as
an argument, including SGR colors.
.IP \[bu] 2
\f[V]read_man\f[R] when reading a man page, selected item passed as an
argument.
.PP
More detailed documentation regarding this is available in the spmenu
wiki including example functions that can be copied into your
configuration.
.SS License
.PP
spmenu_run is licensed under the MIT license just like spmenu itself
because that\[cq]s the original suckless license.
See the included LICENSE file for more information.
.SS Reporting issues
.PP
Please report issues on the Codeberg
repository (https://codeberg.org/speedie/spmenu) or alternatively email
me.