- Port the speech module!

- $true , $false
- die message = echo message, return

- The script editor eats TABS ? !!!!!!!

- Check away status from the /WHO message ? (this would involve requesting WHO often)
- Handle more uncommon channel modes in the channel mode box ?
  SHould get the available modes from RPL_ISUPPORT and show them in the box

- Export RAW events



# File created on Sat Sep 9 06:42:15 2000 by Kristoff
# PLEASE update this file :)) Add new entries as soon as you think there is
# something to be done. The most important entries should go to top of this file
# and I think a good idea would be to write your names somewhere near the task
# you would like to take up...

hunterz: charset guessing: check http://trific.ath.cx/software/enca/ use as module?
- changing auto-join channels not in server properties but in irc network properties
- on unexpected disconnect, try next server in group (irc network)
- full localization of popups.kvs like popups_cs.kvs popups_de.kvs or use this in themes eg. fancy_cz, fancy_de ?


On-line charset guessing:
	KviWindow should have the possibility of setting a KVI_CHARSET_AUTO
	The KviWindow::decodeText() should contain an algorithm that
	would use the best "guess" charset based on the window output
	history , the actually detected charset and the text to decode

 /charset ISO-8859-15

[02:00:55] <@PragmaOff> Note: KVIrc performs the hostname lookup only at IRC connection startup
[02:01:20] <@PragmaOff> an interesting feature to add would be to perform the lookup if the related option has changed after closing the options dialog
[02:01:45] <@PragmaOff> it could be a "reset" hint to be added in the options table (kvi_options.h)

The classic taskbar shrinks totally when an option is applied, we need to move it to
make it get the correct size.


[02:01:42] <1,3PennyAway [00:20:50] CTCP ERRMSG risposta da frosty_
[user@td9091b95.adsl.terralink.de]: Sorry, your DCC REJECT request can't be
satisfied: Unbekannter DCC-Typ 'REJECT'

- Multiple identities (and identity associations for servers)

- TAB Mode ?

- Pragma should read this file :D

- A help tab in the script center like in kvirc 2.1.1

- Highlighing:
	The own nick should be highlighted only if entire word (for harv , do not highlight harvester)
[01:57:33] <grwiiiik> <Pragma> need to highlight entire words only << !!!! add an option ! i really prefer to HL only on part of words
[02:08:45] <harv> yea.. or the solution I would prefer: HL on part of words, but have a list with words that are not highlighted. so I can get highligt on all words that include harv, except (for example): harvard, harvester and charvalidator 

- The DCC events are completely wrong.. need to be fixed (and rethought a bit to make fserve possible)

- DCC Popup:
	The r* buttons should be moved to their own submenu of the DCC submenu, there's too much there now.

- Tab-completion:
	1) Tab-completion hasn't been implemented for commands.
	2) Tab-completion should also work for channel-names (like #KVIrc)
- Topic-field:
	Topic-field is in the console windows too. Probably because of the button that is on the far right, is there no
	other solutions for this? Maybe that field could be used by scripters for dynamic server-info as it's longer than
	the text-place available in the window-text. The same thing applies to the query and dcc-chat windows.
- Window decorations:
	Any way to change this? Maybe different sizes, the one used now could be medium, then we could also
	have small and large?
- Query windows:
	1) There should be a way to set the default width and height for new queries, at the moment this is locked.
	[ Pragma : probably fixed , needs to be tested ]
	2) The nick-list should be possible to turn off by default, most times it's just in the way. It's better if one
	turns it on the few times one needs it.
- $mask()
	2, 4, 7 and 12 should give a user with the host one.two.three.net *.three.net, instead it gives you
	*.two.three.net.
	[ Pragma : probably fixed , needs to be tested ]
- Channel mode-field
	The channel mode field should be dynamical, it should be able to change width according to what it needs,
	today it's way too long.
- Userlist
	The userlist should be dynamical after how many characters the server lets you use in a nickname, today it's
	way too wide, this makes it look ugly.
- Transparancy
	Setting either one of these to 0 makes the text go nuts.
- IRC Contexts
	There need to be a way to detect how many different IRC-Contexts there is and what ID each of them have.
	All commands must also be irc-context aware, so you can "/away -n irc-context1 irc-context3 I am away".
	I am aware that this can be done by targeting at the console of the IRC-context.
