138
.emacs.d/plugins/buffer-move.el
Normal file
138
.emacs.d/plugins/buffer-move.el
Normal file
@ -0,0 +1,138 @@
|
||||
;;; buffer-move.el ---
|
||||
|
||||
;; Copyright (C) 2004-2014 Lucas Bonnet <lucas@rincevent.net.fr>
|
||||
|
||||
;; Author: Lucas Bonnet <lucas@rincevent.net>
|
||||
;; Keywords: lisp,convenience
|
||||
;; Version: 0.5
|
||||
;; URL : https://github.com/lukhas/buffer-move
|
||||
|
||||
;; 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 now 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 now 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 now 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 now 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
|
Reference in New Issue
Block a user