Yeni bir terminali, son kullanılan terminalin aynı dizininde, bir pencere yöneticisi anahtarlığından nasıl açabilirim?


25

Döşeme penceresi yöneticisi kullanıyorum ve gnome-terminalbirden çok sekmeyle urxvtpencere yöneticisi tarafından yönetilen birden çok örneğe geçtim . Kaçırdığım özelliklerden biri, sonuncunun çalışma dizinine varsayılan olan yeni bir terminal açma yeteneğidir.

Kısacası: En son kullanılanın $ PWD'si olan yeni bir urxvt (bash) açmanın bir yoluna ihtiyacım var.

Aklıma gelen tek çözüm, şu anki yolu cdböyle bir şeyle kurtarmak;

echo $PWD > ~/.last_dir

ve yeni terminaldeki yolu şu şekilde geri yükleyin:

cd `cat ~/.last_dir`

İkinci komutu girebilirim .bashrcama ilk dizinde yapılan değişikliklerden birincisini nasıl çalıştıracağımı bilmiyorum :)

Herhangi bir basit çözüm içermeyen screenveya tmuxkullanımı açıktır.


tabbedPerl uzantısını mı kullanıyorsunuz urxvt?
rozcietrzewiacz

Sekme yok, WM
Luca

Yanıtlar:


9

Kullanarak üç çözüm görüyorum .last_dir. İkisini de yerleştirebilirsiniz echo $PWD > ~/.last_dir:

  1. Bir sarmalayıcı olacak özel bir fonksiyonda cd:

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

    Bunu içine yerleştirin ~/.bashrcve cd_yeni çalışma dizininizin saklanmasını istediğiniz her defasında cd yerine kullanın .

  2. Sizde $PROMPT_COMMAND( önerilmez ):

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

    Bunu doğrudan terminalden test edebilir veya yerleştirebilirsiniz ~/.bashrc. Bununla birlikte, bu çözüm, istem görüntülendiğinde, soruna neden olabilecek bir disk yazmasını tetikler - ancak diğer yandan, .last_diroraya nasıl giderseniz gidin güncel dizini de içerecektir.

  3. Özel bir olarak perl uzatma komut dosyası için rxvt. Hiç kendimden bir tane yaratmadım, ancak web üzerinde epeyce örnek bulabilirsiniz.


PROMPT_COMMAND aradığım şey buydu. Performansı etkilemeyeceği umuduyla bu çözümü deneyeceğim.
Luca,

Açıkçası, bu çok kaba bir yol. Şahsen, ben Michael'ın çözümünü en çok seviyorum :)
rozcietrzewiacz

1
Terminal dışına çıkarılması gerekiyorsa perl uzatma yolunu seviyorum; o içine bir şey hack daha süpürge gibi görünüyor PROMPT_COMMAND, tüm zamanların en çok istismar edilen ortam değişkenleri birini
Michael Mrozek

Görünüşe göre $ PWD sadece ilk defa değerlendirildi
Luca

@ Aeonah @ aa ... Üzgünüm. Sorun PROMPT_COMMAND'ın nasıl alıntılandığı ile ilgilidir. (Daha doğrusu, nasıl $PWDoldu değil alıntılanan.) Beni ... Bu Orada düzeltelim. Bunu yapmalı.
rozcietrzewiacz

13

Şu anda 1 numaralı çözümün bu sürümünü kullanıyorum

# 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

içimde .zshrc


bende 1. çözüm kullanarak ve eklemek ediyorum trap "[ -f ~/.last_dir ] && rm ~/.last_dir" EXITben yeni bir sekme açtığınızda haricinde evimde hep başlamak istiyorum
rkmax

auto_cdZsh özelliğini kullanıyorsanız bu işe yaramaz . Zsh'ın
jonleighton

12

Bu aslında oldukça önemsizdir; koşarsan urxvtvarolan içinden urxvtpencere yeni pencere aynı dizinde olacak. Bu nedenle duptakma ad verdim urxvt &. Kısayol tuşlarına bağlanmasını istiyorsanız, bash bindkomutunu kullanabilirsiniz . Örneğin, bağlamak için F1:

$ bind '"\e[11~": "urxvt &\n"'

Bahşiş için teşekkürler. Terminal çocuk süreçlerinin devleti koruduğunu biliyordum, ancak bash komutunun anahtarını bağlayabileceğinizi bilmiyordum. Bunu, terminale odaklanmaktan kaçınmak için WM'den yapmak istiyorum.
Luca,

Bunu sevdim. Hiçbir disk yazmaz ve yeni terminali açmak üzereyken tek işlem gerçekleşir.
rozcietrzewiacz

Değiştireceğim tek şey ( urxvt & ) &>/dev/nullsadece arka plan yerine kullanmak .
rozcietrzewiacz

Bu çözüm harika ve daha esnek ama biri terminale, diğeriyse yeni bir tane çatallamak için 2 bağlama kullanmak istemiyorum.
Luca,

4

Sadece eklemek . /etc/profile.d/vte.shSepetinde ~/.bashrcaynı özelliği almak için


Bununla birlikte, bu çalışma neden -1'i rahatsız ediyor?
Abdillah

Bu işe yarıyor ve aslında gnome-terminal devs’in
Ajax

4

Elbette cddavranışını değiştirmek için çalışan bir yaklaşım , ancak daha basit bir çözüm göstermek istiyorum. Gelen adam bash (1) Ben interaktif eğer bulundu çıkar o ishal ~/.bash_logoutvarsa. Böylece yolu cdson yolun her çağrısında saklamak yerine çıkışta kaydedebilirsiniz.

Benim ~/.bash_logoutçok basit:

echo $PWD >~/.lastdir

İçimdeki bir yere .bashrcbu çizgiyi yerleştirdim:

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

1
Sadece çıkışta .bash_logoutçalışan, sadece login shellsher zaman böyle olmadığını unutmayın .
henfiber

1
Alternatif olarak, bashtrap "echo $PWD > ~/.lastdir" EXIT"
konumdan

@henfiber Yorumlarınız için teşekkürler! Ben bu durumda kabuk bir giriş kabuğu olduğunu düşünüyorum, bu yüzden bu düzgün davranacak. Öte yandan, trapyaklaşım da güzel, hoşuma gitti!
TrueY

2

Çok sık olarak her seferinde birden fazla sekme bulunan birden fazla terminal penceresi kullanıyorum. Örneğin: kaynak kod geliştirme sekmeleri için bir pencere, lateks dosyalar için bir pencere, R yürütme ve komut dosyası için bir pencere, vb. (Bu geçmişte çalışmak için kullanılır, ancak yeni GNOME sürümü ile, bir şekilde çalışmıyor). Aşağıdaki kirli çözüm benim için iyi çalışıyor. Bunu .bashrc içine koydum.

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

function cd ()
{
    builtin cd "$@"
    echo $PWD > $dirfilename
}

Bu mükemmel ... wohoo! Teşekkürler.
Beşiği
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.