doc: documentation first draft:

this patch starts the local documentation, existing documentation will be imported from wiki/other places to this folder and updated.
This doc is using reStructuredText format and will be generated with Sphinx.
This commit is contained in:
Goffi 2019-02-22 18:58:59 +01:00
commit 31a16d1fab
9 changed files with 1097 additions and 0 deletions

19
doc/Makefile Normal file
View file

@ -0,0 +1,19 @@
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
SOURCEDIR = .
BUILDDIR = .build
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
.PHONY: help Makefile
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

184
doc/conf.py Normal file
View file

@ -0,0 +1,184 @@
# -*- coding: utf-8 -*-
#
# Configuration file for the Sphinx documentation builder.
#
# This file does only contain a selection of the most common options. For a
# full list see the documentation:
# http://www.sphinx-doc.org/en/master/config
# -- Path setup --------------------------------------------------------------
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
# import os
# import sys
# sys.path.insert(0, os.path.abspath('.'))
import os.path
import re
# -- Project information -----------------------------------------------------
project = u'Salut à Toi'
copyright = u'2019, Salut à Toi'
author = u'Salut à Toi team'
doc_dir = os.path.dirname(os.path.abspath(__file__))
version_path = os.path.join(doc_dir, '../sat/VERSION')
with open(version_path) as f:
version_full = f.read()
# The short X.Y version
version = re.match(r'[0-9.]+', version_full).group()
# The full version, including alpha/beta/rc tags
release = version_full
# -- General configuration ---------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
#
# needs_sphinx = '1.0'
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
]
# Add any paths that contain templates here, relative to this directory.
templates_path = ['.templates']
# The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string:
#
# source_suffix = ['.rst', '.md']
source_suffix = '.rst'
# The master toctree document.
master_doc = 'index'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#
# This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases.
language = None
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This pattern also affects html_static_path and html_extra_path.
exclude_patterns = [u'.build', 'Thumbs.db', '.DS_Store']
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = None
# -- Options for HTML output -------------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
#
html_theme = 'alabaster'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
#
# html_theme_options = {}
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['.static']
# Custom sidebar templates, must be a dictionary that maps document names
# to template names.
#
# The default sidebars (for documents that don't match any pattern) are
# defined by theme itself. Builtin themes are using these templates by
# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',
# 'searchbox.html']``.
#
# html_sidebars = {}
# -- Options for HTMLHelp output ---------------------------------------------
# Output file base name for HTML help builder.
htmlhelp_basename = 'SalutToidoc'
# -- Options for LaTeX output ------------------------------------------------
latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
#
# 'papersize': 'letterpaper',
# The font size ('10pt', '11pt' or '12pt').
#
# 'pointsize': '10pt',
# Additional stuff for the LaTeX preamble.
#
# 'preamble': '',
# Latex figure (float) alignment
#
# 'figure_align': 'htbp',
}
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
(master_doc, 'SalutToi.tex', u'Salut à Toi Documentation',
u'Salut à Toi team', 'manual'),
]
# -- Options for manual page output ------------------------------------------
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
(master_doc, 'saluttoi', u'Salut à Toi Documentation',
[author], 1)
]
# -- Options for Texinfo output ----------------------------------------------
# Grouping the document tree into Texinfo files. List of tuples
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
(master_doc, 'SalutToi', u'Salut à Toi Documentation',
author, 'SalutToi', 'One line description of project.',
'Miscellaneous'),
]
# -- Options for Epub output -------------------------------------------------
# Bibliographic Dublin Core info.
epub_title = project
# The unique identifier of the text. This can be a ISBN number
# or the project homepage.
#
# epub_identifier = ''
# A unique identification for the text.
#
# epub_uid = ''
# A list of files that should not be packed into the epub file.
epub_exclude_files = ['search.html']
# -- Extension configuration -------------------------------------------------

34
doc/index.rst Normal file
View file

