Usando screenrc, como posso fazer 'C-a c' abrir uma nova janela no diretório de trabalho da janela atual?

2

Usando o screenrc, como posso fazer C-a c abrir uma nova janela no diretório de trabalho da janela atual? Por padrão, parece abrir a nova janela no diretório de trabalho no momento em que a sessão de tela original é invocada.

    
por Matt Joiner 02.06.2011 / 07:03

3 respostas

0

Com base em isso SO resposta , eu acho que isso deve funcionar:

bind c stuff "screen -X chdir \$PWD; screen^M"

Vou experimentar no meu shell remoto e informar se funciona para mim.

edite: Sim, funciona. O primeiro comando "bind" não é realmente necessário.

    
por 02.06.2011 / 07:19
7

Por padrão, screen também vincula C-a C-c para criar uma nova janela, portanto, convém adicionar outra linha ao seu .screenrc para lidar com este caso:

bind c stuff "screen -X chdir \$PWD;screen^M"
bind ^c stuff "screen -X chdir \$PWD;screen^M"

Esclarecimento sobre como este comando funciona:

  1. stuff coloca sua sequência de argumentos diretamente na janela atual :

    Command: stuff string

    Stuff the string string in the input buffer of the current window.

  2. screen -X chdir \$PWD diz à tela para executar o comando chdir , que altera seu diretório operacional (onde as novas janelas de tela serão iniciadas) para a variável de ambiente $PWD , que contém o diretório de trabalho atual. Isso é impossível fazer dentro de .screenrc sozinho; portanto, manipular o buffer de entrada com stuff é necessário.

  3. O comando screen dentro de um screen já em execução cria uma nova janela como C-a C-c .

  4. ^M gera um retorno de carro, que informa ao shell para executar o comando que está agora no buffer. Sem isso, você teria que pressionar enter (ou C-m , é claro).

Consequentemente, essa ligação deixará essa informação na janela em que você a executa:

user@host:~/directory$ screen -X chdir $PWD;screen
user@host:~/directory$
    
por 02.06.2011 / 08:36
0

Veja uma cópia de minha própria resposta para uma pergunta semelhante em stackoverflow.com :

To make screen open a new tab/window in the current directory, you can add the following code to your .screenrc file:

bind c stuff "screen bash^M"

This will cause the Ctrl + a c command to open new tabs/windows in the directory of the current window/tab.

Note: You must ensure that screen does not start a login shell by default because that will cause the shell start in the default directory for a login shell rather than the current directory. This means that In your .screenrc file, your shell command cannot include a dash ('-') character.

For example, this is wrong (i.e. it will start a login shell):

shell -$SHELL

But this is right (i.e. it will not start a login shell):

shell $SHELL

Note 2: Unfortunately, this method does not behave exactly like the default new window/tab command in screen. Instead, it writes the command to the current window and executes it to create the new window/tab, so it will not work during some long running shell process. In other words, this keyboard shortcut can only be executed whenever normal shell commands can be executed.

Note 3: If you want screen to open new windows/tabs in the current directory and open a login shell, you can add the following code to your .screenrc file:

bind c stuff "screen bash -l^M"
    
por 20.10.2015 / 18:39