ফ্রেম মুছে ফেলা হলে বাফারটিকে হত্যা করুন


12

যখন আমি একটি ফ্রেম বন্ধ করি, আমি চাই এর বাফারটি মেরে ফেলা উচিত।

যদি বাফারটি অন্য ফ্রেমে প্রদর্শিত হয়, তবে বাফারটি হত্যা করা উচিত নয়।

এক ফ্রেমে একাধিক বাফার প্রদর্শিত হলে কিছুই করবেন না।

এটি সেট আপ করার একটি ভাল উপায় কি?


সমস্ত উত্তর আমার জন্য স্বতন্ত্রভাবে কাজ করে না। তবে আমি যদি তাদের তিনটিই রাখি তবে এটি আসলে কাজ করে।
19:38

উত্তর:


11

যদি আমি প্রশ্নটি বুঝতে পারি তবে এখানে একটি ফাংশন রয়েছে যা আপনি যা চান তা করে:

(defun maybe-delete-frame-buffer (frame)
  "When a dedicated FRAME is deleted, also kill its buffer.
A dedicated frame contains a single window whose buffer is not
displayed anywhere else."
  (let ((windows (window-list frame)))
    (when (eq 1 (length windows))
      (let ((buffer (window-buffer (car windows))))
        (when (eq 1 (length (get-buffer-window-list buffer nil t)))
          (kill-buffer buffer))))))

আপনি এটিকে একটি হুক হিসাবে যুক্ত করতে পারেন যা যখনই ফ্রেম ব্যবহার করে বন্ধ হয় তখনই ডাকা হয়:

(add-to-list 'delete-frame-functions #'maybe-delete-frame-buffer)

5

নীচে একটি ফাংশন (পরীক্ষিত, তবে ব্যাপকভাবে নয়) রয়েছে যা আপনার প্রথম প্রয়োজনীয়তা পূরণ করে: এটি আপনি যখন একটি ফ্রেম বন্ধ করেন তখন বাফারটিকে মেরে ফেলবে না বাফার অন্য ফ্রেমেও দৃশ্যমান থাকে।

(defun kill-buffer-when-frame-delete-dwim (frame)
  "Kill current buffer unless it's visible in another frame
besides current FRAME."
  (unless (delq nil (mapcar #'(lambda (x)
                                (memq (current-buffer)
                                      (mapcar #'window-buffer x)))
                            (mapcar #'window-list
                                    (delq frame (frame-list)))))
    (kill-buffer (current-buffer))))

(add-hook 'delete-frame-functions 'kill-buffer-when-frame-delete-dwim)

আমি দ্বিতীয় প্রয়োজন সম্পর্কে অস্পষ্ট:

  • ফ্রেমে প্রদর্শিত একাধিক বাফার দ্বারা , আপনি কি বোঝাতে চেয়েছেন যে ফ্রেমে ক) দুটি বা ততোধিক উইন্ডো রয়েছে এবং খ) উইন্ডোগুলির মধ্যে বিভিন্ন বাফার প্রদর্শিত হয়?
  • দ্বারা কী করেন ভাইসাহেব , আপনি একটি অর্থ কী) ফ্রেম মুছে ফেলতে কিন্তু না না বর্তমান বাফার হত্যার বা খ) সত্যিই এ সব কিছুই করতে: ফ্রেম মুছে ফেলতে অথবা বর্তমান বাফার হত্যা করো না?

হাই ড্যান ধারণাটি হ'ল যদি সেই ফ্রেমের একাধিক উইন্ডোজের মাধ্যমে যদি কোনও ফ্রেমে একাধিক বাফার দেখানো হয় তবে কোনও বাফার মারা যাবে না, তবে ফ্রেমটি মুছে ফেলা হবে।
ধর্মটেক

তবে আমি দেখতে পাচ্ছিলাম যে অন্যান্য আচরণগুলি কার্যকর হচ্ছে। অর্থাৎ প্রদর্শিত সমস্ত বাফারকে মেরে ফেলুন, যতক্ষণ না সেগুলি অন্য ফ্রেমে প্রদর্শিত না হয়।
ধর্মটেক

1

এখানে একটি সহজ পদ্ধতি:

(defun close-frame-buffer (frame)
  (kill-buffer
    (window-buffer
      (frame-root-window frame))))

(add-hook 'delete-frame-functions 'close-frame-buffer)

এটি অন্য ফ্রেমে খোলা থাকলেও এটি একটি বাফারকে মেরে ফেলবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.