> The returned data is valid until changes to the hash release those keys. As of the doc of `g_hash_table_get_keys()` [0]. > The returned data is valid until hash_table is modified. As of the doc of `g_hash_table_get_values()` [1]. Use this property and create the lists when modifying the hashtable. The `keys` list is most of the time used sorted, so sort it immediately. In the cases where it was not used sorted, it does not matter. This started off by looking into whether this can be improved. `g_hash_table_foreach()` is discouraged to be used and proposes to use a `GHashTableIter`. Since our lists are not modified very often it does not really make sense, so I decided to keep using lists, but allocating those lists statically instead of per invocation. Instead of using a list, we could maybe use the `GArray` version, but I am not sure whether it wouldn't be even better to replace the `GHashTable` all along to store the `windows` instead. [0] https://docs.gtk.org/glib/type_func.HashTable.get_keys.html [1] https://docs.gtk.org/glib/type_func.HashTable.get_values.html Signed-off-by: Steffen Jaeckel <s@jaeckel.eu>
Profanity
Profanity is a console based XMPP client inspired by Irssi.
If you like Profanity consider becoming a sponsor or donate some money.
See the User Guide for information on installing and using Profanity.
Project
This project is about freedom, privacy and choice. We want to enable people to chat with one another in a safe way. Thus supporting encryption (OTR, PGP, OMEMO, OX) and being decentralized, meaning everyone can run their own server. We believe XMPP is a great proven protocol with an excellent community serving this purpose well.
Feel free to follow us on twitter, join our mailing list and/or MUC.
Installation
Our user guide contains an install section and a section for building from source yourself.
Donations
We would highly appreciate it if you support us via GitHub Sponsors. Especially if you make feature requests or need help using Profanity. Sponsoring enables us to spend time on Profanity.
An alternative way to support us would be to ask for our IBAN or use Bitcoin: bc1qx265eat7hfasqkqmk9qf38delydnrnuvzhzy0x.
Issues backed by a sponsor will be tagged with the sponsored label. Feature requests that we consider out of scope, either because of interest or because of time needed to implement them, will be marked with the unfunded label.
Another way to sponsor us or get an issue solved is to comment on an issue that you are willing to sponsor it.
Tasks from our sponsors will be tackled first.
Thank you! <3
How to contribute
We tried to sum things up on our helpout page. Additionally you can check out our blog where we have articles like: How to get a backtrace and Contributing a Patch via GitHub. For more technical details check out our CONTRIBUTING.md file.
Getting help
To get help, first read our User Guide then check out the FAQ. If you have are having a problem then first search the issue tracker. If you don't find anything there either come to our MUC or create a new issue depending on what your problem is.
Links
Website
URL: https://profanity-im.github.io
Repo: https://github.com/profanity-im/profanity-im.github.io
Blog
URL: https://profanity-im.github.io/blog
Repo: https://github.com/profanity-im/blog
Mailinglist
Mailing List: https://lists.posteo.de/listinfo/profanity
Chatroom
MUC: profanity@rooms.dismail.de
Plugins
Plugins repository: https://github.com/profanity-im/profanity-plugins
