我需要一個emacs內置函數或elisp函數,它可以將我帶到先前選擇的窗口。我認爲(select-window (get-lru-window))
會這樣做,但如果我多次運行它,似乎只是在窗口之間循環,而不是在它們之間來回切換,這正是我所期望的。在emacs中選擇之前選擇的窗口
還有其他想法嗎?
我需要一個emacs內置函數或elisp函數,它可以將我帶到先前選擇的窗口。我認爲(select-window (get-lru-window))
會這樣做,但如果我多次運行它,似乎只是在窗口之間循環,而不是在它們之間來回切換,這正是我所期望的。在emacs中選擇之前選擇的窗口
還有其他想法嗎?
似乎有不是一個辦法讓emacs的最近選擇的窗口(相對於所使用的返回最近最少由get-LRU窗口)。內部emacs跟蹤窗口上的use_time,get-lru-window使用它來查找「最老」的窗口。但不幸的是,這在elisp中沒有公開。
窗口列表中cyclic window ordering下令不,你的情況有所幫助。
然而,緩衝區列表進行排序最到最近最少使用的緩存(或沒有真正嚴格,有一個(埋葬緩衝)函數來移動一個緩衝區最後一個)。
這意味着,如果你可以改變你的問題變得像「我怎麼可以切換到緩衝區在不同的窗口,這是最近的選擇緩衝區」,它應該是可能的。
一種方法是做這樣的事情:
(defun switch-to-previous-buffer-in-a-different-window()
(interactive)
(let* ((otherbuf (other-buffer (current-buffer) t))
(otherwin (get-buffer-window otherbuf)))
(if otherwin
(select-window otherwin)
(message "Last buffer (%s) is not currently visible" (buffer-name otherbuf)))))
或者更短,和更多的其他功能:
(defun switch-to-previous-buffer-possibly-creating-new-window()
(interactive)
(pop-to-buffer (other-buffer (current-buffer) t)))
這裏other-buffer
用於獲取最近使用的緩衝區(除了當前-緩衝)。只要不切換窗口中的緩衝區,這應該可以正常工作,因爲其他緩衝區將不再在其他窗口中返回緩衝區,而是在當前窗口中切換的緩衝區。
因此,而不是使用其他緩衝讓走緩衝區列出我們自己找到的最佳人選:
(defun switch-to-the-window-that-displays-the-most-recently-selected-buffer()
(interactive)
(let* ((buflist (buffer-list (selected-frame))) ; get buffer list in this frames ordered
(buflist (delq (current-buffer) buflist)) ; if there are multiple windows showing same buffer.
(winlist (mapcar 'get-buffer-window buflist)) ; buf->win
(winlist (delq nil winlist)) ; remove non displayed windows
(winlist (delq (selected-window) winlist))) ; remove current-window
(if winlist
(select-window (car winlist))
(message "Couldn't find a suitable window to switch to"))))
希望這有助於。
好東西 - 謝謝! – tonycpsu
如果最後一個窗口切換是以編程方式完成的,那麼可以選擇先前選擇的窗口。
(defun your-function()
(interactive)
(let ((sw (selected-window)))
(do-something-useful-and-switch-window)
(select-window sw)))
如果最後的窗口開關是手動完成的,那麼它應該是可能的過載窗口切換命令來更新窗口選擇順序,然後將其用於切換回的全局列表。
的選擇窗口的文件說,「可選的第二ARG NORECORD非空意味着不把這個緩衝區在最近選擇的列表的前面。」 ...但是,這聽起來是從你所描述的... –
我想你可以(AB)使用緩衝區列表。類似於(select-window(buffer-window(other-buffer(current-buffer)))) –
完美,@AndersWaldenborg - 它是黑客式的,但它對我的目的來說工作得很好。謝謝! – tonycpsu