簡體   English   中英

如何在Emacs中列出非ECB窗口?

[英]How do I list non-ECB windows in Emacs?

我遇到了這個要點

(defun swap-windows ()
 "If you have 2 windows, it swaps them."
 (interactive)
 (cond ((not (= (count-windows) 2))
        (message "You need exactly 2 windows to do this."))
       (t
        (let* ((w1 (first (window-list)))
               (w2 (second (window-list)))
               (b1 (window-buffer w1))
               (b2 (window-buffer w2))
               (s1 (window-start w1))
               (s2 (window-start w2)))
          (set-window-buffer w1 b2)
          (set-window-buffer w2 b1)
          (set-window-start w1 s2)
          (set-window-start w2 s1)))))

今天,只要有兩個窗口,它就會在兩個窗口中交換緩沖區的內容。 對我來說問題是我通常會運行ecb,這會創建一個或多個額外的窗口。 除了從其他地方得到的調整方法之外,我從來沒有真正用elisp做過任何事情,這個(希望)簡單的改變比我目前的理解還要高一點。

我花了一些時間查看ecb信息和emacs手冊,但找不到合理的方法來確定是否有兩個非ecb窗口打開。

我也嘗試在ecb窗口上使用像'埋葬緩沖區'這樣的東西,所以我可以假設它們不會出現在列表的前面,但這是一個有缺陷的方法。

所以我的問題是,有沒有辦法修改要點以使其與ecb一起使用? 我假設ecb windows有一些特別之處,但我找不到任何可以訪問的東西。

我也嘗試在ecb窗口上使用像'埋葬緩沖區'這樣的東西,所以我可以假設它們不會出現在列表的前面,但這是一個有缺陷的方法。

有點破解,但是你可以隱藏ECB窗口,調用swap-windows ,然后再次顯示它們,如下所示:

(defun my-swap-windows ()
  (interactive)
  (ecb-hide-ecb-windows)
  (swap-windows)
  (ecb-show-ecb-windows))

順便說一句,我不得不添加這一行來獲得要點:

(require 'cl)

編輯 :我沒有看到您描述的窗口調整大小問題,但此代碼應該在忽略ECB窗口時交換非ECB窗口。

(require 'cl)

(defun non-ecb-window-list ()
  (remove-if
   #'(lambda (window)
       (find (window-buffer window) (ecb-dedicated-special-buffers)))
   (window-list)))

(defun count-non-ecb-windows ()
  (length (non-ecb-window-list)))

(defun swap-windows ()
 "If you have 2 windows, it swaps them."
 (interactive)
 (cond ((not (= (count-non-ecb-windows) 2))
        (message "You need exactly 2 windows to do this."))
       (t
        (let* ((w1 (first (non-ecb-window-list)))
               (w2 (second (non-ecb-window-list)))
               (b1 (window-buffer w1))
               (b2 (window-buffer w2))
               (s1 (window-start w1))
               (s2 (window-start w2)))
          (set-window-buffer w1 b2)
          (set-window-buffer w2 b1)
          (set-window-start w1 s2)
          (set-window-start w2 s1)))))

我將繼續並發布這個答案,因為我用更多的試驗和錯誤編寫/發現它。 這不是我要求的,接受的答案是,但它有其他人閱讀這個主題的優點。

(defun swap-windows ()
 "Swap two windows."
 (interactive)
 (let* ((w1 (selected-window))
    (w2 (next-window))
    (b1 (window-buffer w1))
    (b2 (window-buffer w2))
    (s1 (window-start w1))
    (s2 (window-start w2)))
   (set-window-buffer w1 b2)
   (set-window-buffer w2 b1)
   (set-window-start w1 s2)
   (set-window-start w2 s1)))

因為我基本上總是知道Cx o將會發生什么,這就是'next-window'應該返回的,這個函數幾乎總是我想要的。 但是,它沒有任何錯誤檢查,並沒有真正回答所寫的問題,只是我表達不好的意圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM