X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Friece-layout.el;h=33467aedd284de298c0aeacb48897a383687c95a;hb=bff3a9f5547f3a03bdacde1c8cdc1fb90c4bf916;hp=08441e38f0fa0cc21f681e1d3561ec3330f45a90;hpb=ee13da9d5673a2634698f0ed5473ab231588d810;p=elisp%2Friece.git diff --git a/lisp/riece-layout.el b/lisp/riece-layout.el index 08441e3..33467ae 100644 --- a/lisp/riece-layout.el +++ b/lisp/riece-layout.el @@ -19,8 +19,8 @@ ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. ;;; Code: @@ -28,7 +28,7 @@ (require 'riece-misc) (defgroup riece-layout nil - "Manage window layouts" + "Window layouts." :prefix "riece-" :group 'riece) @@ -45,18 +45,23 @@ ("bottom-right" riece-configure-windows right bottom) ("bottom-left" riece-configure-windows left bottom) ("top" riece-configure-windows-top) + ("spiral" riece-configure-windows-spiral) ("default" . "middle-right")) "An alist mapping the names to layout functions. An element of this alist is either in the following forms: -(NAME CONFIGURE-FUNCTION [PARAMETERS]) -(NAME1 . NAME2) +\(NAME CONFIGURE-FUNCTION [PARAMETERS]\) +\(NAME1 . NAME2\) In the first form, NAME is a string which specifies the layout setting, and CONFIGURE-FUNCTION is a function which does window splitting, etc. PARAMETERS are collected and passed to CONFIGURE-FUNCTION. In the second form, NAME1 is an alias for NAME2." - :type 'list + :type '(repeat (choice (list :tag "Layout" + (string :tag "Name") + (function :tag "Configure function") + (repeat :tag "Parameters" :inline t symbol)) + (cons :tag "Alias" string string))) :group 'riece-layout) (defun riece-redraw-layout (&optional force) @@ -154,11 +159,13 @@ This function is used by \"default\" layout." (set-window-buffer (selected-window) riece-command-buffer) (select-window rest-window) - (set-window-buffer (split-window rest-window) - riece-others-buffer) + (if riece-others-buffer-mode + (set-window-buffer (split-window rest-window) + riece-others-buffer)) (set-window-buffer (selected-window) riece-channel-buffer)) - (if (eq vpos 'middle) + (if (and (eq vpos 'middle) + riece-others-buffer-mode) (let ((rest-window (split-window))) (set-window-buffer (selected-window) riece-channel-buffer) @@ -167,10 +174,14 @@ This function is used by \"default\" layout." (set-window-buffer rest-window riece-command-buffer)) (let ((rest-window (split-window nil (- (window-height) 4)))) - (set-window-buffer (selected-window) - riece-others-buffer) - (set-window-buffer (split-window) - riece-channel-buffer) + (if riece-others-buffer-mode + (progn + (set-window-buffer (selected-window) + riece-others-buffer) + (set-window-buffer (split-window) + riece-channel-buffer)) + (set-window-buffer (selected-window) + riece-channel-buffer)) (set-window-buffer rest-window riece-command-buffer))))) (if (eq vpos 'bottom) @@ -244,6 +255,52 @@ PLIST accept :command-height, :user-list-width, and :channel-list-width." (select-window (or (get-buffer-window buffer) (get-buffer-window riece-command-buffer))))) +;; +---+-------------------+---+ +;; | c | channel | u | +;; | h | | s | +;; | a | | e | +;; | n |-------------------+ r | | +---+ +;; | n | command | s | | | | +;; | e +-------------------+---+ | +-> | +;; | l | others | +-----+ +;; | s | | +;; +---+-----------------------+ +(defun riece-configure-windows-spiral () + "spiral placement of windows" +;; (interactive) + (let ((command-height 4) + (users-width 15) + (channels-width 30) + (buffer (window-buffer))) + (when (eq (selected-window) (minibuffer-window)) (other-window 1)) + (delete-other-windows) + + ;; (1) create channels window + (let ((rest (split-window (selected-window) channels-width t))) + (set-window-buffer (selected-window) riece-channel-list-buffer) + (select-window rest)) + + ;; (2) create others window + (set-window-buffer (split-window (selected-window) + (+ (/ (window-height) 2) + command-height)) + riece-others-buffer) + + ;; (3) create users window + (set-window-buffer (split-window (selected-window) + (- (window-width) users-width) t) + riece-user-list-buffer) + + ;; (4) create current channel window + (let ((rest (split-window (selected-window) + (- (window-height) command-height)))) + (set-window-buffer rest riece-command-buffer) + (set-window-buffer (selected-window) riece-channel-buffer)) + + (riece-set-window-points) + (select-window (or (get-buffer-window buffer) + (get-buffer-window riece-command-buffer))))) + (provide 'riece-layout) ;;; riece-layout.el ends here