프레임의 모든 창을 계산하는 방법은 무엇입니까?


10

질문에서 언급했듯이 현재 해당 프레임에 표시되는 창을 계산하는 기능을 원합니다.

그래서 이건:

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

돌아올 것이다 => 3

아래 기능을 시작했습니다.

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

2
창 수 또는 창에 표시되는 고유 버퍼 수를 의미합니까?
Dan

3
주어진 예에서 3 개의 다른 버퍼를 보여주는 3 개의 창이 있습니다. 예를 들어, 해당 창 중 2 개가 표시 중이 *scratch*라면 함수가 3 또는 2를 반환하도록 하시겠습니까?
Dan

@ Dan, 오해에 대해 유감스럽게 생각하며 3을 반환하는 함수를 사용합니다.
Luke Shimkus

1
알겠습니다. 아래 답변은 두 가지 옵션을 모두 제공합니다 count-windows. 더 간단한 것을 원하는 것처럼 보입니다 ( ).
Dan

답변:


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-duplicatescl-lib


2
+1 좋은 답변입니다! 누락 된 유일한 정보는 ing을 cl-delete-duplicates통해 사용할 수 있어야한다는 requirecl입니다.
itsjeyd

1
잘 잡아 줘서 고마워 언급하기 위해 답변을 편집했습니다.
Dan

1
로드 할 필요가없는 방법이나 기능을 알고 'cl-lib있습니까?
Luke Shimkus

3
실제로, 그렇습니다 : 그것은 delete-dups또한 작동 할 것으로 판명되었으며 'cl-lib를 요구하지 않습니다.
Dan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.