diff options
Diffstat (limited to 'contrib/rpws')
-rwxr-xr-x | contrib/rpws | 343 |
1 files changed, 0 insertions, 343 deletions
diff --git a/contrib/rpws b/contrib/rpws deleted file mode 100755 index 49105c5..0000000 --- a/contrib/rpws +++ /dev/null @@ -1,343 +0,0 @@ -#!/usr/bin/env perl - -# -# Copyright (c) 2009 Hatem Nassrat <hnassrat@gmail.com> -# All rights reserved. Modifications under same license as original script. -# ChangeLog: -# -# Added C-M-Right and C-M-Left for next and prev workspace -# Added move window to next prev workspace -# Added dump/restore workspaces -# -# Copyright (c) 2005 Mike O'Connor -# All rights reserved. -# Author Mike O'Connor <stew@vireo.org> -# -# Modified by Shawn Betts. -# -# code was adapeted from rpws that comes from ratpoison containing the follwing copyright: -# Copyright (C) 2003 Shawn Betts -# Author: Shawn Betts -# - -use strict; -use warnings; -use Fcntl qw (:flock); -use Getopt::Std; - -my $ratpoison = $ENV{ "RATPOISON" } || "ratpoison"; -my $tmp=$ENV{ "TMP" } || "/tmp"; -my $lockfile = $ENV{ "RPWS_LOCKFILE" } || "$tmp/rpws.$<.lock"; - -sub help -{ - system("pod2usage", $0); - print( "for more detailed documentation run \"perldoc $0\"\n" ); -} - -sub rp_call -{ - my $result = `$ratpoison -c "@_"`; - chomp( $result ); - chomp( $result ); - return $result; -} - -sub ws_init_ws -{ - - my $num = shift; - - rp_call( "gnew wspl$num" ); - my $fd = fdump(); - rp_call( "setenv fspl$num $fd" ); -} - -sub fdump -{ - return rp_call( "fdump" ); -} - -sub ws_init -{ - my $num = shift; - - $num >= 2 || die "You must create at least 2 workspaces."; - - # Backup the frames - my $fd = fdump(); - - rp_call( "select -" ); - rp_call( "only" ); - - my $i; - for my $i (2..$num) - { - ws_init_ws( $i ); - } - - # Workspace 1 uses the 'default' group. - # Start in workspace 1. - $fd = fdump(); - rp_call( "gselect default" ); - rp_call( "setenv fspl1 $fd" ); - rp_call( "setenv wspl 1" ); - - # Keep track of workspace count - rp_call( "setenv wspc $num" ); - - # restore the frames - rp_call( "frestore $fd" ); - - if( -e "$lockfile" ) - { - unlink ("$lockfile" ); - } -} - -sub ws_save -{ - my $ws = rp_call( "getenv wspl" ); - my $fd = fdump(); - rp_call( "setenv fspl$ws $fd" ); -} - -sub ws_restore -{ - my $which = shift; - my $which_name; - my $move; - - # Step1: determine which workspace to move to - - if ( $which =~ /^move/ ) - { - $move = 1; - $which = substr($which, 4); - } - - if ( $which =~ /^(?:next|prev)$/ ) - { - my $ws = rp_call( "getenv wspl" ); - my $wspc = rp_call( "getenv wspc" ); - - if ( $which eq 'next' ) - { - $ws++; - } - else - { - $ws--; - } - $which = ( ( $ws - 1 ) % $wspc ) + 1; - } - - if ( $which == 1 ) - { - $which_name = "default"; - } - else - { - $which_name = "wspl$which"; - } - - # Step 2a: Moving Window if necessary - if ( $move ) - { - rp_call( "gmove $which_name" ); - rp_call( "select -" ); - rp_call( "prev" ); - } - - # Step2: Process the workspace switch - ws_save(); - rp_call( "gselect $which_name"); - my $last = rp_call( "getenv fspl$which" ); - rp_call( "frestore $last" ); - rp_call( "setenv wspl $which" ); - - # Step 2x: Display the moved Window - if ( $move ) - { - rp_call( "next" ); - } - - rp_call( "echo Workspace $which" ); - -} - -sub ws_dump -{ - my $ws_dumpf = shift; - my $wspc = rp_call( "getenv wspc" ); - - open WSDUMP, ">$ws_dumpf" or die $!; - - ws_save(); - - for my $i (1..$wspc) - { - print WSDUMP rp_call( "getenv fspl$i" )."\n"; - } - - close WSDUMP; - - rp_call( "echo Workspaces dumped to $ws_dumpf" ); -} - -sub ws_dumprestore -{ - my $ws_dumpf = shift; - my $ws = rp_call( "getenv wspl" ); - my $wspc = rp_call( "getenv wspc" ); - - # Get dumped frame info - open WSDUMP, "$ws_dumpf" or die $!; - my @wsdata=<WSDUMP>; - close WSDUMP; - - my $wspc_dump = scalar @wsdata; - - if ($wspc < $wspc_dump) - { - # Number of workspaces to restore more than available - die "Cannot restore all workspaces (dump_count = " . $wspc_dump . ", rp_count = " . $wspc . ")"; - } - - # Restoring all workspaces - for my $i (1..$wspc_dump) - { - # calculating previous workspace number - my $j = ( $wspc + $i - 2 ) % $wspc + 1; - # moving to workspace $i -1 - ws_restore( $j ); - # restoring workspace $i - rp_call( "setenv fspl$i $wsdata[$i-1]" ); - } - - # goto the originally visible workspace - ws_restore( $ws ); - - rp_call( "echo Workspaces loaded from $ws_dumpf" ); -} - -sub add_aliases -{ - my $n = shift; - foreach my $i (1..$n) { - # Switch Workspace - rp_call ( "alias rpws$i exec $0 $i" ); - # Move Window to wrokspace - rp_call ( "alias rpwsm$i exec $0 move$i" ); - } - rp_call ( "alias rpwsn exec $0 next" ); - rp_call ( "alias rpwsp exec $0 prev" ); - rp_call ( "alias rpwsmn exec $0 movenext" ); - rp_call ( "alias rpwsmp exec $0 moveprev" ); - - -} - -sub add_keys -{ - my $n = shift; - foreach my $i (1..$n) { - # Switch Workspace - rp_call ( "definekey top M-F$i rpws$i" ); - # Move Window to wrokspace - rp_call ( "definekey top C-M-S-F$i rpwsm$i" ); - } - rp_call ( "definekey top C-M-Right rpwsn" ); - rp_call ( "definekey top C-M-Left rpwsp" ); - rp_call ( "definekey top C-M-greater rpwsmn" ); - rp_call ( "definekey top C-M-less rpwsmp" ); -} - -my $arg = shift @ARGV || 'help'; - -if( $arg eq "help" ) { - help(); -} elsif( $arg eq "init" ) { - my $num = shift @ARGV; - my %opts; - ws_init( $num ); - getopts('ka', \%opts); - add_aliases( $num ) if $opts{'a'} || $opts{'k'}; - add_keys ( $num ) if $opts{'k'}; -} elsif( $arg eq "dump" ) { - my $filename = shift @ARGV; - ws_dump($filename); -} elsif( $arg eq "restore" ) { - my $filename = shift @ARGV; - ws_dumprestore($filename); -} else { - open LOCK, ">>$lockfile" or die "Cannot open lockfile: $lockfile"; - flock(LOCK, LOCK_EX); - ws_restore( $arg ); -} - -__END__ - -=head1 NAME - -rpws - Implements multiple workspaces in ratpoison - -=head1 SYNOPSIS - - rpws init n [-k] [-a] - setup rpws with n workspaces. - -a sets up command aliases; - -k sets up key bindings and aliases. - rpws dump <fname> - dumps the current layout to <fname> - rpws restore <fname> - restores rpws workspaces from <fname> - rpws help - this documentation - rpws n - switch to this workspace - - -=head1 DESCRIPTION - - B<rpws> implements multiple workspaces in ratpoison by making calls - to fdump, freestore. It was adapted from rpws which comes with - ratpoison in the contrib directory. - -=head1 USAGE - -Add the following line in ~/.ratpoisonrc - - exec /path/to/rpws init 6 -k - -This creates 6 aliases rpws1, rpws2, etc. It also binds the keys M-F1, -M-F2, etc to each rpwsN alias. Moreover, rpwsn (Next) and rpwsp (Prev) are -created, and C-M-{Right,Left} are bound to rpws{n,p}. Full list of keybindings -created are: - - M-F$i Goto workspace $i - C-M-Right Goto Next workspace - C-M-Left Goto Prev workspace - C-M-S-F$i Move window to workspace $i - C-M-greater Move current window to next workspace - C-M-less Move current window to prev workspace - -=head1 FILES - - rpws requires use of a lockfile. It defaults to using -/tmp/rpws.<UID>.lock but this can be changed by setting the -environment variable RPWS_LOCKFILE to your desired lockfile. - -=head1 AUTHOR - - Mike O'Connor <stew@vireo.org> - -=head1 COPYRIGHT - - Copyright (c) 2005 Mike O'Connor - All rights reserved. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. |