Инсталация и конфигуриране на irssi

Автор Владимир Колев | Вариант за отпечатване Вариант за отпечатване   

1 Star2 Stars3 Stars4 Stars5 Stars (2гласа, средно: 4.50 от общо 5)
Loading ... Loading ...
 

Какво е 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 в директорията за скриптове със следното съдържание:

  1. #!/usr/bin/perl -w
  2.  
  3. BEGIN{
  4. use vars '$hook','$info';
  5. eval q {
  6. use Irssi;
  7. };
  8. $hook = !!$@;
  9. }
  10.  
  11. sub np
  12. {
  13. $info = `rhythmbox-client --print-playing-format %ta\\ -\\ %tt\\ -\\ "(%te/%td)"`;
  14. chop $info;
  15. Irssi::active_win->command("/me is now playing: ".$info);
  16. return 1;
  17. }
  18.  
  19. if ($hook){
  20. rb();
  21. }else{
  22. Irssi::command_bind('np', 'np');
  23. }

съответно командата за известяване на песента, която слушате в момента ще бъде np. Скрипта можете да го разширите разбира се като използвате опциите на rhythmbox-client добавяйки различни команди (--next, --prev, --stop, --play и т.н.).

Скрипт за Exaile

Създайте скрипт exaile.pl във директорията със скриптове и въведете следното съдържание:

  1. #!/usr/bin/perl
  2.  
  3. use Net::DBus;
  4. use strict;
  5. use Irssi;
  6. use vars qw($VERSION %IRSSI);
  7.  
  8. $VERSION = "1.0";
  9. %IRSSI = (
  10. authors => "Adam Olsen",
  11. contact => "arolsen\@gmail.com",
  12. name => "Exaile interface script",
  13. description => "Prints what you're playing to an irssi channel",
  14. license => "Public domain"
  15. );
  16.  
  17. sub test_dbus
  18. {
  19. my $service = shift;
  20.  
  21. my $bus = Net::DBus->session;
  22. my $obj = $bus->get_service("org.freedesktop.DBus");
  23. my $iface = $obj->get_object("/org/freedesktop/DBus",
  24. "org.freedesktop.DBus");
  25.  
  26. foreach my $item( @{$iface->ListNames()} )
  27. {
  28. if( $item eq $service )
  29. {
  30. return 1;
  31. }
  32. }
  33.  
  34. return 0;
  35. }
  36.  
  37. sub print_info
  38. {
  39. my($data, $server, $witem) = @_;
  40.  
  41. my $bus = Net::DBus->session;
  42.  
  43. if(!&test_dbus("org.exaile.DBusInterface"))
  44. {
  45. print "Could not see Exaile in dbus.";
  46. return;
  47. }
  48.  
  49. my $obj = $bus->get_service("org.exaile.DBusInterface");
  50. my $iface = $obj->get_object("/DBusInterfaceObject",
  51. "org.exaile.DBusInterface");
  52.  
  53. my $pos = $iface->current_position;
  54. if(!$pos)
  55. {
  56. print "Not playing anything";
  57. return;
  58. }
  59. $pos = int($pos);
  60.  
  61. my $song = $iface->get_title;
  62. my $artist = $iface->get_artist;
  63. my $length = $iface->get_length;
  64.  
  65. if($witem && $witem->{type} eq 'CHANNEL')
  66. {
  67. $witem->command("ACTION " . $witem->{name} .
  68. " is playing $song by $artist [$length $pos\%]");
  69. }
  70. }
  71.  
  72. Irssi::command_bind("exaile", 'print_info');
  73. 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 определя раздел, в който да запише адреса на сървъра.

Ако добавяте повече сървъри, не е необходимо на всичките да слагате -auto, тъй като ако клиента не успее да се свърже със сървъра по подразбиране, автоматично ще смени на следващия от съответната мрежа

  • Добавяне на канал за автоматично влизане след свързване с определен сървър:
    [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, но не функционират при всички терминали.

Относно автора

Владимир Колев е написал 48 статии в този блог.

Студент в техническия университет в град Кьолн/Германия. Занимава се с програмиране от 6 години. Предпочитан език за програмиране Python. Други езици: C, Java, PHP, MySQL, SQLite.


Вашите коментари

2 Коментара

  1. frankopld
    Posted 03/11/2009 at 23:04 | Permalink | Reply

    @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”

  2. Posted 15/03/2010 at 21:24 | Permalink | Reply

    Ето и едно скриптче, което за съжаление никъде не намерих и трябваше сам да направя. Това ще покаже актуалната песен свиреща в 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]

Публикувай коментар

Вашият е-мейл никога няма да бъде споделен. Задължителните полета са маркирани с *

*
*

Switch to our mobile site