Làm cách nào để tạo ibuffer tự động làm mới danh sách bộ đệm?


11
  1. M-x ibuffer
  2. Chọn một bộ đệm
  3. Giết bộ đệm đó

Sau khi bộ đệm bị giết, bộ đệm ibuffer xuất hiện lại, nhưng nó vẫn hiển thị tên bộ đệm bị giết ở bước 3.

Có thể để ibuffer tự động làm mới danh sách bộ đệm không?


Nếu bạn nhấn lại Ctrl-x Ctrl-b trong ibuffer, nó sẽ tự động chạy.
ofenerci

@ofenerci Đối với tôi (v25.2.2) Cx Cb mở một cửa sổ bổ sung * Danh sách bộ đệm * với danh sách bộ đệm hiện tại, nhưng * Ibuffer * không thay đổi
user2740

Câu trả lời:


13

Chạy lệnh ibuffer-auto-modetrong bộ đệm Ibuffer làm cho nó làm mới màn hình sau mỗi lệnh tương tác.

Dường như không có cách nào để kích hoạt nó tự động. Bạn có thể đặt cái này trong tập tin init của bạn:

(add-hook 'ibuffer-mode-hook (lambda () (ibuffer-auto-mode 1)))

1
Giải pháp được chấp nhận này phá vỡ lựa chọn trong bộ đệm khác. Khi tôi kích hoạt hook đó, nếu tôi thực hiện lựa chọn trên bất kỳ bộ đệm nào, sau đó gọi ibuffer, lựa chọn sẽ bị mất.
cháu trai

8

Cách đúng đắn để làm điều đó là giới thiệu hỗ trợ ibuffercho auto-revert-mode. Điều này có thể đạt được bằng cách định nghĩa buffer-stale-functioncho những bộ đệm đó. Có thể cho rằng, vì buffer-menuhỗ trợ tính năng đó, thật tốt khi có nó ngược dòng ibuffer, nhưng dường như đó không phải là trường hợp hiện tại.

Dù sao, đây là một cách để làm điều đó:

(defun my-ibuffer-stale-p (&optional noconfirm)
  ;; let's reuse the variable that's used for 'ibuffer-auto-mode
  (frame-or-buffer-changed-p 'ibuffer-auto-buffers-changed))

(defun my-ibuffer-auto-revert-setup ()
  (set (make-local-variable 'buffer-stale-function)
       'my-ibuffer-stale-p)
  (set (make-local-variable 'auto-revert-verbose) nil)
  (auto-revert-mode 1))

(add-hook 'ibuffer-mode-hook 'my-ibuffer-auto-revert-setup)

Lưu ý: nói chung, người ta sẽ cần xác định một giá trị cho revert-buffer-function, nhưng ibufferđã làm điều đó (nó được đặt thành ibuffer-update)


1
Có một lý do để thích phương pháp này hơn ibuffer-auto-mode?
nispio

1
auto-revert-modeSử dụng tốt bộ hẹn giờ và ibuffer-auto-modesử dụng post-command-hook, do đó, có một sự khác biệt rõ ràng ; nhưng tôi không thể nói nếu người này thích người kia hơn.
phils

4
@nispio Tôi đoán tôi có xu hướng thích các giải pháp chung cho các giải pháp đặc biệt. Vì vậy, theo nghĩa đó, làm cho ibufferbộ đệm hoạt động như những người khác khi làm mới nội dung lỗi thời cho tôi cảm thấy sạch sẽ hơn. Ngoài ra, tôi thường không thích lạm dụng post-command-hooktheo cách đó: thật sự quá mức khi bạn tình cờ làm một việc hoàn toàn không liên quan trong bộ đệm. Cuối cùng, nếu một số loại tổ hợp phím được yêu cầu để làm mới nội dung, thì đó cũng có thể glà cách cập nhật nội dung rõ ràng. Nhưng được cho phép, nó có lẽ là một vấn đề triết học :)
Sigma

1
Khi tôi sử dụng phương pháp này, tôi liên tục nhận được một tin nhắn Reverting buffer `*Ibuffer*'. Tin nhắn bị xâm phạm vì nó liên tục làm phiền tôi khi tôi đang làm việc trong xe buýt nhỏ. Thông báo xuất hiện cho dù ibufferbộ đệm có thể nhìn thấy hay không.
nispio

1
@nispio (setq auto-revert-verbose nil), có khả năng tại địa phương
Sigma
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.