;;; -*- lexical-binding: t -*- ;; ;; -------------------------------------------------------------------------- (require 'luki-lisp) ;; -------------------------------------------------------------------------- (-> 'window) ;; -------------------------------------------------------------------------- (setq display-buffer-base-action '((display-buffer-reuse-window display-buffer-same-window))) ;; -------------------------------------------------------------------------- (defmacro with-other-window (&rest body) `(with-selected-window (next-window) ,@body)) (defun apply-in-other-window (fn &rest args) (with-other-window (apply fn args))) ;; -------------------------------------------------------------------------- (defun window-chars (&optional win) (pcase-let ((`(,beg ,_ ,end ,_) (window-inside-edges win))) (- end beg 1))) (defun window-lines (&optional win) (pcase-let ((`(,_ ,top ,_ ,bottom) (window-inside-edges win))) (- bottom top))) ;; -------------------------------------------------------------------------- (defun beginning-of-line-at-top () (beginning-of-line) (recenter 0)) ;; -------------------------------------------------------------------------- (defun other-window-or-split () (i) (when (one-window-p) (split-window-below)) (other-window 1)) ;; -------------------------------------------------------------------------- (defun swap-windows () (i) (let ((buf (current-buffer))) (other-window 1) (switch-to-buffer-other-window (current-buffer)) (other-window 1) (switch-to-buffer buf))) ;; -------------------------------------------------------------------------- (defun window-increase-size (&optional lines hori) (interactive "p") (or lines (setq lines 1)) (unless (one-window-p) (window-resize nil lines hori))) (defun window-decrease-size (&optional lines hori) (interactive "p") (or lines (setq lines 1)) (unless (one-window-p) (window-resize nil (* -1 lines) hori))) ;; -------------------------------------------------------------------------- (<- 'll-window)