123 lines
2.7 KiB
Perl
Executable File
123 lines
2.7 KiB
Perl
Executable File
#! /usr/bin/perl -w
|
|
|
|
sub exists_in_path {
|
|
my $command = shift;
|
|
my @path = split ':', $ENV{PATH};
|
|
|
|
foreach my $dir (@path) {
|
|
if (-x "$dir/$command") {
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
# GNOME Terminal now uses a dbus-activated service, so calling it would exit
|
|
# immediately, while we're supposed to mimic xterm behavior and so to wait
|
|
# until the terminal is explicitly closed, so always use the wait argument
|
|
push(@args, '--wait');
|
|
|
|
while ($opt = shift(@ARGV))
|
|
{
|
|
if ($opt eq '-display')
|
|
{
|
|
$ENV{'DISPLAY'} = shift(@ARGV);
|
|
}
|
|
elsif ($opt eq '-name')
|
|
{
|
|
$arg = shift(@ARGV);
|
|
push(@args, "--window-with-profile=$arg");
|
|
}
|
|
elsif ($opt eq '-n')
|
|
{
|
|
# Accept but ignore
|
|
print STDERR "$0: to set an icon, please use -name <profile> and set a profile icon\n"
|
|
}
|
|
elsif ($opt eq '-T' || $opt eq '-title')
|
|
{
|
|
push(@args, '-t', shift(@ARGV));
|
|
}
|
|
elsif ($opt eq '-ls')
|
|
{
|
|
die "$0: Requested to be used as a login shell, but it's not supported\n"
|
|
}
|
|
elsif ($opt eq '+ls')
|
|
{
|
|
print STDERR "$0: gnome-terminal is always a non-login shell\n"
|
|
}
|
|
elsif ($opt eq '-geometry')
|
|
{
|
|
$arg = shift(@ARGV);
|
|
push(@args, "--geometry=$arg");
|
|
}
|
|
elsif ($opt eq '-fn')
|
|
{
|
|
$arg = shift(@ARGV);
|
|
push(@args, "--font=$arg");
|
|
}
|
|
elsif ($opt eq '-fg')
|
|
{
|
|
$arg = shift(@ARGV);
|
|
push(@args, "--foreground=$arg");
|
|
}
|
|
elsif ($opt eq '-bg')
|
|
{
|
|
$arg = shift(@ARGV);
|
|
push(@args, "--background=$arg");
|
|
}
|
|
elsif ($opt eq '-tn')
|
|
{
|
|
$arg = shift(@ARGV);
|
|
push(@args, "--termname=$arg");
|
|
}
|
|
elsif ($opt eq '-e')
|
|
{
|
|
# Debian Policy says we would be free to translate this into:
|
|
# push(@args, '--', @ARGV);
|
|
# but let's be nice to people with local scripts that rely on
|
|
# xterm -e having a special case for a singular argument.
|
|
$arg = shift(@ARGV);
|
|
if (@ARGV)
|
|
{
|
|
push(@args, '--', $arg, @ARGV);
|
|
last;
|
|
}
|
|
else
|
|
{
|
|
# Emulate xterm's special case for a single argument: if it
|
|
# isn't something we can execute directly, pass it to a shell
|
|
my $executable;
|
|
|
|
if ($arg =~ m{/})
|
|
{
|
|
$executable = -x $arg;
|
|
}
|
|
else
|
|
{
|
|
$executable = exists_in_path($arg);
|
|
}
|
|
|
|
if ($executable)
|
|
{
|
|
push(@args, '--', $arg);
|
|
}
|
|
else
|
|
{
|
|
# Historically, we used the now-deprecated gnome-terminal -e
|
|
# for this case, which would split the command line up as if
|
|
# by a shell, but didn't support shell constructs like "if"
|
|
# and pipes. But this is easier, and matches what xterm does.
|
|
push(@args, '--', 'sh', '-c', $arg);
|
|
}
|
|
}
|
|
last;
|
|
}
|
|
elsif ($opt eq '-h' || $opt eq '--help')
|
|
{
|
|
push(@args, '--help');
|
|
}
|
|
}
|
|
|
|
exec('gnome-terminal',@args);
|