2012-07-23 25 views
5

Làm thế nào tôi có thể nói với emacs không bật bộ đệm *Shell Command Output* khi gọi lệnh trình bao như thế này?Làm cách nào để bộ đệm * đầu ra lệnh * được giữ trong nền?

(shell-command MY_COMMAND) 

Hiện tại emacs chia cửa sổ hiện tại thành hai, hiển thị bộ đệm đầu ra (hầu hết không liên quan). Đối với tôi nó sẽ là hoàn toàn đủ nếu tôi có thể tìm kiếm nó sau này nếu tôi cảm thấy thích nó.

+0

'shell-command' là một hàm ưa thích sử dụng' start-process' - hàm thứ hai cung cấp nhiều điều khiển hơn - đây là trích đoạn từ chuỗi tài liệu ' shell-command': 'Trong Elisp, bạn sẽ thường xuyên được phục vụ tốt hơn bằng cách gọi 'call-process' hoặc 'start-process' trực tiếp, vì nó cung cấp nhiều quyền kiểm soát hơn và không áp dụng việc sử dụng shell (với nhu cầu báo giá đối số) .' Bằng cách sử dụng quá trình bắt đầu, bạn cũng có thể đặt bộ đệm đầu ra thành 'nil'. – lawlist

Trả lời

7

Có thể sử dụng shell-command là gốc rễ của vấn đề. Tôi nghĩ rằng tôi tìm thấy một giải pháp với call-process mà làm việc, mặc dù có thể có một cách thanh lịch hơn:

(call-process-shell-command 
"cat ~/.emacs.d/init.el" 
nil "*Shell Command Output*" t 
) 
8

shell-command lấy đối số tùy chọn OUTPUT-BUFFER nơi bạn có thể chỉ định bộ đệm để xuất. Nếu nó là t (thực sự không phải là tên đệm và không phải là nil), nó sẽ là đầu ra trong bộ đệm hiện tại. Vì vậy, chúng tôi quấn này thành một with-temp-buffer và sẽ không bao giờ phải bận tâm với nó:

(with-temp-buffer 
    (shell-command "cat ~/.emacs.d/init.el" t)) 
+0

Có, nhưng điều này vẫn bật lên bộ đệm '* Tin nhắn *'. – quazgar

+0

@quazgar Oh, nó đã không làm điều đó cho kết quả đầu ra nhỏ trong các bài kiểm tra của tôi. Tôi sẽ cố gắng để hack xung quanh. – pmr

+0

Có, trong khi một bộ đệm tạm thời đơn giản không hiển thị bất kỳ đầu ra nào cả, tôi nghĩ điều này đủ điều kiện là "giải quyết sự cố". – quazgar

1

chức năng tiện ích này có thể giúp đỡ. Nó trả về giá trị thực tế của lệnh shell

(defun shell-command-as-string (cmd) 
    (with-temp-buffer 
    (shell-command-on-region (point-min) (point-max) 
          cmd t) 
    (buffer-string))) 
Các vấn đề liên quan