[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)

 

 

其它笔记待补充,我会贴在评论中

 

 

 

 

 

posted @ 2011-03-08 13:10  巴蛮子  阅读(2445)  评论(22)    收藏  举报