Add ui/posframe module
This commit is contained in:
parent
d563d133ff
commit
a90d17ae38
4 changed files with 76 additions and 0 deletions
|
@ -65,6 +65,7 @@
|
|||
;tabbar ; FIXME an (incomplete) tab bar for Emacs
|
||||
vi-tilde-fringe ; fringe tildes to mark beyond EOB
|
||||
window-select ; visually switch windows
|
||||
posframe ; use child frames where possible (Emacs 26+ only)
|
||||
|
||||
:tools
|
||||
dired ; making dired pretty [functional]
|
||||
|
|
13
modules/ui/posframe/autoload.el
Normal file
13
modules/ui/posframe/autoload.el
Normal file
|
@ -0,0 +1,13 @@
|
|||
;;; ui/posframe/autoloads.el -*- lexical-binding: t; -*-
|
||||
|
||||
;;;###autoload
|
||||
(defun +posframe-ivy-display-at-frame-center-near-bottom (str)
|
||||
"TODO"
|
||||
(ivy-posframe--display str #'+posframe-poshandler-frame-center-near-bottom))
|
||||
|
||||
;;;###autoload
|
||||
(defun +posframe-poshandler-frame-center-near-bottom (info)
|
||||
"TODO"
|
||||
(let ((pos (posframe-poshandler-frame-center info)))
|
||||
(cons (car pos)
|
||||
(truncate (* (cdr pos) 1.60)))))
|
55
modules/ui/posframe/config.el
Normal file
55
modules/ui/posframe/config.el
Normal file
|
@ -0,0 +1,55 @@
|
|||
;;; ui/posframe/config.el -*- lexical-binding: t; -*-
|
||||
|
||||
(when (version< emacs-version "26")
|
||||
(error "The :ui posframe module requires Emacs 26+"))
|
||||
|
||||
|
||||
(def-package! posframe
|
||||
:defer t
|
||||
:config
|
||||
(setq posframe-inhibit-double-buffering t))
|
||||
|
||||
|
||||
(def-package! company-childframe
|
||||
:when (featurep! :completion company)
|
||||
:after company
|
||||
:config
|
||||
(company-childframe-mode 1)
|
||||
(after! desktop
|
||||
(push '(company-childframe-mode . nil) desktop-minor-mode-table)))
|
||||
|
||||
|
||||
(def-package! ivy-posframe
|
||||
:when (featurep! :completion ivy)
|
||||
:after ivy
|
||||
:preface
|
||||
;; This function searches the entire `obarray' just to populate
|
||||
;; `ivy-display-functions-props'. There are 15k entries in mine! This is
|
||||
;; wasteful, so...
|
||||
(advice-add #'ivy-posframe-setup :override #'ignore)
|
||||
:config
|
||||
;; ... let's do it manually
|
||||
(dolist (fn (list 'ivy-posframe-display-at-frame-bottom-left
|
||||
'ivy-posframe-display-at-frame-center
|
||||
'ivy-posframe-display-at-point
|
||||
'ivy-posframe-display-at-frame-bottom-window-center
|
||||
'ivy-posframe-display
|
||||
'ivy-posframe-display-at-window-bottom-left
|
||||
'ivy-posframe-display-at-window-center
|
||||
'+posframe-ivy-display-at-frame-center-near-bottom))
|
||||
(push (list fn :cleanup 'ivy-posframe-cleanup) ivy-display-functions-props))
|
||||
|
||||
(push '(t . +posframe-ivy-display-at-frame-center-near-bottom) ivy-display-functions-alist)
|
||||
(push '(swiper . nil) ivy-display-functions-alist)
|
||||
(ivy-posframe-enable)
|
||||
|
||||
(setq ivy-height 16
|
||||
ivy-fixed-height-minibuffer nil
|
||||
ivy-posframe-parameters `((min-width . 90)
|
||||
(min-height . ,ivy-height)
|
||||
(internal-border-width . 10)))
|
||||
(unless ivy-posframe-font
|
||||
(setq ivy-posframe-font (font-spec :family (font-get doom-font :family) :size 18))))
|
||||
|
||||
|
||||
;; TODO helm-posframe?
|
7
modules/ui/posframe/packages.el
Normal file
7
modules/ui/posframe/packages.el
Normal file
|
@ -0,0 +1,7 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; ui/posframe/packages.el
|
||||
|
||||
(when (featurep! :completion company)
|
||||
(package! company-childframe))
|
||||
(when (featurep! :completion ivy)
|
||||
(package! ivy-posframe))
|
Loading…
Add table
Add a link
Reference in a new issue