123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- ;;; buffer-move.el --- Swap buffers without typing C-x b on each window
- ;; Copyright (C) 2004 Lucas Bonnet <lukhas@free.fr>
- ;; Author: Lucas Bonnet <lucas@rincevent.net>
- ;; Keywords: lisp,convenience
- ;; Version: 0.4
- ;; URL : http://lukhas.free. fr/emacs/elisp/buffer-move.el
- ;; This program is free software; you can redistribute it and/or
- ;; modify it under the terms of the GNU General Public License
- ;; as published by the Free Software Foundation; either version 2
- ;; of the License, or (at your option) any later version.
- ;; This program is distributed in the hope that it will be useful,
- ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
- ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ;; GNU General Public License for more details.
- ;; You should have received a copy of the GNU General Public License
- ;; along with this program; if not, write to the Free Software
- ;; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- ;; 02111-1307, USA.
- ;;; Commentary:
- ;; This file is for lazy people wanting to swap buffers without
- ;; typing C-x b on each window. This is useful when you have :
- ;; +--------------+-------------+
- ;; | | |
- ;; | #emacs | #gnus |
- ;; | | |
- ;; +--------------+-------------+
- ;; | |
- ;; | .emacs |
- ;; | |
- ;; +----------------------------+
- ;; and you want to have :
- ;; +--------------+-------------+
- ;; | | |
- ;; | #gnus | .emacs |
- ;; | | |
- ;; +--------------+-------------+
- ;; | |
- ;; | #emacs |
- ;; | |
- ;; +----------------------------+
- ;; With buffer-move, just go in #gnus, do buf-move-left, go to #emacs
- ;; (which now should be on top right) and do buf-move-down.
- ;; To use it, simply put a (require 'buffer-move) in your ~/.emacs and
- ;; define some keybindings. For example, i use :
- ;; (global-set-key (kbd "<C-S-up>") 'buf-move-up)
- ;; (global-set-key (kbd "<C-S-down>") 'buf-move-down)
- ;; (global-set-key (kbd "<C-S-left>") 'buf-move-left)
- ;; (global-set-key (kbd "<C-S-right>") 'buf-move-right)
- ;;; Code:
- (require 'windmove)
- ;;;###autoload
- (defun buf-move-up ()
- "Swap the current buffer and the buffer above the split.
- If there is no split, ie no window above the current one, an
- error is signaled."
- ;; "Switches between the current buffer, and the buffer above the
- ;; split, if possible."
- (interactive)
- (let* ((other-win (windmove-find-other-window 'up))
- (buf-this-buf (window-buffer (selected-window))))
- (if (null other-win)
- (error "No window above this one")
- ;; swap top with this one
- (set-window-buffer (selected-window) (window-buffer other-win))
- ;; move this one to top
- (set-window-buffer other-win buf-this-buf)
- (select-window other-win))))
- ;;;###autoload
- (defun buf-move-down ()
- "Swap the current buffer and the buffer under the split.
- If there is no split, ie no window under the current one, an
- error is signaled."
- (interactive)
- (let* ((other-win (windmove-find-other-window 'down))
- (buf-this-buf (window-buffer (selected-window))))
- (if (or (null other-win)
- (string-match "^ \\*Minibuf" (buffer-name (window-buffer other-win))))
- (error "No window under this one")
- ;; swap top with this one
- (set-window-buffer (selected-window) (window-buffer other-win))
- ;; move this one to top
- (set-window-buffer other-win buf-this-buf)
- (select-window other-win))))
- ;;;###autoload
- (defun buf-move-left ()
- "Swap the current buffer and the buffer on the left of the split.
- If there is no split, ie no window on the left of the current
- one, an error is signaled."
- (interactive)
- (let* ((other-win (windmove-find-other-window 'left))
- (buf-this-buf (window-buffer (selected-window))))
- (if (null other-win)
- (error "No left split")
- ;; swap top with this one
- (set-window-buffer (selected-window) (window-buffer other-win))
- ;; move this one to top
- (set-window-buffer other-win buf-this-buf)
- (select-window other-win))))
- ;;;###autoload
- (defun buf-move-right ()
- "Swap the current buffer and the buffer on the right of the split.
- If there is no split, ie no window on the right of the current
- one, an error is signaled."
- (interactive)
- (let* ((other-win (windmove-find-other-window 'right))
- (buf-this-buf (window-buffer (selected-window))))
- (if (null other-win)
- (error "No right split")
- ;; swap top with this one
- (set-window-buffer (selected-window) (window-buffer other-win))
- ;; move this one to top
- (set-window-buffer other-win buf-this-buf)
- (select-window other-win))))
- (provide 'buffer-move)
- ;;; buffer-move.el ends here
|