pidgin/nest

Merged in default (pull request #44)

2019-08-23, Gary Kramlich
090788fda3f1
Merged in default (pull request #44)

More Content Migration

Approved-by: Elliott Sales de Andrade
Approved-by: Gary Kramlich
  • +0 -116
    community.md
  • +25 -8
    hugo/content/_index.md
  • +47 -14
    hugo/content/building/2.x.y.md
  • +12 -7
    hugo/content/community/_index.md
  • +10 -5
    hugo/content/contributing/_index.md
  • +19 -7
    hugo/content/contributing/mercurial.md
  • +64 -16
    hugo/content/development/design-guidelines.md
  • +64 -20
    hugo/content/development/faq.md
  • +22 -6
    hugo/content/development/version-control.md
  • +37 -12
    hugo/content/drafts/download.md
  • +81 -33
    hugo/content/drafts/release-process.md
  • +8 -3
    hugo/content/drafts/voice-and-video-API.md
  • +40 -35
    hugo/content/drafts/voice-and-video.md
  • +72 -12
    hugo/content/gsoc/ideas.md
  • +55 -12
    hugo/content/gsoc/instructions.md
  • +4 -1
    hugo/content/help/_index.md
  • +3 -1
    hugo/content/help/contactus.md
  • +0 -12
    hugo/content/help/gadugadu.md
  • +0 -53
    hugo/content/help/irc.md
  • +8 -0
    hugo/content/help/protocols/_index.md
  • +16 -0
    hugo/content/help/protocols/bonjour.md
  • +16 -0
    hugo/content/help/protocols/gadugadu.md
  • +24 -0
    hugo/content/help/protocols/groupwise.md
  • +85 -0
    hugo/content/help/protocols/irc.md
  • +38 -0
    hugo/content/help/protocols/otherprotocols.md
  • +25 -0
    hugo/content/help/protocols/sametime.md
  • +21 -0
    hugo/content/help/protocols/silc.md
  • +241 -0
    hugo/content/help/protocols/xmpp/_index.md
  • +62 -0
    hugo/content/help/protocols/xmpp/supportedxep.md
  • +53 -0
    hugo/content/help/protocols/zephyr.md
  • +0 -14
    hugo/content/help/silc.md
  • +41 -7
    hugo/content/help/windows.md
  • +0 -154
    hugo/content/help/xmpp/_index.md
  • +0 -62
    hugo/content/help/xmpp/supportedxep.md
  • +64 -16
    hugo/content/i18n/tips.md
  • +29 -0
    hugo/content/philosophy/_index.md
  • --- a/community.md Thu Aug 22 05:13:40 2019 +0000
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,116 +0,0 @@
    -# Community
    -
    -## Finding Us
    -
    -Being a communication project we can be found all over the place. Below you can find the specifics.
    -
    -### Where can I find Pidgin-related chat online?
    -
    -There are two primary Pidgin-related chat resources:
    -
    - * `#pidgin` on `irc.freenode.net` **IRC**
    - * `devel@conference.pidgin.im` **XMPP Multi-User Chat**
    -
    -Developers, contributors, and users alike are welcome to join us in either of these fora.
    -
    -### Is there a user mailing list?
    -
    -Yes! For general questions about using Pidgin, problems connecting, etc. please use the [support mailing list](http://pidgin.im/cgi-bin/mailman/listinfo/support).
    -
    -If you're a developer and want to ask about the internals of libpurple, Pidgin, Finch, or GNT, please use the [devel mailing list](http://pidgin.im/cgi-bin/mailman/listinfo/devel).
    -
    -We offer a few other mailing lists, too. See the full list [here](http://pidgin.im/cgi-bin/mailman/listinfo).
    -
    -All mailing lists are run by volunteers. Please be kind.
    -
    -## Community Topics
    -
    -### Can I help?
    -Yes! We especially need small patches for small bugs, and lots of bug triaging. There are a slew of a bug reports in Pidgin's ticket system - you could pick one and try to tackle it and submit a patch. We love patches!
    -
    -Bug triaging is when you look at a bug report and determine whether it is a duplicate of an earlier report, or whether it is user error, or maybe you need to request additional information to be able to reproduce the bug. We don't allow people to modify ticket attributes, but if you leave a *helpful* comment on the ticket with your findings, we will take appropriate action. This is a *significant* help to us, because it allows fewer people to have to focus primarily on maintenance of the ticket system, while other development resources are spent as well as they can be.
    -
    -For more ways to contribute check out the [Contributing Page](contributing.md).
    -
    -### Can I ask you about third-party plugins, patches, etc.?
    -
    -You are more than welcome to ask, but be prepared for the answer to be something like "ask the authors". We simply don't have the time or energy to keep up with all of the third-party projects out there, so we probably can't help you. Common topics that fall into this category are various encryption plugins, GFire, and various Purple Plugin Pack plugins.
    -
    -### Where should I report bugs, feature requests, or patches?
    -[Here](https://developer.pidgin.im/newticket).
    -
    -### Hello?
    -
    -We don't know the answer to this question. Please, stop asking it.
    -
    -## Miscellaneous Questions
    -
    -### Did you guys reverse-engineer the protocols?
    -
    -The core Pidgin, Finch, and libpurple developers did not. Here's some related information:
    -
    - * XMPP (a.k.a. Jabber), SIMPLE, and IRC are published protocols, so we didn't need to reverse-engineer them. (Google Talk is an implementation of XMPP.)
    - * MSN was at one time a published protocol; over time changes have creeped into the protocol and other people have reverse engineered those newer revisions.
    - * OSCAR and Yahoo! are not published, and were reverse engineered by other people.
    - * Sametime is maintained by a developer of the meanwhile library we make use of.
    - * Our SILC plugin was written by one of the protocol's developers.
    - * Novell kindly provided us with the Novell !GroupWise plugin.
    - * QQ was reverse-engineered by other people and later absorbed into libpurple.
    -
    -### Do Pidgin and Finch support secure instant messaging (encrypted IM)?
    -
    -#### Short Answer
    -
    - Yes; use the OTR plugin or the SILC protocol.
    -
    -#### Long Answer
    -
    - These days, almost all chat protocols are encrypted between the client and the server. We'll assume that you're asking about end-to-end encryption: when only the two people having the conversation have access to its unencrypted contents.
    -
    - The SILC protocol is natively encrypted. For other protocols, which do not natively support encryption, neither do we. Simply encrypting the data stream with no verification of the parties involved in the conversation is not secure in any sense of the word. Some other clients offer options like this, but we feel that such measures instill a false sense of security that is more harmful than helpful.
    -
    - Note that there are a number of third-party plugin developers working on secure IM frameworks. Take a look at the [ThirdPartyPlugins](third-party-plugins.md) page for links to those we know of.
    -
    - There is currently no support for encrypted file transports.
    -
    -### When will the next version be released?
    -
    -~~The schedule for releases is every third Thursday~~. However, a new version will only be released if it meets a certain standard of quality (i.e., it will not be released if it still has a large number of serious bugs). Therefore, some releases will take longer than others. Major rewrites means lots of new bugs to work out. The new version will be released as soon as it is possible to do so. The [Roadmap](https://developer.pidgin.im/roadmap) gives best-guess estimates, but take them with a grain of salt--if we aren't ready to release on a Milestone's due date, we won't release, and that milestone will fall into "past due."
    -
    -### What will the next version be numbered?
    -
    -We follow the [http://semver.org/ Semantic Versioning] scheme.
    -
    -Starting with version 1.0.0, Pidgin version numbers have 3 parts to them. The format is major.minor.micro. If we change something internally in Pidgin such that some plugins won't work with the newer version, we will increment the major version number. If we don't increment the major version number, and we've added things to the Pidgin API that won't break any older stuff, we will increment the minor version number. In any other cases, we will increment the micro version number. Even and odd numbers have nothing to do with stability, and you should always be running the latest release of Pidgin to get new features and bug fixes.
    -
    -### How do you capitalize Pidgin?
    -
    -Pidgin, with a capital P, or pidgin, with a little p. In all cases, the remainder of the letters are lowercase. It's not PIDGIN, nor PidGin, nor PiDgIn, nor anything similar. Stop doing that.
    -
    -### What's with the name Pidgin, anyway?
    -
    -[Pidgin](http://dictionary.reference.com/browse/pidgin) is not, in fact, named *after* so-called "rats with wings," but rather it refers to a special type of "broken" language used by speakers of different languages to communicate. We thought this name fit well with the purpose of Pidgin.
    -
    -Of course, Pidgin is a [homonym](http://dictionary.reference.com/browse/homonym) for pigeon, so we couldn't resist taking advantage of the pun to create a cartoon mascot.
    -
    -Many have subsequently pointed out that the use of carrier pigeons for transmission of messages fits nicely with Pidgin's functionality as well.
    -
    -### What's with the name libpurple, anyway?
    -
    -The use of the term purple is another [homonym](http://dictionary.reference.com/browse/homonym) of sorts. Long ago, we started referring to PRotocol PLugins by an abbreviated name "PrPl" which we would pronounce in the same manner as the color. Since libpurple provides primarily an interface for using protocol plugins to access a variety of IM networks, it seemed reasonable that we name the library after the pronunciation.
    -
    -### What's with the name Finch, anyway?
    -
    -In keeping with bird theming for IM clients based upon libpurple, including [Adium](https://adium.im) (the Duck client), and [Pidgin](https://pidgin.im) (the Pigeon client), Finch was chosen as the name for our text-based client.
    -
    -### Why Won’t You Remove My Mailing List Posts?
    -
    -Occasionally we, the Pidgin team, receive requests to remove information from our mailing list archives. We don’t honor those requests. Quite frankly, by the time we get the request it’s already too late for removal to be useful.
    -
    -Every post to our mailing lists is archived. Our archives are public. A number of other mailing list archival services have been subscribed to our lists, making duplicated archives that we have no control over.
    -
    -Google and other search engines index our archives, which we also have no control over. (Yes, robots.txt exists, but search engines are not obligated to obey it, and we actually want our archives indexed so our users can find information more easily.)
    -
    -By the time we receive a request to remove any data from our archives, it already exists in so many places that one more copy of the data can’t possibly cause any additional harm. We also do include a disclaimer on the list info page for each of our mailing lists and in the Help->About box in Pidgin itself that our mailing lists are publicly archived, thus adequate warning exists to inform people that their data will be publicly disclosed.
    -
    -We cannot be held accountable for someone else's failure to read the disclaimer. So, as a policy, we do not remove anything from our mailing list archives.
    \ No newline at end of file
    --- a/hugo/content/_index.md Thu Aug 22 05:13:40 2019 +0000
    +++ b/hugo/content/_index.md Fri Aug 23 08:35:30 2019 +0000
    @@ -6,23 +6,40 @@
    lastmod: 2019-06-09T18:01:46.000Z
    ---
    -Pidgin is a chat program which lets you log into accounts on multiple chat networks simultaneously. This means that you can be chatting with friends on XMPP and sitting in an IRC channel at the same time.
    +Pidgin is a chat program which lets you log into accounts on multiple chat
    +networks simultaneously. This means that you can be chatting with friends on
    +XMPP and sitting in an IRC channel at the same time.
    -Pidgin runs on Windows, Linux, and other UNIX-like operating systems. Looking for Pidgin for OS X? Try [Adium](https://adium.im)!
    +Pidgin runs on Windows, Linux, and other UNIX-like operating systems. Looking
    +for Pidgin for OS X? Try [Adium](https://adium.im)!
    -Pidgin is compatible with the following chat networks out of the box: Jabber/XMPP, Bonjour, Gadu-Gadu, IRC, Novell GroupWise Messenger, Lotus Sametime, SILC, SIMPLE, and Zephyr. It can support many more with [plugins](/plugins).
    +Pidgin is compatible with the following chat networks out of the box:
    +Jabber/XMPP, Bonjour, Gadu-Gadu, IRC, Novell GroupWise Messenger, Lotus
    +Sametime, SILC, SIMPLE, and Zephyr. It can support many more with
    +[plugins](/plugins).
    -Pidgin supports many features of these chat networks, such as file transfers, away messages, buddy icons, custom smileys, and typing notifications. Numerous plugins also extend Pidgin's functionality above and beyond the standard features.
    +Pidgin supports many features of these chat networks, such as file transfers,
    +away messages, buddy icons, custom smileys, and typing notifications. Numerous
    +plugins also extend Pidgin's functionality above and beyond the standard
    +features.
    -Pidgin is under constant development. Releases are usually frequent and driven by user contributions, such as [bug reports](https://pidgin.im/support/) and [patches](https://developer.pidgin.im/).
    +Pidgin is under constant development. Releases are usually frequent and driven
    +by user contributions, such as [bug reports](https://pidgin.im/support/) and
    +[patches](https://developer.pidgin.im/).
    -Pidgin is free and contains no ads. All our code is open source and licensed under the GNU General Public License. This means you can get Pidgin's underlying code and modify it to suit your needs, as long as you publish the changes you make for everyone to benefit from as well.
    +Pidgin is free and contains no ads. All our code is open source and licensed
    +under the GNU General Public License. This means you can get Pidgin's underlying
    +code and modify it to suit your needs, as long as you publish the changes you
    +make for everyone to benefit from as well.
    {{< download-now >}}
    ## Supported Languages
    -Pidgin is translated into many different languages, thanks to the generous contributions of our volunteer translators.
    +Pidgin is translated into many different languages, thanks to the generous
    +contributions of our volunteer translators.
    {{< i18n-languages >}}
    -If your native language is missing from this list or you've found that a translation contains errors, you can help us! Take a look at our [tips for translators](/i18n/tips/) page!
    +If your native language is missing from this list or you've found that a
    +translation contains errors, you can help us! Take a look at our [tips for
    +translators](/i18n/tips/) page!
    --- a/hugo/content/building/2.x.y.md Thu Aug 22 05:13:40 2019 +0000
    +++ b/hugo/content/building/2.x.y.md Fri Aug 23 08:35:30 2019 +0000
    @@ -7,54 +7,87 @@
    # Building
    -Pidgin's default build has a lot of dependencies. This document will hopefully help you find and install them all.
    +Pidgin's default build has a lot of dependencies. This document will hopefully
    +help you find and install them all.
    ## Packaged Dependencies
    -These dependencies are ones that should be found in your distributions package manager.
    +These dependencies are ones that should be found in your distributions package
    +manager.
    ### I have the source; how do I build this thing?
    -Assuming you have all of the necessary libraries and their headers installed (see the next few questions), you compile libpurple, Pidgin and Finch just like most applications:
    +Assuming you have all of the necessary libraries and their headers installed
    +(see the next few questions), you compile libpurple, Pidgin and Finch just like
    +most applications:
    % tar xjvf pidgin-2.x.y.tar.bz2
    % cd pidgin-2.x.y
    % ./configure && make && sudo make install
    -This will install libpurple, Pidgin and Finch to `/usr/local`. If you want to install it elsewhere, pass `--prefix=/some/other/prefix` to `./configure`. (You really don't want to install it to `/usr`.) See `./configure --help` for other options you can change at compile-time.
    +This will install libpurple, Pidgin and Finch to `/usr/local`. If you want to
    +install it elsewhere, pass `--prefix=/some/other/prefix` to `./configure`. (You
    +really don't want to install it to `/usr`.) See `./configure --help` for other
    +options you can change at compile-time.
    -If you got the source tree from our Mercurial database (which you probably shouldn't have), you'll need to run `./autogen.sh` instead of `./configure` the first time around. If you get an error like the following, you may need a newer version of automake.
    +If you got the source tree from our Mercurial database (which you probably
    +shouldn't have), you'll need to run `./autogen.sh` instead of `./configure` the
    +first time around. If you get an error like the following, you may need a newer
    +version of automake.
    running /usr/bin/automake -a -c --gnu... failed.
    Makefile.am:79: directory should not contain `/'
    pidgin/pixmaps/Makefile.am:4: directory should not contain `/'
    -If you are trying to compile on Windows, you need the answer to a different question.
    +If you are trying to compile on Windows, you need the answer to a different
    +question.
    ## Why can't I compile Pidgin?
    -You're probably missing some dependencies. The `configure` script will tell you when you are missing required dependencies. Remember that if you're using an RPM-based (RedHat Enterprise Linux, CentOS, SUSE, Mandriva, etc.) or Debian-based system (Debian, Ubuntu, etc.) that having just a library's package installed is not sufficient--you must also have the `-devel` (RPM systems) or `-dev` (Debian-based systems) package for each library installed. If `configure` is succeeding, but `make` fails, this is harder to diagnose and you will probably want to drop by the IRC channel or XMPP conference listed on [Community](/community) to get help.
    +You're probably missing some dependencies. The `configure` script will tell you
    +when you are missing required dependencies. Remember that if you're using an
    +RPM-based (RedHat Enterprise Linux, CentOS, SUSE, Mandriva, etc.) or
    +Debian-based system (Debian, Ubuntu, etc.) that having just a library's package
    +installed is not sufficient--you must also have the `-devel` (RPM systems) or
    +`-dev` (Debian-based systems) package for each library installed. If `configure`
    +is succeeding, but `make` fails, this is harder to diagnose and you will
    +probably want to drop by the IRC channel or XMPP conference listed on
    +[Community](/community) to get help.
    ## How do I install the dependencies on Debian or Ubuntu?
    -You need to install the development headers; these are the `-dev` packages. A simple `apt-get build-dep pidgin` will find and install all of the required header packages for you.
    +You need to install the development headers; these are the `-dev` packages. A
    +simple `apt-get build-dep pidgin` will find and install all of the required
    +header packages for you.
    If `apt-get build-dep` fails with a message like
    E: You must put some 'source' URIs in your sources.list
    -then you need to add `deb-src` lines to your `/etc/apt/sources.list` corresponding to each of the `deb` lines already there. If editing configuration files scares you, Ubuntu has a "Software Sources" control panel in _System_ -> _Administration_ which has some magic checkboxes to do this for you.
    +then you need to add `deb-src` lines to your `/etc/apt/sources.list`
    +corresponding to each of the `deb` lines already there. If editing configuration
    +files scares you, Ubuntu has a "Software Sources" control panel in _System_ ->
    +_Administration_ which has some magic checkboxes to do this for you.
    ## How do I install the dependencies on Fedora (or similar)?
    -RPM-based distribution users may find `yum-builddep pidgin-VERSION.src.rpm` useful if a source RPM is available and the distribution uses the yum tools.
    +RPM-based distribution users may find `yum-builddep pidgin-VERSION.src.rpm`
    +useful if a source RPM is available and the distribution uses the yum tools.
    -Note that the `yum-builddep` command is in the `yum-utils` package, which is not necessarily installed by default.
    +Note that the `yum-builddep` command is in the `yum-utils` package, which is not
    +necessarily installed by default.
    ## How do I apply the patch "something.diff"?
    -Type `patch -p0 < something.diff` from the top level of the source directory (`pidgin/`, not `pidgin/pidgin/` or `pidgin/finch/`). If that does not work, try `patch -p1 < something.diff`.
    +Type `patch -p0 < something.diff` from the top level of the source directory
    +(`pidgin/`, not `pidgin/pidgin/` or `pidgin/finch/`). If that does not work,
    +try `patch -p1 < something.diff`.
    ## Is there a way to compile without some protocols?
    There are actually two ways:
    - - Run `./configure` with the `--with-static-prpls` option with the `--disable-plugins`. This will let you choose which protocols to include by specifying them as a comma-separated list, such as the following (but note that you won't be able to use any other protocols or plugins): `./configure --disable-plugins --with-static-prpls=irc,yahoo`
    - - Use the `--with-dynamic-prpls` option to `./configure` by specifying a comma-separated list, like so: `./configure --with-dynamic-prpls=aim,icq,yahoo`
    + - Run `./configure` with the `--with-static-prpls` option with the
    + `--disable-plugins` option. This will let you choose which protocols to
    + include by specifying them as a comma-separated list, such as the following
    + (but note that you won't be able to use any other protocols or plugins):
    + `./configure --disable-plugins --with-static-prpls=irc,yahoo`
    + - Use the `--with-dynamic-prpls` option to `./configure` by specifying a
    + comma-separated list, like so: `./configure --with-dynamic-prpls=aim,icq,yahoo`
    ## Can I compile just Finch, not Pidgin?
    Sure. Pass `--disable-gtkui` to `./configure`.
    \ No newline at end of file
    --- a/hugo/content/community/_index.md Thu Aug 22 05:13:40 2019 +0000
    +++ b/hugo/content/community/_index.md Fri Aug 23 08:35:30 2019 +0000
    @@ -8,20 +8,25 @@
    ]
    ---
    -Pidigin is a huge project with a community that helps to provide support. We have a number of ways you can get in touch with us.
    +Pidgin is a huge project with a community that helps to provide support. We
    +have a number of ways you can get in touch with us.
    ## E-mail
    -The Pidgin team can be reached via mailing lists for support and development information.
    +The Pidgin team can be reached via mailing lists for support and development
    +information.
    - - [support@pidgin.im](mailto:support@pidgin.im) ([List Info](https://pidgin.im/cgi-bin/mailman/listinfo/support)) ([List Archive](https://pidgin.im/pipermail/support/)) -
    - - [devel@pidgin.im](mailto:devel@pidgin.im) ([List Info](https://pidgin.im/cgi-bin/mailman/listinfo/devel)) ([List Archive](https://pidgin.im/pipermail/devel/))
    - - We offer a few other mailing lists. [See the full list.](http://pidgin.im/cgi-bin/mailman/listinfo)
    + - [support@pidgin.im](mailto:support@pidgin.im) ([List Info](https://lists.pidgin.im/listinfo/support)) ([List Archive](https://lists.pidgin.im/pipermail/support/))
    + - [devel@pidgin.im](mailto:devel@pidgin.im) ([List Info](https://lists.pidgin.im/listinfo/devel)) ([List Archive](https://lists.pidgin.im/pipermail/devel/))
    + - We offer a few other mailing lists. [See the full list.](https://lists.pidgin.im/listinfo)
    ## Chat
    -If you prefer chat-based contact, the Pidgin community has two primary chat resources:
    +If you prefer chat-based contact, the Pidgin community has two primary chat
    +resources:
    - `#pidgin` on `irc.freenode.net` on IRC
    - `devel@conference.pidgin.im`, a Jabber/XMPP MUC (Multi-User Chat)
    ## Helping
    -We often get people asking how they can help. Take a look at the [Contributing](/contributing) page for suggestions! There are lots of things to do for people, and a lot of them don't even involve the source code!
    +We often get people asking how they can help. Take a look at the
    +[Contributing](/contributing) page for suggestions! There are lots of things to
    +do for people, and a lot of them don't even involve the source code!
    --- a/hugo/content/contributing/_index.md Thu Aug 22 05:13:40 2019 +0000
    +++ b/hugo/content/contributing/_index.md Fri Aug 23 08:35:30 2019 +0000
    @@ -7,12 +7,16 @@
    lastmod: 2019-03-17T23:05:38.000Z
    ---
    -Pidgin is a huge project with a ton of things to be done, even if you're not a coder. Below is a short list of things you can do to help get involved!!
    +Pidgin is a huge project with a ton of things to be done, even if you're not a
    +coder. Below is a short list of things you can do to help get involved!!
    * Triage the issue tracker
    - * Try to reproduce described bugs. If you can find an easy way to reproduce, leave a comment to explain how to do it.
    - * Find/mark/close duplicates. Seriously, even just one or two duplicates found and properly marked is a huge help to our backlog!
    - * Suggest patches be turned into pull requests, or bring patches to the attention of the core dev team.
    + * Try to reproduce described bugs. If you can find an easy way to
    + reproduce, leave a comment to explain how to do it.
    + * Find/mark/close duplicates. Seriously, even just one or two duplicates
    + found and properly marked is a huge help to our backlog!
    + * Suggest patches be turned into pull requests, or bring patches to the
    + attention of the core dev team.
    * Help users
    * IRC: #pidgin on freenode
    * XMPP (formerly Jabber): devel@conference.pidgin.im
    @@ -25,7 +29,8 @@
    * help translate this repo
    * other suggestions?
    * Convert wiki pages to markdown for inclusion in this repo.
    - * Walk the links on [ThirdPartyPlugins](https://developer.pidgin.im/wiki/ThirdPartyPlugins) and mark broken ones as such. This is another really easy way to start!
    + * Walk the links on [ThirdPartyPlugins](https://developer.pidgin.im/wiki/ThirdPartyPlugins)
    + and mark broken ones as such. This is another really easy way to start!
    * Participate in discussion on IRC, XMPP, and/or the Mailing Lists.
    For the coders out there:
    --- a/hugo/content/contributing/mercurial.md Thu Aug 22 05:13:40 2019 +0000
    +++ b/hugo/content/contributing/mercurial.md Fri Aug 23 08:35:30 2019 +0000
    @@ -8,16 +8,21 @@
    ---
    ### Configure Mercurial
    -Mercurial is configured through several rc files. You can override the system-wide settings on a per-user or per-repository basis by changing either `~/.hgrc` or `<repository>/.hg/hgrc`. See `man hgrc` for details.
    +Mercurial is configured through several rc files. You can override the
    +system-wide settings on a per-user or per-repository basis by changing either
    +`~/.hgrc` or `<repository>/.hg/hgrc`. See `man hgrc` for details.
    -You must set your username when working with Mercurial repositories. To do that, add two lines to `~/.hgrc` (or optionally `<repository>/.hg/hgrc`, if you want to use a different username for other Mercurial repositories):
    +You must set your username when working with Mercurial repositories. To do
    +that, add two lines to `~/.hgrc` (or optionally `<repository>/.hg/hgrc`, if you
    +want to use a different username for other Mercurial repositories):
    ```
    [ui]
    username = First Last <email@address.tld>
    ```
    -Other useful options that can be set in the `[ui]` section of an `hgrc` are the merge tool and to make Mercurial verbose or not:
    +Other useful options that can be set in the `[ui]` section of an `hgrc` are the
    +merge tool and to make Mercurial verbose or not:
    ```
    [ui]
    @@ -26,7 +31,8 @@
    merge = meld
    ```
    -Git diffs can be useful too, and making `hg log -v` the default behavior for `hg log` can be helpful:
    +Git diffs can be useful too, and making `hg log -v` the default behavior for `hg
    +log` can be helpful:
    ```
    [diff]
    @@ -38,15 +44,21 @@
    ### Clone the Repository and Select a Branch
    -To start working with Pidgin from Mercurial, you'll probably want to clone our main repository:
    +To start working with Pidgin from Mercurial, you'll probably want to clone our
    +main repository:
    ```
    hg clone https://bitbucket.org/pidgin/main pidgin
    ```
    -This will give you a `pidgin` directory with the 3.0.0 development code by default. If you want to develop against Pidgin 3.0.0, you're all set!
    +This will give you a `pidgin` directory with the 3.0.0 development code by
    +default. If you want to develop against Pidgin 3.0.0, you're all set!
    -Naturally, Pidgin has a number of branches within its repository, and these branches handle various projects including our maintenance of Pidgin 2.x.y. We won't go into all the branches here, as there are a lot of them, but we know some people would like to work against Pidgin 2.x.y instead of 3.0.0. In order to do that, clone the repository as above, but then do this:
    +Naturally, Pidgin has a number of branches within its repository, and these
    +branches handle various projects including our maintenance of Pidgin 2.x.y. We
    +won't go into all the branches here, as there are a lot of them, but we know
    +some people would like to work against Pidgin 2.x.y instead of 3.0.0. In order
    +to do that, clone the repository as above, but then do this:
    ```
    cd pidgin
    --- a/hugo/content/development/design-guidelines.md Thu Aug 22 05:13:40 2019 +0000
    +++ b/hugo/content/development/design-guidelines.md Fri Aug 23 08:35:30 2019 +0000
    @@ -9,41 +9,89 @@
    ## Applicability
    -These guidelines are informal descriptions of the sort of thinking that goes into the design of Pidgin, libpurple, and family. These are not hard-and-fast rules, but they are conscious decisions made by the Pidgin developers which will be violated only after careful consideration. (Or by mistake, and corrected shortly thereafter!)
    +These guidelines are informal descriptions of the sort of thinking that goes
    +into the design of Pidgin, libpurple, and family. These are not hard-and-fast
    +rules, but they are conscious decisions made by the Pidgin developers which will
    +be violated only after careful consideration. (Or by mistake, and corrected
    +shortly thereafter!)
    ## Uniformity
    -While Pidgin is a multi-protocol IM client, the goal is to hide protocols from the user as much as possible. Obviously users have to know about individual protocols when they create or modify accounts, but in day-to-day communication and usage, the intent is that users don't have to think about protocols at all.
    +While Pidgin is a multi-protocol IM client, the goal is to hide protocols from
    +the user as much as possible. Obviously users have to know about individual
    +protocols when they create or modify accounts, but in day-to-day communication
    +and usage, the intent is that users don't have to think about protocols at all.
    -The workflow in Pidgin is intended to be "I would like to chat with Sean about wibbles", not "I would like to create an XMPP conversation with seanegan@pidgin.im".
    +The workflow in Pidgin is intended to be "I would like to chat with Sean about
    +wibbles", not "I would like to create an XMPP conversation with
    +seanegan@pidgin.im".
    -The focus is on the goal, not the process. In reaching toward this focus, we have chosen to paper over the differences between the various protocols and features as much as possible (without crippling or needlessly complicating things). This has led to decisions such as the removal of protocol icons from the buddy list and the implementation of contact-aware chats and logs.
    +The focus is on the goal, not the process. In reaching toward this focus, we
    +have chosen to paper over the differences between the various protocols and
    +features as much as possible (without crippling or needlessly complicating
    +things). This has led to decisions such as the removal of protocol icons from
    +the buddy list and the implementation of contact-aware chats and logs.
    ## Simpler Is Better
    -> Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.
    -> --Antoine de Saint-Exupery
    +> Perfection is achieved, not when there is nothing more to add, but when there
    + is nothing left to take away. --Antoine de Saint-Exupery
    -In general we try to keep the code and the user interface simple. Especially when it comes to preferences in the UI. Pidgin should be as streamlined as possible. It is an IM client, so messaging someone should be easy. See [this essay](http://www106.pair.com/rhp/free-software-ui.html) by Havoc Pennington for an explanation of some ideas that we try to follow.
    +In general we try to keep the code and the user interface simple. Especially
    +when it comes to preferences in the UI. Pidgin should be as streamlined as
    +possible. It is an IM client, so messaging someone should be easy. See [this
    +essay](https://ometer.com/preferences.html) by Havoc Pennington for
    +an explanation of some ideas that we try to follow.
    -It's important for the code to be simple because this is an open source project and developers come and go. You never know who's going to be looking at your code next. If you write a function that's hard to follow then the next person that comes along will end up rewriting it, and that's counterproductive.
    +It's important for the code to be simple because this is an open source project
    +and developers come and go. You never know who's going to be looking at your
    +code next. If you write a function that's hard to follow then the next person
    +that comes along will end up rewriting it, and that's counterproductive.
    ## Clean Layering
    -In plain language, this means that the protocol-specific code goes in the protocol plugin (*prpl*), and that libpurple exists, and is cleanly separated from the user interface. There are practical implications to this. While all of our code depends on glib, only the Pidgin specific parts depend on GTK.
    +In plain language, this means that the protocol-specific code goes in the
    +protocol plugin (*prpl*), and that libpurple exists, and is cleanly separated
    +from the user interface. There are practical implications to this. While all
    +of our code depends on glib, only the Pidgin specific parts depend on GTK.
    -To implement, for example, file transfer; there are 3 steps. First, the protocol(s) have to support it. By themselves, however, the protocols can do nothing. So the "core," libpurple, has to support it also (the second step).
    +To implement, for example, file transfer; there are 3 steps. First, the
    +protocol(s) have to support it. By themselves, however, the protocols can do
    +nothing. So the "core," libpurple, has to support it also (the second step).
    +
    +We do not want massive amounts of very similar code in libpurple, so the
    +implementation of file transfer at the libpurple level has to abstract away from
    +how individual protocols handle it, so as to be able to use the same calls from
    +all file transfer supporting protocols.
    -We do not want massive amounts of very similar code in libpurple, so the implementation of file transfer at the libpurple level has to abstract away from how individual protocols handle it, so as to be able to use the same calls from all file transfer supporting protocols.
    +Last, but not least, before the user can actually send or receive a file, the UI
    +(Pidgin, Finch, or Adium) must support it. These interfaces know nothing about
    +the protocol, and have only limited contact with the core. This helps to
    +enforce the desire for uniformity explained above. It also makes it easier for
    +the only sort of duplication we encourage: many interfaces. The core
    +implementation cannot assume too much about what the UI will do, because the GTK
    +UI (Pidgin) might need to handle a file transfer somewhat differently than the
    +ncurses-based UI (Finch).
    -Last, but not least, before the user can actually send or receive a file, the UI (Pidgin, Finch, or Adium) must support it. These interfaces know nothing about the protocol, and have only limited contact with the core. This helps to enforce the desire for uniformity explained above. It also makes it easier for the only sort of duplication we encourage: many interfaces. The core implementation cannot assume too much about what the UI will do, because the GTK UI (Pidgin) might need to handle a file transfer somewhat differently than the ncurses-based UI (Finch).
    -
    -Patches that violate this layering will be rejected. In practice, this means that there is more work involved to introduce a new class of functionality, say file transfer, white-boarding, voice, or video. On the other hand, it means less work to implement any given class of functionality for a new protocol or for a new UI.
    +Patches that violate this layering will be rejected. In practice, this means
    +that there is more work involved to introduce a new class of functionality, say
    +file transfer, white-boarding, voice, or video. On the other hand, it means
    +less work to implement any given class of functionality for a new protocol or
    +for a new UI.
    ## Living Code
    -Our source code is very much a 'live' document. It should reflect what is currently needed, not what used to be needed or what might be needed in the future. Old code should be removed if it isn't being used (of course, you can only remove public functions and structures when the major version number increases)--it'll always be in the source code repository if anyone needs it. The code should contain documentation about what it does and why.
    +Our source code is very much a 'live' document. It should reflect what is
    +currently needed, not what used to be needed or what might be needed in the
    +future. Old code should be removed if it isn't being used (of course, you can
    +only remove public functions and structures when the major version number
    +increases)---it'll always be in the source code repository if anyone needs it.
    +The code should contain documentation about what it does and why.
    ## Non-blocking
    -Pidgin and libpurple are single threaded. That means that the network code runs in the same process as the user interface. Network code must be non-blocking, otherwise the UI will be unresponsive. Code should be event-driven. Long running tasks should be asynchronous. File descriptors that need to be watched for changes should be added to the event loop.
    +Pidgin and libpurple are single threaded. That means that the network code runs
    +in the same process as the user interface. Network code must be non-blocking,
    +otherwise the UI will be unresponsive. Code should be event-driven. Long
    +running tasks should be asynchronous. File descriptors that need to be watched
    +for changes should be added to the event loop.
    --- a/hugo/content/development/faq.md Thu Aug 22 05:13:40 2019 +0000
    +++ b/hugo/content/development/faq.md Fri Aug 23 08:35:30 2019 +0000
    @@ -7,32 +7,52 @@
    lastmod: 2019-03-17T23:05:38.000Z
    ---
    -The following is a list of Frequently Asked Questions (FAQs), with answers, and notes related to development using LibPurple.
    +The following is a list of Frequently Asked Questions (FAQs), with answers, and
    +notes related to development using LibPurple.
    ## Accounts
    ### I created an account, but it's not being saved!
    -You need to use `purple_accounts_add()` to add the account to the list of available accounts. This list of accounts is saved. Note that many of the functions require an account to be on that list. So you should always call `purple_accounts_add()` after creating an account.
    +You need to use `purple_accounts_add()` to add the account to the list of
    +available accounts. This list of accounts is saved. Note that many of the
    +functions require an account to be on that list. So you should always call
    +`purple_accounts_add()` after creating an account.
    ### How do I get online with an account?
    There are two ways you can do this:
    - * If you have other accounts online, and you want the new account to have the same status as those, then call `purple_savedstatus_get_current()` to get the current status, and use `purple_savedstatus_activate_for_account()` for the account.
    - * Otherwise, you can simply do `purple_account_set_status()` to set the status of the account.
    + * If you have other accounts online, and you want the new account to have the
    + same status as those, then call `purple_savedstatus_get_current()` to get the
    + current status, and use `purple_savedstatus_activate_for_account()` for the
    + account.
    + * Otherwise, you can simply do `purple_account_set_status()` to set
    + the status of the account.
    -An account needs to be enabled before it can be connected. So after doing either of the above, you need to enable the account by calling `purple_account_set_enabled()`.
    +An account needs to be enabled before it can be connected. So after doing either
    +of the above, you need to enable the account by calling
    +`purple_account_set_enabled()`.
    ## Conversations
    ### How can I create a conversation with someone?
    -Use `purple_conversation_new()`. Use `PURPLE_CONV_TYPE_IM` if the conversation is an IM (one-to-one person conversation), and use `PURPLE_CONV_TYPE_CHAT` if it's a multi-user conversation. One important thing to note here is that the name property of the `PurpleConversation` struct is the name of the buddy you are creating a conversation with (the documentation states that this is the name of the conversation itself, but it is in fact also the name of the receiving buddy). So a call to `purple_conversation_new()` takes the name of the buddy as its third argument.
    +Use `purple_conversation_new()`. Use `PURPLE_CONV_TYPE_IM` if the conversation
    +is an IM (one-to-one person conversation), and use `PURPLE_CONV_TYPE_CHAT` if
    +it's a multi-user conversation. One important thing to note here is that the
    +name property of the `PurpleConversation` struct is the name of the buddy you
    +are creating a conversation with (the documentation states that this is the name
    +of the conversation itself, but it is in fact also the name of the receiving
    +buddy). So a call to `purple_conversation_new()` takes the name of the buddy as
    +its third argument.
    ### How can I send a message in a conversation?
    -Use either `purple_conv_im_send()` or `purple_conv_chat_send()`. Note that the first parameter to either of these functions are ***not*** the conversation itself. Rather, it's the IM data or chat data of the conversation which you can get from `PURPLE_CONV_IM`/`PURPLE_CONV_CHAT`.
    +Use either `purple_conv_im_send()` or `purple_conv_chat_send()`. Note that the
    +first parameter to either of these functions are ***not*** the conversation
    +itself. Rather, it's the IM data or chat data of the conversation which you can
    +get from `PURPLE_CONV_IM`/`PURPLE_CONV_CHAT`.
    ### Is there a way that I can print something in the conversation window, but not send the message?
    @@ -42,7 +62,8 @@
    ### What do I do with `DATADIR`, `LOCALEDIR`, and `LIBDIR`?
    -`DATADIR`, `LOCALEDIR`, and `LIBDIR` are defined as functions in the Windows build. Therefore, doing something like this will break the Windows build:
    +`DATADIR`, `LOCALEDIR`, and `LIBDIR` are defined as functions in the Windows
    +build. Therefore, doing something like this will break the Windows build:
    ```
    printf("File in DATADIR is: %s\n", DATADIR G_DIR_SEPARATOR_S "pic.png")
    @@ -56,13 +77,24 @@
    ### Why are files opened with mode `b`?
    -Without this, on Windows systems the opened files will use Windows default translation (<CR><LF> for newline, for example). This will cause errors due to newline format and the "bytes read" counts, which will be wrong when comparing the return value of `read()` to `stat()`.
    +Without this, on Windows systems the opened files will use Windows default
    +translation (<CR><LF> for newline, for example). This will cause errors due to
    +newline format and the "bytes read" counts, which will be wrong when comparing
    +the return value of `read()` to `stat()`.
    ### Why are `G_DIR_SEPARATOR_S` and `G_DIR_SEPARATOR` used everywhere?
    -This is a matter of maintaining cross-platform compatibility. Windows uses a backslash ("\") for directory separators in paths, while UNIX-like systems use the forward slash ("/"). Other OSes may choose to use other separators--for example, prior to Mac OS X, it was common for the directory separator on Macs to be a colon (":").
    +This is a matter of maintaining cross-platform compatibility. Windows uses a
    +backslash ("\") for directory separators in paths, while UNIX-like systems use
    +the forward slash ("/"). Other OSes may choose to use other separators--for
    +example, prior to Mac OS X, it was common for the directory separator on Macs to
    +be a colon (":").
    -It is impractical to use preprocessor directives throughout the code to determine the path style to use, especially if a new OS were to appear and use a different directory separator. GLib, which we already use, provides the convenient separator macro, so we use this to reduce our code complexity and maintain cross-platform portability.
    +It is impractical to use preprocessor directives throughout the code to
    +determine the path style to use, especially if a new OS were to appear and use a
    +different directory separator. GLib, which we already use, provides the
    +convenient separator macro, so we use this to reduce our code complexity and
    +maintain cross-platform portability.
    ## General
    @@ -72,27 +104,36 @@
    ### Should I use `snprintf()` or `vsnprintf()`?
    -No. Use the GLib wrapper functions instead. They are `g_snprintf()` and `g_vsnprintf()`.
    +No. Use the GLib wrapper functions instead. They are `g_snprintf()` and
    +`g_vsnprintf()`.
    ### How do I get the settings directory?
    -Use `purple_home_dir()`. You should *not* use `g_get_home_dir()` or `getenv("HOME")`.
    +Use `purple_home_dir()`. You should *not* use `g_get_home_dir()` or
    +`getenv("HOME")`.
    ### What is the versioning scheme?
    -**This is already defined elsewhere, we should probably just have a page for it... --grim**
    +**This is already defined elsewhere, we should probably just have a page for
    +it... --grim**
    There are three fields in the version: `major.minor.micro`.
    - - If the `major` is changing, you can break plugins. That means both forward- and backward- compatibility. API can be added or removed or whatever you like.
    - - If only the `minor` is changing, you can break forward compatibility only. You may add API, but you can't remove it. You can mark API as deprecated instead.
    - - If only the `micro` is changing, you can't break the API at all.
    + - If the `major` is changing, you can break plugins. That means both forward-
    + and backward- compatibility. API can be added or removed or whatever you
    + like.
    + - If only the `minor` is changing, you can break forward compatibility
    + only. You may add API, but you can't remove it. You can mark API as
    + deprecated instead.
    + - If only the `micro` is changing, you can't break the API
    + at all.
    ## Headers
    ### Why is win32dep.h causing problems for me?
    -You need to make sure it is the last header you include if you need to include it. Not doing so is asking for problems.
    +You need to make sure it is the last header you include if you need to include
    +it. Not doing so is asking for problems.
    **Why? --grim**
    @@ -100,8 +141,11 @@
    ### How should I handle global variables?
    -Use `G_MODULE_IMPORT` for any global variable located outside your dynamic library. Not doing this will cause "Memory Access Violation" errors on Windows systems.
    +Use `G_MODULE_IMPORT` for any global variable located outside your dynamic
    +library. Not doing this will cause "Memory Access Violation" errors on Windows
    +systems.
    ### What should I do for "exported" functions?
    -If your plugin has functions that are to be accessed from outside the scope of its file (.dll or .so), `G_MODULE_EXPORT` those functions.
    +If your plugin has functions that are to be accessed from outside the scope of
    +its file (.dll or .so), `G_MODULE_EXPORT` those functions.
    --- a/hugo/content/development/version-control.md Thu Aug 22 05:13:40 2019 +0000
    +++ b/hugo/content/development/version-control.md Fri Aug 23 08:35:30 2019 +0000
    @@ -8,15 +8,31 @@
    ---
    All of the source code relating to Pidgin and its libraries is hosted on
    -[bitbucket.org](https://bitbucket.org) in [mercurial](https://www.mercurial-scm.org/) repositories at
    +[bitbucket.org](https://bitbucket.org) in
    +[mercurial](https://www.mercurial-scm.org/) repositories at
    [bitbucket.org/pidgin](https://bitbucket.org/pidgin).
    ### Repositories
    -Pidgin itself lives in the [bitbucket.org/pidgin/main](https://bitbucket.org/pidgin/main) repository. This include Pidgin 2 on the `release-2.x.y` branch as well as Pidgin 3 on the `default` branch.
    -
    -The default branch has moved libgnt out to its own repository at [bitbucket.org/pidgin/libgnt](https://bitbucket.org/pidgin/libgnt) to make it more accessible to other developers. The intent here is to have it be a separate package on all distributions to make it more accessible to users as well as developers. This will help on distributions such as Slackware that enforce rules of one distribution package per source package.
    +Pidgin itself lives in the
    +[bitbucket.org/pidgin/main](https://bitbucket.org/pidgin/main) repository. This
    +include Pidgin 2 on the `release-2.x.y` branch as well as Pidgin 3 on the
    +`default` branch.
    -Pidgin 3 also depends on [bitbucket.org/pidgin/talkatu](https://bitbucket.org/pidgin/talkatu) for reusable [GTK](https://www.gtk.org) widgets that are geared towards messaging clients.
    +The default branch has moved libgnt out to its own repository at
    +[bitbucket.org/pidgin/libgnt](https://bitbucket.org/pidgin/libgnt) to make it
    +more accessible to other developers. The intent here is to have it be a
    +separate package on all distributions to make it more accessible to users as
    +well as developers. This will help on distributions such as Slackware that
    +enforce rules of one distribution package per source package.
    -Purple 3 has adopted [gplugin](https://bitbucket.org/gplugin/gplugin), which is a library that handles plugins in multiple langauages leveraging [gobject-introspection](https://gi.readthedocs.io/en/latest/). It currently supports C/C++, Python, and Lua plugins, with more languages planned for the future.
    +Pidgin 3 also depends on
    +[bitbucket.org/pidgin/talkatu](https://bitbucket.org/pidgin/talkatu) for
    +reusable [GTK](https://www.gtk.org) widgets that are geared towards messaging
    +clients.
    +
    +Purple 3 has adopted [gplugin](https://bitbucket.org/gplugin/gplugin), which is
    +a library that handles plugins in multiple langauages leveraging
    +[gobject-introspection](https://gi.readthedocs.io/en/latest/). It currently
    +supports C/C++, Python, and Lua plugins, with more languages planned for the
    +future.
    --- a/hugo/content/drafts/download.md Thu Aug 22 05:13:40 2019 +0000
    +++ b/hugo/content/drafts/download.md Fri Aug 23 08:35:30 2019 +0000
    @@ -19,15 +19,23 @@
    [![](/images/download.png)](http://sourceforge.net/projects/pidgin/files/Pidgin/2.13.0/pidgin-2.13.0.exe/download?accel_key=62%3Aa4c0d8b6-1952-11e9-abae-525400fc71c5&click_id=a4c154bc-1952-11e9-abae-525400fc71c5&source=accel)
    -This version of Pidgin downloads an appropriate version of GTK. GTK is now installed locally for Pidgin, and not system-wide, thus Pidgin will not interfere with other GTK apps on your system.
    +This version of Pidgin downloads an appropriate version of GTK. GTK is now
    +installed locally for Pidgin, and not system-wide, thus Pidgin will not
    +interfere with other GTK apps on your system.
    -If you would like to have GTK included in the installer, we have an [offline installer](http://sourceforge.net/projects/pidgin/files/Pidgin/2.13.0/pidgin-2.13.0-offline.exe/download) that bundles everything except spell-checking dictionaries.
    +If you would like to have GTK included in the installer, we have an [offline
    +installer](https://sourceforge.net/projects/pidgin/files/Pidgin/2.13.0/pidgin-2.13.0-offline.exe/download)
    +that bundles everything except spell-checking dictionaries.
    ## Linux
    -We do not provide pre-built packages for Linux and Unix distributions. We recommend installing Pidgin using your operating system's standard package management tool.
    +We do not provide pre-built packages for Linux and Unix distributions. We
    +recommend installing Pidgin using your operating system's standard package
    +management tool.
    -If your operating system doesn't provide a pre-built package, or if their pre-built package is out of date and you want to upgrade, then you can try [building from source](#Source).
    +If your operating system doesn't provide a pre-built package, or if their
    +pre-built package is out of date and you want to upgrade, then you can try
    +[building from source](#Source).
    ### Debian/Ubuntu
    @@ -44,29 +52,46 @@
    ## macOS
    -For a native Mac OS X experience we recommend [Adium](http://adium.im/), which uses libpurple (the core of Pidgin) for much of its protocol support.
    +For a native Mac OS X experience we recommend [Adium](https://adium.im/), which
    +uses libpurple (the core of Pidgin) for much of its protocol support.
    -If you're sure you want to use Pidgin on OS X, you may find the packages provided through [Homebrew](http://brew.sh/), [Fink](http://finkproject.org/download/) or [Macports](https://www.macports.org/install.php) more convenient than compiling from source. Please note, *we do not provide support for issues related to installing Homebrew, Fink, Macports, or their packages of Pidgin*. Contact those projects directly with questions or concerns.
    +If you're sure you want to use Pidgin on OS X, you may find the packages
    +provided through [Homebrew](https://brew.sh/),
    +[Fink](https://finkproject.org/download/) or
    +[Macports](https://www.macports.org/install.php) more convenient than compiling
    +from source. Please note, *we do not provide support for issues related to
    +installing Homebrew, Fink, Macports, or their packages of Pidgin*. Contact those
    +projects directly with questions or concerns.
    -If you're sure you want to use Pidgin on OS X and you don't want to use Homebrew, Fink or Macports, you can [download the Pidgin source](https://pidgin.im/download/source/) and compile.
    +If you're sure you want to use Pidgin on OS X and you don't want to use
    +Homebrew, Fink or Macports, you can [download the Pidgin
    +source](https://pidgin.im/download/source/) and compile.
    ## Source
    -[![](/images/download.png)](http://sourceforge.net/projects/pidgin/files/Pidgin/2.13.0/pidgin-2.13.0.tar.bz2/download?accel_key=62%3Abd2389f8-1952-11e9-9fd1-5254004ddb8f&click_id=bd238c5a-1952-11e9-9fd1-5254004ddb8f&source=accel)
    +[![](/images/download.png)](https://sourceforge.net/projects/pidgin/files/Pidgin/2.13.0/pidgin-2.13.0.tar.bz2/download?accel_key=62%3Abd2389f8-1952-11e9-9fd1-5254004ddb8f&click_id=bd238c5a-1952-11e9-9fd1-5254004ddb8f&source=accel)
    This download is for the source code of Pidgin 2.13.0.
    -If you want to **use** Pidgin, you should either download and use our Windows installer or look for pre-built packages from your operating system distribution.
    +If you want to **use** Pidgin, you should either download and use our Windows
    +installer or look for pre-built packages from your operating system
    +distribution.
    -If you are looking to **modify** Pidgin, you may want to look at our [instructions for checking out the code from our repository](https://developer.pidgin.im/wiki/UsingPidginMercurial).
    +If you are looking to **modify** Pidgin, you may want to look at our
    +[instructions for checking out the code from our
    +repository](https://developer.pidgin.im/wiki/UsingPidginMercurial).
    # Finch
    ## Linux
    -We do not provide pre-built packages for Linux and Unix distributions. We recommend installing Pidgin using your operating system's standard package management tool.
    +We do not provide pre-built packages for Linux and Unix distributions. We
    +recommend installing Pidgin using your operating system's standard package
    +management tool.
    -If your operating system doesn't provide a pre-built package, or if their pre-built package is out of date and you want to upgrade, then you can try [building from source](#Source).
    +If your operating system doesn't provide a pre-built package, or if their
    +pre-built package is out of date and you want to upgrade, then you can try
    +[building from source](#Source).
    ### Debian/Ubuntu
    --- a/hugo/content/drafts/release-process.md Thu Aug 22 05:13:40 2019 +0000
    +++ b/hugo/content/drafts/release-process.md Fri Aug 23 08:35:30 2019 +0000
    @@ -7,14 +7,22 @@
    lastmod: 2019-03-17T23:05:38.000Z
    ---
    -The release process for Pidgin is kind of tedious but is described in great detail below.
    +The release process for Pidgin is kind of tedious but is described in great
    +detail below.
    ## String Freeze
    -A string freeze should be announced about a week before each release, or longer if a large number of strings have changed. This is a guarantee from the developers to the translators that no more strings will be added or changed so that the translators aren't trying to hit a moving target.
    +A string freeze should be announced about a week before each release, or longer
    +if a large number of strings have changed. This is a guarantee from the
    +developers to the translators that no more strings will be added or changed so
    +that the translators aren't trying to hit a moving target.
    - 1. In a clean workspace, cd into the `po/`` directory and run `intltool-update --maintain`. This will print warnings if there are files that need to be added to either POTFILES.in or POTFILES.skip:
    - 1. Make sure the newest pidgin.pot exists at [Transifex](https://www.transifex.com/projects/p/pidgin/resources/)
    - 1. Send an email to translators@pidgin.im and devel@pidgin.im announcing the string freeze.
    + 1. In a clean workspace, cd into the `po/` directory and run `intltool-update
    + --maintain`. This will print warnings if there are files that need to be
    + added to either POTFILES.in or POTFILES.skip:
    + 1. Make sure the newest pidgin.pot exists at
    + [Transifex](https://www.transifex.com/projects/p/pidgin/resources/)
    + 1. Send an email to translators@pidgin.im and devel@pidgin.im announcing the
    + string freeze.
    ## Pre-Release
    @@ -22,31 +30,51 @@
    **Background**
    -Transifex is configured to automatically pull `pidgin.pot` from https://developer.pidgin.im/l10n/. When it gets a new `pidgin.pot` it merges the updates to all translations and bumps the "last updated" timestamp. Because of this it's difficult to tell which translations have updates from translators. Because of this we fetch and commit ***all*** translations from Transifex before releasing.
    +Transifex is configured to automatically pull `pidgin.pot` from
    +https://developer.pidgin.im/l10n/. When it gets a new `pidgin.pot` it merges the
    +updates to all translations and bumps the "last updated" timestamp. Because of
    +this it's difficult to tell which translations have updates from translators.
    +Because of this we fetch and commit ***all*** translations from Transifex before
    +releasing.
    **Note**
    -Ask Gary Kramlich or Richard Laager if you need administrative access to [Pidgin's Transifex project](https://www.transifex.com/projects/p/pidgin/resources/) for the following steps.
    +Ask Gary Kramlich or Richard Laager if you need administrative access to
    +[Pidgin's Transifex
    +project](https://www.transifex.com/projects/p/pidgin/resources/) for the
    +following steps.
    **Steps**
    1. Fetch and commit all translations from Transifex.
    - 1. `cd po`
    - 1. `make pidgin.pot`
    - 1. `tx pull --force` - Pulls all translations from Transifex, even if local timestamp is newer than remote.
    - 1. `XGETTEXT_ARGS=--no-location intltool-update --report` - Merges current strings into translations and strips filename and line numbers to keep diffs smaller.
    - 1. `find -name \*.po -exec msgfmt -cv {} \;` - Check for mismatched c-format specifiers. These can cause crashes so look at the output carefully! If any are found, follow these steps:
    - 1. Edit the translation in Transifex.
    - 1. Remove the string with the mismatched c-format specifiers (leave it blank).
    - 1. `tx pull --force --language=NN` - Pull the updated translation from Transifex.
    + 1. `cd po`
    + 1. `make pidgin.pot`
    + 1. `tx pull --force` - Pulls all translations from Transifex, even if local
    + timestamp is newer than remote.
    + 1. `XGETTEXT_ARGS=--no-location intltool-update --report` - Merges current
    + strings into translations and strips filename and line numbers to keep
    + diffs smaller.
    + 1. `find -name \*.po -exec msgfmt -cv {} \;` - Check for mismatched c-format
    + specifiers. These can cause crashes so look at the output carefully!
    + If any are found, follow these steps:
    + 1. Edit the translation in Transifex.
    + 1. Remove the string with the mismatched c-format specifiers (leave it
    + blank).
    + 1. `tx pull --force --language=NN` - Pull the updated translation from
    + Transifex.
    **Other Pre-Release Steps**
    - 1. Make sure list of translators in `pidgin/gtkdialogs.c` matches the Transifex translations teams. (TODO: This is labor intensive and error prone. Should find a way to automate.)
    + 1. Make sure list of translators in `pidgin/gtkdialogs.c` matches the Transifex
    + translations teams. (TODO: This is labor intensive and error prone. Should find a way to automate.)
    1. Check there are no open tickets for this release milestone
    - 1. Make sure the date and version number are correct in ChangeLog and ChangeLog.API
    - 1. Change version number at the top of configure.ac, set `purple_version_suffix` ***and*** `gnt_version_suffix` to `[betaN]` for betas and `[]` for a full release
    - 1. Check `pidgin.spec.in`, make sure that `%define beta 7` is commented/uncommented appropriately
    + 1. Make sure the date and version number are correct in `ChangeLog` and
    + `ChangeLog.API`
    + 1. Change version number at the top of configure.ac, set
    + `purple_version_suffix` ***and*** `gnt_version_suffix` to `[betaN]` for
    + betas and `[]` for a full release
    + 1. Check `pidgin.spec.in`, make sure that `%define beta 7` is
    + commented/uncommented appropriately
    1. Run `make distcheck` and fix any problems it turns up
    1. Test a tarball to make sure everything works
    1. Verify that win32 builds succeed (including building installers).
    @@ -57,24 +85,37 @@
    1. Extract the tagged code `hg archive -r $TAG ../pidgin-$VERSION`.
    1. `cd ../pidgin-$VERSION`
    1. Run `./autogen.sh`
    - 1. Run `make release`: This will perform the following steps (which can also be done by hand at this point):
    - 1. `make commit-check` - Checks a few files for correctness (UTF-8 encoding, sort order, etc.).
    - 1. `make version-check` - Make sure version string does not contain "dev," version is correct in ChangeLogs, and we're building from a clean hg tag.
    - 1. `make distcheck` - Standard automake target. Builds and verifies tarballs. If "distcheck" fails and you're sure the failure is innocuous then you can use `make dist`, instead.
    - 1. `make sign-packages` - Creates a gpg signature of the two tarballs.
    + 1. Run `make release`: This will perform the following steps (which can also be
    + done by hand at this point):
    + 1. `make commit-check` - Checks a few files for correctness (UTF-8 encoding,
    + sort order, etc.).
    + 1. `make version-check` - Make sure version string does not contain "dev,"
    + version is correct in ChangeLogs, and we're building from a clean hg tag.
    + 1. `make distcheck` - Standard automake target. Builds and verifies
    + tarballs. If "distcheck" fails and you're sure the failure is innocuous
    + then you can use `make dist`, instead.
    + 1. `make sign-packages` - Creates a gpg signature of the two tarballs.
    1. [wiki:BuildingWinPidgin Build on Windows]
    - 1. If there's a new GTK Bundle, upload the zip file to [Sourceforge](https://sourceforge.net/projects/pidgin/files/Pidgin/) and make sure that the `BUNDLE_SHA1SUM` in `pidgin/win32/nsis/generate_gtk_zip.sh` is correct (this should have been checked before `make release`).
    - 1. Check the authenticode signature and timestamp for the installers (unfortunately needs to be done on a Windows box with the Platform SDK installed)
    + 1. If there's a new GTK Bundle, upload the zip file to
    + [Sourceforge](https://sourceforge.net/projects/pidgin/files/Pidgin/) and
    + make sure that the `BUNDLE_SHA1SUM` in
    + `pidgin/win32/nsis/generate_gtk_zip.sh` is correct (this should have been
    + checked before `make release`).
    + 1. Check the authenticode signature and timestamp for the installers
    + (unfortunately needs to be done on a Windows box with the Platform SDK
    + installed)
    signtool.exe verify /pa /tw pidgin-$VERSION-offline.exe
    signtool.exe verify /pa /tw pidgin-$VERSION.exe
    - 1. Install `pidgin-$VERSION-offline.exe` and check the authenticode signature and timestamp of pidgin.exe
    + 1. Install `pidgin-$VERSION-offline.exe` and check the authenticode signature
    + and timestamp of pidgin.exe
    signtool.exe verify /pa /tw %ProgramFiles(x86)%\Pidgin\pidgin.exe
    1. `hg push` the tag.
    - 1. Upload the two tarballs, the two signatures, and the Windows builds to [Sourceforge](https://sourceforge.net/projects/pidgin/files/Pidgin/)
    + 1. Upload the two tarballs, the two signatures, and the Windows builds to
    + [Sourceforge](https://sourceforge.net/projects/pidgin/files/Pidgin/)
    1. Wait a few hours and let people test.
    1. Build and upload new API docs.
    1. Run `make` locally?
    @@ -83,16 +124,23 @@
    4. `scp docs/reference/finch/html nicobar.pidgin.im:/srv/www/developer.pidgin.im/doxygen/x.y.z/finch/`
    1. Update the Pidgin website
    1. Change `inc/version.inc.php` (only for full releases, not for betas)
    - 2. Update the ChangeLog in https://bitbucket.org/pidgin/www/ (this is used by the release notification plugin)
    - 1. Send announcement email to announce and packagers mailing lists (sending to announce also sends to support and devel)
    - * Someone must approve the posts in the [support](https://pidgin.im/cgi-bin/mailman/admindb/support) and [devel](https://pidgin.im/cgi-bin/mailman/admindb/devel) admin interface.
    + 2. Update the ChangeLog in https://bitbucket.org/pidgin/www/ (this is used
    + by the release notification plugin)
    + 1. Send announcement email to announce and packagers mailing lists (sending to
    + announce also sends to support and devel)
    + * Someone must approve the posts in the
    + [support](https://pidgin.im/cgi-bin/mailman/admindb/support) and
    + [devel](https://pidgin.im/cgi-bin/mailman/admindb/devel) admin interface.
    ## Post Release
    - 1. Increment version number in `configure.ac` & set `purple_version_suffix`and `gnt_version_suffix` to `devel`
    + 1. Increment version number in `configure.ac` & set `purple_version_suffix` and
    + `gnt_version_suffix` to `devel`
    1. Update `#pidgin` topic
    1. Add new Trac Version for this release
    1. Add new Trac milestone for the next release
    1. "Complete" old milestone
    - 1. Bump the auto-close script to target auto-closed bugs to the new milestone (/srv/trac/developer.pidgin.im/mercurial_support/trac-hg-post-commit-hook.py on nicobar.pidgin.im)
    + 1. Bump the auto-close script to target auto-closed bugs to the new milestone
    + (`/srv/trac/developer.pidgin.im/mercurial_support/trac-hg-post-commit-hook.py`
    + on nicobar.pidgin.im)
    1. Update "The Road to" on WikiStart to list tickets for the new version
    --- a/hugo/content/drafts/voice-and-video-API.md Thu Aug 22 05:13:40 2019 +0000
    +++ b/hugo/content/drafts/voice-and-video-API.md Fri Aug 23 08:35:30 2019 +0000
    @@ -6,7 +6,9 @@
    lastmod: 2019-03-17T23:11:17.000Z
    ---
    -For functions that could be per conference, session, participant, or stream, they would have a session and a participant parameter. A NULL for either of these would be a wildcard.
    +For functions that could be per conference, session, participant, or stream,
    +they would have a session and a participant parameter. A NULL for either of
    +these would be a wildcard.
    ### PurpleMediaManager?
    @@ -48,7 +50,9 @@
    #### Functions
    -All of these functions will have parameters for session_id and participant_id NULL for either of these would indicate a wildcard and do this operation for all matching streams
    +All of these functions will have parameters for session_id and participant_id
    +NULL for either of these would indicate a wildcard and do this operation for all
    +matching streams
    ```
    *_add_stream # Adds a stream/session/participant to the conference, automatically creates participants and FsSessions as necessary
    @@ -75,7 +79,8 @@
    state-changed # Has an enum state (containing such states as connected, end, and ice-specific values) Signals for stream/session/participant/conference
    ```
    -More signals may be necessary for different protocols. Jingle ice-udp may also need a new-candidate and/or new-candidate-pair and a codecs-changed equivalent
    +More signals may be necessary for different protocols. Jingle ice-udp may also
    +need a new-candidate and/or new-candidate-pair and a codecs-changed equivalent
    #### Get
    --- a/hugo/content/drafts/voice-and-video.md Thu Aug 22 05:13:40 2019 +0000
    +++ b/hugo/content/drafts/voice-and-video.md Fri Aug 23 08:35:30 2019 +0000
    @@ -8,67 +8,72 @@
    ## Voice and Video
    -Voice and video in libPurple is being worked on using [​Farstream](http://www.freedesktop.org/wiki/Software/Farstream/) (formerly Farsight). There are a few parts to this implementation. Firstly, basic API support needs to be added to libPurple. Then Pidgin and Finch need to be able to initiate, participate in, and terminate the voice and video sessions. After these two requirements are met, each protocol will require both the signaling to be implemented (such as SIP or Jingle) and the proper Farstream plugins.
    +Voice and video in libPurple is being worked on using
    +[​Farstream](https://www.freedesktop.org/wiki/Software/Farstream/) (formerly
    +Farsight). There are a few parts to this implementation. Firstly, basic API
    +support needs to be added to libPurple. Then Pidgin and Finch need to be able to
    +initiate, participate in, and terminate the voice and video sessions. After
    +these two requirements are met, each protocol will require both the signaling to
    +be implemented (such as SIP or Jingle) and the proper Farstream plugins.
    -Farstream has rawudp, iceudp, and multicast transmitter plugins and an MSN webcam plugin. Basic voice and video support for libPurple, Pidgin, and Finch (voice support only) have been added to the im.pidgin.pidgin development branch. XMPP/GTalk/Gmail is working, but not complete. None of the other protocols have had much work done.
    +Farstream has rawudp, iceudp, and multicast transmitter plugins and an MSN
    +webcam plugin. Basic voice and video support for libPurple, Pidgin, and Finch
    +(voice support only) have been added to the "default" development branch.
    +XMPP/GTalk/Gmail is working, but not complete. None of the other protocols have
    +had much work done.
    ### Protocol Specific Information
    #### XMPP/GTalk
    -XMPP, GTalk, and Gmail use RTP. XMPP uses Jingle. GTalk and Gmail use their own flavor of Jingle. XMPP uses rawudp and XMPP, GTalk, and Gmail use the libnice Farstream transmitter plugin.
    -
    -Voice and video support for XMPP/GTalk was worked on for a [Summer of Code project](/wiki/GSoC2008/VoiceAndVideo)
    -
    -#### MSN
    -
    -MSN has several different voice and video types:
    -
    -- MSN Audio Conference (WLM 2009)
    -- MSN Video Conference (WLM 2009. Includes audio. Allows the h263 codec)
    -- MSN Audio Conference (pre-WLM 2009. Sometimes works with WLM2009)
    -- MSN Video Conference (pre-WLM 2009. Sometimes works with WLM2009. Includes audio. Only uses the wmv3 codec for which there is no open source encoder/GStreamer element)
    -- MSN Webcam
    +XMPP, GTalk, and Gmail use RTP. XMPP uses Jingle. GTalk and Gmail use their own
    +flavor of Jingle. XMPP uses rawudp and XMPP, GTalk, and Gmail use the libnice
    +Farstream transmitter plugin.
    -A Farsight2 plugin for MSN Webcam has been released.
    -
    -[​http://imfreedom.org/wiki/MSN:AV](http://imfreedom.org/wiki/MSN:AV) has more information about the protocol.
    -
    -#### Oscar (AIM, iChat, ICQ)
    -
    -All Oscar protocols use RTP and SIP.
    -
    -#### Yahoo
    -
    -Yahoo voice uses straight SIP. It binds to the SIP server upon login and sends INVITEs as necessary.
    -
    -Yahoo webcam uses the JPEG2000 codec with proprietary transport and signalling. The old Farsight Yahoo plugin will need to be ported to the new Farstream API.
    +Voice and video support for XMPP/GTalk was worked on for a [Summer of Code
    +project](/wiki/GSoC2008/VoiceAndVideo)
    #### Sametime
    -Sametime seems to support at least voice chat [​http://publib.boulder.ibm.com/infocenter/sametime/v8r0/index.jsp?topic=/com.ibm.help.sametime.standard.doc/st_adm_avserv_aboutvoicechat_r.html](http://publib.boulder.ibm.com/infocenter/sametime/v8r0/index.jsp?topic=/com.ibm.help.sametime.standard.doc/st_adm_avserv_aboutvoicechat_r.html)
    +Sametime seems to support at least voice chat according to
    +[​this IBM document](http://publib.boulder.ibm.com/infocenter/sametime/v8r0/index.jsp?topic=/com.ibm.help.sametime.standard.doc/st_adm_avserv_aboutvoicechat_r.html)
    #### Gadu-gadu
    -This is a placeholder for information regarding GG voice An announcement that might be of interest: [​http://www.finanznachrichten.de/nachrichten-2008-10/12104971-global-ip-solutions-ab-gadu-gadu-launches-new-version-of-instant-messenger-with-excellent-voice-powered-by-gips-004.htm](http://www.finanznachrichten.de/nachrichten-2008-10/12104971-global-ip-solutions-ab-gadu-gadu-launches-new-version-of-instant-messenger-with-excellent-voice-powered-by-gips-004.htm)
    +This is a placeholder for information regarding GG voice.
    +
    +[An announcement that might be of
    +interest](http://www.finanznachrichten.de/nachrichten-2008-10/12104971-global-ip-solutions-ab-gadu-gadu-launches-new-version-of-instant-messenger-with-excellent-voice-powered-by-gips-004.htm)
    ### Building with Voice and Video
    -Please be familiar with compiling and installing code from source. Please also submit any bugs you find to Trac ([TipsForBugReports](/wiki/TipsForBugReports)).
    +Please be familiar with compiling and installing code from source. Please also
    +submit any bugs you find to Trac ([TipsForBugReports](/wiki/TipsForBugReports)).
    Make sure you are using the latest release of Pidgin.
    -Farsight 2 0.0.9 and libNice 0.0.7 are the minimum versions required, but the newest versions you can get are best. Make sure to check Farsight2's README and make sure you have all of the dependencies for it. gst-plugins-base is also required for the gstreamer-interfaces-0.10 interface. Some distros call it libgstreamer-plugins-base0.10-dev. If everything in order, the configure script should output this line:
    +Farsight 2 0.0.9 and libNice 0.0.7 are the minimum versions required, but the
    +newest versions you can get are best. Make sure to check Farsight2's README and
    +make sure you have all of the dependencies for it. gst-plugins-base is also
    +required for the gstreamer-interfaces-0.10 interface. Some distros call it
    +libgstreamer-plugins-base0.10-dev. If everything in order, the configure script
    +should output this line:
    > Build with voice and video.... yes
    -For help with building, see [Installing Pidgin](/wiki/Installing%20Pidgin#Compiling). Please carefully read through that section and any extra information for the distribution you're using.
    +For help with building, see
    +[Installing Pidgin](/wiki/Installing%20Pidgin#Compiling). Please carefully
    +read through that section and any extra information for the distribution you're
    +using.
    #### Codec Configuration
    -If a certain codec isn't working for you, you need to create an "fs-codec.conf" file in your purple config directory. See this for the specification: [​fs-codec-list-from-keyfile](http://farsight.freedesktop.org/apidoc/farsight2/farsight2-libs-FsCodec.html#fs-codec-list-from-keyfile)
    +If a certain codec isn't working for you, you need to create an "fs-codec.conf"
    +file in your purple config directory. See this for the specification:
    +[​fs-codec-list-from-keyfile](https://www.freedesktop.org/software/farstream/apidoc/farstream/farstream-libs-FsCodec.html#fs-codec-list-from-keyfile)
    -So, for example, if you want to disable the MPV codec you'd put this in the fs-codec.conf file:
    +So, for example, if you want to disable the MPV codec you'd put this in the
    +fs-codec.conf file:
    ```
    [video/mpv]
    --- a/hugo/content/gsoc/ideas.md Thu Aug 22 05:13:40 2019 +0000
    +++ b/hugo/content/gsoc/ideas.md Fri Aug 23 08:35:30 2019 +0000
    @@ -7,13 +7,23 @@
    lastmod: 2019-03-17T23:05:38.000Z
    ---
    -These ideas are starting points for Google Summer of Code projects that the Pidgin, Finch, and libpurple community has agreed are generally desirable and high impact. For smaller projects, community-submitted ideas, or projects that for some reason we are not sure are in scope for SoC, please see [wiki:SoCAndBountyIdeas]. (You can submit SoC proposals with those ideas, or your own ideas, as well, you just have to convince us they're suitable!)
    +These ideas are starting points for Google Summer of Code projects that the
    +Pidgin, Finch, and libpurple community has agreed are generally desirable and
    +high impact. For smaller projects, community-submitted ideas, or projects that
    +for some reason we are not sure are in scope for SoC, please see
    +[wiki:SoCAndBountyIdeas]. (You can submit SoC proposals with those ideas, or
    +your own ideas, as well, you just have to convince us they're suitable!)
    ## Protocol-specific ideas
    ### Encryption for XMPP
    -libpurple supports no native end-to-end encryption over XMPP. There are several XEP's for this, and there is absolutely room for a new protocol that is better/easier/more secure/whatever than the existing proposals. See [wiki:EndToEndXMPPCrypto] and talk to [wiki:elb Ethan Blanton]. Note that designing a new protocol would **absolutely** require getting some crypto gurus on board!
    +libpurple supports no native end-to-end encryption over XMPP. There are several
    +XEP's for this, and there is absolutely room for a new protocol that is
    +better/easier/more secure/whatever than the existing proposals. See
    +[wiki:EndToEndXMPPCrypto] and talk to [wiki:elb Ethan Blanton]. Note that
    +designing a new protocol would **absolutely** require getting some crypto gurus
    +on board!
    ## XMPP Modernization
    @@ -24,7 +34,12 @@
    ## New Protocol Plugins
    -There are new IM protocols all the time, and some of them even get popular. If you have a favorite IM protocol, you can propose implementing it. The bar here is high, though! You need to convince us not only that it is desirable and that you can do it, but that it will be maintainable; that means that there needs to be a plausible community to maintain it (maybe you?) after the summer is over. Convince us that will happen in your proposal.
    +There are new IM protocols all the time, and some of them even get popular. If
    +you have a favorite IM protocol, you can propose implementing it. The bar here
    +is high, though! You need to convince us not only that it is desirable and that
    +you can do it, but that it will be maintainable; that means that there needs to
    +be a plausible community to maintain it (maybe you?) after the summer is over.
    +Convince us that will happen in your proposal.
    ## Twitch Plugin
    @@ -35,40 +50,85 @@
    ### Update more things to the Modern Way
    -We are replacing as many parts of libpurple and Pidgin with modern library-provided functionality as feasible for 3.0. For example, we have ripped out our custom DNS infrastructure and replaced it with GIO DNS that did not exist when our infrastructure was written. There's still a lot left to do here. For example, we do not use the GTK icon infrastructure everywhere. Talk to Michael McConville about some things he identified during his 2015 Maintenance Hero project.
    +We are replacing as many parts of libpurple and Pidgin with modern
    +library-provided functionality as feasible for 3.0. For example, we have ripped
    +out our custom DNS infrastructure and replaced it with GIO DNS that did not
    +exist when our infrastructure was written. There's still a lot left to do here.
    + For example, we do not use the GTK icon infrastructure everywhere. Talk to
    +Michael McConville about some things he identified during his 2015 Maintenance
    +Hero project.
    ### Tests and proof of functionality
    -libpurple has always had an anemic test suite. Part of this is that it's hard to test the protocol plugins, as we cannot hammer the official servers and we do not have our own implementations of the protocols. Even where we do (such as XMPP), that doesn't mean the existing servers are appropriate for testing. Propose a set of tests that you think can be applied to the codebase and (ideally) run automatically.
    +libpurple has always had an anemic test suite. Part of this is that it's hard
    +to test the protocol plugins, as we cannot hammer the official servers and we do
    +not have our own implementations of the protocols. Even where we do (such as
    +XMPP), that doesn't mean the existing servers are appropriate for testing.
    +Propose a set of tests that you think can be applied to the codebase and
    +(ideally) run automatically.
    -[wiki:grim Gary Kramlich] has an idea for a coordinated testing plugin and server that would effectively run scripts implementing client-server interaction unit tests for specific functionality. The idea is that server scripts emulating specific activities (e.g., successful login or an authentication failure at login) would be started by a plugin in a libpurple client, which would then attempt that activity and check for the expected result on the client side.
    +[wiki:grim Gary Kramlich] has an idea for a coordinated testing plugin and
    +server that would effectively run scripts implementing client-server
    +interaction unit tests for specific functionality. The idea is that server
    +scripts emulating specific activities (e.g., successful login or an
    +authentication failure at login) would be started by a plugin in a libpurple
    +client, which would then attempt that activity and check for the expected
    +result on the client side.
    ### Better UI
    -Pidgin has historically led the way in instant messaging UI design. Several Pidgin behaviors have gone on to become ubiquitous. That said, our UI has stagnated over the years, and it seems like IM UI in general has not done much in recent history. Propose something novel and interesting and convince us people would want it - or at least that it's worth seeing if they will. We're not necessarily looking for crazy or off the wall, but we **are** looking for plausibly better.
    +Pidgin has historically led the way in instant messaging UI design. Several
    +Pidgin behaviors have gone on to become ubiquitous. That said, our UI has
    +stagnated over the years, and it seems like IM UI in general has not done much
    +in recent history. Propose something novel and interesting and convince us
    +people would want it - or at least that it's worth seeing if they will. We're
    +not necessarily looking for crazy or off the wall, but we **are** looking for
    +plausibly better.
    ## Internals
    ### Code hardening
    -libpurple has a large amount of network-facing C code, which makes it a big target. Code hardening, security auditing, and elimination of common errors have the potential to be a big win affecting a lot of users. libpurple 3.0 also offers us an interesting opportunity in that it **should** make possible protocol plugins written in a VHLL, which would reduce entire classes of vulnerabilities significantly. Propose some specific hardening or auditing activities to improve the code quality of libpurple or a libpurple client.
    +libpurple has a large amount of network-facing C code, which makes it a big
    +target. Code hardening, security auditing, and elimination of common errors
    +have the potential to be a big win affecting a lot of users. libpurple 3.0 also
    +offers us an interesting opportunity in that it **should** make possible
    +protocol plugins written in a VHLL, which would reduce entire classes of
    +vulnerabilities significantly. Propose some specific hardening or auditing
    +activities to improve the code quality of libpurple or a libpurple client.
    ### User Highlighting and Name Completion
    -Pidgin implements a very basic form of name completion which doesn't work with some of the newer protocols (namely Hipchat which has a distinction between highlight names and display names). This project is to create an interface for protocol plugins to expose what is complete-able as well as implement an API in libpurple that will be used by the user interfaces.
    +Pidgin implements a very basic form of name completion which doesn't work with
    +some of the newer protocols (namely Hipchat which has a distinction between
    +highlight names and display names). This project is to create an interface for
    +protocol plugins to expose what is complete-able as well as implement an API in
    +libpurple that will be used by the user interfaces.
    -Also, some of the new protocols have added additional highlights (that should be complete-able) and cause the user to be notified (blue tab in Pidgin). Examples of the additional highlights are @here and @all in Hipchat, and @channel in Slack.
    +Also, some of the new protocols have added additional highlights (that should be
    +complete-able) and cause the user to be notified (blue tab in Pidgin). Examples
    +of the additional highlights are @here and @all in Hipchat, and @channel in
    +Slack.
    ## Advanced Features
    ### Screen sharing
    -Many modern messenger protocols have the capability of sharing the user's screen, with or without remote control. While this can be dangerous, viewing a shared desktop or sharing the local desktop is interesting to many users, particularly in managed environments. The maintainers of the purple SIPE protocol have implemented RDP sharing over Lync, and are interested in helping Pidgin/libpurple adopt a protocol-agnostic interface for screen sharing as well as working with us to get XMPP screen sharing capabilities in place.
    +Many modern messenger protocols have the capability of sharing the user's
    +screen, with or without remote control. While this can be dangerous, viewing a
    +shared desktop or sharing the local desktop is interesting to many users,
    +particularly in managed environments. The maintainers of the purple SIPE
    +protocol have implemented RDP sharing over Lync, and are interested in helping
    +Pidgin/libpurple adopt a protocol-agnostic interface for screen sharing as well
    +as working with us to get XMPP screen sharing capabilities in place.
    ## Supporting Tools
    ### Canary
    -A libpurple UI that watches the status of the IM networks and reports it back to a reporting server. The clients would attempt to stay connected to the network and report on a set interval. Ideally there would be many of these running all over the world all reporting to a redundant server.
    +A libpurple UI that watches the status of the IM networks and reports it back to
    +a reporting server. The clients would attempt to stay connected to the network
    +and report on a set interval. Ideally there would be many of these running all
    +over the world all reporting to a redundant server.
    ## Plugin Website
    --- a/hugo/content/gsoc/instructions.md Thu Aug 22 05:13:40 2019 +0000
    +++ b/hugo/content/gsoc/instructions.md Fri Aug 23 08:35:30 2019 +0000
    @@ -7,33 +7,76 @@
    lastmod: 2019-03-17T23:05:38.000Z
    ---
    -Our project has historically allowed a wide variety of applications on topics both solicited and unsolicited, and we do not intend to change this policy. However, every application must meet some criteria, which we have set out here, to be considered.
    +Our project has historically allowed a wide variety of applications on topics
    +both solicited and unsolicited, and we do not intend to change this policy.
    +However, every application must meet some criteria, which we have set out here,
    +to be considered.
    ## Applicant credentials
    -The application should demonstrate (by reference to previous projects, completed coursework, job experience, description, etc.) that the applicant possesses the following skills:
    +The application should demonstrate (by reference to previous projects, completed
    +coursework, job experience, description, etc.) that the applicant possesses the
    +following skills:
    - * Competence in programming in the applicable language for the task at hand. For Pidgin, Finch, or libpurple themselves this means C.
    - * An ability to effectively communicate, via written language, technical topics and precise thoughts.
    + * Competence in programming in the applicable language for the task at hand.
    + For Pidgin, Finch, or libpurple themselves this means C.
    + * An ability to effectively communicate, via written language, technical topics
    + and precise thoughts.
    ## Project description
    -Every application must describe the project the applicant intends to pursue. While this may *contain* information from our ideas page or other online sources, it must *primarily* consist of the applicant's own words and plans. It should include:
    +Every application must describe the project the applicant intends to pursue.
    +While this may *contain* information from our ideas page or other online
    +sources, it must *primarily* consist of the applicant's own words and plans. It
    +should include:
    * A description of the general task to be completed
    - * The applicant's estimate of the skills required to complete the task, particularly noting those skills that will need to be developed during the course of the project. Note that *it is absolutely fine* if the applicant, for example, is unfamiliar with a library or protocol necessary to complete the project, if they can demonstrate that they understand what needs to be learned and how that learning will be approached.
    - * A general timeline of the project as envisioned, with a breakdown including major milestones (e.g., "necessary UI infrastructure", "supporting changes to protocol X", "draft specification for Y").
    + * The applicant's estimate of the skills required to complete the task,
    + particularly noting those skills that will need to be developed during the
    + course of the project. Note that *it is absolutely fine* if the applicant,
    + for example, is unfamiliar with a library or protocol necessary to complete
    + the project, if they can demonstrate that they understand what needs to be
    + learned and how that learning will be approached.
    + * A general timeline of the project as envisioned, with a breakdown including
    + major milestones (e.g., "necessary UI infrastructure", "supporting changes to
    + protocol X", "draft specification for Y").
    -Note that project applications **need not be for projects from our ideaspage**. If you have a great idea for a project, that's fine, propose it! Just be sure to describe what it is, why you can do it, and how you plan to accomplish it within the summer.
    +Note that project applications **need not be for projects from our ideas page**.
    +If you have a great idea for a project, that's fine, propose it! Just be sure
    +to describe what it is, why you can do it, and how you plan to accomplish it
    +within the summer.
    ## External factors
    -If a project or applicant has any external factors that the project should be aware of, those must be spelled out explicitly along with an explanation of how the project will be affected if those factors fail to come through or otherwise interfere. For example, if a project depends on a third-party library that is known to have limitations that may affect the success of the project, the application should describe those limitations and how they will be mitigated if they get in the way. Something like this would be appropriate:
    +If a project or applicant has any external factors that the project should be
    +aware of, those must be spelled out explicitly along with an explanation of how
    +the project will be affected if those factors fail to come through or otherwise
    +interfere. For example, if a project depends on a third-party library that is
    +known to have limitations that may affect the success of the project, the
    +application should describe those limitations and how they will be mitigated if
    +they get in the way. Something like this would be appropriate:
    -> I plan to use libfoo 3.1 to implement a foo protocol plugin, but it doesn't yet support a pluggable main loop, which libpurple requires. The libfoo developers intend to address that, but if they do not address it by midsummer, I will implement it myself and submit a patch upstream. If this happens, I probably will not be able to complete the extended frobnicator API in libpurple, but the project will still successfully speak the foo protocol by the end of the summer.
    +> I plan to use libfoo 3.1 to implement a foo protocol plugin, but it doesn't
    +yet support a pluggable main loop, which libpurple requires. The libfoo
    +developers intend to address that, but if they do not address it by midsummer, I
    +will implement it myself and submit a patch upstream. If this happens, I
    +probably will not be able to complete the extended frobnicator API in libpurple,
    +but the project will still successfully speak the foo protocol by the end of the
    +summer.
    -Any potential major demands on the student's time MUST be included, such as: finals (we know that not all school schedules line up with SoC precisely, and this will absolutely not disqualify an application!), scheduled vacations or holidays, existing summer commitments for work or school, potentially conflicting job applications, etc.
    +Any potential major demands on the student's time MUST be included, such as:
    +finals (we know that not all school schedules line up with SoC precisely, and
    +this will absolutely not disqualify an application!), scheduled vacations or
    +holidays, existing summer commitments for work or school, potentially
    +conflicting job applications, etc.
    ## Improving your chances
    -After submitting a great proposal, PLEASE join us on IRC (irc.freenode.net #pidgin) or XMPP MUC (devel@conference.pidgin.im) and discuss your ideas with the community. Experience has shown that students who are involved before the Summer of Code starts are more likely to stick with it and make good progress during the summer. In addition, this provides us more and better information about how you work with other developers and what your skill set is. You can greatly improve your chances of selection by engaging with the community early.
    +After submitting a great proposal, PLEASE join us on IRC
    +(irc.freenode.net #pidgin) or XMPP MUC (devel@conference.pidgin.im) and discuss
    +your ideas with the community. Experience has shown that students who are
    +involved before the Summer of Code starts are more likely to stick with it and
    +make good progress during the summer. In addition, this provides us more and
    +better information about how you work with other developers and what your skill
    +set is. You can greatly improve your chances of selection by engaging with the
    +community early.
    --- a/hugo/content/help/_index.md Thu Aug 22 05:13:40 2019 +0000
    +++ b/hugo/content/help/_index.md Fri Aug 23 08:35:30 2019 +0000
    @@ -3,4 +3,7 @@
    date: 2019-05-17T00:05:44-04:00
    ---
    -We get asked questions about Pidgin a lot. Many of those questions are actually the same questions over and over. Here we assemble a lot of them for your benefit, hoping that these questions and answers allow you to help yourself quickly.
    +We get asked questions about Pidgin a lot. Many of those questions are actually
    +the same questions over and over. Here we assemble a lot of them for your
    +benefit, hoping that these questions and answers allow you to help yourself
    +quickly.
    --- a/hugo/content/help/contactus.md Thu Aug 22 05:13:40 2019 +0000
    +++ b/hugo/content/help/contactus.md Fri Aug 23 08:35:30 2019 +0000
    @@ -2,6 +2,8 @@
    title: "Contact Us"
    date: 2019-05-19T14:33:54-04:00
    draft: true
    +weight: 30
    ---
    -If you'd like to contact the Pidgin team, please take a look at our [Community](/community) page for resources that will be helpful to you!
    \ No newline at end of file
    +If you'd like to contact the Pidgin team, please take a look at our
    +[Community](/community) page for resources that will be helpful to you!
    \ No newline at end of file
    --- a/hugo/content/help/gadugadu.md Thu Aug 22 05:13:40 2019 +0000
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,12 +0,0 @@
    ----
    -title: "Gadu-Gadu"
    -date: 2019-06-11T19:59:34-04:00
    ----
    -
    -### What is Gadu-Gadu?
    -
    -Gadu-Gadu is an IM protocl popular in Poland. You can find more about it [here](http://www.gadu-gadu.pl) (website in Polish).
    -
    -### I compiled Pidgin from source. Why doesn't it have Gadu-Gadu support?
    -
    -We use an external libgadu. Install your distro's `libgadu-dev` (Debian-based systems) or `libgadu-devel` (RPM systems) and rebuild Pidgin (making sure to re-run `./configure` in the top of the source tree).
    --- a/hugo/content/help/irc.md Thu Aug 22 05:13:40 2019 +0000
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,53 +0,0 @@
    ----
    -title: "IRC"
    -date: 2019-06-04T00:12:17-04:00
    ----
    -
    -### How do I join a channel?
    -
    -Create an IRC account and sign into it. After you've signed on, you can use the _Buddies_ -> _Join a Chat_ menu option on the Buddy List window to join a channel. In any window, either a conversation or a chat, in which your IRC user is the sender, you can also use the `/join` command to connect to a new channel.
    -
    -### Can I hide messages from NickServ, ChanServ, etc. on login?
    -
    -See the next question.
    -
    -### How do I automatically authenticate or identify on login?
    -
    -Try the [irchelper](https://bitbucket.org/pidgin/purple-plugin-pack/src/default/irchelper/) plugin from the [Purple Plugin Pack](https://bitbucket.org/pidgin/purple-plugin-pack/). This plugin provides fields to enter the services bot's nickname and your services password. It also automatically suppresses messages from the services bots sent on connection. Note that this plugin _does_, in fact, work with Q on Quakenet, and networks that use AuthServ, not just networks that use NickServ.
    -
    -Alternatively, see the next question for a way using Pidgin's built in features.
    -
    -### How do I authenticate/identify with a buddy pounce or send a message to a user on login?
    -
    -Follow these steps:
    -
    - * Create (if necessary) and enable your IRC account.
    - * Add the nick of the services bot to your buddy list using _Buddies_ -> _Add Buddy_.
    - * Right-click the new buddy and click "Add Buddy Pounce" to create a new pounce.
    - * Make sure "Signs on" is the only checked box in the "Pounce When Buddy..." section.
    - * Make sure "Send a message" is checked under "Action".
    - * Enter the message, such as `identify mypassword` if you're trying to authenticate.
    - * Ensure "Recurring" is checked beneath "Options" or the pounce will only work once.
    - * Click "Save" to save the pounce.
    -
    -Note that you do **_NOT_** include `/msg nickname` as part of the message in the pounce.
    -
    -### Can I automatically join channels on login?
    -
    -Absolutely. In the Buddy List window, select _Buddies_ -> _Add Chat_. Use this dialog to add the chat to your buddy list. Once the chat appears in the buddy list, right-click the chat and select "Auto-Join". The channel will autojoin whenever you sign onto your IRC account.
    -
    -### Is it possible to change the username that appears in username@hostname?
    -
    -In the Buddy List window, select _Accounts_ -> your IRC account -> _Edit Account_. Click the "Advanced" tab. Enter a name in the Username field.
    -
    -### How can I set/change my real name?
    -
    -In the Buddy List window, select _Accounts_ -> your IRC account -> _Edit Account_. Click the "Advanced" tab. Enter a name in the Real Name field.
    -
    -### Why does text display incorrectly?
    -
    -IRC has no comprehension of character sets or encodings. It simply sends (almost) any random chunk of data a user enters. Pidgin by default assumes everything is UTF-8. If this is not the case, you will need to edit your account (in the Buddy List window, select _Accounts_ -> your IRC account -> _Edit Account_) and change the Encoding setting on the "Advance"d" tab. You will need to enter the correct encoding for your channels there. You can specify multiple encodings in a comma-delimited list, such as `UTF-8,ISO-8859-15`, to cause Pidgin to attempt multiple encodings. In this case, each encoding is tried in succession until a successful decode happens or all encodings listed are exhausted.
    -
    -### How can I hide join/part messages?
    -
    -In the Buddy List window, select _Tools_ -> _Plugins_. Find and checkmark "Join/Part Hiding" and click the "Configure Plugin" button. Configure the plugin as you like.
    --- /dev/null Thu Jan 01 00:00:00 1970 +0000
    +++ b/hugo/content/help/protocols/_index.md Fri Aug 23 08:35:30 2019 +0000
    @@ -0,0 +1,8 @@
    +---
    +title: "Services (Protocols)"
    +date: 2019-08-08T00:43:03-04:00
    +replaces: []
    +weight: 10
    +---
    +
    +This group of pages houses Service-specific questions.
    --- /dev/null Thu Jan 01 00:00:00 1970 +0000
    +++ b/hugo/content/help/protocols/bonjour.md Fri Aug 23 08:35:30 2019 +0000
    @@ -0,0 +1,16 @@
    +---
    +title: "Bonjour"
    +date: 2019-08-07T18:20:21-04:00
    +replaces: []
    +weight: 10
    +---
    +
    +### What is Bonjour?
    +Bonjour is a serverless messaging protocol developed by Apple, Inc. ([Apple
    +developer information on Bonjour](https://developer.apple.com/bonjour/))
    +based on XMPP that operates only on a local network.
    +{{% xep 0174 "This XMPP extension" %}} defines the protocol.
    +
    +### Can I use Windows Pidgin for Bonjour?
    +Yes. You must install Apple's [Bonjour Print Services for
    +Windows](https://support.apple.com/kb/DL999) to use this functionality.
    --- /dev/null Thu Jan 01 00:00:00 1970 +0000
    +++ b/hugo/content/help/protocols/gadugadu.md Fri Aug 23 08:35:30 2019 +0000
    @@ -0,0 +1,16 @@
    +---
    +title: "Gadu-Gadu"
    +date: 2019-06-11T19:59:34-04:00
    +weight: 20
    +---
    +
    +### What is Gadu-Gadu?
    +
    +Gadu-Gadu is an IM protocol popular in Poland. You can find more about it
    +[here](http://www.gadu-gadu.pl) (website in Polish).
    +
    +### I compiled Pidgin from source. Why doesn't it have Gadu-Gadu support?
    +
    +We use an external libgadu. Install your distro's `libgadu-dev` (Debian-based
    +systems) or `libgadu-devel` (RPM systems) and rebuild Pidgin (making sure to
    +re-run `./configure` in the top of the source tree).
    --- /dev/null Thu Jan 01 00:00:00 1970 +0000
    +++ b/hugo/content/help/protocols/groupwise.md Fri Aug 23 08:35:30 2019 +0000
    @@ -0,0 +1,24 @@
    +---
    +title: "GroupWise"
    +date: 2019-08-07T22:08:46-04:00
    +replaces: []
    +weight: 30
    +---
    +
    +### What is GroupWise?
    +GroupWise is a messaging and collaboration platform originally developed by
    +WordPerfect Corporation and later acquired by Novell but now owned by [Micro
    +Focus](https://www.microfocus.com/en-us/products/groupwise/overview). (See [this
    +Wikipedia article](https://en.wikipedia.org/wiki/GroupWise) for details.) The
    +Groupwise protocol within Pidgin specifically supports the instant messaging
    +portion of the GroupWise platform. Much of Pidgin's support for the GroupWise
    +Messenger service was generously provided by Novell several years ago.
    +
    +### Are there any public servers?
    +No. This protocol is designed to connect with a GroupWise Messenger server
    +running on a corporate LAN. There are no known public servers.
    +
    +### I can't get it to work.
    +We are told this protocol plugin works only with the GroupWise Messenger for
    +Linux server or the GroupWise Messenger SP2 (or later) server running on NetWare
    +or Windows, and then only if the server is secure (SSL/TLS-enabled).
    --- /dev/null Thu Jan 01 00:00:00 1970 +0000
    +++ b/hugo/content/help/protocols/irc.md Fri Aug 23 08:35:30 2019 +0000
    @@ -0,0 +1,85 @@
    +---
    +title: "IRC"
    +date: 2019-06-04T00:12:17-04:00
    +weight: 40
    +---
    +
    +### How do I join a channel?
    +
    +Create an IRC account and sign into it. After you've signed on, you can use the
    +_Buddies_ -> _Join a Chat_ menu option on the Buddy List window to join a
    +channel. In any window, either a conversation or a chat, in which your IRC user
    +is the sender, you can also use the `/join` command to connect to a new channel.
    +
    +### Can I hide messages from NickServ, ChanServ, etc. on login?
    +
    +See the next question.
    +
    +### How do I automatically authenticate or identify on login?
    +
    +Try the
    +[irchelper](https://bitbucket.org/pidgin/purple-plugin-pack/src/default/irchelper/)
    +plugin from the [Purple Plugin
    +Pack](https://bitbucket.org/pidgin/purple-plugin-pack/). This plugin provides
    +fields to enter the services bot's nickname and your services password. It also
    +automatically suppresses messages from the services bots sent on connection.
    +Note that this plugin _does_, in fact, work with Q on Quakenet, and networks
    +that use AuthServ, not just networks that use NickServ.
    +
    +Alternatively, see the next question for a way using Pidgin's built in features.
    +
    +### How do I authenticate/identify with a buddy pounce or send a message to a user on login?
    +
    +Follow these steps:
    +
    + * Create (if necessary) and enable your IRC account.
    + * Add the nick of the services bot to your buddy list using _Buddies_ ->
    + _Add Buddy_.
    + * Right-click the new buddy and click "Add Buddy Pounce" to create a new
    + pounce.
    + * Make sure "Signs on" is the only checked box in the "Pounce When Buddy..."
    + section.
    + * Make sure "Send a message" is checked under "Action".
    + * Enter the message, such as `identify mypassword` if you're trying to
    + authenticate.
    + * Ensure "Recurring" is checked beneath "Options" or the pounce will only
    + work once.
    + * Click "Save" to save the pounce.
    +
    +Note that you do **_NOT_** include `/msg nickname` as part of the message in the pounce.
    +
    +### Can I automatically join channels on login?
    +
    +Absolutely. In the Buddy List window, select _Buddies_ -> _Add Chat_. Use this
    +dialog to add the chat to your buddy list. Once the chat appears in the buddy
    +list, right-click the chat and select "Auto-Join". The channel will autojoin
    +whenever you sign onto your IRC account.
    +
    +### Is it possible to change the username that appears in username@hostname?
    +
    +In the Buddy List window, select _Accounts_ -> your IRC account -> _Edit
    +Account_. Click the "Advanced" tab. Enter a name in the Username field.
    +
    +### How can I set/change my real name?
    +
    +In the Buddy List window, select _Accounts_ -> your IRC account -> _Edit
    +Account_. Click the "Advanced" tab. Enter a name in the Real Name field.
    +
    +### Why does text display incorrectly?
    +
    +IRC has no comprehension of character sets or encodings. It simply sends
    +(almost) any random chunk of data a user enters. Pidgin by default assumes
    +everything is UTF-8. If this is not the case, you will need to edit your account
    +(in the Buddy List window, select _Accounts_ -> your IRC account -> _Edit
    +Account_) and change the Encoding setting on the "Advanced" tab. You will need
    +to enter the correct encoding for your channels there. You can specify multiple
    +encodings in a comma-delimited list, such as `UTF-8,ISO-8859-15`, to cause
    +Pidgin to attempt multiple encodings. In this case, each encoding is tried in
    +succession until a successful decode happens or all encodings listed are
    +exhausted.
    +
    +### How can I hide join/part messages?
    +
    +In the Buddy List window, select _Tools_ -> _Plugins_. Find and checkmark
    +"Join/Part Hiding" and click the "Configure Plugin" button. Configure the
    +plugin as you like.
    --- /dev/null Thu Jan 01 00:00:00 1970 +0000
    +++ b/hugo/content/help/protocols/otherprotocols.md Fri Aug 23 08:35:30 2019 +0000
    @@ -0,0 +1,38 @@
    +---
    +title: "Other Protocols"
    +date: 2019-08-07T22:06:02-04:00
    +replaces: []
    +weight: 90
    +---
    +
    +### Pidgin used to support MXit, Yahoo! Messenger, AIM, and ICQ. What gives?
    +MXit and AIM no longer exist. MXit as a company no longer exists and their
    +website is gone. AOL terminated AIM in December 2017.
    +
    +Yahoo! Messenger and ICQ changed protocols and Pidgin doesn't have the developer
    +resources to support these protocols ourselves. See the [Plugins](/plugins/)
    +page for community-maintained plugins for these and other services.
    +
    +### What happened to Facebook Chat support?
    +Facebook terminated their XMPP support in April 2014. An alternative Facebook
    +Messenger plugin was developed as a
    +[Google Summer of Code](/gsoc/#previous-years) project. That plugin is
    +currently in the Pidgin 3 source tree and has been backported to Pidgin 2. The
    +backport can be found either
    +[here](https://github.com/dequis/purple-facebook/wiki/) or on the
    +[Plugins](/plugins/) page, but it is _not_ maintained by Pidgin's developers.
    +
    +### Why doesn't Pidgin support CyanChat, Microsoft LCS/Skype for Business, Skype, NateOn, NetSoul, etc.?
    +It is an incredible amount of work to implement and maintain support for a
    +protocol. Pidgin's developers are volunteers who work on Pidgin in their spare
    +time. As spare time is a limited resource, Pidgin's developers can maintain
    +only a limited number of protocols.
    +
    +That said, there are a number of people in the Pidgin community that have spent
    +the time to develop plugins for additional services including Skype, Microsoft
    +LCS/Skype for Business, and others. A list of known community-maintained
    +plugins is available on the [Plugins](/plugins/) page.
    +
    +If you are willing and able to implement and maintain a plugin for a protocol
    +that you use, we welcome and encourage you to do so! The beauty of Pidgin and
    +libpurple is its plugin system, allowing anyone to enhance and extend Pidgin.
    --- /dev/null Thu Jan 01 00:00:00 1970 +0000
    +++ b/hugo/content/help/protocols/sametime.md Fri Aug 23 08:35:30 2019 +0000
    @@ -0,0 +1,25 @@
    +---
    +title: "Sametime"
    +date: 2019-08-07T18:30:15-04:00
    +replaces: []
    +weight: 50
    +---
    +
    +### Are there any public Sametime servers?
    +Apart from a demonstration server hosted by Lotus/IBM, no. This protocol is
    +designed to connect to a Lotus/IBM Sametime server running on a corporate LAN.
    +
    +### Why doesn't Sametime appear in the protocols list?
    +Sametime support in Pidgin depends on a separate library called Meanwhile. You
    +will need to install the Meanwhile library and the `libpurple-meanwhile` (or
    +similar, depending on distribution) package to enable Sametime support. If you
    +are building Pidgin from source, then the Sametime plugin will be built
    +automatically if you have the development headers for Meanwhile installed.
    +
    +### Why do I get the error "Not Authorized" when connecting?
    +The Sametime server to which you're attempting to connect has been configured
    +with a whitelist of acceptable clients. This error indicates that the client ID
    +used by Pidgin (`0x1700`) is apparently not in that whitelist, so the server
    +denies your login. You can cause Pidgin to masquerade as the default Sametime
    +Connect client by setting the "Hide client identity" option in your account
    +preferences.
    --- /dev/null Thu Jan 01 00:00:00 1970 +0000
    +++ b/hugo/content/help/protocols/silc.md Fri Aug 23 08:35:30 2019 +0000
    @@ -0,0 +1,21 @@
    +---
    +title: "SILC"
    +date: 2019-06-17T23:14:46-04:00
    +weight: 60
    +---
    +
    +### What is SILC?
    +
    +SILC is an open, security-focused end-to-end encrypted protocol. Its website is
    +currently hosted at [silc.github.io](https://silc.github.io).
    +
    +### What do I need to use the SILC protocol?
    +
    +You need to install the SILC Toolkit and the libpurple SILC plugin. These were
    +generally provided as packages in several Linux distributions, however, many
    +distributions have begun dropping these packages due to being "unmaintained."
    +If you're compiling Pidgin and libpurple yourself, see the `./configure --help`
    +for specifying the location of the SILC headers and libraries. If you're
    +compiling with an SRPM, use `--with-silc` to build the `purple-silc` RPM
    +
    +On Windows, the SILC Toolkit is installed with Pidgin.
    --- /dev/null Thu Jan 01 00:00:00 1970 +0000
    +++ b/hugo/content/help/protocols/xmpp/_index.md Fri Aug 23 08:35:30 2019 +0000
    @@ -0,0 +1,241 @@
    +---
    +title: "XMPP (Jabber)"
    +date: 2019-06-04T00:16:51-04:00
    +weight: 70
    +---
    +
    +## General
    +
    +### What is the difference between Jabber and XMPP?
    +
    +Jabber and XMPP are the same protocol. The only difference is that Jabber is a
    +trademarked name and XMPP is the official name of the protocol.
    +
    +### Does Pidgin support Nimbuzz, Web.de Messenger, GMX Messenger, or 1&1 Messenger?
    +
    +Yes; they are simply services that use the XMPP protocol.
    +
    +### How do I choose which XMPP server to use or configure an XMPP account?
    +
    +The XMPP server is part of your XMPP ID. For example, in the ID `foo@bar.com`,
    +`bar.com` would be the server to use. When entering your XMPP account
    +information into Pidgin, specify everything _before_ the `@` (in the example,
    +this would be `foo`) in the Username field and everything _after_ the `@` (in
    +the example, this would be `bar.com`) in the Domain field.
    +
    +## Setting Up Accounts
    +
    +### What is the "Resource" field for in the account editor?
    +
    +The resource field specifies the XMPP resource you are using. The use of unique
    +resources allows you to connect to your XMPP server from multiple locations
    +simultaneously. Resources might have meaningful names, such as Home, Work,
    +Mobile, etc. or something else entirely that you choose. Pidgin defaults to a
    +blank resource, as most servers will assign one if the client doesn't specify.
    +
    +### How do I change my resource string?
    +
    +Go to _Accounts_ -> _Add/Edit_. Uncheck the "Enabled" box for your XMPP
    +account. Then select the account and click the "Modify" button. Change the
    +string in the Resource field, or put something there if it's blank.
    +
    +### How can I configure resource priority?
    +
    +Libpurple does not currently support user-configurable priorities. We have a
    +static priority list that's used:
    +
    +|Status Name|Priority|
    +|-----------|--------|
    +|Available|1|
    +|Chatty|1|
    +|Away|0|
    +|Do Not Disturb|0|
    +|Extended Away|0|
    +
    +### How do I use Pidgin with MeiVZ/StudiVZ's chat box?
    +
    +These services use XMPP. Create an XMPP account using the e-mail address you
    +log in with, but replace the "at sign" (`@`) with `\40`. Set the Domain to
    +`vz.net`. You won't need to change anything on the Advanced tab.
    +
    +## XMPP Buddies (Contacts)
    +
    +### How can I deauthorize a buddy from seeing my status?
    +
    +Right-click the buddy in the Buddy List and select "Cancel Presence
    +Notification". Note that the buddy will have to request authorization again to
    +be able to see your presence.
    +
    +### What does "Cancel Presence Notification" do?
    +
    +See the previous question.
    +
    +### What does "Unsubscribe" do?
    +
    +If you select this, you will no longer see that buddy's presence. That means
    +you will not see their online or offline status or if they're away, extended
    +away, idle, etc. If you select this option and later change your mind, you must
    +re-request authorization to resume seeing the buddy's presence.
    +
    +## Multi-User Conferences (Chat Rooms)
    +
    +### How do I create a conference?
    +
    +There are two ways to do this. One is by joining the conference and the other
    +is by adding it to your Buddy List.
    +
    +#### Join the conference
    +1. In the Buddy List window, select _Buddies_ -> _Join A Chat_.
    +1. Select your XMPP account.
    +1. Fill in the fields you see.
    + 1. **Room** should be the short name fo the conference, for example,
    + "myconference".
    + 1. **Server** is the server on which the conference will be created. It must
    + be a MUC server, such as `conference.jabber.org`. The chat's ID will be
    + Room@Server, so the example "myconference" would have the ID
    + "myconference@..."
    + 1. **Handle** is the name you wish to be displayed in the chat. It is similar
    + in concept to a nickname on IRC.
    +1. Click "Join".
    +1. You will see a dialog asking you about creating the new room. You can either
    + accept the default configuration or configure to your liking, at your option.
    +
    +#### Add the conference to your roster (buddy list)
    +1. In the Buddy List window, select _Buddies_ -> _Add Chat_.
    +1. Select your XMPP account.
    +1. Fill in the fields you see.
    + 1. **Room** should be the short name fo the conference, for example,
    + "myconference".
    + 1. **Server** is the server on which the conference will be created. It must
    + be a MUC server, such as `conference.jabber.org`. The chat's ID will be
    + Room@Server, so the example "myconference" would have the ID
    + "myconference@..."
    + 1. **Handle** is the name you wish to be displayed in the chat. It is similar
    + in concept to a nickname on IRC.
    + 1. **Password** is optional for creating a new room. You probably don't want
    + to fill this field in.
    + 1. **Alias** is the alias (display name) you wish to assign to the chat. By
    + assigning an alias, you can display a useful description in the buddy list
    + instead of the chat's name.
    + 1. **Group** is the group in your buddy list (roster) in which you wish the
    + chat to appear.
    +1. Click "Add".
    +1. Find the chat in your Buddy List and double-click it.
    +1. You will see a dialog asking you about creating the new room. You can either
    + accept the default configuration or configure to your liking, at your option.
    +
    +### How do I invite someone to a conference?
    +
    +In the chat's tab, select _Conversation_ -> _Invite_. Note that you can only
    +invite people to a conversation that is already a chat/conference--you can't
    +"promote" a one-on-one conversation to a multi-user chat.
    +
    +## Miscellaneous
    +
    +### Why can't I send a file?
    +
    +There are a number of possible reasons for this.
    +
    +* If the user you're trying to send to is using the old Google Talk client, it
    + isn't possible, as that client doesn't use the standard XMPP file transfer
    + mechanisms.
    +* The XMPP server you're using may not support a file transfer proxy and your
    + network doesn't allow direct incoming connections. In this case, you may be
    + able to specify an alternative file transfer proxy in the "Advanced" settings
    + of your XMPP account.
    +* The file transfer proxy in use may be broken. (See
    + [Ticket 5840](https://developer.pidgin.im/ticket/5840).)
    +
    +### Does Pidgin support Service Discovery or Transports?
    +
    +Service discovery and transport _registration_ are supported in Pidgin using the
    +XMPP Service Discovery plugin.
    +
    +If a transport has already been registered in another client, or does not
    +require registration, Pidgin also supports this.
    +
    +If you want to use a protocol that Pidgin and libpurple natively support, we
    +recommend using Pidgin's own implementation instead of an XMPP transport.
    +
    +### Why do I get a "Server does not use any supported authentication method" error?
    +
    +If you get this error, have a look in your debug log (_Help_ -> _Debug Window_
    +in the Buddy List window) to see if you also get the error message `sasl:
    +sasl_state is -1, failing the mech and trying again`. If you are getting this,
    +a possible workaround is to try adding your hostname (from `/etc/hostname`) to
    +your `/etc/hosts` as an alias for `127.0.0.1` then trying to reconnect.
    +
    +## Google Talk
    +
    +### Why do I get a "Not authorized" error after turning on two-factor authentication?
    +
    +If you get this error, you might need to allow "less secure apps" to connect via
    +[this Google page](https://www.google.com/settings/security/lesssecureapps) or
    +set an app password for Pidgin via [this Google
    +page](https://security.google.com/settings/security/apppassowrds).
    +
    +### I'm using Google Apps with a non-Google e-mail address. How can I use this with Pidgin?
    +
    +You can't. This is a server-side restriction.
    +
    +Using Google Talk with a non-Google e-mail address (that is, an e-mail account
    +that doesn't live on a Google server) is not a good idea because these accounts
    +appear to other users as `<some terrible number>@talk.google.com` rather than
    +using something someone could remember.
    +
    +### How do I configure Pidgin to connect to Google Talk for my domain hosted on GSuite (Google Apps)?
    +
    +Put your username (the part before the `@` in your e-mail address) in the
    +"Username" field and your domain (the part after the `@` in your e-mail address)
    +in the Domain field. Enter your password in the Password field. This should be
    +all that's needed unless two-factor authentication is enabled.
    +
    +If this doesn't work, it is likely because your domain doesn't have the
    +appropriate DNS SRV records set up, or your local DNS doesn't handle SRV
    +records. See the next question for more information.
    +
    +If you are unable to fix the DNS settings, as a workaround you can specify
    +`talk.google.com` in the "Connect Server" field on the account's "Advanced" tab.
    + Note that you may get SSL/TLS certificate warnings if you do this.
    +
    +See [Google's help
    +page](https://www.google.com/support/a/bin/answer.py?hl=en&answer=49147) for
    +more information.
    +
    +### What are these DNS SRV records you talk about?
    +
    +DNS SRV records are special entries in the domain name system that allow clients
    +such as Pidgin to find specific services. In the case of XMPP and Google Talk,
    +these records specify what servers on the Internet provide the XMPP service for
    +a given domain.
    +
    +Many home routers, especially older ones, are broken and can't handle the SRV
    +record lookups required for Pidgin to automatically determine the server to
    +which to connect. If this is the case, in the debug log (on the Buddy List
    +window, _Help_ -> _Debug Window_), you will see `dnssrv: found 0 SRV entries`.
    +You can confirm this by running `dig +short SRV __xmpp-client._tcp.<server>` on
    +Linux or `nslookup -type=SRV _xmpp-client._tcp.<server>` on Windows, where
    +`<server>` is the domain, such as `gmail.com`. If these commands return no
    +results, then you will need to reconfigure the router to not act as the DNS
    +server for the client computers. Typically, this setting is labeled something
    +along the lines of "Use Router as DNS server" (this should be disabled) in the
    +router's configuration.
    +
    +If you are using OpenWRT, you can fix this by editing `/etc/dnsmasq.conf` and
    +commenting out the following line by adding a `#` in front of it: `filterwin2k`.
    + OpenWRT 10.03.1 "Backfire" needs dnsmasq's "Domain Needed" option to be
    +disabled. In LuCI, this can be found under _Network_ -> _DHCP_ and _DNS_ ->
    +_General_ -> _Domain Required_ (unchecked). From the command line, remove the
    +following option from the `dnsmasq` section in `/etc/config/dhcp`.
    +
    +If your GSuite (Google Apps for Your Domain) domain does not have SRV records,
    +add [the following
    +entries](http://support.google.com/a/bin/answer.py?hl=en&answer=34143):
    +
    + _xmpp-server._tcp.yourdomain.com. IN SRV 5 0 5269 xmpp-server.l.google.com.
    + _xmpp-server._tcp.yourdomain.com. IN SRV 20 0 5269 alt1.xmpp-server.l.google.com.
    + _xmpp-server._tcp.yourdomain.com. IN SRV 20 0 5269 alt2.xmpp-server.l.google.com.
    + _xmpp-server._tcp.yourdomain.com. IN SRV 20 0 5269 alt3.xmpp-server.l.google.com.
    + _xmpp-server._tcp.yourdomain.com. IN SRV 20 0 5269 alt4.xmpp-server.l.google.com.
    +
    +How you do this will differ depending on your your DNS server or provider works.
    --- /dev/null Thu Jan 01 00:00:00 1970 +0000
    +++ b/hugo/content/help/protocols/xmpp/supportedxep.md Fri Aug 23 08:35:30 2019 +0000
    @@ -0,0 +1,62 @@
    +---
    +title: "Supported XEP's"
    +date: 2019-06-11T19:06:50-04:00
    +---
    +
    +This is an attempt to document the various XMPP Extensions
    +([XEP's](https://xmpp.org/extensions/)) supported by XMPP protocol plugin in
    +libpurple. Please note that this list is **_incomplete_** and that libpurple
    +almost certainly supports more XEP's than are listed here!
    +
    +| XEP | Feature Name | Status | Notes |
    +|------------------|--------------|--------|-------|
    +| {{% xep 0004 %}} | Data Forms | Final | Since at least 2.4.1 |
    +| {{% xep 0012 %}} | Last Activity | Final | |
    +| {{% xep 0020 %}} | Feature Negotiation | Draft | (for file transfers) |
    +| {{% xep 0022 %}} | Message Events | Obsolete | Superseded by {{% xep 0085 %}}, support updated. |
    +| {{% xep 0030 %}} | Service Discovery | Final | (no UI implementation in Finch) |
    +| {{% xep 0038 %}} | Icon Styles | Deferred | For smileys. Standard seems abandoned? Last revised 2003. |
    +| {{% xep 0045 %}} | Multi-User Chat | Draft | |
    +| {{% xep 0047 %}} | In-band Bytestreams (IBB) | Final | Since 2.6.0 |
    +| {{% xep 0050 %}} | Ad-Hoc Commands | Draft | |
    +| {{% xep 0054 %}} | vcard-temp | Active (Historical) | |
    +| {{% xep 0055 %}} | Jabber Search | Active (Historical) | |
    +| {{% xep 0060 %}} | Publish-Subscribe | Draft | (partial/minimal support, used for PEP) |
    +| {{% xep 0065 %}} | SOCKS5 Bytestreams | Draft | |
    +| {{% xep 0066 %}} | Out of Band Data | Draft | |
    +| {{% xep 0071 %}} | XHTML-IM | Draft | |
    +| {{% xep 0077 %}} | In-Band Registration | Final | |
    +| {{% xep 0084 %}} | User Avatar | Draft | v1.1 |
    +| {{% xep 0085 %}} | Chat State Notifications | Final | |
    +| {{% xep 0091 %}} | Legacy Delayed Delivery | Obsolete | Deprecated in favour of {{% xep 203 %}}. Still around. |
    +| {{% xep 0092 %}} | Software Version | Draft | |
    +| {{% xep 0095 %}} | Stream Initiation | Draft | |
    +| {{% xep 0096 %}} | SI File Transfer | Draft | (SOCKS5 bytestreams, IBB) |
    +| {{% xep 0100 %}} | Gateway Interaction | Active | minimal support in Pidgin/Finch |
    +| {{% xep 0107 %}} | User Mood | Draft | |
    +| {{% xep 0115 %}} | Entity Capabilities | Draft | v1.5 since 2.6.0 |
    +| {{% xep 0118 %}} | User Tune | Draft | |
    +| {{% xep 0124 %}} | Bidirectional-streams Over Synchronous HTTP (BOSH) | Draft | Since 2.6.0 |
    +| {{% xep 0146 %}} | Remote Controlling Clients | Active | Since 2.2.1 |
    +| {{% xep 0153 %}} | vCard-Based Avatars | Active (Historical) | |
    +| {{% xep 0156 %}} | Discovering Alternate XMPP Connection Methods | Draft | partial support since 2.6.0 (for BOSH) |
    +| {{% xep 0163 %}} | Personal Eventing Protocol | Draft | |
    +| {{% xep 0166 %}} | Jingle | Draft | Since 2.6.0 |
    +| {{% xep 0167 %}} | Jingle RTP Sessions | Draft | Since 2.6.0 when compiled with voice and video support |
    +| {{% xep 0172 %}} | User Nickname | Draft | |
    +| {{% xep 0174 %}} | Serverless Messaging | Final | (via the Bonjour prpl) |
    +| {{% xep 0176 %}} | Jingle ICE-UDP Transport Method | Draft | Since 2.6.0 when compiled with voice and video support |
    +| {{% xep 0177 %}} | Jingle Raw-UDP Transport Method | Draft | Since 2.6.0 when compiled with voice and video support |
    +| {{% xep 0191 %}} | Simple Communications Blocking | Draft | Since 2.5.4 |
    +| {{% xep 0199 %}} | XMPP Ping | Final | |
    +| {{% xep 0202 %}} | Entity Time | Final | |
    +| {{% xep 0203 %}} | Delayed Delivery | Final | Since 2.2.1 |
    +| {{% xep 0206 %}} | XMPP Over BOSH | Draft | Since 2.6.0 |
    +| {{% xep 0224 %}} | Attention | Draft | Started life as a Pidgin "buzz" extension in 2007, now an XEP :-) |
    +| {{% xep 0231 %}} | Bits of Binary | Draft | Since 2.5.2, used for custom emoticons. |
    +| {{% xep 0232 %}} | Software Information | Deferred | Intended to replace {{% xep 0092 %}} using {{% xep 0115 %}} |
    +| {{% xep 0237 %}} | Roster Versioning | Obsolete | Since 2.6.5. XEP now part of [RFC-4621](http://tools.ietf.org/html/rfc6121) |
    +| {{% xep 0245 %}} | The /me Command | Active | Since forever. |
    +| {{% xep 0249 %}} | Direct MUC Invitations | Draft | Support added in 2.6.4 |
    +| {{% xep 0256 %}} | Last Activity in Presence | Draft | Since 2.6.0 |
    +| {{% xep 0264 %}} | Jingle Content Thumbnails | Experimental | Thumbnails disabled in XMPP since 2.7.2 until it gets Draft status. |
    --- /dev/null Thu Jan 01 00:00:00 1970 +0000
    +++ b/hugo/content/help/protocols/zephyr.md Fri Aug 23 08:35:30 2019 +0000
    @@ -0,0 +1,53 @@
    +---
    +title: "Zephyr"
    +date: 2019-08-07T18:47:42-04:00
    +replaces: []
    +weight: 80
    +---
    +
    +### What is Zephyr?
    +Zephyr is an IM protocol developed at MIT for use with Project Athena. Its
    +features include Kerberos 4 authentication and multi-level chats (aka
    +"subscriptions"). You're probably using this because your
    +college/employer/organization uses it as a local IM/chat system. If not, you
    +probably don't have a server to connect to.
    +
    +### Other Zephyr clients (zwgc, owl, tzc) work, but Pidgin dies with "Couldn't initialize zephyr"
    +Your site might require the use of Kerberos 4 for authentication, though few
    +prepackaged Pidgin binaries use Kerberos. One solution is to compile Pidgin
    +with the `--with-krb4` flag to point to the location of your Kerberos 4 devel
    +files, usually one of `/usr`, `/usr/local`, or `/usr/athena`, e.g. `./configure
    +--with-krb4=/path/to/kerberos4`
    +
    +### Pidgin isn't working, but I never got any other Zephyr client working
    +You need to have zhm (which comes with the standard Zephyr distribution)
    +installed, and running, and pointed at your Zephyr servers. e.g. `zhm
    +z1.example.com z2.example.com z3.example.com`
    +
    +Alternatively, there might be a firewall or a NAT between you and the Zephyr
    +servers. Zephyr generally doesn't work in an environment where incoming
    +connections cannot be made to arbitrary UDP ports.
    +
    +### How do I avoid compiling Pidgin with Kerberos 4 support?
    +See the next question; the same trick for firewall traversal applies to avoiding
    +building with Kerberos support.
    +
    +### How do I use Zephyr from behind my firewall?
    +You can use tzc ("Trivial Zephyr Client") and ssh to run Zephyr from a machine
    +that is behind a firewall or NAT. First, make sure that tzc is installed and
    +working on the remote machine. The best version of tzc to use can be found
    +[here](https://www.club.cc.cmu.edu/debian/dists/testing/contrib/source/tzc-cclub_001-3.tar.gz).
    +
    +Make sure that you can make a passwordless ssh connection to the remote machine
    +and get Kerberos 4 tickets. Then, click the Advanced tab in the account editor,
    +enable "Use tzc", and set the tzc command to `/path/to/ssh username@hostname
    +/path/to/tzc -e "%s"`
    +
    +Alternately, if you have tzc working on your machine, you can enable "Use tzc",
    +and set the tzc command to `/path/to/tzc -e "%s"`
    +
    +### Why can't I use Zephyr on Windows?
    +Pidgin does not support Zephyr on Windows due to upstream technical limitations.
    + The current libzephyr library does not compile on the Windows platform and
    +there are no known usable builds of "zhm" available for Windows. If you are a
    +Windows user, you most likely do not have any use for Zephyr anyway.
    --- a/hugo/content/help/silc.md Thu Aug 22 05:13:40 2019 +0000
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,14 +0,0 @@
    ----
    -title: "SILC"
    -date: 2019-06-17T23:14:46-04:00
    ----
    -
    -### What is SILC?
    -
    -SILC is an open, security-focused end-to-end encrypted protocol. Its website is currently hosted at [silc.github.io](https://silc.github.io).
    -
    -### What do I need to use the SILC protocol?
    -
    -You need to install the SILC Toolkit and the libpurple SILC plugin. These were generally provided as packages in several Linux distributions, however, many distributions have begun dropping these packages due to being "unmaintained." If you're compiling Pidgin and libpurple yourself, see the `./configure --help` for specifying the location of the SILC headers and libraries. If you're compiling with an SRPM, use `--with-silc` to build the `purple-silc` RPM
    -
    -On Windows, the SILC Toolkit is installed with Pidgin.
    --- a/hugo/content/help/windows.md Thu Aug 22 05:13:40 2019 +0000
    +++ b/hugo/content/help/windows.md Fri Aug 23 08:35:30 2019 +0000
    @@ -1,31 +1,65 @@
    ---
    title: "Windows-Specific Questions"
    date: 2019-05-19T13:47:02-04:00
    +weight: 20
    ---
    ### Can I manually install spell-checking support?
    -Yes! If the installer isn't able to successfully download and install the dictionaries, you can do so manually.
    +Yes! If the installer isn't able to successfully download and install the
    +dictionaries, you can do so manually.
    First, upgrade to the newest release if you aren't on it!
    -Pidgin on Windows uses the dictionaries available from the [OpenOffice.org Extensions Download Site](http://extensions.openoffice.org/en/search?f%5B0%5D=field_project_tags%3A157). You need to download the appropriate language extension file(s). These files are OpenOffice.org extensions named with a file extension of `.oxt`; these are simply ZIP files with some extra data in them. Once you have downloaded one of these files, you can rename it to have a `.zip` extension and then extract the `*.dic` and `*.aff` files in it. These files need to be placed into `%PIDGIN_INSTALL_DIR%\spellcheck\share\enchant\myspell\`. Create the directories if they don't already exist. (`%PIDGIN_INSTALL_DIR%` is _usually_ `C:\Program Files (x86)\Pidgin` or `C:\Program Files\Pidgin`.) If Pidgin is already running when you place the dictionary files, you will need to restart Pidgin for it to recognize the files.
    +Pidgin on Windows uses the dictionaries available from the [OpenOffice.org
    +Extensions Download
    +Site](https://extensions.openoffice.org/en/search?f%5B0%5D=field_project_tags%3A157).
    + You need to download the appropriate language extension file(s). These files
    +are OpenOffice.org extensions named with a file extension of `.oxt`; these are
    +simply ZIP files with some extra data in them. Once you have downloaded one of
    +these files, you can rename it to have a `.zip` extension and then extract the
    +`*.dic` and `*.aff` files in it. These files need to be placed into
    +`%PIDGIN_INSTALL_DIR%\spellcheck\share\enchant\myspell\`. Create the
    +directories if they don't already exist. (`%PIDGIN_INSTALL_DIR%` is _usually_
    +`C:\Program Files (x86)\Pidgin` or `C:\Program Files\Pidgin`.) If Pidgin is
    +already running when you place the dictionary files, you will need to restart
    +Pidgin for it to recognize the files.
    ### Can I script unattended installations or silent installations?
    -Absolutely! The [_Offline_ Pidgin installer](https://www.pidgin.im/download/windows/) has a "silent" mode accessed with the following syntax:
    +Absolutely! The [_Offline_ Pidgin
    +installer](https://www.pidgin.im/download/windows/) has a "silent" mode accessed
    +with the following syntax:
    pidgin-x.y.z-offline.exe /DS=1 /SMS=0 /L=1033 /S /D=C:\Pidgin
    -The `/S` flag activates the silent mode for the installer. The `/L` flag specifies the language using Windows LCID, and this affects both the installer and Pidgin itself. The `/DS` and `/SMS` flags enable (`=1`) or disable (`=0`) the desktop shortcut and Start menu shortcuts, respectively. The `/D` flag specifies the installation directory. If you wish to use this flag, it _must_ be the last argument specified on the command line and may not contain any quotes, even if the installation path includes spaces. All flags are optional, except `/S` if silent mode is desired. Omitting the other flags will default to LCID 1033 (English), with Desktop and Start menu shortcuts enabled, and a default install path of `%PROGRAMFILESx86%\Pidgin\` or `%PROGRAMFILES%\Pidgin` depending on your version of Windows.
    +The `/S` flag activates the silent mode for the installer. The `/L` flag
    +specifies the language using Windows LCID, and this affects both the installer
    +and Pidgin itself. The `/DS` and `/SMS` flags enable (`=1`) or disable (`=0`)
    +the desktop shortcut and Start menu shortcuts, respectively. The `/D` flag
    +specifies the installation directory. If you wish to use this flag, it _must_
    +be the last argument specified on the command line and may not contain any
    +quotes, even if the installation path includes spaces. All flags are optional,
    +except `/S` if silent mode is desired. Omitting the other flags will default to
    +LCID 1033 (English), with Desktop and Start menu shortcuts enabled, and a
    +default install path of `%PROGRAMFILESx86%\Pidgin\` or `%PROGRAMFILES%\Pidgin`
    +depending on your version of Windows.
    ### What should I do if I get a Download Error while installing?
    -The installer will, if necessary, download and install the GTK runtime, which is needed for Pidgin to run. If you need to use a proxy server to connect to the Internet, it is possible that the Pidgin installer will not be able to reach the resources it needs. The installer automatically checks for proxies configured in Internet Options. If you know the proxy settings, you can configure them by opening Internet Options directly from Control Panel, or by opening Internet Explorer and selecting Tools > Internet Options > Connections > LAN Settings.
    +The installer will, if necessary, download and install the GTK runtime, which is
    +needed for Pidgin to run. If you need to use a proxy server to connect to the
    +Internet, it is possible that the Pidgin installer will not be able to reach the
    +resources it needs. The installer automatically checks for proxies configured
    +in Internet Options. If you know the proxy settings, you can configure them by
    +opening Internet Options directly from Control Panel, or by opening Internet
    +Explorer and selecting Tools > Internet Options > Connections > LAN Settings.
    -Alternatively, and likely preferred if errors occur, you can download the [offline version of the installer](https://www.pidgin.im/download/windows)
    +Alternatively, and likely preferred if errors occur, you can download the
    +[offline version of the installer](https://www.pidgin.im/download/windows)
    ### Can I run Pidgin on Windows 98, Windows ME, Windows 2000, Windows XP, or Windows Vista?
    -It is possible using old versions of Pidgin and GTK, but we do not support this. Don't do it.
    +It is possible using old versions of Pidgin and GTK, but we do not support
    +this. Don't do it.
    --- a/hugo/content/help/xmpp/_index.md Thu Aug 22 05:13:40 2019 +0000
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,154 +0,0 @@
    ----
    -title: "XMPP (Jabber)"
    -date: 2019-06-04T00:16:51-04:00
    ----
    -
    -## General
    -
    -### What is the difference between Jabber and XMPP?
    -
    -Jabber and XMPP are the same protocol. The only difference is that Jabber is a trademarked name and XMPP is the official name of the protocol.
    -
    -### Does Pidgin support Nimbuzz, Web.de Messenger, GMX Messenger, or 1&1 Messenger?
    -
    -Yes; they are simply services that use the XMPP protocol.
    -
    -### How do I choose which XMPP server to use or configure an XMPP account?
    -
    -The XMPP server is part of your XMPP ID. For example, in the ID `foo@bar.com`, `bar.com` would be the server to use. When entering your XMPP account information into Pidgin, specify everything _before_ the `@` (in the example, this would be `foo`) in the Username field and everything _after_ the `@` (in the example, this would be `bar.com`) in the Domain field.
    -
    -## Setting Up Accounts
    -
    -### What is the "Resource" field for in the account editor?
    -
    -The resource field specifies the XMPP resource you are using. The use of unique resources allows you to connect to your XMPP server from multiple locations simultaneously. Resources migfht have meaningful names, such as Home, Work, Mobile, etc. or something else entirely that you choose. Pidgin defaults to a blank resource, as most servers will assign one if the client doesn't specify.
    -
    -### How do I change my resource string?
    -
    -Go to _Accounts_ -> _Add/Edit_. Uncheck the "Enabled" box for your XMPP account. Then select the account and click the "Modify" button. Change the string in the Resource field, or put something there if it's blank.
    -
    -### How can I configure resource priority?
    -
    -Libpurple does not currently support user-configurable priorities. We have a static priority list that's used:
    -
    -|Status Name|Priority|
    -|-----------|--------|
    -|Available|1|
    -|Chatty|1|
    -|Away|0|
    -|Do Not Disturb|0|
    -|Extended Away|0|
    -
    -### How do I use Pidgin with MeiVZ/StudiVZ's chat box?
    -
    -These services use XMPP. Create an XMPP account using the e-mail address you log in with, but replace the "at sign" (`@`) with `\40`. Set the Domain to `vz.net`. You won't need to change anything on the Advanced tab.
    -
    -## XMPP Buddies (Contacts)
    -
    -### How can I deauthorize a buddy from seeing my status?
    -
    -Right-click the buddy in the Buddy List and select "Cancel Presence Notification". Note that the buddy will have to request authorization again to be able to see your presence.
    -
    -### What does "Cancel Presence Notification" do?
    -
    -See the previous question.
    -
    -### What does "Unsubscribe" do?
    -
    -If you select this, you will no longer see that buddy's presence. That means you will not see their online or offline status or if they're away, extended away, idle, etc. If you select this option and later change your mind, you must re-request authorization to resume seeing the buddy's presence.
    -
    -## Multi-User Conferences (Chat Rooms)
    -
    -### How do I create a conference?
    -
    -There are two ways to do this. One is by joining the conference and the other is by adding it to your Buddy List.
    -
    -#### Join the conference
    -1. In the Buddy List window, select _Buddies_ -> _Join A Chat_.
    -1. Select your XMPP account.
    -1. Fill in the fields you see.
    - 1. **Room** should be the short name fo the conference, for example, "myconference".
    - 1. **Server** is the server on which the conference will be created. It must be a MUC server, such as `conference.jabber.org`. The chat's ID will be Room@Server, so the example "myconference" would have the ID "myconference@..."
    - 1. **Handle** is the name you wish to be displayed in the chat. It is similar in concept to a nickname on IRC.
    -1. Click "Join".
    -1. You will see a dialog asking you about creating the new room. You can either accept the default configuration or configure to your liking, at your option.
    -
    -#### Add the conference to your roster (buddy list)
    -1. In the Buddy List window, select _Buddies_ -> _Add Chat_.
    -1. Select your XMPP account.
    -1. Fill in the fields you see.
    - 1. **Room** should be the short name fo the conference, for example, "myconference".
    - 1. **Server** is the server on which the conference will be created. It must be a MUC server, such as `conference.jabber.org`. The chat's ID will be Room@Server, so the example "myconference" would have the ID "myconference@..."
    - 1. **Handle** is the name you wish to be displayed in the chat. It is similar in concept to a nickname on IRC.
    - 1. **Password** is optional for creating a new room. You probably don't want to fill this field in.
    - 1. **Alias** is the alias (display name) you wish to assign to the chat. By assigning an alias, you can display a useful description in the buddy list instead of the chat's name.
    - 1. **Group** is the group in your buddy list (roster) in which you wish the chat to appear.
    -1. Click "Add".
    -1. Find the chat in your Buddy List and double-click it.
    -1. You will see a dialog asking you about creating the new room. You can either accept the default configuration or configure to your liking, at your option.
    -
    -### How do I invite someone to a conference?
    -
    -In the chat's tab, select _Conversation_ -> _Invite_. Note that you can only invite people to a conversation that is already a chat/conference--you can't "promote" a one-on-one conversation to a multi-user chat.
    -
    -## Miscellaneous
    -
    -### Why can't I send a file?
    -
    -There are a number of possible reasons for this.
    -
    -* If the user you're trying to send to is using the old Google Talk client, it isn't possible, as that client doesn't use the standard XMPP file transfer mechanisms.
    -* The XMPP server you're using may not support a file transfer proxy and your network doesn't allow direct incoming connections. In this case, you may be able to specify an alternative file transfer proxy in the "Advanced" settings of your XMPP account.
    -* The file transfer proxy in use may be broken. (See [Ticket 5840](https://developer.pidgin.im/ticket/5840).)
    -
    -### Does Pidgin support Service Discovery or Transports?
    -
    -Service discovery and transport _registration_ are supported in Pidgin using the XMPP Service Discovery plugin.
    -
    -If a transport has already been registered in another client, or does not require registration, Pidgin also supports this.
    -
    -If you want to use a protocol that Pidgin and libpurple natively support, we recommend using Pidgin's own implementation instead of an XMPP transport.
    -
    -### Why do I get a "Server does not use any supported authentication method" error?
    -
    -If you get this error, have a look in your debug log (_Help_ -> _Debug Window_ in the Buddy List window) to see if you also get the error message `sasl: sasl_state is -1, failing the mech and trying again`. If you are getting this, a possible workaround is to try adding your hostname (from `/etc/hostname`) to your `/etc/hosts` as an alias for `127.0.0.1` then trying to reconnect.
    -
    -## Google Talk
    -
    -### Why do I get a "Not authorized" error after turning on two-factor authentication?
    -
    -If you get this error, you might need to allow "less secure apps" to connect via [this Google page](https://www.google.com/settings/security/lesssecureapps) or set an app password for Pidgin via [this Google page](https://security.google.com/settings/security/apppassowrds).
    -
    -### I'm using Google Apps with a non-Google e-mail address. How can I use this with Pidgin?
    -
    -You can't. This is a server-side restriction.
    -
    -Using Google Talk with a non-Google e-mail address (that is, an e-mail account that doesn't live on a Google server) is not a good idea because these accounts appear to other users as `<some terrible number>@talk.google.com` rather than using something someone could remember.
    -
    -### How do I configure Pidgin to connect to Google Talk for my domain hosted on GSuite (Google Apps)?
    -
    -Put your username (the part before the `@` in your e-mail address) in the "Username" field and your domain (the part after the `@` in your e-mail address) in the Domain field. Enter your password in the Password field. This should be all that's needed unless two-factor authentication is enabled.
    -
    -If this doesn't work, it is likely because your domain doesn't have the appropriate DNS SRV records set up, or your local DNS doesn't handle SRV records. See the next question for more information.
    -
    -If you are unable to fix the NDS settings, as a workaround you can specify `talk.google.com` in the "Connect Server" field on the account's "Advanced" tab. Note that you may get SSL/TLS certificate warnings if you do this.
    -
    -See [Google's help page](https://www.google.com/support/a/bin/answer.py?hl=en&answer=49147) for more information.
    -
    -### What are these DNS SRV records you talk about?
    -
    -DNS SRV records are special entries in the domain name system that allow clients such as Pidgin to find specific services. In the case of XMPP and Google Talk, these records specify what servers on the Internet provide the XMPP service for a given domain.
    -
    -Many home routers, especially older ones, are broken and can't handle the SRV record lookups required for Pidgin to automatically determine the server to which to connect. If this is the case, in the debug log (on the Buddy List window, _Help_ -> _Debug Window_), you will see `dnssrv: found 0 SRV entries`. You can confirm this by running `dig +short SRV __xmpp-client._tcp.<server>` on Linux or `nslookup -type=SRV _xmpp-client._tcp.<server>` on Windows, where `<server>` is the domain, such as `gmail.com`. If these commands return no results, then you will need to reconfigure the router to not act as the DNS server for the client computers. Typically, this setting is labeled something along the lines of "Use Router as DNS server" (this should be disabled) in the router's configuration.
    -
    -If you are using OpenWRT, you can fix this by editing `/etc/dnsmasq.conf` and commenting out the following line by adding a `#` in front of it: `filterwin2k`. OpenWRT 10.03.1 "Backfire" needs dnsmasq's "Domain Needed" option to be disabled. In LuCI, this can be found under _Network_ -> _DHCP_ and _DNS_ -> _General_ -> _Domain Required_ (unchecked). From the command line, remove the following option from the `dnsmasq` section in `/etc/config/dhcp`.
    -
    -If your GSuite (Google Apps for Your Domain) domain does not have SRV records, add [the following entries](http://support.google.com/a/bin/answer.py?hl=en&answer=34143):
    -
    - _xmpp-server._tcp.yourdomain.com. IN SRV 5 0 5269 xmpp-server.l.google.com.
    - _xmpp-server._tcp.yourdomain.com. IN SRV 20 0 5269 alt1.xmpp-server.l.google.com.
    - _xmpp-server._tcp.yourdomain.com. IN SRV 20 0 5269 alt2.xmpp-server.l.google.com.
    - _xmpp-server._tcp.yourdomain.com. IN SRV 20 0 5269 alt3.xmpp-server.l.google.com.
    - _xmpp-server._tcp.yourdomain.com. IN SRV 20 0 5269 alt4.xmpp-server.l.google.com.
    -
    -How you do this will differ depending on your your DNS server or provider works.
    --- a/hugo/content/help/xmpp/supportedxep.md Thu Aug 22 05:13:40 2019 +0000
    +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
    @@ -1,62 +0,0 @@
    ----
    -title: "Supported XEP's"
    -date: 2019-06-11T19:06:50-04:00
    ----
    -
    -This is an attempt to document the various XMPP Extensions
    -([XEP's](https://xmpp.org/extensions/)) supported by XMPP protocol plugin in
    -libpurple. Please note that this list is **_incomplete_** and that libpurple
    -almost certainly supports more XEP's than are listed here!
    -
    -| XEP | Feature Name | Status | Notes |
    -|------------------|--------------|--------|-------|
    -| {{% xep 0004 %}} | Data Forms | Final | Since at least 2.4.1 |
    -| {{% xep 0012 %}} | Last Activity | Final | |
    -| {{% xep 0020 %}} | Feature Negotiation | Draft | (for file transfers) |
    -| {{% xep 0022 %}} | Message Events | Obsolete | Superseded by {{% xep 0085 %}}, support updated. |
    -| {{% xep 0030 %}} | Service Discovery | Final | (no UI implementation in Finch) |
    -| {{% xep 0038 %}} | Icon Styles | Deferred | For smileys. Standard seems abandoned? Last revised 2003. |
    -| {{% xep 0045 %}} | Multi-User Chat | Draft | |
    -| {{% xep 0047 %}} | In-band Bytestreams (IBB) | Final | Since 2.6.0 |
    -| {{% xep 0050 %}} | Ad-Hoc Commands | Draft | |
    -| {{% xep 0054 %}} | vcard-temp | Active (Historical) | |
    -| {{% xep 0055 %}} | Jabber Search | Active (Historical) | |
    -| {{% xep 0060 %}} | Publish-Subscribe | Draft | (partial/minimal support, used for PEP) |
    -| {{% xep 0065 %}} | SOCKS5 Bytestreams | Draft | |
    -| {{% xep 0066 %}} | Out of Band Data | Draft | |
    -| {{% xep 0071 %}} | XHTML-IM | Draft | |
    -| {{% xep 0077 %}} | In-Band Registration | Final | |
    -| {{% xep 0084 %}} | User Avatar | Draft | v1.1 |
    -| {{% xep 0085 %}} | Chat State Notifications | Final | |
    -| {{% xep 0091 %}} | Legacy Delayed Delivery | Obsolete | Deprecated in favour of {{% xep 203 %}}. Still around. |
    -| {{% xep 0092 %}} | Software Version | Draft | |
    -| {{% xep 0095 %}} | Stream Initiation | Draft | |
    -| {{% xep 0096 %}} | SI File Transfer | Draft | (SOCKS5 bytestreams, IBB) |
    -| {{% xep 0100 %}} | Gateway Interaction | Active | minimal support in Pidgin/Finch |
    -| {{% xep 0107 %}} | User Mood | Draft | |
    -| {{% xep 0115 %}} | Entity Capabilities | Draft | v1.5 since 2.6.0 |
    -| {{% xep 0118 %}} | User Tune | Draft | |
    -| {{% xep 0124 %}} | Bidirectional-streams Over Synchronous HTTP (BOSH) | Draft | Since 2.6.0 |
    -| {{% xep 0146 %}} | Remote Controlling Clients | Active | Since 2.2.1 |
    -| {{% xep 0153 %}} | vCard-Based Avatars | Active (Historical) | |
    -| {{% xep 0156 %}} | Discovering Alternate XMPP Connection Methods | Draft | partial support since 2.6.0 (for BOSH) |
    -| {{% xep 0163 %}} | Personal Eventing Protocol | Draft | |
    -| {{% xep 0166 %}} | Jingle | Draft | Since 2.6.0 |
    -| {{% xep 0167 %}} | Jingle RTP Sessions | Draft | Since 2.6.0 when compiled with voice and video support |
    -| {{% xep 0172 %}} | User Nickname | Draft | |
    -| {{% xep 0174 %}} | Serverless Messaging | Final | (via the Bonjour prpl) |
    -| {{% xep 0176 %}} | Jingle ICE-UDP Transport Method | Draft | Since 2.6.0 when compiled with voice and video support |
    -| {{% xep 0177 %}} | Jingle Raw-UDP Transport Method | Draft | Since 2.6.0 when compiled with voice and video support |
    -| {{% xep 0191 %}} | Simple Communications Blocking | Draft | Since 2.5.4 |
    -| {{% xep 0199 %}} | XMPP Ping | Final | |
    -| {{% xep 0202 %}} | Entity Time | Final | |
    -| {{% xep 0203 %}} | Delayed Delivery | Final | Since 2.2.1 |
    -| {{% xep 0206 %}} | XMPP Over BOSH | Draft | Since 2.6.0 |
    -| {{% xep 0224 %}} | Attention | Draft | Started life as a Pidgin "buzz" extension in 2007, now an XEP :-) |
    -| {{% xep 0231 %}} | Bits of Binary | Draft | Since 2.5.2, used for custom emoticons. |
    -| {{% xep 0232 %}} | Software Information | Deferred | Intended to replace {{% xep 0092 %}} using {{% xep 0115 %}} |
    -| {{% xep 0237 %}} | Roster Versioning | Obsolete | Since 2.6.5. XEP now part of [RFC-4621](http://tools.ietf.org/html/rfc6121) |
    -| {{% xep 0245 %}} | The /me Command | Active | Since forever. |
    -| {{% xep 0249 %}} | Direct MUC Invitations | Draft | Support added in 2.6.4 |
    -| {{% xep 0256 %}} | Last Activity in Presence | Draft | Since 2.6.0 |
    -| {{% xep 0264 %}} | Jingle Content Thumbnails | Experimental | Thumbnails disabled in XMPP since 2.7.2 until it gets Draft status. |
    --- a/hugo/content/i18n/tips.md Thu Aug 22 05:13:40 2019 +0000
    +++ b/hugo/content/i18n/tips.md Fri Aug 23 08:35:30 2019 +0000
    @@ -9,39 +9,87 @@
    ### Can I help translate?
    -Yes! Our translations are provided by volunteers. To improve consistency and quality we prefer to have a designated person or group of people maintain each translation.
    +Yes! Our translations are provided by volunteers. To improve consistency and
    +quality we prefer to have a designated person or group of people maintain each
    +translation.
    -If Pidgin already has a translation for your language, please contact the designated translator(s) and ask if you can help. It's possible they are looking for someone to take over. You can find their email address in Pidgin's Help→Translator Information window. Or, for some languages you can try contacting the translator(s) via [Transifex](https://www.transifex.com/projects/p/pidgin/).
    +If Pidgin already has a translation for your language, please contact the
    +designated translator(s) and ask if you can help. It's possible they are looking
    +for someone to take over. You can find their email address in Pidgin's
    +Help→Translator Information window. Or, for some languages you can try
    +contacting the translator(s) via
    +[Transifex](https://www.transifex.com/projects/p/pidgin/).
    -If you're unable to contact the designated translator(s) or if Pidgin does not yet have a translation for your language, email the [translators mailing list](https://pidgin.im/cgi-bin/mailman/listinfo/translators) and ask if anyone is already working on translating that language.
    +If you're unable to contact the designated translator(s) or if Pidgin does not
    +yet have a translation for your language, email the [translators mailing
    +list](https://pidgin.im/cgi-bin/mailman/listinfo/translators) and ask if anyone
    +is already working on translating that language.
    ### When should I submit a translation update?
    -The translations are shipped with each Pidgin release, so there is no great advantage to submitting a translation multiple times during a release cycle. We announce a string freeze on the [translators mailing list](https://pidgin.im/cgi-bin/mailman/listinfo/translators) before each release. This is a promise to you that we will not add any new strings or change any existing ones. During this time you should finish translating any new strings and submit a new translation to us.
    +The translations are shipped with each Pidgin release, so there is no great
    +advantage to submitting a translation multiple times during a release cycle. We
    +announce a string freeze on the [translators mailing
    +list](https://pidgin.im/cgi-bin/mailman/listinfo/translators) before each
    +release. This is a promise to you that we will not add any new strings or change
    +any existing ones. During this time you should finish translating any new
    +strings and submit a new translation to us.
    ### Where should I submit a translation update?
    -The preferred method for submitting updated translations is via [Transifex](https://www.transifex.com/projects/p/pidgin/). If you're the designated translator for your language then you can request to create a new language team for your language in Transifex (and please also send an email to the [translators mailing list](https://pidgin.im/cgi-bin/mailman/listinfo/translators) and let us know!).
    +The preferred method for submitting updated translations is via
    +[Transifex](https://www.transifex.com/projects/p/pidgin/). If you're the
    +designated translator for your language then you can request to create a new
    +language team for your language in Transifex (and please also send an email to
    +the [translators mailing
    +list](https://pidgin.im/cgi-bin/mailman/listinfo/translators) and let us know!).
    -If you're opposed to using Transifex there are two other methods you could use to send us translations. These cause slightly more overhead for us, so we try to avoid them.
    +If you're opposed to using Transifex there are two other methods you could use
    +to send us translations. These cause slightly more overhead for us, so we try to
    +avoid them.
    - 1. By [creating a new ticket](https://developer.pidgin.im/newticket) and attaching your translation file. Please provide your full name, a contact email address, and the language and country code for your translation.
    - 1. Or you can ask a Pidgin developer to give you commit access directly to our version control system, then commit the translation yourself. Before you commit a translation update, please strip line numbers from the .po file by running `XGETTEXT_ARGS=--no-location intltool-update LL`. This makes the diff smaller and more human-friendly.
    + 1. By [creating a new ticket](https://developer.pidgin.im/newticket) and
    + attaching your translation file. Please provide your full name, a contact
    + email address, and the language and country code for your translation
    + 1. Or you can ask a Pidgin developer to give you commit access directly to our
    + version control system, then commit the translation yourself. Before you commit
    + a translation update, please strip line numbers from the .po file by running
    + `XGETTEXT_ARGS=--no-location intltool-update LL`. This makes the diff smaller
    + and more human-friendly.
    ### Translation Stats and a .pot File
    -You can see the current translation statistics at https://developer.pidgin.im/l10n/. There is also a link to the nightly version of the pidgin.pot at the bottom of the page. The .pot file includes the strings from our Windows installer. Providing a full translation of this file automatically ensures that Windows users will be able to have a translated installer for their convenience.
    +You can see the current translation statistics at
    +https://developer.pidgin.im/l10n/. There is also a link to the nightly version
    +of the pidgin.pot at the bottom of the page. The .pot file includes the strings
    +from our Windows installer. Providing a full translation of this file
    +automatically ensures that Windows users will be able to have a translated
    +installer for their convenience.
    ### How Pidgin Handles Translation Updates
    - * Current translators are always listed in Pidgin's About dialog (Help → About from Pidgin's Buddy List window) by name, and each translator's e-mail address is included. Because of this, we need current translators to inform us if their e-mail address changes.
    - * Translation updates for each language are accepted ***only*** from its current translator, except when:
    - * The current translator has told us he/she wishes to retire from translating Pidgin
    - * The current translator has not submitted an update for at least one year and does not respond to inquiries.
    - * The current translator tells us to accept the update and/or treat a new translator as a co-maintainer of the translation.
    - * We become aware through verifiable means that the current translator has passed away.
    + * Current translators are always listed in Pidgin's About dialog (Help →
    + About from Pidgin's Buddy List window) by name, and each translator's e-mail
    + address is included. Because of this, we need current translators to inform
    + us if their e-mail address changes.
    + * Translation updates for each language are accepted ***only*** from its
    + current translator, except when:
    + * The current translator has told us he/she wishes to retire from
    + translating Pidgin
    + * The current translator has not submitted an update for at least one year
    + and does not respond to inquiries.
    + * The current translator tells us to accept the update and/or treat a new
    + translator as a co-maintainer of the translation.
    + * We become aware through verifiable means that the current translator has
    + passed away.
    -In short, this means that if you are not the current translator for a specific language, we will not normally accept the translation update from you, except as described above. We do this to minimize confusion among users--we've found over time that some translators will choose different ways to translate a given word or phrase, which inevitably confuses users. We apologize for any inconvenience this may cause, but we believe that following these rules makes translations better for everyone.
    +In short, this means that if you are not the current translator for a specific
    +language, we will not normally accept the translation update from you, except as
    +described above. We do this to minimize confusion among users--we've found over
    +time that some translators will choose different ways to translate a given word
    +or phrase, which inevitably confuses users. We apologize for any inconvenience
    +this may cause, but we believe that following these rules makes translations
    +better for everyone.
    ### Helpful links
    --- /dev/null Thu Jan 01 00:00:00 1970 +0000
    +++ b/hugo/content/philosophy/_index.md Fri Aug 23 08:35:30 2019 +0000
    @@ -0,0 +1,29 @@
    +---
    +title: "Philosophy and Goals"
    +date: 2019-08-21T23:31:36-04:00
    +replaces: []
    +---
    +
    +## Philosophy
    +Pidgin has a number of design goals that we consider our philosophy. For
    +example:
    +
    +### Protocol/Service Agnosticism
    +We believe that once all your accounts are configured in Pidgin, it shouldn't
    +matter what protocol or service is being used when messaging a contact. The
    +purpose of using Pidgin is to communicate; the communication itself is more
    +important than the gritty details of how it's happening. This is exemplified
    +as "I want to talk to John" versus "I want to talk to John on his XMPP account
    +at jabber.org." It's our belief that "I want to talk to John" is our users'
    +expectation, and we aim to make Pidgin that simple.
    +
    +## Project Goals
    +Pidgin, as a project, has overarching goals for the future of the project:
    +
    +### Protocols/Services
    +The main protocol-related goal for the Pidgin project is to remove support for
    +the proprietary services from the libpurple source code and have them as
    +separate plugins. This protects the core project from some legal issues and
    +allows much faster response to protocol-level changes if the owners of a given
    +service make changes that break the plugin. There is no specific timeline to do
    +this; we simply aim to do it at some point in the future.