Como você define o título do gnome-terminal ativo a partir da linha de comando? [duplicado]

23

Existe uma maneira de definir o título do terminal gnome dentro do próprio terminal sem ter que clicar com o botão direito do mouse na guia. Algo como:

active-terminal --title "Foo"

Houve uma questão relacionada anteriormente com uma resposta que quase permite que você faça isso: Como alterar o título do Gnome-Terminal? mas isso não define o título da guia do terminal do gnome apenas o título da janela.

    
por Kit Sunde 19.03.2011 / 04:04

3 respostas

43

O seguinte definirá o título do terminal como "Novo título do terminal":

echo -en "3]0;New terminal title\a"

Provavelmente, você também precisará alterar a variável de ambiente PS1, caso contrário, suas alterações não serão exibidas, pois redefinirá o título após cada comando. O padrão .bashrc que acompanha o Ubuntu contém a seguinte linha:

PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\[email protected]\h: \w\a\]$PS1"

... o "\ e] 0;" código diz para escrever tudo até o "\ a" em ambas as propriedades title e icon-name. Você precisa removê-lo e configurá-lo para algo assim (ou seja, sem o código \ e] 0;):

PS1="${debian_chroot:+($debian_chroot)}\[email protected]\h \w\a$ "

Em seguida, qualquer alteração feita com o comando echo acima alterará o título do terminal. Se você for usar muito isso, você pode colocá-lo em uma função em seu arquivo ~ / .bashrc:

set_term_title(){
   echo -en "3]0;\a"
}

Então você pode simplesmente definir o título para "gatinhos" na linha de comando fazendo:

set_term_title kittens

(Você precisa reiniciar o bash depois de editar o .bashrc, para que suas alterações entrem em vigor)

    
por J. Taylor 19.03.2011 / 06:37
1

Declarações de função não funcionam em todos os shells, então outra abordagem é declarar um apelido assim:

alias cd    'cd \!*; echo -en "3]0;'pwd'\a"'

Este comando em particular faz com que o título mude para qualquer que seja o pwd.

Claro que você vai querer inicializar o título quando você iniciar o terminal, então não esqueça de incluir o título do gnome-terminal.

Eu uso um script perl para me ajudar a determinar primeiro todos os valores dos argumentos e, em seguida, invoca um novo terminal assim:

my $cmd = "gnome-terminal $window_with_profile $geometry $zoom $working_directory $temp_argv $title &";
system($cmd);

Mas como você deseja inicializar esses valores é com você ...

Você é bem-vindo para usar o seguinte código e ajustá-lo para seu uso pessoal, se quiser:

    #!/usr/bin/perl
    #use strict;
    use Getopt::Long;

    my $progName = "term.pl";

    =pod

    =head1 OBJECTIVE: open a gnome-terminal with a given path and a new background color

     #1# In order to use this script you first need to set up 10 different terminal profiles each named "theme1" - "theme10"
        Edit... profiles... new... theme1
        Each theme should use a different color scheme...

     The themes are later called with --window-with-profile=theme$int
     This script then selects the next one one to open based on the number saved in the ~/.term_theme_counter file.

     ### The argument "." opens the terminal with the same dir as you are currently in. 
         Without it, the terminal opens to "~". Use --working-directory=<DIR> for others. 
         Also, -dir=<DIR> has been added for convenience

     ### You can still pass additional gnome-terminal arguments like: --tab_with_profile etc into the command 

     ### Also see gnome-terminal --help 
            and gconf-editor and gconftool-2  --> /apps/gnome-terminal/profiles/ 
            for editing terminal props

      EXAMPLES:

      term.pl .
      term.pl /cadtools/tech/

    Credits: This script was written by Damian Green over the years but first posted publicly in 2013   

    =cut

    sub usage{
        system("perldoc $progName");
    };

    my $opt_h = "";
    my $geometry = "";
    my $zoom = "";
    my $window_with_profile = "";
    my $working_directory = "";
    my $temp_argv = " @ARGV ";

    #my $counter = int(rand(10));
    ###lets keep a running counter instead
    my $counter = 0;

    my $home = $ENV{"HOME"};
    $home = abs_path($home);

    my $counter_file = "$home/.term_theme_counter";
    if (-f $counter_file){
        open (INFILE, "< $counter_file");
        my @contents = <INFILE>;
        close INFILE;
        $counter = @contents[0];
    }else{
        open (OUTFILE, "> $counter_file");
        print OUTFILE $counter; 
        close OUTFILE;
    }

    $counter++;
    if ($counter > 10){
        $counter = 1;
    }   
        open (OUTFILE, "> $counter_file");
        print OUTFILE "$counter\n";
        close OUTFILE;

    use Cwd 'abs_path';
    my $pwd = abs_path();#expands /cadtools to /data/mmc/emc/cadtools_lnx/cadtoolsmy 
    my $title_path = ""; 

    ### first of all pull out the "." if there is one...
    if ($temp_argv =~ m/(\s+)(\.)(\s+)/){
        my $arg = ..;
        my $val = ;
        $temp_argv =~s/\Q$arg\E/ /;                     #<- remove the arg from the temp_argv
        unless ($temp_argv =~ m/--working_directory/){
            $working_directory = "--working-directory=$pwd";#<- #<- set the new working dir
        }
        $title_path = $pwd;
    #}elsif ($temp_argv =~ m/(\s+)(\S+)(\s+)/ and -d ){
    }elsif ($temp_argv =~ m/(\s+)((?!-)\S+)(\s+)/ and -d ){
        my $arg = ..;
        my $val = ;
        $val = abs_path($val);
        $temp_argv =~s/\Q$arg\E/ /; 
        unless ($temp_argv =~ m/--working_directory/){
            $working_directory = "--working-directory=$val";
        }
        $title_path = $val;
    }elsif ($temp_argv =~ m/(\s+)(--?dir=)(\S+)(\s+)/ and -d ){# and -d ){
        my $arg = ...;
        my $val = ;
        $val = abs_path($val);
        $temp_argv =~s/\Q$arg\E/ /; 
        unless ($temp_argv =~ m/--working_directory/){
            $working_directory = "--working-directory=$val";
        }
        $title_path = $val;
    }elsif($temp_argv !~ m/--working_directory/){
        $working_directory = "--working-directory=$home";
        $title_path = "$home";
    }

    if($temp_argv =~ m/(\s+)(--?geometry=)(\S+)(\s+)/){
        $geometry = ;
        my $arg = ...;
        $temp_argv =~s/\Q$arg\E/ /; 
    }
    if($temp_argv =~ m/(\s+)(--?window-with-profile=)(\S+)(\s+)/){
        $window_with_profile = ;
        my $arg = ...;
        $temp_argv =~s/\Q$arg\E/ /; 
    }
    if($temp_argv =~ m/(\s+)(--?zoom=)(\S+)(\s+)/){
        $zoom = ;
        my $arg = ...;
        $temp_argv =~s/\Q$arg\E/ /; 
    }
    if($temp_argv =~ m/(\s+)(--?h)(elp)?(\s+)/){
        &usage(); exit;
    }

    if (!$geometry){
        $geometry = "--geometry=150x30+180+500";
    }else{
        $geometry = "--geometry=$geometry";
    }
    if (!$zoom){
        $zoom = "--zoom=1";
        ### some machines have a small zoom by default and so you can adjust it here for different machines if you want.
    }else{
        $zoom = "--zoom=$zoom";
    }
    if (!$window_with_profile){
        ### if gnome themes arent working on your machine, you may have to comment the following line out...
        $window_with_profile = "--window-with-profile=theme$counter";
    }else{
        $window_with_profile = "--window-with-profile=$window_with_profile";
    }

    my $title = "--title=$title_path";

    my $cmd = "gnome-terminal $window_with_profile $geometry $zoom $working_directory $temp_argv $title &"; #--sm-client-id=greend12

    print "$cmd\n";
    system($cmd);
    
por Damian Green 22.05.2013 / 05:43
0

No Ubuntu 12.10 (não tenho certeza sobre versões anteriores) existe a seguinte linha no padrão .bashrc:

If this is an xterm set the title to [email protected]:dir
 case "$TERM" in
 xterm*|rxvt*)
 PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\[email protected]\h: \w\a\]$PS1"
;;
  *)
;;
esac
Portanto, para ter o título no formulário desejado, basta editar o valor de PS1 nessa parte. Se você quiser, por exemplo, ter o título como o nome do diretório atual, basta alterar \[email protected]\h: to \w to \W

    
por ziulfer 13.06.2013 / 16:43