एक फ्रेम में सभी खिड़कियों की गिनती कैसे करें?


10

जैसा कि प्रश्न में कहा गया है, मैं एक कार्य करना चाहूंगा जो कि वर्तमान में उस फ्रेम में दिखाई देने वाली खिड़कियों की गणना करेगा।

तो यह:

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

लौटूंगा => 3

मैंने नीचे एक समारोह शुरू किया:

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

2
क्या आपका मतलब है खिड़कियों की संख्या, या खिड़कियों में दिखाई देने वाले अद्वितीय बफ़र्स की संख्या?
दान

3
दिए गए उदाहरण में, आपके पास 3 विंडो हैं जिसमें 3 अलग-अलग बफ़र्स दिखाए गए हैं। यदि कहें, तो उन खिड़कियों में से 2 प्रदर्शित हो रही थीं *scratch*, क्या आप चाहते हैं कि फ़ंक्शन 3 या 2 लौटें?
दान

@, गलतफहमी के लिए खेद है, और मैं समारोह अभी भी 3 वापस करने के लिए होगा।
ल्यूक शिमकस

1
मिल गया - जवाब नीचे दोनों विकल्प देता है: ऐसा लगता है कि आप सरल एक ( count-windows) चाहते हैं।
दान

जवाबों:


21

यदि आप का मतलब है कि खिड़कियों की संख्या की परवाह किए बिना कि बफ़र्स दिखा रहे हैं, तो: (length (window-list))यह करेंगे। बेहतर अभी भी, आप केवल मौजूदा (count-windows)फ़ंक्शन का उपयोग कर सकते हैं ।

यदि आप फ्रेम में खिड़कियों में दिखाई देने वाले अद्वितीय बफ़र्स की संख्या गिनना चाहते हैं , तो आप इसका उपयोग कर सकते हैं:

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

(ध्यान दें कि window-listयदि आप चयनित फ्रेम के अलावा कुछ और चाहते हैं तो वैकल्पिक FRAME तर्क भी ले सकते हैं।)

अपने फ़ंक्शन कॉल में बाद को लपेटना आपको देगा:

(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-lib। टिप्पणियों के अनुसार, आप इस्तेमाल कर सकते हैं delete-dupsके स्थान पर cl-delete-duplicatesअगर आप बचना चाहते हैं cl-lib।)


2
+1 शानदार जवाब! एकमात्र जानकारी जो गायब है, वह आईएनजी cl-delete-duplicatesद्वारा उपलब्ध कराने की आवश्यकता है । requirecl
इसका अजायबघर

1
अच्छी पकड़ है, धन्यवाद। मैंने इसका उल्लेख करने के लिए उत्तर संपादित किया है।
दान

1
क्या आप कोई ऐसा तरीका या कोई फ़ंक्शन जानते हैं जिसे आपको लोड करने की आवश्यकता नहीं है 'cl-lib?
ल्यूक शिमकस

3
वास्तव में, हाँ: यह पता चला है कि delete-dupsयह भी काम करेगा, और 'cl-lib की आवश्यकता नहीं है।
दान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.