annotate .irssi/scripts/tmux_away.pl @ 307:e37b00236907

zshrc: work around my shell function that turns on utf8 in screen The zsh built in which was getting confused by the function, and always claimed screen was installed. I'm finally running into machines with tmux but not screen, so I noticed.
author Augie Fackler <raf@durin42.com>
date Sat, 19 Jan 2013 19:29:58 -0600
parents 139f30ce463a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
304
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
1 use Irssi;
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
2 use strict;
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
3 use FileHandle;
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
4
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
5 use vars qw($VERSION %IRSSI);
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
6
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
7 $VERSION = "0.9.7.1";
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
8 %IRSSI = (
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
9 authors => 'Andreas \'ads\' Scherbaum <ads@wars-nicht.de>, Moritz Wilhelmy <crap@wzff.de>',
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
10 name => 'tmux_away',
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
11 description => 'set (un)away, if tmux is attached/detached',
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
12 license => 'GPL v2',
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
13 url => 'none',
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
14 );
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
15
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
16 # tmux_away irssi module
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
17 #
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
18 # written by Andreas 'ads' Scherbaum <ads@ufp.de>
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
19 #
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
20 #
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
21 # changes:
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
22 # 07.02.2004 fix error with away mode
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
23 # thanks to Michael Schiansky for reporting and fixing this one
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
24 # 07.08.2004 new function for changing nick on away
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
25 # 24.08.2004 fixing bug where the away nick was not storedcorrectly
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
26 # thanks for Harald Wurpts for help debugging this one
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
27 # 17.09.2004 rewrote init part to use $ENV{'STY'}
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
28 # 05.12.2004 add patch for remember away state
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
29 # thanks to Jilles Tjoelker <jilles@stack.nl>
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
30 # change "chatnet" to "tag"
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
31 # 18.05.2007 fix '-one' for SILC networks
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
32 # 27.02.2010 changed screen_away to tmux_away and changed functionality to support tmux
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
33 #
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
34 #
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
35 # usage:
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
36 #
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
37 # put this script into your autorun directory and/or load it with
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
38 # /SCRIPT LOAD <name>
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
39 #
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
40 # there are 5 settings available:
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
41 #
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
42 # /set tmux_away_active ON/OFF/TOGGLE
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
43 # /set tmux_away_repeat <integer>
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
44 # /set tmux_away_message <string>
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
45 # /set tmux_away_window <string>
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
46 # /set tmux_away_nick <string>
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
47 #
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
48 # active means, that you will be only set away/unaway, if this
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
49 # flag is set, default is ON
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
50 # repeat is the number of seconds, after the script will check the
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
51 # screen status again, default is 5 seconds
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
52 # message is the away message sent to the server, default: not here ...
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
53 # window is a window number or name, if set, the script will switch
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
54 # to this window, if it sets you away, default is '1'
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
55 # nick is the new nick, if the script goes away
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
56 # will only be used it not empty
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
57 #
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
58 # normal you should be able to rename the script to something other
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
59 # than 'tmux_away' (as example, if you dont like the name) by simple
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
60 # changing the 'name' parameter in the %IRSSI hash at the top of this script
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
61
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
62
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
63 # variables
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
64 my $timer_name = undef;
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
65 my $away_status = 0;
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
66 my %old_nicks = ();
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
67 my %away = ();
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
68
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
69 # Register formats
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
70 Irssi::theme_register(
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
71 [
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
72 'tmux_away_crap',
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
73 '{line_start}{hilight ' . $IRSSI{'name'} . ':} $0'
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
74 ]);
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
75
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
76 # if we are running
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
77 my $tmux_away_used = 0;
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
78
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
79 # try to find out, if we are running in a screen
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
80 # (see, if $ENV{STY} is set
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
81 if (!defined($ENV{TMUX})) {
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
82 # just return, we will never be called again
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
83 Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'tmux_away_crap',
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
84 "could not open status file for parent process (pid: " . getppid() . "): $!");
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
85 return;
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
86 }
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
87
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
88 my ($socket_name, $socket_path);
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
89
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
90 # search for socket
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
91 # normal we could search the socket file, ... if we know the path
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
92 # but so we have to call one time the screen executable
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
93 # disable locale
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
94 # the quotes around C force perl 5.005_03 to use the shell
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
95 # thanks to Jilles Tjoelker <jilles@stack.nl> for pointing this out
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
96 my $socket = `LC_ALL="C" tmux ls 2>&1`;
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
97
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
98 my $running_in_tmux = $? == 0;
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
99 # locale doesnt seems to be an problem (yet)
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
100 if ($socket !~ /^server not found: No such file or directory/s) {
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
101 # ok, should have only one socket
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
102 @_ = split /,/, $ENV{'TMUX'};
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
103 $socket = ${_[0]};
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
104 $tmux_away_used = 1;
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
105 }
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
106
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
107 # last check
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
108 if ($tmux_away_used == 0) {
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
109 # we will never be called again
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
110 return;
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
111 }
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
112
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
113 # register config variables
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
114 Irssi::settings_add_bool('misc', $IRSSI{'name'} . '_active', 1);
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
115 Irssi::settings_add_int('misc', $IRSSI{'name'} . '_repeat', 5);
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
116 Irssi::settings_add_str('misc', $IRSSI{'name'} . '_message', "not here ...");
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
117 Irssi::settings_add_str('misc', $IRSSI{'name'} . '_window', "1");
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
118 Irssi::settings_add_str('misc', $IRSSI{'name'} . '_nick', "");
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
119
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
120 # init process
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
121 tmux_away();
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
122
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
123 # tmux_away()
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
124 #
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
125 # check, set or reset the away status
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
126 #
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
127 # parameter:
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
128 # none
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
129 # return:
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
130 # 0 (OK)
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
131 sub tmux_away {
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
132 my ($away, @screen, $screen);
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
133
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
134 # only run, if activated
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
135 if (Irssi::settings_get_bool($IRSSI{'name'} . '_active') == 1) {
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
136 if ($away_status == 0) {
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
137 # display init message at first time
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
138 Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'tmux_away_crap',
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
139 "activating $IRSSI{'name'} (interval: " . Irssi::settings_get_int($IRSSI{'name'} . '_repeat') . " seconds)");
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
140 }
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
141 # get actual screen status
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
142 my @screen = stat($socket);
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
143 # 00100 is the mode for "user has execute permissions", see stat.h
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
144 if (($screen[2] & 00100) == 0) {
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
145 # no execute permissions, Detached
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
146 $away = 1;
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
147 } else {
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
148 # execute permissions, Attached
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
149 $away = 2;
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
150 }
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
151
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
152 # check if status has changed
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
153 if ($away == 1 and $away_status != 1) {
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
154 # set away
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
155 if (length(Irssi::settings_get_str($IRSSI{'name'} . '_window')) > 0) {
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
156 # if length of window is greater then 0, make this window active
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
157 Irssi::command('window goto ' . Irssi::settings_get_str($IRSSI{'name'} . '_window'));
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
158 }
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
159 Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'tmux_away_crap',
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
160 "Set away");
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
161 my $message = Irssi::settings_get_str($IRSSI{'name'} . '_message');
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
162 if (length($message) == 0) {
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
163 # we have to set a message or we wouldnt go away
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
164 $message = "not here ...";
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
165 }
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
166 my ($server);
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
167 foreach $server (Irssi::servers()) {
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
168 if (!$server->{usermode_away}) {
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
169 # user isnt yet away
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
170 $away{$server->{'tag'}} = 0;
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
171 $server->command("AWAY " . (($server->{chat_type} ne 'SILC') ? "-one " : "") . "$message") if (!$server->{usermode_away});
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
172 if (length(Irssi::settings_get_str($IRSSI{'name'} . '_nick')) > 0) {
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
173 # only change, if actual nick isnt already the away nick
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
174 if (Irssi::settings_get_str($IRSSI{'name'} . '_nick') ne $server->{nick}) {
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
175 # keep old nick
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
176 $old_nicks{$server->{'tag'}} = $server->{nick};
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
177 # set new nick
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
178 $server->command("NICK " . Irssi::settings_get_str($IRSSI{'name'} . '_nick'));
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
179 }
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
180 }
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
181 } else {
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
182 # user is already away, remember this
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
183 $away{$server->{'tag'}} = 1;
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
184 }
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
185 }
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
186 $away_status = $away;
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
187 } elsif ($away == 2 and $away_status != 2) {
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
188 # unset away
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
189 Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'tmux_away_crap',
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
190 "Reset away");
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
191 my ($server);
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
192 foreach $server (Irssi::servers()) {
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
193 if ($away{$server->{'tag'}} == 1) {
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
194 # user was already away, dont reset away
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
195 $away{$server->{'tag'}} = 0;
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
196 next;
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
197 }
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
198 $server->command("AWAY" . (($server->{chat_type} ne 'SILC') ? " -one" : "")) if ($server->{usermode_away});
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
199 if (defined($old_nicks{$server->{'tag'}}) and length($old_nicks{$server->{'tag'}}) > 0) {
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
200 # set old nick
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
201 $server->command("NICK " . $old_nicks{$server->{'tag'}});
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
202 $old_nicks{$server->{'tag'}} = "";
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
203 }
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
204 }
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
205 $away_status = $away;
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
206 }
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
207 }
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
208 # but everytimes install a new timer
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
209 register_tmux_away_timer();
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
210 return 0;
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
211 }
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
212
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
213 # register_tmux_away_timer()
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
214 #
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
215 # remove old timer and install a new one
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
216 #
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
217 # parameter:
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
218 # none
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
219 # return:
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
220 # none
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
221 sub register_tmux_away_timer {
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
222 if (defined($timer_name)) {
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
223 # remove old timer, if defined
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
224 Irssi::timeout_remove($timer_name);
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
225 }
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
226 # add new timer with new timeout (maybe the timeout has been changed)
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
227 $timer_name = Irssi::timeout_add(Irssi::settings_get_int($IRSSI{'name'} . '_repeat') * 1000, 'tmux_away', '');
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
228 }
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
229
139f30ce463a irssi: install and autorun tmux_away.pl
Augie Fackler <raf@durin42.com>
parents:
diff changeset
230