deps | ||
tests | ||
xmpp | ||
.dir-locals.el | ||
.envrc | ||
.gitattributes | ||
.gitignore | ||
.gitmodules | ||
.travis.yml | ||
account.cpp | ||
account.hh | ||
buffer.cpp | ||
buffer.hh | ||
channel.cpp | ||
channel.hh | ||
command.cpp | ||
command.hh | ||
completion.cpp | ||
completion.hh | ||
config.cpp | ||
config.hh | ||
connection.cpp | ||
connection.hh | ||
gcrypt.hh | ||
input.cpp | ||
input.hh | ||
LICENSE | ||
makefile | ||
message.cpp | ||
message.hh | ||
NOTES.md | ||
omemo.cpp | ||
omemo.hh | ||
pgp.cpp | ||
pgp.hh | ||
plugin.cpp | ||
plugin.hh | ||
README.org | ||
signal.hh | ||
user.cpp | ||
user.hh | ||
util.cpp | ||
util.hh |
weechat-xmpp
file:https://api.travis-ci.org/bqv/weechat-xmpp.svg?branch=master file:https://coveralls.io/repos/github/bqv/weechat-xmpp/badge.svg?branch=master file:https://img.shields.io/badge/xmpp-weechat%40muc.xa0.uk-yellow
Status: | XMPP for power users and digital masochists |
Location: | http://github.com/bqv/weechat-xmpp |
Version: | 0.2.0 |
Disclaimer: | I'm lazy and unashamedly clinically insane |
Description
A weechat plugin in C to extend the chat client to support XMPP and a currently minimal but ideally maximal set of XEPs. My priority here is to have an android-available XMPP client that hides as little as possible from the user. To use this with android, set up a relay (`/relay`) and see weechat-android. I might rewrite this in C++ at some point when I feel like I can do it without burning out.
Usage
- Start with
/account add
, use/help account
for instructions. - Use
/account connect <account-name>
with the name set at add-time.
Installing
Place xmpp.so in the appropriate place for weechat plugins.
Dependencies
- libstrophe (dynamic, dependency)
- libxml2 (dynamic, dependency)
- lmdb (dynamic, dependency)
- libomemo-c (libsignal-protocol-c) (dynamic, dependency)
- gpgme (dynamic, dependency)
- weechat (>= v3.0)
.. or just use the guix spec in .envrc
Building
git clone git://github.com/bqv/weechat-xmpp.git
cd weechat-xmpp
git submodule update --init --recursive
make
make install
Do NOT run make install as root, it installs the plugin to your local weechat plugins directory
Development
I use emacs for development of this, although I am also a fan of vim.
My debug build process involves static analysis with clang and cppcheck,
and dynamic analysis with address-sanitizer and leak-sanitizer.
My debug evaluation process involves gdb/mi run with the arguments
-ex "handle SIGPIPE nostop noprint pass" --args weechat -a 2>asan.log
since part of weechat and it's default plugins use SIGPIPE as control.
I have no real requests for style of pull requests besides a wish that you keep vaguely to the indentation style I use for this project.
Happy coding!
Tasks
DONE [A] Implement basic functionality (milestone v0.1)
- Connecting
- Pretty-printing stanzas
- Receiveing and formatting PMs to a dedicated buffer
- Responding to PMs and formatting responses
- Opening PMs (/chat)
TODO [A] Implement essential functionality (milestone v0.2)
- Opening PMs with initial message
-
OOB messages
- Single media on a line
- Multiple media inline (protocol?)
- [#D] Encrypted (pgp/omemo)
- Buffer autoswitch on enter/open
- Handle open/enter jids with a resource without breaking
- Allow /close without crashing
-
[#B] Handle wide errors gracefully
- [#B] Event-driven MUC entrance
- [#C] XMPP Ping (xep-199)
- [#A] Highlight
-
MUCs
- Opening (/enter)
- [#B] Leave on /close
- Receiving
-
Sending
- With /msg
-
[#B] Edits
- [#B] Displaying
- [#B] Tagging
- [#B] Making (/edit)
- [#C] Diff highlighting
- [#B] Handle errors gracefully
-
[#B] Presence/nicklist
- [#B] Enters
- [#B] Leaves
- [#B] Tracking
- [#B] Set/show topic
-
OMEMO (libomemo-c)
-
Presence
- Disco
- Disco response
-
Key Generation / storage (lmdb)
- Generation
- Storage
-
Announce
- Device ID
- Bundles
- Messages
-
- [#C] MUC PMs
- [#A] Send typing notifications
- [#A] Recv typing notifications
-
[#C] Read receipts
-
Chat Markers (XEP-0333)
- Composing
- Paused
- [?] Active
- Inactive
- Gone
- Message Delivery (XEP-0184)
-
- Message Carbons
-
Service Disco
- /disco [domain]
-
/whois [user|muc]
- User Avatars
- MUC Icons
- MAM Fetching
-
Bookmarks / Roster
-
Autojoin bookmarks
- Except biboumi rooms
- Add bookmarks
- Delete bookmarks
- Roster
-
- OTR (libotr)
-
PGP (gpgme)
- Use keyrings (from gnupg)
- Presence
- Decryption
- Encryption
- Custom set/clear key (/pgp)
- Save pgp key set per jid/muc
- Room Explorer (https://search.jabber.network/docs/api)
TODO [C] Adhere to CCS (milestone v0.3)
TODO [#D] Close all issues (milestone v1.0)
Contributing
Your contributions are always welcome! Please submit a pull request or create an issue to add a new or missing feature.
Testimonials
"Weechat-Strophe - for the discerning dual IRCer XMPPer" – Ellenor et al Bjornsdottir
License
weechat-xmpp is licensed under the Mozilla Public License Version 2.0 available here and in LICENSE.