To start Profanity, run the following at the command line:
+
$ profanity
+
To see options available to the command:
+
$ profanity -h
+
+
+
+
User Interface
+
+
+
The user interface is split into four main areas:
+
+
Title bar
+
+
Shows the title for the current window (usually the contact you are chatting with, or the chat room you
+ have joined), and your current presence.
+
+
Main window area
+
+
Used to show the current active window. The first window (1) is reserved for the 'console' where system
+ messages and command responses are shown.
+
+
Status bar
+
+
Shows the time, the user you are logged in as, and status of each window. If a window is used, its number
+ will appear, if it has new messages of any kind, the number will be highlighted. The current window is
+ shown as -1-.
+
+
Input area
+
+
Where commands and messages are entered. Commands and command arguments can be autocompleted with the tab
+ key.
+
All commands start with a / character e.g.:
+
/help
+
+
+
+
Window navigation
+
+
To make a window visible in the main window area, use any of the following:
+
+ Alt-1 to Alt-0
+ F1 to F10
+ Alt-left, Alt-right
+
+
The /win command may also be used. Either the
+ window number may be passed, or the window title:
To subscribe to a contacts presence (to be notified when they are online/offline etc):
+
/sub request newfriend@server.chat.com
+
+
To approve a contact's request to subscribe to your presence:
+
/sub allow newfriend@server.chat.com
+
+
See the /roster and /sub commands for more detail.
+
+
+
+
Changing your presence
+
+
To change your presence, use the following commands:
+
/status set away
+/status set xa
+/status set chat
+/status set online
+/status set dnd
+
Each of these commands accepts a message as a parameter, so to show the message "I'm very busy" to your
+ contacts when setting status to Do Not Disturb:
+
/status set dnd I'm very busy
+
+
+
+
Logging out
+
+
To log out from the current chat service:
+
/disconnect
+
To quit profanity:
+
/quit
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/0170/build.html b/guide/0170/build.html
new file mode 100644
index 0000000..baa675f
--- /dev/null
+++ b/guide/0170/build.html
@@ -0,0 +1,219 @@
+
+
+
+
+ Profanity, a console based XMPP client - Manual Building
+
+
+
+
+
+
+
+
+
+
+
+
Profanity uses the Autotools for its build system. The Autotools consist of Autoconf and Automake. This
+ page doesn't go in any detail about the Autotools, but describes the commands needed to build Profanity,
+ and brief descriptions of the various stages. You will also need autoconf-archive.
+
+
You can either download the archive from the homepage or use git, a version control system, to get the
+ latest code.
+
If you want to get the latest version from git you'll have to do:
libnotify # Desktop notification support
+libxss # Desktop idle time autoaway support
+libotr # OTR support
+libgpgme # PGP support
+libsignal-protocol-c # OMEMO support
+libgcrypt # OMEMO support (>= 1.7)
+gtk2 or gtk3 # Desktop tray icon support
+python # Python plugin support
+cmocka # To run tests
+shared-mime-info # Send files with the correct mime type
+gdk-pixbuf2 # Scale the image for `/avatar set`
+qrencode # Display OMEMO QR code
+
+
+
+
Distribution details:
+
+
To make it easier to install all the required packages in various distributions we collect copy pastes
+ here. These are contributed to users and might be out of date. Feel free to create pull request to improve this section.
Some required packages are "keg-only", which means they are not symlinked into /usr/local, therefore
+ pkg-config will fail when detecting the libraries and the build will fail. In order to fix this we need
+ to add these packages to the PKG_CONFIG_PATH.
configure.ac – Macro definitions to configure profanity for the target environment (autoconf)
+
Makefile.am – Template Makefile (automake)
+
+
These files are the inputs to generating the actual configure script and Makefile required to configure
+ and compile Profanity.
+
+
Generating a configure script
+
+
To generate the configure script:
+
+
./bootstrap.sh
+
+
This phase only needs to be run when changes have been made to configure.ac, however it does no harm to
+ run it on every build. This phase also generates other files needed to create a config.h header
+ (variables used in the main code), and a Makefile (used for compilation).
+
Why not just write configure yourself, instead of writing configure.ac and generating one with
+ bootstrap.sh? Take a look at the generated configure script and you'll see why, there's a lot of work
+ involved in writing a configure script.
+
The bootstrap.sh file is very simple, it just runs autoreconf --install see autoreconf
+
+
Configuring
+
+
Once the configure script has been generated, run it to configure profanity.
+
+
./configure
+
+
This will result in the following being generated, along with some other files:
+
+
src/config.h
+Makefile
+
+
Compiling
+
The following step will then compile Profanity:
+
+
make
+
+
Once you have run ./bootstrap.sh and ./configure once, if all you are doing is making code changes, then
+ you only need to run make to recompile your changes.
+
To perform a clean build (i.e. remove all compiled files and recompile)
+
+
make clean
+make
+
+
Tests
+
All tests (unit and functional) can be run with:
+
+
make check
+
+
Unit tests alone can be run with:
+
+
make check-unit
+
+
Install
+
+
Once you have compiled profanity with make, the executable will be available in the current directory:
+
+
./profanity
+
+
To install this version on your system, i.e. to be able to run it from anywhere:
+
+
sudo make install
+
+
This step is not really necessary when doing development (i.e. you can always run the version just
+ compiled in the project directory), unless you want to have your development version available to any
+ users on your system.
+
+
+
+
+
+
diff --git a/guide/0170/codeoverview.html b/guide/0170/codeoverview.html
new file mode 100644
index 0000000..05581dd
--- /dev/null
+++ b/guide/0170/codeoverview.html
@@ -0,0 +1,164 @@
+
+
+
+
+ Profanity, a console based XMPP client - Manual Building
+
+
+
+
+
+
+
+
+
+
+
+
The important sequence of events in the main loop are:
+
+
+
- Check if the user entered a line (ui_readline() at src/ui/core.c).
+ - If they did, attempt to process the input (cmd_process_input() at
+ src/command.c).
+ - Check for and handle any incoming XMPP events (jabber_process_events() at
+ src/xmpp/connection.c).
+ - Refresh the UI (ui_update() at src/ui/core.c).
+ - Loop
+
+
+
+
+
+
Modules
+
+
Commands
+
All code related to running user entered commands, for example /who.
Code related to looking up and storing information in configuration files.
+
Location: src/config
+
src/config/account.c - Data structure representing an account.
+ src/config/accounts.c - Access to the accounts config file.
+ src/config/preferences.c - Access to the profrc config file.
+ src/config/theme.c - Access to themes.
+
+
Events
+
Work in progress. The intention is to move all events that could involve a plugin hook into this
+ directory. Currently only a small number of functions have been moved here.
+
Location: src/event
+
src/event/client_events.c - Events initiated by Profanity, e.g. connecting, or sending a
+ message.
+ src/event/server_events.c - Events received from the XMPP server, e.g. an incoming
+ message.
+ src/event/common.c - Common functions used in both client and server events.
+
+
Off The Record Encryption
+
Code to deal with OTR encryption using the libotr library. Hides the different library version API's
+ from the core Profanity code.
+
Location: src/otr
+
+
OpenPGP Encryption
+
Code to handle PGP encryption.
+
Location: src/pgp
+
+
OMEMO Encryption
+
Code to handle OMEMO encryption.
+
Location: src/omemo
+
+
Common Tools
+
Basic utility functions and common code such as autocomplete implementation.
+
Location: src/tools
+
+
User Interface
+
All User Interface code, input handling, window rendering etc.
+
Location: src/ui
+
src/ui/buffer.c - Buffer of all output, used for redrawing the UI on
+ resize.
+ src/ui/console.c - Display functions for the console window.
+ src/ui/core.c - Display functions for most other operations involving the
+ main window area.
+ src/ui/inputwin.c - Functions to handle the input window (where the user
+ types).
+ src/ui/notifier.c - Desktop notification functions.
+ src/ui/occupantswin.c - Functions for rendering the Occupants panel in chat
+ rooms.
+ src/ui/rosterwin.c - Functions for rendering the Roster panel in the
+ console window.
+ src/ui/statusbar.c - Drawing the status bar (above the input line).
+ src/ui/titlebar.c - Drawing the title bar (the top line).
+ src/ui/window.c - Data structures representing different window types and
+ functions to manipulate them.
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/0170/files.html b/guide/0170/files.html
new file mode 100644
index 0000000..77c5597
--- /dev/null
+++ b/guide/0170/files.html
@@ -0,0 +1,118 @@
+
+
+
+
+ Profanity, a console based XMPP client - File Locations
+
+
+
+
+
+
+
+
+
+
+
The environment variables $XDG_CONFIG_HOME and $XDG_DATA_HOME will be used and a directory named profanity will be created in each.
+
As per the specification, if $XDG_CONFIG_HOME is not present or unset, $HOME/.config will be used. If $XDG_DATA_HOME is not present or unset, $HOME/.local/share will be used.
+
For the rest of this document the following names will be used:
+
+
$CONFIG_HOME = $XDG_CONFIG_HOME/profanity
+
$DATA_HOME = $XDG_DATA_HOME/profanity
+
+
+
+
Configuration File
+
+
The main configuration file for profanity is stored at:
+
$CONFIG_HOME/profrc
+
+
+
+
Profanity Log File
+
+
The Profanity log is at:
+
$DATA_HOME/logs/profanity.log
+
+
+
+
Chat Logs Directory
+
+
If chat logging is enabled, chat logs will be stored in the following directory:
+
$DATA_HOME/chatlogs
+
+
A directory exists per account, and within each of these directories is a directory per contact containing dated logs.
+
If chat room logging is also enabled, a rooms directory will also be within the account directory.
+
+
+
+
User Defined Themes Directory
+
+
User defined theme files are stored in the following directory:
+
$CONFIG_HOME/themes
+
+
+
+
Accounts file
+
+
User accounts are stored in the following file:
+
$DATA_HOME/accounts
+
+
+
+
Examples
+
+
Assuming a user called eddie, and default values for $XDG_CONFIG_HOME and $XDG_DATA_HOME are used, the following example shows where files are stored:
Desktop notifications are an optional (disabled by default) dependency since terminal-notifier is not
+ available on all versions of OSX. To attempt to install the formula with desktop notification support:
+
+
brew install profanity --with-terminal-notifier
+
To ensure you have all features supported profanity -v should show the following:
A howto using macports has also been written by louiecaulfield at Github available here.
+
+
+
+
Windows
+
On Windows you can either install Profanity over the Windows Subsystem for Linux or via Cygwin.
+
WSL is the recommended way.
+
+
WSL
+
The Windows Subsystem for Linux is available since Windows 10 only.
+
Please read the documentation provided
+ by Microsoft on what WSL is and how to install it
+
You will have to choose an distribution that you install (Debian, openSUSE, Ubuntu..) and then install
+ Profanity via the distributions package manager. We recommend to choose a distribution that you are
+ already familiar with or one where you can find a lot of documentation and help online (Debian,
+ openSUSE). Another point to consider is which stable version of Profanity is available in the
+ distributions repositories. One way to find this is out is to check Repology.
+
+
Cygwin
+
Install Cygwin by downloading and running its installer:
wget and unzip are required to install Profanity. When running setup.exe,
+ search for and add them when asked to select packages.
+
Note: To make use of OTR and OMEMO support on Cygwin,
+ libotr and libsignal-protocol-c need to be build from source, since they
+ are not part of the Cygwin repository.
+
Download and Install
+
Download the zip archive from the homepage and extract it, then follow the build guide.
+
+
+
+
Android
+
Profanity is included as a Termux package on Android. Install Termux from the Google Play
+ App store.
+ Profanity uses GNU
+ Readline for handling input. GNU Readline comes with many features including customisable key
+ bindings, and Emacs or Vi editing modes.
+
+
+ In addition to checking ~/.inputrc, Profanity will also look in
+ ~/.config/profanity/inputrc for Readline bindings.
+
+
+ For more information on key bindings and customisations available in GNU Readline, see the guide. Taken
+ from the above guide, below is a list of basic bindings that come with GNU Readline by default.
+
+
+ In the following table C-k means Control-k, M-k means Meta-k where the meta
+ key may differ depending on your OS (alt key, windows key, command key etc).
+
+
+
+
C-b
+
Move back one character
+
+
+
C-f
+
Move forward one character
+
+
+
C-d
+
Delete the character underneath the cursor
+
+
+
C-_ or C-x C-u
+
Undo the last editing command
+
+
+
C-a
+
Move to the start of the line.
+
+
+
C-e
+
Move to the end of the line.
+
+
+
M-f
+
Move forward a word, where a word is composed of letters and digits.
+
+
+
M-b
+
Move backward a word.
+
+
+
C-l
+
Clear the screen.
+
+
+
C-k
+
Kill the text from the current cursor position to the end of the line.
+
+
+
M-d
+
Kill from the cursor to the end of the current word, or, if between words, to the end of the
+ next word. Word boundaries are the same as those used by M-f.
+
+
+
M-DEL
+
Kill from the cursor the start of the current word, or, if between words, to the start of the
+ previous word. Word boundaries are the same as those used by M-b.
+
+
+
C-w
+
Kill from the cursor to the previous whitespace. This is different than M-DEL because the word
+ boundaries differ.
+
+
+
C-y
+
Yank the most recently killed text back into the buffer at the cursor.
+
+
+
M-y
+
Rotate the kill-ring, and yank the new top. You can only do this if the prior command is C-y or
+ M-y.
+
+
+
+
+
+
User Interface Navigation
+
+
+ In addition to GNU Readline input key bindings, Profanity has a few more bindings for managing the User
+ Interface.
+
+
+
+
Alt-1..Alt-0, F1..F10
+
Focus window.
+
+
+
Alt-Left
+
Focus previous window.
+
+
+
Alt-Right
+
Focus next window.
+
+
+
Page Up
+
Scroll backwards through main window contents.
+
+
+
Page Down
+
Scroll forwards through main window contents.
+
+
+
Alt-Page Up
+
Scroll backwards through occupants/roster panel.
+
+
+
Alt-Page Down
+
Scroll forwards through occupants/roster panel.
+
+
+
Alt A
+
Select next unread window.
+
+
+
Ctrl+Arrow Down
+
Store current line in history.
+
+
+
+
+
+
Custom Readline functions
+
+ Profanity also makes functions available to readline to allow customising Profanity bindings:
+
+
+
+
prof_win_N
+
Focus window N where N is 1,2,3,4,5,6,7,8,9 or 0
+
+
+
prof_win_prev
+
Focus previous window
+
+
+
prof_win_next
+
Focus next window
+
+
+
prof_win_pageup
+
Page up contents of main window
+
+
+
prof_win_pagedown
+
Page down contents of main window
+
+
+
prof_subwin_pageup
+
Page up contents of sub window (roster or occupants)
+
+
+
prof_subwin_pagedown
+
Page down contents of sub window (roster or occupants)
To be able to use vi-mode bindings in the input bar, put in inputrc:
+
$if profanity
+ set editing-mode vi
+$endif
+
Here are some examples of what you can do with it:
+
$if profanity
+ set editing-mode vi
+ set keymap vi-move
+ # Use Space as a leader-key with " "
+ " q": "i/quit\r"
+ # Use j/k to move up and down in the window.
+ "k": prof_win_pageup
+ "j": prof_win_pagedown
+ set keymap vi-insert
+ # Correct last message quickly:
+ "\C-e": "/correct \t"
+$endif
+
You can find out all the keys you can use using bind -p on bash.
/account
+/account list
+/account show <account>
+/account enable|disable <account>
+/account default set <account>
+/account default off
+/account add <account>
+/account remove <account>
+/account rename <account> <newaccount>
+/account set <account> jid <jid>
+/account set <account> server <server>
+/account set <account> port <port>
+/account set <account> status <presence>
+/account set <account> status last
+/account set <account> <presence> <priority>
+/account set <account> resource <resource>
+/account set <account> password <password>
+/account set <account> eval_password <command>
+/account set <account> muc <service>
+/account set <account> nick <nick>
+/account set <account> otr <policy>
+/account set <account> pgpkeyid <pgpkeyid>
+/account set <account> startscript <script>
+/account set <account> clientid "<name> <version>"
+/account set <account> tls force|allow|trust|direct|disable|legacy
+/account set <account> auth default|legacy
+/account set <account> theme <theme>
+/account set <account> session_alarm <max_sessions>
+/account clear <account> password
+/account clear <account> eval_password
+/account clear <account> server
+/account clear <account> port
+/account clear <account> otr
+/account clear <account> pgpkeyid
+/account clear <account> startscript
+/account clear <account> clientid
+/account clear <account> muc
+/account clear <account> resource
+/account clear <account> session_alarm
+
+
Description
+
Commands for creating and managing accounts. Calling with no arguments will display information for the current account.
+
+
Arguments
+
list
List all accounts.
enable <account>
Enable the account, it will be used for autocompletion.
show <account>
Show details for the specified account.
disable <account>
Disable the account.
default set <account>
Set the default account, used when no argument passed to the /connect command.
default off
Clear the default account setting.
add <account>
Create a new account.
remove <account>
Remove an account.
rename <account> <newaccount>
Rename 'account' to 'newaccount'.
set <account> jid <jid>
Set the Jabber ID for the account, account name will be used if not set.
set <account> server <server>
The chat server, if different to the domainpart of the JID.
set <account> port <port>
The port used for connecting if not the default (5222, or 5223 for SSL).
set <account> status <presence>
The presence status to use on login.
set <account> status last
Use your last status before logging out, when logging in.
set <account> <presence> <priority>
Set the priority (-128..127) to use for the specified presence.
set <account> resource <resource>
The resource to be used for this account, defaults to 'profanity'.
set <account> password <password>
Password for the account, note this is currently stored in plaintext if set.
set <account> eval_password <command>
Shell command evaluated to retrieve password for the account. Can be used to retrieve password from keyring.
set <account> muc <service>
The default MUC chat service to use, defaults to the servers disco info response.
set <account> nick <nick>
The default nickname to use when joining chat rooms.
set <account> otr <policy>
Override global OTR policy for this account, see /otr.
set <account> pgpkeyid <pgpkeyid>
Set the ID of the PGP key for this account, see /pgp.
set <account> startscript <script>
Set the script to execute after connecting.
set <account> clientid "<name> <version>"
Set XMPP client name for discovery according to XEP-0092. For privacy geeks. Recommendation to leave as is.
set <account> tls force
Force TLS connection, and fail if one cannot be established, this is default behaviour.
set <account> tls allow
Use TLS for the connection if it is available.
set <account> tls trust
Force TLS connection and trust server's certificate.
set <account> tls direct
Use direct TLS for the connection. It means TLS handshake is started right after TCP connection is established.
set <account> tls disable
Disable TLS for the connection.
set <account> tls legacy
Alternative keyword for 'direct', which was created when one still thought that 'STARTTLS' is the future.
set <account> auth default
Use default authentication process.
set <account> auth legacy
Allow legacy authentication.
set <account> theme <theme>
Set the UI theme for the account.
set <account> session_alarm <max_sessions>
Alarm about suspicious activity if sessions count exceeds max_sessions.
clear <account> server
Remove the server setting for this account.
clear <account> port
Remove the port setting for this account.
clear <account> password
Remove the password setting for this account.
clear <account> eval_password
Remove the eval_password setting for this account.
clear <account> otr
Remove the OTR policy setting for this account.
clear <account> pgpkeyid
Remove pgpkeyid associated with this account.
clear <account> startscript
Remove startscript associated with this account.
clear <account> clientid
Reset client's name to default.
clear <account> theme
Clear the theme setting for the account, the global theme will be used.
clear <account> resource
Remove the resource setting for this account.
clear <account> muc
Remove the default MUC service setting.
clear <account> session_alarm
Disable the session alarm.
+
Examples
+
/account add me
+/account set me jid ulfhednar@valhalla.edda
+/account set me server talk.chat.com
+/account set me port 5111
+/account set me muc chatservice.mycompany.com
+/account set me nick dennis
+/account set me status dnd
+/account set me dnd -1
+/account set me clientid "Profanity 0.42 (Dev)"
+/account rename me chattyme
+/account clear me pgpkeyid
+
Number of minutes before the away presence is sent, default: 15.
time xa <minutes>
Number of minutes before the xa presence is sent, default: 0 (disabled).
message away <message>
Optional message to send with the away presence, default: off (disabled).
message xa <message>
Optional message to send with the xa presence, default: off (disabled).
message away off
Send no message with away presence.
message xa off
Send no message with xa presence.
check on|off
When enabled, checks for activity and sends online presence, default: on.
+
Examples
+
/autoaway mode away
+/autoaway time away 30
+/autoaway message away Away from computer for a while
+/autoaway time xa 120
+/autoaway message xa Away from computer for a very long time
+/autoaway check off
+
/avatar set <path>
+/avatar disable
+/avatar get <barejid>
+/avatar open <barejid>
+
+
Description
+
Upload an avatar for yourself, disable your avatar, or download a contact's avatar (XEP-0084). If nothing happens after using this command, the user either doesn't have an avatar set or doesn't use XEP-0084 to publish it.
+
+
Arguments
+
set <path>
Set avatar to the image at .
disable
Disable avatar publishing; your avatar will not display to others.
get <barejid>
Download the avatar. barejid is the JID to download avatar from.
open <barejid>
Download avatar and open it with command. See /executable.
+
Examples
+
/avatar set ~/images/avatar.png
+/avatar disable
+/avatar get thor@valhalla.edda
+/avatar open freyja@vanaheimr.edda
+
Switch the terminal bell on or off. The bell will sound when incoming messages are received. If the terminal does not support sounds, it may attempt to flash the screen instead.
+
Manage blocked users (XEP-0191), calling with no arguments shows the current list of blocked users. To blog a certain user in a MUC use the following as jid: room@conference.example.org/spammy-userIt is also possible to block and report (XEP-0377) a user with the report-abuse and report-spam commands. For spam reporting, please include the content of the spam message as evidence for the service operator.
+
+
Arguments
+
add [<jid>]
Block the specified Jabber ID. If in a chat window and no jid is specified, the current recipient will be blocked.
remove <jid>
Remove the specified Jabber ID from the blocked list.
report-abuse <jid> [<message>]
Report a user for abuse with an optional description of the behavior.
report-spam <jid> [<message>]
Report a user for spam, including the actual spam message as evidence.
+
Examples
+
/blocked add hel@helheim.edda
+/blocked report-abuse hel@helheim.edda Harassing me in MUC
+/blocked report-spam spambot@example.com "You won a free prize!"
+/blocked add profanity@rooms.dismail.de/spammy-user
+
Manage bookmarks and join bookmarked rooms. If you are in a chat room and no arguments are supplied to `/bookmark add`, autojoin is set to "on". There is also an autojoin ignore list in case you want to autojoin in many clients but not on Profanity.
+
+
Arguments
+
list [<jid>]
List all bookmarks. Or the details of one.
add [<room>]
Add a bookmark, passing no room will bookmark the current room, setting autojoin to "on".
remove [<room>]
Remove a bookmark, passing no room will remove the bookmark for the current room, if one exists.
update <room>
Update the properties associated with a bookmark.
nick <nick>
Nickname used when joining the chat room.
password <password>
Password if required, may be stored in plaintext on your server.
name <roomname>
Optional name for the bookmark. By default localpart of the JID will be used.
autojoin on|off
Whether to join the room automatically on login.
join <room>
Join room using the properties associated with the bookmark.
invites on|off
Whether or not to bookmark accepted room invites, defaults to 'on'.
ignore add <barejid>
Add a bookmark to the autojoin ignore list.
ignore remove <barejid>
Remove a bookmark from the autojoin ignore list.
+
Examples
+
/bookmark add room@example.com nick YOURNICK
+/bookmark join room@example.com
+/bookmark update room@example.com nick NEWNICK autojoin on
+/bookmark ignore room@example.com
+/bookmark list
+/bookmark list room@example.com
+/bookmark remove room@example.com
+
Enable or disable message carbons. Message carbons ensure that both sides of all conversations are shared with all the user's clients that implement this protocol.
+
Settings for consistent color generation for nicks (XEP-0392). Including corrections for Color Vision Deficiencies. Your terminal needs to support 256 colors.
+
+
Arguments
+
on|off|redgreen|blue
Enable or disable nick colorization for MUC nicks. 'redgreen' is for people with red/green blindness and 'blue' for people with blue blindness.
own on|off
Enable color generation for own nick. If disabled the color from the color from the theme ('me') will get used.
+
Examples
+
/color off
+/color on
+/color blue
+/color own off
+
Login to a chat service. If no account is specified, the default is used if one is configured. A local account is created with the JID as it's name if it doesn't already exist. In case you want to connect to a server via SASL ANONYMOUS (c.f. XEP-0175) you can also do that.
+
+
Arguments
+
<account>
The local account you wish to connect with, or a JID if connecting for the first time.
server <server>
Supply a server if it is different to the domain part of your JID.
port <port>
The port to use if different to the default (5222, or 5223 for SSL).
<server>
Connect to said server in an anonymous way. (Be aware: There aren't many servers that support this.)
tls force
Force TLS connection, and fail if one cannot be established, this is default behaviour.
tls allow
Use TLS for the connection if it is available.
tls trust
Force TLS connection and trust server's certificate.
tls direct
Use direct TLS for the connection. It means TLS handshake is started right after TCP connection is established.
tls disable
Disable TLS for the connection.
tls legacy
Alternative keyword for 'direct', which was created when one still thought that 'STARTTLS' is the future.
auth default
Default authentication process.
auth legacy
Allow legacy authentication.
+
Examples
+
/connect
+/connect odin@valhalla.edda
+/connect odin@valhalla.edda server talk.google.com
+/connect freyr@vanaheimr.edda port 5678
+/connect me@localhost.test.org server 127.0.0.1 tls disable
+/connect me@chatty server chatty.com port 5443
+/connect server.supporting.sasl.anonymous.example
+
Correct and resend the last message (XEP-0308). Use tab completion to get the last sent message. For more information on how to configure corrections, see: /help correction.
+
Spawn external editor to correct and resend the last message (XEP-0308). For more information on how to configure corrections, see: /help correction. Use /executable to set your favourite editor.
+
Settings regarding Last Message Correction (XEP-0308). Corrections will only work in MUC and regular chat windows. MUC PMs won't be allowed. For more information on how to correct messages, see: /help correct.
+
+
Arguments
+
on|off
Enable/Disable support for last message correction.
char
Set character that will prefix corrected messages. Default: '+'.
Find out information about an entities supported services. Calling with no arguments will query the server you are currently connected to. This includes discovering contact addresses for XMPP services (XEP-0157).
+
+
Arguments
+
info [<jid>]
List protocols and features supported by an entity.
items [<jid>]
List items associated with an entity.
+
Examples
+
/disco info
+/disco items myserver.org
+/disco items conference.jabber.org
+/disco info odin@valhalla.edda/laptop
+
Spawn external editor to edit message. After editing the inputline may appear empty. Press enter to send the text anyways. Use /executable to set your favourite editor.
+
Help on using Profanity. Passing no arguments list help areas. For command help, optional arguments are shown using square brackets, arguments representing variables rather than a literal name are surrounded by angle brackets. Arguments that may be one of a number of values are separated by a pipe e.g. val1|val2|val3.
+
+
Arguments
+
<area>
Summary help for commands in a certain area of functionality.
<command>
Full help for a specific command, for example '/help connect'.
search_all <search_terms>
Search commands for returning matches that contain all of the search terms.
search_any <search_terms>
Search commands for returning matches that contain any of the search terms.
Switch chat history on or off, /logging chat will automatically be enabled when this setting is on. When history is enabled, previous messages are shown in chat windows.
+
Show information about a contact, room, or room member. Passing no argument in a chat window will use the current recipient. Passing no argument in a chat room will display information about the room.
+
+
Arguments
+
<contact>
The contact you wish to view information about.
<nick>
When in a chat room, the occupant you wish to view information about.
/invite send <contact> [<message>]
+/invite list
+/invite decline
+
+
Description
+
Manage room invites. Send an invite to a contact for the current chat room. List received invites. Decline them using /invite decline and accept them using /join.
+
+
Arguments
+
send <contact> [<message>]
The contact you wish to invite. And an optional message.
list
Show all rooms that you have been invited to, and not accepted or declined.
decline <room>
Decline a chat room invitation.
+
Examples
+
/invite send gustavo@pollos.tx
+/invite decline profanity@rooms.dismail.de
+/invite list
+
Join a chat room at the conference server. If no room is supplied, a generated name will be used with the format private-chat-[UUID]. If the domain part is not included in the room name, the account preference 'muc.service' will be used. If no nickname is specified the account preference 'muc.nick' will be used which by default is the localpart of your JID. If the room doesn't exist, and the server allows it, a new one will be created. If you join to a room often, you might also want to add a bookmark (see `/help bookmark`), which also allows to set a default nickname. In this case, you should use `/bookmark join`.
+
+
Arguments
+
<room>
The chat room to join.
nick <nick>
Nickname to use in the room.
password <password>
Password if the room requires one.
+
Examples
+
/join
+/join profanity@rooms.dismail.de
+/join profanity@rooms.dismail.de nick mynick
+/join private@conference.jabber.org nick mynick password mypassword
+/join mychannel
+
/lastactivity set on|off
+/lastactivity get [<jid>]
+
+
Description
+
Enable/disable sending last activity, and send last activity requests.
+
+
Arguments
+
on|off
Enable or disable sending of last activity.
<jid>
The JID of the entity to query. Omitting the JID will query your server for its uptime.
+
Examples
+
/lastactivity get
+/lastactivity set off
+/lastactivity get freyja@asgaard.edda
+/lastactivity get freyja@asgaard.edda/laptop
+/lastactivity get someserver.com
+
Rotate log, default on. Does not take effect if you specified a filename yourself when starting Profanity.
maxsize <bytes>
With rotate enabled, specifies the max log size, defaults to 10485760 (10MB).
shared on|off
Share logs between all instances, default: on. When off, the process id will be included in the log filename. Does not take effect if you specified a filename yourself when starting Profanity.
level INFO|DEBUG|WARN|ERROR
Set the log level. Default is INFO. Only works with default log file, not with user provided log file during startup via -f.
Configure chat logging. Switch logging on or off. Chat logging will be enabled if /history is set to on. When disabling this option, /history will also be disabled.
+
Send a one to one chat message, or a private message to a chat room occupant. If the message is omitted, a new chat window will be opened without sending a message. Use quotes if the nickname includes spaces.
+
+
Arguments
+
<contact>
Open chat window with contact, by JID or nickname.
<contact> [<message>]
Send message to contact, by JID or nickname.
<nick>
Open private chat window with chat room occupant.
<nick> [<message>]
Send a private message to a chat room occupant.
+
Examples
+
/msg thor@valhalla.edda Hey, here's a message!
+/msg heimdall@valhalla.edda
+/msg Thor Here is a private message
+/msg "My Friend" Hi, how are you?
+
Configure desktop notifications. To configure presence update messages in the console, chat and chat room windows, see '/help presence'.
+
+
Arguments
+
chat on|off
Notifications for regular chat messages.
chat current on|off
Whether to show regular chat message notifications when the window is focused.
chat text on|off
Show message text in regular message notifications.
room on|off
Notifications for all chat room messages.
room mention on|off
Notifications for chat room messages when your nick is mentioned.
room mention case_sensitive
Set room mention notifications as case sensitive.
room mention case_insensitive
Set room mention notifications as case insensitive.
room mention word_whole
Set room mention notifications only on whole word match, i.e. when nickname is not part of a larger word.
room mention word_part
Set room mention notifications on partial word match, i.e. nickname may be part of a larger word.
room offline on|off
Notifications for chat room messages that were sent while you were offline.
room current on|off
Whether to show all chat room messages notifications when the window is focused.
room text on|off
Show message text in chat room message notifications.
room trigger add <text>
Notify when specified text included in all chat room messages.
room trigger remove <text>
Remove chat room notification trigger.
room trigger list
List all chat room highlight triggers.
room trigger on|off
Enable or disable all chat room notification triggers.
on|off
Override the global message setting for the current chat room.
mention on|off
Override the global 'mention' setting for the current chat room.
trigger on|off
Override the global 'trigger' setting for the current chat room.
reset
Reset to global notification settings for the current chat room.
remind <seconds>
Notification reminder period for unread messages, use 0 to disable.
typing on|off
Notifications when contacts are typing.
typing current on|off
Whether typing notifications are triggered for the current window.
invite on|off
Notifications for chat room invites.
sub on|off
Notifications for subscription requests.
+
Examples
+
/notify chat on
+/notify chat text on
+/notify room mention on
+/notify room offline on
+/notify room trigger add beer
+/notify room trigger on
+/notify room current off
+/notify room text off
+/notify remind 60
+/notify typing on
+/notify invite on
+
OMEMO commands to manage keys, and perform encryption during chat sessions.
+The title bar will show the OMEMO session status:
+[OMEMO][trusted] - All active devices for the contact are trusted.
+[OMEMO][untrusted] - One or more active devices for the contact are untrusted.
+
+
+
Arguments
+
gen
Generate OMEMO cryptographic materials for current account.
start [<contact>]
Start an OMEMO session with contact, or current recipient if omitted.
end
End the current OMEMO session.
log on|off
Enable or disable plaintext logging of OMEMO encrypted messages.
log redact
Log OMEMO encrypted messages, but replace the contents with [redacted].
trust [<contact>] <fp>
Trust a fingerprint for a contact, or current recipient if omitted. If all active devices are trusted, the title bar will show [trusted]. Otherwise, it will show [untrusted].
untrust [<contact>] <fp>
Untrust a fingerprint for a contact, or current recipient if omitted.
fingerprint [<contact>]
Show contact's fingerprints, or current recipient's if omitted.
char <char>
Set the character to be displayed next to OMEMO encrypted messages.
trustmode manual
Set the global OMEMO trust mode to manual, OMEMO keys has to be trusted manually.
trustmode firstusage
Set the global OMEMO trust mode to ToFu, first OMEMO keys trusted automatically.
trustmode blind
Set the global OMEMO trust mode to blind, ALL OMEMO keys trusted automatically.
policy manual
Set the global OMEMO policy to manual, OMEMO sessions must be started manually.
policy automatic
Set the global OMEMO policy to opportunistic, an OMEMO session will be attempted upon starting a conversation.
policy always
Set the global OMEMO policy to always, an error will be displayed if an OMEMO session cannot be initiated upon starting a conversation.
clear_device_list
Clear your own device list on server side. Each client will reannounce itself when connected back.
Off The Record (OTR) commands to manage keys, and perform OTR encryption during chat sessions.
+
+
Arguments
+
libver
Show which version of the libotr library is being used.
gen
Generate your private key.
myfp
Show your fingerprint.
theirfp
Show contacts fingerprint.
start [<contact>]
Start an OTR session with contact, or current recipient if omitted.
end
End the current OTR session.
trust|untrust
Indicate whether or not you trust the contact's fingerprint.
secret <secret>
Verify a contact's identity using a shared secret.
question <question> <answer>
Verify a contact's identity using a question and expected answer.
answer <answer>
Respond to a question answer verification request with your answer.
policy manual
Set the global OTR policy to manual, OTR sessions must be started manually.
policy manual <contact>
Set the OTR policy to manual for a specific contact.
policy opportunistic
Set the global OTR policy to opportunistic, an OTR session will be attempted upon starting a conversation.
policy opportunistic <contact>
Set the OTR policy to opportunistic for a specific contact.
policy always
Set the global OTR policy to always, an error will be displayed if an OTR session cannot be initiated upon starting a conversation.
policy always <contact>
Set the OTR policy to always for a specific contact.
log on|off
Enable or disable plaintext logging of OTR encrypted messages.
log redact
Log OTR encrypted messages, but replace the contents with [redacted].
char <char>
Set the character to be displayed next to OTR encrypted messages.
sendfile on|off
Allow /sendfile to send unencrypted files while in an OTR session.
+
Examples
+
/otr log off
+/otr policy manual
+/otr policy opportunistic odin@valhalla.edda
+/otr gen
+/otr start odin@valhalla.edda
+/otr myfp
+/otr theirfp
+/otr question "What is the name of my rabbit?" fiffi
+/otr end
+/otr char *
+
OpenPGP (OX) commands to manage keys, and perform OpenPGP encryption during chat sessions. Your OpenPGP key needs a user-id with your JID URI (xmpp:local@domain.tld). A key can be generated with "gpg --quick-gen-key xmpp:local@domain.tld future-default default 3y". See man profanity-ox-setup for details on how to set up OX the first time.
+
+
Arguments
+
keys
List all keys known to the system.
contacts
Show contacts with assigned public keys.
start [<contact>]
Start PGP encrypted chat, current contact will be used if not specified.
end
End PGP encrypted chat with the current recipient.
log on|off
Enable or disable plaintext logging of PGP encrypted messages.
log redact
Log PGP encrypted messages, but replace the contents with [redacted].
char <char>
Set the character to be displayed next to PGP encrypted messages.
announce <file>
Announce a public key by pushing it on the XMPP Server
discover <jid>
Discover public keys of a jid. The OpenPGP Key IDs will be displayed
request <jid> <keyid>
Request public key. See /ox discover to to get available key IDs.
+
Examples
+
/ox log off
+/ox start odin@valhalla.edda
+/ox end
+/ox char X
+
Manage plugins. Passing no arguments lists installed plugins and global plugins which are available for local installation. Global directory for Python plugins is /usr/local/share/profanity/plugins and for C Plugins is /usr/local/lib64/profanity/plugins.
+
+
Arguments
+
install [<path or URL>]
Install a plugin, or all plugins found in a directory (recursive), or download and install plugin (plugin name is based on basename). And loads it/them.
update [<path or URL>]
Uninstall and then install the plugin. Plugin name to update is basename.
uninstall [<plugin>]
Uninstall a plugin.
load [<plugin>]
Load a plugin that already exists in the plugin directory, passing no argument loads all found plugins. It will be loaded upon next start too unless unloaded.
unload [<plugin>]
Unload a loaded plugin, passing no argument will unload all plugins.
reload [<plugin>]
Reload a plugin, passing no argument will reload all plugins.
/privacy logging on|redact|off
+/privacy os on|off
+
+
Description
+
Configure privacy settings. Also check the the following settings in /account: clientid to set the client identification name session_alarm to configure an alarm when more clients log in.
+
+
Arguments
+
logging on|redact|off
Switch chat logging. This will also disable logging in the internally used SQL database. Your messages will not be saved anywhere locally. This might have unintended consequences, such as not being able to decrypt OMEMO encrypted messages received later via MAM, and should be used with caution.
os on|off
Choose whether to include the OS name if a user asks for software information (XEP-0092).
/rooms
+/rooms filter <text>
+/rooms service <service>
+/rooms service <service> filter <text>
+/rooms cache on|off|clear
+
+
Description
+
List the chat rooms available at the specified conference service. If no argument is supplied, the account preference 'muc.service' is used, 'conference.' by default. The filter argument only shows rooms that contain the provided text, case insensitive.
+
+
Arguments
+
service <service>
The conference service to query.
filter <text>
The text to filter results by.
cache on|off
Enable or disable caching of rooms list response, enabled by default.
cache clear
Clear the rooms response cache if enabled.
+
Examples
+
/rooms
+/rooms filter development
+/rooms service conference.jabber.org
+/rooms service conference.jabber.org filter "News Room"
+
/roster
+/roster online
+/roster show [offline|resource|presence|status|empty|priority|contacts|rooms]
+/roster hide [offline|resource|presence|status|empty|priority|contacts|rooms]
+/roster by group|presence|none
+/roster count unread|items|off
+/roster count zero on|off
+/roster color on|off
+/roster order name|presence
+/roster unread before|after|off
+/roster room char <char>|none
+/roster room private char <char>|none
+/roster room position first|last
+/roster room by service|none
+/roster room order name|unread
+/roster room unread before|after|off
+/roster room title bookmark|jid|localpart|name
+/roster private room|group|off
+/roster private char <char>|none
+/roster header char <char>|none
+/roster presence indent <indent>
+/roster contact char <char>|none
+/roster contact indent <indent>
+/roster resource char <char>|none
+/roster resource indent <indent>
+/roster resource join on|off
+/roster size <percent>
+/roster wrap on|off
+/roster add <jid> [<nick>]
+/roster remove <contact>
+/roster remove_all contacts
+/roster nick <jid> <nick>
+/roster clearnick <jid>
+/roster group
+/roster group show <group>
+/roster group add <group> <contat>
+/roster group remove <group> <contact>
+
+
Description
+
Manage your roster, and roster display settings. Passing no arguments lists all contacts in your roster.
+
+
Arguments
+
online
Show all online contacts in console.
show
Show the roster panel.
show offline
Show offline contacts in roster panel.
show resource
Show contact's connected resources in roster panel.
show presence
Show contact's presence in roster panel.
show status
Show contact's status message in roster panel.
show empty
Show empty groups in roster panel.
show priority
Show resource priority in roster panel.
show contacts
Show contacts in roster panel.
show rooms
Show chat rooms in roster panel.
hide
Hide the roster panel.
hide offline
Hide offline contacts in roster panel.
hide resource
Hide contact's connected resources in roster panel.
hide presence
Hide contact's presence in roster panel.
hide status
Hide contact's status message in roster panel.
hide empty
Hide empty groups in roster panel.
hide priority
Hide resource priority in roster panel.
hide contacts
Hide contacts in roster panel.
hide rooms
Hide chat rooms in roster panel.
by group
Group contacts in roster panel by roster group.
by presence
Group contacts in roster panel by presence.
by none
No grouping in roster panel.
count unread
Show unread message count with roster headers.
count items
Show item count with roster headers.
count off
Do not show any count with roster headers.
count zero on
Show roster header count when 0.
count zero off
Hide roster header count when 0.
color on
Enable generated color names (XEP-0392)
color off
Disable generated color names (XEP-0392)
order name
Order roster contacts by name only.
order presence
Order roster contacts by presence, and then by name.
unread before
Show unread message count before contact.
unread after
Show unread message count after contact.
unread off
Do not show unread message count for contacts.
room char <char>
Prefix rooms with specified character.
room char none
Remove room character prefix.
room private char <char>
Prefix private room chat with specified character when displayed with room.
room private char none
Remove private room chat character prefix when displayed with room.
room position first
Show rooms first in roster.
room position last
Show rooms last in roster.
room by service
Group rooms by chat service.
room by none
Do not group rooms.
room order name
Order rooms by name.
room order unread
Order rooms by unread messages, and then by name.
room unread before
Show unread message count before room.
room unread after
Show unread message count after room.
room unread off
Do not show unread message count for rooms.
room title bookmark|jid|localpart|name
Display the bookmark name, JID, JID localpart, or room name as the roster title for MUCs.
private room
Show room private chats with the room.
private group
Show room private chats as a separate roster group.
private off
Do not show room private chats.
private char <char>
Prefix private room chats with specified character when displayed in separate group.
private char none
Remove private room chat character prefix.
header char <char>
Prefix roster headers with specified character.
header char none
Remove roster header character prefix.
contact char <char>
Prefix roster contacts with specified character.
contact char none
Remove roster contact character prefix.
contact indent <indent>
Indent contact line by spaces (0 to 10).
resource char <char>
Prefix roster resources with specified character.
resource char none
Remove roster resource character prefix.
resource indent <indent>
Indent resource line by spaces (0 to 10).
resource join on|off
Join resource with previous line when only one available resource.
presence indent <indent>
Indent presence line by spaces (-1 to 10), a value of -1 will show presence on the previous line.
size <percent>
Percentage of the screen taken up by the roster (1-99).
wrap on|off
Enable or disable line wrapping in roster panel.
add <jid> [<nick>]
Add a new item to the roster.
remove <jid>
Removes an item from the roster.
remove_all contacts
Remove all items from roster.
nick <jid> <nick>
Change a contacts nickname.
clearnick <jid>
Removes the current nickname.
group show <group>
List all roster items in a group.
group add <group> <contact>
Add a contact to a group.
group remove <group> <contact>
Remove a contact from a group.
+
Examples
+
/roster
+/roster add odin@valhalla.edda
+/roster add odin@valhalla.edda Allfather
+/roster remove loki@ownserver.org
+/roster nick odin@valhalla.edda "All Father"
+/roster clearnick thor@valhalla.edda
+/roster size 15
+/roster group
+/roster group show friends
+/roster group add friends fenris@ownserver.org
+/roster group add family Brother
+/roster group remove colleagues boss@work.com
+
Slashguard won't accept a slash in the first 4 characters of your input field. It tries to protect you from typing ' /quit' and similar things in chats.
+
Find out a contact, or room members software version information. If in private chat initiated from a chat room, no parameter is required. If the contact's software does not support software version requests, nothing will be displayed.
+
+
Arguments
+
<fulljid>
If in the console or a chat window, the full JID for which you wish to see software information.
<nick>
If in a chat room, nickname for which you wish to see software information.
Set chat window stamp. The format of line in the chat window is: "" where is "me:" for outgoing messages or "username@server/resource" for incoming messages. This command allows to change value.
+
/statusbar show name|number|read
+/statusbar hide name|number|read
+/statusbar maxtabs <value>
+/statusbar tablen <value>
+/statusbar tabmode default|dynamic|actlist
+/statusbar self user|barejid|fulljid|off
+/statusbar chat user|jid
+/statusbar room title bookmark|jid|localpart|name
+/statusbar up
+/statusbar down
+
+
Description
+
Manage statusbar display preferences.
+
+
Arguments
+
maxtabs <value>
Set the maximum number of tabs to display, must be between 0 and 10.
tablen <value>
Set the maximum number of characters to show as the tab name, 0 sets to unlimited.
tabmode default|dynamic|actlist
Set the mode tabs are shown. `dynamic` is a mode that displays tabs conveniently around current tab, thus providing proper pagination. `actlist` setting shows only active tabs. `default` setting always shows tabs in 1 to max_tabs range.
show|hide name
Show or hide names in tabs.
show|hide number
Show or hide numbers in tabs.
show|hide read
Show or hide inactive tabs.
self user|barejid|fulljid
Show account user name, barejid, fulljid as status bar title.
self off
Disable showing self as status bar title.
chat user|jid
Show users name, or fulljid. Change needs a redraw/restart to take effect.
room title bookmark|jid|localpart|name
Display the bookmark name, JID, JID localpart, or room name as the title for MUC tabs.
/time all|console|chat|muc|config|private|xml set <format>
+/time all|console|chat|muc|config|private|xml off
+/time statusbar set <format>
+/time statusbar off
+/time lastactivity set <format>
+/time vcard set <format>
+
+
Description
+
Configure time display preferences. Time formats are strings supported by g_date_time_format. See https://developer.gnome.org/glib/stable/glib-GDateTime.html#g-date-time-format for more details. Setting the format to an unsupported string, will display the string. If the format contains spaces, it must be surrounded with double quotes. It is possible to pass format as 'iso8601' in order to set the time format according to ISO-8601 (only local time, without Time zone designator).
+
+
Arguments
+
console set <format>
Set time format for console window.
console off
Do not show time in console window.
chat set <format>
Set time format for chat windows.
chat off
Do not show time in chat windows.
muc set <format>
Set time format for chat room windows.
muc off
Do not show time in chat room windows.
config set <format>
Set time format for config windows.
config off
Do not show time in config windows.
private set <format>
Set time format for private chat windows.
private off
Do not show time in private chat windows.
xml set <format>
Set time format for XML console window.
xml off
Do not show time in XML console window.
statusbar set <format>
Change time format in statusbar.
statusbar off
Do not show time in status bar.
lastactivity set <format>
Change time format for last activity.
vcard set <format>
Change the time format used to display time/dates in vCard (such as birthdays)
all set <format>
Set time for: console, chat, muc, config, private, and xml windows.
all off
Do not show time for: console, chat, muc, config, private and xml windows.
+
Examples
+
/time console set %H:%M:%S
+/time chat set "%d-%m-%y %H:%M:%S"
+/time xml off
+/time statusbar set %H:%M
+/time lastactivity set "%d-%m-%y %H:%M:%S"
+/time all set "%d-%m-%y %H:%M:%S"
+/time all set iso8601
+
/vcard get [<nick|contact>]
+/vcard photo open <nick|contact> [<index>]
+/vcard photo save <nick|contact> [output <filepath>] [index <index>]
+/vcard set fullname <fullname>
+/vcard set name family <family>
+/vcard set name given <given>
+/vcard set name middle <middle>
+/vcard set name prefix <prefix>
+/vcard set name suffix <suffix>
+/vcard set <index> [<value>]
+/vcard set <index> pobox <value>
+/vcard set <index> extaddr <value>
+/vcard set <index> street <value>
+/vcard set <index> locality <value>
+/vcard set <index> region <value>
+/vcard set <index> pocode <value>
+/vcard set <index> country <value>
+/vcard set <index> type domestic|international
+/vcard set <index> home on|off
+/vcard set <index> work on|off
+/vcard set <index> voice on|off
+/vcard set <index> fax on|off
+/vcard set <index> pager on|off
+/vcard set <index> msg on|off
+/vcard set <index> cell on|off
+/vcard set <index> video on|off
+/vcard set <index> bbs on|off
+/vcard set <index> modem on|off
+/vcard set <index> isdn on|off
+/vcard set <index> pcs on|off
+/vcard set <index> preferred on|off
+/vcard set <index> parcel on|off
+/vcard set <index> postal on|off
+/vcard set <index> internet on|off
+/vcard set <index> x400 on|off
+/vcard add nickname <nickname>
+/vcard add birthday <date>
+/vcard add address
+/vcard add tel <number>
+/vcard add email <userid>
+/vcard add jid <jid>
+/vcard add title <title>
+/vcard add role <role>
+/vcard add note <note>
+/vcard add url <url>
+/vcard remove <index>
+/vcard refresh
+/vcard save
+
+
Description
+
Read your vCard or a user's vCard, get a user's avatar via their vCard, or modify your vCard. If no arguments are given, your vCard will be displayed in a new window, or an existing vCard window.
+
+
Arguments
+
get [<nick|contact>]
Get your vCard, if a nickname/contact is provided, get that user's vCard
photo open <nick|contact> [<index>]
Download a user's photo from their vCard to a file, and open it. If index is not specified, download the first photo (usually avatar) from their vCard
photo save <nick|contact>
Download a user's photo from their vCard to a file. If index is not specified, download the first photo (usually avatar) from their vCard. If output is not specified, download the photo to profanity's photos directory.
photo open-self [<index>]
Download a photo from your vCard to a file, and open it. If index is not specified, download the first photo (usually avatar) from your vCard
photo save-self
Download a photo from your vCard to a file. If index is not specified, download the first photo (usually avatar) from your vCard. If output is not specified, download the photo to profanity's photos directory. Same arguments as `photo open`
set fullname <fullname>
Set your vCard's fullname to the specified value
set name family <family>
Set your vCard's family name to the specified value
set name given <given>
Set your vCard's given name to the specified value
set name middle <middle>
Set your vCard's middle name to the specified value
set name prefix <prefix>
Set your vCard's prefix name to the specified value
set name suffix <suffix>
Set your vCard's suffix name to the specified value
set <index> [<value>]
Set the main field in a element in your vCard to the specified value, or if no value was specified, modify the field in an editor, This only works in elements that have one field.
set <index> pobox <value>
Set the P.O. box in an address element in your vCard to the specified value.
set <index> extaddr <value>
Set the extended address in an address element in your vCard to the specified value.
set <index> street <value>
Set the street in an address element in your vCard to the specified value.
set <index> locality <value>
Set the locality in an address element in your vCard to the specified value.
set <index> region <value>
Set the region in an address element in your vCard to the specified value.
set <index> pocode <value>
Set the P.O. code in an address element in your vCard to the specified value.
set <index> type domestic|international
Set the type in an address element in your vCard to either domestic or international.
set <index> home on|off
Set the home option in an element in your vCard. (address, telephone, e-mail only)
set <index> work on|off
Set the work option in an element in your vCard. (address, telephone, e-mail only)
set <index> voice on|off
Set the voice option in a telephone element in your vCard.
set <index> fax on|off
Set the fax option in a telephone element in your vCard.
set <index> pager on|off
Set the pager option in a telephone element in your vCard.
set <index> msg on|off
Set the message option in a telephone element in your vCard.
set <index> cell on|off
Set the cellphone option in a telephone element in your vCard.
set <index> video on|off
Set the video option in a telephone element in your vCard.
set <index> bbs on|off
Set the BBS option in a telephone element in your vCard.
set <index> modem on|off
Set the modem option in a telephone element in your vCard.
set <index> isdn on|off
Set the ISDN option in a telephone element in your vCard.
set <index> pcs on|off
Set the PCS option in a telephone element in your vCard.
set <index> preferred on|off
Set the preferred option in an element in your vCard. (address, telephone, e-mail only)
set <index> parcel on|off
Set the parcel option in an address element in your vCard.
set <index> postal on|off
Set the postal option in an address element in your vCard.
set <index> internet on|off
Set the internet option in an e-mail address in your vCard.
set <index> x400 on|off
Set the X400 option in an e-mail address in your vCard.
add nickname <nickname>
Add a nickname to your vCard
add birthday <date>
Add a birthday date to your vCard
add address
Add an address to your vCard
add tel <number>
Add a telephone number to your vCard
add email <userid>
Add an e-mail address to your vCard
add jid <jid>
Add a Jabber ID to your vCard
add title <title>
Add a title to your vCard
add role <role>
Add a role to your vCard
add note <note>
Add a note to your vCard
add url <url>
Add a URL to your vCard
remove <index>
Remove a element in your vCard by index
refresh
Refreshes the local copy of the current account's vCard (undoes all your unpublished modifications)
Profanity has OMEMO support since 0.7.0. Regular 1:1 chats should work without problems. We consider OMEMO MUC as experimental. You might encounter problems there. Make sure to check our tracker bug for details. And report anything you find on the issue tracker.
+
Enabling carbons (/carbons on) is recommended in order to enhance OMEMO and overall chat experience.
+
To be able to read on other devices (eg your phone) what you wrote on profanity you need to trust the fingerprints of your other devices manually (/omemo fingerprint ).
+
Filetransfer is OMEMO encrypted since Profanity 0.10.0 via the proto XEP.
+
/omemo fingerprint does autocomplete all fingerprints not just the ones for the JID mentioned.
+
+
+
+
Building with OMEMO support
+
+ OMEMO is an XMPP Extension Protocol (XEP) for secure multi-client end-to-end encryption. It is an open standard based on a Double Ratchet and PEP.
+
+
+ Profanity supports OMEMO only if you build from current git master. Support is planned for the 0.7.0 release.
+
+
+ If you have libsignal-protocol-c installed, support will be included by default. To force the build to fail if support cannot be included, configure with the following:
+
+
./configure --enable-omemo
+
+ Supported libsignal-protocol-c versions are 2.3.1, and 2.3.2.
+
+
+
+
+
Setup
+
+
Generating Crypto Materials
+
+ Before you can start using OMEMO for a particular account, you must generate the cryptographic material. Use the following command:
+
+
/omemo gen
+
+ A message will appear informing you that the key is being generated which may take a few minutes. We use /dev/random for this.
+
+
+ If the generation takes a long time you can try to move the mouse or install an entropy daemon, such as haveged, to increase the available entropy.
+
+
+
+ Once you have generated a key, you will not need to do so again. If you want to check your own fingerprint or see the fingerprints of your other devices type:
+
+
/omemo fingerprint
+
+ Hint: To be able to receive messages from your other devices you need to enable carbons. Also trust your own devices analogous to your buddies fingerprints, as described in the next paragraph.
+
+
/carbons on
+
+
+
+
Fingerprint authentication
+
+ Before you can start talking with a contact you need to authenticate him by trusting his fingerprint(s).
+
+
+ You should exchange fingerprints with your contact's via another secure communication channel. To display your fingerprint, use the following command:
+
+
/omemo fingerprint
+
+
+ To view the fingerprint of a contact use the following command:
+
+
/omemo fingerprint bob
+
+
+ If the fingerprint you see matches the fingerprint you communicated via another means, you can manually authenticate the contact with the following command:
+
+ Once the cryptographic material is present and you trusted your contacts fingerprint(s) you can start a private conversation with another contact that uses an OMEMO capable client
+
+
+ To start a new conversation using OMEMO:
+
+
/omemo start bob@ejabberd.local
+
+ If you are already in a conversation window without OMEMO, you can start sending encrypted messages with the same command omitting the contact:
+
+
/omemo start bob
+
+
+ The [OMEMO] shown in the titlebar indicates that the conversation is now encrypted.
+
+
+
+
+
Setting OMEMO policy
+
+
+ By default, OMEMO sessions must be started manually using the /omemo start command.
+
+
+ The following three settings are available:
+
+
+ manual - The default. Unencrypted messaging is allowed, OMEMO sessions must be started manually.
+
+
+ automatic - If you start an OMEMO session with a contact once via /omemo start it will remember the OMEMO session for this contact. So if you restart Profanity and use /msg bob@ejabberd.local it will OMEMO encrypt the conversation. You can stop this with /omemo stop.
+
+
+ always - OMEMO sessions are always started. Until you use /omemo stop.
+
+
+
+
+
User Interface options
+
+
+ By default, an indicator is displayed in the titlebar when no encryption is being used.
+
+
+
+ This indicator can be removed using the /encwarn command.
+
+
/encwarn off
+
+
+ Both incoming and outgoing plaintext messages are always preceeded by the '-' character.
+
+
+
+ By default OMEMO encrypted messages are preceeded by the '*' character.
+
+
+
+ This character can be changed using the /omemo char command.
+
+
/omemo char O
+
+
+
+
+
OMEMO message logging
+
+ The /omemo log command may be used with the following options to control if and how OMEMO messages are recorded in chat logs.
+
+
+
+
on
+
OMEMO messages will be logged in plaintext
+
+
+
redact
+
OMEMO messages will be logged, but the message will be replaced with the text '[redacted]'.
+
+
+
off
+
OMEMO messages will not be logged.
+
+
+
+ For the on and redact settings, chat logging must also be enabled with the /chlog command.
+
+
+
+
+
+
diff --git a/guide/0170/otr.html b/guide/0170/otr.html
new file mode 100644
index 0000000..93a64d6
--- /dev/null
+++ b/guide/0170/otr.html
@@ -0,0 +1,377 @@
+
+
+
+
+ Profanity, a console based XMPP client - Off The Record (OTR) Encryption
+
+
+
+
+
+
+
+
+
+
+
+
+ Off The Record (OTR) messaging is a form of secure messaging, it includes encryption, authentication
+ between users, deniability and perfect forward secrecy.
+
+
+ An overview and many useful resources can be found at the OTR site.
+
+
+ If you have libotr-dev installed, support will be included by default. To force the build
+ to fail if support cannot be included, configure with the following:
+
+
./configure --enable-otr
+
+ Supported libotr versions are 3.2.x, and 4.0.x.
+
+
+ On most distributions there is simply a libotr-dev package you need to install first.
+
+
+ On Mac OS X, the brew formula will automatically install
+ the dependency and compile with OTR support.
+
+
+ On Cygwin you will need to install the libgcrypt-devel package first. Secondly you will
+ need libotr-devel package which is not currently in the official repositories. You can
+ install it from the Cygwin
+ Ports project.
+
+
+
+
+
Generating a private key
+
+ Before you can start using OTR for a particular account, you must generate a private key. Use the
+ following command:
+
+
/otr gen
+
+ A message will appear informing you that the key is being generated which may take a few minutes.
+
+
+ If the generation takes a long time you can try to move the mouse or install an entropy daemon, such as
+ haveged, to increase the available entropy.
+
+
+
+ Once you have generated a key, you will not need to do so again.
+
+
+
+
+
Starting a private conversation
+
+ Once you have a private key, you may start OTR encrypted sessions with other contacts who have OTR
+ enabled.
+
+
+ To start a new conversation using OTR encryption:
+
+
/otr start bob@ejabberd.local
+
+ If you are already in a conversation window without OTR, you can start sending encrypted messages with
+ the same command omitting the contact:
+
+
/otr start
+
+
+ The [untrusted] shown in the titlebar indicates that although this conversation is
+ encrypted, the contact has not yet been authenticated.
+
+
+
+
+
Authenticating a contact
+
+ The previous conversations were encrypted, however as the recipient noticed, neither user can be certain
+ of the identity of the other.
+
+
+ Authentication is for each OTR key that the contact may have generated. For example if your contact has
+ different OTR keys on different devices, you will need to authenticate each device separately.
+
+
+ Once a particular contact (and client) has been authenticated, this information is saved.
+
+
+ OTR supports three ways to authenticate a contact, question and answer, shared secret, and manual
+ fingerprint verification.
+
+
+
+
Question and answer
+
+ Question and answer verification allows one user to verify the identity of another by asking a question
+ with an expected answer.
+
+
+ Once in an OTR session, a user may ask the recipient a question supplying their expect answer, for
+ example if Alice wishes to authenticate Bob:
+
+
/otr question "What is the name of your best friends rabbit?" fiffi
+
+ A message will be displayed showing that the authentication process has started.
+
+
+
+ If Bob answers correctly a message will be shown indicating that Bob is now trusted by Alice.
+
+
+
+ If Bob answers incorrectly a message will be shown indicating that Bob is not trusted by Alice.
+
+
+
+ Bob may also wish to authenticate Alice. If he does, Alice will receive a message showing Bob's
+ question, and prompting her to answer. Alice may answer using the /otr answer command:
+
+
/otr answer red
+
+
+ Note that question and answer authentication is a way for one contact to verify the identity of another.
+ If the recipient answers correctly then the sender has authenticated them, however the recipient must
+ also authenticate the sender with another question.
+
+
+
+
Shared secret
+
+ Shared secret verification is a way for both parties to authenticate each other at the same time using a
+ shared passphrase that only the two of them know.
+
+
+ In an OTR session, one user may start shared secret authentication with the /otr secret
+ command, supplying the secret, for example Alice initiates the authentication:
+
+
/otr secret 5up3r53cr3t
+
+ Bob enters the same secret using his client, Alice and Bob now trust each other.
+
+
+
+
+ If Bob started the shared secret authentication, Alice will receive a message asking her to enter the
+ secret using the /otr secret command:
+
+
/otr secret 5up3r53cr3t
+
+
+
+
Manual fingerprint authentication
+
+ The above two methods allow you to verify the fingerprint of a contact's OTR key without having to know
+ the fingerprint. The final method is to manually verify the fingerprint.
+
+
+ You should exchange fingerprints with your contact's via another secure communication channel. To
+ display your fingerprint, use the following command:
+
+
/otr myfp
+
+
+ To view the fingerprint of a contact whilst in an OTR session, use the following command:
+
+
/otr theirfp
+
+
+ If the fingerprint you see matches the fingerprint you communicated via another means, you can manually
+ authenticate the contact with the following command:
+
+
/otr trust
+
+ You can untrust a contact at anytime using the following command:
+
+
/otr untrust
+
+
+
+
Setting OTR policy
+
+
+ By default, OTR sessions must be started manually using the /otr start command.
+
+
+ The policy may be set at three levels, global, per account, and per contact with the order of preference
+ being the most specific first:
+
+
+ 1 - Use the policy for the contact, if no setting found:
+ 2 - Use the policy for the account, if no setting found:
+ 3 - Use the global policy
+
+
+ The following three settings are available for each level:
+
+
+ manual - The default. Unencrypted messaging is allowed, OTR sessions must be started
+ manually.
+
+
+ opportunistic - Upon sending an unencrypted message with the /msg
+ command, profanity will attempt to start an OTR session with the contact. The contact's policy must be
+ set to opportunistic or always for the session to start.
+
+
+ always - An error message will be displayed if you try to start a conversation
+ without starting an OTR session and the message will not be sent.
+
+
+
+
Setting global policy
+
+ To set the global policy:
+
+
/otr policy <setting>
+
+ The current global setting can be viewed with the following command:
+
+
/prefs otr
+
+
+
Setting account policy
+
+ To set the policy for a particular account:
+
+
/account set <account_name> otr <setting>
+
+ The account setting can be viewed with the following command:
+
+
/account show <account_name>
+
+
+
Setting contact policy
+
+ To set the policy for a particular contact (you must be logged in):
+
+
/otr policy <setting> <contact>
+
+ Contact policy settings can also be viewed with:
+
+
/account show <account_name>
+
+
+
+
User Interface options
+
+
+ By default, an indicator is displayed in the titlebar when no encryption is being used (including PGP and OMEMO).
+
+
+
+ This indicator can be removed using the /encwarn
+ command.
+
+
/encwarn off
+
+
+ Both incoming and outgoing plaintext messages are always preceeded by the '-' character.
+
+
+
+ By default OTR encrypted messages are preceeded by the '~' character.
+
+
+
+ This character can be changed using the /otr char command.
+
+
/otr char O
+
+
+
+
+
OTR message logging
+
+ The /otr log command may be used with the following options to control if and how OTR
+ messages are recorded in chat logs.
+
+
+
+
+
on
+
+
OTR messages will be logged in plaintext
+
+
+
+
redact
+
+
OTR messages will be logged, but the message will be replaced with the text
+ '[redacted]'.
+
+
+
+
off
+
+
OTR messages will not be logged.
+
+
+
+ For the on and redact settings, chat logging must also be enabled with the /chlog command.
+
+
+
+
+
Importing OTR keys
+
Since profanity uses the libotr library to store keys and trusted fingerprints, files created by another
+ client which uses libotr should also work with profanity.
+
The files need to be placed in the following locations:
On most systems $XDG_DATA_HOME is ~/.local/share.
+ The folder is the account name with _at_ replacing the @ symbol, for example
+ account my.account@server.org will have the above two files stored as:
+ Profanity uses the GPGME library to support PGP encryption. You will need the libgpgme-dev or equivalent installed. If the package is installed PGP support will be included automatically. To force the build to fail if support cannot be included, configure with the following:
+
+
./configure --enable-pgp
+
+
+
+
Assigning a key to your account
+
+
+ To allow contacts to send you PGP encrypted messages you must have a PGP key assigned to your account. To list all available keys on your system, use the command /pgp keys
+
+
+
+ Set the account pgpkeyid property with the /account command.
+
+
/account set alice@ejabberd.local pgpkeyid B4510EE476F2AA6F
+
+
+
+
Assigning keys to contacts
+
+
+ To be able to send PGP encrypted messages to contacts, you must associate a public key with them. The specification states that contacts should sign their presence with their key, if your contacts do this, you need to do nothing else.
+
+
+ If your contacts do not sign their presence, you will need to manually assign a public key using the /pgp setkey command.
+
+
/pgp setkey eddie@ironmaiden.com C4C71F21D0F2EC3D
+
+ To view a list of all currently known public keys, either through received signed presence or set manually.
+
+
/pgp contacts
+
+
+
+
+
Sending PGP encrypted messages
+
+
+ To start a new conversation sending PGP encrypted messages to a contact:
+
+
/pgp start bob@ejabberd.local
+
+ If you are already in a conversation window without PGP, you can start sending encrypted messages with the same command omitting the contact:
+
+
/pgp start
+
+
+
+
+
Receiving PGP encrypted messages
+
+
+ Assuming a public key is associated with the contact, they must also have enabled PGP encryption at their end.
+
+
+
+
+
+
Ending PGP encryption
+
+
+ To stop sending PGP encrypted messages to a contact:
+
+
/pgp end
+
+
+ The contact may also end PGP encryption at their end at any time.
+
+
+
+
+
+
User Interface options
+
+
+ By default, an indicator is displayed in the titlebar when no encryption is being used (including OTR and OMEMO).
+
+
+
+ This indicator can be removed using the /encwarn command.
+
+
/encwarn off
+
+
+ Both incoming and outgoing plaintext messages are always preceded by the '-' character.
+
+
+
+ By default PGP encrypted messages are preceded by the '~' character.
+
+
+
+ This character can be changed using the /pgp char command.
+
+
/pgp char P
+
+
+
+
+
PGP message logging
+
+
The /pgp log command may be used with the following options to control if and how PGP messages are recorded in chat logs.
+
+
+
on
+
PGP messages will be logged in plaintext
+
+
+
redact
+
PGP messages will be logged, but the message will be replaced with the text '[redacted]'.
+
+
+
off
+
PGP messages will not be logged.
+
+
+
For the on and redact settings, chat logging must also be enabled with the /chlog command.
+
+
+
+
+
diff --git a/guide/0170/presence.html b/guide/0170/presence.html
new file mode 100644
index 0000000..9454199
--- /dev/null
+++ b/guide/0170/presence.html
@@ -0,0 +1,137 @@
+
+
+
+ Profanity, a console based XMPP client - Advanced presence, resources and priorities
+
+
+
+
+
+
+
+
+
+
+
Since version 0.2.0, Profanity allows more flexible handling of resource and priority settings.
+
If you only ever connect to a chat service using the same computer (for example, you log on at work on your desktop, and never from anywhere else), you probably need not be concerned with these settings.
+
If you already know about resources and priorities and want to use them in Profanity, you can skip this overview and go straight to the settings section.
+
If you often connect from many devices, and want to ensure that messages are routed to the right place, but don't know how, this brief overview should help before moving on to the settings sections below.
+
+
Resources
+
+
The XMPP protocol allows users to connect from more than one place at a time. For example, I might connect from my laptop, my desktop, my tablet and my phone.
+ Or, unlikely but still possible, from two Jabber clients on my desktop, Profanity and Miranda.
+
Contact's identifiers are called JIDs (Jabber IDentifiers). A JID is of the form:
This is enough to identify a contact. However, when a contact connects to a chat service using a Jabber client, that client is represented as a resource
+
So whilst a contact can be identified as localpart@domainpart (known as a bare jid),
+ their connection using a specific client is identified as localpart@domainpart/resourcepart (known as a full jid).
+
For example, a contact some.friend@chat.server.org logs in using both their laptop and their phone. The software on their laptop uses the resource name laptop and the phone phone.
When we receive a message, it will be from a full jid, i.e. from a specific client the contact is using.
+
You might be unaware of the resource most of the time, most client software uses a default (often the name of the software) which you can find in it's settings.
+
Even if the client software provides no default, the chat service will generate a unique resource name, which is why you might see long numbers appear after a contacts name in your client:
Since a user may be connected using more than one client, the server needs to know where to route messages, therefore resources are given a priority
+
A priority is a number between -128 and 127.
+
The exact rules to determine which resource (laptop or phone, for example) gets a message, vary between server implementations, but most follow something like the following:
+
Find the resource with the highest priority
+Send the message to that resource
+If two resources have the same priority, send to both
+If the only resources available have a negative number, store the message until a resource connects with a priority of 0 or higher
+
If we go back to the example above, adding a priority to each resource:
The message will be delivered to the contact's phone
+
The following sections show how to set the resource name, and priority for Profanity.
+
+
+
+
Setting the resource
+
+
To set the resource for a particular account in Profanity, use the /account command:
+
For example to set the resource for the account work to laptop:
+
/account set work resource laptop
+
To find out what resource name is being used at any time:
+
/account show work
+
Or, if you are logged in:
+
/account
+
Will show the settings for the current account.
+
+
+
+
Setting priority
+
+
To set the priority for an account whilst logged in use the /priority command:
+
/priority 10
+
This will set the priority to 10 for this account. Whether you are online, away, dnd etc, the priority will always be 10.
+
For more flexible priority settings per presence, see the next section.
+
+
+
+
Setting priority per presence
+
+
You may set a different priority for each presence for an account. This is useful, for example, if you want messages to be routed to your phone, when your desktop client becomes away.
+
To set the priority for a particular presence for an account, use the /account command.
+
/account set work away 0
+/account set work online 20
+
Whenever your work account becomes away including autoaway the priority will be set to 0.
+
When the account is online the priority will be 20.
+
To find out the priority associated with each presence for an account at any time:
Chat rooms are created when you join a room that does not yet exist, using the /join command.
+
If the server only supports an older version of the groupchat protocol, no further action is required,
+ and other users may join the room.
+
Servers supporting xep-0045 will
+ create the room, which will be locked until the room has been configured, or the default configuration
+ has been accepted.
+
To accept the default configuration and unlock the room:
+
/room accept
+
To view and edit the room configuration (see the next section for details):
+
/room config
+
To cancel room creation and destroy the room:
+
/room destroy
+
+
+
+
Configuring a room
+
+
At any stage, users with appropriate privileges may configure a room with the following command:
+
/room config
+
A new window will be opened, and the room configuration form displayed. Each field in the form is given a
+ tag (e.g. "field2").
+
+
Form fields can be manipulated using the field tag and the value to set, add or remove depending on the
+ field type. For example:
+
/field1 "New room name"
+/field3 off
+/field5 remove visitor
+/field13 anyone
+/field18 add anotheruser@openfire.local
+
For more information on how to manipulate a specific field, use the /form help command
+ specifying the field tag, e.g.:
+
/form help field12
+
At any time whilst the form is being edited, the latest values can be shown with:
+
/form show
+
To save the changes:
+
/form submit
+
To discard the changes:
+
/form cancel
+
+
+
+
Destroying a room
+
+
If a user has appropriate privileges a room can be destroyed at any time using the following command:
+
/room destroy
+
+
+
+
Kicking occupants
+
+
Users with appropriate privileges may kick occupants from a room:
+
/kick nova
+
An optional reason may be supplied:
+
/kick nova Please do not use foul language.
+
+
+
+
Banning users
+
+
Users with appropriate privileges may ban users permanently from a room, banning is carried out using the
+ users Jabber ID rather than their nickname in the room:
+
/ban molly@chat.org
+
An optional reason may be supplied:
+
/ban molly@chat.org You may not enter this room anymore.
+
+
+
+
Managing occupant roles
+
+
Roles specify an occupant's privileges within a room for the duration of one particular visit to that
+ room. The possible roles, and the privileges associated with them are defined in xep-0045.
+
Roles are set using an occupant's room nickname, the user must have the appropriate privileges to run the
+ following commands.
+
To show occupants of all roles:
+
/role list
+
To show occupants with a specific role:
+
/role list moderator
+/role list participant
+/role list visitor
+
To change an occupant's role, for example to set the occupant with nick bobmould to have
+ role participant:
+
/role set participant bobmould
+
An optional reason may be specified:
+
/role set participant bobmould You may now speak!
+
+
+
+
Managing user affiliations
+
+
Affiliations specify a user's privileges for a room across visits to that room. The possible
+ affiliations, and the privileges associated with them are defined in xep-0045.
+
Affiliations are set using a user's JID, the user must have the appropriate privileges to run the
+ following commands.
+
To show users of all affiliations:
+
/affiliation list
+
To show users with a specific affiliation:
+
/affiliation list owner
+/affiliation list admin
+/affiliation list member
+/affiliation list outcast
+
To change a user's affiliation, for example to set the user with JID bob_mould@chat.org to
+ have affiliation member:
+
/affiliation set member bob_mould@chat.org
+
An optional reason may be specified:
+
/affiliation set member bob_mould@chat.org Because you come here so often.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/0170/rooms.html b/guide/0170/rooms.html
new file mode 100644
index 0000000..272c5fd
--- /dev/null
+++ b/guide/0170/rooms.html
@@ -0,0 +1,141 @@
+
+
+
+
+ Profanity, a console based XMPP client - Chat Rooms
+
+
+
+
+
+
+
+
+
+
+
+
Use the /join command to join a chat room supplying the
+ name of the room:
+
/join room@conference.server.com
+
Your nickname will be the account nick setting which by default is set to the 'localpart' of
+ your Jabber ID. For example if you are logged in as itsme@server.com you will join the room
+ with the nickname itsme.
+
To specify a nickname different to your account setting when joining the room, use the nick
+ option:
+
/join room@conference.server.com nick MrChatty
+
If you omit the domain part of the chat room, the account setting muc will be used
+ which by default is set to conference.<domain>. For example, if you are
+ logged in as kai@mycompany.org, using the following command:
+
/join development
+
is the same as:
+
/join development@conference.mycompany.org
+
To join a room which requires a password, use the password option:
The account settings for default nickname and conference service may be changed for any account
+ using the /account command.
+
+
+
+
Creating a chat room
+
+
If a room is joined which did not previously exist, and the server allows it, the room will be created.
+ More information on creating and configuring chat rooms can be found at Chat
+ Room Configuration and Administration.
+
+
If you are using Google Talk, creating a new room is slightly different. See the FAQ.
+
+
+
+
Changing your nickname
+
+
Use the /nick command whilst in a chat room to change your
+ nickname, for example to change your nickname to bob:
+
/nick bob
+
+
+
+
Inviting contacts to a room
+
+
To invite one of your contacts to the current chat room, use the /invite command with an optional reason for the
+ invite:
+
/invite Bruce
+
or with a reason:
+
/invite Bruce Come and join the chat
+
As with other commands, the name must be double quoted if it contains spaces:
+
/invite "Bruce Dickenson" Join us!
+
+
+
+
Sending messages
+
+
To send a message to the room, enter the message and press enter.
+
To direct a message to a particular recipient in the room, type the start of the recipients nickname and
+ use <tab> to autocomplete the nickname. The nickname will be followed by ": ", after which you may
+ type your message.
+
For example, assuming a participant exists in the room named eddie, type:
+
ed<tab>this message is just for you
+
Which will result in the following:
+
eddie: this message is just for you
+
Autocompletion using <tab> will also complete participants names in the middle of message
+ text, without the ": ".
+
+
+
+
Sending a private message
+
+
To start a private chat session with a room participant use the /msg command supplying the participants nickname:
+
/msg "Some User" Hello there!
+
/msg mike hello there!
+
+
+
+
Leaving a room
+
+
To leave a chat room, use the /leave command, the /close command has the same effect.
+
+
+
+
Bookmarking rooms
+
+
To bookmark chat rooms, including the ability to autojoin the rooms when signing in, see the /bookmark command. The simplest way to bookmark a
+ room (and enable autojoin) is to use the /bookmark command with no arguments in the room
+ you wish to bookmark.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/0170/subscriptions.html b/guide/0170/subscriptions.html
new file mode 100644
index 0000000..d01c732
--- /dev/null
+++ b/guide/0170/subscriptions.html
@@ -0,0 +1,199 @@
+
+
+
+
+ Profanity, a console based XMPP client - Managing Your Contacts
+
+
+
+
+
+
+
+
+
+
+
+
There are two parts to managing contacts, the roster and presence subscriptions.
+
The roster is a list of all of your contacts.
+
To receive updates about a contacts presence, i.e. to see when they are online and their current
+ status, you must be subscribed to that contact.
+
For a contact to receive updates about your presence, you must have approved a subscription request
+ from that contact.
+
Some servers may have already set up your roster and subscriptions for you, for example, many
+ companies integrate with LDAP, and automatically subscribe all users to all other users.
+
The following sections describe roster and subscription management in more detail.
+
+
+
+
Viewing your roster
+
+
To view all contacts in your roster, use the /roster
+ command. The output gives you the following information:
+
+
+
JID and nickname
+
The contacts Jabber ID, and nickname if you have provided one.
+
+
+
Subscription
+
The current subscription status, and whether you have received or sent a request that
+ has not yet been approved or declined.
+
+
+
Groups
+
The list of groups to which the contact belongs, see groups below.
+
+
+
+
The subscription status may be one of:
+
+
+
none
+
You are not subscribed to the contact, and the contact is not subscribed to you.
+
+
+
to
+
You are subscribed to the contact, but they are not subscribed to you.
+
+
+
from
+
You are not subscribed to the contact, but they are subscribed to you.
+
+
+
both
+
You are subscribed to the contact, and they are subscribed to you.
+
+
+
+
+
+
Adding and removing contacts
+
+
To add a contact to the roster, use the /roster command
+ supplying the Jabber ID and optional nickname:
+
/roster add buddy@service.net
+
With optional nickname:
+
/roster add buddy@service.net MyBuddy
+
You can add a contact to the roster and send a subscription request at the same time, by using the /sub command:
+
/sub request buddy@service.net
+
To remove a contact from the roster:
+
/roster remove buddy@service.net
+
Removing a contact from your roster also removes your subscription to their presence, and their
+ subscription to yours.
+
+
+
+
Giving contacts a nickname
+
+
Some servers automatically give your contacts nicknames (when integrating with LDAP for example), which
+ are more human readable than the Jabber ID.
+
Profanity uses nicknames by default in its user interface, and for most commands relating to contacts.
+
+
If the server allows it, you may change, add or remove the nickname for a given contact using the /roster command:
+
/roster nick bob@company.org Bobster
+
To clear a users nickname:
+
/roster clearnick bob@company.org
+
+
+
+
Managing groups
+
+
The roster allows contacts to be added to named groups. Profanity makes use of groups using the /who command to filter the contacts shown.
+
Roster groups are managed with the /group command.
+
To list all the current groups:
+
/group
+
To show the contacts in a particular group:
+
/group show friends
+
To add a contact to a group:
+
/group add friends Buddy
+
Note that there is no command to add a group, adding a contact to a group that doesn't yet exist
+ will create the group.
+
To remove a contact from a group:
+
/group remove friends Buddy
+
+
+
+
Subscribing to a contact
+
+
To request presence information for a contact use the /sub
+ command:
+
/sub request newcontact@server.com
+
The user will be informed that you wish to know of their presence, and will need to approve the request.
+
+
The contact parameter is optional if you are already in a chat window with the user, the request will be
+ sent to that user:
+
/sub request
+
+
+
+
Approving a request
+
+
You can approve subscription requests from contacts using the /sub command:
+
/sub allow newcontact@server.com
+
The contact parameter is optional if you are already in a chat window with the user, the approval will be
+ sent to that user:
+
/sub allow
+
+
+
+
Deny or delete a request
+
+
You can deny subscription requests from contacts using the /sub command:
+
/sub deny newcontact@server.com
+
The contact parameter is optional if you are already in a chat window with the user, the denial will be
+ sent to that user:
+
/sub deny
+
The /sub deny command can also be used to remove a contacts subscription to your presence if
+ you have previously approved it.
+
+
+
+
List pending requests
+
+
To list requests that you have sent that are awaiting approval from the contact, use the following
+ command:
+
/sub sent
+
To list requests that you have received, but not yet approved or denied, use the following command:
+
/sub received
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guide/0170/themes.html b/guide/0170/themes.html
new file mode 100644
index 0000000..21350ca
--- /dev/null
+++ b/guide/0170/themes.html
@@ -0,0 +1,446 @@
+
+
+
+ Profanity, a console based XMPP client - User Interface Themes
+
+
+
+
+
+
+
+
+
+
+
You can see a preview of each theme in the theme gallery.
+
To load a theme:
+
/theme load <theme-file>
+
+
+
+
Creating a Theme
+
+
Themes packaged with Profanity are installed to the system wide package data directory, for example:
+
/usr/local/share/profanity/themes
+
User defined themes may be added to your user's themes directory. If you'd like your theme to be added as a pre-packaged theme, feel free to submit a pull request at Github.
+
+
A theme file contains two sections, [colours] and [ui].
+
The following properties are available in the [colours] section:
+
+
+
Property
+
Description
+
+
+
bkgnd
+
Main window and input window background.
+
+
+
titlebar
+
Title bar background.
+
+
+
statusbar
+
Status bar background.
+
+
+
titlebar.text
+
Title bar text.
+
+
+
titlebar.brackets
+
Title bar brackets.
+
+
+
titlebar.unencrypted
+
Title bar OTR unencrypted indicator.
+
+
+
titlebar.encrypted
+
Title bar OTR encrypted indicator.
+
+
+
titlebar.untrusted
+
Title bar OTR untrusted indicator.
+
+
+
titlebar.trusted
+
Title bar OTR trusted indicator.
+
+
+
titlebar.online
+
Online presence indicators in title bar.
+
+
+
titlebar.offline
+
Offline presence indicators in title bar.
+
+
+
titlebar.away
+
Away presence indicators in title bar.
+
+
+
titlebar.chat
+
Available for chat presence indicators in title bar.
+
+
+
titlebar.dnd
+
Do not disturb presence indicators in title bar.
+
+
+
titlebar.xa
+
Extended away presence indicators in title bar.
+
+
+
statusbar.text
+
Status bar text.
+
+
+
statusbar.time
+
Time displayed in the status bar.
+
+
+
statusbar.brackets
+
Status bar brackets.
+
+
+
statusbar.active
+
Active window indicator in status bar.
+
+
+
statusbar.current
+
Current window indicator in status bar.
+
+
+
statusbar.new
+
New messages window indicator in status bar.
+
+
+
main.text
+
Main window text.
+
+
+
main.text.history
+
All history text.
+
+
+
main.text.me
+
Messages you have sent.
+
+
+
main.text.them
+
Messages you have received.
+
+
+
main.splash
+
Splash logo.
+
+
+
input.text
+
Input window text.
+
+
+
main.time
+
Main window time.
+
+
+
subscribed
+
Subscribed (to, both) in roster.
+
+
+
unsubscribed
+
Unsubscribed (from, none) in roster.
+
+
+
otr.started.trusted
+
OTR trusted message for new OTR sessions.
+
+
+
otr.started.untrusted
+
OTR untrusted message for new OTR sessions.
+
+
+
otr.ended
+
OTR ended message.
+
+
+
otr.trusted
+
OTR trusted message.
+
+
+
otr.untrusted
+
OTR untrusted message.
+
+
+
online
+
Online presence text in main window.
+
+
+
away
+
Away presence text for main window.
+
+
+
chat
+
Available for chat presence text for main window.
+
+
+
dnd
+
Do not disturb presence text for main window.
+
+
+
xa
+
Extended away presence text for main window.
+
+
+
offline
+
Offline presence text for main window.
+
+
+
typing
+
Typing message for main window.
+
+
+
gone
+
Gone message for main window.
+
+
+
error
+
Error messages in main window.
+
+
+
incoming
+
Incoming message text in console.
+
+
+
roominfo
+
Room information text in chat room windows.
+
+
+
roommention
+
Chat room message text when nickname mentioned.
+
+
+
me
+
Colour to display who a message is from, for sent messages.
+
+
+
them
+
Colour to display who a message is from, for received messages.
+
+
+
roster.header
+
Group headers in roster panel.
+
+
+
occupants.header
+
Groups headers in chat room occupants panel.
+
+
+
receipt.sent
+
Message sent with receipt request, not yet received.
+
+
+
untrusted
+
Message received is encrypted with an untrusted key.
To see how the colours will appear in your terminal, run the following command:
+
/theme colours
+
+
The following properties are available in the [ui] section, note that the values specified are what is stored in the theme file, see the help on individual commands for how to set the properties:
Manage blocked users (XEP-0191), calling with no arguments shows the current list of blocked users. To blog a certain user in a MUC use the following as jid: room@conference.example.org/spammy-userIt is also possible to block and report (XEP-0377) a user with the report-abuse and report-spam commands.
+
Manage blocked users (XEP-0191), calling with no arguments shows the current list of blocked users. To blog a certain user in a MUC use the following as jid: room@conference.example.org/spammy-userIt is also possible to block and report (XEP-0377) a user with the report-abuse and report-spam commands. For spam reporting, please include the content of the spam message as evidence for the service operator.
Arguments
-
add [<jid>]
Block the specified Jabber ID. If in a chat window and no jid is specified, the current recipient will be blocked.
remove <jid>
Remove the specified Jabber ID from the blocked list.
report-abuse <jid> [<message>]
Report the jid as abuse with an optional message to the service operator.
report-spam <jid> [<message>]
Report the jid as spam with an optional message to the service operator.
+
add [<jid>]
Block the specified Jabber ID. If in a chat window and no jid is specified, the current recipient will be blocked.
remove <jid>
Remove the specified Jabber ID from the blocked list.
report-abuse <jid> [<message>]
Report a user for abuse with an optional description of the behavior.
report-spam <jid> [<message>]
Report a user for spam, including the actual spam message as evidence.
Examples
/blocked add hel@helheim.edda
-/blocked report-spam hel@helheim.edda Very annoying guy
+/blocked report-abuse hel@helheim.edda Harassing me in MUC
+/blocked report-spam spambot@example.com "You won a free prize!"
/blocked add profanity@rooms.dismail.de/spammy-user
OMEMO commands to manage keys, and perform encryption during chat sessions.
+The title bar will show the OMEMO session status:
+[OMEMO][trusted] - All active devices for the contact are trusted.
+[OMEMO][untrusted] - One or more active devices for the contact are untrusted.
+
Arguments
-
gen
Generate OMEMO cryptographic materials for current account.
start [<contact>]
Start an OMEMO session with contact, or current recipient if omitted.
end
End the current OMEMO session.
log on|off
Enable or disable plaintext logging of OMEMO encrypted messages.
log redact
Log OMEMO encrypted messages, but replace the contents with [redacted].
fingerprint [<contact>]
Show contact's fingerprints, or current recipient's if omitted.
char <char>
Set the character to be displayed next to OMEMO encrypted messages.
trustmode manual
Set the global OMEMO trust mode to manual, OMEMO keys has to be trusted manually.
trustmode firstusage
Set the global OMEMO trust mode to ToFu, first OMEMO keys trusted automatically.
trustmode blind
Set the global OMEMO trust mode to blind, ALL OMEMO keys trusted automatically.
policy manual
Set the global OMEMO policy to manual, OMEMO sessions must be started manually.
policy automatic
Set the global OMEMO policy to opportunistic, an OMEMO session will be attempted upon starting a conversation.
policy always
Set the global OMEMO policy to always, an error will be displayed if an OMEMO session cannot be initiated upon starting a conversation.
clear_device_list
Clear your own device list on server side. Each client will reannounce itself when connected back.
qrcode
Display QR code of your OMEMO fingerprint
+
gen
Generate OMEMO cryptographic materials for current account.
start [<contact>]
Start an OMEMO session with contact, or current recipient if omitted.
end
End the current OMEMO session.
log on|off
Enable or disable plaintext logging of OMEMO encrypted messages.
log redact
Log OMEMO encrypted messages, but replace the contents with [redacted].
trust [<contact>] <fp>
Trust a fingerprint for a contact, or current recipient if omitted. If all active devices are trusted, the title bar will show [trusted]. Otherwise, it will show [untrusted].
untrust [<contact>] <fp>
Untrust a fingerprint for a contact, or current recipient if omitted.
fingerprint [<contact>]
Show contact's fingerprints, or current recipient's if omitted.
char <char>
Set the character to be displayed next to OMEMO encrypted messages.
trustmode manual
Set the global OMEMO trust mode to manual, OMEMO keys has to be trusted manually.
trustmode firstusage
Set the global OMEMO trust mode to ToFu, first OMEMO keys trusted automatically.
trustmode blind
Set the global OMEMO trust mode to blind, ALL OMEMO keys trusted automatically.
policy manual
Set the global OMEMO policy to manual, OMEMO sessions must be started manually.
policy automatic
Set the global OMEMO policy to opportunistic, an OMEMO session will be attempted upon starting a conversation.
policy always
Set the global OMEMO policy to always, an error will be displayed if an OMEMO session cannot be initiated upon starting a conversation.
clear_device_list
Clear your own device list on server side. Each client will reannounce itself when connected back.
qrcode
Display QR code of your OMEMO fingerprint
Examples
/omemo gen
/omemo start odin@valhalla.edda
@@ -1493,7 +1498,7 @@
/stamp
/stamp unset outgoing|incoming
Description
-
Set chat window stamp. The format of line in the chat window is: "" where is "me:" for incoming messages or "username@server/resource" for outgoing messages. This command allows to change value.
+
Set chat window stamp. The format of line in the chat window is: "" where is "me:" for outgoing messages or "username@server/resource" for incoming messages. This command allows to change value.