emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master eb6623b 13/13: Merge commit 'a8c24d676c6e1a47ea4b010633a31


From: Feng Shu
Subject: [elpa] master eb6623b 13/13: Merge commit 'a8c24d676c6e1a47ea4b010633a31571d59f506f'
Date: Thu, 8 Mar 2018 03:59:42 -0500 (EST)

branch: master
commit eb6623b5c4f499becfaf8faddf311090cc46f353
Merge: da7767a a8c24d6
Author: Feng Shu <address@hidden>
Commit: Feng Shu <address@hidden>

    Merge commit 'a8c24d676c6e1a47ea4b010633a31571d59f506f'
---
 packages/posframe/.gitignore  |  1 +
 packages/posframe/posframe.el | 81 +++++++++++++++++++++++++++++--------------
 2 files changed, 56 insertions(+), 26 deletions(-)

diff --git a/packages/posframe/.gitignore b/packages/posframe/.gitignore
new file mode 100644
index 0000000..b0936e8
--- /dev/null
+++ b/packages/posframe/.gitignore
@@ -0,0 +1 @@
+ChangeLog
\ No newline at end of file
diff --git a/packages/posframe/posframe.el b/packages/posframe/posframe.el
index 066df4e..a30c99a 100644
--- a/packages/posframe/posframe.el
+++ b/packages/posframe/posframe.el
@@ -5,7 +5,7 @@
 ;; Author: Feng Shu <address@hidden>
 ;; Maintainer: Feng Shu <address@hidden>
 ;; URL: https://github.com/tumashu/posframe
-;; Version: 0.1.0
+;; Version: 0.2.0
 ;; Keywords: tooltip
 ;; Package-Requires: ((emacs "26"))
 
@@ -140,7 +140,9 @@ frame.")
                                      right-fringe
                                      font
                                      keep-ratio
-                                     override-parameters)
+                                     override-parameters
+                                     respect-header-line
+                                     respect-mode-line)
   "Create a child-frame for posframe.
 This posframe's buffer is POSFRAME-BUFFER."
   (let ((left-fringe (or left-fringe 0))
@@ -154,18 +156,22 @@ This posframe's buffer is POSFRAME-BUFFER."
                     left-fringe
                     font
                     keep-ratio
-                    override-parameters)))
+                    override-parameters
+                    respect-header-line
+                    respect-mode-line)))
     (with-current-buffer posframe-buffer
       ;; Many variables take effect after call `set-window-buffer'
-      (setq-local left-fringe-width left-fringe)
-      (setq-local right-fringe-width right-fringe)
+      (setq-local left-fringe-width nil)
+      (setq-local right-fringe-width nil)
       (setq-local fringes-outside-margins 0)
       (setq-local truncate-lines t)
-      (setq-local mode-line-format nil)
-      (setq-local header-line-format nil)
       (setq-local cursor-type nil)
       (setq-local cursor-in-non-selected-windows nil)
       (setq-local show-trailing-whitespace nil)
+      (unless respect-mode-line
+        (setq-local mode-line-format nil))
+      (unless respect-header-line
+        (setq-local header-line-format nil))
 
       ;; Create child-frame
       (unless (and (frame-live-p posframe--frame)
@@ -189,7 +195,8 @@ This posframe's buffer is POSFRAME-BUFFER."
                           (cons 'font font))
                        (parent-frame . ,(or parent-frame (window-frame)))
                        (keep-ratio ,keep-ratio)
-                       (posframe-buffer . ,posframe-buffer)
+                       (posframe-buffer . ,(cons (buffer-name posframe-buffer)
+                                                 posframe-buffer))
                        (no-accept-focus . t)
                        (min-width  . 0)
                        (min-height . 0)
@@ -216,8 +223,10 @@ This posframe's buffer is POSFRAME-BUFFER."
                        (desktop-dont-save . t))))
         (let ((posframe-window (frame-root-window posframe--frame)))
           ;; This method is more stable than 'setq mode/header-line-format nil'
-          (set-window-parameter posframe-window 'mode-line-format 'none)
-          (set-window-parameter posframe-window 'header-line-format 'none)
+          (unless respect-mode-line
+            (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)))
       posframe--frame)))
 
@@ -237,6 +246,8 @@ This posframe's buffer is POSFRAME-BUFFER."
                          font
                          foreground-color
                          background-color
+                         respect-header-line
+                         respect-mode-line
                          no-properties
                          keep-ratio
                          override-parameters
@@ -294,6 +305,10 @@ By default, posframe's foreground and background color are
 deriverd from current frame, user can set them with the help
 of FOREGROUND-COLOR and BACKGROUND-COLOR.
 
+By default, posframe will force hide header-line and mode-line
+If user want to show header-line or mode-line in posframe,
+set RESPECT-HEADER-LINE or RESPECT-MODE-LINE to t.
+
 OVERRIDE-PARAMETERS is very powful, *all* the frame parameters
 used by posframe's frame can be overrided by it.
 
@@ -334,6 +349,8 @@ you can use `posframe-delete-all' to delete all posframes."
              :foreground-color foreground-color
              :background-color background-color
              :keep-ratio keep-ratio
+             :respect-header-line respect-header-line
+             :respect-mode-line respect-mode-line
              :override-parameters override-parameters))
 
       ;; Insert string to posframe-buffer.
@@ -467,9 +484,11 @@ WIDTH and MIN-WIDTH."
 
 (defun posframe-hide (posframe-buffer)
   "Hide posframe which buffer is POSFRAME-BUFFER."
-  (with-current-buffer (get-buffer-create posframe-buffer)
-    (when (frame-live-p posframe--frame)
-      (make-frame-invisible posframe--frame))))
+  (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)))
+        (make-frame-invisible frame)))))
 
 (defun posframe-delete (posframe-buffer)
   "Delete posframe which buffer POSFRAME-BUFFER."
@@ -480,13 +499,16 @@ WIDTH and MIN-WIDTH."
   "Kill child-frame of posframe.
 This posframe's buffer is POSFRAME-BUFFER."
   (dolist (frame (frame-list))
-    (let ((buffer (frame-parameter frame 'posframe-buffer)))
-      (when (equal posframe-buffer buffer)
-        (with-current-buffer posframe-buffer
-          (dolist (timer '(posframe--refresh-timer
-                           posframe--timeout-timer))
-            (when (timerp timer)
-              (cancel-timer timer))))
+    (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)
@@ -498,23 +520,30 @@ This posframe's buffer is POSFRAME-BUFFER."
 (defun posframe-hide-all ()
   "Hide all posframe's frames."
   (interactive)
-  (dolist (buffer (buffer-list))
-    (with-current-buffer buffer
-      (when (frame-live-p posframe--frame)
-        (make-frame-invisible posframe--frame)))))
+  (dolist (frame (frame-list))
+    (let ((buffer-info (frame-parameter frame 'posframe-buffer)))
+      (when buffer-info (make-frame-invisible frame)))))
 
 ;;;###autoload
 (defun posframe-delete-all ()
   "Delete all posframe's frames and buffers."
   (interactive)
   (dolist (frame (frame-list))
-    (let ((buffer (frame-parameter frame 'posframe-buffer)))
-      (when buffer (delete-frame frame))))
+    (let ((buffer-info (frame-parameter frame 'posframe-buffer)))
+      (when buffer-info (delete-frame frame))))
   (dolist (buffer (buffer-list))
     (with-current-buffer buffer
       (when posframe--frame
         (posframe--kill-buffer buffer)))))
 
+(defun posframe-auto-delete ()
+  "Auto delete posframe when its buffer is killed.
+
+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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]