Bagaimana cara menghitung semua jendela dalam bingkai?


10

Sama seperti pertanyaan yang dinyatakan, saya ingin fungsi yang akan menghitung jendela yang saat ini ditampilkan dalam bingkai itu.

Jadi ini:

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

Akan kembali => 3

Saya memulai fungsi di bawah ini:

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

2
Apakah maksud Anda jumlah jendela, atau jumlah buffer unik yang terlihat di windows?
Dan

3
Dalam contoh yang diberikan, Anda memiliki 3 jendela yang menunjukkan 3 buffer berbeda. Jika, katakanlah, 2 jendela itu ditampilkan *scratch*, apakah Anda ingin fungsi mengembalikan 3 atau 2?
Dan

@Dan, maaf untuk kesalahpahaman, dan saya akan fungsi untuk mengembalikan 3 masih.
Luke Shimkus

1
Mengerti - jawaban di bawah ini memberikan kedua opsi: sepertinya Anda menginginkan yang lebih sederhana ( count-windows).
Dan

Jawaban:


21

Jika Anda bermaksud jumlah jendela terlepas dari buffer yang ditampilkan, maka: (length (window-list))akan melakukannya. Lebih baik lagi, Anda bisa menggunakan (count-windows)fungsi yang ada .

Jika Anda ingin menghitung jumlah buffer unik yang terlihat di jendela pada bingkai, maka Anda dapat menggunakan:

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

(Catatan yang window-listjuga dapat mengambil argumen FRAME opsional jika Anda menginginkan sesuatu selain bingkai yang dipilih.)

Membungkus yang terakhir dalam panggilan fungsi Anda akan memberi Anda:

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

(Perhatikan bahwa fungsi ini mengasumsikan Anda telah memuat 'cl-lib. Sesuai komentar, Anda dapat menggunakannya delete-dupssebagai pengganti cl-delete-duplicatesjika Anda ingin menghindari cl-lib.)


2
+1 Jawaban bagus! Satu-satunya info yang hilang adalah bahwa cl-delete-duplicateskebutuhan harus dibuat tersedia oleh requireing cl.
itsjeyd

1
Tangkapan yang bagus, terima kasih. Saya telah mengedit jawaban untuk menyebutkannya.
Dan

1
Apakah Anda tahu cara atau fungsi yang tidak mengharuskan Anda memuat 'cl-lib?
Luke Shimkus

3
Sebenarnya, ya: ternyata delete-dupsitu juga akan berfungsi, dan tidak memerlukan 'cl-lib.
Dan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.