- Modules in the main package
	Removing gnutella from the main package and release this separately, this will have several benefits:
	a) Main package becomes smaller and faster to download (about 370k)
	b) Main package compiles faster (every second counts)
	c) A module-section in the web-pages where users can download the module and learn how to write
	modules, this will make it more "exciting", and will make it look like something is being done outside the
	main package too.
- Text-hints
	Text hints doesn't dissapear after changing desktop under KDE, and you have to change back to the
	desktop where KVIrc is to remove the hint.
- Bugs
	1) /window.new kills kvirc
- CService support
	We already have nickserv support, why not CService/X support? This should be much much easier to
	implement as it's only on one net (Undernet), and with a static host and command that never changes, we
	only need to specify password.
- Window caption
	Double-clicking should maximize
- Taskbar
	Clicking a window which already has focus should minimize it
- Advanced FServe filter (???)
	What about implementing something that makes FServes look like ftp's? This would be great!
	Think splitting the dcc chat in two, with the lower part being the normal dcc chat and the upper part a filtrating
	part that shows you a dir-view etc etc.
- Missing
	1) addtarget and deltarget


When queries are opened by the user (via the query command) they shouldn't be 
minimized like they are now if you select it in the options, this should only 
apply to new queries that aren't created by the user.


Op-notices should go to the channel.. Right now they go to the console

Keeping channels open on kick, rejoining the channel, now I can't scroll down 
and up in the userlist anymore...



You silenced privmsg (hidden), but you also seem to have taken msg at the same 
time ;)



an other bug that hangs the client:
this happens when I use $config.keylist:

%id=$config.open(toto.kvc)
config.setsection %id sec1
config.write %id key1 word
echo $config.keylist(%id)
config.close %id

from gdb :

#0 0x40992899 in mremap () from /lib/libc.so.6
#1 0x409d28e0 in __check_rhosts_file () from /lib/libc.so.6
#2 0x4083da27 in KviStr::append () from
/home/raynaud/rpmfiles/usr/local/lib/libkvilib.so.3
#3 0x40a158bb in ?? ()
#4 0x81391e3 in KviUserParser::parseIdentifier ()
#5 0x8136d02 in KviUserParser::parseCmdFinalPart ()
#6 0x813e0cf in KviUserParser::parseCmd_ECHO ()



Hello,

I tried to compile the cvs version yesterday :

libkvisnd.cpp: In function `void *
play_oss_threadFunction(KviStr *)':
libkvisnd.cpp:79: implicit declaration of function `int
afGetVirtualFrameSize(...)'
make[4]: *** [libkvisnd.lo] Error 1

#########################################
Other things:
- I was editing a registered mask in a static browser, and it
crashed k3 after clicking OK,

0x409426be in free () from /lib/libc.so.6
(gdb) bt
#0 0x409426be in free () from /lib/libc.so.6
#1 0x4085253e in KviIrcMask::~KviIrcMask () from
/home/raynaud/rpmfiles/usr/local/lib/libkvilib.so.3
#2 0x815cf02 in QList<KviIrcMask>::deleteItem ()
#3 0x401c816f in QGList::clear () from
/home/raynaud/rpmfiles/usr/local/qt/./lib/libqt.so.2
#4 0x815d057 in QList<KviIrcMask>::clear ()
#5 0x815cd9a in QList<KviIrcMask>::~QList ()
#6 0x4084c5fc in KviRegisteredUser::~KviRegisteredUser ()
 from /home/raynaud/rpmfiles/usr/local/lib/libkvilib.so.3
#7 0x40864c1f in QAsciiDict<KviRegisteredUser>::deleteItem ()
 from /home/raynaud/rpmfiles/usr/local/lib/libkvilib.so.3
#8 0x401c68e7 in QGDict::clear () from
/home/raynaud/rpmfiles/usr/local/qt/./lib/libqt.so.2
#9 0x40864d04 in QAsciiDict<KviRegisteredUser>::clear ()
 from /home/raynaud/rpmfiles/usr/local/lib/libkvilib.so.3
