Initial commit
This commit is contained in:
commit
5857c61382
2 changed files with 101 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
*.elc
|
100
bw.el
Normal file
100
bw.el
Normal file
|
@ -0,0 +1,100 @@
|
|||
;;; bw.el --- Show stuff in a bottom window
|
||||
|
||||
;; Copyright (C) 2012 Tom Willemsen
|
||||
|
||||
;; Author: Tom Willemsen <slash@drd>
|
||||
;; Keywords: convenience
|
||||
;; Version: 0
|
||||
|
||||
;; 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 3 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, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Show stuff in a bottom window.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(defvar bw-last-shown-buffer nil
|
||||
"The last buffer shown by bw.")
|
||||
|
||||
(defadvice quit-window (around delete-window-perhaps activate)
|
||||
"Delete the bottom window if necessary."
|
||||
(let* ((win (window-normalize-window (ad-get-arg 2)))
|
||||
(delp (and (window-parameter win 'bw-bottom)
|
||||
(string-match-p "^\\*.*\\*$"
|
||||
(buffer-name (window-buffer win))))))
|
||||
ad-do-it
|
||||
(when delp
|
||||
(delete-window win))))
|
||||
|
||||
(defun bw-create-window ()
|
||||
"Create the bottom window."
|
||||
(let ((win (split-window (frame-root-window) -20 'below)))
|
||||
(set-window-parameter win 'bw-bottom t)
|
||||
;; Don't allow splitting of the bottom window.
|
||||
(set-window-parameter win 'split-window (lambda (window size side) nil))
|
||||
;; Don't allow deleting other windows in the bottom window.
|
||||
(set-window-parameter win 'delete-other-windows (lambda (window) nil))
|
||||
win))
|
||||
|
||||
(defun bw-get-window ()
|
||||
"Try to get the bottom window."
|
||||
(let (win)
|
||||
(mapc
|
||||
(lambda (w)
|
||||
(when (window-parameter w 'bw-bottom)
|
||||
(setq win w)))
|
||||
(window-list))
|
||||
win))
|
||||
|
||||
(defun bw-display-in-bottom-window (buffer alist)
|
||||
"Show BUFFER in the bottom window, discard ALIST."
|
||||
(let ((win (or (bw-get-window) (bw-create-window))))
|
||||
(set-window-buffer win buffer)
|
||||
(setq bw-last-shown-buffer buffer)
|
||||
(local-set-key (kbd "C-c C-q") 'delete-window)
|
||||
win))
|
||||
|
||||
(add-to-list 'display-buffer-alist
|
||||
'("^\\*.*\\*$" . ((bw-display-in-bottom-window . nil))))
|
||||
(add-to-list 'window-persistent-parameters (cons 'bw-bottom t))
|
||||
|
||||
(defun bw-find-appropriate-buffer ()
|
||||
"Find an appropriate buffer for bw."
|
||||
(let ((buffers (buffer-list))
|
||||
tmp-buffer buffer)
|
||||
(while (and (not buffer) buffers)
|
||||
(setq tmp-buffer (car buffers))
|
||||
(when (string-match-p "^\\*.*\\*$" (buffer-name tmp-buffer))
|
||||
(setq buffer tmp-buffer))
|
||||
(setq buffers (cdr buffers)))
|
||||
(unless buffer
|
||||
(setq buffer "*scratch*"))
|
||||
buffer))
|
||||
|
||||
(defun bw-toggle-bottom-window ()
|
||||
"Either show or delete the bottom window."
|
||||
(interactive)
|
||||
(let ((win (bw-get-window)))
|
||||
(if win
|
||||
(delete-window win)
|
||||
(setq win (bw-create-window))
|
||||
(bw-display-in-bottom-window
|
||||
(or bw-last-shown-buffer (bw-find-appropriate-buffer)) nil)
|
||||
(select-window win))))
|
||||
|
||||
(global-set-key (kbd "<f11>") 'bw-toggle-bottom-window)
|
||||
|
||||
(provide 'bw)
|
||||
;;; bw.el ends here
|
Loading…
Reference in a new issue