;; eev-multiwindow.el - functions to create multi-window setups ;; Copyright (C) 2012-2019 Free Software Foundation, Inc. ;; ;; This file is part of GNU eev. ;; ;; GNU eev 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. ;; ;; GNU eev 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 GNU Emacs. If not, see . ;; ;; Author: Eduardo Ochs ;; Maintainer: Eduardo Ochs ;; Version: 20190201 ;; Keywords: e-scripts ;; ;; Latest version: ;; htmlized: ;; See also: ;; ;; (find-eev-intro) ;;; Commentary: ;; ;; For the main ideas, see: (find-multiwindow-intro) ;;; __ _ _ _ ;;; / _(_)_ __ __| | __ _____ ___| |_ ;;; | |_| | '_ \ / _` |____\ \ /\ / / __|/ _ \ __| ;;; | _| | | | | (_| |_____\ V V /\__ \ __/ |_ ;;; |_| |_|_| |_|\__,_| \_/\_/ |___/\___|\__| ;;; ;; These functions are explained here: ;; (find-multiwindow-intro "1. Introduction") ;; (find-multiwindow-intro "2. `find-wset'") ;; (find-multiwindow-intro "8. Adding support for new characters in `find-wset'") (defun find-wset-1 () (delete-other-windows)) (defun find-wset-2 () (split-window-vertically)) (defun find-wset-3 () (split-window-horizontally)) (defun find-wset-s () (split-window-sensibly (selected-window))) (defun find-wset-o () (other-window 1)) (defun find-wset-O () (other-window -1)) (defun find-wset-+ () (balance-windows)) (defun find-wset-c () (recenter)) (defun find-wset-_ () (eval (car sexps)) (setq sexps (cdr sexps))) (defun find-wset-\ ()) ; allow whitespace (defun find-wset (chars &rest sexps) "Create a multi-window setting according to CHARS and SEXPS. A detailed explanation is here: (find-multiwindow-intro) Here is a list of the standard characters that can be used in CHARS: 1: `delete-other-windows' (C-x C-1) 2: `split-window-vertically' (C-x C-2) 3: `split-window-horizontally' (C-x C-3) s: `split-window-sensibly' o: `other-window' (C-x o) +: `balance-windows' (C-x +) c: `recenter' (C-l) _: execute the next sexp in SEXPS. To add support for a new character, say `C', just define a function `find-wset-C'." (if (not (equal chars "")) (let ((c (substring chars 0 1)) (chars (substring chars 1))) (funcall (ee-intern "find-wset-%s" c)) (apply 'find-wset chars sexps)))) ;; High-level functions. ;; See: (find-multiwindow-intro "3. High-level words") ;; (defun find-2a (a b) (find-wset "13_o_o" a b)) (defun find-2b (a b) (find-wset "13_o_" a b)) (defun find-3a (a b c) (find-wset "13_o2_o_o" a b c)) (defun find-3b (a b c) (find-wset "13_o2_o_oo" a b c)) (defun find-3c (a b c) (find-wset "13_o2_o_" a b c)) ;;; _ _ _ _ _ ;;; ___ ___ _ __ (_) |_ ___| |__ | |__ __ _ ___| | _____ ;;; / _ \/ _ \ '_ \| | __/ __| '_ \ | '_ \ / _` |/ __| |/ / __| ;;; | __/ __/ |_) | | || (__| | | | | | | | (_| | (__| <\__ \ ;;; \___|\___| .__/|_|\__\___|_| |_| |_| |_|\__,_|\___|_|\_\___/ ;;; |_| ;; See: ;; (find-multiwindow-intro "4. Several eepitch targets") ;; (find-multiwindow-intro "5. Restarting eepitch targets") ;; (find-multiwindow-intro "7. Eepitch blocks for two targets") (defun ee-here (code) "Example: (ee-here '(eepitch-xxx)) opens the target of (eepitch-xxx) here. \"Here\" means \"in the current window, without disturbing the current window configuration\". Normal calls to `eepitch-xxx' functions split the screen and open the target buffer in another window; by wrapping them in an `(ee-here ...)' we can bypass that. This is mainly for `find-wset'." (let (result) (find-ebuffer (save-window-excursion (setq result (eval code)) eepitch-buffer-name)) result)) (defun ee-here-reset (code) "Like `ee-here', but also does an `eepitch-kill'." (let (result) (find-ebuffer (save-window-excursion (eval code) (eepitch-kill) (setq result (eval code)) eepitch-buffer-name)) result)) ;; Mnemonic: "e" and "E" are both for preparing eepitch windows, ;; and "E" is more aggressive than "e" (it yells at you). ;; Same for "=" and "!". (defun find-wset-= () (ee-here (car sexps)) (setq sexps (cdr sexps))) (defun find-wset-e () (ee-here (car sexps)) (setq sexps (cdr sexps))) (defun find-wset-! () (ee-here-reset (car sexps)) (setq sexps (cdr sexps))) (defun find-wset-E () (ee-here-reset (car sexps)) (setq sexps (cdr sexps))) (defun find-3ee (b c) (find-wset "13o2=o=o" b c)) (defun find-3EE (b c) (find-wset "13o2!o!o" b c)) (provide 'eev-multiwindow) ;; Local Variables: ;; coding: utf-8-unix ;; no-byte-compile: t ;; End: