Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@peccu
Created October 8, 2011 06:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save peccu/1271943 to your computer and use it in GitHub Desktop.
Save peccu/1271943 to your computer and use it in GitHub Desktop.
Emacsの3ペインウィンドウとかでバッファを順繰りでまわす感じ
;; slide-view.el - interface for slide view
;; written by peccu
;;
;; 横にタブが並んでいて,スライドするようなイメージでwindowの表示を切り替える
;; イメージはSeesmic web(http://seesmic.com/web/index.html)
;;
;;; Installation:
;;
;; Put the slide-view.el to your load-path.
;; Add to init.el or .emacs:
;; (require 'slide-view)
;;
;;; Usage:
;; var slide-view-buffer-list: スライドビューに表示するバッファ名のリスト
;; var slide-view-window-count: ウィンドウの分割数
;; function slide-view-init: スライドビューの初期化(ウィンドウを分割し,バッファリストから順に表示する)
;; function slide-view-slide-next: 次のタブにスライド
;; function slide-view-slide-previous: 前のタブにスライド
;; 存在しないバッファが含まれてる時の処理まで書いてません
;;
;; 例1:twittering-modeでタブビューにする
;; M-x twitでTLを取得してM-x slide-view-initでタブビューに初期化
;; Nで右から左にスライド.Pで逆方向にスライドする
;;
;; (setq twittering-initial-timeline-spec-string
;; '(":replies"
;; ":search/emacs/"
;; "peccul/emacs"
;; ":home"
;; ":search/#EmacsAdventJP/"
;; ":search/Gentoo/"))
;; (require 'slide-view)
;; (setq slide-view-buffer-list twittering-initial-timeline-spec-string)
;; (setq slide-view-window-count 4)
;; (define-key twittering-mode-map "N" 'slide-view-slide-next)
;; (define-key twittering-mode-map "P" 'slide-view-slide-previous)
;;
;; 例2:スライドショー
;; ウィンドウ分割数を1にすればバッファを順番に切り替えられる
;;
;; (require 'slide-view)
;; (setq slide-view-buffer-list '("slide1.txt" "slide2.txt" "slide3.txt"))
;; (setq slide-view-window-count 1)
;; (global-set-key (kbd "C-c N") 'slide-view-slide-next)
;; (global-set-key (kbd "C-c P") 'slide-view-slide-previous)
;;; Code
;;; Setting Variable
(defvar slide-view-buffer-list nil
"スライドビューで表示するバッファ名のリスト")
(defvar slide-view-window-count 4
"1画面でのウィンドウ分割数")
;;; Internal Variable
(defvar slide-view-next-id 0)
(defvar slide-view-previous-id 0
"最初のウィンドウのひとつ前のバッファ番号")
(defvar slide-view-first-window nil
"ウィンドウ分割後の最初のウィンドウ")
;;; Function
(defun slide-view--init-buffer-loop (size)
"ウィンドウを分割して,`slide-view-buffer-list'をセットする"
(if (< size 2)
nil
(progn
(split-window-horizontally)
(balance-windows)
(other-window 1)
(set-window-buffer (selected-window)
(get-buffer (nth slide-view-next-id slide-view-buffer-list)))
(setq slide-view-next-id (slide-view-add-id slide-view-next-id))
(slide-view--init-buffer-loop (1- size)))))
(defun slide-view-init ()
"ウィンドウを分割し,`slide-view-buffer-list'の先頭`slide-view-window-count'個を表示する"
(interactive)
(setq slide-view-previous-id (1- (length slide-view-buffer-list)))
;; ウィンドウを1つにする
(delete-other-windows)
;; 最初のウィンドウの位置を覚える
(setq slide-view-first-window (selected-window))
;; 順番にバッファでうめる
(set-window-buffer (selected-window) (get-buffer (car slide-view-buffer-list)))
(slide-view--init-buffer-loop slide-view-window-count))
;; (slide-view-init)
(defun slide-view-add-id (id &optional add)
"バッファ番号を増やす.
バッファの数を超えると0に戻る
addを指定するとそれだけ増える(負数も可)"
(let ((adder (or add 1))
(len (length slide-view-buffer-list)))
(% (+ id adder len) len)))
(defun slide-view--slide-next (win size offset)
"ウィンドウを切り替えながらオフセット番目のバッファを表示する"
(if (< size 1)
win
(let ((nextbuf (get-buffer
(nth offset slide-view-buffer-list))))
(set-window-buffer win nextbuf)
(slide-view--slide-next (next-window win)
(1- size)
(slide-view-add-id offset)))))
(defun slide-view-slide-next()
"バッファを順方向にスライドする"
(interactive)
;; 順番にバッファを切り替えていく
(slide-view--slide-next slide-view-first-window slide-view-window-count
(slide-view-add-id slide-view-previous-id 2)) ;buffer offset
;; 最初のウィンドウのひとつ前のバッファ番号の更新
(setq slide-view-previous-id (slide-view-add-id slide-view-previous-id)))
;; (slide-view-slide-next)
(defun slide-view-slide-previous()
"バッファを逆方向にスライドする"
(interactive)
;; 順番にバッファを切り替えていく
(slide-view--slide-next slide-view-first-window slide-view-window-count
slide-view-previous-id) ;buffer offset
;; 前後のバッファ番号の更新
(setq slide-view-previous-id (slide-view-add-id slide-view-previous-id -1)))
;; (slide-view-slide-previous)
;;; slide-view.el ends here
(provide 'slide-view)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment