[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/posframe 8108052 20/40: Merge pull request #42 from ste
From: |
Feng Shu |
Subject: |
[elpa] externals/posframe 8108052 20/40: Merge pull request #42 from stepnem/refactor |
Date: |
Wed, 5 Feb 2020 04:27:19 -0500 (EST) |
branch: externals/posframe
commit 81080528e088e464ba0107443b29fa76c1a295b2
Merge: 8c636fc fe57b4f
Author: tumashu <address@hidden>
Commit: GitHub <address@hidden>
Merge pull request #42 from stepnem/refactor
Some (hopefully) correctness and comprehensibility improvements
---
posframe.el | 188 +++++++++++++++++++++++++++++++-----------------------------
1 file changed, 96 insertions(+), 92 deletions(-)
diff --git a/posframe.el b/posframe.el
index 1e146f0..4a8ec4b 100644
--- a/posframe.el
+++ b/posframe.el
@@ -92,7 +92,7 @@
;; #+BEGIN_EXAMPLE
;; (posframe-delete " *my-posframe-buffer*")
;; #+END_EXAMPLE
-;; 2. Only delete posframe's frame
+;; 2. Only delete the frame
;; #+BEGIN_EXAMPLE
;; (posframe-delete-frame " *my-posframe-buffer*")
;; #+END_EXAMPLE
@@ -122,7 +122,7 @@
;; #+BEGIN_EXAMPLE
;; (setq posframe-arghandler #'my-posframe-arghandler)
-;; (defun my-posframe-arghandler (posframe-buffer arg-name value)
+;; (defun my-posframe-arghandler (buffer-or-name arg-name value)
;; (let ((info '(:internal-border-width 10 :background-color "green")))
;; (or (plist-get info arg-name) value)))
;; #+END_EXAMPLE
@@ -130,6 +130,7 @@
;;; Code:
;; * posframe's code :CODE:
(require 'cl-lib)
+(eval-when-compile (require 'subr-x)) ; `when-let'
(defgroup posframe nil
"Pop a posframe (just a frame) at point"
@@ -194,7 +195,7 @@ frame.")
emacs-basic-display
(not (display-graphic-p))))))
-(cl-defun posframe--create-posframe (posframe-buffer
+(cl-defun posframe--create-posframe (buffer-or-name
&key
parent-frame
foreground-color
@@ -208,12 +209,12 @@ frame.")
override-parameters
respect-header-line
respect-mode-line)
- "Create a child-frame for posframe.
-This posframe's buffer is POSFRAME-BUFFER."
+ "Create and return a posframe child frame.
+This posframe's buffer is BUFFER-OR-NAME."
(let ((left-fringe (or left-fringe 0))
(right-fringe (or right-fringe 0))
(internal-border-width (or internal-border-width 0))
- (posframe-buffer (get-buffer-create posframe-buffer))
+ (buffer (get-buffer-create buffer-or-name))
(after-make-frame-functions nil)
(args (list parent-frame
foreground-color
@@ -226,7 +227,7 @@ This posframe's buffer is POSFRAME-BUFFER."
override-parameters
respect-header-line
respect-mode-line)))
- (with-current-buffer posframe-buffer
+ (with-current-buffer buffer
;; Many variables take effect after call `set-window-buffer'
(setq-local display-line-numbers nil)
(setq-local frame-title-format "")
@@ -244,6 +245,8 @@ This posframe's buffer is POSFRAME-BUFFER."
(unless respect-header-line
(setq-local header-line-format nil))
+ (add-hook 'kill-buffer-hook #'posframe-auto-delete nil t)
+
;; Create child-frame
(unless (and (frame-live-p posframe--frame)
;; For speed reason, posframe will reuse
@@ -251,7 +254,7 @@ This posframe's buffer is POSFRAME-BUFFER."
;; user change args, recreating frame
;; is needed.
(equal posframe--last-args args))
- (posframe-delete-frame posframe-buffer)
+ (posframe-delete-frame buffer)
(setq-local posframe--last-args args)
(setq-local posframe--last-posframe-pixel-position nil)
(setq-local posframe--last-posframe-size nil)
@@ -266,8 +269,8 @@ This posframe's buffer is POSFRAME-BUFFER."
(cons 'font font))
(parent-frame . ,(or parent-frame (window-frame)))
(keep-ratio ,keep-ratio)
- (posframe-buffer . ,(cons (buffer-name posframe-buffer)
- posframe-buffer))
+ (posframe-buffer . ,(cons (buffer-name buffer)
+ buffer))
(fullscreen . nil)
(no-accept-focus . t)
(min-width . 0)
@@ -302,15 +305,15 @@ This posframe's buffer is POSFRAME-BUFFER."
(set-window-parameter posframe-window 'mode-line-format 'none))
(unless respect-header-line
(set-window-parameter posframe-window 'header-line-format 'none))
- (set-window-buffer posframe-window posframe-buffer)))
+ (set-window-buffer posframe-window buffer)))
posframe--frame)))
-(defun posframe-arghandler-default (_posframe-buffer _arg-name value)
+(defun posframe-arghandler-default (_buffer-or-name _arg-name value)
"The default value of `posframe-arghandler'. Return VALUE."
value)
;;;###autoload
-(cl-defun posframe-show (posframe-buffer
+(cl-defun posframe-show (buffer-or-name
&key
string
position
@@ -389,7 +392,8 @@ The builtin poshandler functions are listed below:
12. `posframe-poshandler-point-top-left-corner'
13. `posframe-poshandler-point-bottom-left-corner'
-This posframe's buffer is POSFRAME-BUFFER.
+This posframe's buffer is BUFFER-OR-NAME, which can be a buffer
+or a name of a (possibly nonexistent) buffer.
If NO-PROPERTIES is non-nil, The STRING's properties will
be removed before being shown in posframe.
@@ -433,31 +437,31 @@ If REFRESH is a number, posframe's frame-size will be
re-adjusted
every REFRESH seconds.
You can use `posframe-delete-all' to delete all posframes."
- (let* ((position (or (funcall posframe-arghandler posframe-buffer :position
position) (point)))
- (poshandler (funcall posframe-arghandler posframe-buffer :poshandler
poshandler))
- (width (funcall posframe-arghandler posframe-buffer :width width))
- (height (funcall posframe-arghandler posframe-buffer :height height))
- (min-width (or (funcall posframe-arghandler posframe-buffer
:min-width min-width) 1))
- (min-height (or (funcall posframe-arghandler posframe-buffer
:min-height min-height) 1))
- (x-pixel-offset (or (funcall posframe-arghandler posframe-buffer
:x-pixel-offset x-pixel-offset) 0))
- (y-pixel-offset (or (funcall posframe-arghandler posframe-buffer
:y-pixel-offset y-pixel-offset) 0))
- (left-fringe (funcall posframe-arghandler posframe-buffer
:left-fringe left-fringe))
- (right-fringe (funcall posframe-arghandler posframe-buffer
:right-fringe right-fringe))
- (internal-border-width (funcall posframe-arghandler posframe-buffer
:internal-border-width internal-border-width))
- (internal-border-color (funcall posframe-arghandler posframe-buffer
:internal-border-color internal-border-color))
- (font (funcall posframe-arghandler posframe-buffer :font font))
- (foreground-color (funcall posframe-arghandler posframe-buffer
:foreground-color foreground-color))
- (background-color (funcall posframe-arghandler posframe-buffer
:background-color background-color))
- (respect-header-line (funcall posframe-arghandler posframe-buffer
:respect-header-line respect-header-line))
- (respect-mode-line (funcall posframe-arghandler posframe-buffer
:respect-mode-line respect-mode-line))
- (initialize (funcall posframe-arghandler posframe-buffer :initialize
initialize))
- (no-properties (funcall posframe-arghandler posframe-buffer
:no-properties no-properties))
- (keep-ratio (funcall posframe-arghandler posframe-buffer :keep-ratio
keep-ratio))
- (override-parameters (funcall posframe-arghandler posframe-buffer
:override-parameters override-parameters))
- (timeout (funcall posframe-arghandler posframe-buffer :timeout
timeout))
- (refresh (funcall posframe-arghandler posframe-buffer :refresh
refresh))
+ (let* ((position (or (funcall posframe-arghandler buffer-or-name :position
position) (point)))
+ (poshandler (funcall posframe-arghandler buffer-or-name :poshandler
poshandler))
+ (width (funcall posframe-arghandler buffer-or-name :width width))
+ (height (funcall posframe-arghandler buffer-or-name :height height))
+ (min-width (or (funcall posframe-arghandler buffer-or-name :min-width
min-width) 1))
+ (min-height (or (funcall posframe-arghandler buffer-or-name
:min-height min-height) 1))
+ (x-pixel-offset (or (funcall posframe-arghandler buffer-or-name
:x-pixel-offset x-pixel-offset) 0))
+ (y-pixel-offset (or (funcall posframe-arghandler buffer-or-name
:y-pixel-offset y-pixel-offset) 0))
+ (left-fringe (funcall posframe-arghandler buffer-or-name :left-fringe
left-fringe))
+ (right-fringe (funcall posframe-arghandler buffer-or-name
:right-fringe right-fringe))
+ (internal-border-width (funcall posframe-arghandler buffer-or-name
:internal-border-width internal-border-width))
+ (internal-border-color (funcall posframe-arghandler buffer-or-name
:internal-border-color internal-border-color))
+ (font (funcall posframe-arghandler buffer-or-name :font font))
+ (foreground-color (funcall posframe-arghandler buffer-or-name
:foreground-color foreground-color))
+ (background-color (funcall posframe-arghandler buffer-or-name
:background-color background-color))
+ (respect-header-line (funcall posframe-arghandler buffer-or-name
:respect-header-line respect-header-line))
+ (respect-mode-line (funcall posframe-arghandler buffer-or-name
:respect-mode-line respect-mode-line))
+ (initialize (funcall posframe-arghandler buffer-or-name :initialize
initialize))
+ (no-properties (funcall posframe-arghandler buffer-or-name
:no-properties no-properties))
+ (keep-ratio (funcall posframe-arghandler buffer-or-name :keep-ratio
keep-ratio))
+ (override-parameters (funcall posframe-arghandler buffer-or-name
:override-parameters override-parameters))
+ (timeout (funcall posframe-arghandler buffer-or-name :timeout
timeout))
+ (refresh (funcall posframe-arghandler buffer-or-name :refresh
refresh))
;;-----------------------------------------------------
- (posframe-buffer (get-buffer-create posframe-buffer))
+ (buffer (get-buffer-create buffer-or-name))
(parent-window (selected-window))
(parent-window-top (window-pixel-top parent-window))
(parent-window-left (window-pixel-left parent-window))
@@ -479,7 +483,7 @@ You can use `posframe-delete-all' to delete all posframes."
(frame-resize-pixelwise t)
posframe)
- (with-current-buffer posframe-buffer
+ (with-current-buffer buffer
;; Initialize
(unless posframe--initialized-p
@@ -494,7 +498,7 @@ You can use `posframe-delete-all' to delete all posframes."
;; Create posframe
(setq posframe
(posframe--create-posframe
- posframe-buffer
+ buffer
:font font
:parent-frame parent-frame
:left-fringe left-fringe
@@ -508,7 +512,7 @@ You can use `posframe-delete-all' to delete all posframes."
:respect-mode-line respect-mode-line
:override-parameters override-parameters))
- ;; Insert string to posframe-buffer.
+ ;; Insert string into the posframe buffer
(posframe--insert-string string no-properties)
;; Set posframe's size
@@ -528,7 +532,7 @@ You can use `posframe-delete-all' to delete all posframes."
:posframe ,posframe
:posframe-width ,(frame-pixel-width posframe)
:posframe-height ,(frame-pixel-height posframe)
- :posframe-buffer ,posframe-buffer
+ :posframe-buffer ,buffer
:parent-frame ,parent-frame
:parent-frame-width ,parent-frame-width
:parent-frame-height ,parent-frame-height
@@ -662,65 +666,67 @@ WIDTH and MIN-WIDTH."
frame height min-height width min-width)))
posframe height min-height width min-width)))))
-(defun posframe-hide (posframe-buffer)
- "Hide posframe which buffer is POSFRAME-BUFFER."
- (dolist (frame (frame-list))
- (let ((buffer-info (frame-parameter frame 'posframe-buffer)))
- (when (or (equal posframe-buffer (car buffer-info))
- (equal posframe-buffer (cdr buffer-info)))
- (posframe--make-frame-invisible frame)))))
-
-(defun posframe-delete (posframe-buffer)
- "Delete posframe which buffer POSFRAME-BUFFER."
- (posframe-delete-frame posframe-buffer)
- (posframe--kill-buffer posframe-buffer))
-
-(defun posframe-delete-frame (posframe-buffer)
- "Kill child-frame of posframe.
-This posframe's buffer is POSFRAME-BUFFER."
- (dolist (frame (frame-list))
- (let ((buffer-info (frame-parameter frame 'posframe-buffer))
- (buffer (get-buffer posframe-buffer)))
- (when (or (equal posframe-buffer (car buffer-info))
- (equal posframe-buffer (cdr buffer-info)))
- (when buffer
- (with-current-buffer buffer
- (dolist (timer '(posframe--refresh-timer
- posframe--timeout-timer))
- (when (timerp timer)
- (cancel-timer timer)))))
- (delete-frame frame)))))
-
-(defun posframe--kill-buffer (posframe-buffer)
- "Kill posframe's buffer: POSFRAME-BUFFER."
- (when (buffer-live-p (get-buffer posframe-buffer))
- (kill-buffer posframe-buffer)))
-
-(defun posframe-funcall (posframe-buffer function &rest arguments)
- "Select posframe of POSFRAME-BUFFER's, and call FUNCTION.
-passing remaining ARGUMENTS to it."
- (when (get-buffer posframe-buffer)
- (with-current-buffer posframe-buffer
- (when (framep posframe--frame)
- (with-selected-frame posframe--frame
- (when (functionp function)
+(defun posframe-buffer-frame (buffer-or-name)
+ "Return the posframe pertaining to BUFFER-OR-NAME.
+BUFFER-OR-NAME can be a buffer or a buffer name."
+ (when-let ((buffer (get-buffer buffer-or-name)))
+ (with-current-buffer buffer posframe--frame)))
+
+(defun posframe-hide (buffer-or-name)
+ "Hide posframe pertaining to BUFFER-OR-NAME.
+BUFFER-OR-NAME can be a buffer or a buffer name."
+ (when-let ((frame (posframe-buffer-frame buffer-or-name)))
+ (posframe--make-frame-invisible frame)))
+
+(defun posframe-delete (buffer-or-name)
+ "Delete posframe pertaining to BUFFER-OR-NAME and kill the buffer.
+BUFFER-OR-NAME can be a buffer or a buffer name."
+ (posframe-delete-frame buffer-or-name)
+ (posframe--kill-buffer buffer-or-name))
+
+(defun posframe-delete-frame (buffer-or-name)
+ "Delete posframe pertaining to BUFFER-OR-NAME.
+BUFFER-OR-NAME can be a buffer or a buffer name."
+ (when-let ((buffer (get-buffer buffer-or-name)))
+ (with-current-buffer buffer
+ (dolist (timer '(posframe--refresh-timer
+ posframe--timeout-timer))
+ (when (timerp timer)
+ (cancel-timer timer)))
+ (when (frame-live-p posframe--frame)
+ (delete-frame posframe--frame)))))
+
+(defun posframe--kill-buffer (buffer-or-name)
+ "Kill posframe's buffer: BUFFER-OR-NAME.
+BUFFER-OR-NAME can be a buffer or a buffer name."
+ (when (buffer-live-p (get-buffer buffer-or-name))
+ (kill-buffer buffer-or-name)))
+
+(defun posframe-funcall (buffer-or-name function &rest arguments)
+ "Select posframe of BUFFER-OR-NAME and call FUNCTION with ARGUMENTS.
+BUFFER-OR-NAME can be a buffer or a buffer name."
+ (when (functionp function)
+ (when (get-buffer buffer-or-name)
+ (with-current-buffer buffer-or-name
+ (when (framep posframe--frame)
+ (with-selected-frame posframe--frame
(apply function arguments)))))))
;;;###autoload
(defun posframe-hide-all ()
- "Hide all posframe's frames."
+ "Hide all posframe frames."
(interactive)
(dolist (frame (frame-list))
- (let ((buffer-info (frame-parameter frame 'posframe-buffer)))
- (when buffer-info (posframe--make-frame-invisible frame)))))
+ (when (frame-parameter frame 'posframe-buffer)
+ (posframe--make-frame-invisible frame))))
;;;###autoload
(defun posframe-delete-all ()
- "Delete all posframe's frames and buffers."
+ "Delete all posframe frames and buffers."
(interactive)
(dolist (frame (frame-list))
- (let ((buffer-info (frame-parameter frame 'posframe-buffer)))
- (when buffer-info (delete-frame frame))))
+ (when (frame-parameter frame 'posframe-buffer)
+ (delete-frame frame)))
(dolist (buffer (buffer-list))
(with-current-buffer buffer
(when posframe--frame
@@ -732,8 +738,6 @@ passing remaining ARGUMENTS to it."
This function is used by `kill-buffer-hook'."
(posframe-delete-frame (current-buffer)))
-(add-hook 'kill-buffer-hook #'posframe-auto-delete)
-
;; Posframe's position handler
(defun posframe-run-poshandler (info)
"Run posframe's position handler.
- [elpa] externals/posframe 2c5f390 16/40: 'posframe-buffer-frame': New function to get a buffer's posframe, (continued)
- [elpa] externals/posframe 2c5f390 16/40: 'posframe-buffer-frame': New function to get a buffer's posframe, Feng Shu, 2020/02/05
- [elpa] externals/posframe fe57b4f 19/40: Don't modify global value of 'kill-buffer-hook', Feng Shu, 2020/02/05
- [elpa] externals/posframe e3fd09f 35/40: posframe-show: call redisplay to let border showed., Feng Shu, 2020/02/05
- [elpa] externals/posframe b77cd06 29/40: add space after period, Feng Shu, 2020/02/05
- [elpa] externals/posframe f413a4f 30/40: add center handler, Feng Shu, 2020/02/05
- [elpa] externals/posframe 1fd8c8c 13/40: Remove unused bindings in 'posframe-hide-all' and 'posframe-delete-all', Feng Shu, 2020/02/05
- [elpa] externals/posframe d7f48a4 10/40: Merge pull request #40 from stepnem/current-buffer-bug, Feng Shu, 2020/02/05
- [elpa] externals/posframe 15ffbef 21/40: Revert "Improve 'posframe-delete-frame'", Feng Shu, 2020/02/05
- [elpa] externals/posframe d504867 33/40: Add posframe-refresh, Feng Shu, 2020/02/05
- [elpa] externals/posframe f335f92 24/40: Make the buffer in posframe dedicated, Feng Shu, 2020/02/05
- [elpa] externals/posframe 8108052 20/40: Merge pull request #42 from stepnem/refactor,
Feng Shu <=
- [elpa] externals/posframe bb13933 25/40: Merge pull request #47 from yyoncho/master, Feng Shu, 2020/02/05
- [elpa] externals/posframe f390e35 27/40: Fix: Posframe is slow if emacs is built using athena toolkit #45, Feng Shu, 2020/02/05
- [elpa] externals/posframe b44c1ae 31/40: Merge pull request #50 from conao3/add-center-handler, Feng Shu, 2020/02/05
- [elpa] externals/posframe d75dc15 26/40: Fix: Frame not tall enough if line-spacing > 0 #48, Feng Shu, 2020/02/05
- [elpa] externals/posframe 8c636fc 11/40: Merge pull request #41 from stepnem/doc-string, Feng Shu, 2020/02/05
- [elpa] externals/posframe 330cae2 15/40: Improve 'posframe-delete-frame', Feng Shu, 2020/02/05
- [elpa] externals/posframe 46ffb02 12/40: Rename posframe-buffer function parameter to buffer-or-name, Feng Shu, 2020/02/05
- [elpa] externals/posframe 85c9777 17/40: Touch up some doc strings, Feng Shu, 2020/02/05
- [elpa] externals/posframe dcc281c 34/40: Add some packages which use posframe, as examples., Feng Shu, 2020/02/05
- [elpa] externals/posframe bfd2e55 23/40: Update README, Feng Shu, 2020/02/05