2009-02-25 24 views

Trả lời

49

Từ documentation:

 
(get-buffer name) 

Return the buffer named name (a string). 
If there is no live buffer named name, return nil. 
name may also be a buffer; if so, the value is that buffer. 

(get-buffer-create name) 

Return the buffer named name, or create such a buffer and return it. 
A new buffer is created if there is no live buffer named name. 
If name starts with a space, the new buffer does not keep undo information. 
If name is a buffer instead of a string, then it is the value returned. 
The value is never nil. 
+0

Không nên get-đệm được sử dụng như một tham số để bufferp để xác minh nó thực sự là một bộ đệm? (nếu (bufferp (get-buffer "my-buffer-name") ; làm điều gì đó ) – PuercoPop

+4

Không cần sử dụng 'bufferp'. Vì' get-buffer' trả về 'nil' hoặc bộ đệm, bạn có thể chỉ cần kiểm tra nó trực tiếp: '(let ((b (get-buffer" foo "))) (nếu b ...))' –

3

Nếu bạn muốn xác định chức năng giả của bạn như trên, công trình này:

(defun buffer-exists (bufname) (not (eq nil (get-buffer bufname)))) 

Tôi sử dụng này để tự động đóng *scratch* bộ đệm khi khởi động, vì vậy tôi không phải chuyển qua bộ đệm trong danh sách bộ đệm của tôi, như sau:

(defun buffer-exists (bufname) (not (eq nil (get-buffer bufname)))) 
(if (buffer-exists "*scratch*") (kill-buffer "*scratch*")) 
+5

Lưu ý rằng '(eq nil )' là giống như '(null )' hoặc '(không phải )', vì vậy '(không (eq nil (get-buffer bufname)))' là '(không (không (get-buffer bufname)))', vì vậy bạn có thể loại bỏ sự phủ định kép và chỉ sử dụng '(get-buffer bufname)'. Tại thời điểm đó bạn có thể xác định lại 'buffer-exist' như là một bí danh cho' get-buffer' – Stefan

+0

@Stefan (nitpick) 'buffer-exist' đã cho không giống hệt' get-buffer' bởi vì nó sẽ trả về 't' hoặc' nil', nhưng không bao giờ là bộ đệm thực. –

5

Đây là những gì tôi đã làm:

(when (get-buffer "*scratch*") 
    (kill-buffer "*scratch*")) 

này kiểm tra cho đầu đệm. Nếu có một thứ như vậy, hãy giết nó đi. Nếu không, không làm gì cả.

+2

U se 'when', nếu bạn không cần mệnh đề else. – ceving

2

không chắc chắn về phiên bản ngữ này xuất hiện, nhưng bây giờ Emacs có buffer-live-p:

buffer-live-p is a built-in function in `buffer.c'. 

(buffer-live-p OBJECT) 

Return non-nil if OBJECT is a buffer which has not been killed. 
Value is nil if OBJECT is not a buffer or if it has been killed. 
+0

Điều này không trả lời được câu hỏi. Bạn phải nhập một đối tượng đệm là 'OBJECT' và không phải là tên đệm. Nếu bạn chuyển tên của một bộ đệm sống thành 'OBJECT', bạn sẽ nhận được giá trị trả về' nil'. Có lẽ, nó là giá trị một bình luận mặc dù. – Tobias

+0

điều này làm cho sence. Tôi có nên tạo câu hỏi riêng cho việc này không? Tôi chỉ tìm kiếm chức năng 'buffer-live-p' và chỉ tìm thấy phương pháp này .. – zarkone

+2

Điều này đã giúp tôi hiểu rõ hơn vì' get-buffer' sẽ trả về '# ' chứ không phải 'nil' nếu buffer tồn tại ! –

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