@ -0,0 +1,34 @@
=========================
Salut à Toi documentation
=========================
Welcome to Salut à Toi's documentation. You'll find here both end-user and developer documentations.
Salut à Toi (or SàT) is a Libre communication ecosystem based on XMPP standard. It allows you to do many things such as:
- instant messaging
- (micro)blogging
- file sharing
- managing photo albums
- organizing/managing events
- handling tasks
- etc.
It features many interfaces (desktop, mobile, web, command line, console), and is multi-platforms.
You can follow this documentation to learn more on it, or join our official XMPP room at `sat@chat.jabberfr.org <xmpp:sat@chat.jabberfr.org?join>`_ (also available via a `web link <https://chat.jabberfr.org/converse.js/sat@chat.jabberfr.org>`_)
.. toctree::
:caption: Contents:
:maxdepth: 3
installation.rst
/jp/index.rst
Indices and tables
==================
* :ref:`genindex`
* :ref:`search`

188
doc/installation.rst Normal file
View file

@ -0,0 +1,188 @@
============
Installation
============
This are the instructions to install SàT using Python.
Note that if you are using GNU/Linux, Salut à Toi may already be present on your distribution.
Salut à Toi is made of one backend, and several frontends. To use it, the first thing to do is to install the backend.
We recommand to use development version for now, until the release of
0.7 version which will be "general public" version.
Also note that SàT is still using Python 2 (this will change for 0.8 version which will be Python 3 only), so all instructions below have to be made using python 2.
Development version
-------------------
*Note for Arch users: a pkgbuild is available for your distribution on
AUR, check sat-xmpp-hg (as well as other sat-\* packages).*
You can install the latest development version using pip. You need to
have the following dependencies installed first:
- Python 2 with development headers
- Mercurial
- VirtualEnv
- libcairo 2 with development headers
- libjpeg with development headers
- libgirepository 1.0 with development headers
- libdbus-1 with development headers
- libdbus-glib-1 with development headers
- libxml2 with development headers
- libxlt2 with development headers
- D-Bus x11 tools (this doesn't needs X11, it is just needed for dbus-launch)
- cmake
On Debian and derivatives, you can get all this with following command::
$ sudo apt-get install python-dev mercurial virtualenv libxml2-dev libxslt-dev libcairo2-dev libjpeg-dev libgirepository1.0-dev libdbus-1-dev libdbus-glib-1-dev dbus-x11 cmake
Now go in a location where you can install Salut à Toi, for
instance your home directory::
$ cd
And enter the following commands (note that *virtualenv2* may be named
*virtualenv* on some distributions, just be sure it's Python **2** version)::
$ virtualenv2 env
$ source env/bin/activate
$ pip install hg+https://repos.goffi.org/sat
Don't worry if you see the following message, SàT should work anyway::
Failed building wheel for pygobject
After installing SàT, you need to install the media::
$ cd
$ hg clone https://repos.goffi.org/sat_media
then, create the file ~/.config/sat/sat.conf containing:
.. sourcecode:: cfg
[DEFAULT]
media_dir = ~/sat_media
Of course, replace ``~/sat_media`` with the actual path you have used.
.. following part is currently hidden until v0.7 is released
Last release
------------
This release is really old and code has changed a lot since it.
Furthermore, stable version is currently not maintained. We recommend to use current dev version until version 0.7 is released.
If you are willing to install last release anyway, here are the instructions.
You can automatically install SàT and its dependencies using
easy_install or pip. You will however need to install Python's headers
(needed to build some packages),
`PyGObject <http://ftp.gnome.org/pub/GNOME/sources/pygobject/>`__ and
developments version of libxml2 and libxslt (to compile lxml python
library). On some ARM systems like Raspberry Pi or OLinuXino, it is also
required to install libjpeg-dev and libffi-dev beforehand.
The environment variable SAT_INSTALL customises the installation, it
contains flags separated by spaces:
- "nopreinstall" skip all preinstallation checks
- "autodeb" automatically install missing packages on Debian based
distributions
PyGobject is automatically installed on Debian based distributions if
"autodeb" option is set. Indeed, on Debian based distribution, you can
type:
| ``sudo apt-get install python-pip python-virtualenv python-dev libxml2-dev libxslt-dev libjpeg-dev libffi-dev zlib1g-dev``
| ``virtualenv --system-site-packages sat``
| ``source sat/bin/activate``
| ``pip2 install -U setuptools``
| ``SAT_INSTALL="autodeb" pip2 install sat``
After installing SàT, you need to install the media:
| ``mkdir -p /path/to/sat_media``
| ``cd /path/to/sat_media``
| ``wget ``\ ```ftp://ftp.goffi.org/sat_media/sat_media.tar.bz2`` <ftp://ftp.goffi.org/sat_media/sat_media.tar.bz2>`__
| ``tar -jxvf sat_media.tar.bz2``
then, create a ~/.sat.conf file which contains:
| ``[DEFAULT]``
| ``media_dir=/path/to/sat_media``
Of course, replace /path/to/sat_media with the actual path you want to
use.
Usage
=====
To launch the sat backend, enter::
$ sat
…or, if you want to launch it in foreground::
$ sat fg
You can stop it with::
$ sat stop
To know if backend is launched or not::
$ sat status
**NOTE**: since SàT v0.5.0, the backend is automatically launched when a frontend needs it.
You can check that SàT is installed correctly by trying jp (the backend need to be launched first, check below)::
$ jp --version
jp 0.7.0D « La Commune » (rev 2dd53ffa4781 (default 2019-02-22 18:58 +0100) +110) Copyright (C) 2009-2019 Jérôme Poisson, Adrien Cossa
This program comes with ABSOLUTELY NO WARRANTY;
This is free software, and you are welcome to redistribute it under certain conditions.
If you have a similar output, SàT is working.
Frontends
=========
So far, the following frontends exist and are actively maintained:
Cagou
desktop/mobile (Android) frontend
Libervia
the web frontend
Primitivus
Text User Interface
jp
Command Line Interface
To launch Primitivus, just type::
$ primitivus
then create a profile (XMPP account must already exist).
To use jp, follow its help::
$ jp --help
There are some other frontends:
Bellaciao
based on Qt, a rich desktop frontend (currently on hold)
Wix
former desktop frontend based on WxWidgets (deprecated with version 0.6.0)
Sententia
Emacs frontend developed by a third party (development is currently stalled)

286
doc/jp/blog.rst Normal file
View file

@ -0,0 +1,286 @@
.. highlight:: sh
================================
blog: (micro)blogging management
================================
Blog commands are high level tools to handle an XMPP blog.
They are using the generic pubsub arguments
set
===
publish a blog item.
:ref:`pubsub_common` commands are used to specify the destination item.
``stdin`` is used to get the body of the blog post.
examples
--------
Create a blog post with a body, a subject, 2 tags, and with comments allowed::
$ echo "This is post body" | jp blog set -T "This is a test message" -t test -t jp -C
Create a blog post with rich content using `markdown` syntax, and no subject::
$ echo "This is a **rich** body" | jp blog set -S markdown
get
===
get command retrieves one or move blog post from specified location (by default the
personal blog of the profile).
output can be customised to only retrieve some keys, or to use a specific template.
:ref:`pubsub_common` commands are used to specify the blog location.
examples
--------
Retrieve personal blog of the profile using `fancy` output with a verbosity of 1 (to show
publication date)::
$ jp blog get -O fancy -v
Retrieve *title* and *publication date* of last 3 blog posts from the blog at
https://www.goffi.org::
$ jp blog get -m 3 -u https://www.goffi.org -k title -k published
Retrieve last 2 posts of personal blog, and output them in browser using default
template::
$ jp blog get -m 2 -O template --oo browser
edit
====
With edit command you can create a new blog post or modify an existing one using your
local editor (the one set in ``$EDITOR``). You'll edit 2 things: the body of the post, and
the metadata which contain things like title, comments infos, or tags.
For some common editors (like **vim** or **Emacs**), the editor will be automatially
opened using a split screen with *body* in one side, and metadata on the other. If the
editor is not supported or doesn't support split screen, you'll edit first the *body*, then
the *metadata*. You can also specify editor and arguments in ``sat.conf``, see
`configuration <edit_conf_>`_ below
If you don't change anything or publish an empty blog post, the edition will be cancelled.
In the metadata (see `below <edit_metadata_>`_ for details), you can use
``"publish": false`` to forbid the publication. In this case, when you'll save
your modification and quit your editor, the blog post will not be published but
saved locally in a draft. To continue your work later, just start your edition with the
``-D, --current`` option like this::
$ jp blog edit -D
Note that item location must be re-specified if it has been used to create the draft, so
you'll have to reproduce the arguments to specify service, node or item (or the URL),
other data like tags will be restored from draft file of metadata.
You can specify the syntax by using ``-S SYNTAX, --syntax SYNTAX``. If not specified, the
syntax set in your parameters will be used.
When you edit a blog post, it is often useful to activate the ``-P, --preview`` option,
this will launch a web browser and refresh the page each time you save a modification in
your editor. By default, the browser registered as default in your system will be used,
and a new tab will be opened on each modification. This is not ideal, and we recommand to
set you configuration to activate automatic refreshing of the page instead, see `preview
configuration <edit_preview_>`_ below to see how to do.
examples
--------
Edit a new blog post with comments on your personal blog, using default syntax and preview::
$ jp blog edit -P --comments
Modifiy a draft previously saved using the ``"publish": false`` metadata::
$ jp blog edit -D
Correct a typo in your last published blog post::
$ jp blog edit --last-item
Edit the blog item at an HTTPS URL using XHTML syntax::
$ jp blog edit -u https://www.example.net/some_xmpp_blog_article.html -S xhtml
Create a new blog post on a XMPP blog node using its HTTPS URL (supposing here that
https://example.net is a XMPP blog node)::
$ jp blog edit -u https://www.example.net
.. _edit_metadata:
metadata
--------
Metadata is set using a JSON object. The key you can use are:
publish
boolean indicating if item can be published. Set to ``false`` if you want to work on a
draft and to avoid accidental publication.
atom_id
atom entry identifier. This should not be modified manually.
published
time of initial publication (unix time). This should not be modified manually.
language
language of the content
comments
array of URIs to the comments node, if any.
tag
array of tags, if any
author
human readable name of the entry author
author_jid
jid of the author. This should notbe modified manually.
author_jid_verified
true if the pubsub service confirmed that author_jid is the one of the publisher. It is
useless to modify this variable.
title
the title of the message
title_rich
the rich title of the message, in current text syntax. It will be automatically
converted to xhtml.
.. _edit_conf:
configuration
-------------
editor
^^^^^^
Local editor used is by default the one set in ``$EDITOR`` environment variable, but you
can specify one in ``sat.conf``. To do so, you have to set the name of an editor
executable in the ``editor`` option in ``[jp]`` section.
You can specify the args to use by using ``blog_editor_args`` option. Use
``{content_file}`` to get the path of the main content file (the body of the blog post),
and ``{metadata_file}`` to get the path of the json metadata.
.. sourcecode:: cfg
[jp]
editor = kate
blog_editor_args = {content_file} {metadata_file}
.. _edit_preview:
preview
^^^^^^^
To set the preview, you can use the options ``blog_preview_open_cmd`` and
``blog_preview_update_cmd`` in your ``[jp]`` section. the former is the command to use to
open your browser when edition starts, and the later is the command to use when a
modification is saved. In both cases you may use ``{url}`` to set the location of local HTML file.
This can be use to activate automatic refreshing of the page.
For **Konqueror**, you can use its D-Bus API to do refreshing. Ensure that ``qdbus`` is
installed on your system, and enter the following lines in your ``sat.conf``:
.. sourcecode:: cfg
[jp]
blog_preview_open_cmd = konqueror {url}
blog_preview_update_cmd = /bin/sh -c "qdbus $(qdbus org.kde.konqueror\*) /konqueror/MainWindow_1 reload"
For **Firefox**, you may use ``xdotool`` on X11. Once you have installed this tool, enter the
following lines in your ``sat.conf``:
.. sourcecode:: cfg
[jp]
blog_preview_open_cmd = firefox -new-tab {url}
blog_preview_update_cmd = /bin/sh -c "WID=$(xdotool search --name 'Mozilla Firefox' | head -1); xdotool windowactivate $WID; xdotool key F5"
This *xdotool* technique can be adapted to other browsers.
syntax extensions
^^^^^^^^^^^^^^^^^^
A dictionary with a mapping from syntax name to file extension can be used. This can be
useful to activate the right syntax highlighting in your editor. There is a default
mapping which can be overriden.
The mapping is set in the ``syntax_ext_dict`` option of the ``[jp]`` section of your
``sat.conf`` file. For instance, if your prefer do your ``.markdown`` for temp files
instead of the default ``.md``, you can use this:
.. sourcecode:: cfg
[jp]
syntax_ext_dict = {"markdown": "markdown"}
the first ``markdown`` is the name of the syntax (could an other syntax like ``xhtml``),
while the second if the file extension.
preview
=======
This command will show the specified file in browser, and refresh it when changes are
detected. Configuration is the same as for `edit preview <edit_preview_>`_. This is can be
used if you have already started an edition with ``jp blog edit`` but forgot to use the ``-P, --preview`` arguments.
example:
--------
Preview the draft at ``~/local/sat/blog/some_name/blog_something.md``::
$ jp blog preview ~/local/sat/blog/some_name/blog_something.md
import
======
With this command you can import an external blog in a XMPP blog at the specified pubsub
location.
The import is done using an *importer* name and a *location* which depends of the importer
(it can be a path to a file, an URL to a blog, or something else). Use empty nothing to
get list of importers, and specify only importer name to get its description.
By default, found images are re-uploaded to XMPP server, if you want to keep original
URLs, use the ``--no-images-upload`` option.
Alternatively, you can re-upload images except for a specific host with ``--upload-ignore-host UPLOAD_IGNORE_HOST``. The images for the specified host will keep there original URLs while other will be uploaded to XMPP server.
You shoud specify original blog host using ``--host HOST`` argument, this is used notably
to reconstruct relative URLs of media.
Importers may have specific options, you can set them using the ``-o NAME VALUE, --option NAME VALUE`` argument. Check the importer description for details.
examples:
---------
List available importers::
$ jp blog import
Get description of ``dotclear`` importer::
$ jp blog import dotclear
Import a Dotclear blog::
$ jp blog import dotclear /path/to/dotclear.dump
Import a Dotclear blog without uploading images::
$ jp blog import --no-images-upload dotclear /path/to/dotclear.dump

207
doc/jp/common_arguments.rst Normal file
View file

@ -0,0 +1,207 @@
================
common arguments
================
Some arguments are used in many commands. This page describe them.
profile
=======
profile arguments are really common, they allow you to select your profile.
If you don't select any, the default profile is used, which is the first
profile created or the one you have explicitly set. You can check which profile
is used by default with ``jp profile default``.
The common arguments for profile are:
``-p PROFILE, --profile PROFILE``
to select the name of your profile. It can be a profile key like ``@DEFAULT@``
``-c, --connect``
connect the profile to the XMPP server before doing anything else. If your
profile is already connected, nothing happen. This is specially useful in scripts.
``--start-session``
starts a session without connecting, this can be needed if you can't connect but
you need to access your session e.g. to change parameters.
This is advanced used and is not need in most common cases.
``--pwd PASSWORD``
the password of your profile, needed if the session is not started yet.
.. note::
jp does not yet prompt for password when needed, this mean that using the ``--pwd``
option is not secure if you are not the only user of your machine: the password will
appear **IN CLEAR** in the list of launched process, or in the history of your shell.
If you are on a shared machine or if anybody can access your shell history at some
point, you should connect first your profile with an other frontend (Primitivus for
instance). This will be fixed in a future version of jp.
.. _pubsub_common:
pubsub
======
pubsub arguments are used in many commands, they allow you to select a service, node and
items. Depending on the command, you may only not be able to select an item, or you may
select one or multiple items.
The common arguments for pubsub are:
``-u PUBSUB_URL, --pubsub-url PUBSUB_URL``
retrieve pubsub information from an URL. You can use either and ``xmpp:`` scheme or an
``https:`` (or ``http:``) scheme. In the later case, the HTML page will be downloaded to
retrieve the location of the XMPP node/item, if available.
Note that you can override parts of the location in the URL if you specify service, node
or item.
e.g.::
$ jp blog get -u https://www.goffi.org
``-s SERVICE, --service``
used to specifiy the JID of the pubsub service
``-n NODE, --node NODE``
used to specifiy the pubsub node
``-i ITEM, --item ITEM``
for commands where an item can be specified, you do it with this option. In some
commands, multiple items can be specified, in this case just use this arguments several
times.
``-L, --last-item``
when an item id is needed, you can use this option to retrieve the last published item.
e.g.::
$ jp blog edit --last-item
``-M, --max-items``
use to specify a maxium number of items to retrieve, when it makes sense.
Note that this is using the pubsub max (i.e. defined in
`XEP-0060 <https://xmpp.org/extensions/xep-0060.html>`_). Modern pubsub services should
implement `Result Set Management <https://xmpp.org/extensions/xep-0059.html>`_ (RSM) and in
this case the ``-m, --max`` argument should be prefered. See below for RSM common
arguments.
result set management
=====================
Result Set Management (RSM) common arguments are used to navigate into pages of results
when lot of elements may be expected. Given a result with a large number of arguments, a
*page* is set of elements which correspond to an *index* (a page number). For instance if
you have 123 elements, you can ask them 10 by 10, and *index 1* match elements from 11 to
20 included.
``-a ITEM_ID, --after ITEM_ID``
find page after this item. You usually use the last item id of the latest page you got.
``-b ITEM_ID, --before ITEM_ID``
find page before this item. This this usually used when you check items backwards
``--index RSM_INDEX``
index of the page to retrieve. Note that first page has index **0**.
``-m RSM_MAX, --max RSM_MAX``
used to specify a maxium number of items to retrieve per page. Note that the actual
maximum number of items per page used may be lower if the service used consider that
your request is too big.
message archive management
==========================
Message Archive Management (MAM) argument is used by some commands (related to instant message or
pubsub) to filter results.
There is currently only one argument in this group:
``-f FILTER_NAME VALUE, --filter FILTER_NAME VALUE``
specify a MAM filter to use. Depending on the service supporting MAM, some filters can
be used to do things like full text search. The available filters depend on the service
you use, please check documentation of your service.
order-by
========
Order-By argument specify or the returned elements are sorted.
There is currently only one argument in this group:
``-o {creation,modification}, --order-by {creation,modification}``
specify how result is sorted. with ``creation``, first created element is returned
first. There is no notion of *creation* of *modification* in original
`pubsub XEP <https://xmpp.org/extensions/xep-0060.html>`_, as publishing an item with an
existing id will overwrite the older one, creating a new item. With this option, we use
the terms defined in `XEP-0413 <https://xmpp.org/extensions/xep-0413.html>`_, and
*creation* time is the time when the first item has been published, before being
overwritten.
In the case of ``modification``, if an item is overwritten, it reappears on top, this is
the default pubsub sorting order.
progress
========
This single option may be used when a long operation is happening, like a file transfer.
``-P, --progress``
Show progress bar.
verbose
=======
``--verbose, -v``
Add a verbosity level (can be used multiple times). Use to have more concise output by
default when it makes sense.
draft
=====
Common arguments used when an edition is potentially long to do, and a file may be kept
until publication.
``-D, --current``
Used when you have started to edit something (e.g. a blog post), which is not yet
published, and you want to continue your work.
e.g.::
$ jp blog edit -D
``-F DRAFT_PATH, --draft-path DRAFT_PATH``
Used when you have started to edit something and want to continue your work from this
file. In other words, it's similar to ``-D, --current`` except that you specify the file
to use instead of using the last available draft.
output
======
Output is used when you want to get the result of the command in a specific way. It may be
used, for instance, to retrieve the result formatted in JSON so the data can be easily
manipulated by a script, or if you want only a specific element of the result.
``-O {…}, --output {…}``
specifiy the output to use. Available options depends of the command you are using,
check ``jp [your command] --help`` to know them.
e.g.::
$ jp blog get -O json
``--output-option OUTPUT_OPTS, --oo OUTPUT_OPTS``
depending of the output selected, you may have options to customise the output.
For instance, if you use the ``template`` output, you may use an option to display the
result in a browser.
e.g.::
$ jp blog
Some options expect parameters, in this case they can be specified using ``=``.
e.g. specifiying a template to use::
$ jp blog get -O template --oo browser --oo template=/tmp/my_template.html

87
doc/jp/index.rst Normal file
View file

@ -0,0 +1,87 @@
==
jp
==
``jp`` is the CLI (Command Line Interface) frontend of Salut à Toi
Overview
========
``jp`` is a powerful tool to work with Salut à Toi/XMPP.
With it you can send chat messages, share files, retrieve avatars, write blog entries, etc.
Usage
=====
To get help on commands or their options, use::
$ jp --help
which can be used on any command, so if you need help on ``message send`` command, just do::
$ jp message send --help
With jp, you always enter commands first, then options and arguments.
There are several levels of commands: first one is the main categorie (``message``,
``blog``, ``avatar``, etc.), then there are often subcommands (e.g. ``message send``).
After the commands come the options. For instance if you want to send a message, you can
get the available options with ``--help`` as explained above::
$ jp message send --help
usage: jp message send [-h] [-p PROFILE] [--pwd PASSWORD] [-c] [-l LANG] [-s]
[-n] [-S SUBJECT] [-L SUBJECT_LANG]
[-t {chat,error,groupchat,headline,normal,auto}]
[-e ALGORITHM] [--encrypt-noreplace] [-x | -r]
jid
positional arguments:
jid the destination jid
optional arguments:
-h, --help show this help message and exit
-p PROFILE, --profile PROFILE
Use PROFILE profile key (default: @DEFAULT@)
--pwd PASSWORD Password used to connect profile, if necessary
-c, --connect Connect the profile before doing anything else
-l LANG, --lang LANG language of the message
-s, --separate separate xmpp messages: send one message per line
instead of one message alone.
-n, --new-line add a new line at the beginning of the input (usefull
for ascii art ;))
-S SUBJECT, --subject SUBJECT
subject of the message
-L SUBJECT_LANG, --subject_lang SUBJECT_LANG
language of subject
-t {chat,error,groupchat,headline,normal,auto}, --type {chat,error,groupchat,headline,normal,auto}
type of the message
-e ALGORITHM, --encrypt ALGORITHM
encrypt message using given algorithm
--encrypt-noreplace don't replace encryption algorithm if an other one is
already used
-x, --xhtml XHTML body
If you want to send a message to, say, ``pierre@example.net``, and encrypt it with OMEMO,
just do the following::
echo "hi, I'm writing with jp" | jp message send -e omemo pierre@example.net
(note that with OMEMO, you need to have previously validated fingerprint of your contact
for this to work).
The different commands are explained in dedicated sections.
.. toctree::
:caption: jp commands:
:glob:
:maxdepth: 2
common_arguments
*
Tutorial
========
You can check this third party tutorial: https://blog.agayon.be/sat_jp.html

57
doc/jp/message.rst Normal file
View file

@ -0,0 +1,57 @@
.. highlight:: sh
================================
message: chat message management
================================
Message commands let you send chat messages or manage your server message archives.
send
====
send a message to a contact or a chat room.
``stdin`` is used as message source.
You can encrypt your message using ``--encrypt [ALGORITHM]`` argument, this will create an encrypted session and replace existing one if needed.
You can manage your encrypted session using ``encryption`` command.
examples
--------
Send a message to a contact::
$ echo 'Salut à Toi!' | jp message send louise@example.net
Send a message encrypted with OMEMO::
$ echo 'pssst, this message is encrypted' | jp message send -o omemo louise@example.net
.. note::
Fingerprints of your destinee must have been accepted before using OMEMO, else message can't be encrypted
Send a ``normal`` message marked as French with a subject::
$ echo 'Bonjour, je vous écris avec « Salut à Toi »' | jp message send -l fr -t normal -S 'Ceci est un message de test'
mam
===
query archives using MAM.
This command allows you to check message archive kept on the server (i.e. not the local copy).
You usually want to specify a starting point, and a number of message to retrieve. If too many messages
are available, you'll have to use RSM commands to navigate through the results.
examples
--------
Retrieve messages from last 2 days::
$ jp message mam -S "2 days ago"
Retrieve messages from last 5 hours on SàT official chat room::
$ jp message mam -S "2 hours ago" -s sat@chat.jabberfr.org
Retrieve 2 first messages of 2019 on SàT official chat room::
$ jp message mam -S 2019-01-01 -s sat@chat.jabberfr.org -m 2

35
doc/make.bat Normal file
View file

@ -0,0 +1,35 @@
@ECHO OFF
pushd %~dp0
REM Command file for Sphinx documentation
if "%SPHINXBUILD%" == "" (
set SPHINXBUILD=sphinx-build
)
set SOURCEDIR=.
set BUILDDIR=.build
if "%1" == "" goto help
%SPHINXBUILD% >NUL 2>NUL
if errorlevel 9009 (
echo.
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
echo.installed, then set the SPHINXBUILD environment variable to point
echo.to the full path of the 'sphinx-build' executable. Alternatively you
echo.may add the Sphinx directory to PATH.
echo.
echo.If you don't have Sphinx installed, grab it from
echo.http://sphinx-doc.org/
exit /b 1
)
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
goto end
:help
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
:end
popd