[Emacs] 与窗口相关的笔记
Emacs自己带一个windmove模块,可以让你调到上面/下面/左边/右边的窗口,你只要绑定几个键到windmove-up, windmove-down...就行了。
还有更简单的一个方法: (windmove-default-keybindings 'super)
查看一下它的实现,发现它已经提供了找到上下左右窗口的能力,所以我们可以很容易地仿照着写一个交换buffer的函数:将当前窗口的buffer与上边/下边/左边/右边窗口的buffer相互交换:
;; modified from windmove-do-window-select
(defun windmove-do-swap-window (dir &optional arg window)
"Move the buffer to the window at direction DIR.
DIR, ARG, and WINDOW are handled as by `windmove-other-window-loc'.
If no window is at direction DIR, an error is signaled."
(let ((other-window (windmove-find-other-window dir arg window)))
(cond ((null other-window)
(error "No window %s from selected window" dir))
((and (window-minibuffer-p other-window)
(not (minibuffer-window-active-p other-window)))
(error "Minibuffer is inactive"))
(t
(let ( (old-buffer (window-buffer window)) )
(set-window-buffer window (window-buffer other-window))
(set-window-buffer other-window old-buffer)
(select-window other-window))))))
(defun hsb-swap-buffer-up (&optional arg)
(interactive "P")
(windmove-do-swap-window 'up arg))
(defun hsb-swap-buffer-down (&optional arg)
(interactive "P")
(windmove-do-swap-window 'down arg))
(defun hsb-swap-buffer-left (&optional arg)
(interactive "P")
(windmove-do-swap-window 'left arg))
(defun hsb-swap-buffer-right (&optional arg)
(interactive "P")
(windmove-do-swap-window 'right arg))
(global-set-key (kbd "<C-s-up>") 'hsb-swap-buffer-up)
(global-set-key (kbd "<C-s-down>") 'hsb-swap-buffer-down)
(global-set-key (kbd "<C-s-left>") 'hsb-swap-buffer-left)
(global-set-key (kbd "<C-s-right>") 'hsb-swap-buffer-right)
其它笔记待补充,我会贴在评论中

浙公网安备 33010602011771号