#10 0x40864d3f in QAsciiDict<KviRegisteredUser>::~QAsciiDict ()
 from /home/raynaud/rpmfiles/usr/local/lib/libkvilib.so.3
#11 0x4084cdcd in
KviRegisteredUserDataBase::~KviRegisteredUserDataBase ()
 from /home/raynaud/rpmfiles/usr/local/lib/libkvilib.so.3
#12 0x40a568d8 in ?? ()
#13 0x40a569fb in ?? ()
#14 0x402b6aed in QObject::activate_signal () from
/home/raynaud/rpmfiles/usr/local/qt/./lib/libqt.so.2
#15 0x40411b1e in QButton::clicked () from
/home/raynaud/rpmfiles/usr/local/qt/./lib/libqt.so.2
#16 0x403395bd in QButton::mouseReleaseEvent ()
 from /home/raynaud/rpmfiles/usr/local/qt/./lib/libqt.so.2
#17 0x4031b6ae in QWidget::event () from
/home/raynaud/rpmfiles/usr/local/qt/./lib/libqt.so.2
#18 0x4024573e in QApplication::notify () from
/home/raynaud/rpmfiles/usr/local/qt/./lib/libqt.so.2
#19 0x4020b170 in QETWidget::translateMouseEvent ()
---Type <return> to continue, or q <return> to quit---
 from /home/raynaud/rpmfiles/usr/local/qt/./lib/libqt.so.2
#20 0x40208613 in QApplication::x11ProcessEvent ()
 from /home/raynaud/rpmfiles/usr/local/qt/./lib/libqt.so.2
#21 0x4020746b in QApplication::processNextEvent ()
 from /home/raynaud/rpmfiles/usr/local/qt/./lib/libqt.so.2
#22 0x40247bff in QApplication::enter_loop () from
/home/raynaud/rpmfiles/usr/local/qt/./lib/libqt.so.2
#23 0x402073e7 in QApplication::exec () from
/home/raynaud/rpmfiles/usr/local/qt/./lib/libqt.so.2
#24 0x80a5953 in main ()
#25 0x40908cbe in __libc_start_main () from /lib/libc.so.6

#############################################

- $channel(somthething) when you are not connected
crashes the client :
Program received signal SIGSEGV, Segmentation fault.
0x80d758f in KviConsole::findChannel ()
(gdb) bt
#0 0x80d758f in KviConsole::findChannel ()
#1 0x815155e in KviUserParser::parseFnc_CHANNEL ()
#2 0x813910e in KviUserParser::parseIdentifier ()
#3 0x8136d02 in KviUserParser::parseCmdFinalPart ()
#4 0x813e0cf in KviUserParser::parseCmd_ECHO ()
#5 0x8135146 in KviUserParser::parseSingleCommand ()
#6 0x8134934 in KviUserParser::parseCommand ()
#7 0x8134815 in KviUserParser::parseCommandBuffer ()
#8 0x81345fb in KviUserParser::parseUserCommand ()
#9 0x80e9824 in KviInput::returnPressed ()
#10 0x80ea457 in KviInput::keyPressEvent ()
#11 0x4031b29d in QWidget::event () from
/home/raynaud/rpmfiles/usr/local/qt/./lib/libqt.so.2
#12 0x4024573e in QApplication::notify () from
/home/raynaud/rpmfiles/usr/local/qt/./lib/libqt.so.2
#13 0x4020cd92 in QETWidget::translateKeyEvent ()
 from /home/raynaud/rpmfiles/usr/local/qt/./lib/libqt.so.2
#14 0x40208451 in QApplication::x11ProcessEvent ()
 from /home/raynaud/rpmfiles/usr/local/qt/./lib/libqt.so.2
#15 0x4020746b in QApplication::processNextEvent ()
 from /home/raynaud/rpmfiles/usr/local/qt/./lib/libqt.so.2
#16 0x40247bff in QApplication::enter_loop () from
/home/raynaud/rpmfiles/usr/local/qt/./lib/libqt.so.2
#17 0x402073e7 in QApplication::exec () from
/home/raynaud/rpmfiles/usr/local/qt/./lib/libqt.so.2
#18 0x80a5953 in main ()
#19 0x40908cbe in __libc_start_main () from /lib/libc.so.6


