2008-09-04 29 views
21

Đối với công việc ban ngày của tôi, tôi sống ở Emacs. Hoàn toàn. Tôi cũng đã trở nên khá phụ thuộc vào CScope để giúp tôi tìm những thứ trong mã.Pin Emacs đệm vào cửa sổ (cho cscope)

Thông thường, tôi có 2 cửa sổ trong tích tắc (C-x 3): alt text http://bitthicket.com/files/emacs-2split.JPG

Và tôi sử dụng cửa sổ phù hợp với bộ đệm mã và cửa sổ bên trái cho bộ đệm tìm kiếm cscope. Khi bạn thực hiện tìm kiếm CScope và chọn một kết quả, nó sẽ tự động cập nhật cửa sổ bên phải để hiển thị bộ đệm được gọi bởi kết quả. Điều này là tốt và tốt, ngoại trừ việc nó làm tôi mất chỗ trong một số bộ đệm khác mà tôi đang học. Đôi khi điều này không phải là vấn đề lớn, bởi vì [C-s u] đưa tôi trở lại nơi tôi ở.

Điều gì sẽ là tốt hơn, tuy nhiên, là phải có 3 cửa sổ chia như thế này ([Cx 2] trong cửa sổ bên trái): alt text http://bitthicket.com/files/emacs-3split.jpg

Và có cửa sổ phía dưới bên trái chứa bộ đệm tìm kiếm cscope, và cửa sổ trên cùng bên trái là bộ đệm duy nhất mà CScope từng cập nhật. Bằng cách đó, tôi có thể thấy các tìm kiếm CScope của mình và điều hướng xung quanh mã mà không làm mất bộ đệm mà tôi tập trung vào.

Bất kỳ ai biết cách tôi có thể làm điều đó?

Trả lời

33

Đặt này trong emacs tập tin của bạn:

;; Toggle window dedication 

(defun toggle-window-dedicated() 

"Toggle whether the current active window is dedicated or not" 

(interactive) 

(message 

(if (let (window (get-buffer-window (current-buffer))) 

     (set-window-dedicated-p window 

     (not (window-dedicated-p window)))) 

    "Window '%s' is dedicated" 

    "Window '%s' is normal") 

(current-buffer))) 

Sau đó ràng buộc nó vào một số trọng điểm - Tôi sử dụng phím Pause:

(global-set-key [pause] 'toggle-window-dedicated) 

Và sau đó sử dụng nó để "dành" cửa sổ bạn muốn bị khóa. sau đó cscope chỉ có thể mở các tập tin từ cửa sổ kết quả của nó trong một số cửa sổ KHÁC. Làm việc một nét duyên dáng. Tôi đặc biệt sử dụng nó cho chính xác mục đích này - giữ một tập tin nguồn luôn luôn trên màn hình, trong khi sử dụng cscope trong một bộ đệm thứ hai/cửa sổ, và nhìn vào kết quả cscope trong một phần ba.

+0

tuyệt vời! Tôi biết nó có thể được thực hiện ... Tôi thường chỉ quá ép cho thời gian để khai thác vào api elisp. Cảm ơn! –

+0

Thật tuyệt vời! Tôi gặp phải tình huống tương tự, nhưng nó xảy ra với các hoạt động vc, nó sẽ sử dụng cửa sổ quý giá của tôi. Cảm ơn. – swdev

0

Vâng, tôi quyết định không phải là một con điếm danh tiếng và tự tìm câu trả lời. Tôi nhìn vào cscope.el như được hiển thị trên wiki Emacs, cũng như xcscope.el đi kèm với gói RPM cscope trên RHEL.

Dường như không có cách nào để làm những gì tôi muốn. Cách này có thể chỉnh sửa ELisp bằng cách thêm biến gói như *browse-buffer* hoặc một cái gì đó và chỉ khởi tạo biến đó nếu chưa được khởi tạo lần đầu tiên người dùng thực hiện [C-c C-s g] hoặc bất kỳ thứ gì và luôn có mã kết quả được hiển thị trong *browse-buffer*. Sau đó, người dùng có thể đặt *browse-buffer* bất cứ nơi nào anh ta muốn.

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