summaryrefslogtreecommitdiff
path: root/TODO
blob: 7e00b209cea44e37e977bc24819ff690e927495a (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
 - 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?..
     - /WINDOW scrollback_lines /WINDOW scrollback_hours
     - Optionally always start the lines from bottom of the screen when 
       screen is empty (how would scrolling work?)
     - /WINDOW SCROLL OFF - window wouldn't scroll down automatically
     - Vertically split windows

 - Keyboard handling:
    - /BIND: key definitions should be changed to be more epic-like.. :
        /bind ^[ key meta, /bind meta-O key meta2, /bind meta-[ key meta2
        /bind meta2-c echo Ctrl-Left pressed
      and maybe
        /bind meta2-C key left, /bind meta-left echo meta-left pressed
    - 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 notice it and ask "pasting 30 lines
      of text, ok?" .. Could send some signal that sends the pasted lines
      in GList which signal handlers could modify. Also the first pasted
      line could be somehow buffered so that it isn't sent immediately
      so these paste handlers could modify it too.
        - 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
	- Should empty lines be pasted too? Maybe optionally

 - Notify list:
    - It's buggy. too buggy. -idle seems to work fine but other than that
      it seems to have several problems, sometimes not saying if user has
      quit.
    - <tommik> hmm, I just did /notify nick, /unnotify nick, /notify nick OPN
      and now /notify shows the nick in all networks I'm connected to
    - /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

 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.
    - --more-- should be displayed *only* when there's new text at the
      bottom of the screen, not when you scroll up a bit and go visit another
      window for a while..
    - /SCROLLBACK REDRAW doesn't do anything to non-format lines (should
      redraw timestamp, etc.)
    - /last 05032 ... didn't really do what I wanted :) maybe I should change
      the syntax to have -max parameter instead? Or /LAST -public 1000 would
      be ok, but /LAST 1000 would treat 1000 as word.. hmm..
    - /LAST -since <timestamp>

 - Formats / themes:
    - Possibility to modify abstracts and replaces in themes from irssi.
    - 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.

 - Logging:
    - Autologging has some problems if we're printing to some target without
      server. Happens at least with "starting query with xxx" when restoring
      queries at startup (saved with /LAYOUT SAVE). Also those logs will
      never be automatically closed..

 - 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.
    - /FLUSHSERVER or something that would remove commands from transmit
      queue. Maybe with optional parameter what kind of commands to remove
      (/FLUSHSERVER mode would remove all modes). Useful for example if you
      want to abort /OP *.
    - 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 ;)
    - 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)

 - server connecting:
    - Don't try to restore user modes set by server automatically when
      reconnecting to another server. Like when server sets +r mode to you
      you won't get rid of it until you /disconnect.
    - 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.
    - /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.

 - Tab completion:
    - Complete aliases
    - Command 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 shoulda be called) tab-completion
    - key for reverse completion

 - Statusbar:
    - It now sometimes wraps to next line messing up screen
    - Should be configurable. See http://irssi.org/files/statusbar.txt
      for what it probably should look like.
    - When starting to run out of space some items could be made smaller,
      activity for example .. make some generic flag for items to use.
    - Add user counts (ops/voices/normal/total)

 - 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..

 - perl scripting:
    - /SCRIPT for listing scripts, /SCRIPT REMOVE <name>|ALL, 
      /SCRIPT PERL RELOAD == ex. /PERLFLUSH
    - /PERL command - how does signal_add() work with it? probably not well.
      How to remove those scripts? etc. /SCRIPT could show them as some
      anonymous scripts, maybe list the whole script in the line..
    - Possibility to modify entry line somehow
    - Possibility to use "complete word" signal, needs GSList** handling
    - Add structures: CHATNET_REC, MODULE_REC, THEME_REC, KEYINFO_REC, 
      CHAT_PROTOCOL_REC
    - signal_emit() - if emitting unknown signal, it could automatically
      save the types of sent parameters so another perl script could
      signal_add() it.
    - Perl module and the Irssi and Irssi::Irc libraries could have some
      version checks so that if they don't match it would complain.
    - Dependencies don't work with .xs files..

 - 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.
    - 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..
    - Would this work..? : command_bind() could specify the parameters
      it uses, then some generic command parser could parse the commands
      and options and if all is ok, send the parsed parameters directly with
      signal_emit() .. I'm just thinking some type checking problems but
      if all commands would be in format SERVER_REC, WI_ITEM_REC,
      GHashTable *options, char ** (NULL terminated parameters list) .. ?
    - GLib's g_mem_chunks does some weird things which seem pretty useless
      (keeping memory blocks in a tree), replace them with our own memory
      block allocator. GLists and GSLists waste some memory, would be better
      if I just made prev/next pointers to structures and used some #defines
      to traverse back and forth.
    - All there dynamic memory allocations are making lots of memory 
      fragmentation. Maybe creating our own memory manager would be good
      idea? :) Separate allocator for temporary and non-temporary memory
      allocations could help some. Use mmap() if possible so we could
      actually free the memory with munmap() sometimes..

 - /SET -reset?
 - /SET awaylog_auto_clear (after setting yourself unaway)
 - can't have multiple ignore -patterns with same nick
 - /ignore -strip -pattern away * actions ..
 - module_uniq_destroy() - those calls are probably wrong .. for CHANNEL and
   QUERY at least?
 - /ban -time <opt numeric>, /ban -ip? 
   /alias knockout kick $0 $1-;ban -time $0
 - /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. /IGNORE -pattern isn't printed.
 - /HILIGHT -mask <mask> <word>: not possible use both. Case sensitive
   hilight checking.
 - possibility to use $[123]0 in themes files. Like with $[9]0 in msgnick.
 - hide_mirc_colors doesn't work properly, it hides also colors irssi tries
   to print itself, like with /HILIGHT. They should be removed somewhere
   earlier.. but where? Those should be removed from messages, quit/kick/etc.
   reasons but not from at least usernames, bans and channels (maybe they
   should be changed to actually print <invert>C</invert>number instead of
   coloring it)
 - -f configfile command line option. /SAVE should use that file too.
 - nick completion shouldn't try completing nicks everywhere, like /SET <tab>
 - 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 ./ and
 - utf8 support
 - /connect -! : don't autojoin to channels
 - /names without parameters should probably default to /names *, and add
   the possibility to show all names with /names ** (just like /who works)

 - printnickmsg() which would print nick changes and quit messages. And
   export that function to perl so kills.pl could print kills with it too.
 - /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..
 - /MSG =dcc_chat,#channel doesn't work, same for /CTCP.
 - regexp host masks
 - irssi proxy: when writing msg in proxy, send them to clients.
 - /SAVE -all: save all /SETs and /FORMATs.
 - dcc time left
 - ban list prints "x seconds ago" .. should be x days, mins, hours, ..
 - some script to handle ctcp floods, like doing /IGNORE * CTCPS when it 
   happens.
 - netsplit quit isn't printed if quit -> join -> quit -> join happens fast

