mkdocstrings-shell¤
A shell scripts/libraries handler for mkdocstrings. It uses Shellman to collect documentation from shell scripts.
Installation¤
pip install mkdocstrings-shell
Configuration¤
In MkDocs configuration file:
plugins:
- mkdocstrings:
default_handler: shell # optional
The handler does not offer any option yet.
Usage¤
Use mkdocstrings syntax to inject documentation for a script:
::: relative/path/to/script
handler: shell
Specifying handler: shell
is optional if you declared shell
as default handler in mkdocs.yml.
Example¤
Let say we have a script called drag
in a scripts folder, enabling a drag-drop feature on the command-line.
View the script's contents:
#!/bin/bash
## \author Timothée Mazzucotelli / @pawamoy <pawamoy@pm.me>
## \brief Save file paths in a buffer to move them somewhere else.
## \desc This tool lets you save file paths into a buffer before moving or copying
## them somewhere else. It acts like a drag-and-drop utility but for the command-line.
## It can be useful when you don't want to type the entire destination path and
## proceed in three or more steps instead, using shortcut commands to move around your
## filesystem, dragging files from multiple directories.
## \example Drag files from multiple directories, drop them in another:
## \example-code bash
## cd ~/Documents
## drag ThisPlaylist.s3u
## cd ../Downloads
## drag ThisTrack.ogg AndThisVideo.mp4
## drag --drop ../project
## \example-description
## In this example, we simply move around in the filesystem, picking files in
## each of these directories. At the end, we drop them all in a specific
## directory.
## \example Define a convenient `drop` alias:
## \example-code bash
## alias drop='drag -d'
## drag file.txt
## cd /somewhere/else
## drop
## \example-description
## In this example, we define a `drop` alias that allows us to actually
## run `drag` then `drop` (instead of `drag --drop`).
if [ $# -eq 0 ]; then
shellman "$0"
exit 1
fi
data_file="/tmp/dragdrop"
drop() {
local dir="${2:-.}"
local drop=$1
[ ! -f "${data_file}" ] && { echo "drag (drop): no files list" >&2; exit 0; }
while read -r f; do
$drop -v "$f" "${dir}"
done < "${data_file}"
rm "${data_file}"
}
main() {
case $1 in
## \option -h, --help
## Print this help and exit.
-h|--help) shellman "$0"; exit 0 ;;
## \option -d, --drop [DIR]
## Drop the remembered files in the specified directory
## (defaul: current directory).
-d|--drop)
drop mv "$2"
exit 0
;;
## \option -p, --copy [DIR]
## Copy (instead of move) the dragged files in the specified directory
## (defaul: current directory).
-p|--copy)
drop cp "$2"
exit 0
;;
## \option -c, --clean
## Clean the currently dragged files list (this option does not delete any file).
-c|--clean)
rm "${data_file}" 2>/dev/null
exit 0
;;
## \option -l, --list
## List the currently dragged files.
-l|--list)
cat "${data_file}" 2>/dev/null
exit 0
;;
esac
for f; do
if [ "${f:0:1}" = "/" ]; then
echo "$f" >> "${data_file}"
else
echo "${PWD}/$f" >> "${data_file}"
fi
done
}
## \usage drag FILES
## \usage drag -d|-p [DIR]
## \usage drag -c|-l
main "$@"
The documentation syntax used in this script is documented here: https://pawamoy.github.io/shellman/usage/syntax/.
We can inject documentation for our script using this markup:
::: scripts/drag
handler: shell
...which would render the following documentation:
drag¤
Save file paths in a buffer to move them somewhere else.
Usagedrag FILES
drag -d|-p [DIR]
drag -c|-l
Description This tool lets you save file paths into a buffer before moving or copying them somewhere else. It acts like a drag-and-drop utility but for the command-line. It can be useful when you don't want to type the entire destination path and proceed in three or more steps instead, using shortcut commands to move around your filesystem, dragging files from multiple directories.
Options-
-h
,--help
:Print this help and exit.
-
-d
,--drop
[DIR]
:Drop the remembered files in the specified directory (defaul: current directory).
-
-p
,--copy
[DIR]
:Copy (instead of move) the dragged files in the specified directory (defaul: current directory).
-
-c
,--clean
:Clean the currently dragged files list (this option does not delete any file).
-
-l
,--list
:List the currently dragged files.
Drag files from multiple directories, drop them in another:
cd ~/Documents
drag ThisPlaylist.s3u
cd ../Downloads
drag ThisTrack.ogg AndThisVideo.mp4
drag --drop ../project
In this example, we simply move around in the filesystem, picking files in each of these directories. At the end, we drop them all in a specific directory.
Define a convenient drop
alias:
alias drop='drag -d'
drag file.txt
cd /somewhere/else
drop
In this example, we define a drop
alias that allows us to actually run drag
then drop
(instead of drag --drop
).
Timothée Mazzucotelli / @pawamoy pawamoy@pm.me