summaryrefslogtreecommitdiffstats
path: root/scripts/df.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/df.pl')
-rw-r--r--scripts/df.pl157
1 files changed, 157 insertions, 0 deletions
diff --git a/scripts/df.pl b/scripts/df.pl
new file mode 100644
index 0000000..852cdee
--- /dev/null
+++ b/scripts/df.pl
@@ -0,0 +1,157 @@
+use Irssi;
+use Irssi::TextUI;
+use strict;
+
+use vars qw($VERSION %IRSSI);
+
+$VERSION="0.1.0";
+%IRSSI = (
+ authors=> 'Jochem Meyers',
+ contact=> 'jochem.meyers@gmail.com',
+ name=> 'df',
+ description=> 'Adds an item which displays the current disk usage.',
+ sbitems=> 'df',
+ license=> 'GPL v2 or later',
+ url=> 'http://kaede.kicks-ass.net/irssi.html',
+);
+
+#########
+# INFO
+###
+#
+# Type this to add the item:
+#
+# /statusbar window add df
+#
+# See
+#
+# /help statusbar
+#
+# for more help on how to custimize your statusbar.
+#
+# If you want to change the way the item looks, browse down to where it reads
+#
+# $output .= ' [' . $device . ': A: ' . $avail{$device} . ' U%%: ' . $use{$device} . ']';
+#
+# and add or remove any of the following:
+# $size{$device} is the total size of the drive
+# $used{$device} is the total amount of used space
+# $avail{$device} is the amount of available space
+# $use{$device} is the percentage of space used
+# $mount{$device} is the mount point
+#
+# Next version, if I ever get around to making one, will have an easier system of changing the
+# way the statusbar item looks.
+#
+# There's a command defined, /dfupdate, which will instantly update the statusbar item. If you
+# want this information printed in the statuswindow, use /exec df -h in any window :).
+#
+############
+# OPTIONS
+######
+#
+# The irssi command /set can be used to change these settings (more to follow):
+# * df_refresh_time (default: 60)
+# The number of seconds between updates.
+#
+###
+#########
+# TODO
+###
+#
+# - Add format support so the display is more easily customizable.
+# - Add a list of devices to display.
+# - Add a setting that'll let user define the switches to pass to df?
+#
+#########
+
+#definte variables
+my $output;
+my ($df_refresh_tag);
+my $sbitem;
+my (%size, %used, %avail, %use, %mount);
+
+#get information about the harddrives
+sub getDiskInfo()
+{
+ my @list;
+ my $skip_line_one = 1;
+
+ open(FID, "-|", "/bin/df");
+ while (<FID>)
+ {
+ if ($skip_line_one > 0)
+ {
+ $skip_line_one--;
+ next;
+ }
+ my $line = $_;
+ $line =~ s/[\s:]/ /g;
+ @list = split(" ", $line);
+ $list[0] =~ s/\/dev\///g;
+ $size{$list[0]} = $list[1];
+ $used{$list[0]} = $list[2];
+ $avail{$list[0]} = $list[3];
+ $use{$list[0]} = $list[4];
+ $mount{$list[0]} = $list[5];
+ $skip_line_one--;
+ if ($skip_line_one < -100) {
+ Irssi::print("More than 100 drives, this can't be.");
+ return;
+ }
+ }
+ close(FID);
+}
+
+#called by irssi to get the statusbar item
+sub sb_df()
+{
+ my ($item, $get_size_only) = @_;
+ $item->default_handler($get_size_only, "{sb $sbitem}", undef, 1);
+}
+
+sub test()
+{
+ refresh_df();
+}
+#refresh the statusbar item
+sub refresh_df()
+{
+ getDiskInfo();
+ $output = "";
+ $sbitem = "";
+ my @devices = keys(%size);
+ my $device;
+ foreach $device (@devices)
+ {
+ $output .= ' [' . $device . ': A: ' . $avail{$device} . ' U%%: ' . $use{$device} . ']';
+ }
+ $sbitem = 'DF' . $output;
+ Irssi::statusbar_items_redraw('df');
+ if ($df_refresh_tag)
+ {
+ Irssi::timeout_remove($df_refresh_tag)
+ }
+ my $time = Irssi::settings_get_int('df_refresh_time');
+ $df_refresh_tag = Irssi::timeout_add($time*1000, 'refresh_df', undef);
+}
+
+#register the statusbar item
+Irssi::statusbar_item_register('df', undef, 'sb_df');
+
+#add settings
+Irssi::settings_add_int('misc', 'df_refresh_time', 60);
+
+Irssi::command_bind('dfupdate','test');
+
+#run refresh_df() once so sbitem has a value
+refresh_df();
+
+################
+###
+# Changelog
+# Version 0.1.0
+# - initial release
+#
+###
+################