2011-02-02 27 views
11

Tôi muốn có một lệnh make-shells trong các emacs sẽ mở một số bộ đệm emacs-shell, mỗi bộ đệm có thư mục làm việc riêng của nó. Ý tưởng là đối với mỗi dự án tôi đang làm việc, tôi có một trình bao bắt đầu trong thư mục của dự án đó, vì vậy tôi có thể dễ dàng chuyển đổi giữa chúng.Mở vỏ trong các emacs với một thư mục làm việc đã cho

Hiện nay tôi có mã này:

(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)) 

này là khá xấu xí, mặc dù, và một nửa thời gian (dirs) không nhặt con đường đúng, vì vậy phá vỡ hoàn tab cho đến khi tôi chạy lại nó bằng tay. Có cách tích hợp để thiết lập thư mục làm việc hiện tại của vỏ emacs không? Hoặc một cái gì đó như CEDET (cộng với ít phụ thuộc vào chế độ shell so với emacs) là một giải pháp tốt hơn cho điều này?

Trả lời

10

Tôi gặp phải sự cố tương tự với theo dõi thư mục hiện tại do Emac cung cấp, vì vậy tôi đã viết một giải pháp khắc phục sự cố một lần và mãi mãi.

Khám phá here.

Phiên bản ngắn của những gì nó làm là bạn sửa đổi dấu nhắc trình bao để đưa đường dẫn đầy đủ vào thư mục hiện tại (chỉ khi chạy bên trong Emacs) và bộ đệm vỏ Emacs sẽ sử dụng.

Điều này có nghĩa là bạn không bao giờ phải làm M-x dirs một lần nữa.

Ngoài ra còn có gói dirtrack (được giao bằng Emacs) thực hiện tương tự.

Tôi thích phiên bản của mình tốt hơn vì nó xóa đường dẫn khỏi lời nhắc. Tôi không muốn nhìn thấy toàn bộ đường dẫn trong lời nhắc của tôi vì thư mục hiện tại của tôi thường rất dài.

Khi bạn sử dụng một trong hai giải pháp trên, bạn có thể đơn giản hóa shell-dir thói quen của bạn là:

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

hơn Một câu trả lời ... Tôi thấy có một chiều (trên Linux) để làm cho hình Emacs ra khỏi thư mục hiện tại đúng cách, bằng cách sử dụng hệ thống tập tin/proc.

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

Bằng cách đó, bạn chỉ cần khởi động shell trong bất cứ thư mục và Emacs sẽ tự động tìm nó ra và nhận được bằng tab hoàn thành, vv đúng.

+0

Hoạt động như một sự quyến rũ! – dfri

Các vấn đề liên quan