mirror of
https://github.com/irssi/irssi.git
synced 2024-09-01 04:14:16 -04:00
Initial revision
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@3 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
parent
2d97cd3cc4
commit
770ae4596d
31
.cvsignore
Normal file
31
.cvsignore
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
Makefile
|
||||||
|
Makefile.in
|
||||||
|
aclocal.m4
|
||||||
|
config.cache
|
||||||
|
config.guess
|
||||||
|
config.h
|
||||||
|
config.log
|
||||||
|
config.status
|
||||||
|
config.sub
|
||||||
|
configure
|
||||||
|
configure.scan
|
||||||
|
libtool
|
||||||
|
ltconfig
|
||||||
|
ltmain.sh
|
||||||
|
stamp-h
|
||||||
|
stamp-h.in
|
||||||
|
stamp.h
|
||||||
|
version.h
|
||||||
|
config.h.in
|
||||||
|
.exrc
|
||||||
|
gnome-bug
|
||||||
|
gnome-config
|
||||||
|
install-sh
|
||||||
|
missing
|
||||||
|
mkinstalldirs
|
||||||
|
INSTALL
|
||||||
|
intl
|
||||||
|
ABOUT-NLS
|
||||||
|
COPYING
|
||||||
|
irssi.spec
|
||||||
|
default-config.h
|
383
COMMANDS
Normal file
383
COMMANDS
Normal file
@ -0,0 +1,383 @@
|
|||||||
|
|
||||||
|
** Some definations
|
||||||
|
|
||||||
|
|
||||||
|
"Level" usually means that you can use these words there:
|
||||||
|
|
||||||
|
CRAP - Can be almost anything
|
||||||
|
PUB - Public messages in channel
|
||||||
|
MSGS - Private messages
|
||||||
|
CHAN - Channel messages: joins, parts, quits, etc.
|
||||||
|
NOTICES - Notices
|
||||||
|
SNOTES - Notices from server
|
||||||
|
WALLOPS - Wallops
|
||||||
|
ACTIONS - Actions (/me)
|
||||||
|
DCC - DCC messages
|
||||||
|
CTCP - CTCP messages
|
||||||
|
HILIGHT - Hilighted text
|
||||||
|
CLIENTNOTICES - Irssi's notices
|
||||||
|
CLIENTERRORS - Irssi's error messages
|
||||||
|
|
||||||
|
|
||||||
|
** Server handling
|
||||||
|
|
||||||
|
|
||||||
|
CONNECT <address>[:port[:password]]
|
||||||
|
|
||||||
|
Connect to specified server
|
||||||
|
|
||||||
|
DISCONNECT <* / tag> [message]
|
||||||
|
|
||||||
|
Disconnect from server
|
||||||
|
|
||||||
|
SERVER <address>[:port[:password]]
|
||||||
|
|
||||||
|
Disconnect from current server and connect to new one
|
||||||
|
|
||||||
|
SERVERS
|
||||||
|
|
||||||
|
Display a list of servers
|
||||||
|
|
||||||
|
RMRECONNS
|
||||||
|
|
||||||
|
Remove all servers from reconnection list
|
||||||
|
|
||||||
|
|
||||||
|
** Basic IRC commands
|
||||||
|
|
||||||
|
|
||||||
|
QUIT [message]
|
||||||
|
|
||||||
|
Quit irssi
|
||||||
|
|
||||||
|
JOIN <channel> [key] [, channel...]
|
||||||
|
|
||||||
|
Join to channel(s)
|
||||||
|
|
||||||
|
PART [channel] [message]
|
||||||
|
|
||||||
|
Leave from channel
|
||||||
|
|
||||||
|
QUERY <nick>
|
||||||
|
|
||||||
|
Create query window
|
||||||
|
|
||||||
|
UNQUERY <nick>
|
||||||
|
|
||||||
|
Close query window
|
||||||
|
|
||||||
|
MSG <nick/channel> <message>
|
||||||
|
|
||||||
|
Send message to nick/channel
|
||||||
|
|
||||||
|
ME <message>
|
||||||
|
|
||||||
|
Send action to channel (/me thinks..)
|
||||||
|
|
||||||
|
NOTICE <nick/channel> <message>
|
||||||
|
|
||||||
|
Send notice to nick/channel
|
||||||
|
|
||||||
|
WHOIS [server/nick] <nick>
|
||||||
|
|
||||||
|
Send WHOIS query, you can also specify from what server to ask the
|
||||||
|
information. If you type the nick twice it will ask from the same
|
||||||
|
server what nick is using.
|
||||||
|
|
||||||
|
AWAY [message]
|
||||||
|
|
||||||
|
Sets yourself away/unaway
|
||||||
|
|
||||||
|
AWAYALL [message]
|
||||||
|
|
||||||
|
Sets yourself away/unaway to all connected servers
|
||||||
|
|
||||||
|
WHO <nick/channel>
|
||||||
|
|
||||||
|
Show WHO list
|
||||||
|
|
||||||
|
NAMES [channel]
|
||||||
|
|
||||||
|
List nicks (in channel)
|
||||||
|
|
||||||
|
|
||||||
|
** Bit more advanced commands
|
||||||
|
|
||||||
|
|
||||||
|
MODE <channel/nick> <mode>
|
||||||
|
|
||||||
|
Get/set channel/nick mode.
|
||||||
|
|
||||||
|
Get channel modes:
|
||||||
|
b - Get ban list
|
||||||
|
e - Get ban exception list
|
||||||
|
I - Get invite list
|
||||||
|
|
||||||
|
Set channel modes (use +/- before these):
|
||||||
|
b *!ban@mask - Set/remove ban
|
||||||
|
e *!ban@mask - Set/remove ban exception
|
||||||
|
I *!ban@mask - Set/remove channel invite
|
||||||
|
o nick - Set/remove op status
|
||||||
|
v nick - Set/remove voice status
|
||||||
|
l limit - Set remove max. people limit in channel
|
||||||
|
k key - Set/remove channel key
|
||||||
|
s - Secret
|
||||||
|
p - Private
|
||||||
|
m - Moderated
|
||||||
|
i - Invite only
|
||||||
|
n - No external messages
|
||||||
|
t - Only ops can change topic
|
||||||
|
|
||||||
|
User modes:
|
||||||
|
i - Invisible
|
||||||
|
w - Show wallops
|
||||||
|
s - Show server notices
|
||||||
|
|
||||||
|
TOPIC [channel] [topic]
|
||||||
|
|
||||||
|
Get/set channel topic
|
||||||
|
|
||||||
|
INVITE <nick> [channel]
|
||||||
|
|
||||||
|
Invite nick to channel
|
||||||
|
|
||||||
|
CTCP <nick/channel> <command>
|
||||||
|
|
||||||
|
Send CTCP request to nick/channel (PING, VERSION, ..)
|
||||||
|
|
||||||
|
NCTCP <nick/channel> <reply>
|
||||||
|
|
||||||
|
Send CTCP reply to nick/channel
|
||||||
|
|
||||||
|
PING <nick>
|
||||||
|
|
||||||
|
Send CTCP PING to nick and tell how long it took to receive the reply
|
||||||
|
|
||||||
|
ISON [nick [nick...]]
|
||||||
|
|
||||||
|
Ask if nicks are in IRC.
|
||||||
|
|
||||||
|
WALL [channel] <message>
|
||||||
|
|
||||||
|
Send notice message to all operators in channel.
|
||||||
|
|
||||||
|
OP, DEOP, VOICE, DEVOICE [channel] [nick [nick...]
|
||||||
|
|
||||||
|
Op/deop/voice/devoice nick(s) in channel
|
||||||
|
|
||||||
|
KICK [channel] <nick> <reason>
|
||||||
|
|
||||||
|
Kick nick from channel
|
||||||
|
|
||||||
|
KICKBAN [channel] <nick> <reason>
|
||||||
|
|
||||||
|
Kick+ban nick from channel
|
||||||
|
|
||||||
|
KNOCKOUT [secs] <nick> <reason>
|
||||||
|
|
||||||
|
Kick+ban+delay (default to 5min)+unban
|
||||||
|
|
||||||
|
BAN [channel] [nick [nick...]]
|
||||||
|
|
||||||
|
Ban nick(s) in channel
|
||||||
|
|
||||||
|
UNBAN [channel] [mask [mask...]]
|
||||||
|
|
||||||
|
Remove ban(s) from channel
|
||||||
|
|
||||||
|
BANSTAT [channel]
|
||||||
|
|
||||||
|
List bans and ban exceptions in channel
|
||||||
|
|
||||||
|
BANTYPE <normal/host/domain/custom>
|
||||||
|
|
||||||
|
Set ban type:
|
||||||
|
|
||||||
|
Normal - *!user@*.domain.net
|
||||||
|
Host - *!*@host.domain.net
|
||||||
|
Domain - *!*@*.domain.net
|
||||||
|
Custom [nick] [user] [host] [domain]
|
||||||
|
eg. /bantype custom nick domain - nick!*@*.domain.net
|
||||||
|
eg. /bantype custom user host - *!user@host.domain.net
|
||||||
|
|
||||||
|
INVITELIST [channel]
|
||||||
|
|
||||||
|
List invites (+I) in channel
|
||||||
|
|
||||||
|
VERSION [server]
|
||||||
|
|
||||||
|
Displays irssi version and asks IRC server's version
|
||||||
|
|
||||||
|
VER [nick/channel]
|
||||||
|
|
||||||
|
Sends CTCP VERSION request to nick/channel
|
||||||
|
|
||||||
|
SV [nick/channel]
|
||||||
|
|
||||||
|
Sends irssi version text to nick/channel
|
||||||
|
|
||||||
|
KILL <nick> <message>
|
||||||
|
|
||||||
|
Kill nick from irc network. [irc ops only]
|
||||||
|
|
||||||
|
WALLOPS <message>
|
||||||
|
|
||||||
|
Write wallops message. [irc ops only]
|
||||||
|
|
||||||
|
QUOTE <message>
|
||||||
|
|
||||||
|
Send raw data to irc server - DON'T USE THIS unless you really know
|
||||||
|
what you're doing!
|
||||||
|
|
||||||
|
|
||||||
|
** DCC handling
|
||||||
|
|
||||||
|
|
||||||
|
DCC
|
||||||
|
|
||||||
|
List DCC connections (same as DCC LIST)
|
||||||
|
|
||||||
|
DCC CHAT <nick>
|
||||||
|
|
||||||
|
Open DCC chat
|
||||||
|
|
||||||
|
DCC SEND <nick> <filename>
|
||||||
|
|
||||||
|
Send file to nick
|
||||||
|
|
||||||
|
DCC GET <nick> [filename]
|
||||||
|
|
||||||
|
Get file offered by nick
|
||||||
|
|
||||||
|
DCC RESUME <nick> [filename]
|
||||||
|
|
||||||
|
(MIRC) Resume getting file offered by nick
|
||||||
|
|
||||||
|
DCC CLOSE <type> <nick> [filename]
|
||||||
|
|
||||||
|
Close DCC connection
|
||||||
|
|
||||||
|
DCC LIST
|
||||||
|
|
||||||
|
List DCC connections
|
||||||
|
|
||||||
|
MIRCDCC [n]
|
||||||
|
|
||||||
|
Set MIRC style CTCPs on/off
|
||||||
|
|
||||||
|
|
||||||
|
** User interface handling
|
||||||
|
|
||||||
|
|
||||||
|
WINDOW <NEW/CLOSE/SERVER/PREV/NEXT/GOTO/LEVEL>
|
||||||
|
|
||||||
|
NEW [HIDDEN/TAB]
|
||||||
|
|
||||||
|
Create new window (in tab)
|
||||||
|
|
||||||
|
CLOSE
|
||||||
|
|
||||||
|
Close the current window
|
||||||
|
|
||||||
|
SERVER <tag>
|
||||||
|
|
||||||
|
Change which server to use in current window
|
||||||
|
|
||||||
|
PREV/NEXT/GOTO <N>
|
||||||
|
|
||||||
|
Go to previous/next/Nth window
|
||||||
|
|
||||||
|
LEVEL <[+/-]pub/msgs/...>
|
||||||
|
|
||||||
|
Change window level, eg.
|
||||||
|
/window level msgs - creates messages window
|
||||||
|
/window level all -msgs - creates status window
|
||||||
|
|
||||||
|
CLEAR
|
||||||
|
|
||||||
|
Clear screen
|
||||||
|
|
||||||
|
ECHO <text>
|
||||||
|
|
||||||
|
Print text to screen
|
||||||
|
|
||||||
|
MODES
|
||||||
|
|
||||||
|
Open channel modes dialog (GTK/GNOME version)
|
||||||
|
|
||||||
|
GWHOIS <nick>
|
||||||
|
|
||||||
|
Display WHOIS information in dialog (GTK/GNOME version)
|
||||||
|
|
||||||
|
LAST [-pub -msgs...] <text>
|
||||||
|
|
||||||
|
Display (only public/msgs/..) lines where <text> appears
|
||||||
|
(Text version only)
|
||||||
|
|
||||||
|
|
||||||
|
** Configuration
|
||||||
|
|
||||||
|
|
||||||
|
SET [key [=value / [key [key..]]
|
||||||
|
|
||||||
|
Get/set configuration
|
||||||
|
|
||||||
|
ALIAS, UNALIAS <alias> [command]
|
||||||
|
|
||||||
|
Set/remove alias, /unalias is the same as /alias without command
|
||||||
|
|
||||||
|
These codes are extracted in commands:
|
||||||
|
%0 : name of alias
|
||||||
|
%1, %2, %3 .. : %th word
|
||||||
|
&1, &2, &3 .. : &th word + the rest of the text after it
|
||||||
|
%c : channel name
|
||||||
|
|
||||||
|
Typing extra / before /command (//command) ignores any aliases
|
||||||
|
|
||||||
|
IGNORE, UNIGNORE <mask> [level [level..]]
|
||||||
|
|
||||||
|
Ignore/unignore specified level(s) or everything from nick
|
||||||
|
|
||||||
|
NOTIFY <mask> [ircnet [ircnet..]]
|
||||||
|
|
||||||
|
Add mask (nick) to notify list for specified ircnets..
|
||||||
|
|
||||||
|
UNNOTIFY <mask>
|
||||||
|
|
||||||
|
Remove mask from notify list.
|
||||||
|
|
||||||
|
LOG <CREATE/CLOSE/START/STOP/LIST>
|
||||||
|
|
||||||
|
CREATE <filename> [<+/->level ...] [#channel/nick [
|
||||||
|
[<+/->level ...] ...]
|
||||||
|
|
||||||
|
Create and start logging to file
|
||||||
|
|
||||||
|
Example: /log create mylog -all +msgs #linux +chan +public
|
||||||
|
(or simply #linux +all logs everything that appears in #linux
|
||||||
|
window).
|
||||||
|
|
||||||
|
CLOSE <filename>
|
||||||
|
|
||||||
|
Close log and remove from configuration
|
||||||
|
|
||||||
|
START <filename>
|
||||||
|
|
||||||
|
Start logging to file
|
||||||
|
|
||||||
|
STOP <filename>
|
||||||
|
|
||||||
|
Stop logging to file
|
||||||
|
|
||||||
|
LIST
|
||||||
|
|
||||||
|
List logs.
|
||||||
|
|
||||||
|
LOAD <plugin> [arguments]
|
||||||
|
|
||||||
|
Load plugin
|
||||||
|
|
||||||
|
UNLOAD <plugin>
|
||||||
|
|
||||||
|
Unload plugin
|
||||||
|
|
46
Makefile.am
Normal file
46
Makefile.am
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
# create default-config.h
|
||||||
|
config.h: default-config.h
|
||||||
|
|
||||||
|
default-config.h: config
|
||||||
|
./file2header.sh config > default-config.h
|
||||||
|
|
||||||
|
## if <internationalization support>
|
||||||
|
#SUBDIRS = po intl macros support # <your subdirs here>
|
||||||
|
## else
|
||||||
|
if BUILD_PLUGINS
|
||||||
|
PLUGINS=plugins
|
||||||
|
endif
|
||||||
|
if BUILD_SERVERTEST
|
||||||
|
SERVERTEST=servertest
|
||||||
|
endif
|
||||||
|
|
||||||
|
SUBDIRS = macros src $(PLUGINS) $(SERVERTEST)
|
||||||
|
## endif
|
||||||
|
|
||||||
|
## to automatically rebuild aclocal.m4 if any of the macros in
|
||||||
|
## `macros/' change
|
||||||
|
@MAINT@include macros/macros.dep
|
||||||
|
@MAINT@macros/macros.dep: macros/Makefile.am
|
||||||
|
@MAINT@ cd macros && $(MAKE) macros.dep
|
||||||
|
|
||||||
|
if HAVE_GNOME
|
||||||
|
appletdir = $(datadir)/applets/Network
|
||||||
|
applet_DATA = irssi.desktop
|
||||||
|
|
||||||
|
corbadir = $(sysconfdir)/CORBA/servers
|
||||||
|
corba_DATA = irssi.gnorba
|
||||||
|
endif
|
||||||
|
|
||||||
|
confdir = $(sysconfdir)/irssi
|
||||||
|
conf_DATA = config colorless.theme
|
||||||
|
|
||||||
|
EXTRA_DIST = window-views-patch.diff \
|
||||||
|
autogen.sh \
|
||||||
|
README-HEBREW \
|
||||||
|
COMMANDS \
|
||||||
|
file2header.sh \
|
||||||
|
irssi.spec.in \
|
||||||
|
irssi.spec \
|
||||||
|
$(conf_DATA) \
|
||||||
|
irssi.gnorba \
|
||||||
|
irssi.desktop
|
82
README
Normal file
82
README
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
|
||||||
|
|
||||||
|
irssi
|
||||||
|
|
||||||
|
|
||||||
|
* ABOUT
|
||||||
|
|
||||||
|
Irssi is an IRC client made with GTK+ toolkit and (optional) GNOME libraries.
|
||||||
|
A small text mode version is also somewhat working, there's also a really
|
||||||
|
simple daemon version which just loads "bot" plugin (which doesn't exist).
|
||||||
|
I'd also like to see KDE version but someone else will have to do it.
|
||||||
|
|
||||||
|
|
||||||
|
* FEATURES
|
||||||
|
|
||||||
|
See COMMANDS file for list of all commands irssi knows.
|
||||||
|
|
||||||
|
I've been asked quite a lot about why should one use irssi, what does it do
|
||||||
|
that other IRC clients don't? Well, to tell you the truth, I have no idea :)
|
||||||
|
Still I've got a lot of mails saying it's the best GUI IRC client they've
|
||||||
|
ever used :) Let's see.. It should be easy to use, it has most of the
|
||||||
|
features IRC client needs and it's pretty stable. Here's a small list of what
|
||||||
|
it does:
|
||||||
|
|
||||||
|
- Nice configuration :) Especially the color settings.
|
||||||
|
- You can connect to multiple servers. Irssi is also IRC network aware so
|
||||||
|
you can specify some settings to work only in specified IRC networks.
|
||||||
|
- Automatically connect to IRC server(s) at startup, automatically join to
|
||||||
|
channels when connected
|
||||||
|
- All code is nonblocking, it won't hang while connecting to server or
|
||||||
|
opening DCC connection. Host lookups are done in separate processes.
|
||||||
|
- DCC send, receive and chat with GUI
|
||||||
|
- GNOME panel support, channels and queries are displayed in GNOME panel
|
||||||
|
where you can easily see which channels have been updated (label turns to
|
||||||
|
red) and click in them to open the channel.
|
||||||
|
- Doubleclicking URL in text widget launches specified web/ftp/email client,
|
||||||
|
also doubleclicking channel/nick join to channel or creates query.
|
||||||
|
- Aliases, ignores, autoignoring when flooding, notify lists, completing
|
||||||
|
specified words with tab (like home<tab> -> http://my.home.page),
|
||||||
|
hilighting lines with specified texts
|
||||||
|
- Smart nick completion
|
||||||
|
- Configurable logging support
|
||||||
|
- You can use ZVT widget to print texts, it's really fast so you can be
|
||||||
|
joined to many high traffic channels and irssi won't slow up
|
||||||
|
- Plugins support, creating plugins is really easy.
|
||||||
|
- Lots of nice GUI stuff :)
|
||||||
|
|
||||||
|
|
||||||
|
* INSTALLATION
|
||||||
|
|
||||||
|
./configure
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
Configure can use these parameters (all of these defaults to yes):
|
||||||
|
|
||||||
|
--with-proplist=dir Specify libPropList directory
|
||||||
|
--with-servertest Build test irc server which you can use to try crash
|
||||||
|
irc clients
|
||||||
|
--without-gnome Build without GNOME libraries
|
||||||
|
--without-gnome-panel Build without GNOME panel
|
||||||
|
--without-imlib Build without Imlib library
|
||||||
|
--without-socks Build without socks library
|
||||||
|
--without-textui Build without text mode version
|
||||||
|
--enable-memdebug Enable memory debugging, great for finding memory
|
||||||
|
leaks
|
||||||
|
--enable-gtk-hebrew Enable Hebrew support - see README-HEBREW
|
||||||
|
|
||||||
|
There's also some others, you can get a full list with ./configure --help
|
||||||
|
|
||||||
|
If you don't want to run irssi in panel, add --no-applet to command line
|
||||||
|
parameters.
|
||||||
|
|
||||||
|
|
||||||
|
* BUGS / SUGGESTIONS
|
||||||
|
|
||||||
|
See TODO file if it is already listed in there - if not send me email..
|
||||||
|
|
||||||
|
|
||||||
|
* AUTHOR
|
||||||
|
|
||||||
|
Timo Sirainen, cras@irccrew.org, cras/ircnet/#irssi, http://xlife.dhs.org/irssi/
|
43
README-HEBREW
Normal file
43
README-HEBREW
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
Hebrew support in irssi
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
Before you can enjoy IRCing in Hebrew, you need to get two other things.
|
||||||
|
|
||||||
|
1. FriBidi, a free implementation of the Unicode BiDi algorithm).
|
||||||
|
See http://imagic.weizmann.ac.il/~dov/freesw/FriBidi/
|
||||||
|
|
||||||
|
2. hebxfonts, a collection of Unicode-encoded Hebrew fonts along
|
||||||
|
with the keyboard mappings to use them (the right Alt key will be
|
||||||
|
configured to generate Hebrew characters).
|
||||||
|
See http://metalab.unc.edu/pub/Linux/X11/fonts/
|
||||||
|
|
||||||
|
After you get these two, you should be ok to go. To enable the Hebrew
|
||||||
|
support, specify --enable-gtk-hebrew=<path>. If the path starts with a
|
||||||
|
tilde (~), it is taken relative to your home directory. Here's a good
|
||||||
|
idea:
|
||||||
|
|
||||||
|
configure --enable-gtk-hebrew=~/.gnome/irssi-hebrew.gtkrc
|
||||||
|
|
||||||
|
After compiling and installing, you should copy the supplied gtkrc
|
||||||
|
file to where you told the program it would find it. Say you're at the
|
||||||
|
root of the irssi source tree, typing:
|
||||||
|
|
||||||
|
cp src/gui-gnome/irssi-hebrew.gtkrc ~/.gnome/irssi-hebrew.gtkrc
|
||||||
|
|
||||||
|
would do the trick.
|
||||||
|
|
||||||
|
One last configuration task is done from within irssi. Fire it up,
|
||||||
|
then go to the preferences dialog box and select a Hebrew font.
|
||||||
|
(e.g., -misc-fixed-medium-r-normal-*-*-120-*-*-c-*-iso8859-8)
|
||||||
|
|
||||||
|
The Hebrew support is not complete; it works as expected (ie, reversing
|
||||||
|
stuff with the FriBidi thingy) for the text entry field and for the
|
||||||
|
output text. In other places, you may see Hebrew characters, only
|
||||||
|
going left-to-right; in yet other places, you may not see Hebrew at all.
|
||||||
|
|
||||||
|
I have no intention of making this any better; comprehensive support
|
||||||
|
for Hebrew should come from within the GTK+ widget set, and not by
|
||||||
|
patching applications.
|
||||||
|
|
||||||
|
|
||||||
|
Ronen Tzur <rtzur@shani.net>
|
140
TODO
Normal file
140
TODO
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
- window goto active, name
|
||||||
|
|
||||||
|
*** Bugs
|
||||||
|
|
||||||
|
- If there's any empty lists in configuration file (like ircnets = ();),
|
||||||
|
libPropList crashes irssi at startup.. Irssi doesn't save any empty lists
|
||||||
|
now, but still this needs to be fixed in libPropList..
|
||||||
|
- after changing irssi-text's screen size to smaller it leaves some empty
|
||||||
|
lines to windows before printing text, redrawing screen moves the lines
|
||||||
|
back up.. hm..
|
||||||
|
- irssi can't find new themes in ~/.irssi/ while running - scan for new
|
||||||
|
themes when opening themes dialog? irssi-text also needs to be restarted
|
||||||
|
to use new themes..
|
||||||
|
- mirc ctcp togglemenuitem isn't updated right
|
||||||
|
- multiple dcc connections from different irc networks from same nick
|
||||||
|
doesn't work. Maybe create "server nick" and "refer nick" variables to
|
||||||
|
DCC_REC?
|
||||||
|
- gfloat doesn't work in formats .. why? In DCC messages kb and kb/s values
|
||||||
|
could be shown as floats..
|
||||||
|
|
||||||
|
*** text GUI
|
||||||
|
|
||||||
|
- statusbar:
|
||||||
|
- when starting to run out of space some items could be made smaller,
|
||||||
|
activity for example .. make some generic flag for items to use.
|
||||||
|
- activity: hilight number if window has message for you or hilighted
|
||||||
|
text
|
||||||
|
- "you have new mail"
|
||||||
|
- active server tag somewhere in window
|
||||||
|
- word wrapping doesn't work perfectly, if colors/bolds/etc are used, they're
|
||||||
|
treated as spaces. So things like (<newline>blah blah) can happen (/who)
|
||||||
|
- autojoining to channels, make the code common in gui-gnome and gui-text
|
||||||
|
|
||||||
|
*** Big things
|
||||||
|
|
||||||
|
- keyboard configuration
|
||||||
|
- session saving thing.. specify what channels/queries/dcc chats to open in
|
||||||
|
which window (real/tabbed/in same window with some other), what irc net
|
||||||
|
channels goes to where, what channels/queries to open at startup, etc.
|
||||||
|
use dialog with gtktree widget to change it.
|
||||||
|
- split windows with gtkpaned (check window-views-patch.diff)
|
||||||
|
- really transparently working irc proxy, saves scrollback buffers, etc.
|
||||||
|
Or maybe the existing ones already work?
|
||||||
|
- 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 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:
|
||||||
|
- perl plugin .. implementation problems, C's structures need to be
|
||||||
|
handled some way .. like for server structure get_address(),
|
||||||
|
get_port(), set_address(), set_port() etc..
|
||||||
|
- other scripting plugins would be easier? scheme, tcl, pythong?
|
||||||
|
sula premirex uses scheme, it would probably be pretty easy to learn
|
||||||
|
from it how to do it to irssi :)
|
||||||
|
- IRC bot, eggdrop is too old, needs a replacement ;)
|
||||||
|
- DCC file server, I'm not too excited about this, 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 :)
|
||||||
|
|
||||||
|
*** Little things
|
||||||
|
|
||||||
|
- command line parameter handling, specify what server/ircnet to autoconnect
|
||||||
|
or none.
|
||||||
|
- /list:
|
||||||
|
- gui optional
|
||||||
|
- sort it by clicking the headers
|
||||||
|
- change the size of columns
|
||||||
|
- total number of channels
|
||||||
|
- copy/paste things in list?
|
||||||
|
- search the list
|
||||||
|
- log option: add the open/close time to log
|
||||||
|
- log directory, automatically log all channels and queries there
|
||||||
|
- overwrite/append
|
||||||
|
- all windows, just queries, only the channels in channel list
|
||||||
|
- you can be joined to same channels in different irc networks (or even
|
||||||
|
the same ircnet!) - create the logs to different directiories/names
|
||||||
|
- use different themes in different channels/queries?
|
||||||
|
- improve msgslevels and ignoring .. Like ignoring "chan" doesn't work now.
|
||||||
|
It could be changed to joins, parts, quits, topics, nicks, .. just rip all
|
||||||
|
the msglevels from bitchx and use them :)
|
||||||
|
- use server-idle instead of channel.query thing..
|
||||||
|
- lag meter
|
||||||
|
- possibility to display different colors in nicks from different people..
|
||||||
|
and different colors for word hilighting too
|
||||||
|
- /connect ircnet could connect to ircnet
|
||||||
|
- change some GLists to GHashTables, aliases at least
|
||||||
|
- check new irssi versions with http rather than with irssibot..
|
||||||
|
- implement requesting files with DCC GET from remote client for dcc file
|
||||||
|
servers. good for people behind firewalls.
|
||||||
|
- support for ircii translation tables (/usr/lib/irc/translation/*)
|
||||||
|
- use different nicks/realnames in different irc networks
|
||||||
|
- zvt problems/todo:
|
||||||
|
- need some way to disable all the extra features, like sending 0x8e
|
||||||
|
messes up your fonts.
|
||||||
|
- the ugly cursor just keeps blinking
|
||||||
|
- when clicking an empty spot on screen it sometimes tells that there's
|
||||||
|
some weird crap in there..
|
||||||
|
- word wrapping
|
||||||
|
- notify list:
|
||||||
|
- dialog: keep track of hosts/realnames so after closing and opening the
|
||||||
|
dialog again they would show up..
|
||||||
|
- summary list (for irssi-text)
|
||||||
|
- nick-specific options:
|
||||||
|
- check for gone-flag changes (use userhosts instead of isons)
|
||||||
|
- create popup dialog
|
||||||
|
- run some command (like /exec as soon as I get that done :)
|
||||||
|
- gnome statubar:
|
||||||
|
- clock?
|
||||||
|
- dcc transfer meter (gtk progressbar)
|
||||||
|
- you could configure which events (whois, notify, etc.) to show in what
|
||||||
|
windows (all, current, status)
|
||||||
|
- gui for configuring plugin specific theme format texts
|
||||||
|
- awaylog (/log create ~/away.log -all +msgs or something), autoaway
|
||||||
|
- make window/save buffer and find work with zvt
|
||||||
|
- dcc send: allow selection of multiple files to send (also for dnd from
|
||||||
|
gmc!) Allow dropping files to anywhere in irssi.
|
||||||
|
- logging: longer format dd.mm.yy hh:mm:ss (configurable?)
|
||||||
|
- net split/join detection ? is this even needed? more harmful than useful?
|
||||||
|
- /timer, /clones
|
||||||
|
- run multiple commands with one alias (what was this needed for? can't
|
||||||
|
remember..)
|
||||||
|
- regexp for hilighting words?
|
||||||
|
- subcommands (dcc, window, ..) could use common function instead of copy and
|
||||||
|
pasting the same function all the time and modifying just two words...
|
25
acconfig.h
Normal file
25
acconfig.h
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#undef HAVE_GTK
|
||||||
|
#undef HAVE_GNOME
|
||||||
|
#undef HAVE_GNOME_PANEL
|
||||||
|
#undef SYSCONFDIR
|
||||||
|
#undef PLUGINSDIR
|
||||||
|
#undef PERLSCRIPTDIR
|
||||||
|
#undef GTK_10
|
||||||
|
#undef HAVE_SOCKS_H
|
||||||
|
#undef HAVE_IMLIB
|
||||||
|
#undef MEM_DEBUG
|
||||||
|
#undef HAVE_IPV6
|
||||||
|
#undef GTK_HEBREW
|
||||||
|
#undef GTK_HEBREW_RC
|
||||||
|
|
||||||
|
#undef HAVE_NCURSES_USE_DEFAULT_COLORS
|
||||||
|
#undef HAVE_CURSES_IDCOK
|
||||||
|
|
||||||
|
#undef HAS_CURSES
|
||||||
|
#undef USE_SUNOS_CURSES
|
||||||
|
#undef USE_BSD_CURSES
|
||||||
|
#undef USE_SYSV_CURSES
|
||||||
|
#undef USE_NCURSES
|
||||||
|
#undef NO_COLOR_CURSES
|
||||||
|
#undef SCO_FLAVOR
|
||||||
|
#undef NCURSES_970530
|
21
autogen.sh
Executable file
21
autogen.sh
Executable file
@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Run this to generate all the initial makefiles, etc.
|
||||||
|
|
||||||
|
srcdir=`dirname $0`
|
||||||
|
test -z "$srcdir" && srcdir=.
|
||||||
|
|
||||||
|
# I'm too lazy to update version number into several places.. :)
|
||||||
|
version=`cat configure.in|grep AM_INIT_AUTOMAKE|perl -pe 's/^[^,]*,[ ]*([^\)]*).*/$1/'`
|
||||||
|
cat irssi.spec.in |sed s/^Version:/Version:\ $version/ > irssi.spec
|
||||||
|
|
||||||
|
PKG_NAME="Irssi"
|
||||||
|
|
||||||
|
(test -f $srcdir/configure.in \
|
||||||
|
## put other tests here
|
||||||
|
) || {
|
||||||
|
echo -n "**Error**: Directory "\`$srcdir\'" does not look like the"
|
||||||
|
echo " top-level $PKG_NAME directory"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
. $srcdir/macros/autogen.sh
|
101
colorless.theme
Normal file
101
colorless.theme
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
{
|
||||||
|
default_color = 7;
|
||||||
|
colors = {};
|
||||||
|
formats = {
|
||||||
|
line_start = "-!- ";
|
||||||
|
line_start_irssi = "-!- Irssi: ";
|
||||||
|
connecting = "Connecting to %_$1%_ [$2] port %_$3%_";
|
||||||
|
disconnected = "Disconnected from %_$1%_ [$2]";
|
||||||
|
join = "%_$1%_ [$2] has joined %_$3";
|
||||||
|
cannot_join = "Cannot join to channel %_$1%_ [$2]";
|
||||||
|
part = "%_$1%_ [$2] has left %_$3%_ [$4]";
|
||||||
|
kick = "%_$1%_ was kicked from $2 by %_$3%_ [$4]";
|
||||||
|
quit = "%_$1%_ [$2] has quit IRC [$3]";
|
||||||
|
names = "[%_Users%_($1)] $2";
|
||||||
|
endofnames = "%_$1%_: Total of %_$2%_ nicks [%_$3%_ ops, %_$4%_ voices, %_$5%_ normal]";
|
||||||
|
topic = "Topic for $1: $2";
|
||||||
|
no_topic = "No topic set for $1";
|
||||||
|
new_topic = "%_$1%_ changed the topic of $2 to: $3";
|
||||||
|
topic_unset = "Topic unset by %_$1%_ on $2";
|
||||||
|
topic_info = "Topic set by %_$1%_ [$2]";
|
||||||
|
chanmode_change = "mode/$1 [$2] by %_$3";
|
||||||
|
channel_mode = "mode/$1 [$2]";
|
||||||
|
banlist = "%_$1%_: ban $2";
|
||||||
|
banlist_long = "%_$1%_: ban $2 [by %_$3%_, $4 secs ago]";
|
||||||
|
ebanlist = "%_$1%_: ban exception $2";
|
||||||
|
ebanlist_long = "%_$1%_: ban exception $2 [by %_$3%_, $4 secs ago]";
|
||||||
|
invitelist = "%_$1%_: invite $2";
|
||||||
|
usermode_change = "Mode change [%_$1%_] for user $2";
|
||||||
|
your_nick_changed = "You're now known as $1";
|
||||||
|
nick_changed = "%_$1%_ is now known as $2";
|
||||||
|
your_nick_owned = "Your nick is owned by %_$4%_ [$2@$3]";
|
||||||
|
whois = "%_$1%_ [$2@$3]%N ircname : $4";
|
||||||
|
whois_idle_signon = " idle : $2 hours $3 mins $4 secs [signon: $5]";
|
||||||
|
own_msg = "<$1> $2";
|
||||||
|
own_msg_channel = "<$1:$2> $3";
|
||||||
|
own_msg_private = "[msg($1)] $2";
|
||||||
|
own_notice = "[notice($1)] $2";
|
||||||
|
own_me = " * $1 $2";
|
||||||
|
own_ctcp = "[ctcp($1)] $2 $3";
|
||||||
|
own_dcc = "[dcc($1)] $2";
|
||||||
|
pubmsg_me = "<$1> $2";
|
||||||
|
pubmsg_me_channel = "<$1:$2> $3";
|
||||||
|
pubmsg = "<$1> $2";
|
||||||
|
pubmsg_channel = "<$1:$2> $3";
|
||||||
|
msg_private = "[$1($2)] $3";
|
||||||
|
dcc_msg = "[$1(dcc)] $2";
|
||||||
|
notice_server = "!$1 $2";
|
||||||
|
notice_public = "-$1:$2- $3";
|
||||||
|
notice_private = "-$1($2)- $3";
|
||||||
|
action_dcc = " (*dcc*) $1 $2";
|
||||||
|
action_private = " (*) $1 $2";
|
||||||
|
action_public = " * $1 $2";
|
||||||
|
action_public_channel = " * $1:$2 $3";
|
||||||
|
ctcp_reply = "CTCP %_$1%_ reply from %_$2%_: $3";
|
||||||
|
ctcp_requested = ">>> %_$1%_ [$2] requested %_$3%_ from %_$4";
|
||||||
|
dcc_ctcp = ">>> DCC CTCP received from %_$1%_: $2";
|
||||||
|
dcc_chat = "DCC CHAT from %_$1%_ [$2 port $3]";
|
||||||
|
dcc_chat_not_found = "No DCC CHAT connection open to %_$1";
|
||||||
|
dcc_chat_connected = "DCC %_CHAT%_ connection with %_$1%_ [$2 port $3] established";
|
||||||
|
dcc_chat_disconnected = "DCC lost chat to %_$1";
|
||||||
|
dcc_send = "DCC SEND from %_$1%_ [$2 port $3]: $4 [$5 bytes]";
|
||||||
|
dcc_send_exists = "DCC already sending file $1 for %_$2%_";
|
||||||
|
dcc_send_not_found = "DCC not sending file $2 to %_$1";
|
||||||
|
dcc_send_file_not_found = "DCC file not found: $1";
|
||||||
|
dcc_send_connected = "DCC sending file $1 for %_$2%_ [$3 port $4]";
|
||||||
|
dcc_send_complete = "DCC sent file $1 [%_$2%_kb] for %_$3%_ in %_$4%_ secs [%_$5kb/s%_]";
|
||||||
|
dcc_send_aborted = "DCC aborted sending file $1 for %_$2%_";
|
||||||
|
dcc_get_not_found = "DCC no file offered by %_$1";
|
||||||
|
dcc_get_connected = "DCC receiving file $1 from %_$2%_ [$3 port $4]";
|
||||||
|
dcc_get_complete = "DCC received file $1 [$2kb] from %_$3%_ in %_$4%_ secs [$5kb/s]";
|
||||||
|
dcc_get_aborted = "DCC aborted receiving file $1 from %_$2%_";
|
||||||
|
dcc_unknown_ctcp = "DCC unknown ctcp $1 from %_$2%_ [$3]";
|
||||||
|
dcc_unknown_reply = "DCC unknown reply $1 from %_$2%_ [$3]";
|
||||||
|
dcc_unknown_command = "DCC unknown command: $1";
|
||||||
|
dcc_unknown_type = "DCC unknown type %_$1";
|
||||||
|
dcc_connect_error = "DCC can't connect to %_$1%_ port %_$2";
|
||||||
|
dcc_cant_create = "DCC can't create file $1";
|
||||||
|
dcc_rejected = "DCC $1 was rejected by %_$2%_ [$3]";
|
||||||
|
dcc_close = "DCC $1 close for %_$2%_ [$3]";
|
||||||
|
log_opened = "Log file $1 opened";
|
||||||
|
log_open_failed = "Couldn't open log file $1";
|
||||||
|
log_not_open = "Log file $1 not open";
|
||||||
|
log_closed = "Closed log file $1";
|
||||||
|
log_listentry = "$1: $2";
|
||||||
|
log_sublistentry = " + $1: $2";
|
||||||
|
ircjoin = "%_$1%_ [$2@$3] [%_$4%_] has joined to IRC";
|
||||||
|
plugin_cant_load = "Can't load plugin %_$1%_";
|
||||||
|
plugin_not_loaded = "Plugin %_$1%_ not loaded";
|
||||||
|
};
|
||||||
|
|
||||||
|
plugins = {
|
||||||
|
sample = "start stop";
|
||||||
|
};
|
||||||
|
|
||||||
|
pluginformats = {
|
||||||
|
sample = {
|
||||||
|
start = "Sample plugin loaded";
|
||||||
|
stop = "Sample plugin unloaded";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
36
config
Normal file
36
config
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
setupservers = (
|
||||||
|
{server = irc.funet.fi;ircnet = ircnet;port = 6667;autoconnect = No;}
|
||||||
|
);
|
||||||
|
|
||||||
|
ircnets = ({name = ircnet;});
|
||||||
|
|
||||||
|
channels = (
|
||||||
|
{
|
||||||
|
name = "#irssi";
|
||||||
|
ircnet = ircnet;
|
||||||
|
autojoin = No;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
aliases = (
|
||||||
|
{alias = J;command = "/join &1";},
|
||||||
|
{alias = LEAVE;command = "/part &1";},
|
||||||
|
{alias = BYE;command = "/quit &1";},
|
||||||
|
{alias = WI;command = "/whois &1";},
|
||||||
|
{alias = WII;command = "/whois %1 %1";},
|
||||||
|
{alias = WW;command = "/whowas &1";},
|
||||||
|
{alias = W;command = "/who *";},
|
||||||
|
{alias = N;command = "/names *";},
|
||||||
|
{alias = M;command = "/msg &1";},
|
||||||
|
{alias = T;command = "/topic &1";},
|
||||||
|
{alias = C;command = "/clear";},
|
||||||
|
{alias = CL;command = "/clear";},
|
||||||
|
{alias = K;command = "/kick &1";},
|
||||||
|
{alias = KB;command = "/kickban &1";},
|
||||||
|
{alias = KN;command = "/knockout &1";},
|
||||||
|
{alias = B;command = "/ban &1";},
|
||||||
|
{alias = UB;command = "/unban &1";},
|
||||||
|
{alias = IG;command = "/ignore &1";},
|
||||||
|
{alias = UNIG;command = "/unignore &1";}
|
||||||
|
);
|
||||||
|
}
|
363
configure.in
Normal file
363
configure.in
Normal file
@ -0,0 +1,363 @@
|
|||||||
|
AC_INIT(src)
|
||||||
|
|
||||||
|
AM_CONFIG_HEADER(config.h)
|
||||||
|
AM_INIT_AUTOMAKE(irssi, 0.7.16)
|
||||||
|
|
||||||
|
AM_MAINTAINER_MODE
|
||||||
|
|
||||||
|
AM_ACLOCAL_INCLUDE(macros)
|
||||||
|
|
||||||
|
AC_ISC_POSIX
|
||||||
|
AC_PROG_CC
|
||||||
|
AC_PROG_CPP
|
||||||
|
AC_STDC_HEADERS
|
||||||
|
AC_ARG_PROGRAM
|
||||||
|
AM_PROG_LIBTOOL
|
||||||
|
|
||||||
|
AC_CHECK_HEADERS(string.h stdlib.h unistd.h dirent.h sys/ioctl.h)
|
||||||
|
|
||||||
|
GNOME_INIT
|
||||||
|
|
||||||
|
AC_ARG_WITH(proplist,
|
||||||
|
[ --with-proplist Specify libPropList location],
|
||||||
|
proplist_dir=$withval)
|
||||||
|
|
||||||
|
AC_ARG_WITH(socks,
|
||||||
|
[ --with-socks Build with socks support],
|
||||||
|
if test x$withval = xyes; then
|
||||||
|
want_socks=yes
|
||||||
|
else
|
||||||
|
if test "x$withval" = xno; then
|
||||||
|
want_socks=no
|
||||||
|
else
|
||||||
|
want_socks=yes
|
||||||
|
fi
|
||||||
|
fi,
|
||||||
|
want_socks=no)
|
||||||
|
|
||||||
|
AC_ARG_WITH(imlib,
|
||||||
|
[ --with-imlib Build with imlib support],
|
||||||
|
if test x$withval = xyes; then
|
||||||
|
want_imlib=yes
|
||||||
|
else
|
||||||
|
if test "x$withval" = xno; then
|
||||||
|
want_imlib=no
|
||||||
|
else
|
||||||
|
want_imlib=yes
|
||||||
|
fi
|
||||||
|
fi,
|
||||||
|
want_imlib=yes)
|
||||||
|
|
||||||
|
AC_ARG_WITH(gnome-panel,
|
||||||
|
[ --with-gnome-panel Build with gnome panel applet support],
|
||||||
|
if test x$withval = xyes; then
|
||||||
|
want_gnome_panel=yes
|
||||||
|
else
|
||||||
|
if test "x$withval" = xno; then
|
||||||
|
want_gnome_panel=no
|
||||||
|
else
|
||||||
|
want_gnome_panel=yes
|
||||||
|
fi
|
||||||
|
fi,
|
||||||
|
want_gnome_panel=yes)
|
||||||
|
|
||||||
|
AC_ARG_WITH(textui,
|
||||||
|
[ --with-textui Build irssi-text],
|
||||||
|
if test x$withval = xyes; then
|
||||||
|
want_textui=yes
|
||||||
|
else
|
||||||
|
if test "x$withval" = xno; then
|
||||||
|
want_textui=no
|
||||||
|
else
|
||||||
|
want_textui=yes
|
||||||
|
fi
|
||||||
|
fi,
|
||||||
|
want_textui=yes)
|
||||||
|
|
||||||
|
AC_ARG_WITH(plugins,
|
||||||
|
[ --with-plugins Build plugins],
|
||||||
|
if test x$withval = xyes; then
|
||||||
|
want_plugins=yes
|
||||||
|
else
|
||||||
|
if test "x$withval" = xno; then
|
||||||
|
want_plugins=no
|
||||||
|
else
|
||||||
|
want_plugins=yes
|
||||||
|
fi
|
||||||
|
fi,
|
||||||
|
want_plugins=yes)
|
||||||
|
|
||||||
|
AC_ARG_WITH(servertest,
|
||||||
|
[ --with-servertest Build servertest],
|
||||||
|
if test x$withval = xyes; then
|
||||||
|
want_servertest=yes
|
||||||
|
else
|
||||||
|
if test "x$withval" = xno; then
|
||||||
|
want_servertest=no
|
||||||
|
else
|
||||||
|
want_servertest=yes
|
||||||
|
fi
|
||||||
|
fi,
|
||||||
|
want_servertest=no)
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(memdebug,
|
||||||
|
[ --enable-memdebug Enable memory debugging],
|
||||||
|
if test x$enableval = xyes; then
|
||||||
|
want_memdebug=yes
|
||||||
|
else
|
||||||
|
if test "x$enableval" = xno; then
|
||||||
|
want_memdebug=no
|
||||||
|
else
|
||||||
|
want_memdebug=yes
|
||||||
|
fi
|
||||||
|
fi,
|
||||||
|
want_memdebug=no)
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(ipv6,
|
||||||
|
[ --enable-ipv6 Enable IPv6 support],
|
||||||
|
if test x$enableval = xyes; then
|
||||||
|
want_ipv6=yes
|
||||||
|
else
|
||||||
|
if test "x$enableval" = xno; then
|
||||||
|
want_ipv6=no
|
||||||
|
else
|
||||||
|
want_ipv6=yes
|
||||||
|
fi
|
||||||
|
fi,
|
||||||
|
want_ip6=no)
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(gtk-hebrew,
|
||||||
|
[ --enable-gtk-hebrew Enable Hebrew support],
|
||||||
|
if test "x$enableval" = xno; then
|
||||||
|
want_gtk_hebrew=no
|
||||||
|
HEBREW_LIBS=""
|
||||||
|
else
|
||||||
|
AC_DEFINE(GTK_HEBREW)
|
||||||
|
AC_DEFINE_UNQUOTED(GTK_HEBREW_RC, "$enableval")
|
||||||
|
HEBREW_LIBS="-lfribidi"
|
||||||
|
want_gtk_hebrew=yes
|
||||||
|
fi,
|
||||||
|
want_gtk_hebrew=no)
|
||||||
|
|
||||||
|
dnl **
|
||||||
|
dnl ** just some generic stuff...
|
||||||
|
dnl **
|
||||||
|
|
||||||
|
AC_CHECK_FUNCS(mkfifo)
|
||||||
|
|
||||||
|
AC_CHECK_LIB(socket, socket, [
|
||||||
|
LIBS="$LIBS -lsocket"
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_CHECK_LIB(nsl, inet_addr, [
|
||||||
|
LIBS="$LIBS -lnsl"
|
||||||
|
], -lsocket)
|
||||||
|
|
||||||
|
# gcc specific options
|
||||||
|
if test "x$ac_cv_prog_gcc" = "xyes"; then
|
||||||
|
CFLAGS="$CFLAGS -Wall"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x$prefix" = "xNONE"; then
|
||||||
|
prefix="/usr/local"
|
||||||
|
else
|
||||||
|
prefix=$prefix
|
||||||
|
fi
|
||||||
|
|
||||||
|
AM_CONDITIONAL(BUILD_PLUGINS, test "x$want_plugins" = "xyes")
|
||||||
|
AM_CONDITIONAL(BUILD_SERVERTEST, test "x$want_servertest" = "xyes")
|
||||||
|
AC_DEFINE_UNQUOTED(SYSCONFDIR, "$prefix/etc")
|
||||||
|
AC_DEFINE_UNQUOTED(PLUGINSDIR, "$prefix/lib/irssi/plugins")
|
||||||
|
|
||||||
|
dnl **
|
||||||
|
dnl ** check for libPropList
|
||||||
|
dnl **
|
||||||
|
|
||||||
|
if test "x$proplist_dir" = "x"; then
|
||||||
|
proplib=
|
||||||
|
else
|
||||||
|
proplib=-L$proplist_dir/lib
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_CHECK_LIB(PropList, PLSave, [
|
||||||
|
LIBS="$LIBS $proplib -lPropList"
|
||||||
|
if test "x$proplist_dir" != "x"; then
|
||||||
|
CFLAGS="$CFLAGS -I$proplist_dir/include"
|
||||||
|
fi
|
||||||
|
], [
|
||||||
|
echo "ERROR: Irssi needs libPropList for configuration file handling."
|
||||||
|
echo "Go get it from http://xlife.dhs.org/irssi/download.php"
|
||||||
|
AC_ERROR(["libPropList not found"])
|
||||||
|
], $LIBS $proplib -lPropList)
|
||||||
|
|
||||||
|
|
||||||
|
dnl **
|
||||||
|
dnl ** check for socks
|
||||||
|
dnl **
|
||||||
|
|
||||||
|
if test "x$want_socks" = "xyes"; then
|
||||||
|
AC_CHECK_LIB(socks, connect, [
|
||||||
|
LIBS="$LIBS -lsocks"
|
||||||
|
AC_CHECK_HEADER(socks.h, [
|
||||||
|
AC_DEFINE(HAVE_SOCKS_H)
|
||||||
|
CFLAGS="$CFLAGS -DSOCKS"
|
||||||
|
AC_MSG_RESULT(["socks5 library found, building with it"])
|
||||||
|
], [
|
||||||
|
AC_MSG_RESULT(["socks4 library found, building with it"])
|
||||||
|
CFLAGS="$CFLAGS -Dconnect=Rconnect -Dgetsockname=Rgetsockname -Dgetpeername=Rgetpeername -Dbind=Rbind -Daccept=Raccept -Dlisten=Rlisten -Dselect=Rselect"
|
||||||
|
])
|
||||||
|
])
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl **
|
||||||
|
dnl ** check for gnome
|
||||||
|
dnl **
|
||||||
|
|
||||||
|
if test "x$want_gnome" = "xyes"; then
|
||||||
|
if test "x$GNOME_LIBS" = "x"; then
|
||||||
|
want_gnome="no";
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
AM_CONDITIONAL(HAVE_GNOME, test "x$want_gnome" = "xyes")
|
||||||
|
if test "x$want_gnome" = "xyes"; then
|
||||||
|
AC_DEFINE(HAVE_GTK)
|
||||||
|
AC_DEFINE(HAVE_GNOME)
|
||||||
|
GNOME_SUPPORT_CHECKS
|
||||||
|
GUI_CFLAGS="$GNOME_INCLUDEDIR"
|
||||||
|
|
||||||
|
dnl **
|
||||||
|
dnl ** check for gnome panel applet library
|
||||||
|
dnl **
|
||||||
|
|
||||||
|
if test "x$want_gnome_panel" = "xyes"; then
|
||||||
|
AC_CHECK_LIB(panel_applet, applet_widget_init, [
|
||||||
|
GUI_LIBS="$GNOME_LIBDIR $GNOMEGNORBA_LIBS $ZVT_LIBS -lpanel_applet"
|
||||||
|
AC_DEFINE(HAVE_GNOME_PANEL)
|
||||||
|
], [
|
||||||
|
GUI_LIBS="$GNOME_LIBDIR $GNOMEUI_LIBS $ZVT_LIBS"
|
||||||
|
want_gnome_panel="no"
|
||||||
|
], $GNOME_LIBDIR $GNOMEGNORBA_LIBS -lpanel_applet)
|
||||||
|
else
|
||||||
|
GUI_LIBS="$GNOME_LIBDIR $GNOMEUI_LIBS $ZVT_LIBS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
else
|
||||||
|
want_gnome_panel="no"
|
||||||
|
AC_DEFINE(HAVE_GTK)
|
||||||
|
AM_PATH_GTK(1.2.0)
|
||||||
|
GUI_CFLAGS="$GTK_CFLAGS"
|
||||||
|
GUI_LIBS="$GTK_LIBS"
|
||||||
|
|
||||||
|
if test "x$gtk_config_minor_version" = "x0"; then
|
||||||
|
AC_DEFINE(GTK_10)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x$want_imlib" = "xyes"; then
|
||||||
|
AM_PATH_GDK_IMLIB(, [define_imlib=true])
|
||||||
|
if test x$define_imlib = xtrue; then
|
||||||
|
AC_DEFINE(HAVE_IMLIB)
|
||||||
|
GUI_CFLAGS="$GUI_CFLAGS $GDK_IMLIB_CFLAGS"
|
||||||
|
GUI_LIBS="$GDK_IMLIB_LIBS"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x$GUI_LIBS" != "x"; then
|
||||||
|
GUI_LIBS="$GUI_LIBS $HEBREW_LIBS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_SUBST(GUI_LIBS)
|
||||||
|
AC_SUBST(GUI_CFLAGS)
|
||||||
|
AM_CONDITIONAL(BUILD_GNOMEUI, test "x$GUI_LIBS" != "x")
|
||||||
|
AM_CONDITIONAL(HAVE_GNOME_PANEL, test "x$want_gnome_panel" = "xyes")
|
||||||
|
|
||||||
|
dnl **
|
||||||
|
dnl ** gui-text checks
|
||||||
|
dnl **
|
||||||
|
|
||||||
|
AM_PATH_GLIB(1.2.0,,, gmodule)
|
||||||
|
|
||||||
|
dnl **
|
||||||
|
dnl ** curses checks
|
||||||
|
dnl **
|
||||||
|
|
||||||
|
if test "x$want_textui" = "xyes"; then
|
||||||
|
AC_CHECK_CURSES
|
||||||
|
|
||||||
|
if test "x$ncurses_version" != "x"; then
|
||||||
|
AC_CHECK_LIB(ncurses, use_default_colors, [
|
||||||
|
AC_DEFINE(HAVE_NCURSES_USE_DEFAULT_COLORS)
|
||||||
|
],, $CURSES_LIBS)
|
||||||
|
AC_CHECK_LIB(ncurses, idcok, [
|
||||||
|
AC_DEFINE(HAVE_CURSES_IDCOK)
|
||||||
|
],, $CURSES_LIBS)
|
||||||
|
else
|
||||||
|
AC_CHECK_LIB(curses, idcok, [
|
||||||
|
AC_DEFINE(HAVE_CURSES_IDCOK)
|
||||||
|
],, $CURSES_LIBS)
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
has_curses=false
|
||||||
|
fi
|
||||||
|
AM_CONDITIONAL(HAS_CURSES, test "$has_curses" = true)
|
||||||
|
|
||||||
|
dnl **
|
||||||
|
dnl ** memory debugging
|
||||||
|
dnl **
|
||||||
|
|
||||||
|
if test "x$want_memdebug" = "xyes"; then
|
||||||
|
AC_DEFINE(MEM_DEBUG)
|
||||||
|
fi
|
||||||
|
AM_CONDITIONAL(BUILD_MEMDEBUG, test "x$want_memdebug" = "xyes")
|
||||||
|
|
||||||
|
dnl **
|
||||||
|
dnl ** IPv6 support
|
||||||
|
dnl **
|
||||||
|
|
||||||
|
if test "x$want_ipv6" = "xyes"; then
|
||||||
|
AC_DEFINE(HAVE_IPV6)
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl **
|
||||||
|
dnl ** internationalization support
|
||||||
|
dnl **
|
||||||
|
|
||||||
|
dnl ALL_LINGUAS=""
|
||||||
|
dnl AM_GNU_GETTEXT
|
||||||
|
dnl AC_LINK_FILES($nls_cv_header_libgt, $nls_cv_header_intl)
|
||||||
|
|
||||||
|
AC_OUTPUT(
|
||||||
|
Makefile
|
||||||
|
dnl ## internationalization support
|
||||||
|
dnl po/Makefile.in
|
||||||
|
dnl intl/Makefile
|
||||||
|
macros/Makefile
|
||||||
|
src/Makefile
|
||||||
|
src/irc-base/Makefile
|
||||||
|
src/irc-extra/Makefile
|
||||||
|
src/ui-common/Makefile
|
||||||
|
src/gui-none/Makefile
|
||||||
|
src/gui-text/Makefile
|
||||||
|
src/gui-gnome/Makefile
|
||||||
|
src/gui-gnome/help/Makefile
|
||||||
|
src/gui-gnome/help/C/Makefile
|
||||||
|
src/gui-gnome/pixmaps/Makefile
|
||||||
|
src/lib-config/Makefile
|
||||||
|
src/lib-nongui/Makefile
|
||||||
|
src/settings/Makefile
|
||||||
|
servertest/Makefile
|
||||||
|
plugins/Makefile
|
||||||
|
plugins/sample/Makefile
|
||||||
|
plugins/speech/Makefile
|
||||||
|
plugins/sound/Makefile
|
||||||
|
plugins/proxy/Makefile
|
||||||
|
plugins/external/Makefile
|
||||||
|
plugins/bot/Makefile
|
||||||
|
stamp.h)
|
||||||
|
|
||||||
|
dnl **
|
||||||
|
dnl ** internationalization support
|
||||||
|
dnl **
|
||||||
|
|
||||||
|
dnl stamp.h],[sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile])
|
5
file2header.sh
Executable file
5
file2header.sh
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
echo "gchar *default_config ="
|
||||||
|
cat $1|sed 's/\\/\\\\/g'|sed 's/"/\\"/g'|sed 's/^/\"/'|sed 's/$/\\n\"/'
|
||||||
|
echo ";"
|
6
irssi.desktop
Normal file
6
irssi.desktop
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Name=irssi
|
||||||
|
Comment=irssi IRC client
|
||||||
|
Exec=irssi
|
||||||
|
Terminal=0
|
||||||
|
Type=Application
|
5
irssi.gnorba
Normal file
5
irssi.gnorba
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
[irssi]
|
||||||
|
type=exe
|
||||||
|
repo_id=IDL:GNOME/Applet:1.0
|
||||||
|
description=irssi IRC client
|
||||||
|
location_info=irssi
|
87
irssi.spec.in
Normal file
87
irssi.spec.in
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
Name: irssi
|
||||||
|
Version:
|
||||||
|
Release: 1
|
||||||
|
Packager: Red Hat Contrib|Net <rhcn-bugs@redhat.com>
|
||||||
|
Vendor: Timo Sirainen <cras@irccrew.org>
|
||||||
|
Distribution: Red Hat Contrib|Net
|
||||||
|
Summary: Irssi is a GTK based IRC client
|
||||||
|
Copyright: GPL
|
||||||
|
Group: X11/Applications/Networking
|
||||||
|
URL: http://xlife.dhs.org/irssi/
|
||||||
|
Source: http://xlife.dhs.org/irssi/files/%{name}-%{version}.tar.bz2
|
||||||
|
Requires: gtk+
|
||||||
|
Prefix: /usr
|
||||||
|
BuildRoot: /tmp/%{name}-%{version}
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Sun Aug 29 1999 JT Traub <jtraub@dragoncat.net>
|
||||||
|
- Updated to 0.7.15 sources
|
||||||
|
- Fixed config stuff that changed since last version.
|
||||||
|
|
||||||
|
* Thu Mar 25 1999 JT Traub <jtraub@dragoncat.net>
|
||||||
|
- Updated sources
|
||||||
|
|
||||||
|
* Sat Mar 13 1999 JT Traub <jtraub@dragoncat.net>
|
||||||
|
- Updated to 0.7.4 sources
|
||||||
|
- Added the irssi-text bin to the package.
|
||||||
|
|
||||||
|
* Mon Feb 22 1999 JT Traub <jtraub@dragoncat.net>
|
||||||
|
- Made spec file compliant with RHCN guidelines.
|
||||||
|
|
||||||
|
* Sun Feb 13 1999 JT Traub <jtraub@dragoncat.net>
|
||||||
|
- Updated to 0.6.0 sources.
|
||||||
|
- Cleaned up spec file to make it relocatable on install
|
||||||
|
|
||||||
|
* Sun Feb 7 1999 JT Traub <jtraub@dragoncat.net>
|
||||||
|
- Updated sources to 0.5.0
|
||||||
|
- removed obsolete patch lines
|
||||||
|
|
||||||
|
* Sat Feb 3 1999 JT Traub <jtraub@dragoncat.net>
|
||||||
|
- Updated sources to 0.4.0
|
||||||
|
- Deleted old patch line
|
||||||
|
|
||||||
|
* Sat Jan 30 1999 JT Traub <jtraub@dragoncat.net>
|
||||||
|
- Updated sources to 0.3.6
|
||||||
|
- Updated spec to install the .desktop file.
|
||||||
|
- Removed the now obsolete patch lines
|
||||||
|
|
||||||
|
* Wed Jan 27 1999 JT Traub <jtraub@dragoncat.net>
|
||||||
|
- Upgraded to 0.3.5
|
||||||
|
|
||||||
|
* Sun Jan 24 1999 JT Traub <jtraub@dragoncat.net>
|
||||||
|
- First attempt at building this
|
||||||
|
|
||||||
|
%description
|
||||||
|
Irssi is a GTK based GUI IRC client by Timo Sirainen <cras@irccrew.org>.
|
||||||
|
More information can be found at http://xlife.dhs.org/irssi/.
|
||||||
|
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup
|
||||||
|
|
||||||
|
%build
|
||||||
|
./configure --prefix=%{prefix}
|
||||||
|
make
|
||||||
|
|
||||||
|
%install
|
||||||
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
make prefix=$RPM_BUILD_ROOT%{prefix} install
|
||||||
|
strip $RPM_BUILD_ROOT%{prefix}/bin/irssi
|
||||||
|
strip $RPM_BUILD_ROOT%{prefix}/bin/irssi-text
|
||||||
|
strip $RPM_BUILD_ROOT%{prefix}/bin/irssi-bot
|
||||||
|
|
||||||
|
|
||||||
|
%clean
|
||||||
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
|
||||||
|
%files
|
||||||
|
%defattr (-,root,root)
|
||||||
|
%doc AUTHORS COPYING INSTALL ChangeLog README TODO NEWS
|
||||||
|
%attr(755,root,root) %{prefix}/bin/irssi
|
||||||
|
%attr(755,root,root) %{prefix}/bin/irssi-text
|
||||||
|
%attr(755,root,root) %{prefix}/bin/irssi-bot
|
||||||
|
%attr(644,root,root) %config %{prefix}/etc/irssi/*
|
||||||
|
%attr(644,root,root) %{prefix}/etc/CORBA/servers/irssi.gnorba
|
||||||
|
%attr(644,root,root) %{prefix}/share/applets/Network/irssi.desktop
|
||||||
|
%attr(644,root,root) %{prefix}/share/gnome/help/irssi/C/*
|
||||||
|
%attr(644,root,root) %{prefix}/lib/irssi/plugins/*
|
8
servertest/.cvsignore
Normal file
8
servertest/.cvsignore
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
*.la
|
||||||
|
*.lo
|
||||||
|
.deps
|
||||||
|
.libs
|
||||||
|
Makefile
|
||||||
|
Makefile.in
|
||||||
|
so_locations
|
||||||
|
ircserver
|
13
servertest/Makefile.am
Normal file
13
servertest/Makefile.am
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
bin_PROGRAMS = ircserver
|
||||||
|
|
||||||
|
INCLUDES = $(GLIB_CFLAGS) -I$(top_srcdir)/src
|
||||||
|
|
||||||
|
if BUILD_MEMDEBUG
|
||||||
|
memdebug_src=../src/irc-base/memdebug.o
|
||||||
|
else
|
||||||
|
memdebug_src=
|
||||||
|
endif
|
||||||
|
|
||||||
|
ircserver_LDADD = -lglib ../src/irc-base/network.o $(memdebug_src)
|
||||||
|
|
||||||
|
ircserver_SOURCES = server.c
|
463
servertest/server.c
Normal file
463
servertest/server.c
Normal file
@ -0,0 +1,463 @@
|
|||||||
|
#include <common.h>
|
||||||
|
|
||||||
|
#include <irc-base/network.h>
|
||||||
|
|
||||||
|
#define FLOOD_TIMEOUT 100000
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
gchar *name;
|
||||||
|
GList *nicks;
|
||||||
|
}
|
||||||
|
CHANNEL_REC;
|
||||||
|
|
||||||
|
GList *channels;
|
||||||
|
gchar *clientnick, *clienthost;
|
||||||
|
|
||||||
|
int clienth;
|
||||||
|
|
||||||
|
/* Read a line */
|
||||||
|
gint read_line(gboolean socket, gint handle, GString *output, GString *buffer)
|
||||||
|
{
|
||||||
|
gchar tmpbuf[512];
|
||||||
|
gint recvlen, pos;
|
||||||
|
|
||||||
|
g_return_val_if_fail(handle != -1, -1);
|
||||||
|
g_return_val_if_fail(output != NULL, -1);
|
||||||
|
g_return_val_if_fail(buffer != NULL, -1);
|
||||||
|
|
||||||
|
g_string_truncate(output, 0);
|
||||||
|
|
||||||
|
recvlen = socket ?
|
||||||
|
net_receive(handle, tmpbuf, sizeof(tmpbuf)-1) :
|
||||||
|
read(handle, tmpbuf, sizeof(tmpbuf)-1);
|
||||||
|
|
||||||
|
if (recvlen <= 0)
|
||||||
|
{
|
||||||
|
if (buffer->len > 0)
|
||||||
|
{
|
||||||
|
/* no new data got but still something in buffer.. */
|
||||||
|
for (pos = 0; pos < buffer->len; pos++)
|
||||||
|
{
|
||||||
|
if (buffer->str[pos] == 13 || buffer->str[pos] == 10)
|
||||||
|
{
|
||||||
|
recvlen = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (recvlen < 0 && buffer->len > 0)
|
||||||
|
{
|
||||||
|
/* connection closed and last line is missing \n ..
|
||||||
|
just add it so we can see if it had anything useful.. */
|
||||||
|
recvlen = 0;
|
||||||
|
g_string_append_c(buffer, '\n');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (recvlen < 0) return -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* append received data to buffer */
|
||||||
|
tmpbuf[recvlen] = '\0';
|
||||||
|
g_string_append(buffer, tmpbuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (pos = 0; pos < buffer->len; pos++)
|
||||||
|
{
|
||||||
|
if (buffer->str[pos] == 13 || buffer->str[pos] == 10)
|
||||||
|
{
|
||||||
|
/* end of line */
|
||||||
|
buffer->str[pos] = '\0';
|
||||||
|
g_string_assign(output, buffer->str);
|
||||||
|
|
||||||
|
if (buffer->str[pos] == 13 && buffer->str[pos+1] == 10)
|
||||||
|
{
|
||||||
|
/* skip \n too */
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_string_erase(buffer, 0, pos+1);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* EOL wasn't found, wait for more data.. */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
void client_send(char *text)
|
||||||
|
{
|
||||||
|
write(clienth, text, strlen(text));
|
||||||
|
write(clienth, "\r\n", 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void makerand(char *str, int len)
|
||||||
|
{
|
||||||
|
for (; len > 0; len--)
|
||||||
|
*str++ = (rand() % 20)+'A';
|
||||||
|
}
|
||||||
|
|
||||||
|
void makerand2(char *str, int len)
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
gchar c;
|
||||||
|
|
||||||
|
while (len > 0)
|
||||||
|
{
|
||||||
|
c = rand() & 255;
|
||||||
|
if (c != 0 && c != 13 && c != 10)
|
||||||
|
{
|
||||||
|
*str++ = c;
|
||||||
|
len--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
makerand(str, len);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void send_cmd(void)
|
||||||
|
{
|
||||||
|
static gint nicks = 0;
|
||||||
|
GList *tmp;
|
||||||
|
char str[512];
|
||||||
|
int pos;
|
||||||
|
|
||||||
|
/* send msg to every channel */
|
||||||
|
str[511] = '\0';
|
||||||
|
|
||||||
|
for (tmp = g_list_first(channels); tmp != NULL; tmp = tmp->next)
|
||||||
|
{
|
||||||
|
CHANNEL_REC *rec = tmp->data;
|
||||||
|
|
||||||
|
makerand(str, 511);
|
||||||
|
str[0] = ':';
|
||||||
|
str[10] = '!';
|
||||||
|
str[20] = '@';
|
||||||
|
|
||||||
|
switch (rand() % 10)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
/* join */
|
||||||
|
pos = 2+sprintf(str+2, "%d", nicks++); /* don't use same nick twice */
|
||||||
|
str[pos] = '-';
|
||||||
|
str[10] = '\0';
|
||||||
|
g_list_append(rec->nicks, g_strdup(str+1));
|
||||||
|
str[10] = '!';
|
||||||
|
sprintf(str+30, " JOIN :%s", rec->name);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
/* part */
|
||||||
|
if (g_list_length(rec->nicks) > 1 && rand() % 3 == 0)
|
||||||
|
{
|
||||||
|
gchar *nick;
|
||||||
|
|
||||||
|
nick = g_list_nth(rec->nicks, rand()%(g_list_length(rec->nicks)-1)+1)->data;
|
||||||
|
if (rand() % 3 == 0)
|
||||||
|
sprintf(str, ":kicker!some@where KICK %s %s :go away", rec->name, nick);
|
||||||
|
else if (rand() % 3 == 0)
|
||||||
|
sprintf(str, ":%s!dunno@where QUIT %s :i'm outta here", nick, rec->name);
|
||||||
|
else
|
||||||
|
sprintf(str, ":%s!dunno@where PART %s", nick, rec->name);
|
||||||
|
rec->nicks = g_list_remove(rec->nicks, nick);
|
||||||
|
g_free(nick);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
str[0] = '\0';
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
/* nick change */
|
||||||
|
if (g_list_length(rec->nicks) > 1)
|
||||||
|
{
|
||||||
|
gchar *nick;
|
||||||
|
|
||||||
|
nick = g_list_nth(rec->nicks, rand()%(g_list_length(rec->nicks)-1)+1)->data;
|
||||||
|
pos = sprintf(str, ":%s!dunno@where NICK ", nick);
|
||||||
|
str[pos] = '_';
|
||||||
|
str[50] = '\0';
|
||||||
|
rec->nicks = g_list_remove(rec->nicks, nick);
|
||||||
|
rec->nicks = g_list_append(rec->nicks, g_strdup(str+pos));
|
||||||
|
g_free(nick);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
str[0] = '\0';
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
/* topic */
|
||||||
|
pos = 30+sprintf(str+30, " TOPIC %s :", rec->name);
|
||||||
|
str[pos] = 'x';
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
/* mode */
|
||||||
|
sprintf(str+30, " MODE %s :%cnt", rec->name, (rand() & 1) ? '+' : '-');
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
/* notice */
|
||||||
|
pos = 30+sprintf(str+30, " NOTICE %s :", rec->name);
|
||||||
|
str[pos] = 'X';
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
/* nick mode change */
|
||||||
|
if (g_list_length(rec->nicks) > 1)
|
||||||
|
{
|
||||||
|
gchar *nick;
|
||||||
|
|
||||||
|
nick = g_list_nth(rec->nicks, rand()%(g_list_length(rec->nicks)-1)+1)->data;
|
||||||
|
pos = sprintf(str, ":server MODE %s +%c %s", rec->name, rand()&1 ? 'o' : 'v', nick);
|
||||||
|
str[pos] = '_';
|
||||||
|
str[50] = '\0';
|
||||||
|
rec->nicks = g_list_remove(rec->nicks, nick);
|
||||||
|
rec->nicks = g_list_append(rec->nicks, g_strdup(str+pos));
|
||||||
|
g_free(nick);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
str[0] = '\0';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
pos = 30+sprintf(str+30, " PRIVMSG %s :", rec->name);
|
||||||
|
makerand2(str+pos, 511-pos);
|
||||||
|
if (rand() % 4 == 0)
|
||||||
|
{
|
||||||
|
pos += sprintf(str+pos, "\001ACTION ");
|
||||||
|
str[510] = 1;
|
||||||
|
}
|
||||||
|
else if (rand() % 10 == 0)
|
||||||
|
{
|
||||||
|
pos += sprintf(str+pos, "\001VERSION\001");
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
else if (rand() % 2 == 0)
|
||||||
|
{
|
||||||
|
pos += sprintf(str+pos, "%s: ", clientnick);
|
||||||
|
}
|
||||||
|
str[pos] = 'X';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
client_send(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
makerand(str, 511);
|
||||||
|
str[0] = ':';
|
||||||
|
str[10] = '!';
|
||||||
|
str[20] = '@';
|
||||||
|
|
||||||
|
switch (rand() % 11)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
/* join */
|
||||||
|
if (g_list_length(channels) < 20)
|
||||||
|
{
|
||||||
|
CHANNEL_REC *rec;
|
||||||
|
int n, pos;
|
||||||
|
|
||||||
|
n = (rand()%20)+25;
|
||||||
|
pos = sprintf(str, ":%s!%s JOIN :", clientnick, clienthost);
|
||||||
|
str[pos] = '#';
|
||||||
|
str[n] = '\0';
|
||||||
|
|
||||||
|
rec = g_new(CHANNEL_REC, 1);
|
||||||
|
rec->name = g_strdup(str+pos);
|
||||||
|
rec->nicks = g_list_append(NULL, g_strdup(clientnick));
|
||||||
|
|
||||||
|
channels = g_list_append(channels, rec);
|
||||||
|
client_send(str);
|
||||||
|
|
||||||
|
sprintf(str, ":server 353 %s = %s :@%s", clientnick, rec->name, clientnick);
|
||||||
|
client_send(str);
|
||||||
|
sprintf(str, ":server 366 %s %s :End of /NAMES list.", clientnick, rec->name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
str[0] = '\0';
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
/* leave channel (by kick) */
|
||||||
|
if (g_list_length(channels) > 3)
|
||||||
|
{
|
||||||
|
CHANNEL_REC *chan;
|
||||||
|
|
||||||
|
chan = g_list_nth(channels, rand()%g_list_length(channels))->data;
|
||||||
|
if (rand() % 3 != 0)
|
||||||
|
{
|
||||||
|
pos = sprintf(str, ":%s!%s PART %s :", clientnick, clienthost, chan->name);
|
||||||
|
str[pos] = 'x';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
str[0] = ':';
|
||||||
|
sprintf(str+30, " KICK %s %s :byebye", chan->name, clientnick);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_free(chan->name);
|
||||||
|
g_list_foreach(chan->nicks, (GFunc) g_free, NULL); g_list_free(chan->nicks);
|
||||||
|
g_free(chan);
|
||||||
|
channels = g_list_remove(channels, chan);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
str[0] = '\0';
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
/* ctcp version */
|
||||||
|
sprintf(str+30, " PRIVMSG %s :\001VERSION\001", clientnick);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
/* ctcp ping */
|
||||||
|
sprintf(str+30, " PRIVMSG %s :\001PING\001", clientnick);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
/* user mode */
|
||||||
|
sprintf(str+30, " MODE %s :%ciw", clientnick, (rand() & 1) ? '+' : '-');
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
/* msg */
|
||||||
|
pos = 30+sprintf(str+30, " PRIVMSG %s :", clientnick);
|
||||||
|
str[pos] = 'X';
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
/* notice */
|
||||||
|
pos = 30+sprintf(str+30, " NOTICE %s :", clientnick);
|
||||||
|
str[pos] = 'X';
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
/* invite */
|
||||||
|
pos = 30+sprintf(str+30, " INVITE %s", clientnick);
|
||||||
|
str[pos] = 'X';
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
/* error */
|
||||||
|
pos = sprintf(str, ":server ERROR :");
|
||||||
|
str[pos] = 'X';
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
/* wallops */
|
||||||
|
pos = sprintf(str, ":server WALLOPS :");
|
||||||
|
str[pos] = 'X';
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
/* ping */
|
||||||
|
pos = sprintf(str, ":server PING :");
|
||||||
|
str[pos] = 'X';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
client_send(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
void handle_command(char *str)
|
||||||
|
{
|
||||||
|
if (strncmp(str, "NICK ", 5) == 0)
|
||||||
|
{
|
||||||
|
clientnick = g_strdup(str+5); /* got the nick */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
guint gui_timeout_add(guint32 interval, GUITimeoutFunction function, gpointer data)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
static fd_set fdset;
|
||||||
|
struct timeval tv;
|
||||||
|
int serverh, port;
|
||||||
|
IPADDR ip;
|
||||||
|
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
|
if (net_gethostname("::1", &ip) != 0)
|
||||||
|
{
|
||||||
|
printf("net_gethostname()\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if (net_gethostname("127.0.0.1", &ip) != 0)
|
||||||
|
{
|
||||||
|
printf("net_gethostname()\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
srand(0);
|
||||||
|
port = 6660;
|
||||||
|
serverh = net_listen(&ip, &port);
|
||||||
|
if (serverh == -1)
|
||||||
|
{
|
||||||
|
printf("listen()\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
clienth = -1; channels = NULL;
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
FD_ZERO(&fdset);
|
||||||
|
if (clienth != -1) FD_SET(clienth, &fdset);
|
||||||
|
FD_SET(serverh, &fdset);
|
||||||
|
|
||||||
|
tv.tv_sec = 0;
|
||||||
|
tv.tv_usec = FLOOD_TIMEOUT;
|
||||||
|
if (select((serverh > clienth ? serverh : clienth)+1, &fdset, NULL, NULL, &tv) <= 0)
|
||||||
|
{
|
||||||
|
/* nothing happened, bug the client with some commands.. */
|
||||||
|
if (clienth != -1 && clientnick != NULL) send_cmd();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (FD_ISSET(serverh, &fdset))
|
||||||
|
{
|
||||||
|
/* client connecting! */
|
||||||
|
if (clienth != -1)
|
||||||
|
{
|
||||||
|
/* only one client allowed.. */
|
||||||
|
int handle;
|
||||||
|
|
||||||
|
handle = net_accept(serverh, NULL, &port);
|
||||||
|
if (handle != -1)
|
||||||
|
{
|
||||||
|
client_send("Only one client allowed");
|
||||||
|
close(handle);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
IPADDR clientip;
|
||||||
|
|
||||||
|
clienth = net_accept(serverh, &clientip, &port);
|
||||||
|
if (clienth != -1)
|
||||||
|
{
|
||||||
|
clienthost = g_strdup(net_ip2host(&clientip));
|
||||||
|
client_send(":server 001 pla");
|
||||||
|
client_send(":server 002 plapla");
|
||||||
|
client_send(":server 003 plaplapla");
|
||||||
|
client_send(":server 004 connected!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* clients sending something.. */
|
||||||
|
GString *str, *buf;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
str = g_string_new(NULL);
|
||||||
|
buf = g_string_new(NULL);
|
||||||
|
do
|
||||||
|
{
|
||||||
|
ret = read_line(TRUE, clienth, str, buf);
|
||||||
|
if (ret == -1)
|
||||||
|
{
|
||||||
|
/* client disconnected */
|
||||||
|
close(clienth);
|
||||||
|
clienth = -1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (ret == 1) handle_command(str->str);
|
||||||
|
}
|
||||||
|
while (ret == 1);
|
||||||
|
g_string_free(str, TRUE);
|
||||||
|
g_string_free(buf, TRUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
2
src/.cvsignore
Normal file
2
src/.cvsignore
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Makefile
|
||||||
|
Makefile.in
|
17
src/Makefile.am
Normal file
17
src/Makefile.am
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
if HAS_CURSES
|
||||||
|
TEXTUI=gui-text
|
||||||
|
endif
|
||||||
|
|
||||||
|
if BUILD_GNOMEUI
|
||||||
|
GNOMEUI=gui-gnome
|
||||||
|
endif
|
||||||
|
|
||||||
|
noinst_HEADERS = \
|
||||||
|
common.h \
|
||||||
|
common-setup.h \
|
||||||
|
irssi-plugin.h \
|
||||||
|
irssi-plugin-gui.h
|
||||||
|
|
||||||
|
SUBDIRS = irc-base irc-extra ui-common lib-config lib-nongui settings $(GNOMEUI) $(TEXTUI) gui-none
|
||||||
|
|
||||||
|
EXTRA_DIST = signal.doc
|
125
src/common-setup.h
Normal file
125
src/common-setup.h
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
#ifndef __COMMON_SETUP_H
|
||||||
|
#define __COMMON_SETUP_H
|
||||||
|
|
||||||
|
#define DCC_FILE_CREATE_MODE 0644
|
||||||
|
#define LOG_FILE_CREATE_MODE 0644
|
||||||
|
#define CMD_CHAR '/'
|
||||||
|
|
||||||
|
/* How often to check if there's anyone to be unignored in autoignore list */
|
||||||
|
#define AUTOIGNORE_TIMECHECK 10000
|
||||||
|
|
||||||
|
/* How often to check if there's anyone to be unbanned in knockout list */
|
||||||
|
#define KNOCKOUT_TIMECHECK 10000
|
||||||
|
|
||||||
|
/* How often to check users in notify list */
|
||||||
|
#define NOTIFY_TIMECHECK 30000
|
||||||
|
|
||||||
|
/* How often to check for gone status of nick */
|
||||||
|
#define MAX_GONE_REFRESH_TIME 300
|
||||||
|
|
||||||
|
/* Maximum time to wait for more JOINs before sending massjoin signal */
|
||||||
|
#define MAX_MASSJOIN_WAIT 5000
|
||||||
|
|
||||||
|
/* lists */
|
||||||
|
extern GList *aliases, *ignores, *completions, *notifies, *hilights;
|
||||||
|
|
||||||
|
/* look and feel */
|
||||||
|
extern gboolean toggle_show_menubar;
|
||||||
|
extern gboolean toggle_show_toolbar;
|
||||||
|
extern gboolean toggle_show_statusbar;
|
||||||
|
extern gboolean toggle_show_nicklist;
|
||||||
|
extern gboolean toggle_show_timestamps;
|
||||||
|
extern gboolean toggle_hide_text_style;
|
||||||
|
extern gboolean toggle_bell_beeps;
|
||||||
|
extern gboolean toggle_actlist_moves;
|
||||||
|
extern gboolean toggle_privmsg_beeps;
|
||||||
|
|
||||||
|
extern gboolean toggle_use_status_window;
|
||||||
|
extern gboolean toggle_use_msgs_window;
|
||||||
|
extern gboolean toggle_autoraise_msgs_window;
|
||||||
|
extern gboolean toggle_autocreate_query;
|
||||||
|
extern gboolean toggle_notifylist_popups;
|
||||||
|
extern gboolean toggle_use_tabbed_windows;
|
||||||
|
extern gint tab_orientation;
|
||||||
|
|
||||||
|
/* misc */
|
||||||
|
extern gchar *url_www_client;
|
||||||
|
extern gchar *url_ftp_client;
|
||||||
|
extern gchar *url_mail_client;
|
||||||
|
|
||||||
|
extern gchar *ctcp_version_reply;
|
||||||
|
extern gchar *default_quit_message;
|
||||||
|
extern gchar *default_user_mode;
|
||||||
|
|
||||||
|
extern gint max_command_history;
|
||||||
|
extern gint max_textwidget_lines;
|
||||||
|
extern gint rawlog_lines;
|
||||||
|
extern gint block_remove_lines;
|
||||||
|
|
||||||
|
extern gint knockout_time; /* How many seconds to keep /knockouted ban */
|
||||||
|
extern gboolean check_irssi_versions; /* Check if there's new irssi version available */
|
||||||
|
|
||||||
|
/* nick completion */
|
||||||
|
extern gchar *completion_char;
|
||||||
|
extern gboolean completion_disable_auto;
|
||||||
|
extern gint completion_keep_publics;
|
||||||
|
extern gint completion_keep_ownpublics;
|
||||||
|
extern gint completion_keep_privates;
|
||||||
|
|
||||||
|
/* flood protection */
|
||||||
|
extern gint flood_timecheck; /* Flood check timeout */
|
||||||
|
extern gint flood_max_msgs; /* Max msgs in FLOOD_TIMECHECK msecs before considered as flooding */
|
||||||
|
extern gint autoignore_time; /* How many seconds to keep someone autoignored */
|
||||||
|
extern gint ctcp_timecheck; /* CTCP reply send timeout */
|
||||||
|
extern gint max_ctcp_queue; /* Max CTCP reply queue length */
|
||||||
|
extern gint cmd_queue_speed; /* Minimum timeout before sending the next command to server */
|
||||||
|
|
||||||
|
/* dcc */
|
||||||
|
extern gboolean toggle_dcc_autodisplay_dialog;
|
||||||
|
extern gboolean toggle_dcc_autoget;
|
||||||
|
extern gboolean toggle_dcc_autorename;
|
||||||
|
extern gint dcc_max_autoget_size;
|
||||||
|
extern gchar *dcc_download_path;
|
||||||
|
|
||||||
|
extern gboolean toggle_dcc_fast_send;
|
||||||
|
extern gchar *dcc_upload_path;
|
||||||
|
|
||||||
|
extern gboolean toggle_dcc_mirc_ctcp;
|
||||||
|
extern gint dcc_block_size;
|
||||||
|
extern gint dcc_timeout;
|
||||||
|
|
||||||
|
/* servers */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
gchar *server;
|
||||||
|
gchar *ircnet;
|
||||||
|
gchar *password;
|
||||||
|
gint port;
|
||||||
|
gboolean autoconnect;
|
||||||
|
time_t last_connect; /* to avoid reconnecting too fast.. */
|
||||||
|
}
|
||||||
|
SETUP_SERVER_REC;
|
||||||
|
|
||||||
|
/* servers */
|
||||||
|
extern GList *setupservers; /* list of local servers */
|
||||||
|
extern GList *ircnets; /* list of available ircnets */
|
||||||
|
extern gint server_reconnect_time; /* reconnect to server no sooner than n seconds */
|
||||||
|
extern gchar *source_host; /* Our own IP to use */
|
||||||
|
extern gboolean source_host_ok; /* Use source_host_ip .. */
|
||||||
|
extern IPADDR source_host_ip; /* Resolved address */
|
||||||
|
extern gchar *default_nick, *alternate_nick, *user_name, *real_name;
|
||||||
|
extern gboolean toggle_skip_motd;
|
||||||
|
|
||||||
|
/* IRC proxy */
|
||||||
|
extern gboolean toggle_use_ircproxy;
|
||||||
|
extern gchar *proxy_address;
|
||||||
|
extern gint proxy_port;
|
||||||
|
extern gchar *proxy_string;
|
||||||
|
|
||||||
|
/* appearance */
|
||||||
|
extern gboolean toggle_use_zvt;
|
||||||
|
extern gboolean toggle_use_transparency;
|
||||||
|
extern gboolean toggle_shaded_transparency;
|
||||||
|
extern gint panel_max_channels;
|
||||||
|
|
||||||
|
#endif
|
114
src/common.h
Normal file
114
src/common.h
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
#ifndef __COMMON_H
|
||||||
|
#define __COMMON_H
|
||||||
|
|
||||||
|
#define IRSSI_AUTHOR "Timo Sirainen <cras@irccrew.org>"
|
||||||
|
#define IRSSI_WEBSITE "http://xlife.dhs.org/irssi/"
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
# ifdef HAVE_STRING_H
|
||||||
|
#include <string.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_STDLIB_H
|
||||||
|
# include <stdlib.h>
|
||||||
|
#endif
|
||||||
|
#include <errno.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
#include <sys/utsname.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_UNISTD_H
|
||||||
|
# include <unistd.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_DIRENT_H
|
||||||
|
# include <dirent.h>
|
||||||
|
#endif
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_SOCKS_H
|
||||||
|
#include <socks.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <sys/signal.h>
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
#include <gmodule.h>
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
gushort family;
|
||||||
|
#ifdef HAVE_IPV6
|
||||||
|
struct in6_addr addr;
|
||||||
|
#else
|
||||||
|
struct in_addr addr;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
IPADDR;
|
||||||
|
|
||||||
|
#include "lib-config/irssi-config.h"
|
||||||
|
#include "common-setup.h"
|
||||||
|
|
||||||
|
/* GUI library must provide these functions: */
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
GUI_INPUT_READ = 1 << 0,
|
||||||
|
GUI_INPUT_WRITE = 1 << 1,
|
||||||
|
GUI_INPUT_EXCEPTION = 1 << 2
|
||||||
|
} GUIInputCondition;
|
||||||
|
|
||||||
|
typedef void (*GUIInputFunction) (gpointer data, gint handle, GUIInputCondition condition);
|
||||||
|
typedef gint (*GUITimeoutFunction) (gpointer data);
|
||||||
|
|
||||||
|
gint gui_input_add(gint handle, GUIInputCondition condition,
|
||||||
|
GUIInputFunction function, gpointer data);
|
||||||
|
void gui_input_remove(gint tag);
|
||||||
|
|
||||||
|
guint gui_timeout_add(guint32 interval, GUITimeoutFunction function, gpointer data);
|
||||||
|
void gui_timeout_remove(gint tag);
|
||||||
|
|
||||||
|
#ifdef MEM_DEBUG
|
||||||
|
|
||||||
|
void ig_mem_profile(void);
|
||||||
|
|
||||||
|
void ig_set_data(gchar *data);
|
||||||
|
|
||||||
|
gpointer ig_malloc(gint size, gchar *file, gint line);
|
||||||
|
gpointer ig_malloc0(gint size, gchar *file, gint line);
|
||||||
|
gpointer ig_realloc(gpointer mem, gulong size, gchar *file, gint line);
|
||||||
|
gchar *ig_strdup(const char *str, gchar *file, gint line);
|
||||||
|
gchar *ig_strconcat(const char *str, ...);
|
||||||
|
gchar *ig_strdup_printf(const gchar *format, ...) G_GNUC_PRINTF (1, 2);
|
||||||
|
void ig_free(gpointer p);
|
||||||
|
GString *ig_string_new(gchar *str);
|
||||||
|
void ig_string_free(GString *str, gboolean freeit);
|
||||||
|
|
||||||
|
#define g_malloc(a) ig_malloc(a, __FILE__, __LINE__)
|
||||||
|
#define g_malloc0(a) ig_malloc0(a, __FILE__, __LINE__)
|
||||||
|
#define g_realloc(a,b) ig_realloc(a, b, __FILE__, __LINE__)
|
||||||
|
#define g_strdup(a) ig_strdup(a, __FILE__, __LINE__)
|
||||||
|
#define g_strconcat ig_strconcat
|
||||||
|
#define g_strdup_printf ig_strdup_printf
|
||||||
|
#define g_strdup_vprintf ig_strdup_vprintf
|
||||||
|
#define g_free ig_free
|
||||||
|
#define g_string_new ig_string_new
|
||||||
|
#define g_string_free ig_string_free
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
11
src/irssi-plugin-gui.h
Normal file
11
src/irssi-plugin-gui.h
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
/* This contains all the necessary includes for creating GUI widgets to
|
||||||
|
plugins */
|
||||||
|
|
||||||
|
#ifdef HAVE_GTK
|
||||||
|
#include "gui-gnome/irssi.h"
|
||||||
|
#include "gui-gnome/setup-int.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (HAVE_CURSES) || defined (HAVE_SLANG)
|
||||||
|
#include "gui-text/irssi.h"
|
||||||
|
#endif
|
9
src/irssi-plugin.h
Normal file
9
src/irssi-plugin.h
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
/* This contains all the necessary includes for irssi plugins.
|
||||||
|
irc-extra/plugins.h and irc-extra/plugins-commands.h has all the plugin
|
||||||
|
management functions */
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
#include "irc-base/irc-base.h"
|
||||||
|
#include "irc-extra/irc-extra.h"
|
||||||
|
#include "ui-common/ui-common.h"
|
||||||
|
#include "settings/settings.h"
|
178
src/signal.doc
Normal file
178
src/signal.doc
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
IRC base
|
||||||
|
--------
|
||||||
|
|
||||||
|
* Requires to work properly:
|
||||||
|
|
||||||
|
"gui exit", CHANNEL_REC
|
||||||
|
"gui channel open", CHANNEL_REC
|
||||||
|
"send command", gchar *command, SERVER_REC, CHANNEL_REC
|
||||||
|
|
||||||
|
* Provides signals:
|
||||||
|
|
||||||
|
bans.c:
|
||||||
|
|
||||||
|
"ban new", BAN_REC
|
||||||
|
"ban remove", BAN_REC
|
||||||
|
"ban exception new", BAN_REC
|
||||||
|
"ban exception remove", BAN_REC
|
||||||
|
"ban type changed", gchar *bantype
|
||||||
|
|
||||||
|
channels.c:
|
||||||
|
|
||||||
|
"channel created", CHANNEL_REC
|
||||||
|
"channel destroyed", CHANNEL_REC
|
||||||
|
"channel name changed", CHANNEL_REC
|
||||||
|
"channel topic changed", CHANNEL_REC
|
||||||
|
|
||||||
|
"channel query", CHANNEL_REC
|
||||||
|
"channel sync", CHANNEL_REC
|
||||||
|
|
||||||
|
ctcp.c:
|
||||||
|
|
||||||
|
"ctcp msg "<cmd>, gchar *args, SERVER_REC, gchar *nick, gchar *addr, gchar *target
|
||||||
|
"default ctcp msg", gchar *args, SERVER_REC, gchar *nick, gchar *addr, gchar *target
|
||||||
|
"ctcp reply "<cmd>, gchar *args, SERVER_REC, gchar *nick, gchar *addr, gchar *target
|
||||||
|
"default ctcp reply", gchar *args, SERVER_REC, gchar *nick, gchar *addr, gchar *target
|
||||||
|
|
||||||
|
irc.c:
|
||||||
|
|
||||||
|
"send command", gchar *args, SERVER_REC
|
||||||
|
"command "<cmd>, gchar *args, SERVER_REC, CHANNEL_REC
|
||||||
|
"default command", gchar *args, SERVER_REC, CHANNEL_REC
|
||||||
|
|
||||||
|
"server event", gchar *args, SERVER_REC, gchar *sender_nick, gchar *sender_address
|
||||||
|
"event "<cmd>, gchar *args, SERVER_REC, gchar *sender_nick, gchar *sender_address
|
||||||
|
"default event", gchar *args, SERVER_REC, gchar *sender_nick, gchar *sender_address
|
||||||
|
|
||||||
|
modes.c:
|
||||||
|
|
||||||
|
"invitelist new", CHANNEL_REC, gchar *mask
|
||||||
|
"invitelist remove", CHANNEL_REC, gchar *mask
|
||||||
|
|
||||||
|
"channel mode changed", CHANNEL_REC
|
||||||
|
"user mode changed", SERVER_REC
|
||||||
|
"nick mode changed", CHANNEL_REC, NICK_REC
|
||||||
|
|
||||||
|
nicklist.c:
|
||||||
|
|
||||||
|
"nicklist new" CHANNEL_REC, NICK_REC
|
||||||
|
"nicklist remove" CHANNEL_REC, NICK_REC
|
||||||
|
"nicklist changed" CHANNEL_REC, NICK_REC, gchar *oldnick
|
||||||
|
"server nick changed" SERVER_REC
|
||||||
|
"massjoin" CHANNEL_REC, GList of NICK_RECs
|
||||||
|
|
||||||
|
server.c:
|
||||||
|
|
||||||
|
"server connect failed", SERVER_REC
|
||||||
|
"server connected", SERVER_REC
|
||||||
|
"server connecting", SERVER_REC, gulong *ip
|
||||||
|
"server looking", SERVER_REC
|
||||||
|
"server disconnected", SERVER_REC
|
||||||
|
"event connected", SERVER_REC
|
||||||
|
|
||||||
|
signal.c:
|
||||||
|
"signal", gchar *name, ...
|
||||||
|
|
||||||
|
IRC extra
|
||||||
|
---------
|
||||||
|
|
||||||
|
* Requires to work properly:
|
||||||
|
|
||||||
|
"print text stripped", SERVER_REC, gchar *channel, GINT_TO_POINTER(level), gchar *text
|
||||||
|
"plugin add menu", gchar *menuitem, void (*unload_func) (gpointer, PLUGIN_REC), PLUGIN_REC
|
||||||
|
|
||||||
|
* Provides signals:
|
||||||
|
|
||||||
|
dcc.c:
|
||||||
|
|
||||||
|
"dcc ctcp"<cmd>, gchar *args, DCC_REC
|
||||||
|
"default dcc ctcp", gchar *args, DCC_REC
|
||||||
|
"dcc unknown ctcp", gchar *args, gchar *sender, gchar *sendaddr
|
||||||
|
|
||||||
|
"dcc reply"<cmd>, gchar *args, DCC_REC
|
||||||
|
"default dcc reply"<cmd>, gchar *args, DCC_REC
|
||||||
|
"dcc unknown reply", gchar *args, gchar *sender, gchar *sendaddr
|
||||||
|
|
||||||
|
"dcc chat message", DCC_REC, gchar *msg
|
||||||
|
|
||||||
|
"dcc created", DCC_REC
|
||||||
|
"dcc destroyed", DCC_REC
|
||||||
|
"dcc connected", DCC_REC
|
||||||
|
"dcc rejecting", DCC_REC
|
||||||
|
"dcc closed", DCC_REC
|
||||||
|
"dcc chat message", DCC_REC, gchar *msg
|
||||||
|
"dcc transfer update", DCC_REC
|
||||||
|
"dcc request", DCC_REC
|
||||||
|
"dcc get receive", DCC_REC
|
||||||
|
"dcc error connect", DCC_REC
|
||||||
|
"dcc error file create", DCC_REC, gchar *filename
|
||||||
|
"dcc error file not found", gchar *nick, gchar *filename
|
||||||
|
"dcc error get not found", gchar *nick
|
||||||
|
"dcc error send exists", gchar *nick, gchar *filename
|
||||||
|
"dcc error unknown type", gchar *type
|
||||||
|
"dcc error close not found", gchar *type, gchar *nick, gchar *filename
|
||||||
|
|
||||||
|
flood.c:
|
||||||
|
|
||||||
|
"flood", SERVER_REC, gchar *nick, gchar *host, gchar *level, gchar *target
|
||||||
|
|
||||||
|
ignore.c:
|
||||||
|
|
||||||
|
"autoignore new", SERVER_REC, AUTOIGNORE_REC
|
||||||
|
"autoignore remove", SERVER_REC, AUTOIGNORE_REC
|
||||||
|
"ignore new", LIST_REC
|
||||||
|
"ignore change", LIST_REC
|
||||||
|
"ignore remove", LIST_REC
|
||||||
|
|
||||||
|
log.c:
|
||||||
|
|
||||||
|
"log created", LOG_REC
|
||||||
|
"log destroyed", LOG_REC
|
||||||
|
"log opened", LOG_REC
|
||||||
|
"log closed", LOG_REC
|
||||||
|
"log written", LOG_REC, gchar *line
|
||||||
|
"log item created", LOG_REC, LOG_ITEM_REC
|
||||||
|
"log item destroyed", LOG_REC, LOG_ITEM_REC
|
||||||
|
|
||||||
|
notifylist.c:
|
||||||
|
|
||||||
|
"notifylist new", LIST_REC
|
||||||
|
"notifylist remove", LIST_REC
|
||||||
|
"notifylist joined", SERVER_REC, gchar *nick, gchar *username, gchar *host, gchar *realname
|
||||||
|
"notifylist left", SERVER_REC, gchar *nick
|
||||||
|
|
||||||
|
plugins.c:
|
||||||
|
|
||||||
|
"plugin created", PLUGIN_REC
|
||||||
|
"plugin destroyed", PLUGIN_REC
|
||||||
|
"plugin cant load", gchar *name
|
||||||
|
"plugin already loaded", gchar *name
|
||||||
|
"plugin not loaded", gchar *name
|
||||||
|
|
||||||
|
UI common
|
||||||
|
---------
|
||||||
|
|
||||||
|
* Requires to work properly:
|
||||||
|
|
||||||
|
"gui print text", CHANNEL_REC, GINT_TO_POINTER fg, bg, flags, gchar *text
|
||||||
|
"gui window goto", GINT_TO_POINTER(number)
|
||||||
|
|
||||||
|
( "print text finished", CHANNEL_REC ) - can be used to determine when
|
||||||
|
all "gui print text"s are sent
|
||||||
|
|
||||||
|
* Provides signals:
|
||||||
|
|
||||||
|
ui-printtext.c:
|
||||||
|
|
||||||
|
"print text", SERVER_REC, gchar *channel, GINT_TO_POINTER(level), gchar *text
|
||||||
|
"print text stripped", SERVER_REC, gchar *channel, GINT_TO_POINTER(level), gchar *text
|
||||||
|
|
||||||
|
ui-themes.c:
|
||||||
|
|
||||||
|
"theme created", THEME_REC
|
||||||
|
"theme destroyed", THEME_REC
|
||||||
|
|
||||||
|
ui-windows.c:
|
||||||
|
|
||||||
|
"window created", WINDOW_REC
|
||||||
|
"window destroyed", WINDOW_REC
|
0
stamp.h.in
Normal file
0
stamp.h.in
Normal file
2672
window-views-patch.diff
Normal file
2672
window-views-patch.diff
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user