Какво е irssi
irssi е конзолен IRC клиент за UNIX базирани операционни системи, освен това поддържа и SILC и ICB протоколи чрез плъгини.
Някои от основните функции на клиента:
-
Автоматично логване
-
Форматиране и теми
-
Разширяване чрез плъгини
-
Настройваеми клавишни комбинации
-
Perl интерфейс за скриптове
-
[TAB] довършване на команди
-
и други
Инсталиране
Ако използвате дебиан базирана дистрибуция е много вероятно да намерите irssi в хранилищата с пакети и инсталацията би била доста бърза и лесна:
sudo apt-get install irssi
в случай обаче, че нямате приложението в хранилищата, можете да си го добавите като отворите sources.list и прибавите в края следното:
# Sources for the irssi IRC client deb http://www.davidpashley.com/debian/irssi/ ./
За други дистрибуции можете да погледнете в секцията download на официалната страница на irssi: http://www.irssi.org/download#binaries
Инсталиране на плъгини и теми
Пъгините за irssi са обикновени perl скриптове, които можете да намерите на официялната страница. Тъй като са много и наистина не си заслужава да влизам в подробности, кой и за какво и как да го използвате. Ще ви покажа обаче как първо да си ги инсталирате и съответно да настроите за автоматично зареждане. Тъй като на официалната страница няма да намерите скриптове за музикални плейъри като Rhythmbox или Exaile ще добавя изходния код и на двата в края на тази секция.
Инсталиране на скрипт
Създайте директория ~/.irssi/scripts и още една поддиректория ~/.irssi/scripts/autorun можете да направите това с една команда:
mkdir ~/.irssi/scripts/autorun
След което просто записвате желания файл в ~/.irssi/scripts и в приложението изпълнявате следната команда:
/script load име_на_скрипта.plразбира се, за да спрете някой скрипт командата ще бъде:
/script unload име_на_скрипта.plЗа да направите желаните скриптове да се зареждат със стартирането на клиента просто трябва да ги копирате в създадената по-рано директория ~/.irssi/scripts/autorun
Скрипт за Rhythmbox
Просто създайте файл rhythm.pl в директорията за скриптове със следното съдържание:
#!/usr/bin/perl -wBEGIN{
use vars '$hook','$info';
eval q {
use Irssi;
};
$hook = !!$@;
}sub np{$info = `rhythmbox-client --print-playing-format %ta\\ -\\ %tt\\ -\\ "(%te/%td)"`;
chop $info;
Irssi::active_win->command("/me is now playing: ".$info);
return 1;
}if ($hook){
rb();
}else{
Irssi::command_bind('np', 'np');
}
съответно командата за известяване на песента, която слушате в момента ще бъде np. Скрипта можете да го разширите разбира се като използвате опциите на rhythmbox-client добавяйки различни команди (--next, --prev, --stop, --play и т.н.).
Скрипт за Exaile
Създайте скрипт exaile.pl във директорията със скриптове и въведете следното съдържание:
#!/usr/bin/perluse Net::DBus;
use strict;
use Irssi;
use vars qw($VERSION %IRSSI);
$VERSION = "1.0";
%IRSSI = (
authors => "Adam Olsen",
contact => "arolsen\@gmail.com",
name => "Exaile interface script",
description => "Prints what you're playing to an irssi channel",
license => "Public domain"
);
sub test_dbus{my $service = shift;
my $bus = Net::DBus->session;
my $obj = $bus->get_service("org.freedesktop.DBus");
my $iface = $obj->get_object("/org/freedesktop/DBus",
"org.freedesktop.DBus");
foreach my $item( @{$iface->ListNames()} )
{if( $item eq $service )
{return 1;
}}return 0;
}sub print_info{my($data, $server, $witem) = @_;
my $bus = Net::DBus->session;
if(!&test_dbus("org.exaile.DBusInterface"))
{print "Could not see Exaile in dbus.";
return;
}my $obj = $bus->get_service("org.exaile.DBusInterface");
my $iface = $obj->get_object("/DBusInterfaceObject",
"org.exaile.DBusInterface");
my $pos = $iface->current_position;
if(!$pos)
{print "Not playing anything";
return;
}$pos = int($pos);
my $song = $iface->get_title;
my $artist = $iface->get_artist;
my $length = $iface->get_length;
if($witem && $witem->{type} eq 'CHANNEL')
{$witem->command("ACTION " . $witem->{name} .
" is playing $song by $artist [$length $pos\%]");
}}Irssi::command_bind("exaile", 'print_info');
print "Exaile script loaded.";
Командата за изпълнение на скрипта е exaile, но спокойно можете да я замените с Irssi::command_bind(“mp3”, ‘print_info’); за да използвате по-крактка команда – mp3.
Инсталиране на теми
Теми можете да изтеглите от themes страницата в официалната страница на клиента. Това са обикновени .theme файлове, които просто записвате в главната директория ~/.irssi/.
За да заредите желаната тема, просто в клиента изпълнете командата:
/set theme име_на_темата
Ако искате темата да ви бъде запазена и за следващото включване на irssi просто изпълнете командата:
/saveТази команда можете да използвате за записване на всички въведени от вас настройки през клиента (без да сте редактирали конфигурационния файл ~/.irssi/config.
Настройки на клиента
Настройките се записват по принцип в конфигурационен файл ~/.irssi/config, който можете да редактирате директно от клиента. Разбира се първото е по-лесно от второто, но за по-подробни обяснения ще трябва да прочетете документацията на irssi
За да не навлизам в излишни подробности ще представя най-използваните:
-
Добавяне на сървър за автоматично свързване при стартиране на клиента:
/SERVER ADD -auto -network FreeNode irc.freenode.net 6667
Където опцията -auto е за автоматично свързване, опцията -network определя раздел, в който да запише адреса на сървъра.
-
Добавяне на канал за автоматично влизане след свързване с определен сървър:
[bash]/CHANNEL ADD -auto -network #ubuntu-bg FreeNode[/bash] -
Маркиране на вашия nickname при споменаването му в канал:
[bash]/HIGHLIGHT вашия_ник_или_дума[/bash] -
Показване на няколко прозореца в един (split) – за целта просто можете да използвате следните команди:
/WINDOW SHOW 1 #показва първия прозорец (status), можете 1 да замените с друг цифра за показване на друг прозорец /WINDOW HIDE 1 #скрива пръвия прозорец (status) /Window CLOSE #затваря прозореца, в който се намирате, можете да добавите и номера на прозореца, който искате да затворите
-
Автоматична автентикация при влизане в мрежа:
/NETWORK ADD -autosendcmd "/^msg NickServ IDENTIFY password;wait 2000" freenode
На мястото на password въведете своята парола. При влизане стартиране на клиента и след свързане с мрежата, клиента ще изпрати пароалта за вашия ник до сървъра, но няма да бъде показвана в клиента и по този начин ако някой седи до вас няма да види паролата ви. Параметърът wait е важен, тъй като irssi ще изчака да се свържете преди да изпрати паролата, увеличете стойността, в случай, че се свързвате по-бавно.
Полезни клавишни комбинации
-
Смяна на активния прозорец. Комбинациите са няколко и работата им зависи от конфигурацията на вашия терминал:
-
Ctrl+n,Ctrl+p– сменя към следващия, сътоветно предишния прозорец -
Alt+1– прескача към първия прозорец, цифрата можете да замените с номера на желания от вас прозорец
-
Page Up и Page Down, но не функционират при всички терминали.


(2гласа, средно: 4.50 от общо 5)
2 Коментара
@admin,статията е много добра (y).
Може евентуално само да добавиш и следното скриптче за MOC:
[perl]####################################################################
#!/usr/bin/perl
use strict;
use Irssi;
use vars qw($VERSION %IRSSI);
$VERSION="0.2.2";
%IRSSI = (
authors => "#hack.se",
name => "iMOCP",
description => "iMOCP makes it possible to control mocp via Irssi. Use the /mocp command. See \"/mocp help\" for documentation",
);
#Print out the load status to the status list
Irssi::print("* $IRSSI{name} $VERSION successfully loaded!\n* Author: $IRSSI{authors}\n* $IRSSI{description}\n");
#########
# DOCUMENTATION
#########
#
# iMOCP is a script that make Irssi able to talk with MOCP. Put the script in ~/.irssi/scripts or
# ~/.irssi/scripts/autorun to make it autoload, when you start Irssi. If you dosen’t use the autorun folder
# then you have to load iMOCP with this command:
#
# /script load imocp.pl
#
# iMOCP commands:
# /mocp play - Play track
# /mocp pause - Pause track
# /mocp p - Toggle between play and pause
# /mocp next - Play next track
# /mocp n
# /mocp prev - Play previous track
# /mocp b
# /mocp info - Display track information i status window
# /mocp i
# /mocp npf - Print now playing filename to channel.
# /mocp np - Print current track title to
# chat window. This only supports
# id3-tag yet.
#
#########
#########
# CHANGELOG
#########
#
# 0.2.2:
# * Play / pause bug fixed thanks Curium for bugreport!
#
# 0.2.1:
# * Fixed bug that caused iMOCP to crash.
# * Added /mocp help, command to display all functions
# * Created a changelog
#
#
# 0.2:
# * Added more bindings to mocp.
# * Fixed stop-play problem
# * Added support for toggle between play and pause
#
########
# Display help
sub mocp_help {
Irssi::print("iMOCP commands:");
Irssi::print("/mocp play – Play track");
Irssi::print("/mocp pause – Pause track");
Irssi::print("/mocp p – Toggle between play and pause");
Irssi::print("/mocp next – Next track");
Irssi::print("/mocp n – Next track");
Irssi::print("/mocp prev – Previous track");
Irssi::print("/mocp b – Previous track");
Irssi::print("/mocp np – Print out current track in channel, title by ID3 tag");
Irssi::print("/mocp npf – Print out current track in channel, filename");
Irssi::print("/mocp info – Information about the current track");
Irssi::print("/mocp i – Information about the current track");
Irssi::print("/mocp help – Display this help");
}
# Fetch title
sub mocp_np {
my ($data, $server, $item) = @_;
my $info=`mocp -i`;
my($title) = $info =~ /^Title: (.*?)\n/ms;
if ($title == "") {
my($title) = $info =~ /^File: (.*?)\n/ms;
}
# These are the text’s that should be shown before and after the filename in the output
my $msg_first = ‘Music_On_Console playing:’;
my $msg_last = ”;
if ($item && ($item->{type} eq "CHANNEL" || $item->{type} eq "QUERY")) {
$item->command("MSG ".$item->{name}." $msg_first\’$title\’$msg_last");
} else {
Irssi::print("Hey, c’mon idiot! You’re not in an channel!");
}
}
# Fetch now playing file
sub mocp_npf {
my ($data, $server, $item) = @_;
my $info=`mocp -i`;
my($title) = $info =~ /^File: (.*?)\n/ms;
my @arr = split(‘/’,$title);
# These are the text’s that should be shown before and after the filename in the output
my $msg_first = ‘np: ‘;
my $msg_last = ‘ – moc 2.4.0′;
if ($item && ($item->{type} eq "CHANNEL" || $item->{type} eq "QUERY")) {
$item->command("MSG ".$item->{name}." $msg_first\’@arr[scalar(@arr) - 1]\’$msg_last");
} else {
Irssi::print("Hey, c’mon idiot! You’re not in an channel!");
}
}
# Switch to the next song
sub mocp_next {
my ($data, $server, $item) = @_;
my $next=`mocp -f`;
Irssi::print("iMOCP: Switching to next song");
}
# Switch to prev song
sub mocp_prev {
my ($data, $server, $item) = @_;
my $next=`mocp -r`;
Irssi::print("iMOCP: Switching to previous song");
}
# Fetch song info
sub mocp_info {
my ($data, $server, $item) = @_;
my $info=`mocp -i`;
Irssi:print("iMOCP:\n*****\n".$info."\n*****");
}
# Play or pause the music
sub mocp_play_pause {
my ($data, $server, $item) = @_;
my $next=`mocp -G`;
Irssi::print("iMOCP: Play/pause");
}
# Stop the music
#sub mocp_stop {
# my ($data, $server, $item) = @_;
#
# my $next=`mocp -s`;
# Irssi::print("iMOCP: Stop");
#}
# This is used to bind the mocp command the the fetch function
Irssi::command_bind ‘mocp’ => sub {
my ( $data, $server, $item ) = @_;
$data =~ s/\s+$//g;
Irssi::command_runsub (‘mocp’, $data, $server, $item ) ;
};
# Handle subactions
Irssi::signal_add_first ‘default command mocp’ => sub {
# If unknown subcommand
Irssi::print("iMOCP: Unknown command, \"/mocp help\" might give you a clue!");
};
# Bindings
Irssi::command_bind(‘mocp np’, ‘mocp_np’);
Irssi::command_bind(‘mocp npf’, ‘mocp_npf’);
Irssi::command_bind(‘mocp next’, ‘mocp_next’);
Irssi::command_bind(‘mocp n’, ‘mocp_next’);
Irssi::command_bind(‘mocp prev’, ‘mocp_prev’);
Irssi::command_bind(‘mocp b’, ‘mocp_prev’);
Irssi::command_bind(‘mocp play’, ‘mocp_play_pause’);
Irssi::command_bind(‘mocp p’, ‘mocp_play_pause’);
Irssi::command_bind(‘mocp pause’, ‘mocp_play_pause’);
Irssi::command_bind(‘mocp info’, ‘mocp_info’);
Irssi::command_bind(‘mocp i’, ‘mocp_info’);
Irssi::command_bind(‘mocp help’, ‘mocp_help’);
####################################################################[/perl]
Именуваме скрипта примерно “imocp.pl”
Ето и едно скриптче, което за съжаление никъде не намерих и трябваше сам да направя. Това ще покаже актуалната песен свиреща в Banshee:
[perl]#!/usr/bin/perl -w
BEGIN{
use vars ‘$hook’,'$info’;
eval q {
use Irssi;
};
$hook = !!$@;
}
sub bp
{
$artist_info = `banshee –query-artist`;
$title_info = `banshee –query-title`;;
$info = substr($artist_info, 6, -2) . " – " . substr($title_info, 6, -1);
Irssi::active_win->command("/me is now playing".$info."\r\n");
return 1;
}
if ($hook){
rb();
}else{
Irssi::command_bind(‘bp’, ‘bp’)
}[/perl]