*** New stuff in TODO, try to get rid of these :)

 - /ignore -activity .. would ignore it just in window activity list,
   not hide the text.
 - when dcc chat is accepted and query exists from the same nick, replace
   the query window with the dcc chat window.

 - try profiling the code with /cat filewith10000lines
 - 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 (/replace)
 - commands to move channels and servers in the config list, to set the
   join/connect order of them.
 - 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.
 - /ON and /TIMER commands
 - All those options to /WHO and /LIST commands that EPIC has
 - /SCROLLBACK FIND ?
 - 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.
 - /password command that asks you to type the password to entry line and
   would hide it with asterisks, good if people spy on you :)
 - CTCP #channel HISTORY # - give # last lines of history from channel

*** Bugs

 - still some problems in detecting floods right? not sure, couldn't
   reproduce the problem again..
 - match_wildcards(), mask="*a?c*", data="abdabc"

*** 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)
     - DCC file server (xdcc, fserver), I'm not too excited about these,
       maybe someone else wants to do it..
     - 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


*** Stuff to do

 - you could configure which events (whois, notify, etc.) to show in what
   windows (all, current, status, msgs)
 - implement requesting files with DCC GET from remote client for dcc file
   servers. good for people behind firewalls.
 - /CLONES command (with script)
 - {}|~ are same as []\^ (not in all irc networks) - does this really affect
   irssi at all..?

*** ..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.