diff options
author | Holger Paradies <retabell@gmx.de> | 2013-12-24 10:13:21 +0100 |
---|---|---|
committer | Holger Paradies <retabell@gmx.de> | 2014-01-04 15:58:52 +0100 |
commit | 0e66b833868a6a8530045db9002c1845f242e4ac (patch) | |
tree | e4905d91781675c260cad0011db4358f163861cb /kanotix-irc/kanotix-irc | |
parent | 432430a8d20a6a9845626e2ab475194a322a73dd (diff) | |
download | kanotix-packages-0e66b833868a6a8530045db9002c1845f242e4ac.zip kanotix-packages-0e66b833868a6a8530045db9002c1845f242e4ac.tar.gz |
kanotix-irc-1.0.0
Diffstat (limited to 'kanotix-irc/kanotix-irc')
-rwxr-xr-x | kanotix-irc/kanotix-irc | 473 |
1 files changed, 473 insertions, 0 deletions
diff --git a/kanotix-irc/kanotix-irc b/kanotix-irc/kanotix-irc new file mode 100755 index 0000000..a3afd32 --- /dev/null +++ b/kanotix-irc/kanotix-irc @@ -0,0 +1,473 @@ +#!/bin/sh +# Copyright (C) 2003 Jörg Schirottke <master@kanotix.com> +# Copyright (C) 2005 Michiel Lieuwe de Boer +# Copyright (C) 2005-2006 Stefan Lippers-Hollmann <s.l-h@gmx.de> + +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# override tool behaviour through distro-defaults +FLL_IRC_SERVER="irc.freenode.net" +FLL_IRC_PORT="6667" +FLL_IRC_CHANNEL="#kanotix" +FLL_DISTRO_NAME="Kanotix" +[ -r /etc/default/distro ] && . /etc/default/distro + +# define user settings +NICK="Web-${FLL_DISTRO_NAME}$(mawk 'BEGIN{print int(1000 * rand())}')" +FALLBACK_USER="$(getent passwd 1000 | cut -d\: -f1)" +XTERM_OPT="-e" + + +# determine system status +DIALOG="$(which dialog)" || DIALOG="/usr/bin/dialog" +KDIALOG="$(which kdialog)" || KDIALOG="/usr/bin/kdialog" +XDIALOG="$(which Xdialog)" || XDIALOG="/usr/bin/Xdialog" +ZENITY="$(which zenity)" || ZENITY="/usr/bin/zenity" +MKTEMP="$(which mktemp)" || XTERMINAL="/bin/mktemp" +SU="$(which su)" || SU="/bin/su" +XTERMINAL="$(which x-terminal-emulator)" || XTERMINAL="/usr/bin/x-terminal-emulator" + +BITCHX="$(which bitchx)" || BITCHX="/usr/bin/bitchx" +IRSSI="$(which irssi)" || IRSSI="/usr/bin/irssi" +KSIRC="$(which ksirc)" || KSIRC="/usr/bin/ksirc" +KONVERSATION="$(which konversation)" || KONVERSATION="/usr/bin/konversation" +WEECHAT="$(which weechat-curses)" || WEECHAT="/usr/bin/weechat-curses" +XCHAT="$(which xchat)" || XCHAT="/usr/bin/xchat" + +# internal functions +inputbox() +{ + # inputbox title text width height [init] + TITLE="$1" + TEXT="$2" + WIDTH="$3" + HEIGHT="$4" + INIT="$5" + + if [ -n "$DISPLAY" ]; then + if [ -x "$KDIALOG" ]; then + "$KDIALOG" --title "$TITLE" --inputbox "$TEXT" "$INIT" + elif [ -x "$XDIALOG" ]; then + "$XDIALOG" --title "$TITLE" --inputbox "$TEXT" $HEIGHT $WIDTH "$INIT" + elif [ -x "$ZENITY" ]; then + "$ZENITY" --title="$TITLE" --entry --text="$TEXT" --entry-text="$INIT" + fi + else + "$DIALOG" --stdout --title "$TITLE" --inputbox "$TEXT" $HEIGHT $WIDTH "$INIT" + fi +} + +kanotix_irssi() +{ + TERM_TYPE="utf-8" + #TERM_TYPE="8bit" + IRSSICFG="$($MKTEMP -dp /tmp/ .irssi-XXXXXXXXXX)" + + CTCPS=0 + if [ -e /etc/kanotix-version ]; then + QUITMSG="$(< /etc/kanotix-version) | http://www.kanotix.com" + else + QUITMSG="http://www.kanotix.com" + fi + + cat <<_EOF_ >"$IRSSICFG/config" +servers = ( + { + address = "$FLL_IRC_SERVER"; + chatnet = "freenode"; + port = "$FLL_IRC_PORT"; + autoconnect = "yes"; +_EOF_ + # if ssl port configured then add ssl options + if [ $FLL_IRC_PORT = "7000" ]; then + cat <<_EOF_ >>"$IRSSICFG/config" + use_ssl = "yes"; + ssl_verify = "yes"; + ssl_capath = "/etc/ssl/certs"; +_EOF_ + fi + cat <<_EOF_ >>"$IRSSICFG/config" + } +); + +chatnets = { + freenode = { + type = "IRC"; + max_kicks = "4"; + max_modes = "4"; + max_msgs = "1"; + max_whois = "1"; + }; +}; + +channels = ( + { name = "#kanotix"; chatnet = "freenode"; autojoin = "yes"; } +); +_EOF_ + + # See also special kanotix aliases in here, like "/IBS", "/IBV", "/IB", "/GFX", "/SND", and "/X" + cat <<"_EOF_" >>"$IRSSICFG/config" +aliases = { + J = "join"; + WJOIN = "join -window"; + WQUERY = "query -window"; + LEAVE = "part"; + BYE = "quit"; + EXIT = "quit"; + SIGNOFF = "quit"; + DESCRIBE = "action"; + DATE = "time"; + HOST = "userhost"; + LAST = "lastlog"; + SAY = "msg *"; + WI = "whois"; + WII = "whois $0 $0"; + WW = "whowas"; + W = "who"; + N = "names"; + M = "msg"; + T = "topic"; + C = "clear"; + CL = "clear"; + K = "kick"; + KB = "kickban"; + KN = "knockout"; + BANS = "ban"; + B = "ban"; + MUB = "unban *"; + UB = "unban"; + IG = "ignore"; + UNIG = "unignore"; + SB = "scrollback"; + UMODE = "mode $N"; + WC = "window close"; + WN = "window new hide"; + SV = "say Irssi $J ($V) - http://irssi.org/"; + GOTO = "sb goto"; + CHAT = "dcc chat"; + RUN = "SCRIPT LOAD"; + UPTIME = "eval exec - expr `date +%s` - \\$F | awk '{print \"Irssi uptime: \"int(\\\\\\$1/3600/24)\"d \"int(\\\\\\$1/3600%24)\"h \"int(\\\\\\$1/60%60)\"m \"int(\\\\\\$1%60)\"s\" }'"; + CALC = "exec - if which bc &>/dev/null\\; then echo '$*' | bc | awk '{print \"$*=\"$$1}'\\; else echo bc was not found\\; fi"; + SBAR = "STATUSBAR"; + INVITELIST = "mode $C +I"; + Q = "QUERY"; + QUIT = "foreach window /part;/quit"; + INFOBASH = "/exec -o infobash $*"; + X = "QUIT"; +}; + +statusbar = { + # formats: + # when using {templates}, the template is shown only if it's argument isn't + # empty unless no argument is given. for example {sb} is printed always, + # but {sb $T} is printed only if $T isn't empty. + + items = { + # start/end text in statusbars + barstart = "{sbstart}"; + barend = "{sbend}"; + + topicbarstart = "{topicsbstart}"; + topicbarend = "{topicsbend}"; + + # treated "normally", you could change the time/user name to whatever + time = "{sb $Z}"; + user = "{sb {sbnickmode $cumode}$N{sbmode $usermode}{sbaway $A}}"; + + # treated specially .. window is printed with non-empty windows, + # window_empty is printed with empty windows + window = "{sb $winref:$itemname{sbmode $M}}"; + window_empty = "{sb $winref{sbservertag $tag}}"; + prompt = "{prompt $[.15]itemname}"; + prompt_empty = "{prompt $winname}"; + topic = " $topic"; + topic_empty = " Irssi v$J - http://irssi.org/help/"; + + # all of these treated specially, they're only displayed when needed + lag = "{sb Lag: $0-}"; + act = "{sb Act: $0-}"; + more = "-- more --"; + }; + + # there's two type of statusbars. root statusbars are either at the top + # of the screen or at the bottom of the screen. window statusbars are at + # the top/bottom of each split window in screen. + default = { + # the "default statusbar" to be displayed at the bottom of the window. + # contains all the normal items. + window = { + disabled = "no"; + + # window, root + type = "window"; + # top, bottom + placement = "bottom"; + # number + position = "1"; + # active, inactive, always + visible = "active"; + + # list of items in statusbar in the display order + items = { + barstart = { priority = "100"; }; + time = { }; + user = { }; + window = { }; + window_empty = { }; + lag = { priority = "-1"; }; + act = { priority = "10"; }; + more = { priority = "-1"; alignment = "right"; }; + barend = { priority = "100"; alignment = "right"; }; + }; + }; + + # statusbar to use in inactive split windows + window_inact = { + type = "window"; + placement = "bottom"; + position = "1"; + visible = "inactive"; + items = { + barstart = { priority = "100"; }; + window = { }; + window_empty = { }; + more = { priority = "-1"; alignment = "right"; }; + barend = { priority = "100"; alignment = "right"; }; + }; + }; + + # we treat input line as yet another statusbar :) It's possible to + # add other items before or after the input line item. + prompt = { + type = "root"; + placement = "bottom"; + # we want to be at the bottom always + position = "100"; + visible = "always"; + items = { + prompt = { priority = "-1"; }; + prompt_empty = { priority = "-1"; }; + # treated specially, this is the real input line. + input = { priority = "10"; }; + }; + }; + + # topicbar + topic = { + type = "root"; + placement = "top"; + position = "1"; + visible = "always"; + items = { + topicbarstart = { priority = "100"; }; + topic = { }; + topic_empty = { }; + topicbarend = { priority = "100"; alignment = "right"; }; + }; + }; + }; +}; +_EOF_ + + cat <<_EOF_ >>"$IRSSICFG/config" +settings = { + core = { + real_name = "Kanotix user"; + user_name = "kanotix"; + nick = "$NICK"; + quit_message = "$QUITMSG"; + }; + + "irc/core" = { part_message = "$QUITMSG"; }; + + "irc/dcc" = { + dcc_upload_path = "/tmp"; + dcc_download_path = "/tmp"; + dcc_autoget = "no"; + dcc_autochat_masks = "*"; + dcc_autoget_masks = "= *"; + }; + "fe-text" = { term_type = "$TERM_TYPE"; }; + "fe-common/core" = { completion_char = ","; }; + +}; +logs = { }; + +windows = { + 2 = { + items = ( + { + type = "CHANNEL"; + chat_type = "IRC"; + name = "$FLL_IRC_CHANNEL"; + tag = "freenode"; + } + ); + }; + 1 = { immortal = "yes"; name = "(status)"; level = "ALL"; }; +}; +mainwindows = { 2 = { first_line = "1"; lines = "47"; }; }; +_EOF_ + + [ "$CTCPS" -eq 0 ] && echo 'ignores = ( { level = "CTCPS"; } );' >>"$IRSSICFG/config" + + "$IRSSI" --home="$IRSSICFG" + RETC="$?" + rm -rf "$IRSSICFG" + [ "$RETC" -ne 0 ] && return 127 || exit 0 +} + +kanotix_xchat() +{ + XCHATCFG="$($MKTEMP -dp /tmp/ .xchat2-XXXXXXXXXX)" + + cat <<_EOF_ >"$XCHATCFG/servlist_.conf" +N=FreeNode +J=#kanotix +E=UTF-8 (Unicode) +F=63 +_EOF_ + # if ssl port configured then add ssl options + if [ $FLL_IRC_PORT = "7000" ]; then + cat <<_EOF_ >>"$XCHATCFG/servlist_.conf" +D=1 +_EOF_ + else + cat <<_EOF_ >>"$XCHATCFG/servlist_.conf" +D=0 +_EOF_ + fi + cat <<_EOF_ >>"$XCHATCFG/servlist_.conf" +S=irc.freenode.net/$FLL_IRC_PORT +S=irc.freenode.net/+7000 +_EOF_ + + cat <<_EOF_ >"$XCHATCFG/xchat.conf" +gui_join_dialog = 0 +gui_slist_select = 0 +gui_slist_skip = 1 +irc_nick1 = $NICK +irc_nick2 = ${NICK}_ +irc_nick3 = ${NICK}__ +_EOF_ + + cat <<_EOF_ >"$XCHATCFG/commands.conf" +NAME cmd +CMD exec -o &2 +_EOF_ + + "$XCHAT" -d "$XCHATCFG" + RETC="$?" + rm -rf "$XCHATCFG" + [ "$RETC" -ne 0 ] && return 127 || exit 0 +} + +############################################################################## +# int main(void); # +############################################################################## + +# yes, this stuff is elementary +if [ -z "$DISPLAY" ]; then + for i in "$DIALOG" "$SU"; do + if [ ! -x "$i" ]; then + echo "$i: missing, terminate abnormally" + exit 999 + fi + done +else + for i in "$DIALOG" "$XTERMINAL" "$SU"; do + if [ ! -x "$i" ]; then + echo "$i: missing, terminate abnormally" + exit 998 + fi + done + if ! [ -x "$XDIALOG" -o -x "$KDIALOG" -o -x "$ZENITY" ]; then + echo "$XDIALOG, $KDIALOG and $ZENITY are missing, terminate abnormally" + exit 998 + fi +fi + +if [ "$1" = "--tty" ]; then + DISPLAY="" +fi + +# are you insane? +if [ "`id -u`" = "0" ]; then + echo "ROOOOOOOOOOOOT has landed!" + echo "" + echo "Don't ever call any IRC client as root" + + if [ -z "$FALLBACK" ]; then + # yes, you deserve it - and I'm to lazy to enhance kanotix-su's features ;) + echo "Employ fallback and start IRC as $FALLBACK_USER." + if [ -n "$DISPLAY" ]; then + exec $XTERMINAL $XTERM_OPT $SU -c "$0 --tty" "$FALLBACK_USER" + else + exec $SU -c "$0 --tty" "$FALLBACK_USER" + fi + else + exit 996 + fi + + if [ "`id -u`" = "0" ]; then + echo "you had your chance, I'm not going to start any IRC client as root" + exit 997 + fi +fi + +# choose your nick +NICK=$(inputbox "${FLL_DISTRO_NAME} IRC Chat" "Choose your nick" 50 10 "$NICK") || exit 0 + +# try to start your irc client +if [ -z "$DISPLAY" ]; then + # tty + if [ -x "$IRSSI" ]; then + kanotix_irssi + exit "$?" + fi + + [ -x "$WEECHAT" ] && \ + exec $WEECHAT "irc://$NICK@$FLL_IRC_SERVER:$FLL_IRC_PORT/$FLL_IRC_CHANNEL" + + [ -x "$BITCHX" ] && \ + exec "$BITCHX" -c "$FLL_IRC_CHANNEL" -n "$NICK" +else + # X11 + if [ -x "$KONVERSATION" ]; then + if [ $FLL_IRC_PORT = "7000" ]; then + exec "$KONVERSATION" --server "$FLL_IRC_SERVER" --ssl --port "$FLL_IRC_PORT" --channel "$FLL_IRC_CHANNEL" --nick "$NICK" + else + exec "$KONVERSATION" --server "$FLL_IRC_SERVER" --port "$FLL_IRC_PORT" --channel "$FLL_IRC_CHANNEL" --nick "$NICK" + fi + fi + + [ -x "$KSIRC" ] && \ + exec "$KSIRC" --server "$FLL_IRC_SERVER" --channel "$FLL_IRC_CHANNEL" --nick "$NICK" + + if [ -x "$XCHAT" ]; then + kanotix_xchat + exit "$?" + fi + + # nasty fallback, but well - it works ;) + exec $XTERMINAL $XTERM_OPT $0 --tty +fi + +# Oops... +echo "ERROR: failed to start any suitable IRC Client" +for i in "$DIALOG" "$XDIALOG" "$BITCHX" "$IRSSI" "$KSIRC" "$KONVERSATION" "$WEECHAT" "$XCHAT"; do + if [ -x "$i" ]; then + echo "$i: found." + else + echo "$i: NOT found." + fi +done + |