|
|
|
#+TITLE: weechat-xmpp
|
|
|
|
#+AUTHOR: Tony Olagbaiye
|
|
|
|
#+EMAIL: frony0@gmail.com
|
|
|
|
#+DATE: 2018-05-09
|
|
|
|
#+DESCRIPTION: Weechat plugin for XMPP
|
|
|
|
#+KEYWORDS: weechat xmpp c api
|
|
|
|
#+LANGUAGE: en
|
|
|
|
#+OPTIONS: H:3 num:nil toc:nil \n:nil @:t ::t |:t ^:t -:t f:t *:t <:t
|
|
|
|
#+OPTIONS: TeX:t LaTeX:nil skip:nil d:nil todo:t pri:t tags:not-in-toc
|
|
|
|
#+EXPORT_EXCLUDE_TAGS: exclude
|
|
|
|
#+STARTUP: showall
|
|
|
|
|
|
|
|
[[https://travis-ci.org/bqv/weechat-xmpp][file:https://api.travis-ci.org/bqv/weechat-xmpp.svg?branch=master]]
|
|
|
|
[[https://coveralls.io/github/bqv/weechat-xmpp?branch=master][file:https://coveralls.io/repos/github/bqv/weechat-xmpp/badge.svg?branch=master]]
|
|
|
|
[[https://github.com/bqv/weechat-xmpp/issues][file:https://img.shields.io/github/issues/bqv/weechat-xmpp.svg]]
|
|
|
|
[[https://github.com/bqv/weechat-xmpp/issues?q=is:issue+is:closed][file:https://img.shields.io/github/issues-closed/bqv/weechat-xmpp.svg]]
|
|
|
|
[[https://github.com/bqv/weechat-xmpp/blob/master/LICENSE][file:https://img.shields.io/github/license/bqv/weechat-xmpp.svg]]
|
|
|
|
[[https://github.com/bqv/weechat-extras/][file:https://img.shields.io/badge/weechat--extras-xmpp-blue.svg]]
|
|
|
|
[[https://inverse.chat/#converse/room?jid=weechat@muc.xa0.uk][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
|
|
|
|
|
|
|
|
1. Start with =/account add=, use =/help account= for instructions.
|
|
|
|
|
|
|
|
2. 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
|
|
|
|
|
|
|
|
#+begin_src sh
|
|
|
|
git clone git://github.com/bqv/weechat-xmpp.git
|
|
|
|
cd weechat-xmpp
|
|
|
|
git submodule update --init --recursive
|
|
|
|
make
|
|
|
|
make install
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
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)
|
|
|
|
* [X] Connecting
|
|
|
|
* [X] Pretty-printing stanzas
|
|
|
|
* [X] Receiveing and formatting PMs to a dedicated buffer
|
|
|
|
* [X] Responding to PMs and formatting responses
|
|
|
|
* [X] Opening PMs (/chat)
|
|
|
|
** TODO [#A] Implement essential functionality (milestone v0.2)
|
|
|
|
* [X] Opening PMs with initial message
|
|
|
|
* [-] OOB messages
|
|
|
|
* [X] Single media on a line
|
|
|
|
* [ ] Multiple media inline (protocol?)
|
|
|
|
* [ ] [#D] Encrypted (pgp/omemo)
|
|
|
|
* [X] Buffer autoswitch on enter/open
|
|
|
|
* [X] Handle open/enter jids with a resource without breaking
|
|
|
|
* [X] Allow /close without crashing
|
|
|
|
* [ ] [#B] Handle wide errors gracefully
|
|
|
|
* [ ] [#B] Event-driven MUC entrance
|
|
|
|
* [ ] [#C] XMPP Ping (xep-199)
|
|
|
|
* [X] [#A] Highlight
|
|
|
|
* [-] MUCs
|
|
|
|
* [X] Opening (/enter)
|
|
|
|
* [ ] [#B] Leave on /close
|
|
|
|
* [X] Receiving
|
|
|
|
* [X] Sending
|
|
|
|
* [X] With /msg
|
|
|
|
* [-] [#B] Edits
|
|
|
|
* [X] [#B] Displaying
|
|
|
|
* [X] [#B] Tagging
|
|
|
|
* [ ] [#B] Making (/edit)
|
|
|
|
* [X] [#C] Diff highlighting
|
|
|
|
* [ ] [#B] Handle errors gracefully
|
|
|
|
* [X] [#B] Presence/nicklist
|
|
|
|
* [X] [#B] Enters
|
|
|
|
* [X] [#B] Leaves
|
|
|
|
* [X] [#B] Tracking
|
|
|
|
* [X] [#B] Set/show topic
|
|
|
|
* [X] OMEMO (libomemo-c)
|
|
|
|
* [X] Presence
|
|
|
|
* [X] Disco
|
|
|
|
* [X] Disco response
|
|
|
|
* [X] Key Generation / storage (lmdb)
|
|
|
|
* [X] Generation
|
|
|
|
* [X] Storage
|
|
|
|
* [X] Announce
|
|
|
|
* [X] Device ID
|
|
|
|
* [X] Bundles
|
|
|
|
* [X] Messages
|
|
|
|
* [X] [#C] MUC PMs
|
|
|
|
* [X] [#A] Send typing notifications
|
|
|
|
* [X] [#A] Recv typing notifications
|
|
|
|
* [X] [#C] Read receipts
|
|
|
|
* [X] Chat Markers (XEP-0333)
|
|
|
|
* [X] Composing
|
|
|
|
* [X] Paused
|
|
|
|
* [?] Active
|
|
|
|
* [ ] Inactive
|
|
|
|
* [ ] Gone
|
|
|
|
* [X] Message Delivery (XEP-0184)
|
|
|
|
* [X] Message Carbons
|
|
|
|
* [ ] Service Disco
|
|
|
|
* [ ] /disco [domain]
|
|
|
|
* [ ] /whois [user|muc]
|
|
|
|
* [ ] User Avatars
|
|
|
|
* [ ] MUC Icons
|
|
|
|
* [X] MAM Fetching
|
|
|
|
* [-] Bookmarks / Roster
|
|
|
|
* [X] Autojoin bookmarks
|
|
|
|
* [ ] Except biboumi rooms
|
|
|
|
* [ ] Add bookmarks
|
|
|
|
* [ ] Delete bookmarks
|
|
|
|
* [ ] Roster
|
|
|
|
* [ ] OTR (libotr)
|
|
|
|
* [X] PGP (gpgme)
|
|
|
|
* [X] Use keyrings (from gnupg)
|
|
|
|
* [X] Presence
|
|
|
|
* [X] Decryption
|
|
|
|
* [X] Encryption
|
|
|
|
* [X] 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" -- [[github.com/janicez][Ellenor et al Bjornsdottir]]
|
|
|
|
|
|
|
|
* License
|
|
|
|
|
|
|
|
weechat-xmpp is licensed under the Mozilla Public
|
|
|
|
License Version 2.0 available [[https://www.mozilla.org/en-US/MPL/2.0/][here]] and in LICENSE.
|