Używam menedżera okien kafelkowych i przełączyłem się gnome-terminal
z wieloma kartami na wiele urxvt
instancji zarządzanych przez menedżera okien. Jedną z funkcji, których mi brakuje, jest możliwość otwarcia nowego terminalu, który domyślnie pracuje w katalogu roboczym ostatniego.
W skrócie: Potrzebuję sposobu, aby otworzyć nowy urxvt (bash), który domyślnie ma wartość $ PWD ostatnio używanego.
Jedyne rozwiązanie, jakie przychodzi mi na myśl, to zapisanie bieżącej ścieżki na każdym cd
z takich elementów:
echo $PWD > ~/.last_dir
i przywróć ścieżkę na nowym terminalu w ten sposób:
cd `cat ~/.last_dir`
Mogę podać drugie polecenie, .bashrc
ale nie wiem, jak wykonać pierwsze przy każdej zmianie katalogu :)
Wszelkie prostsze rozwiązania, które nie wymagają screen
ani nie są tmux
użyteczne, są mile widziane.
źródło
tabbed
rozszerzenia perla „ ” dlaurxvt
?Odpowiedzi:
Widzę trzy rozwiązania
.last_dir
. Możesz umieścićecho $PWD > ~/.last_dir
:W specjalnej funkcji, która byłaby opakowaniem dla
cd
:Umieść to w swoim,
~/.bashrc
a następnie używajcd_
zamiast cd za każdym razem, gdy chcesz zapisać nowy katalog roboczy.W twoim
$PROMPT_COMMAND
( niezalecane ):Możesz to przetestować bezpośrednio z terminala lub umieścić w
~/.bashrc
. To rozwiązanie jednak powoduje zapis dysku za każdym razem, gdy pojawia się monit, co może powodować problemy - ale z drugiej strony.last_dir
zawierałby bieżący katalog, bez względu na to, jak się tam dostałeś.W niestandardowym skrypcie rozszerzenia perla dla
rxvt
. Sam nigdy go nie stworzyłem, ale możesz znaleźć sporo przykładów w Internecie.źródło
PROMPT_COMMAND
jednej z najbardziej nadużywanych zmiennych środowiskowych wszechczasów$PWD
to nie było cytowane.) Pozwól mi to naprawić ... Tam. To powinno to zrobić.Obecnie używam tej wersji rozwiązania nr 1
w moim
.zshrc
źródło
trap "[ -f ~/.last_dir ] && rm ~/.last_dir" EXIT
chcę rozpocząć zawsze w moim domu, z wyjątkiem kiedy otworzyć nową kartęauto_cd
funkcji zsh. Okazuje się, że możemy użyć haka, który zapewnia zsh: gist.github.com/jonleighton/1f0b96b49247a07dbaa30fbbe70b34f7To jest właściwie dość trywialne; jeśli uruchomisz
urxvt
z istniejącegourxvt
okna, nowe okno będzie znajdować się w tym samym katalogu. Z tego powodudup
aliasowałem dourxvt &
. Jeśli chcesz powiązać go ze skrótem, możesz użyćbind
polecenia bash . Na przykład, aby powiązać go z F1:źródło
( urxvt & ) &>/dev/null
zamiast tła.Wystarczy dodać
. /etc/profile.d/vte.sh
swoją,~/.bashrc
aby uzyskać tę samą funkcjęźródło
Oczywiście jest to działające podejście do modyfikacji
cd
zachowania, ale chciałbym pokazać prostsze rozwiązanie. W man bash (1) odkryłem, że jeśli interaktywne bash zakończy się, uruchomi się,~/.bash_logout
jeśli istnieje. Zamiast zapisywać ścieżkę przy każdym wywołaniucd
ostatniej ścieżki, można ją zapisać przy wyjściu.Mój
~/.bash_logout
jest bardzo prosty:I gdzieś w moim
.bashrc
linii umieściłem tę linię:źródło
.bash_logout
działa tylko przylogin shells
wyjściu, nie zawsze tak jest.bash
wyjściu z:trap "echo $PWD > ~/.lastdir" EXIT"
trap
podejście jest również fajne, podoba mi się!Bardzo często korzystam z wielu okien terminali jednocześnie, z których każde zawiera wiele kart. Na przykład: jedno okno dla kart rozwoju kodu źródłowego, jedno okno dla plików lateksowych, jedno okno do wykonywania R i skryptów itp. W jednym oknie chcę, aby nowy terminal z kartami zmienił się na katalog używany ostatnio w tym konkretnym oknie (kiedyś działało to w przeszłości, ale w nowej wersji gnome jakoś nie działa). Poniższe brudne rozwiązanie działa dla mnie dobrze. Umieściłem to w .bashrc.
źródło