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

23

Existe-t-il un moyen de définir le titre du terminal gnome depuis le terminal lui-même sans devoir cliquer avec le bouton droit 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 uniquement le titre de la fenêtre.

    
posée Kit Sunde 19.03.2011 - 04:04
la source

3 réponses

43

Ce qui suit définira le titre du terminal sur "Nouveau titre de terminal":

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

Vous devrez probablement aussi changer la variable d'environnement PS1, sinon vos modifications ne seront pas affichées car cela réinitialisera le titre après chaque commande. Le fichier .bashrc par défaut fourni avec Ubuntu contient la ligne suivante:

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

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

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

Toutes les modifications que vous apportez avec la commande echo ci-dessus modifieront le titre du terminal. Si vous allez l'utiliser beaucoup, vous pouvez le lancer dans une fonction de votre fichier ~ / .bashrc:

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

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

set_term_title kittens

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

    
réponse donnée J. Taylor 19.03.2011 - 06:37
la source
1

Les déclarations de fonctions ne fonctionnent pas dans tous les shells, donc une autre approche consiste à déclarer un alias comme ceci:

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

Cette commande en particulier fait en sorte que le titre change selon 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 des arguments, 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 de décider ...

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 = ..;
        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);
    
réponse donnée Damian Green 22.05.2013 - 05:43
la source
0

Dans Ubuntu 12.10 (je ne suis pas sûr des versions précédentes), il y a la ligne suivante dans le fichier par défaut .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

Par conséquent, pour avoir le titre dans la forme que vous souhaitez, il vous suffit de modifier la valeur de PS1 à cette partie. Si vous souhaitez, par exemple, que le titre soit le nom du répertoire en cours, remplacez \[email protected]\h: par \w par \W

    
réponse donnée ziulfer 13.06.2013 - 16:43
la source

Lire d'autres questions sur les étiquettes