tags with the mispeller - Kiooeht [evacipatedBox]
+ * Don't break if profile uses non-existant theme - Kiooeht [evacipatedBox]
+ * Properly rearrange groups when not displaying number of online chums - Kiooeht [evacipatedBox]
+* Mac Bug fixes
+ * Create all datadir stuff - Lexi [lexicalNuance]
+
+### 3.41
+* Individually turn quirks on and off - Kiooeht [evacipatedBox]
+* More canon trollian theme timeline indicators - [binaryCabalist]
+* By mood chum sorting - Kiooeht [evacipatedBox]
+* Chum groups - Kiooeht [evacipatedBox]
+* Turn logging on and off - Kiooeht [evacipatedBox]
+* Customizable idle time - Kiooeht [evacipatedBox]
+* Different sound for memos - Kiooeht [evacipatedBox]
+* Animated smilies - Kiooeht [evacipatedBox]
+* Delete profiles - Kiooeht [evacipatedBox]
+* Customize minimize and close button actions - Kiooeht [evacipatedBox]
+* Receive notices from services you're talking to - Kiooeht [evacipatedBox]
+* Automatically turn off quirks when talking to bots - Kiooeht [evacipatedBox]
+* Rearrange options menu, make tabbed - Kiooeht [evacipatedBox]
+* Rearrange memos window for readability - Kiooeht [evacipatedBox]
+* Give voice to memo users - Kiooeht [evacipatedBox]
+* Theme checking - Kiooeht [evacipatedBox]
+* Display (De)OP/Voice messages in memos - Kiooeht [evacipatedBox]
+* Advanced Mode: Alter IRC user mode - Kiooeht [evacipatedBox]
+* Logviewer chum search - Kiooeht [evacipatedBox]
+* Logviewer log search - Kiooeht [evacipatedBox]
+* Set server and port from command line - Kiooeht [evacipatedBox]
+* Invite-only memos, invite chums to memos - Kiooeht [evacipatedBox]
+* Check Pyqt4 and pygame are installed and correct versions - Kiooeht [evacipatedBox]
+* Advanced Mode: View memo (channel) modes - Kiooeht [evacipatedBox]
+* Quirk groups - Kiooeht [evacipatedBox]
+* CTCP Version reply - Kiooeht [evacipatedBox]
+* Check for Pesterchum updates - Kiooeht [evacipatedBox]
+* Memo OP options: Secret, Invite-only, Mute - Kiooeht [evacipatedBox]
+* Notify user if channel blocks message - Kiooeht [evacipatedBox]
+* Bug reporter - Kiooeht [evacipatedBox]
+* Python quirks (users can create own quirk functions) - Kiooeht [evacipatedBox] (Idea: Lexi [lexicalNuance])
+* Incorporate support for the new randomEncounter - Kiooeht [evacipatedBox] (Idea: Lexi [lexicalNuance])
+* Only GETMOOD for people online (less spam!) - Kiooeht [evacipatedBox] (Idea: Lexi [lexicalNuance])
+* Quirk tester in quirk window - Kiooeht [evacipatedBox] (Idea: [alGore])
+* Show and support giving kick reasons - Kiooeht [evacipatedBox] (Idea: Lexi [lexicalNuance])
+* Make adding quirks into multi-page wizard - Kiooeht [evacipatedBox]
+* Flash the taskbar on new messages - Kiooeht [evacipatedBox]
+* Third beep sound for when your initials are mentioned in memos - Kiooeht [evacipatedBox] (Idea: Lexi [lexicalNuance])
+* Ctrl + click to copy links - Kiooeht [evacipatedBox]
+* Say something when server is full - Kiooeht [evacipatedBox]
+* Ping server if no ping from server to test connection - Kiooeht [evacipatedBox] (Idea: Lexi [lexicalNuance])
+* MSPA comic update notifier - Kiooeht [evacipatedBox]
+* Volume control - Kiooeht [evacipatedBox]
+* Debug mode - illuminatedwax [ghostDunk]
+* Bug fixes
+ * Logviewer updates - Kiooeht [evacipatedBox]
+ * Memo scrollbar thing - Kiooeht [evacipatedBox]
+ * Time arrows in enamel - Kiooeht [evacipatedBox]
+ * Quirk order actually works - Kiooeht [evacipatedBox]
+ * Stay in memos on profile switch - Kiooeht [evacipatedBox]
+ * Auto rejoin memos on reconnect - Kiooeht [evacipatedBox]
+ * De-Op in memos correctly - Kiooeht [evacipatedBox]
+ * Don't blow up if someone's not using Pesterchum in a memo - Kiooeht [evacipatedBox]
+ * Make 'logs' and 'profiles' directories if non-existant - Kiooeht [evacipatedBox]
+ * Don't split messages in bad places - Kiooeht [evacipatedBox]
+ * Chumhandles must match EXACTLY to register mood changes - Kiooeht [evacipatedBox]
+ * Menu bar text colour correct when default system colour isn't black - Kiooeht [evacipatedBox]
+ * End all colour tags and restart them on split messages - Kiooeht [evacipatedBox]
+ * Chat input box right-click menus - Kiooeht [evacipatedBox]
+ * Don't overflow random colours into colourless messages - Kiooeht [evacipatedBox]
+ * Only open links on left click - Kiooeht [evacipatedBox]
+
+### 3.14.1
+* Pesterchum 3.14 - illuminatedwax [ghostDunk]
+* Art - Grimlive [aquaMarinist]
+* Quirks lower() function - Kiooeht [evacipatedBox]
+* Quirks scrabble() function - Kiooeht [evacipatedBox]
+* Quirks reverse() function - illuminatedwax [ghostDunk]
+* Timestamps - Kiooeht [evacipatedBox]
+* Logviewer - Kiooeht [evacipatedBox]
+* Quirk ordering - [alGore]
+* # of users in a memo - [alGore]
+* @links to users - illuminatedwax [ghostDunk]
+* Support for REPORT and ALT to calSprite built in - illuminatedwax [ghostDunk]
+* Bug fixes:
+ * mixer bug fixed
+ * "flags" bug fixed
+ * incorrect characters in memos no longer break log file names
+ * memos now do not break on case-sensitivity
+ * fixed QDB address
+ * now lines too long to send in a single message are split up correctly
+ * quirk replace bug fixed
+ * pesterClientXXX profiles no longer saved
diff --git a/docs/PYQUIRKS.mkdn b/docs/PYQUIRKS.mkdn
new file mode 100755
index 0000000..de4eb27
--- /dev/null
+++ b/docs/PYQUIRKS.mkdn
@@ -0,0 +1,88 @@
+Python Quirk Functions
+===============
+
+Table of Contents
+-----------------
+1. Introduction
+2. Create A Module
+3. Functions In A Module
+4. Command Requirements
+5. Completed Quirk Function
+
+Introduction
+---------------
+Over the course of this short tutorial you will learn:
+
+* How to create your own Quirk Functions
+* VERY basic Python syntax
+
+You will not learn:
+
+* How to write Python
+* How to bake a cake
+
+Throughout this tutorial there will be
+
+Instructions in special boxes.
+If you follow the instructions in these boxes, by the end of this tutorial
+you will have recreated the default reverse() Quirk Function.
+
+
+Create A Module
+-------------------
+All Quirk Function Modules should be created in the 'quirks/' directory. File names must end in '.py'.
+You can have multiple Quirk Functions per Module.
+
+Each Module can also have a 'setup' function which will be called once, the moment the Module is loaded.
+
+
+Create 'reverse.py' in the 'quirks/' directory.
+
+
+Functions In A Module
+--------------------------
+If you've ever done programming before, you should know what a function is. If not, I suggest picking up a good programming book (or e-book).
+
+In Python, function syntax looks like this:
+
+def function_name(myvar1, myvar2):
+
+'def' is used to declare that this is a function, and 'function_name' is obviously the name of your function.
+'myvar1' and 'myvar2' are variables coming into your function. For most of your functions, the only variable being passed will be 'text'.
+
+In Python, curly braces ({}) are not used to declare the beginning and end of a function. Instead, a colon (:) is used to declare the beginning of a function. After that, indentation is used to declare the body and end of a function.
+
+```python
+def reverserep(text):
+ return text[::-1]
+```
+
+Command Requirements
+------------------------
+For a function to be registered as a Quirk Function, it must conform to three simple rules:
+
+1. It must have a command name.
+2. It must take exactly one arguement.
+3. It must return a string.
+
+What is meant by having a command name, is that a name for the Quirk Function has to be defined. This is done by defining the 'command' variable for a function.
+
+function_name.command = "name"
+
+```python
+reverserep.command = "reverse"
+```
+
+Completed Quirk Function
+---------------------------
+Below is the completed, fully working, reverse Quirk Function. After it I will break down the pieces of each line.
+
+```python
+def reverserep(text):
+ return text[::-1]
+reverserep.command = "reverse"
+```
+
+As stated before, to start a function, you need to use the keyword 'def'. All Quirk Functions must take exactly one argument (in this case 'text').
+In this example, the text is reversed and returned all in one line. 'text[::-1]' is the Pythonic way of reversing a list or string.
+The last line is the most important part. This tells Pesterchum to call this function whenever 'reverse()' is used in a quirk.
diff --git a/docs/README-karxi.mkdn b/docs/README-karxi.mkdn
new file mode 100755
index 0000000..c491cb1
--- /dev/null
+++ b/docs/README-karxi.mkdn
@@ -0,0 +1,184 @@
+Welcome to Pesterchum 3.41!
+=============================
+
+## FOR NEW USERS
+This modification of Pesterchum is intended for people who are already familiar
+with using the base client.
+
+If you aren't, please check the standard build's [documentation][pchum-doc].
+
+[pchum-orig]: https://github.com/illuminatedwax/pesterchum
+[pchum-doc]: https://github.com/illuminatedwax/pesterchum/blob/master/README.mkdn
+
+## FOR EVERYONE ELSE
+Greetings! This is a modification of Pesterchum, made because Pesterchum is
+effectively no longer maintained, that is intended to fix a number of issues.
+
+The code used as a base is a newer version of Pesterchum than the one in
+circulation, and thus has plenty of useful features that can be found in the
+[CHANGELOG][changes].
+
+In addition, there are other features and improvements that have been made, and
+there are many more planned. Check the [TODO list][todo-done] to see what's
+been fixed, as well as what's [planned][todo-upcoming].
+
+[changes]: https://github.com/karxi/pesterchum/blob/master/CHANGELOG.mkdn
+[todo-done]: https://github.com/karxi/pesterchum/blob/master/TODO.mkdn#tododone
+[todo-upcoming]: https://github.com/karxi/pesterchum/blob/master/TODO.mkdn#features
+
+### Installation
+There isn't an automated installer yet, but the steps involved aren't all that
+difficult.
+
+#### Pitfalls
+* If you're on a 64-bit system (and most are these days), use those links. You
+ can also use the 32 bit versions, if you choose, but you *cannot* mix them.
+* If you're on a 32-bit system but use the 64-bit installers, you'll get an
+ error along the lines of "not a valid Win32 application", or the
+ installer will simply fail.
+* This version of Pesterchum does not come compiled as an executable, and thus
+ does not have P ython/PyQt4 packaged with it. Those are necessary for
+ Pesterchum to run, so you have to install them manually.
+
+#### First-Time Install
+Download links are for Windows, but a quick Google search will find everything
+necessary.
+
+1. Install **Python 2.7** or higher if you don't already have it:
+ * [32 bit][python2-32]
+ * [64 bit][python2-64]
+
+ Be **sure** to add Python to the PATH if asked to do so during
+ installation. It means Python will be usable from the console,
+ which is necessary for this to run.
+
+2. Install **PyQt4**:
+ * [32 bit][pyqt4-32]
+ * [64 bit][pyqt4-64]
+
+3. **(LINUX)** Install **pygame**:
+ * [pygame download page][pygame-dl]
+ * You don't need to install this if you're using Windows. Linux users need
+ to install it to enable sound, but it will otherwise work without it.
+ * If you want to download this, you should probably do so using your native
+ package manager.
+
+4. Download **Pesterchum**:
+ * [Download from main branch][pchum-zip]
+
+5. Unzip Pesterchum somewhere easily-accessible.
+
+6. **If you have any custom themes**, copy/paste them into the 'themes' folder.
+ You can find this in `%LOCALAPPDATA%\pesterchum`, which is the same as
+ `%APPDATA%\..\Local\pesterchum`. Copy/paste one into Explorer's address bar
+ and you'll end up where you need to be.
+
+ Oftentimes the 'themes' folder doesn't exist in Pesterchum's user-specific
+ config folder, so you'll have to make it and copy the custom themes into
+ it.
+
+ __If, for some reason, that doesn't work:__
+
+ You can also copy the missing themes into the 'themes' folder of the version
+ you just unzipped. **Don't overwrite any files** if you do this - the themes
+ used by this have been updated, and the older default themes may break when
+ used.
+
+7. Run Pesterchum! How you do this depends on the OS:
+ * **(WINDOWS)** Run `w32-run-pchum.bat`.
+ * **(LINUX)** Run `./pesterchum`, preferably via terminal.
+ * Note that this is made to provide debugging information - so that if
+ errors come up, they can be reported to me, and I can fix them.
+
+[python2-32]: https://www.python.org/ftp/python/2.7.12/python-2.7.12.msi
+[python2-64]: https://www.python.org/ftp/python/2.7.12/python-2.7.12.amd64.msi
+[pyqt4-32]: http://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-4.11.4/PyQt4-4.11.4-gpl-Py2.7-Qt4.8.7-x32.exe
+[pyqt4-64]: http://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-4.11.4/PyQt4-4.11.4-gpl-Py2.7-Qt4.8.7-x64.exe
+[pygame-dl]: http://www.pygame.org/download.shtml
+[pchum-zip]: https://github.com/karxi/pesterchum/archive/master.zip
+
+#### Upgrading
+**NOTE: This only applies to those who already have this patched Pesterchum
+installed.**
+**DO NOT extract this into a folder containing pesterchum.exe, because it WILL
+break.** Read up to **First-Time Install** if you're installing this version
+for the first time.
+Otherwise...
+
+Just re-download the [Pesterchum zip][pchum-zip] and extract it over your old
+installation, replacing everything that was already there. That's all there is
+to it!
+
+#### Having Problems?
+I can't offer much help in this regard; if you're getting errors, feel free to
+try to contact me, but if you're having trouble with the installers, there's
+little I can do. [How to install Python][howtogetpython] might help; failing
+that, Google saves lives.
+
+[howtogetpython]: http://www.howtogeek.com/197947/how-to-install-python-on-windows/
+
+
+
+SMILIES
+-------
+None of the smilies have changed or been added, yet; this list is kept for
+posterity and easy reference.
+
+* `:rancorous:`
+* `:apple:`
+* `:bathearst:`
+* `:cathearst:`
+* `:woeful:`
+* `:pleasant:`
+* `:blueghost:`
+* `:slimer:`
+* `:candycorn:`
+* `:cheer:`
+* `:duhjohn:`
+* `:datrump:`
+* `:facepalm:`
+* `:bonk:`
+* `:mspa:`
+* `:gun:`
+* `:cal:`
+* `:amazedfirman:`
+* `:amazed:`
+* `:chummy:`
+* `:cool:`
+* `:smooth:`
+* `:distraughtfirman:`
+* `:distraught:`
+* `:insolent:`
+* `:bemused:`
+* `:3:`
+* `:mystified:`
+* `:pranky:`
+* `:tense:`
+* `:record:`
+* `:squiddle:`
+* `:tab:`
+* `:beetip:`
+* `:flipout:`
+* `:befuddled:`
+* `:pumpkin:`
+* `:trollcool:`
+* `:jadecry:`
+* `:ecstatic:`
+* `:relaxed:`
+* `:discontent:`
+* `:devious:`
+* `:sleek:`
+* `:detestful:`
+* `:mirthful:`
+* `:manipulative:`
+* `:vigorous:`
+* `:perky:`
+* `:acceptant:`
+* `:olliesouty:`
+* `:billiards:`
+* `:billiardslarge:`
+* `:whatdidyoudo:`
+
+
+
+[modeline]: vim:set autoindent ts=4 sts=4 sw=4 tw=79 expandtab:
diff --git a/README-karxi.mkdn b/docs/README-karxi.mkdn.backup
similarity index 100%
rename from README-karxi.mkdn
rename to docs/README-karxi.mkdn.backup
diff --git a/README-pesterchum.mkdn b/docs/README-pesterchum.mkdn
similarity index 100%
rename from README-pesterchum.mkdn
rename to docs/README-pesterchum.mkdn
diff --git a/docs/TODO.mkdn b/docs/TODO.mkdn
new file mode 100755
index 0000000..552e733
--- /dev/null
+++ b/docs/TODO.mkdn
@@ -0,0 +1,358 @@
+# Todo
+
+## Git
+* Set up issue tracking for this fork, if possible (and move the TODO list)
+
+## Features
+* Log viewer needs to have BBCode/HTML/Text copy modes
+* Turn @ and # links on/off?
+* Show true bans? COMPRESS QUIT MESSAGES ON BAN
+* Colour saving boxes things?
+* Whowas for last seen online?
+* Tab completion of two letter names
+* Auto download/install updates via Windows installer
+* Make toast notifications only on certain chums
+* Local alisas for chums
+* Don't make new windows be all in your face and shit
+* Hide offline friends per group
+
+* LET PEOPLE TURN OFF HONKING - people already rename the soundfile and such to
+ do this manually
+
+* Add support for displaying more verbose information (e.g. Cease messages which
+ tell you more than the abbreviation of who left)
+* Make Pesterchum recognize conventional /mes so they aren't invisible
+* Make @XY and @xxxYyy formats ping their targets
+* Allow matches like @?XY and @FXY or @PXY3 - make them only match the target
+ currently set to that.
+* Make @ notation not match @u@; and similar (make invalid nick chars break
+ matches)
+* Allow use of @ and # links to switch between logs in log viewer (start with
+ the closest time to the line of the log that's linking)
+* Improve log viewer in general (unbind instances from specific users/memos)
+* Fix hyperlink escaping (Qt seems to do this automatically - need a workaround)
+* Show bans if +h or higher (+h, +o, +a, +q)
+* Auto-invite (for people on the friends list?)
+* Right click on names for inviting, ACTUALLY banning, PMing, ... See also:
+ Things proper IRC clients can do. (Set basic mode stuff up first, get the
+ infrastructure in place.)
+
+* Add more comprehensive status support - IDLE, DND, INVISIBLE for now - or at
+ least add similar functionality.
+* Improve Pesterchum's tracking of disconnections (check memos for quits...)
+* SEPARATE FUNCTIONALITY from CONNECTED STATE!! This is a huge problem! Being
+ shunted off our nick closes windows and breaks things! Just D/C and
+ reconnect?
+ * It'd probably be best to give an option to either CHANGE NICKS or
+ DISCONNECT upon nick collision...? But, then how would we GHOST?
+ * Auto-disconnect if collision before joining channels, make it
+ possible to disconnect (but not send messages, obviously)
+ without losing everything
+ * Maybe GHOSTing should use auto-identify to ensure- no, that doesn't
+ work, because we can't ident into a specified nick without being ON
+ it. Need GD's help to fix....
+
+* Make it possible to test quirk things and such without connecting? This'd be
+ hard to separate out, but useful.
+ * Make a quirk 'bin' that exists independent of profiles, and can be
+ copied to/from at will.
+ * Allow us to set quirks that apply to all profiles! For things like
+ replacement quirks.
+
+* Right-click Time entry field to see those used? (Replace left/right buttons?)
+ * Save commonly-used times on a per-handle basis!
+* Make the memo list highlight/recolor the names of channels you're in
+ (including secret ones)
+* Add an option to Cycle (for log separation)
+
+* Add a separate 'Tweaks' section in Options
+* Fix graphical issues with dark themes vs. light themes (Qt/text too
+ light/etc.)
+
+### Services
+* Use web connection to send offline messages in email-like fashion
+ (Idea: ghostDunk)
+* Better NickServ registering
+* Implement **MemoServ** support
+* Tell user when NickServ handles are going to expire
+* Tell user when old handles have D/C'd? Offer autoghost support?!
+
+### GUI
+* Refactor code to make way for QShortcut usage. (Unify shortcut processing?)
+ * Enable/Disable toggle (Firefox style option sheet-esque? Seems okay.)
+ * Ctrl+W closes tab
+ * Ctrl+Shift+PGUP/PGDN moves tab
+ * Option to disable Ctrl+Tab's jump to newest
+ * Ctrl+Shift+V "Mass Paste" option (parse lines in sequence)?
+* Make mouseovers (refocusing) reset idle timer (disableable)
+* Set up EVENT FILTERS in windows to redirect events to the right places
+ * Make the context key (if used in the text area) append the menu options
+ from the right-click menu
+* Make system messages use timestamps like everything else
+* Offer option for timestamps in memos
+* Make a status window/popup to contain logs of information like invites
+
+### "Security"
+**Note: The idea of security on this platform is pretty much laughable. Most of
+these changes are simply bandages being placed over fundamentally flawed
+design.**
+
+If you want Pesterchum to be more secure, either get ghostDunk to make changes
+to the server and its administration policies, or get everyone to switch to this
+version of the client. There aren't really any other options.
+
+* Flood protection (don't send because of the same target too many times in a
+ row)
+ * Just requires a timer + lastmessage date check.
+* Lock exploitable functionality to those on your friends list (optional)
+ * Canon handles are excluded from this concern, but subject to flood
+ controls regardless.
+ * A measure of politeness is reasonable here - checking if a friend is on
+ as a different handle should be okay, once IRC access is revamped.
+ * Don't send MOOD answers to those not friended
+ * Ignore pesters from those not on your friends list (optional)
+ * Ignore pesters from those not sharing a memo? (optional)
+* Make BLOCKED list persistent, if it isn't already
+ * Offer option to block hosts, not just handles...
+ * Explain to the user that this option is very dangerous.
+
+### Advanced
+* Offer option for 'new' syntax adjustments
+ * Replace: "???, ???, ??? ceased responding to memo." for parts.
+ * "XY ({handle}) ({times}) ceased responding to memo."
+ * If +h or above: Include host as well as handle.
+ * Replace: "??? ceased responding to memo." for nickchanges.
+ * "XY ({handle} {host?}) left memo; AB ({handle} joined memo."
+ * Can violate the norms somewhat, these aren't theme-controlled.
+ They're basically for power users/admins.
+* Offer GUI changes
+ * Make tabs "{name} ({# of unread msgs})" if unread
+ * Make themes able to define colors that are too dark to read for an
+ individual window
+ * Set up code for 'nudging' color codes into readable territory; presumably
+ via an adjustable setting. (This CANNOT affect logs - just the log
+ reader.)
+* Come up with a solution for duplicate times/handle abbreviations
+ * Maybe make mouseover for the handles display the full handle?
+
+* Option to disable backwards compatibility:
+ * For those that are *really* sure that this build is the build for
+ them.
+ * Should enable extra features, including ctag compression.
+ * Allow manual compression changes via memo right-click menu for
+ 'advanced' (per the setting) users
+
+## Todo/Done
+**Everything in this section has already been completed.**
+
+### GUI
+* Toggle individual tab flash / alert sounds (from the same right-click memo
+ that lets us toggle OOC)
+* Make CTRL+PGUP/PGDN switch memo/pester tabs
+* Make Ctrl+J/K usable for tab changing
+* Make right-clicking on a tab open up the right-click menu one would get on
+ right-clicking the title (frame??)
+* Right-click in userlist offers option to Pester
+* Make certain dialogues start on the safer of the two options
+ * Make the Reconnect dialog start on Reconnect
+ * Make the Rejoin dialog start on Rejoin
+ * Make the Invite dialog start on Decline
+
+### Usability
+* Fix parser text-loss bug that plagues everyone (especially Chumdroid users)
+* Make /me messages that cut continue into more /me messages
+* Make sound work on Windows through QSound (disables volume control)
+* Color tags are now posted as their shorter hexadecimal forms, if applicable
+ (255,255,255 -> #FFFFFF, for example)
+* Separate auto-idle and checkbox idle so they don't share a state (and make
+ the first send set the timer for additional idle responses)
+* Stop us from sending IDLE messages to NickServ
+* Fix NickServ auto-login things
+* Make a window that can be used to interface with the script directly - a
+ simple Python console
+* Make the memo name entry box accept a comma-separated list
+* Make console users able to check widget theme/style information via mouseover
+ and key combo (for people making themes or debugging)
+ * This is presently Ctrl+Alt+w, after opening the console (Ctrl+~).
+
+### Backend
+* Perpetual code cleanup, refactoring, simplification and general improvements
+* Syntax changes/updates and the like
+
+## Code
+**Improvements and changes pertaining to Pesterchum's internals.**
+
+### General
+* Implement new Lexer for the sake of everyone's sanity
+ * This is half-done - rendering still uses the old lexer
+* Redo `PESTERCHUM:` processing/redo whole msg received processing chain
+* Redo text processing in general
+* Redo quirk processing (use pieces from Textsub if needed)
+* Pare down the PesterMemo object so it inherits more things from PesterConvo
+ *implicitly*
+* SOONER OR LATER: Redo internal chum storage, centralize data into widely
+ accessible manager objects, etc.
+* Also: Overhaul settings storage. Bring it more in line with the system Textsub
+ used (if feeling masochistic), but simpler.
+* **Overhaul information storage** - chums, conversations, memos; all should be
+ handled by a backend and merely RENDERED into Qt objects!!
+* Overhaul debugging
+ * Give an actual (small) window with traceback that can be sent to dev(s)
+ * Use the console for this?
+* Debug generic.py's CaseInsensitiveDict/replace it with mine
+* Overhaul messaging so **Chan/Nick/Memo Servs** all use the same code (and
+ lexer)
+* **Separate Pesterchum system handling from window handling.** Dicts should be
+ stored and maintained via dicts - even a refined version of what I used for
+ textsub.
+ * Doing it this way means I can fix the case in/sensitivity issue, too.
+* Set up framework for easily logging/accessing channels, users, etc...like
+ what hexchat has.
+* More efficient framework for accessing stored user information - right now,
+ Pesterchum keeps information on user colors and such on hand *forever*,
+ meaning that things inevitably get clogged up with handles that are never
+ really seen, or only seen once, or even just randomly generated. This is
+ silly and should be changed; I'll probably make a namedtuple for users or
+ something, and save it all to a separate JSON file or two.
+ Said JSON file should keep the extra information on hand - or rather, the
+ 'recent users' JSON file should keep most of the detailed information and be
+ accessed first, with the larger 'inactive users' file being accessed to
+ check for unfamiliar handles.
+ These would have to output the old data to pesterchum.js for backwards
+ compatibility purposes.
+* Finish creating the sound wrapper. Just make it check what the type of sound
+ needed is upon creation, and instantiate a private class based off of that.
+ * There is basically no good way to do this without moving to Qt5. I
+ might try that myself later, but that's a long-term goal.
+* Stop from sending TIME notifications when unable
+ * Until then: Hide resulting "no external messages"/+m messages.
+* Stop sending auto-IDLE messages unless the chat has been updated since the
+ last one.
+* Make groups, chums, etc. preferentially load from the main directory, *then*
+ check logs.
+ * Compatibility is important, so update both if they exist. (Bluh!)
+
+### Debugging
+* Set up a simple function to display a traceback instead of silently moving on!
+ * Use the console for this?
+* Make small, simplistic windows that allow the viewing of internal variables
+ pertaining to things like set quirks, users present, etc.
+ * Also let it display the stylesheet settings of the current window, or
+ similar.
+* Make a console to display debug info without requiring us to run from terminal
+* Allow us to specify flags via command line
+ * Let us specify a separate config (pesterchum.js) file!!
+* Make the console support color (not ctags, more stylesheet stuff) (need
+ parser work for this)
+
+## Bugs
+* weird memo time bug
+* Windows doesn't show style sheet sometimes?? Maybe related to themes.
+* Issues with connecting? Client not closing connection right? People keep
+ getting "nick taken" messages
+* When using mood sort, scroll position jumps to last selected chum
+* Closing a timeclone doesn't actually cease for everyone else
+* Kill Zalgo
+* Random invisible, tiny links to last link at end of every message
+* Chums not appearing on chumroll when initals are the same? (bS)
+* Recognize IRC 471, 473, 474 and 475
+* memo links aren't case sensitive
+
+* Mentions occasionally don't work (e.g. in /me)
+* Character times aren't 'forgotten' on Part
+* +c is not properly recognized on join, nor does it stop someone from
+ reenabling their quirk (let ops and above ignore it?)
+* Chumlist handles groups pretty badly (no using the same name as a handle, for
+ example? Needs an errormessage at least)
+ * The whole chumlist handling system really ought to be refactored into
+ something sane...the objects should only be there to render
+* PESTERCHUM: messages are sent to things like NickServ
+* Log folder/file names are not case-sensitive, so they break on non-Windows
+ systems
+* Log viewer needs adjustments and sanity checking for log directories
+* Capitalized /me's don't render (should forcibly lowercase them)
+* 'pcd10' and similar users don't get proper abbreviations on part (ugh)
+
+* Volume control doesn't work without pygame
+* Sound on Linux doesn't work without pygame
+* Update checking code gives false positives (update to use json file from git?)
+* Pesterchum doesn't seem to close all of its file handles - it runs out of
+ handles to use on Linux
+ * Others have reported memory leak-induced crashes on Windows. These
+ may or may not be related.
+* Pesterchum groups aren't carried over when profiles are copied!
+* Malformed Pesterchum profiles cause the program to crash and burn
+ * What causes these? Exiting in the middle of a write operation? Threading
+ issues?
+* Malformed Python quirks try to open an error dialog and crash if Pesterchum
+ is opened as a module
+* Pesterchum's threading is messy and scary, and should probably be cleaned up
+ some via the addition of locks
+* Pesterchum's file handling is atrocious - inefficient to the extreme.
+ * There are multiple copies of things that really need only be loaded once
+ in a lot of different places.
+ * Memos don't seem to close their file handles properly. (Logs too??)
+
+## Windows Bugs
+* XP SP2: sometimes mouse clicks dont register? must be some kinda crash
+* On reconnect and nick change, momentary theme change causes menu items to
+ stop working
+* Random chums won't show up on chumroll
+* Popup toast notifications cause main window to raise
+
+## Mac Bugs
+**Due to my lack of access to a Mac, these are unlikely to be fixed.**
+* Mac doesn't show tabs right, display gifs, highlighting thing?
+* SS: also the background image is broken
+* SS: in the one-on-one pester it resizes with the window
+* SS: but the memo one doesn't resize
+* SS: and the arrows next to the time thing overlap the CLOSE button
+* Lex: There seems to be a faint outline around most non-square themes.
+
+
+## Things that won't be done
+**Requests that, for one reason or another, will not be fulfilled.**
+
+### Scrapped Features
+**I'll explain why these ones won't happen.**
+
+> * More complex quirks: by-sound
+
+* This would require a way to determine what maps to a sound, and
+ replace it.
+ I've played with the idea before. It resulted in me needing to look
+ up things like the [Metaphone Algorithm][metaphone] to figure out
+ how it might be even remotely possible. The results were NOT a fun
+ time; if this is ever implemented, it will be much, much later than
+ just about everything else.
+[metaphone]: https://en.wikipedia.org/wiki/Metaphone
+
+> * Spy mode
+
+* I feel as though I shouldn't need to tell anyone why this is a bad idea.
+ Some people already have this capability anyway; I used to be one of them.
+ There's no real need to implement an inferior version into every single
+ client on Pesterchum.
+
+> * "Someone has friended you" notifier
+> * Spectation notices (Idea: lexicalNuance) (probly WONTFIX)
+
+* These are milder invasions of privacy than the above, but they are still
+ invasions of privacy.
+
+> * When 'banned' make impossible to connect using timestamp banned under
+
+* This is a lot of work for something that purely affects immersion - while
+ also breaking a number of things in the process. Too much work for too
+ little payoff.
+
+> * Use web connection to save profiles (Idea: ghostDunk)
+
+* There is no way to do this now that Pesterchum is basically unsupported; an
+ external server would be necessary for storage.
+ As such, you'll just have to settle for copying your profiles and logs when
+ you change computers.
+
+
+
+[modeline]: vim:set autoindent ts=4 sts=4 sw=4 tw=79 expandtab:
diff --git a/themes.txt b/docs/themes.txt
similarity index 100%
rename from themes.txt
rename to docs/themes.txt
diff --git a/docs/trollquirks.mkdn b/docs/trollquirks.mkdn
new file mode 100755
index 0000000..d957cce
--- /dev/null
+++ b/docs/trollquirks.mkdn
@@ -0,0 +1,182 @@
+Troll Quirks
+============
+
+Karkat
+------
+
+REGEXP: "(.)"
+REPLACED WITH: "upper(\1)"
+
+
+Aradia
+------
+
+REGEXP: "[oO]"
+REPLACE WITH: "0"
+
+
+#####After Prototyping
+
+RANDOM REGEXP: "\s"
+REPLACED WITH: " ribbit ", " ", " ", " ", " ", " ", etc....
+
+
+Tavros
+------
+
+REGEXP: "([a-z])"
+REPLACED WITH: "upper(\1)"
+
+
+REGEXP: "(^[A-Za-z])"
+WITH: "lower(\1)"
+
+
+REGEXP: "([iI])\b"
+WITH: "lower(\1)"
+
+
+REGEXP: "([\.\?!]|$)"
+WITH: ","
+
+
+REGEXP: "(,\s?\w)"
+WITH: "lower(\1)"
+
+
+Sollux
+------
+#####Pre-blind
+
+REGEXP: "[iI]"
+REPLACE WITH: "\1\1"
+
+
+REGEXP: "[sS]"
+REPLACE WITH: "2"
+
+
+REGEXP: "\btoo?\b"
+REPLACE WITH: "two"
+
+
+#####Blind
+
+REGEXP: "[oO]"
+REPLACE WITH: "0"
+
+
+Nepeta
+------
+
+PREFIX: ":33 < "
+
+
+REGEXP: "[eE][eE]"
+REPLACE WITH: "33"
+
+
+Kanaya
+------
+
+REGEXP: "\b(\w)"
+REPLACE WITH: "upper(\1)
+
+
+Terezi
+------
+
+REGEXP: "[aA]"
+REPLACE WITH: "4"
+
+
+REGEXP: "[iI]"
+REPLACE WITH: "1"
+
+
+REGEXP: "[eE]"
+REPLACE WITH: "3"
+
+
+REGEXP: "(.)"
+REPLACE WITH: "upper(\1)"
+
+
+Vriska
+------
+
+REGEXP: "[bB]"
+REPLACE WITH: "8"
+
+
+RANDOM REGEXP: "([aeiouAEIOU])"
+REPLACE WITH: "\1\1\1\1\1\1\1\1", "\1", "\1", "\1", "\1", "\1", etc........
+
+
+RANDOM REGEXP: "([\.\?,!]$)"
+REPLACE WITH: "\1\1\1\1\1\1\1\1", "\1", "\1", "\1", "\1", "\1", etc........
+
+
+REPLACE: ":"
+WITH: "::::"
+
+
+Keep in mind that the RANDOM REGEXP ones require the extra "\\1"s to be added in order to not happen all the time. If you want those quirks to happen less often, add more "\\1".
+
+Equius
+------
+
+PREFIX: "D --> "
+
+
+REGEXP: "[lL][oO][oO]"
+REPLACE WITH: "100"
+
+
+REGEXP: "[xX]"
+REPLACE WITH: "%"
+
+
+REGEXP: "(\b[sS][tT][rR][oO][nN][gG]\w*)"
+REPLACE WITH: "upper(\1)"
+
+
+REGEXP: "[oO][oO]"
+REPLACE WITH: "00"
+
+
+Gamzee
+------
+#####Version 1: "HoNk HoNk"
+
+REGEXP: "([a-zA-Z])([a-zA-Z]?)"
+REPLACED WITH: "upper(\1)\2"
+
+
+#####Version 2: "HoNk hOnK"
+
+REGEXP: "([\w\s])([\w\s]?)"
+REPLACED WITH: "upper(\1)\2"
+
+
+Eridan
+------
+
+REGEXP: "([vVwW])"
+REPLACE WITH: "\1\1"
+
+
+REGEXP: "ing\b"
+REPLACE WITH: "in"
+
+
+Feferi
+------
+
+REGEXP: [hH]
+REPLACE WITH: ")("
+
+
+REPLACE: "E"
+WITH: "-E"
+
diff --git a/pesterchum.py b/pesterchum.py
index 9d54e97..f56945f 100644
--- a/pesterchum.py
+++ b/pesterchum.py
@@ -1139,7 +1139,7 @@ class PesterWindow(MovingWindow):
self.console = AttrDict(dict(
window = None,
- action = QtWidgets.QAction("Console", self),
+ action = QtWidgets.QAction("Console".upper(), self),
is_open = False
))
self.console.shortcuts = AttrDict(dict(
@@ -1519,10 +1519,11 @@ class PesterWindow(MovingWindow):
win = self.console.window
if win is None:
# We have no console window; make one.
- logging.warning("Making a console....")
+ logging.info("Making a console....")
self.console.window = win = console.ConsoleWindow(parent=self)
- logging.warning("Console made.")
- win.windowClosed.connect(self.consoleWindowClosed)
+ logging.info("Console made.")
+ # 'ConsoleWindow' object has no attribute 'windowClosed'
+ win.finished.connect(self.consoleWindowClosed)
self.console.shortcuts.curwgt.activated.connect(win.designateCurrentWidget)
if self.console.is_open:
@@ -1575,7 +1576,7 @@ class PesterWindow(MovingWindow):
def consoleWindowClosed(self):
self.console.is_open = False
self.console.window = None
- logging.warning("Console closed.")
+ logging.info("Console closed.")
def newMemo(self, channel, timestr, secret=False, invite=False):
if channel == "#pesterchum":
@@ -3346,6 +3347,7 @@ Click this message to never see this again.")
def _retrieveGlobals():
# NOTE: Yes, this is a terrible kludge so that the console can work
# properly. I'm open to alternatives.
+ # 👁️👁️
return globals()
if __name__ == "__main__":
diff --git a/pesterchum.spec b/pesterchum.spec
index 6e23c73..15229e6 100644
--- a/pesterchum.spec
+++ b/pesterchum.spec
@@ -6,10 +6,10 @@ added_files = [
( "quirks", 'quirks' ),
( "smilies", 'smilies' ),
( "themes", 'themes' ),
+ ( "docs", 'docs' ),
( "README.md", '.' ),
- ( "README-karxi.mkdn", '.' ),
- ( "README-pesterchum.mkdn", '.' ),
- ( "themes.txt", '.' ),
+ ( "LICENSE", '.' ),
+ ( "CHANGELOG.md", '.' ),
( "server.json", '.' ),
( "PCskins.png", '.' ),
( "Pesterchum.png", '.' )
diff --git a/setup.py b/setup.py
index 8092a11..bf58404 100644
--- a/setup.py
+++ b/setup.py
@@ -18,10 +18,10 @@ else:
includefiles = ["quirks",
"smilies",
"themes",
+ "docs",
"README.md",
- "README-karxi.mkdn",
- "README-pesterchum.mkdn",
- "themes.txt",
+ "LICENSE",
+ "CHANGELOG.md",
"server.json",
"PCskins.png",
"Pesterchum.png"]