কিভাবে একটি ফ্রেমে সমস্ত উইন্ডো গণনা?


10

ঠিক যেমন প্রশ্নটি বলেছিল, আমি একটি ফাংশন চাই যা বর্তমানে সেই ফ্রেমে প্রদর্শিত উইন্ডোগুলির গণনা করবে।

আমার স্নাতকের:

+--------------+-------------+
|              |             |
|              |             |
|  *scratch*   | *Messages*  |
|              |             |
|              |             |
|              |             |
+--------------+-------------+
|           *Help*           |
|                            |
+----------------------------+

ফিরে আসবে => 3

আমি নীচে একটি ফাংশন শুরু করেছি:

(defun count-windows ()
  "Count how many buffers are currently being shown."
  (interactive)
)

2
আপনি কী উইন্ডোজের সংখ্যা বা উইন্ডোতে দৃশ্যমান অনন্য বাফার সংখ্যাটি বোঝাতে চান?
ড্যান

3
প্রদত্ত উদাহরণে, আপনার কাছে 3 টি উইন্ডো রয়েছে 3 টি আলাদা বাফার দেখাচ্ছে। যদি, বলুন, এর মধ্যে দুটি উইন্ডো প্রদর্শন করছে *scratch*, আপনি কি ফাংশনটি 3 বা 2 ফেরত চান?
ড্যান

@ ড্যান, ভুল বোঝাবুঝির জন্য দুঃখিত, এবং আমি ফাংশনটি 3 টি আবার ফিরে আসব।
লুক শিমকাস

1
এটি পেয়েছেন - নীচের উত্তরটি উভয় বিকল্প দেয়: দেখে মনে হচ্ছে আপনি সহজতর ( count-windows) চান।
ড্যান

উত্তর:


21

আপনি যদি বোঝাচ্ছেন যে উইন্ডোগুলির সংখ্যাটি নির্বিশেষে কোন বাফার প্রদর্শিত হচ্ছে, তবে: (length (window-list))এটি করবে। আরও ভাল, আপনি কেবল বিদ্যমান (count-windows)ফাংশনটি ব্যবহার করতে পারেন ।

আপনি যদি ফ্রেমের উইন্ডোগুলিতে দৃশ্যমান অনন্য বাফারগুলির সংখ্যা গণনা করতে চান তবে আপনি এটি ব্যবহার করতে পারেন:

(length (cl-delete-duplicates (mapcar #'window-buffer (window-list))))

(মনে রাখবেন যে window-listআপনি যদি নির্বাচিত ফ্রেম ব্যতীত অন্য কিছু চান তবে anচ্ছিক ফ্রেম আর্গুমেন্টও নিতে পারে))

আপনার ফাংশন কলটিতে উত্তরটি আবদ্ধ করা আপনাকে দেবে:

(defun count-unique-visible-buffers (&optional frame)
  "Count how many buffers are currently being shown.  Defaults to
selected frame."
  (length (cl-delete-duplicates (mapcar #'window-buffer (window-list frame)))))

(নোট করুন যে এই ফাংশনটি ধরে নিয়েছে যে আপনি লোড করেছেন 'cl-libcomments মন্তব্য অনুসারে, আপনি যদি এড়াতে চান তবে আপনি তার delete-dupsজায়গায় ব্যবহার cl-delete-duplicatesকরতে পারেন cl-lib))


2
+1 দুর্দান্ত উত্তর! অনুপস্থিত একমাত্র তথ্য হ'ল এটি আইং cl-delete-duplicatesদ্বারা উপলব্ধ করা দরকার । requirecl
itjeyd

1
ধন্যবাদ ভাল। আমি এটি উল্লেখ উত্তর সম্পাদনা করেছি।
ড্যান

1
আপনি কি এমন কোনও উপায় বা একটি ফাংশন জানেন যা আপনার বোঝার প্রয়োজন হয় না 'cl-lib?
লুক শিমকাস

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