Como posso abrir um novo terminal no mesmo diretório do último usado a partir de um keybind de gerenciador de janelas?

21

Estou usando um gerenciador de janelas lado a lado e mudei de gnome-terminal com várias guias para várias urxvt instâncias gerenciadas pelo gerenciador de janelas. Um dos recursos que eu sinto falta é a capacidade de abrir um novo terminal que padroniza o diretório de trabalho do último.

Resumindo: Eu preciso de uma maneira de abrir um novo urxvt (bash) cujo padrão é $ PWD do último usado.

A única solução que me vem à mente é salvar o caminho atual em cada cd com algo assim:

echo $PWD > ~/.last_dir

e restaure o caminho no novo terminal desta forma:

cd 'cat ~/.last_dir'

Eu posso criar o segundo comando em .bashrc , mas não sei como executar o primeiro em cada alteração de diretório:)

Qualquer solução mais simples que não envolva screen ou tmux de uso é bem-vinda.

    
por Luca 23.02.2012 / 19:20

6 respostas

7

Eu vejo três soluções usando .last_dir . Você pode colocar o echo $PWD > ~/.last_dir :

  1. Em uma função especial que seria um wrapper para cd :

    function cd_
    {
      [[ -d "$@" ]] || return 1
      echo "$@" > ~/.last_dir
      cd "$@"
    }
    

    Coloque isso no seu ~/.bashrc e, em seguida, use cd_ em vez de cd toda vez que você quiser que seu novo diretório de trabalho seja armazenado.

  2. No seu $PROMPT_COMMAND ( não recomendado ):

    PROMPT_COMMAND="$PROMPT_COMMAND; pwd > ~/.last_dir"
    

    Você pode testar isso diretamente no terminal ou colocá-lo em ~/.bashrc . Essa solução, no entanto, aciona uma gravação em disco toda vez que o prompt aparece, o que pode causar problemas - mas, por outro lado, .last_dir conteria o diretório atual, não importando como você chegou lá.

  3. Em um script de extensão perl personalizado para rxvt . Eu nunca criei um, mas você pode encontrar alguns exemplos na Web.

por 23.02.2012 / 19:48
12

Atualmente, estou usando esta versão da solução nº 1

# save path on cd
function cd {
    builtin cd $@
    pwd > ~/.last_dir
}

# restore last saved path
if [ -f ~/.last_dir ]
    then cd 'cat ~/.last_dir'
fi

dentro do meu .zshrc

    
por 18.05.2012 / 16:22
9

Isso é realmente muito trivial; se você executar urxvt dentro de sua janela urxvt existente, a nova janela estará no mesmo diretório. Eu tenho dup alias para urxvt & por esse motivo. Se você quiser vincular a uma tecla de atalho, você pode usar o comando bind do bash. Por exemplo, para ligá-lo a F1 :

$ bind '"\e[11~": "urxvt &\n"'
    
por 23.02.2012 / 19:42
3

Basta adicionar . /etc/profile.d/vte.sh no seu ~/.bashrc para obter o mesmo recurso

    
por 02.10.2013 / 11:28
3

Claro que é uma abordagem de trabalho para modificar o comportamento de cd , mas eu gostaria de mostrar uma solução mais simples. No homem bash (1) , descobri que se um

Meu ~/.bash_logout é muito simples:

echo $PWD >~/.lastdir

E em algum lugar no meu .bashrc , coloquei esta linha:

[ -r ~/.lastdir ] && cd $(<~/.lastdir)

Espero que isso ajude um pouco!

    
por 22.07.2014 / 09:41
1

Muitas vezes eu uso várias janelas de terminal de uma só vez, cada uma com várias abas. Por exemplo: uma janela para guias de desenvolvimento de código-fonte, uma janela para arquivos de látex, uma janela para execução e script de R, etc. Dentro de uma janela, eu quero que um novo terminal tabulado mude para o diretório que é usado por último naquela janela em particular (isso costumava funcionar no passado, mas com a nova versão do gnome, de alguma forma não funciona). A solução suja a seguir funciona bem para mim. Eu coloquei isso em .bashrc.

dirfilename="/tmp/.lastdir-$WINDOWID"
[ -r "$dirfilename" ] &&  {
    savdir='cat $dirfilename'
    cd "$savdir"
}

function cd ()
{
    builtin cd "$@"
    echo $PWD > $dirfilename
}
    
por 20.01.2015 / 17:01