/usr/share/irssi/scripts/title.pl is in irssi-scripts 20120326.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | use Irssi 20020120.0250 ();
$VERSION = "3.2";
%IRSSI = (
authors => 'Timo Sirainen, David Leadbeater',
contact => 'tss@iki.fi, dgl@dgl.cx',
name => 'title',
description => 'Display configurable title as XTerm title',
license => 'GNU GPL',
url => 'http://irssi.dgl.cx/',
);
# Settings:
# title_string: The string used in the title, see below for explaination
# title_topic_length: The length to truncate the topic to (some terminals have
# problems with long titles).
# title_screen_window: (EXPERIMENTAL), sets the screen window title rather than
# the Xterm title.
# The $vars are normal Irssi vars (docs/special_vars.txt).
# $.var does some magic, adds a space at the begining and brackets around
# the item but only if it produces output.
# Here is some examples:
# The default:
# /set title_string Irssi: [$N@$tag]$.C$.winname$.act
# Quite nice with lots of info:
# /set title_string $cumode$winname$C$.M$.act$.topic
# Nickname with usermode
# /set title_string $N(+$usermode)
my %act;
use IO::Handle;
sub xterm_topic {
my($text) = @_;
STDERR->autoflush(1);
if(Irssi::settings_get_bool('title_screen_window')) {
print STDERR "\033k$text\033\\";
}else{
print STDERR "\033]0;$text\007";
}
}
sub refresh_topic {
my $title = Irssi::settings_get_str('title_string');
$title =~ s/\$([A-Za-z.,;:]+)/special_var($1)/eg;
xterm_topic($title);
}
sub special_var {
my($str) = @_;
my($begin,$end);
if($str =~ s/^\.//) {
$begin = ' [';
$end = ']';
}else{
$begin = $end = '';
}
my $result;
if($str eq 'topic') {
$result = topic_str();
}elsif($str eq 'act') {
$result = act_str();
}else{
my $item = ref Irssi::active_win() ? Irssi::active_win()->{active} : '';
$item = Irssi::active_server() unless ref $item;
return '' unless ref $item;
$result = $item->parse_special('$' . $str);
}
$begin = '(+', $end = ')' if $str eq 'M' && $begin;
return $result ? $begin . $result . $end : '';
}
sub topic_str {
my $server = Irssi::active_server();
my $item = ref Irssi::active_win() ? Irssi::active_win()->{active} : '';
if(ref $server && ref $item && $item->{type} eq 'CHANNEL') {
my $topic = $item->{topic};
# Remove colour and bold from topic...
$topic =~ s/\003(\d{1,2})(\,(\d{1,2})|)//g;
$topic =~ s/[\x00-\x1f]//g;
$topic = substr($topic, 0,Irssi::settings_get_int('title_topic_length'));
return $topic if length $topic;
}
return '';
}
sub act_str {
my @acts;
for my $winref(keys %act) {
# handle windows with items and not gracefully
my $window = Irssi::window_find_refnum($winref);
if(defined($window)) {
for my $win ($window->items or $window) {
if($win->{data_level} >= 3 || $win->{data_lev} >= 3) {
push(@acts,$win->{name});
} else {
delete($act{$winref});
}
}
} else {
delete($act{$winref});
}
}
return join(', ',@acts);
}
sub topic_changed {
my($chan) = @_;
return unless ref Irssi::active_win() &&
Irssi::active_win()->{active}->{type} eq 'CHANNEL';
return unless lc $chan->{name} eq lc Irssi::active_win()->{active}->{name};
refresh_topic();
}
sub hilight_win {
my($win) = @_;
return unless ref $win && $win->{data_level} >= 3;
$act{$win->{refnum}}++;
refresh_topic();
}
Irssi::signal_add_last('window changed', 'refresh_topic');
Irssi::signal_add_last('window item changed', 'refresh_topic');
Irssi::signal_add_last('window server changed', 'refresh_topic');
Irssi::signal_add_last('server nick changed', 'refresh_topic');
Irssi::signal_add_last('channel topic changed', 'topic_changed');
Irssi::signal_add_last('window hilight', 'hilight_win');
Irssi::signal_add_last('setup changed', 'refresh_topic');
Irssi::settings_add_str('misc', 'title_string', 'Irssi: [$N@$tag]$.C$.winname$.act');
Irssi::settings_add_int('misc', 'title_topic_length', 250);
Irssi::settings_add_bool('misc', 'title_screen_window', 0);
|