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.