11 votes

Ouvrir un shell dans emacs avec un répertoire de travail donné

Je veux avoir un make-shells dans emacs qui ouvrira un certain nombre de tampons emacs-shell, chacun avec son propre répertoire de travail. L'idée est que pour chaque projet sur lequel je travaille, j'ai un shell qui démarre dans le répertoire de ce projet, de sorte que je peux facilement passer de l'un à l'autre.

Actuellement, j'ai ce code :

(defun shell-dir (name dir)
  (interactive "sShell name: \nDDirectory: ")
  (shell name)
  (switch-to-buffer name)
  (comint-send-string (current-buffer) (concat "cd " dir "\r"))
  (sleep-for 0 10)
  (dirs))

(defun make-shells ()
  (interactive)
  (shell-dir "project1" "~/proj/project1")
  (shell-dir "project2" "~/proj/project2")
  (shell-dir "project3" "~/proj/project3")
  (delete-window))

C'est assez laid, cependant, et la moitié du temps (dirs) ne détecte pas le chemin correct, et la complétion de la tabulation est interrompue jusqu'à ce que je l'exécute à nouveau manuellement. Existe-t-il un moyen intégré de définir le répertoire de travail actuel du shell emacs ? Ou quelque chose comme CEDET (ainsi qu'une moindre dépendance à l'égard du mode shell par rapport au mode emacs) serait une bien meilleure solution ?

12voto

Trey Jackson Points 49816

J'ai rencontré des problèmes similaires avec le suivi du répertoire courant fourni par Emacs, alors j'en ai écrit un qui résout le problème une fois pour toutes.

Consultez le site aquí .

La version courte de ce qu'il fait est que vous modifiez l'invite de l'interpréteur de commandes pour inclure un chemin complet vers le répertoire courant (seulement lorsqu'il est exécuté dans Emacs), et le tampon de l'interpréteur de commandes Emacs l'utilisera.

Cela signifie que vous n'aurez jamais à faire M-x dirs encore.

Il y a aussi le paquet dirtrack (livré avec Emacs) qui fait la même chose.

Je préfère ma version car elle supprime le chemin d'accès de l'invite. Je ne veux pas voir le chemin complet dans mon invite car mon répertoire actuel est souvent très long.

Une fois que vous aurez utilisé l'une des deux solutions ci-dessus, vous pourrez simplifier votre shell-dir la routine à être :

(defun shell-dir (name dir)
  (interactive "sShell name: \nDDirectory: ")
  (let ((default-directory dir))
    (shell name)))

1voto

Alistair Bell Points 345

Une autre réponse... J'ai découvert qu'il y avait un moyen (sous Linux) de faire en sorte qu'Emacs détermine correctement le répertoire courant, en utilisant le système de fichiers /proc.

http://www.emacswiki.org/emacs/ShellDirtrackByProcfs

De cette façon, vous n'avez qu'à démarrer l'interpréteur de commandes dans n'importe quel répertoire et Emacs s'en rendra compte automatiquement et obtiendra la complétion de tabulation, etc. correctement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X