diff options
Diffstat (limited to 'debian/gnome-terminal.wrapper')
-rw-r--r-- | debian/gnome-terminal.wrapper | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/debian/gnome-terminal.wrapper b/debian/gnome-terminal.wrapper new file mode 100644 index 0000000..cf64a62 --- /dev/null +++ b/debian/gnome-terminal.wrapper @@ -0,0 +1,122 @@ +#! /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); |