tumashu / posframe

Pop a posframe (just a child-frame) at point, posframe is a **GNU ELPA** package!
450 stars 58 forks source link

Created 2021-06-01 Tue 10:41

+TITLE: Pop a posframe (just a frame) at point

+AUTHOR: Feng Shu

+html: GNU ELPA

+html: GNU-devel ELPA

+html: MELPA

The main advantages are:

  1. It is fast enough for daily usage :-)
  2. It works well with CJK languages.

NOTE:

  1. For MacOS users, posframe needs Emacs version >= 26.0.91
  2. GNOME users with GTK3 builds need Emacs 27 or later. See variable `posframe-gtk-resize-child-frames' which auto-detects this configuration.

    More details:

    1. [[https://git.savannah.gnu.org/cgit/emacs.git/commit/?h=emacs-27&id=c49d379f17bcb0ce82604def2eaa04bda00bd5ec][Fix some problems with moving and resizing child frames]]
    2. [[https://lists.gnu.org/archive/html/emacs-devel/2020-01/msg00343.html][Emacs's set-frame-size can not work well with gnome-shell?]]

[[file:./snapshots/posframe-1.png]]

+begin_example

(require 'posframe)

+end_example

** Create a posframe

*** Simple way

+begin_example

(when (posframe-workable-p) (posframe-show " my-posframe-buffer" :string "This is a test" :position (point)))

+end_example

*** Advanced way

+begin_example

(defvar my-posframe-buffer " my-posframe-buffer")

(with-current-buffer (get-buffer-create my-posframe-buffer) (erase-buffer) (insert "Hello world"))

(when (posframe-workable-p) (posframe-show my-posframe-buffer :position (point)))

+end_example

*** Arguments

+begin_example

C-h f posframe-show

+end_example

** Hide a posframe

+begin_example

(posframe-hide " my-posframe-buffer")

+end_example

** Hide all posframes

+begin_example

M-x posframe-hide-all

+end_example

** Delete a posframe

  1. Delete posframe and its buffer

    +begin_example

    (posframe-delete " my-posframe-buffer")

    +end_example

  2. Only delete the frame

    +begin_example

    (posframe-delete-frame " my-posframe-buffer")

    +end_example

    ** Delete all posframes

    +begin_example

    M-x posframe-delete-all

    +end_example

Note: this command will delete all posframe buffers. You probably shouldn't use it if you are sharing a buffer between posframe and other packages.

** posframe-arghandler

posframe-arghandler feature has been removed from posframe-1.1, user can use advice feature instead.

** Mouse banish Default setting will work well in most case, but for EXWM user, suggest use the below config.

+begin_src emacs-lisp

(setq posframe-mouse-banish-function #'posframe-mouse-banish-simple)

+end_src