summaryrefslogtreecommitdiff
path: root/TODO
blob: ad3e7d840fb9e37bf6014899cb11f9087b885201 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
19:36 [IRCNet] [muzzy] more bugs in irssi, apparently the new version:  foo splits out,
      	       	       bar joins, bar changes his nick to foo, foo splits again ->
		       Glib warning "is already in split list (how?)" .. :)
22:51 [IRCNet] [zhafte] irssi bugs if you put ACT to the right, or maybe it is my terminal?
22:52 [IRCNet] [zhafte] the numbers tend to go on top of eachother
 
02:46 <@fuchs> cras, /server foonet.foo.xy and (recognizing it doesn't connect 
               fast enough), and so doing /server barnet.foo.xy (both in the 
               same chatnet) makes irssi joining the net but not rejoining the 
               channels


21:55 <@L> 17:04.11 <L> /eval /last quit;/clear;/sb goto 10:00;/last -clear;/sb end
21:55 <@L> 17:04.27 <L> wait after it scrolls and press page up :)
21:55 <@L> 17:04.48 <L> oh, you can make Irssi behave correctly with /clear
           again

20:45 < Juerd> 19:44 -!- Irssi: critical file channels.c: line 122 
               (channel_find): assertion
20:45 < Juerd>           `name != NULL' failed.
20:45 < Juerd> this happens three times
20:46 < Juerd> and it happens in a _query_
20:47 <@Juerd> cras: for some reason irssi doesn't know this happens in a 
               query, and displays "< Juerd:> foo" in the status window
07.06.2002 08:37 #irssi: <@Qrczak> cras: A bug. After /upgrade when being away 
                                   the awaylog is not being written to.
04.06.2002 08:54 #irssi: <@Garion> cras: i've seen it several times now - a 
                                   line of 79 or 80 chars (my win is 80 wide) 
                                   which has an empty line below it, and that 
                                   line is not refreshed when I switch to the 
                                   window with that line in it, thus keeping 1 
                                   line from the old window in the current 
                                   window. Very confusing
21:43 [IRCNet] [HiroP-(~HiroP@p508035EC.dip.t-dialin.net)] Hi there. I just 
          wanted to tell you that there seems to be a problem when joining 
          large channels (500+ people) while a regexp ignore is active. I had 
          one to ignore all server ads
21:43 [IRCNet] [HiroP-(~HiroP@p508035EC.dip.t-dialin.net)] 1 *: ALL -regexp 
          -pattern .*erver.*nline.*
21:43 [IRCNet] [HiroP-(~HiroP@p508035EC.dip.t-dialin.net)] After joining, I 
          could see the nicklist and 1 or 2 lines of what people were saying. 
          Then irssi either core-dumped, got disconnected or just sat there 
          apparently without receiving any more data (lag-counter going up to 
          several minutes). 

21:28 < Samus_Aran> cras: /log also shows #Linuux ... which I typod a couple
                    days ago
21:30 < Samus_Aran> it doesnt show any of the queries which i closed, though,
                    jush #channels

16:39 <@Qrczak> cras: I'm not sure how exactly to reproduce it but it happens 
                often. When I jump to the window with a query using Alt-a 
                (after the other person said something), and close the window 
                (being brought to the last used window), and don't switch 
                windows, and then that person says something again, I'm brought 
                to the new query window automatically (that's of course bad).

 - /exec - -out cat file does not send the whole file
 - %n%_ won't show at lastlog..
 - use_status_window, use_msgs_window should work instantly..
 - /set show_server_tags or something to always show (combine with hide_server_tagsin ?)..
 - /SBAR topic placement bottom won't work??..
 - /op * complaining could be better than "not a good idea"..
 - how did tab completion complete your own nick..?
 - /win hide could work even though there are sticky things in that window..
 - /window server -sticky windows doesn't always realize when a server connects?..
 - tab completion doesn't work properly if I add utf8 things?..
 - utf8-texts tend to bug in statusbar (prompt)..
 - if /set reuse_unused_windows off, and the window seems to be empty,
   and there would be only one of them it could still be used (?)..
 - /foreach server /disconnect $tag n8 does not work
 - /whowas server nick does not work
 - /msg nick@server or nick%host is fully treated as nickname (log, query)
 - max_whois won't stay with reconnects?
 - separate format for privmsg/notice massmessages (anything non-yournick)
 - set TOS field for all connections (DCC especially)
 - "show statusbar in empty windows" flag?
 - statusbar_item_redraw() should just set the size as dirty and calculate
   it only when really needed.
 - possible to cache sbar_item->size when nothing else has changed in sbar? 
   ie. mostly when redrawing.
 - /msg @#chan<tab>
 - /SB GOTO -<days> <ts>
 - /query -immortal so autoclose_query wouldn't touch them
 - autoclose_query is also closing (and finishing) dcc chats (bug #59 ?)
 - write about %[-s] etc. to default.theme
 - away handling is a bit buggy. you do /away;/away reason, irssi remembers
   the away reason only until it receives "you're no longer away" from the
   first command.. setting it back to away has then lost the reason.
 - nick_ nick- _nick nick2 nick3 ...
 - /SAVE -all?
 - /STATUSBAR xx ENABLE|DISABLE recreates all statusbars which is a bit
   annoying because some scripts want to do it and input line is cleared
   because of this..
 - /SET disconnect_timeout - default 2min, 0 = immediately
 - reconnecting messages are a bit confusing. it prints "removed reconnection"
   to the server which it's connecting to next.. maybe the whole reconnecting
   thing should work so that the record stays there until it's connected
   successfully.
 - /set beep_msg_level hilight won't work if I have /hilight -word
 - /hilight -priority is broken
 - /hilight -level "public -actions" or something so it wouldn't match
   actions.
 - move /SET hilight_*color to theme
 - /ignore, /hilight and /lastlog could complain immediately if used
   regexp is broken. /hilight list could show also if it's broken like
   /ignore does.

 - /UPGRADE:
    - support DCCs
    - rewrite to work by fork()ing a new process and transfer file handles
      with unix sockets. this would allow the scrollback buffers to be
      transferred with them as well.
    - current window layout needs to transferred
    - reconnections aren't transferred(?)

 - Logging:
    - /LOG OPEN doesn't autocreate directories..
    - /LOG OPEN -targets *!*cras@*.fi
    - /SET autolog -> /LOG OPEN -targets * (internally, at least)
    - /LOG OPEN shouldn't really open the file until first line is 
      written in it
    - autoclosing logs doesn't work too well. Problems are:
	- after certain inactivity private message logs should be closed
	- but DCC chats shouldn't be closed until the chat itself is closed
	   - which we can't know really currently, since they don't need
	     to be in queries
	- channels should be closed when they're left (they are now, but)
	   - /WINDOW CLOSE shouldn't close it immediately, since we'll still
	     receive at least the PART message
    - so, log items should know more about what they are exactly, and when
      they should be closed. private messages could have the same timeout
      as now, time_t closetime field updated every time msg is received.
      channels could do the same when receiving "window item destroy" signal,
      except with a small timeout. DCC chats are more problematic...
    - support for mirc/ansi color logging
    - people want to show ignored stuff in logs.. how?
    - private messages could show mirc-style "Session Ident: nick (host)"
      which would update when nick's host changes. Then you wouldn't need to
      print the host before each msg.
    - support for logging channel messages from specific people

 - Awaylogs:
    - either fully support logging only in servers you're away, or change the
      awaylog to open immediately after /AWAY command, not based on any
      away replies from server. Maybe the later would be better, since you
      would want to set yourself away when connections to all servers were
      disconnected at the time.. Maybe /AWAY should update status in
      reconnection records as well?..
    - /SET awaylog_auto_delete, after setting yourself unaway
    - support for using strftime() formats (and $tag etc). only problem with
      this is that all the different awaylogs would need to be tracked and
      /CATed when setting yourself unaway
    - /AWAYLOG could show the current awaylog and optionally reset it
    - The channel name should be optional there

 - Window item placing:
    - !channel vs. !12345channel. it's layout saved with full name, but joined
      with either one
    - when dcc chat is accepted and query exists from the same nick, replace
      the query window with the dcc chat window.
    - closed DCC chats should add temporary window bind to the dcc chat so
      future chats for same nick would use the same window
    - /JOIN #foo could *optionally* move the channel to active window
      (default off, it confuses people)

 - DCC
    - /DCC SEND wildcard support
    - /DCC GET -4 / -6 with autodetection
    - When we receive a DCC SEND request, irssi could warn if the file
      already exists
    - show estimated time left and kB/s in /DCC list.
    - implement requesting files with DCC GET from remote client for dcc file
      servers. good for people behind firewalls. Does this feature exist
      in other clients, or should I create DCC REQUEST? Same for DCC CHAT..
      Maybe it could be just that the port was specified as 0, so the other
      side would know that it needs to be the one to do listening.
    - /SET dcc_autoresume ON, and sending the same file again while it's
      already being downloaded doesn't work too well.. Even autorename doesn't
      work.
    - With fast DCC SENDs (90kB/s, FreeBSD) typing get laggy (really?)
    - /DCC CLOSE #, /DCC would print the IDs
    - /SET dcc_use_proxy to use IRC proxy for DCC connects as well
    - support for special vars in /SET dcc_download_path, so $N could be used
    - No way to autoclose dcc chat windows which have been closed by another
      side.

 - Generic chat commands:
    - /MSG /CTCP /ACTION =dcc_chat,#channel
    - /ACTION -ircnet with good tab support like in /MSG
    - -nick -channel parameters to /ACTION
    - /MSG a,b,#c,#d - it should print the message to #c and #d channel
      windows and show only "a,b" as target when printing it to msg window..
      Or if autoquery is set, it should print them to those windows. Hmm.
      maybe some multipeople query support? :) /query nick1,nick2 and sending
      text there would send it to both. Seems to work already but receiving
      messages from either nick1 or nick2 don't go to that window..
    - /BAN: setting of what netmask to use for banning with IPv6 addresses

 - Netsplits
    - BUG: said "+1 more", while the /SETs to control that were set properly,
      with one guy it only said that +1 more..
    - BUG: netsplit quit isn't printed if quit -> join -> quit -> join
      happens fast (really?)
    - maybe the "+x more" should be configured in theme file instead in
      future with the embedded scripting.. At least I'd want to print all
      the splitted nicks in log files.
    - per-window listing of splitted servers, it looks very stupid when
      you see 4 lines of servers splitting in each window but only a few
      nicks after them.
    - per-window listing of splitted nicks, so the split messages isn't shown
      multiple times for each channel with possibly same nicks
    - /NETSPLIT <server>|<#channel>|<nick wildcard>
    - SERVERMODE +ov nick nick is shown instead of just Netjoin @nick because
      code is stupid. fixed in irssi-rewrite..
    - show in query windows

 - Crashes:
    - <dg> i've managed to reproduce the bug, if i make three split windows (/window show 3..5), then set the windows to not be sticky  and go to one of the windows, then alt+number to another window then go back the other window the display prints two windows in the same window
    - the old irssi's /upgrades to the new, before it changed to /set autolog_path
      $1 and crashed?..
    - active_mainwin was somehow NULL and crashed.. /window kill did it,
      probably something to do with window_close() switching to the same
      hidden window inside the split window, which I was about to kill
      anyways because it wasn't sticky..

 - Scripts:
    - print whois in active window
    - some script to handle ctcp floods, like doing /IGNORE * CTCPS when it 
      happens.
    - move into scripts:
       - /SET timestamp_timeout
       - /MSG completion list should be modifiable from scripts
          - script to remove nick from list after /IGNORE nick
       - nick completion list should be modifyable afterwards:
          - /SET completion_nicks_lowercase (remove from irssi)
          - /SET completion_nicks_capitalize
          - /SET completion_nicks_strip (keep only alphanumeric chars)
    - irchat-like JOIN/PART/QUIT combiner (QUIT: nick1, nick2, nick3), would
      require the line replacing work properly which it doesn't..

 - Irssi proxy:
    - doesn't propagate your own nickchanges to other clients
    - list sessions, kill them
    - /set irssi_proxy_ips <allow connections only from specified IPs>

 - Misc IRC related things:
    - support for mode +q in dancer - also same as +b %xxx modes..
    - /BAN -ip, -time [<time>] (/ALIAS knockout?)
    - /KICKBAN to support same options than /BAN (would /ALIAS kickban work?)
    - ban list prints "x seconds ago" .. should be x days, mins, hours, ..

 - Windows:
     - /WINDOW SIZE -sticky, so f.e. /WINDOW BALANCE wouldn't affect it.
     - /LAYOUT save|reset doesn't affect anything immediately, only after
       restart
     - Check that /LAYOUT SAVE works properly with all the different /SETs,
       like reuse_unsued_windows, windows_auto_renumber and autoclose_windows.
       What should it do if some channel is /PARTed with autoclose_windows 
       set?..
     - /LAYOUT SAVE  should ask if we want to save those window items that
       are "bound sticky" but of which server is currently not connected.
     - /WINDOW scrollback_lines /WINDOW scrollback_hours
     - Optionally always start the lines from bottom of the screen when 
       screen is empty (how would scrolling work?)
     - Vertically split windows
     - /SET use_msgs_window and /SET use_status_window should take effect
       immediately
     - /WINDOW notify_level - would specify what window activity will be
       shown for the window
     - Some sort of autobalancing for split windows after terminal resize,
       maybe with window-specific options that "this window is n lines",
       "this is at least n% of available space", etc.

 - Keyboard handling:
    - Some kind of state support for it, so it would be possible to make
      support for vi keys easily.
    - Editor-like (or bash-like) line editor - it would wrap to next line
      instead of scrolling.
    - When pasting text, irssi could send some signal that sends the pasted
      lines in GList which signal handlers could modify.
        - Already existing / at start of line handler should use this
        - Automatically remove empty space at the start/end of lines,
	  from start of line it would work so that if each line begins with
	  4 spaces but some more, it would only remove those 4 spaces from
	  each so pasting code wouldn't mess up indents etc.
	- Skip all autoreplaces and completions, so that f.e. tabs are
	  printed as-is (a few /BINDs would do this but...)
	- Should empty lines be pasted too? Maybe optionally
    - /BIND -askkey command
    - /BIND -delete should be saved in config
    - ^W (and some others) don't update cut buffer.
    - default binds: M-d, M-y
    - /PASSWORD command that asks you to type the password to entry line and
      would hide it with asterisks, good if people spy on you :)
    - ^R-like history search
    - Key to execute the command, but not place it in history
    - Key to remove active entry from command history
    - Optionally save command history between restarts
    - clear_history

 - Notify list:
    - showing who's online and who's offline doesn't work properly.
    - adding/removing people in notify list don't show in /NOTIFY immediately
    - when someone in notify list joins, should it be placed to start of
      /MSG completion list?
    - /NOTIFY -away and -idle: support for wildcards in nicks (requires of
      course that we're in same channel as nick)
    - Automatically add queried nicks to notify list temporarily .. display
      the notifys for the nick in the query window
    - /NOTIFY -once - notify only once when the user comes to IRC, forget
      this after it.
    - /NOTIFY -comment xxx - add a comment to notify. print the comment when
      user comes to irc.
    - "Should we check people in notify list when you're away" option
    - use /WATCH instead of /ISON in servers that support it
    - Show when the nick was last seen

 - Ignores:
    - /IGNORE <nick> -> use hostmasking (related to channel syncing problem,
      see "bigger code changes") with support for -type and /SET ignore_type
    - /IGNORE -strip -pattern away * actions ..
    - can't have multiple ignore -patterns with same nick
    - /ignore -activity .. would ignore it just in window activity list,
      not hide the text.
    - The nick cache stuff just made it slower. Remove it or figure out how
      it could be faster.
    - combined ignore/hilight thingy, see hilights

 - Hilights:
    - /HILIGHT list doesn't print several options. Maybe some generic
      function which could be used for printing those options for all these
      /IRCNET, /SERVER ADD, etc. commands.
    - /HILIGHT -mask <mask> <word>: not possible use both.
    - case sensitive hilight checking.
    - ignore coloring in the words it matches, so eg. /hilight foo would
      match to f^Bo^Bo
    - BUG: it STILL sometimes creates hilight activity while there's no
      hilights, around mode changes (haven't heard for a while though,
      maybe it is anyway fixed? :)
    - change the colors of both the nick and the matched word.
    - /SET hide_text_style still breaks /HILIGHT -words
    - even if hilight_color is "", %n is printed after hilighted text.
    - /hilight -actcolor %M -color %w -regexp -level publics
               -channels #channel1,#channel2 .*
      removes the bold from /me actions of other users
    - people want to hilight their own nicks everywhere, eg. /HILIGHT $N
    - automatic nick hilighting at beginning of line should be optional,
      like some people would want -word hilighting in it..
    - exceptions
    - Merged ignores/hilights thingy and maybe even something others ..
      some first-match-wins table where you could easily add/move stuff.

 - Scrollback:
    - Optionally show a "bookmark" (line mark actually, a line full of '-'
      chars) in a window. It would be displayed at the position where you
      were when the window was active last time. /MARK command to force
      updating it to bottom of screen in active window.
    - /SCROLLBACK REDRAW doesn't do anything to non-format lines (should
      redraw timestamp, etc.)
    - /LAST -since <timestamp>
    - /LAST : use /SET timestamp_format
    - /LAST -allwindows would check the lastlog from all open windows
    - /SCROLLBACK CLEAR all -public - a bit like /LAST -clear
      (make /LAST -clear do /SB CLEAR lastlog)

 - Formats / themes:
    - scripting for formats (see the themes.txt), and make the default.theme
      so that you REALLY don't need to touch /FORMATs, unless you want to
      change english texts (eg. joins/parts/quits etc. are fully configurable
      in theme file)
    - Possibility to modify abstracts and replaces in themes from irssi.
      (or maybe not, just makes it more difficult)
    - Document the different formats briefly :)
    - /FORMATs don't have styling anymore, so translation to different
      languages should be possible with still the ability to use different
      themes easily. /SET formats <filename> could change the file where
      to read all /FORMATs, but formats in theme file would override them.
    - terminfo/termcap supports changing palette. add support for themes
      as well to specify it.
    - hilight formats. pubaction_hilight would be nice, but so would many
      others as well. something generic for all these would be nice .. would
      it be possible to do this in theme side with scripting without a
      format for each different thing?

 - Server commands:
    - Optionally wait for a while (0.5-1sec) before sending the message to
      server, if arrow up key is pressed abort it. Also remove the line from
      screen and put some notice about it being not sent.
    - If we receive "cannot send to channel" from server or "you're not 
      chanop" events, remove the privmsgs/notices or modes/kicks/etc. from
      send queue automatically. Useful for aborting things when you get
      kicked after pasting lots of text or deopped after doing /OP * or
      something ;) .. use /SERVER PURGE <target> for this..
    - Split PRIVMSGs and NOTICEs automatically to multiple commands if
      their length exceeds the 512 bytes (or it should be shorter actually
      so server won't split it when it adds your nick+host mask)
    - Fix the flood protection to be aware of max. input buffer, which is
      1024 bytes by default (/STATS d, CF). Now irssi may excess flood when
      sending lots of lines longer than ~200 chars.
    - IRCNET: Flood protection doesn't count the extra penalty for MODEs
      and KICKs, also extra penalty should be given in messages (all
      commands?) for each 100 chars.

 - Text buffer:
    - support for printing ALL characters in text buffer, including ^B, ^C,
      etc. etc. so we could selectively decide what mirc colors to translate
      and what not. Like, we would want to show (or hide) it in normal
      messages, but we would want to show it as-is in user's ident and
      ban lists. This should fix /HILIGHT -word as well.
    - EPIC-like /SET mangle_inbound, maybe mangle_outbound?
    - %> should work in normal text lines
    - support for iso-2022-jp? does anyone even want this? ;) it works with
      esc$B..encoded text...esc(B - encoded text is in 7bit chars, not sure
    - fix the textbuffer code so that typofix.pl actually works
    - if you're in beginning of scrollback when lines are being removed,
      the screen is messed up (?). Also, after /SB END the --more-- is
      still there and you can't get rid of it (couldn't reproduce)
    - does /SB REFRESH work? Make it update the lines lazily, only when
      needed so it would be fast.
    - Make /SET HOLD_MODE
    - /CAT should pause on every screenful of text, this should be some kind
      of printtext_multiline_paused() function which would use some callback
      to ask for new text.
    - when scrolling, using pgup/down. it would be neat if the last/first
      overlapping line in the newly redrawn buffer would be colorized for a
      second or two, indicating where to continue reading

 - Statusbar
    - finish the support for multiple statusbar groups, and add
      /WINDOW STATUSBAR command.
    - finish the support for multiple input lines and a way to switch
      between them, so eg. each split window could have it's own input line.
    - padding char so instead of just spaces you could have ------
    - hide the whole statusbar if none of it's items use any space
      (visible = "auto")
    - /SBAR # PLACEMENT top|bottom sometimes messes up the screen a bit,
      ^L helps though
    - /STATUSBAR prompt DISABLE hangs irssi because there's no input line.
      Add some check to not allow this.
    - /STATUSBAR could list also disabled bars
    - command to list all available statusbar items

 - Server connecting:
    - More verbose connecting
        - show if we're using IPv4 or IPv6
	- show hostname we're using
	- show the proxy settings we're using
    - Reconnecting shouldn't try to remember all those settings, especially
      /SET real_name xx + /RECONNECT should work.
    - DNS problems may cause removal of i-line, irssi shouldn't stop
      trying to reconnect the server if it happens.. Maybe it never should
      stop reconnecting to servers that are in config.
    - Remember the previous IP while reconnecting, if DNS lookup fails use
      it. Some DNS servers return "host not found" when their internet
      connection is broken and irssi stops reconnecting..
    - /RECONNECT <servertag> - If <servertag> belongs to some IRC network,
      reconnect to next server in that ircnet, otherwise just reconnect
      to the server.
    - /SERVER <number> would connect to n'th server in list. Show the
      numbers with /SERVER LIST
    - /CONNECT <ircnet> could remove existing ircnet connection from
      reconnect queue if it exists (only if there's only one?). Also if
      we're already connected to the ircnet it could complain about it
      and -yes would force it.
    - connect() may be stuck forever, timeout it after a few minutes.
    - Raise the reconnect time every time you get disconnected, so if your
      network goes up/down all the time, we'd see you join/part channels
      more and more often instead of flooding all the time.
    - Better support for round robin addresses (eg. irc.openprojects.org)
    - /CONNECT -raw? A bit like telnet/nc host.

 - Tab completion:
    - Command parameter completion doesn't work properly when -options 
      are used.
    - Possibility to complete -option parameters? Like -ircnet <tab>, also
      /MSG -servertag<tab> and /LAST -level<tab> should work. All of these
      require some command definition changes..
    - bash-style (or whatever it should be called) tab-completion
    - key for reverse completion
    - /MSG <tab> completion shouldn't include queried nick there (optional)
    - File completion could guess when it's wanted, word beginning with /
      (not at start of line of course, unless / isn't in cmdchars)
      or ~/ or ./
    - filename completion doesn't work properly if path has spaces
    - /FORMAT xx <tab>
    - don't add useless completions to list. eg /RUN nick<tab> shouldn't 
      work
    - Priorities to completions. And at least command completion could use
      it so it'd put last the commands that require chanops/ircops.
      Requires support in command_bind().
    - /DCC commands could complete nicks (/dcc close, /dcc get, ..)
    - check the TODO about nick completion scripts..

 - Modules:
    - Figure out module vs. plugin wording, what is what ;)
    - API for plugins which would be guaranteed not to change
      (at least too much/too often :)
    - "chat protocol modules" - they could be loaded at startup so they'd be
      equal to IRC protocol (autoconnecting servers would work etc.)
    - on-demand autoload modules (f.e. by /command or maybe some signal)
    - Try to make them create only .so files instead of .a and all..
    - dependencies for modules? double /[un]load prints a bit stupid text

 - perl scripting:
    - /LOAD [-script | -module], /UNLOAD script
    - Possibility to modify entry line somehow
    - Add structures: MODULE_REC, THEME_REC, KEYINFO_REC, 
      CHAT_PROTOCOL_REC, etc.
    - signal_emit() - if emitting unknown signal, it could automatically
      save the types of sent parameters so another perl script could
      signal_add() it
    - Irssi::keyboard_entry_redirect()
    - Irssi::format_get_text()
    - Irssi::signal_remove() could accept hashes
    - /command parameter parser so it'd be easier to handle -options etc.
    - Try to get the Makefiles generated so that compiling with GCC would
      always work even if the perl wasn't compiled with GCC..
    - Irssi::Timeout_add() and input_add()'s data option could be optional
      and maybe allow multiple parameters

 - Bigger code changes:
    - Restructure code tree so that non-IRC chat protocols would be in
      same places than IRC protocol. Something like:
        - src/irc (like now)
	- src/irc/fe-common, src/irc/fe-text
      SILC could then make symlinks to src/silc to whereever the SILC
      module was unpacked. Make it possible to build SILC support built-in.
    - /SETs have now boolean/number/string types. Add more:
        - Time: Allow to use s|m|h|d to specify the time, default to
          seconds. When sending reply to user, use the time formatting too,
          not just x seconds or minutes. "10d 5s" should also work.
	- Level: Like "all -msgs -public". Complain about unknown strings.
	- size: 5M, 5k, ..
    - Reading configuration file should be changed somehow .. at least add
      some helper functions for reading lists since comments inside them
      now crash irssi. Also if setting wasn't expected type can cause
      crashes so add proper error checkings everywhere. And is_node_list()
      etc. should be in uppercase..
    - Channel syncing is evil. Make it optional, and use /USERHOST when
      needed if host isn't known. /BAN at least should do this, and while
      at it, we could make /IGNORE as well to ignore based on mask. Also,
      if /USERHOST doesn't find anything, use /WHOWAS info.
    - Irssi saves some setting strings to static const char * variables in
      several places.. this works pretty well usually, except when /RELOADing
      config and some "setup changed" signal handler goes and calls some
      function that still uses the old saved string which points to free'd
      memory.. this should somehow be fixed failsafe. maybe just g_strdup()
      them everywhere or figure out something better..
    - Better priority specifying for signals, probably should add
      int priority without limited range.
    - fix server redirections to handle remote events correctly: very unlikely,
      but its possible that replies to two remote whoises are received exactly
      at the same time overlapping each others

 - Commands:
    - try to get the 0.9 command parser to work..
    - user definable parameter definitions and how they're handled, like
      cmsg <target> <colorized-msg> - then there'd be some function called to
      colorize the third parameter. same for tab completion.
    - support for multiple subcommands in the command parser, like
      /window name foo level msgs.
    - A way to disable some command entirely? eg. not show in completion
      list or /HELP or anywhere..

 - Read server capabilities from 005 numeric
 - extra spaces after commands don't always work, eg /wii  nick, /help  xx
 - hide channel key in statusbar. This would require a $cmode_nokey or
   something..
 - fe-none doesn't compile with --with-perl-staticlib because it doesn't find
   the ui/textui stuff..
 - we should probably print timestamp even if level contains MSGLEVEL_NEVER,
   as long as it's not the only level.. Except when /CATing awaylog we don't
   want to do that.
 - If /SET print_active_channel is ON, actions still don't show the channel
 - nick's user/host can't be printed for public messages
 - /HELP <alias> should work
 - /CLEAR -all should clear the window activities as well, leaving hilights
 - support :: properly in IPv6 masks
 - when you get disconnected, print your quit message to all channel windows
 - possibility to print rawlog in window
 - should $10 work (in special vars)?
 - /VER should be alias
 - /MODE #channel b should resync the banlist, and /QUOTE NAMES #channel
   should resync the nicklist (irssi/ircd bugs).
 - #include support to config file
 - make detaching work
 - with solaris, /EXECs don't die when irssi does (tail -f ...)
 - /EXEC -interactive: print the commands you send
 - handle /JOINs with server redirections so they get aborted if we're not
   seing a JOIN for a while.
 - make sure the config file is never lost, write it to some temp file first
   and after then move it over real config file.
 - you could configure which events (whois, notify, etc.) to show in what
   windows (all, current, status, msgs)
 - /SET -reset?
 - printnickmsg() which would print nick changes and quit messages. And
   export that function to perl so kills.pl could print kills with it too.
 - regexp host masks
 - automatically switch to status window when using commands that always
   print their output to status window, like /whois.
 - automatic whowas if whois wasn't found should be moved to fe-common.
   it could also print something like "nick $0 not in IRC, but this user
   WAS in IRC:"
 - Add command for changing automatic replaces and completions
   (/autoreplace, /complete ?) .. could these be scripts? ..
 - commands to move channels and servers in the config list, to set the
   join/connect order of them.
 - All those options to /WHO and /LIST commands that EPIC has
 - Use different formats for /WHO #channel? There's no need to show the
   channel in every line then (NOTE: /WHO #chan1,#chan2 should have two
   headers)
 - nick/channel lists at right side of the text version of irssi. Ctrl-N
   for example could hide/show them. add mouse support for it.

 - try profiling the code with /cat filewith10000lines
 - /SERVER ADD -ircnet foonet bar 6000 pass1,
   /SERVER ADD -ircnet barnet bar 6000 pass2
   dircproxy identifies ircnets based on password
 - $@0 always returns 4 (?)


*** GTK UI

 - %| doesn't work with irssi text widget
 - some problems when using multiple windows with focus being all the time in
   one of the windows and it can't be changed to different window?! Probably
   has something to do with click to focus.
 - split windows are buggy, destroying them doesn't really work well..
 - mirc ctcp togglemenuitem isn't updated right

*** Big things

 - some sort of address book? our own irssi ctcp to ask for other irssi users
   for their information (of course not without asking (except optionally))..
   could be nice also to automatically update it, keep track of all seen
   users gathered when joining channels, whois, who, etc. commands.
   automatically updating information could be host masks, nicks, ips, seen in
   channels, operator in channels, .. user specified checks like last topic or
   mode changes or even msgs to you/some channel/with some keyword. great for
   spying people ;) maybe even useful sometimes..

   .. but what database would be best for this?

 - GTK (non-GNOME) version: icons to toolbars, accelerators to menus
 - Windows style MDI windows are possible with GtkFixed .. Some people would
   like this.. too much job for me, it would need building the MDI windows
   ourself (title bar, borders, resizing, etc.)

 - online help, documentation, ...
 - plugins:
     - scheme, tcl, python scripting? eggdrop/epic compatible scripting?
     - IRC bot, eggdrop is too old, needs a replacement ;) (started, aborted)
     - Multiplayer games! :) Chess, tic-tac-toe, othello, battleship, tetris,
       etc. Existing games should probably be used .. though there doesn't
       seem to be any of these (except tetris) for gnome right now..
     - audio / video chat :)

*** Needs rethinking ..

 * Notify list GUI
 - _one_ popup dialog could open which lists all nicks in notifylist, maybe
   sorted by arrival time, display the dates, latest joined could be with
   different color? etc.
 - nick-specific options:
    - pop up the dialog
    - run some command (like /exec as soon as I get that done :)

 * common api for statusbar handling
 - it should work just as well in text mode and gui, colors could be done
   with the normal % formats. GUI just ignores the colors..
 - display number of ops, voices, normals and ircops in statusbar

 * API for creating/modifying menus and toolbar, especially from plugins
 - at least one configurable menu ("usermenu"), or maybe make the whole
   menubar user configurable


*** ..in GTK UI .. just some things to remember if i'll rewrite it again.

 - itext:
     - save/find text
     - text selection draws the entire selection every time you move the
       mouse...
     - if some other window has got much text, switching to it first time
       takes some time..?
 - editor in setup for ~/.irssi/startup
 - dcc floods could pop up lots of dialogs..
 - gui help
 - change signal handling in gui-gnome so that the actual drawing and
   functionality are in different signals, so that plugin could change the
   whole look and feel of irssi.
 - currently irssi sends USERHOST commands every now and then to find out
   who are away and who are not.. optionally it could instead just watch if
   someone hasn't written anything to channel in n minutes and mark it "away"
   to nicklist.
 - check new irssi versions with http rather than with irssibot..
 - gnome statubar:
    - clock?
    - dcc transfer meter (gtk progressbar)
 - dcc send: allow selection of multiple files to send (also for dnd from
   gmc!) Allow dropping files to anywhere in irssi.