Как установить заголовок активного gnome-терминала из командной строки? [duplicate]

Есть ли способ установить заголовок gnome-терминала из самого терминала без необходимости щелкать правой кнопкой мыши на вкладке. Что-то вроде:

active-terminal --title "Foo"

Ранее был смежный вопрос с ответом, который почти позволяет это сделать: Как изменить заголовок Gnome-Terminal?, но это не устанавливает заголовок вкладки gnome-terminal, только заголовок окна.

26
задан 13 April 2017 в 15:23

3 ответа

Заголовок терминала будет "Новое заголовок терминала":

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

Скорее всего, вам также придется изменить переменную окружения PS1, сначала, иначе ваши изменения не появятся, так как заголовок будет сбрасываться после каждой команды. По умолчанию .bashrc, который поставляется с Ubuntu, содержит следующую строку:

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

... код "\e]0;" говорит ему записывать все до "\a" как в свойствах заголовка, так и в свойствах имени иконки. Вам нужно удалить это и установить что-то вроде этого (т.е. без \e]0;" код):

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

Тогда любые изменения, которые вы сделаете с помощью вышеуказанной эхо-команды, изменят заголовок терминала. Если вы собираетесь часто использовать это, вы можете бросить это в функцию в вашем ~/.bashrc файле:

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

Тогда вы можете просто установить заголовок в "kittens" из командной строки, сделав:

set_term_title kittens

(Вы должны перезапустить bash после редактирования .bashrc, чтобы ваши изменения вступили в силу)

47
ответ дан 13 April 2017 в 15:23

Объявления функций работают не во всех оболочках, поэтому другой подход состоит в объявлении псевдонима следующим образом:

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

Эта команда, в частности, приводит к изменению заголовка на любой из pwd.

Конечно, вы захотите инициализировать заголовок при запуске терминала, поэтому не забудьте включить gnome-terminal --title.

Я использую Perl-скрипт, который помогает мне сначала определить все значения аргументов, а затем он вызывает новый терминал, например:

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

Но как вы хотите инициализировать эти значения, зависит от вас ...

Добро пожаловать, чтобы взять следующий код и настроить его для личного использования, если хотите:

    #!/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
ответ дан 13 April 2017 в 15:23

אין ובונטו 12.10 (איך בין נישט זיכער וועגן פריערדיקע ווערסיעס) איז די ווייַטערדיקע שורה אין פעליקייַט. באַשרק:

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

דעריבער, צו האָבן דעם טיטל אין די פאָרעם איר ווילט, איר נאָר האָבן צו רעדאַגירן די ווערט פון PS1 אין דעם טייל. אויב איר ווילט, למשל, צו האָבן דעם טיטל ווי דער נאָמען פון דעם קראַנט וועגווייַזער, נאָר טוישן \ u @ \ h: צו \ w צו \ W

-1
ответ дан 13 April 2017 в 15:23

Другие вопросы по тегам:

Похожие вопросы: