summaryrefslogtreecommitdiffstats
path: root/scripts/resize_split.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/resize_split.pl')
-rw-r--r--scripts/resize_split.pl62
1 files changed, 62 insertions, 0 deletions
diff --git a/scripts/resize_split.pl b/scripts/resize_split.pl
new file mode 100644
index 0000000..1744419
--- /dev/null
+++ b/scripts/resize_split.pl
@@ -0,0 +1,62 @@
+use Irssi;
+use strict;
+use vars qw/$VERSION %IRSSI/;
+$VERSION = 1.0;
+%IRSSI = (
+ authors => 'David Leadbeater',
+ contact => 'dgl@dgl.cx',
+ name => 'resize_split',
+ description => 'Resizes a split window when it is made active (see comments in script for details)',
+ license => 'GNU GPLv2 or later',
+ url => 'http://irssi.dgl.cx/',
+);
+
+# This script is for if you have a split window for status (or anything else)
+# it makes it bigger when it's active.
+# (The way I have Irssi setup is with a split status window along the top,
+# created with /window show 1 in a channel window).
+
+# For example you do a command that outputs a large amount of text into
+# the status window such as /help or /motd (depending on what you put in
+# your status window). Then simply hit alt+up and the status window resizes
+# to give you more room to read the output, when you go back to another window
+# the status window will automatically go back to its previous size.
+
+# BUGS (mostly due to lack of Irssi API for split windows).
+# As far as I can see there is no easy way to find out where in a split a
+# window is displayed, so if more than one window is sticky inside a split
+# and you set that window in the setting below this script will have problems.
+# Also if you have more than 2 split windows things won't work as expected.
+
+# Setting: resize_windows
+# A space seperated list of windows that you want to be resized when you
+# change to them.
+# If it contains something that's not a (permanently displayed) split window
+# then windows will probably end up with incorrect sizes.
+Irssi::settings_add_str("misc", "resize_windows", "1");
+
+Irssi::signal_add("window changed", \&winchg);
+
+sub winchg {
+ my($newwin, $oldwin) = @_;
+ if(is_resized($oldwin->{refnum})) {
+ my $height = $oldwin->{height} - $newwin->{height};
+ return if $height < 0; # Work around bug in Irssi, minus numbers here
+ # do weird things (i.e. grow without error
+ # checking)
+ $oldwin->command("window shrink $height");
+ }
+
+ if(is_resized($newwin->{refnum})) {
+ my $height = $oldwin->{height} - $newwin->{height};
+ return if $height < 0; # same problem as above..
+ $newwin->command("window grow $height");
+ }
+}
+
+sub is_resized {
+ for my $refnum(split ' ', Irssi::settings_get_str("resize_windows")) {
+ return 1 if $refnum == $_[0];
+ }
+}
+