2012-08-23 38 views
18

Tôi đang chạy đầu ra của một ứng dụng trong bộ đệm emacs bằng cách sử dụng lệnh shell.Làm cách nào để tăng tốc độ phát ra emacs từ lệnh shell không đồng bộ?

(shell-command "verbose-app &" "*verbose-app*") 

Vấn đề là lệnh này cực kỳ dài dòng. Vì vậy, nhiều như vậy, đôi khi nó mất vài giây cho bộ đệm emacs để bắt kịp. Nó kéo dài vài giây với đầu ra thực tế.

Có cách nào tôi có thể tăng tốc độ cuộn đầu ra bằng cách vô hiệu hóa thứ gì đó không? Giống như đánh dấu hoặc so khớp cú pháp của regex?

Để tham khảo trong tương lai:

Ứng dụng tiết là adb logcat. Tôi đã thay đổi chức năng hiện tại của tôi:

(defun adb-logcat() 
    (interactive) 
    (shell-command "adb logcat -v threadtime&" "*adb-logcat*") 
    (pop-to-buffer "*adb-logcat*") 
    (buffer-disable-undo)) 

Để sau:

(defun adb-logcat() 
    (interactive) 
    (start-process "*adb-logcat*" "*adb-logcat*" "/bin/sh" "-c" "adb logcat -v threadtime") 
    (pop-to-buffer "*adb-logcat*") 
    (buffer-disable-undo)) 

Nó cuộn cách nhanh hơn bây giờ. Yay!

+0

Bạn có thể thử không kích hoạt đầu ra của ứng dụng tiết: http : //stackoverflow.com/a/3466024/265069 – Tom

+0

Tôi đang chạy MacOSX, vì vậy tính năng chặn không khả dụng. – hyperlogic

+0

Tôi không biết Os X, nhưng google nói điều này: http://jubianchi.fr/help/3.Tweaks/unbuffered-processes Nếu nó không hoạt động thì bạn có thể muốn tìm kiếm các lựa chọn thay thế với google – Tom

Trả lời

10

Giống như tài liệu cho biết, shell-command chạy lệnh trong trình bao thấp hơn, ngụ ý shell-mode. Nếu bạn chỉ muốn đầu ra và không có tính năng nào, hãy chạy lệnh với start-process có thể gần hơn với những gì bạn muốn.

(start-process "*verbose-app*" "*verbose-app*" 
"/bin/sh" "-c" "verbose-app") 

Đưa hàm này vào hàm không được quá khó. Bạn có thể muốn xem cách shell-command triển khai các lệnh không đồng bộ; ví dụ, nó sẽ hỏi liệu nó có nên chấm dứt một tiến trình hiện có nếu bạn cố tạo một tiến trình khi một cái khác đã tồn tại. http://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/simple.el#n2447 có thể là điểm khởi đầu tốt. (Trong trường hợp liên kết bị hỏng, đây là liên kết đến bên trong defun shell-command, trỏ tới aa nhận xét về cách xử lý ký hiệu và. Nếu có, lệnh sẽ được chạy không đồng bộ.)

+0

Hmmm. Làm cách nào để sửa liên kết Git trỏ đến HEAD hiện tại kể từ hôm nay? – tripleee

+0

Bạn thưa ngài, hãy chiến thắng! Bây giờ nó nhanh hơn gấp 4 lần. – hyperlogic

0

Nếu lệnh là tiết đó, có sử dụng nào trong việc ghi lại toàn bộ đầu ra trong thời gian thực không? Có lẽ bạn có thể chạy verbose-app > app.log trong nền và sau đó chạy một cái gì đó như while true; do tail -n50 app.log; sleep 1; done trong các emacs để tiếp tục cập nhật bộ đệm để xem một vài dòng cuối cùng của tệp nhật ký. Sau đó khi bạn muốn đầu ra đầy đủ, bạn có thể mở tệp nhật ký trong các emacs.

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