Aggiorna automaticamente la directory predefinita quando PWD cambia in modalità shell e modalità termine


12

Ci sono opzioni o pacchetti che causano default-directoryl'aggiornamento se la directory di lavoro cambia in shell-modee term-mode? Vale a dire quando si utilizza cd, ma la soluzione dovrebbe essere più solida di quella di cercare questo particolare comando e forse alcuni altri - dovrebbe effettivamente controllare il valore di $PWDdopo ogni comando, penso.

Ancora più importante, tuttavia, dovrebbe funzionare anche quando ci si connette a una macchina remota dall'interno di un buffer shell-modeo term-modeche è stato creato inizialmente default-directorycome directory locale. Questa è in realtà la funzione di cui ho veramente bisogno: essere in grado di dire a livello di codice se i comandi che scrivo in tali terminali sono eseguiti su una macchina remota. Vorrei ottenere queste informazioni sotto forma di un set default-directorye di una figura correttamente se esiste un modo per ottenerle, quindi lo strumento che fa ciò funzionerebbe anche localmente come descritto sopra.


Hai guardato dentro dirtrack-mode? Ha un gancio che può fare quello che vuoi.
J David Smith,

Risposte:


12

Penso che la prima parte della tua domanda possa essere risolta dirtrack-mode. Innanzitutto, imposta il prompt della shell per includere la directory di lavoro corrente. Successivamente, si imposta dirtrack-listun regex che dice dirtrack-modecome estrarlo. Esempio: ho impostato PS1in Bash per essere questo:

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

e in Emacs ho impostato dirtrack-liste acceso dirtrack-mode:

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

(Tratto da questo fantastico post sul blog .)

Dopodiché, sono in grado di cambiare directory a piacimento, e default-directorycambia mentre vado. Questo funziona anche se, in un guscio, ho SSH ad una macchina remota in cui ho impostato la richiesta allo stesso modo - cd /etc/apache2, sulla macchina remota, cambia default-directorya /etc/apache2. Si noti, tuttavia, che questo è locale - nel caso del computer remoto, default-directoryverrà comunque impostato /etc/apache2sul computer locale .

Se capisco la seconda parte della tua domanda, vuoi default-directoryessere impostato su qualcosa come remote-machine:/etc/apache2quando SSHing su un'altra macchina. Quando si utilizza ssh-el , è possibile eseguire ssh-directory-tracking-modeper farlo funzionare. Ad esempio, se corro M-x ssh, cd to /etc/apache2, quindi corro C-x C-f, il prompt che vedo è:

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

Puoi eseguire 'Mx ssh-directory-tracking-mode` a mano, ma è più conveniente impostarlo come hook per ssh-mode:

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

Maggiori informazioni:


2
Ottima risposta, grazie! In realtà sono interessato a questo perché un pacchetto che ho scritto ha sviluppato funzionalità che lo renderanno desiderabile. È quello with-editorche verrà utilizzato dalla prossima versione di Magit. Magit per sé non fa uso di with-editor's shell-mode/ term-mode-Support, quindi probabilmente non integrare questo prima del rilascio. Ma le informazioni che hai fornito renderanno molto più semplice farlo, una volta che avrò finito con la versione Magit e potrò concentrarmi di nuovo su altre cose.
tarsius

Ecco come iniziare with-editorfuori da Magit: emacs.stackexchange.com/questions/27/… . E la questione Magit che mi porta a porre questa domanda: github.com/magit/magit/issues/1638 .
tarsius
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.