You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

39 lines
1.3 KiB

(defvar aw--posframe-frames '())
(defvar aw-posframe-position-handler #'posframe-poshandler-window-center)
(defun aw--lead-overlay-posframe (path leaf)
(let* ((wnd (cdr leaf))
(str (apply #'string path))
(bufname (format "*aw-posframe-buffer-%s*" (gensym))))
(with-selected-window wnd
(push bufname aw--posframe-frames)
(posframe-show bufname
:string str
:poshandler aw-posframe-position-handler
:font (face-font 'aw-leading-char-face)
:foreground-color (face-foreground 'aw-leading-char-face)
:background-color (face-background 'aw-leading-char-face)))))
(defun aw--remove-leading-chars-posframe ()
(map nil #'posframe-delete aw--posframe-frames))
(defun ace-window-posframe-enable ()
(setq aw--lead-overlay-fn #'aw--lead-overlay-posframe
aw--remove-leading-chars-fn #'aw--remove-leading-chars-posframe))
(defun ace-window-posframe-disable ()
(setq aw--lead-overlay-fn #'aw--lead-overlay
aw--remove-leading-chars-fn #'aw--remove-leading))
;;;###autoload
(define-minor-mode ace-window-posframe-mode
""
:global t
:require 'ace-window
:init-value nil
(if ace-window-posframe-mode
(ace-window-posframe-enable)
(ace-window-posframe-disable)))
(provide 'ace-window-posframe)