Emacs做一个窗口管理员做得很好.我一直在拆分我的Emacs框架,如下所示:
+---------------------------+
| | |
| | |
| | B |
| A | |
| | |
| | |
| |-------------|
| | C |
+---------------------------+
Run Code Online (Sandbox Code Playgroud)
C通常是一个具有某种长时间运行过程的终端,如Web服务器或守护进程.偶尔我会移动那里重新启动守护进程,但大多数时候我只想在A和之间交换B.我该怎样才能方便?
没有内置任何你想要的东西.您可以使用以下代码执行您想要的操作(只需自定义正则表达式以匹配您要避免的缓冲区的名称).
注意:my-other-window没有实现所有功能other-window,这是留给读者的练习.
my-other-window将尝试切换到缓冲区不匹配的窗口avoid-window-regexp.如果没有这样的窗口,那么它只是切换到下一个窗口.
(require 'cl)
(defvar avoid-window-regexp "^[0-9]$")
(defun my-other-window ()
"Similar to 'other-window, only try to avoid windows whose buffers match avoid-window-regexp"
(interactive)
(let* ((window-list (delq (selected-window) (window-list)))
(filtered-window-list (remove-if
(lambda (w)
(string-match-p avoid-window-regexp (buffer-name (window-buffer w))))
window-list)))
(if filtered-window-list
(select-window (car filtered-window-list))
(and window-list
(select-window (car window-list))))))
Run Code Online (Sandbox Code Playgroud)
并适当地绑定它:
(global-set-key (kbd "C-x o") 'my-other-window)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
620 次 |
| 最近记录: |