Here is my first report,



- walk trough TODO from top to bottom!!! :P

- update TODO file, if something is implemented, it should be removed in the TODO file

- /who should be the same as /who $window, if no extra parameter is specified

- write always docs for Events!

- Option to save & restore sessions (session = opened irc connections, channels & queries)

- frontend for the options

- /lastlog <foo> : it should print the last KviIrcView text line that contains <foo>
                           with the original timestamp!

- SSL support for server connections and dcc transfers

- Events, events, events. There are lots of them pending (see TODO.Events).

- html colored logs (with icons ?)

- dcc draw

- /timer as a module ?

- kde module
	Njaard suggest to add the feature of "connecting dcop signals"
	We also could add heavy runtime kde interaction from scripts in this way

- Add tooltip object class

- Add to the file browser a _real_ Delete command (not only move to trash) to 
delete files (with confirmation).

- It would be cool if KVIrc could to delete old log files automatically 
(configurable, of course), to avoid disk ocupation. For example, delete (or 
move to trash) 15-days old log files automatically (configurable by user).

- Enhance trash:
Add to trash a max size (optional)... When the trash will be full, then the 
trash would remove the older files to leave room for the new deleted files.
Add an option to "recover" files from trash (i.e. move files from trash to 
the original directory where was).
Of course, add an "Empty trash" command.

And it woud be cool a better AWAY System (without installing any scripts).
The Away would respawn each X minutes, and if users send messages, the Away
should reply with the away reason. Too, an auto-away system is
interesting...After X minutes of inactivity, automatically trigger the away
system (like BitchX does).

Of course, review carefully screen messages and documentation (specially
acronyms) :-)

FSERVE:
[02:37:14] <Number1> option to rename all files to lowercase
[02:37:37] <Number1> or ls listing files with no regard to upper or lower case

Djinn.-

* If after /server pippo.irc.com it comes out that pippo.irc.com does not exist
	it is senseless to save the hostname...

* IOGRAPH to the Irc-Tools menu

* Some way to _easily_ i18n scripts?

* How to make qt display national characters in menus etc, ISO-8859-2 for
  example (a selfish request ;))

* On my machine examples in the docs have no whitespace - font or script
  problem ?

* When user clicks search in the help window there should be some kind of
  notification when the search starts... The way it is now you can't tell if the
  search button even worked, until the search process is finished

* rewrite KVirc 2.0 plugins as modules - maybe mail the orginal plugin authors
  to do this with their own code...
  Plugins to be rewritten: (?)
  - stats				who: Kristoff
  - biff (rewrite/finish)		who: Kristoff <- need help :)
  - editor
  - fserve                              Pragma: will be implemented in some
					other way... CTCP & DCC protocols
  - url
  - xmms      
  - style                               This one will probably die ?
  - charpicker
  - image
  *** Add some new plugins, maybe examples ? ***

* Arrays (Change the Dictionary syntax to %Dict{} and then have arrays to
  use %Array[] , or use %Array() ?

* Aliases , events....

* /SPLITQUERY

* Check for "stoned" servers (and broken isp connections) (timeout ?)


- Group messages:
 * Add predefined groups
 
 As kvirc3 now supports the ability to send msg's to more than one person at
 a time, I would have liked to see
 a way of making predefined groups. For example if I often send the same msg
 to both user1, user3, user9 and
 user31, then I would like to add these to a group called "Friends", and then
 just do a "/gquery Friends hi :) what's up?"

- Send dns results to clipboard
 If I do a /dns lookup on someone, then I would like the ip to be
 automatically sent to the clipboard. This should be a checkbox in the
 General Options dialog

- Auto re-cycle channel if last one without ops
 If I'm on a channel, and everyone has left and I'm the only one there (and I
 haven't got ops), then this will make
 kvirc cycle that channel so that I get ops. This should be a checkbox in the
 General Options dialog.
         Warning, be aware of netsplits... (balboy)

- Modes:
 * +c (No color)
 IRCX:
  * +h (Hidden)
  * +u (Knock)
  * +w (No whisper)
  * +x (Auditorium)

  Operator:
   * +d (Cloneable)
   * +e (Clone)
   * +f (No format)

 These are modes that are currently not implemented in the mode editor for
 channels. The IRCX modes
 are now supported by many other clients, and I believe we should get them
 too before any real networks start
 using them..

- Show nick in: Server windows, Channel windows, DCC Chat windows, Query 
windows
 This would allow the user to specify which windows his nick would be a part
 of the window-label.
 The alternatives should be in the General Options dialog and be used with
 checkboxes.

- Show server in: Server windows, Channel windows, DCC Chat windows, Query 
windows
 This would allow the user to specify which windows the network which the
 window belong to
 would be a part of the window-label.
 The alternatives should be in the General Options dialog and be used with
 checkboxes.

- Option for deciding command prefix (default /)
 mIRC has this, and some users actually prefer to be able to change this

- Checkbox for deciding if the popup color selection dialog should popup on 
CTRL+K
 When you press CTRL+K in a input-textbox today you get the color selection
 dialog, unchecking this checkbox (in the General Options dialog) would
 remove this

- Tab nick completion: Prefix AND suffix
 This would allow you to select both the prefix AND the suffix of the nick 
completion

- Taskbar:
 * Flash taskbar button on new query if not active
 * Flash taskbar button on private message if not active
 * Minimize to system tray

 Settings for the main taskbar of your Desktop Environment (kde, gnome)

- Internal taskbar:
 * Fixed width buttons (with a box to select width)
 * Auto size buttons (with a box with minimum button width)
 * Flash buttons on: * First new message  * Highlighted text
 
 Settings for the General Options dialog

- Hyperlink:
 * Hyperlink ftp sites
 * Hyperlink email-addresses
 * Hyperlink #channels
 
 Settings for the General Options dialog

- Dialogs:
 * Require confirmation when:
  * Closing KVIrc if I'm connected to a server
  * Closing server windows that are still active
  * Closing dcc dialogs with pending transfers

 Settings for the General Options dialog

- Log maintenance:
 * Delete log files not used in ___ (box to set number of days)
 * Trim log files  (two boxes, one with the size when the log should be 
 trimmed, and one with how many kb it should be trimmed by)
 * Automatically open new files when date changes (if the user has specified 
 to have a log for each date)
 Location:
  * Main directory
  * Channel log dir (subdir of the main log-dir, like Channels/)
  * Chat log dir  (--------------------||-----------Chats/)
        * Query log dir  (--------------------||-----------Query/)
  * Server log dir (--------------------||-----------Servers/) 

 Settings for the General Options dialog

- Highlight:
 * Sentences (several words used together)

- DCC:
 * Incoming:
  * Refuse incoming dcc sends
  * Message to send to user when refusing incoming dcc sends
  * Maximum incoming recieves (dialog)
 * CHAT:
  * Refuse incoming dcc chats
  * Message to send to user when refusing incoming dcc chats
  * Close window on session close
  * If away on chat request, send this message (dialog)
  * Maximum simultaneous chats (dialog)
 
 Settings for the General Options dialog

- Flood protection:
 * Enable or disable
 * Automatically add flooders to permanent ignore list
 * Automatically add to global ban list
 * Activate on:
  * flood settings
 * Flood detection mask: (dialog)
 * Temp Ignore Mask: (dialog)
 * Perm Ignore Mask: (dialog)
 * Perm Ban Mask: (dialog)
 
 Settings for the General Options dialog

- The following settings being specific to each network (one being default)
 * Usermodes
 * Show motd
 * Show server info
 * On connect: rejoin channels you were on last time on this network
 * Ident-name
 
 Settings for the General Options dialog

- Nick settings:
 * A list over nicks where you can add as many nicks as you would want.. 
pressing the add button will let you add another
 one in the list and so on...
 * Keep trying to take nicks higher in the list if nick is taken

 Settings for the General Options dialog

- User-list:
 * user flags (used internally, scripter can still add their own)
  * +A (auto-op on all channels)
  * +a(#channel) (auto-op on specified channel)
  * +V (auto-voice on all channels)
  * +v(#channel) (auto-voce on specified channel)
  * +B (auto-ban on all channels)
  * +b(#channel) (auto-ban on specified channel)
  * +K (auto-kick on all channels)
  * +k(#channel) (auto-kick on specified channel)
  * +F (friend on all channels)
  * +f(#channel) (friend on specified channel)
  * +I (ignore user everywhere (channel-text, msg, dcc, ctcp and so on)
  * +i(#channel) (ignore user input on specified channel (or type, like 
+i(query,ctcp))
  * +N (notify when entering a channel you're on)
  * +n (notify on connect) also: +n(#channel) (notify when joining 
specific channel)
 
 These are ALL flags I believe should be used internally by KVIrc, the
 features that follow with them should also (of course) be implemented in the
 client

- Dock icon:
 * Right-click pops up this menu:
  #test @Undernet
  #kde @ OpenProjects
  #my_chan @Undernet
  #kvirc @ OpenProjects
  #openprojects @OpenProjects
  -
  Query: Lamer [lamer@the.lame.net] @Undernet
  Query: Underwear [pants@this.is.sex.net] @Undernet
  Query: Pragma [newbie@the.worlds.greatest.coder.com] @OpenProjects
  -
  Chat: MrCool [cool@I.live.on.the.tough.side.of.the.net] @Undernet
  Send: textfile.txt - Lamer - <||||||--30%----> @ Undernet
  -
  *MyWindow
  -
  Undernet
  OpenProjects

  The channel entries:
  Left-clicking on these windows will cause me to be thrown to the desktop
  where my kvirc resides and will give the window focus and let it be brought
  to the top.
  Right-clicking will open a sub-popup menu that looks like this:
   #kvirc @openprojects (if I'm on several networks)
   This is a really cool topic that happends to be on #kvirc
   <Pragma> This is the last message being said on the channel, and pragma
   said it
   -
   Part channel
   Cycle channel
   Deop myself on channel (if oped)
   Send message to channel
   -
   Go to kvirc desktop and give window focus
   Undock window and bring it to this desktop

  The three first entries here are not buttons and only show info, the 3
  first buttons are self-explaining, and the "Send message to channel" will
  give you a small dialog-popup on your desktop where you can type in
  a message to send to the channel and then press OK to send it (pressing
  cancel cancels of course ;)
  The two last buttons should be self-explaining too
  
  The query entries:
  Left-clicking on these windows will cause me to be thrown to the desktop
  where my kvirc resides and will give the window focus and let it be brought
  to the top.
  Right-clicking will open a sub-popup that looks like this:
   Lamer [lamer@the.lame.net]@Undernet
   I entered a really cool name in the setup, didn't I ?
   -
   DCC Chat
   DCC Send
   Channels
   Ignore user
   -
   Close window
   Go to kvirc desktop and give window focus
   Undock window and bring it to this desktop

  The two first entries are not buttons and only show info. Left-clicking on
  DCC Chat or DCC Send will open the dcc window undocked on the current
  desktop, right-clicking will open the dcc window docked inside kvirc and
  will bring you to the kvirc desktop. The channel button will open a list
  of channels that you're both on, and if you're operator on any of these
  then the entry will contain another popup-menu where you have access to the
  standard operator-popup (kick user etc). The four last buttons should be
  self-explaining...
  
  The dcc chat entry:
  This will popup the same menu as the query entry does, but the "DCC
  Chat"-button is replaced with Query.

  The dcc send entry:
  This will show you the same popup as the query entry does, but will also
  contain "DCC Chat". 

  The user-made window:
  This will contain whatever popup that's assigned for the user-made window

  The server windows:
  These buttons will popup the console popup menu for the server selected, it
  will also contain an additional button that shows a subpopup for all
  windows that belong to that network (eg. filtering of the windows listed
  above)
 * Left-clicking:
  Left-clicking the dock icon will bring you to the desktop where kvirc
  resides, if that's the current desktop it will either dock or undock the
  kvirc window

* new README ;-)


* Add commands for playing PCM WAV files (using the DCC voice code).

  - Maybe other formats (MPEG using libmad, Vorbis, etc.).

  - aRts and maybe NAS and ESD audio output to go along with that, and for DCC voice also.
  - Er, and keep the size of all audio-related code to a minimum. KVIrc shouldn't be an audio player substitute.

-Trisk

