Kabuk modunda ve terim modunda PWD değiştiğinde varsayılan dizini otomatik olarak güncelle


12

default-directoryÇalışma dizini değişirse shell-modeve güncellenmesine neden olan herhangi bir seçenek veya paket var term-modemı? Yani kullanırken cd, ama çözüm sadece bu belirli komutu ve belki birkaç diğerlerini aramaktan daha sağlam olmalı - aslında $PWDher komuttan sonra değerini kontrol etmeliyim diye düşünüyorum.

Daha da önemlisi , bir yerel makineyle ilk olarak oluşturulan bir arabellek shell-modeveya term-modearabellekten uzaktaki bir makineye bağlanırken de çalışması gerekir default-directory. Bu gerçekten ihtiyacım olan özellik: programlı olarak bu tür terminallere yazdığım komutların uzak bir makinede çalıştırılıp çalıştırılmadığını söyleyebilmek. Bunu elde default-directoryetmenin bir yolu varsa, bu bilgiyi uygun bir şekilde ayarlanmış ve şekil olarak almak istiyorum, bunu yapan araç yukarıda açıklandığı gibi yerel olarak da işe yarayacaktır.


Baktın mı dirtrack-mode? Ne istersen yapabilir bir kanca var.
— J David Smith

Yanıtlar:


12

Bence sorunuzun ilk kısmı ile yapılabilir dirtrack-mode. İlk olarak, kabuk isteminizi mevcut çalışma dizinini içerecek şekilde ayarlarsınız. Ardından, nasıl dirtrack-listayıklanacağını söyleyen bir normal ifadeye ayarlayın dirtrack-mode. Örnek: PS1Bash'te şu şekilde ayarladım :

export PS1="[\h:\w] $ "

Emacs I'de belirlenen dirtrack-listve açın dirtrack-mode:

(set-variable 'dirtrack-list '("^.*[^ ]+:\\(.*\\)]" 1 nil))
(dirtrack-mode 1)

( Bu harika blog yayınından alınmıştır .)

Bundan sonra, dizinleri istediğim gibi değiştirebilirim ve default-directoryilerledikçe değişir. Bu aynı zamanda bir kabukta, çalışır, ben SSH ben istemi aynı şekilde kurdum uzak makineye - cd /etc/apache2uzaktan makinede, değiştirir default-directoryiçin /etc/apache2. Ancak, bu olduğuna yerel - uzak makinenin durumunda, default-directoryhala kümesi olacak /etc/apache2üzerinde yerel makinede.

Sorunuzun ikinci bölümünü anlarsam, SSHing'i başka bir makineye alırkenki default-directorygibi bir şeye ayarlanmak istersiniz remote-machine:/etc/apache2. Kullanırken ssh-el , Çalıştırabileceğiniz ssh-directory-tracking-modebu işi yapmak için. Örneğin, çalıştırırsam M-x ssh, cd'ye /etc/apache2, sonra da çalıştırırsam C-x C-f, gördüğüm komut istemi:

Find Files or Url: /scp:aardvark@remote-machine:/etc/apache2

'Mx ssh-directory-tracking-mode' öğesini elle çalıştırabilirsiniz, ancak ssh modu için bir kanca olarak ayarlamak daha uygundur:

(setq ssh-mode-hook 'ssh-directory-tracking-mode)

Daha fazla bilgi:


2
Mükemmel cevap, teşekkürler! Aslında bununla ilgileniyorum çünkü yazdığım bir paket bunu arzu edecek özelliklerde büyüdü. Bu var with-editorMagit bir sonraki sürümünde tarafından kullanılacağı. Magit kendisi with-editor's shell-mode/ term-mode-support kullanmaz , bu yüzden muhtemelen sürümden önce bunu entegre etmeyeceğim. Ancak verdiğiniz bilgiler, Magit sürümüyle işim bittiğinde ve başka şeylere tekrar odaklanabildiğimde bunu çok daha kolay hale getirecek.
— tarsius

İşte başlamak için nasıl with-editorMagit dışından: emacs.stackexchange.com/questions/27/... . Ve bu soruyu sormama neden olan Magit sorunu: github.com/magit/magit/issues/1638 .
— tarsius
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.