ฉันจะทำให้ ibuffer รีเฟรชรายการบัฟเฟอร์อัตโนมัติได้อย่างไร


11
  1. M-x ibuffer
  2. เลือกบัฟเฟอร์
  3. ฆ่าบัฟเฟอร์นั้น

หลังจากบัฟเฟอร์ถูกฆ่าแล้วบัฟเฟอร์ ibuffer จะปรากฏขึ้นอีกครั้ง แต่ก็ยังคงแสดงชื่อบัฟเฟอร์ที่ถูกฆ่าในขั้นตอนที่ 3

เป็นไปได้หรือไม่ที่จะให้ ibuffer รีเฟรชรายการบัฟเฟอร์อัตโนมัติ


หากคุณกด Ctrl-x Ctrl-b อีกครั้งใน ibuffer จะทำการรีเฟรชอัตโนมัติ
ofenerci

@ofenerci สำหรับฉัน (v25.2.2) Cx Cb เปิดหน้าต่างเพิ่มเติม * รายการบัฟเฟอร์ * พร้อมกับรายการบัฟเฟอร์ปัจจุบัน แต่ * Ibuffer * จะไม่เปลี่ยนแปลง
user2740

คำตอบ:


13

การรันคำสั่งibuffer-auto-modeในบัฟเฟอร์ Ibuffer ทำให้รีเฟรชจอแสดงผลหลังจากแต่ละคำสั่งแบบโต้ตอบ

ดูเหมือนจะไม่มีวิธีการเปิดใช้งานโดยตรงโดยอัตโนมัติ คุณสามารถใส่มันลงในไฟล์ init ของคุณ:

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

1
โซลูชันที่ยอมรับนี้แบ่งการเลือกในบัฟเฟอร์อื่น เมื่อฉันเปิดใช้งาน hook นั้นถ้าฉันทำการเลือกบนบัฟเฟอร์ใด ๆ จากนั้นเรียกใช้ibufferการเลือกจะหายไป
nephewtom

8

วิธีการที่เหมาะสมที่จะทำคือการแนะนำการสนับสนุนสำหรับibuffer auto-revert-modeสิ่งนี้สามารถทำได้โดยการกำหนดbuffer-stale-functionบัฟเฟอร์เหล่านั้น เนื่องจากbuffer-menuสนับสนุนฟีเจอร์นั้นมันก็ดีที่จะทำให้มันอัปสตรีมibufferด้วยเช่นกัน แต่ตอนนี้ดูเหมือนจะไม่เป็นเช่นนั้น

อย่างไรก็ตามนี่เป็นวิธีที่จะทำ:

(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)

หมายเหตุ: โดยทั่วไปจะต้องกำหนดค่าrevert-buffer-functionแต่ทำibufferแล้ว (ตั้งค่าเป็นibuffer-update)


1
มีเหตุผลที่จะชอบวิธีนี้มากกว่าibuffer-auto-mode?
nispio

1
ดีauto-revert-modeใช้จับเวลาและibuffer-auto-modeการใช้งานpost-command-hookเพื่อให้มีความชัดเจนที่แตกต่างกัน ; แต่ทันใดนั้นฉันก็ไม่สามารถพูดได้
phils

4
@nispio ฉันคิดว่าฉันมักจะชอบโซลูชันทั่วไปสำหรับโซลูชันเฉพาะกิจ ดังนั้นในแง่นั้นการทำให้ibufferบัฟเฟอร์มีพฤติกรรมเหมือนคนอื่นเมื่อพูดถึงการรีเฟรชเนื้อหาที่ล้าสมัยทำให้ฉันรู้สึกสะอาดขึ้น นอกจากนี้โดยทั่วไปแล้วฉันไม่ชอบการใช้post-command-hookวิธีนี้ในทางที่ผิด: มันเกินความจริงเมื่อคุณทำบางสิ่งที่ไม่เกี่ยวข้องอย่างสมบูรณ์ในบัฟเฟอร์ สุดท้ายหากต้องกดแป้นพิมพ์บางประเภทเพื่อให้มีการรีเฟรชเนื้อหาก็อาจเป็นเช่นgนั้นซึ่งเป็นวิธีที่ชัดเจนในการอัปเดตเนื้อหา แต่ได้รับก็อาจเป็นปัญหาปรัชญา :)
Sigma

1
เมื่อฉันใช้วิธีนี้ฉันจะได้รับข้อความต่อไปข้อความReverting buffer `*Ibuffer*'. ดังกล่าวรบกวนเพราะมันทำให้ฉันขัดจังหวะเมื่อฉันทำงานใน minibuffer ข้อความปรากฏขึ้นไม่ว่าibufferจะมองเห็นบัฟเฟอร์หรือไม่
nispio

1
@nispio (setq auto-revert-verbose nil), ที่อาจเกิดขึ้นในพื้นที่
Sigma
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.