[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: WIndow manager policy question



On Wed, Jul 29, 1998 at 11:58:21PM -0400, Shaleh wrote:

> Enclosed is my script.  All functionality but the --ask (or noask) is
> there.  Please send comments/questions/complaints my way.  Sorry Marcelo
> I did it in Perl (-:

 Hey, nice! I enclose a modified version (with --ask). Don't be sorry,
 I'm "Learning Perl" :-)


                                        Marcelo
#! /usr/bin/perl
###
#
# written by Shaleh <shaleh@debian.org>
#
###

while ($ARGV[0] =~ m/^--/) {
	$_ = shift(@ARGV);
	if (/--add/) {
		$mode="add";
	} elsif (/--remove/) {
		$mode="remove";
	} elsif (/--default/) {
		$mode="default";
	} elsif (/--ask/) {
		$ask="true";
	} else {
		&usage;
	}
}

unless( $#ARGV == 0 ) { 
	&usage;
}

if( $ARGV[0] !~ m/^\// ) {
	$WM = '/usr/X11R6/bin/' . $ARGV[0];
}
else {
	$WM = $ARGV[0];
}

if ( $ask eq "true") {
	&ask($mode, $WM);
}

if( $mode eq 'add' ) {
	&add_to_file($WM);
} 
elsif( $mode eq 'default' ) {
	&make_default($WM);
} 
elsif( $mode eq 'remove' ) {
	&rm_from_file($WM);
} 


###
#
# Usage information
#
###
sub usage {
	print <<EOT;
Usage: $0 [--ask] {--add|--default|--remove} <wm>

Options:
  --ask            Asks for confimation of the requested action

Actions:
  --add            Adds the specified window manager to the bottom of the
                   /etc/X11/window-managers file
  --remove         Removes the specified window manager
  --default        Adds the specified window manager to the top of the
                   /etc/X11/window-managers file, thus making it the system
                   default

<wm> can the the full path to the window manager excecutable, or just the
filename (/usr/X11R6/bin/ will be prepended to it).

EOT
	exit(0);
}

###
#
# Asks for confirmation of the requested action
#
###
sub ask {
	($mode) = shift(@_);
	($WM)   = @_;

	if (open(WMFILE, '/etc/X11/window-managers')) {
		@WMS = <WMFILE>;
		close(WMFILE);
		print "The following window managers are listed in /etc/X11/window-managers:\n\n";
		foreach (@WMS) {
			if (m/\//) {
				print "\t" . $_;
			}
		}
		print "\n";
	}

	if ($mode eq "add") {
		$prompt = "Do you want to add $WM to the list";
	} elsif ($mode eq "remove") {
		$prompt = "Do you want to remove $WM from the list";
	} elsif ($mode eq "default") {
		$prompt = "Do you want make $WM the default";
	}

	&ask_n($prompt) || exit(0);
}

###
#
# Asks a question, "No" is the default
#
###
sub ask_n {
	my $answer;
	print @_,"? [No] ";
	$answer=<STDIN>;
	return ( $answer =~ /^\s*y/i );
}

###
#
# Adds window manager passed to the end of window-managers file
#
###
sub add_to_file {
	($wm) = @_;

	return unless( &ifexists($wm) eq 'false' );
	
	open(WMFILE, '>>/etc/X11/window-managers') || 
		die("Could not open /etc/X11/window-managers for writing\n");
	print WMFILE "$wm\n";
	close(WMFILE);
}

###
#
# Makes window manager passed the default by putting it first
#
###
sub make_default {
	($wm) = @_;
	my $found = 0;

	if( &ifexists($wm) eq 'true' ) {
		&rm_from_file($wm);
	}

	open(WMFILE, '/etc/X11/window-managers') || 
		die("Could not open /etc/X11/window-managers\n");
	@WMS = <WMFILE>;
	close(WMFILE);
	open(WMFILE, '>/etc/X11/window-managers') || 
		die("Could not open /etc/X11/window-managers for writing\n");
	foreach (@WMS) {
		if( m/^\// && $found == 0 ) {
			print WMFILE "$wm\n";
			$found = 1;
		}
		print WMFILE;
	}
	close(WMFILE);
}

###
#
# Removes passed window manager from window-managers file
#
###
sub rm_from_file {
	($wm) = @_;

	return unless( &ifexists($wm) eq 'true' );

	open(WMFILE, '/etc/X11/window-managers') ||
		die("Could not open /etc/X11/window-managers\n");
	@WMS = <WMFILE>;
	close(WMFILE);
	open(WMFILE, '>/etc/X11/window-managers') ||
		die("Could not open /etc/X11/window-managers for writing\n");

	foreach (@WMS) {
		print WMFILE unless( m/$wm/ );
	}
}

###
#
# returns 'true' if window manager exists in the file, 'false' otherwise
#
###
sub ifexists {
	($wm) = @_;

	open(WMFILE, '/etc/X11/window-managers') || 
		die("Could not open /etc/X11/window-managers\n");
	
	@WMS = <WMFILE>;
	close WMFILE;
	foreach (@WMS) {
		unless( m/^#/ ) {
			if( m/$wm/ ) {
				return 'true';
			}
		}
	}
	return 'false';
}

Reply to: