;;; +ace-window.el -*- lexical-binding: t; -*-

;;; Code:

(require 'ace-window)

;;;###autoload
(define-minor-mode +ace-window-display-mode
  "Minor mode for updating data for `+modeline-ace-window-display'."
  ;; This is stolen from ace-window.el but with the mode-line stuff ripped out.
  :global t
  (if +ace-window-display-mode
      (progn                            ; Enable
        (aw-update)
        (force-mode-line-update t)
        (add-hook 'window-configuration-change-hook 'aw-update)
        (add-hook 'after-make-frame-functions 'aw--after-make-frame t)
        (advice-add 'aw--lead-overlay :override 'ignore))
    (progn                              ; Disable
      (remove-hook 'window-configuration-change-hook 'aw-update)
      (remove-hook 'after-make-frame-functions 'aw--after-make-frame)
      (advice-remove 'aw--lead-overlay 'ignore))))

;; (defun +ace-window--mode-line-hint (path leaf)
;;   (let ((wnd (cdr leaf)))
;;     (with-selected-window wnd
;;       ())))

;;;###autoload
(defun +ace-window-or-switch-buffer (arg)
  "Call `ace-window' with ARG if more than one window is visible.
Switch to most recent buffer otherwise."
  ;; cribbed from `crux-other-window-or-switch-buffer'
  (interactive "p")
  (if (one-window-p)
      (switch-to-buffer nil)
    (ace-window arg)))

(provide '+ace-window)
;;; +ace-window.el ends here
