web-dev-qa-db-fra.com

Comment définir le titre du gnome-terminal actif à partir de la ligne de commande?

Existe-t-il un moyen de définir le titre du terminal gnome à partir du terminal même sans avoir à cliquer avec le bouton droit de la souris sur l’onglet. Quelque chose comme:

active-terminal --title "Foo"

Il y avait une question connexe précédemment avec une réponse qui vous permet presque de faire ceci: Comment changer le titre de Gnome-Terminal? mais cela ne définit pas le titre de l'onglet gnome-terminal que le titre de la fenêtre.

26
Kit Sunde

Le texte suivant définit le titre du terminal sur "Nouveau titre du terminal":

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

Cependant, vous devrez probablement également modifier la variable d'environnement PS1 d'abord , sinon vos modifications ne seront pas affichées car le titre sera réinitialisé après chaque commande. . Le fichier .bashrc par défaut fourni avec Ubuntu contient la ligne suivante:

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

... le "\ e] 0;" le code lui dit d'écrire tout jusqu'au "\ a" dans les propriétés title et icon-name. Vous devez le supprimer et le configurer comme suit (c'est-à-dire sans le code\e] 0;):

PS1="${debian_chroot:+($debian_chroot)}\u@\h \w\a$ "

Ensuite, toutes les modifications que vous apportez avec la commande echo ci-dessus changeront le titre du terminal. Si vous comptez beaucoup l'utiliser, vous pouvez l'inclure dans une fonction de votre fichier ~/.bashrc:

set_term_title(){
   echo -en "\033]0;$1\a"
}

Ensuite, vous pouvez simplement définir le titre sur "chatons" à partir de la ligne de commande en faisant:

set_term_title kittens

(Vous devez cependant redémarrer bash après avoir modifié .bashrc pour que vos modifications prennent effet)

47
J. Taylor

Dans Ubuntu 12.10 (je ne suis pas sûr des versions précédentes), il y a la ligne suivante dans .bashrc par défaut:

If this is an xterm set the title to user@Host:dir
 case "$TERM" in
 xterm*|rxvt*)
 PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
  *)
;;
esac

Par conséquent, pour que le titre se présente sous la forme souhaitée, il vous suffit de modifier la valeur de PS1 dans cette partie. Si vous souhaitez, par exemple, que le titre soit le nom du répertoire en cours, remplacez simplement \u@\h: par \w par \W

0
ziulfer

Les déclarations de fonction ne fonctionnent pas dans tous les shells. Une autre approche consiste à déclarer un alias comme suit:

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

Cette commande en particulier provoque le changement du titre, quel que soit le pwd.

Bien sûr, vous voudrez initialiser le titre lorsque vous démarrez le terminal, alors n'oubliez pas d'inclure gnome-terminal --title.

J'utilise un script Perl pour m'aider à déterminer toutes les valeurs d'argument en premier, puis il appelle un nouveau terminal comme ceci:

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

Mais comment vous voulez initialiser ces valeurs, c'est vous qui décidez ...

Nous vous invitons à prendre le code suivant et à le modifier pour votre usage personnel si vous le souhaitez:

    #!/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 = $1.$2.$3;
        my $val = $2;
        $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 $2){
    }elsif ($temp_argv =~ m/(\s+)((?!-)\S+)(\s+)/ and -d $2){
        my $arg = $1.$2.$3;
        my $val = $2;
        $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 $3){# and -d $2){
        my $arg = $1.$2.$3.$4;
        my $val = $3;
        $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 = $3;
        my $arg = $1.$2.$3.$4;
        $temp_argv =~s/\Q$arg\E/ /; 
    }
    if($temp_argv =~ m/(\s+)(--?window-with-profile=)(\S+)(\s+)/){
        $window_with_profile = $3;
        my $arg = $1.$2.$3.$4;
        $temp_argv =~s/\Q$arg\E/ /; 
    }
    if($temp_argv =~ m/(\s+)(--?zoom=)(\S+)(\s+)/){
        $zoom = $3;
        my $arg = $1.$2.$3.$4;
        $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);
0
Damian Green