* [RFC] Add posframe.el to elpa
@ 2018-02-23 8:57 tumashu
2018-02-23 15:16 ` Stefan Monnier
0 siblings, 1 reply; 22+ messages in thread
From: tumashu @ 2018-02-23 8:57 UTC (permalink / raw)
To: emacs-devel@gnu.org
[-- Attachment #1: Type: text/plain, Size: 306 bytes --]
Posframe's feature is similar pos-tip or popup-tip, It can pop a posframe at point, this posframe is a child-frame with its root window's buffer.
https://github.com/tumashu/posframe
This is my first contribute to elpa, I have signed the GNU paper when I hack org-mode, any other things to do?
Thanks!
[-- Attachment #2: Type: text/html, Size: 541 bytes --]
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [RFC] Add posframe.el to elpa
2018-02-23 8:57 [RFC] Add posframe.el to elpa tumashu
@ 2018-02-23 15:16 ` Stefan Monnier
2018-02-24 0:22 ` tumashu
0 siblings, 1 reply; 22+ messages in thread
From: Stefan Monnier @ 2018-02-23 15:16 UTC (permalink / raw)
To: emacs-devel
Hi,
> Posframe's feature is similar pos-tip or popup-tip,
I don't know those packages, sorry.
> It can pop a posframe at point, this posframe is a child-frame with
> its root window's buffer.
>
> https://github.com/tumashu/posframe
Looks good.
> This is my first contribute to elpa, I have signed the GNU paper when
> I hack org-mode, any other things to do?
Do you want to put it into elpa.git yourself, or do you prefer that
I do it?
Stefan
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re:Re: [RFC] Add posframe.el to elpa
2018-02-23 15:16 ` Stefan Monnier
@ 2018-02-24 0:22 ` tumashu
2018-02-25 13:10 ` Stefan Monnier
0 siblings, 1 reply; 22+ messages in thread
From: tumashu @ 2018-02-24 0:22 UTC (permalink / raw)
To: Stefan Monnier; +Cc: emacs-devel@gnu.org
[-- Attachment #1: Type: text/plain, Size: 661 bytes --]
At 2018-02-23 23:16:52, "Stefan Monnier" <monnier@iro.umontreal.ca> wrote: >Hi, > >> Posframe's feature is similar pos-tip or popup-tip, > >I don't know those packages, sorry. > >> It can pop a posframe at point, this posframe is a child-frame with >> its root window's buffer. >> >> https://github.com/tumashu/posframe > >Looks good. > >> This is my first contribute to elpa, I have signed the GNU paper when >> I hack org-mode, any other things to do? > >Do you want to put it into elpa.git yourself, or do you prefer that >I do it?
I prefer sync devel with my github repo :-), I have register a savannah.gnu.org account: tumashu
> > > Stefan >
[-- Attachment #2: Type: text/html, Size: 990 bytes --]
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [RFC] Add posframe.el to elpa
2018-02-24 0:22 ` tumashu
@ 2018-02-25 13:10 ` Stefan Monnier
2018-02-25 23:45 ` Feng Shu
0 siblings, 1 reply; 22+ messages in thread
From: Stefan Monnier @ 2018-02-25 13:10 UTC (permalink / raw)
To: tumashu; +Cc: emacs-devel@gnu.org
> > Do you want to put it into elpa.git yourself, or do you prefer that
> > I do it?
> I prefer sync devel with my github repo :-),
I'm afraid I don't know how that relates to the question.
> I have register a savannah.gnu.org account: tumashu
Then I think you'll want to "request membership" in the `emacs` group from
your user page.
Stefan
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [RFC] Add posframe.el to elpa
2018-02-25 13:10 ` Stefan Monnier
@ 2018-02-25 23:45 ` Feng Shu
2018-02-26 3:20 ` Stefan Monnier
0 siblings, 1 reply; 22+ messages in thread
From: Feng Shu @ 2018-02-25 23:45 UTC (permalink / raw)
To: Stefan Monnier; +Cc: emacs-devel@gnu.org
Stefan Monnier <monnier@IRO.UMontreal.CA> writes:
>> > Do you want to put it into elpa.git yourself, or do you prefer that
>> > I do it?
>> I prefer sync devel with my github repo :-),
>
> I'm afraid I don't know how that relates to the question.
>
>> I have register a savannah.gnu.org account: tumashu
>
> Then I think you'll want to "request membership" in the `emacs` group from
> your user page.
I are waiting for approval :-)
With the help of elpa README, I decide use subtree to deal with poframe.
Two question:
1. Does all the package maintainer have elpa.git write access?
2. the posframe's git log is very ugly, should I SQUASH my posframe repo
before adding it to elpa's subtree?
>
>
> Stefan
--
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [RFC] Add posframe.el to elpa
2018-02-25 23:45 ` Feng Shu
@ 2018-02-26 3:20 ` Stefan Monnier
2018-02-26 7:44 ` tumashu
0 siblings, 1 reply; 22+ messages in thread
From: Stefan Monnier @ 2018-02-26 3:20 UTC (permalink / raw)
To: Feng Shu; +Cc: emacs-devel@gnu.org
> Two question:
> 1. Does all the package maintainer have elpa.git write access?
Usually, yes.
> 2. the posframe's git log is very ugly, should I SQUASH my posframe repo
> before adding it to elpa's subtree?
Your call. Squashing makes future sync-ing between elpa.git and some
other repository rather painful, so I'd only recommend it if you intend
for elpa.git to become the "official upstream".
Stefan
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re:Re: [RFC] Add posframe.el to elpa
2018-02-26 3:20 ` Stefan Monnier
@ 2018-02-26 7:44 ` tumashu
2018-02-26 10:51 ` Dmitry Gutov
0 siblings, 1 reply; 22+ messages in thread
From: tumashu @ 2018-02-26 7:44 UTC (permalink / raw)
To: Stefan Monnier; +Cc: emacs-devel@gnu.org
[-- Attachment #1.1: Type: text/plain, Size: 619 bytes --]
OK, I have reinit my posframe's github repo, and add it to elpa.git with subtree.
the patches are here :-)
At 2018-02-26 11:20:22, "Stefan Monnier" <monnier@IRO.UMontreal.CA> wrote: >> Two question: >> 1. Does all the package maintainer have elpa.git write access? > >Usually, yes. > >> 2. the posframe's git log is very ugly, should I SQUASH my posframe repo >> before adding it to elpa's subtree? > >Your call. Squashing makes future sync-ing between elpa.git and some >other repository rather painful, so I'd only recommend it if you intend >for elpa.git to become the "official upstream". > > > Stefan
[-- Attachment #1.2: Type: text/html, Size: 925 bytes --]
[-- Attachment #2: 0001-Reinit-the-repo-for-sync-elpa.git.patch --]
[-- Type: application/octet-stream, Size: 100465 bytes --]
From 489620f6bd1ca5a6363d4ab9176b6eeb753e7f3b Mon Sep 17 00:00:00 2001
From: Feng Shu <tumashu@163.com>
Date: Mon, 26 Feb 2018 15:25:11 +0800
Subject: [PATCH 1/2] Reinit the repo for sync elpa.git
The old repo's git log is ugly and seem to useless, if I use git subtree
to sync it to elpa.git, the ugly log will go into elpa.git too. It seem to
be not a good idea.
A new start ....
---
README.md | 95 +++++++
posframe.el | 719 +++++++++++++++++++++++++++++++++++++++++++++++
snapshots/posframe-1.png | Bin 0 -> 55570 bytes
3 files changed, 814 insertions(+)
create mode 100644 README.md
create mode 100644 posframe.el
create mode 100644 snapshots/posframe-1.png
diff --git a/README.md b/README.md
new file mode 100644
index 000000000..3f227e52e
--- /dev/null
+++ b/README.md
@@ -0,0 +1,95 @@
+
+# 目录
+
+1. [Posframe README](#org53f6910)
+ 1. [What is posframe](#org5cf1be8)
+ 2. [Installation](#org5f830e9)
+ 3. [Usage](#org40db1ee)
+ 1. [Create a posframe](#org6f36699)
+ 2. [Hide a posframe](#orgcd529fe)
+ 3. [Hide all posframes](#org4e71a28)
+ 4. [Delete a posframe](#org0f069f2)
+ 5. [Delete all posframes](#org853d491)
+
+
+<a id="org53f6910"></a>
+
+# Posframe README
+
+
+<a id="org5cf1be8"></a>
+
+## What is posframe
+
+Posframe can pop a posframe at point, this **posframe** is a
+child-frame with its root window's buffer.
+
+The main advantages are:
+
+1. It is fast enough for daily usage :-)
+2. It works well with CJK language.
+
+NOTE: For MacOS users, posframe need emacs (version >= 26.0.91)
+
+![img](./snapshots/posframe-1.png)
+
+
+<a id="org5f830e9"></a>
+
+## Installation
+
+ (require 'posframe)
+
+
+<a id="org40db1ee"></a>
+
+## Usage
+
+
+<a id="org6f36699"></a>
+
+### Create a posframe
+
+ (posframe-show " *my-posframe-buffer*"
+ :string "This is a test"
+ :position (point))
+
+Arguments documents:
+
+ C-h f posframe-show
+
+
+<a id="orgcd529fe"></a>
+
+### Hide a posframe
+
+ (posframe-hide " *my-posframe-buffer*")
+
+
+<a id="org4e71a28"></a>
+
+### Hide all posframes
+
+ M-x posframe-hide-all
+
+
+<a id="org0f069f2"></a>
+
+### Delete a posframe
+
+ (posframe-delete " *my-posframe-buffer*")
+
+
+<a id="org853d491"></a>
+
+### Delete all posframes
+
+ M-x posframe-delete-all
+
+Note: this command will delete all posframe buffers,
+suggest not run this command if you are sharing a buffer
+between posframe and other packages.
+
+
+
+Converted from posframe.el by [el2org](https://github.com/tumashu/el2org) .
\ No newline at end of file
diff --git a/posframe.el b/posframe.el
new file mode 100644
index 000000000..0ed9c4255
--- /dev/null
+++ b/posframe.el
@@ -0,0 +1,719 @@
+;;; posframe.el --- Pop a posframe (just a frame) at point -*- lexical-binding:t -*-
+
+;; Copyright (C) 2018 Free Software Foundation, Inc.
+
+;; Author: Feng Shu <tumashu@163.com>
+;; Maintainer: Feng Shu <tumashu@163.com>
+;; URL: https://github.com/tumashu/posframe
+;; Version: 0.1.0
+;; Keywords: tooltip
+;; Package-Requires: ((emacs "26"))
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+
+;;; Commentary:
+
+;; * Posframe README :README:
+;; ** What is posframe
+;; Posframe can pop a posframe at point, this *posframe* is a
+;; child-frame with its root window's buffer.
+
+;; The main advantages are:
+;; 1. It is fast enough for daily usage :-)
+;; 2. It works well with CJK language.
+
+;; NOTE: For MacOS users, posframe need Emacs (version >= 26.0.91)
+
+;; [[./snapshots/posframe-1.png]]
+
+;; ** Installation
+
+;; #+BEGIN_EXAMPLE
+;; (require 'posframe)
+;; #+END_EXAMPLE
+
+;; ** Usage
+
+;; *** Create a posframe
+
+;; #+BEGIN_EXAMPLE
+;; (posframe-show " *my-posframe-buffer*"
+;; :string "This is a test"
+;; :position (point))
+;; #+END_EXAMPLE
+
+;; Arguments documents:
+;; #+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
+;; #+BEGIN_EXAMPLE
+;; (posframe-delete " *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,
+;; suggest not run this command if you are sharing a buffer
+;; between posframe and other packages.
+
+;;; Code:
+;; * posframe's code :CODE:
+(require 'cl-lib)
+
+(defconst posframe-version "0.1.0")
+
+(defgroup posframe nil
+ "Pop a posframe (just a frame) at point"
+ :group 'lisp
+ :prefix "posframe-")
+
+(defcustom posframe-mouse-banish t
+ "Mouse will be moved to (0 , 0) when it is non-nil."
+ :group 'posframe
+ :type 'boolean)
+
+(defcustom posframe-inhibit-double-buffering nil
+ "Set the posframe's frame-parameter: inhibit-double-buffering."
+ :group 'posframe
+ :type 'boolean)
+
+(defvar-local posframe--frame nil
+ "Record posframe's frame.")
+
+(defvar-local posframe--last-position nil
+ "Record the last pixel position of posframe's frame.")
+
+(defvar-local posframe--last-posframe-size nil
+ "Record the last size of posframe's frame.")
+
+(defvar-local posframe--last-parent-frame-size nil
+ "Record the last size of posframe's parent-frame.")
+
+(defvar-local posframe--last-args nil
+ "Record the last arguments of `posframe--create-posframe'.
+
+If these args have changed, posframe will recreate its
+frame.")
+
+(defvar-local posframe--timeout-timer nil
+ "Record the timer to deal with timeout argument of `posframe-show'.")
+
+(defvar-local posframe--refresh-timer nil
+ "Record the timer to deal with refresh argument of `posframe-show'.")
+
+
+(cl-defun posframe--create-posframe (posframe-buffer
+ &key
+ parent-frame
+ foreground-color
+ background-color
+ left-fringe
+ right-fringe
+ font
+ keep-ratio
+ override-parameters)
+ "Create a child-frame for posframe.
+This posframe's buffer is POSFRAME-BUFFER."
+ (let ((left-fringe (or left-fringe 0))
+ (right-fringe (or right-fringe 0))
+ (posframe-buffer (get-buffer-create posframe-buffer))
+ (after-make-frame-functions nil)
+ (args (list parent-frame
+ foreground-color
+ background-color
+ right-fringe
+ left-fringe
+ font
+ keep-ratio
+ override-parameters)))
+ (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 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)
+
+ ;; Create child-frame
+ (unless (and (frame-live-p posframe--frame)
+ ;; For speed reason, posframe will reuse
+ ;; existing frame at possible, but when
+ ;; user change args, recreating frame
+ ;; is needed.
+ (equal posframe--last-args args))
+ (posframe--delete-frame posframe-buffer)
+ (setq-local posframe--last-args args)
+ (setq-local posframe--last-position nil)
+ (setq-local posframe--last-posframe-size nil)
+ (setq-local posframe--frame
+ (make-frame
+ `(,@override-parameters
+ ,(when foreground-color
+ (cons 'foreground-color foreground-color))
+ ,(when background-color
+ (cons 'background-color background-color))
+ ,(when font
+ (cons 'font font))
+ (parent-frame . ,(or parent-frame (window-frame)))
+ (keep-ratio ,keep-ratio)
+ (posframe-buffer . ,posframe-buffer)
+ (no-accept-focus . t)
+ (min-width . 0)
+ (min-height . 0)
+ (border-width . 0)
+ (internal-border-width . 0)
+ (vertical-scroll-bars . nil)
+ (horizontal-scroll-bars . nil)
+ (left-fringe . ,left-fringe)
+ (right-fringe . ,right-fringe)
+ (menu-bar-lines . 0)
+ (tool-bar-lines . 0)
+ (line-spacing . 0)
+ (unsplittable . t)
+ (no-other-frame . t)
+ (undecorated . t)
+ (visibility . nil)
+ (cursor-type . nil)
+ (minibuffer . nil)
+ (width . 1)
+ (height . 1)
+ (no-special-glyphs . t)
+ (inhibit-double-buffering . ,posframe-inhibit-double-buffering)
+ ;; Do not save child-frame when use desktop.el
+ (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)
+ (set-window-buffer posframe-window posframe-buffer)))
+ posframe--frame)))
+
+(cl-defun posframe-show (posframe-buffer
+ &key
+ string
+ position
+ poshandler
+ width
+ height
+ min-width
+ min-height
+ x-pixel-offset
+ y-pixel-offset
+ left-fringe
+ right-fringe
+ font
+ foreground-color
+ background-color
+ no-properties
+ keep-ratio
+ override-parameters
+ timeout
+ refresh)
+ "Pop posframe and show STRING at POSITION.
+
+POSITION can be:
+1. A integer number, which regard as a point.
+2. A cons of integer, which regard as absolute X and Y.
+3. Other types, User should set POSHANDLER manual to deal
+ with them.
+
+POSHANDLER is a function with one argument, and return
+a real position. its argument is a plist, which like
+
+ (:position xxx :poshandler xxx
+ :font-height xxx :font-width xxx
+ :posframe xxx :posframe-buffer xxx
+ :parent-frame xxx :parent-window xxx
+ :x-pixel-offset xxx :y-pixel-offset xxx)
+
+by default, poshandler is auto selected based on
+POSITION's type, but user can *force* set one with
+the help of POSHANDLER argument. the below are buildin
+poshandler functions:
+1. `posframe-poshandler-frame-center'
+2. `posframe-poshandler-frame-bottom-left-corner'
+3. `posframe-poshandler-frame-bottom-right-corner'
+4. `posframe-poshandler-window-center'
+5. `posframe-poshandler-window-top-left-corner'
+6. `posframe-poshandler-window-top-right-corner'
+7. `posframe-poshandler-window-bottom-left-corner'
+8. `posframe-poshandler-window-bottom-right-corner'
+9. `posframe-poshandler-point-top-left-corner'
+9. `posframe-poshandler-point-bottom-left-corner'
+
+This posframe's buffer is POSFRAME-BUFFER.
+
+If NO-PROPERTIES is non-nil, The STRING's properties will
+be removed before showed in posframe.
+
+posframe's frame-size can be set by WIDTH and HEIGHT,
+If one of them is nil, posframe's frame-size will fit the
+content of buffer, if you don't want to posframe's
+size too small, MIN-WIDTH and MIN-HEIGTH will be useful
+
+If LEFT-FRINGE or RIGHT-FRINGE is a number, Left fringe or
+right fringe with be showed with number width.
+
+By default, posframe's font is deriverd from current frame
+user can set posframe's font with FONT argument.
+
+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.
+
+OVERRIDE-PARAMETERS is very powful, *all* the frame parameters
+used by posframe's frame can be overrided by it.
+
+If TIMEOUT is a number, a delay of number seconds, the posframe
+will auto hide.
+
+If REFRESH is a number, posframe's frame-size will be re-adjust
+every mumber seconds.
+
+you can use `posframe-delete-all' to delete all posframes."
+ (let* ((position (or position (point)))
+ (posframe-buffer (get-buffer-create posframe-buffer))
+ (x-pixel-offset (or x-pixel-offset 0))
+ (y-pixel-offset (or y-pixel-offset 0))
+ (min-width (or min-width 1))
+ (min-height (or min-height 1))
+ (parent-window (selected-window))
+ (parent-frame (window-frame parent-window))
+ (parent-frame-width (frame-pixel-width parent-frame))
+ (parent-frame-height (frame-pixel-height parent-frame))
+ (font-width (default-font-width))
+ (font-height (posframe--get-font-height position))
+ (frame-resize-pixelwise t)
+ posframe)
+
+ (with-current-buffer posframe-buffer
+ ;; Move mouse to (0 . 0)
+ (posframe--mouse-banish parent-frame)
+
+ ;; Create posframe
+ (setq posframe
+ (posframe--create-posframe
+ posframe-buffer
+ :font font
+ :parent-frame parent-frame
+ :left-fringe left-fringe
+ :right-fringe right-fringe
+ :foreground-color foreground-color
+ :background-color background-color
+ :keep-ratio keep-ratio
+ :override-parameters override-parameters))
+
+ ;; Insert string to posframe-buffer.
+ (posframe--insert-string string no-properties)
+
+ ;; Set posframe's size
+ (posframe--set-frame-size
+ posframe height min-height width min-width)
+
+ ;; Move posframe
+ (posframe--set-frame-position
+ posframe
+ (posframe-run-poshandler
+ `(;All poshandlers will get info from this plist.
+ :position ,position
+ :poshandler ,poshandler
+ :font-height ,font-height
+ :font-width ,font-width
+ :posframe ,posframe
+ :posframe-buffer ,posframe-buffer
+ :parent-frame ,parent-frame
+ :parent-window ,parent-window
+ :x-pixel-offset ,x-pixel-offset
+ :y-pixel-offset ,y-pixel-offset))
+ parent-frame-width parent-frame-height)
+
+ ;; Delay hide posframe when timeout is a number.
+ (posframe--run-timeout-timer posframe timeout)
+
+ ;; Re-adjust posframe's size when buffer's content has changed.
+ (posframe--run-refresh-timer
+ posframe refresh height min-height width min-width)
+
+ ;; Do not return anything.
+ nil)))
+
+(defun posframe--get-font-height (position)
+ "Get the font's height at POSITION."
+ (when (integerp position)
+ (if (= position 1)
+ (default-line-height)
+ (aref (font-info
+ (font-at
+ (if (and (= position (point-max)))
+ (- position 1)
+ position)))
+ 3))))
+
+(defun posframe--mouse-banish (frame)
+ "Banish mouse to the (0 . 0) of FRAME.
+FIXME: This is a hacky fix for the mouse focus problem, which like:
+https://github.com/tumashu/posframe/issues/4#issuecomment-357514918"
+ (when (and posframe-mouse-banish
+ (not (equal (cdr (mouse-position)) '(0 . 0))))
+ (set-mouse-position frame 0 0)))
+
+(defun posframe--insert-string (string no-properties)
+ "Insert STRING to current buffer.
+If NO-PROPERTIES is non-nil, all properties of STRING
+will be removed."
+ (when (and string (stringp string))
+ (remove-text-properties
+ 0 (length string) '(read-only t) string)
+ ;; Does inserting string then deleting the before
+ ;; contents reduce flicking? Maybe :-)
+ (goto-char (point-min))
+ (if no-properties
+ (insert (substring-no-properties string))
+ (insert string))
+ (delete-region (point) (point-max))))
+
+(defun posframe--set-frame-size (posframe height min-height width min-width)
+ "Set POSFRAME's size.
+It will set the size by the POSFRAME's HEIGHT, MIN-HEIGHT
+WIDTH and MIN-WIDTH."
+ (if (and width height)
+ (unless (equal posframe--last-posframe-size
+ (cons width height))
+ (set-frame-size posframe width height)
+ (setq-local posframe--last-posframe-size
+ (cons width height)))
+ (fit-frame-to-buffer
+ posframe height min-height width min-width)))
+
+(defun posframe--set-frame-position (posframe position
+ parent-frame-width
+ parent-frame-height)
+ "Move POSFRAME to POSITION.
+This need PARENT-FRAME-WIDTH and PARENT-FRAME-HEIGHT"
+ (unless (and (equal position posframe--last-position)
+ ;; When working frame's size change, re-posit
+ ;; the posframe.
+ (equal posframe--last-parent-frame-size
+ (cons parent-frame-width parent-frame-height)))
+ (set-frame-position posframe (car position) (cdr position))
+ (setq-local posframe--last-position position)
+ (setq-local posframe--last-parent-frame-size
+ (cons parent-frame-width parent-frame-height)))
+ ;; Make posframe's posframe--frame visible
+ (unless (frame-visible-p posframe)
+ (make-frame-visible posframe)))
+
+(defun posframe--run-timeout-timer (posframe secs)
+ "Hide POSFRAME after a delay of SECS seconds."
+ (when (and (numberp secs) (> secs 0))
+ (when (timerp posframe--timeout-timer)
+ (cancel-timer posframe--timeout-timer))
+ (setq-local posframe--timeout-timer
+ (run-with-timer
+ secs nil #'make-frame-invisible posframe))))
+
+(defun posframe--run-refresh-timer (posframe repeat
+ height min-height
+ width min-width)
+ "Refresh POSFRAME every REPEAT seconds.
+
+It will set POSFRAME's size by the posframe's HEIGHT, MIN-HEIGHT,
+WIDTH and MIN-WIDTH."
+ (when (and (numberp repeat) (> repeat 0))
+ (unless (and width height)
+ (when (timerp posframe--refresh-timer)
+ (cancel-timer posframe--refresh-timer))
+ (setq-local posframe--refresh-timer
+ (run-with-timer
+ nil repeat
+ #'(lambda (frame height min-height width min-width)
+ (when (and frame (frame-live-p frame))
+ (fit-frame-to-buffer
+ 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."
+ (with-current-buffer (get-buffer-create posframe-buffer)
+ (when (frame-live-p posframe--frame)
+ (make-frame-invisible posframe--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 (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))))
+ (delete-frame frame)))))
+
+(defun posframe--kill-buffer (posframe-buffer)
+ "Kill posframe's buffer: POSFRAME-BUFFER."
+ (when (buffer-live-p posframe-buffer)
+ (kill-buffer posframe-buffer)))
+
+;;;###autoload
+(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)))))
+
+;;;###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))))
+ (dolist (buffer (buffer-list))
+ (with-current-buffer buffer
+ (when posframe--frame
+ (posframe--kill-buffer buffer)))))
+
+;; Posframe's position handler
+(defun posframe-run-poshandler (info)
+ "Run posframe's position handler.
+
+the structure of INFO can be found in docstring
+of `posframe-show'."
+ (funcall
+ (or (plist-get info :poshandler)
+ (let ((position (plist-get info :position)))
+ (cond ((integerp position)
+ #'posframe-poshandler-point-bottom-left-corner)
+ ((and (consp position)
+ (integerp (car position))
+ (integerp (cdr position)))
+ #'posframe-poshandler-absolute-x-y)
+ (t (error "Posframe: have no valid poshandler")))))
+ info))
+
+(defun posframe-poshandler-absolute-x-y (info)
+ "Posframe's position hanlder.
+
+Deal with (integer . integer) style position,
+the structure of INFO can be found in docstring
+of `posframe-show'."
+ (let ((position (plist-get info :position))
+ (x-pixel-offset (plist-get info :x-pixel-offset))
+ (y-pixel-offset (plist-get info :y-pixel-offset)))
+ (cons (+ (car position) x-pixel-offset)
+ (+ (cdr position) y-pixel-offset))))
+
+(defun posframe-poshandler-point-bottom-left-corner (info &optional font-height)
+ "Posframe's position hanlder.
+
+Get bottom-left-corner pixel position of a point,
+the structure of INFO can be found in docstring
+of `posframe-show'.
+
+Optional argument FONT-HEIGHT ."
+ (let* ((position (plist-get info :position))
+ (x-pixel-offset (plist-get info :x-pixel-offset))
+ (y-pixel-offset (plist-get info :y-pixel-offset))
+ (posframe-width (frame-pixel-width
+ (plist-get info :posframe)))
+ (posframe-height (frame-pixel-height
+ (plist-get info :posframe)))
+ (window (plist-get info :parent-window))
+ (frame (plist-get info :parent-frame))
+ (xmax (frame-pixel-width frame))
+ (ymax (frame-pixel-height frame))
+ (header-line-height (window-header-line-height window))
+ (posn-top-left (posn-at-point position window))
+ (x (+ (car (window-inside-pixel-edges window))
+ (- (or (car (posn-x-y posn-top-left)) 0)
+ (or (car (posn-object-x-y posn-top-left)) 0))
+ x-pixel-offset))
+ (y-top (+ (cadr (window-pixel-edges window))
+ header-line-height
+ (- (or (cdr (posn-x-y posn-top-left)) 0)
+ ;; Fix the conflict with flycheck
+ ;; http://lists.gnu.org/archive/html/emacs-devel/2018-01/msg00537.html
+ (or (cdr (posn-object-x-y posn-top-left)) 0))
+ y-pixel-offset))
+ (font-height (or font-height (plist-get info :font-height)))
+ (y-buttom (+ y-top font-height)))
+ (cons (max 0 (min x (- xmax (or posframe-width 0))))
+ (max 0 (if (> (+ y-buttom (or posframe-height 0)) ymax)
+ (- y-top (or posframe-height 0))
+ y-buttom)))))
+
+(defun posframe-poshandler-point-top-left-corner (info)
+ "Posframe's position hanlder.
+
+Get top-left-corner pixel position of a point,
+the structure of INFO can be found in docstring
+of `posframe-show'."
+ (let ((font-height 0))
+ (posframe-poshandler-point-bottom-left-corner info font-height)))
+
+(defun posframe-poshandler-frame-center (info)
+ "Posframe's position handler.
+
+Get a position which let posframe stay onto its
+parent-frame's center. The structure of INFO can
+be found in docstring of `posframe-show'."
+ (let* ((posframe (plist-get info :posframe))
+ (parent-frame (plist-get info :parent-frame)))
+ (cons (/ (- (frame-pixel-width parent-frame)
+ (frame-pixel-width posframe))
+ 2)
+ (/ (- (frame-pixel-height parent-frame)
+ (frame-pixel-height posframe))
+ 2))))
+
+(defun posframe-poshandler-frame-bottom-left-corner (_info)
+ "Posframe's position handler.
+
+Get a position which let posframe stay onto its parent-frame's
+bottom left corner. The structure of INFO can be found
+in docstring of `posframe-show'."
+ (cons 0 (- 0
+ (window-mode-line-height)
+ (window-pixel-height (minibuffer-window)))))
+
+(defun posframe-poshandler-frame-bottom-right-corner (_info)
+ "Posframe's position handler.
+
+Get a position which let posframe stay onto its parent-frame's
+bottom right corner. The structure of INFO can be found
+in docstring of `posframe-show'."
+ (cons -1 (- 0
+ (window-mode-line-height)
+ (window-pixel-height (minibuffer-window)))))
+
+(defun posframe-poshandler-window-center (info)
+ "Posframe's position handler.
+
+Get a position which let posframe stay onto current window's
+center. The structure of INFO can be found in docstring
+of `posframe-show'."
+ (let* ((posframe (plist-get info :posframe))
+ (parent-window (plist-get info :parent-window))
+ (window-left (window-pixel-left parent-window))
+ (window-top (window-pixel-top parent-window))
+ (window-width (window-pixel-width parent-window))
+ (window-height (window-pixel-height parent-window))
+ (posframe-width (frame-pixel-width posframe))
+ (posframe-height (frame-pixel-height posframe)))
+ (cons (+ window-left (/ (- window-width posframe-width) 2))
+ (+ window-top (/ (- window-height posframe-height) 2)))))
+
+(defun posframe-poshandler-window-top-left-corner (info)
+ "Posframe's position handler.
+
+Get a position which let posframe stay onto current window's
+top left corner. The structure of INFO can be found in
+docstring of `posframe-show'."
+ (let* ((parent-window (plist-get info :parent-window))
+ (window-left (window-pixel-left parent-window))
+ (window-top (window-pixel-top parent-window)))
+ (cons window-left
+ window-top)))
+
+(defun posframe-poshandler-window-top-right-corner (info)
+ "Posframe's position handler.
+
+Get a position which let posframe stay onto current window's
+top right corner. The structure of INFO can be found in
+docstring of `posframe-show'."
+ (let* ((posframe (plist-get info :posframe))
+ (window (plist-get info :parent-window))
+ (window-left (window-pixel-left window))
+ (window-top (window-pixel-top window))
+ (window-width (window-pixel-width window))
+ (posframe-width (frame-pixel-width posframe)))
+ (cons (+ window-left window-width
+ (- 0 posframe-width))
+ window-top)))
+
+(defun posframe-poshandler-window-bottom-left-corner (info)
+ "Posframe's position handler.
+
+Get a position which let posframe stay onto current window's
+bottom left corner. The structure of INFO can be found in
+docstring of `posframe-show'."
+ (let* ((posframe (plist-get info :posframe))
+ (window (plist-get info :parent-window))
+ (window-left (window-pixel-left window))
+ (window-top (window-pixel-top window))
+ (window-height (window-pixel-height window))
+ (posframe-height (frame-pixel-height posframe))
+ (modeline-height (window-mode-line-height)))
+ (cons window-left
+ (+ window-top window-height
+ (- 0 modeline-height posframe-height)))))
+
+(defun posframe-poshandler-window-bottom-right-corner (info)
+ "Posframe's position handler.
+
+Get a position which let posframe stay onto current window's
+bottom right corner. The structure of INFO can be found in
+docstring of `posframe-show'."
+ (let* ((posframe (plist-get info :posframe))
+ (window (plist-get info :parent-window))
+ (window-left (window-pixel-left window))
+ (window-top (window-pixel-top window))
+ (window-width (window-pixel-width window))
+ (window-height (window-pixel-height window))
+ (posframe-width (frame-pixel-width posframe))
+ (posframe-height (frame-pixel-height posframe))
+ (modeline-height (window-mode-line-height)))
+ (cons (+ window-left window-width
+ (- 0 posframe-width))
+ (+ window-top window-height
+ (- 0 modeline-height posframe-height)))))
+
+(provide 'posframe)
+
+;; Local Variables:
+;; coding: utf-8-unix
+;; End:
+
+;;; posframe.el ends here
diff --git a/snapshots/posframe-1.png b/snapshots/posframe-1.png
new file mode 100644
index 0000000000000000000000000000000000000000..8967fa4e4a897dd8ee9852d6dcb3aeec178df738
GIT binary patch
literal 55570
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
GLSTXuwpbki
literal 0
HcmV?d00001
--
2.13.3
[-- Attachment #3: 0002-externals-list-Add-posframe-s-git-url.patch --]
[-- Type: application/octet-stream, Size: 893 bytes --]
From 6862a2d8a3d210502df51ad0066cfe1a073bca22 Mon Sep 17 00:00:00 2001
From: Feng Shu <tumashu@163.com>
Date: Mon, 26 Feb 2018 15:36:19 +0800
Subject: [PATCH 2/2] externals-list: Add posframe's git url.
---
externals-list | 1 +
1 file changed, 1 insertion(+)
diff --git a/externals-list b/externals-list
index ba91a1efd..39b51cf11 100644
--- a/externals-list
+++ b/externals-list
@@ -76,6 +76,7 @@
("pabbrev" :external "https://github.com/phillord/pabbrev.git")
("parsec" :subtree "https://github.com/cute-jumper/parsec.el.git")
("pinentry" :subtree "https://github.com/ueno/pinentry-el.git")
+ ("posframe" :subtree "https://github.com/tumashu/posframe.git")
("psgml" :external "https://github.com/lenst/psgml.git")
("python" :core "lisp/progmodes/python.el")
;;FIXME:("org" :external ??) ;; Need to introduce snapshots!!
--
2.13.3
^ permalink raw reply related [flat|nested] 22+ messages in thread
* Re: [RFC] Add posframe.el to elpa
2018-02-26 7:44 ` tumashu
@ 2018-02-26 10:51 ` Dmitry Gutov
2018-02-27 0:10 ` tumashu
0 siblings, 1 reply; 22+ messages in thread
From: Dmitry Gutov @ 2018-02-26 10:51 UTC (permalink / raw)
To: tumashu, Stefan Monnier; +Cc: emacs-devel@gnu.org
On 2/26/18 9:44 AM, tumashu wrote:
> OK, I have reinit my posframe's github repo, and add it to elpa.git with
> subtree.
>
> the patches are here :-)
If you're going to use 'git subtree', better import from the upstream
repository using the command line rather than patches.
This is probably necessary for later syncing to work fine.
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re:Re: [RFC] Add posframe.el to elpa
2018-02-26 10:51 ` Dmitry Gutov
@ 2018-02-27 0:10 ` tumashu
2018-02-27 19:56 ` Stefan Monnier
0 siblings, 1 reply; 22+ messages in thread
From: tumashu @ 2018-02-27 0:10 UTC (permalink / raw)
To: Dmitry Gutov; +Cc: Stefan Monnier, emacs-devel@gnu.org
[-- Attachment #1: Type: text/plain, Size: 645 bytes --]
Oh, thanks for your information,
At the moment , I have no write access of elpa.git. I am waiting for approval
the request inclustion of elpa :-)
By the way, including a package to elpa seem to be more complex than melpa.
At 2018-02-26 18:51:09, "Dmitry Gutov" <dgutov@yandex.ru> wrote:
>On 2/26/18 9:44 AM, tumashu wrote:
>> OK, I have reinit my posframe's github repo, and add it to elpa.git with
>> subtree.
>>
>> the patches are here :-)
>
>If you're going to use 'git subtree', better import from the upstream
>repository using the command line rather than patches.
>
>This is probably necessary for later syncing to work fine.
[-- Attachment #2: Type: text/html, Size: 906 bytes --]
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [RFC] Add posframe.el to elpa
2018-02-27 0:10 ` tumashu
@ 2018-02-27 19:56 ` Stefan Monnier
2018-02-28 2:21 ` tumashu
0 siblings, 1 reply; 22+ messages in thread
From: Stefan Monnier @ 2018-02-27 19:56 UTC (permalink / raw)
To: tumashu; +Cc: emacs-devel@gnu.org, Dmitry Gutov
> At the moment , I have no write access of elpa.git. I am waiting for approval
> the request inclustion of elpa :-)
You should have access now.
And I just added your package with
git subtree add --prefix=packages/posframe posframe/master
Apparently it had already the right copyright header and compiled
without warnings, so you got two extra karma points today.
> By the way, including a package to elpa seem to be more complex than melpa.
Indeed.
GNU ELPA is not just a site to distribute packages, it's the site where
we distribute the packages hosted in elpa.git, which we want to be
a kind of "halfway" between MELPA and Emacs itself.
Stefan "who now sees that something went wrong in his git
subtree add. Darn!"
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re:Re: [RFC] Add posframe.el to elpa
2018-02-27 19:56 ` Stefan Monnier
@ 2018-02-28 2:21 ` tumashu
2018-02-28 2:42 ` Eric Abrahamsen
2018-02-28 2:43 ` Stefan Monnier
0 siblings, 2 replies; 22+ messages in thread
From: tumashu @ 2018-02-28 2:21 UTC (permalink / raw)
To: Stefan Monnier; +Cc: Dmitry Gutov, emacs-devel@gnu.org
[-- Attachment #1: Type: text/plain, Size: 344 bytes --]
Thanks for the help :-)
>GNU ELPA is not just a site to distribute packages, it's the site where
>we distribute the packages hosted in elpa.git, which we want to be
>a kind of "halfway" between MELPA and Emacs itself.
I agree this, but I think the elpa.git's README is not enough for a new
contributer who is first contribute to elpa.git.
[-- Attachment #2: Type: text/html, Size: 476 bytes --]
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [RFC] Add posframe.el to elpa
2018-02-28 2:21 ` tumashu
@ 2018-02-28 2:42 ` Eric Abrahamsen
2018-02-28 5:48 ` tumashu
2018-02-28 2:43 ` Stefan Monnier
1 sibling, 1 reply; 22+ messages in thread
From: Eric Abrahamsen @ 2018-02-28 2:42 UTC (permalink / raw)
To: tumashu; +Cc: emacs-devel@gnu.org, Stefan Monnier, Dmitry Gutov
tumashu <tumashu@163.com> writes:
> Thanks for the help :-)
>
>>GNU ELPA is not just a site to distribute packages, it's the site where
>>we distribute the packages hosted in elpa.git, which we want to be
>>a kind of "halfway" between MELPA and Emacs itself.
>
> I agree this, but I think the elpa.git's README is not enough for a new
> contributer who is first contribute to elpa.git.
FWIW, I found `git subtree` highly confusing, and hated using it. If you
intend to maintain your package repository both in ELPA and somewhere
else concurrently, I've found doing an "external" to be much easier to
handle.
2¢,
Eric
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [RFC] Add posframe.el to elpa
2018-02-28 2:21 ` tumashu
2018-02-28 2:42 ` Eric Abrahamsen
@ 2018-02-28 2:43 ` Stefan Monnier
2018-02-28 5:42 ` tumashu
2018-02-28 14:56 ` Clément Pit-Claudel
1 sibling, 2 replies; 22+ messages in thread
From: Stefan Monnier @ 2018-02-28 2:43 UTC (permalink / raw)
To: tumashu; +Cc: Dmitry Gutov, emacs-devel@gnu.org
>>GNU ELPA is not just a site to distribute packages, it's the site where
>>we distribute the packages hosted in elpa.git, which we want to be
>>a kind of "halfway" between MELPA and Emacs itself.
> I agree this, but I think the elpa.git's README is not enough for a new
> contributer who is first contribute to elpa.git.
If you tell us what you think is missing, we can improve it,
Stefan
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re:Re: [RFC] Add posframe.el to elpa
2018-02-28 2:43 ` Stefan Monnier
@ 2018-02-28 5:42 ` tumashu
2018-02-28 14:56 ` Clément Pit-Claudel
1 sibling, 0 replies; 22+ messages in thread
From: tumashu @ 2018-02-28 5:42 UTC (permalink / raw)
To: Stefan Monnier; +Cc: Dmitry Gutov, emacs-devel@gnu.org
[-- Attachment #1: Type: text/plain, Size: 1774 bytes --]
The below is my faced problem when I first contribute elpa.git
Which one should I choice? default ? subtree ? extra-branch?
1. default method suggest:
1. if you want to set elpa.git as your project's only repo, and your will maintain your
package directly in elpa.git, you can choice default method
2. If you just want to update your package with Email + format-patch, you shoud choice
default method and do not use subtree.
2. subtree suggestion:
1. If you want to maintain your package in a independ repo, and sync change with elpa.git
you can choice subtree method.
2. when you want to use subtree method, you should get elpa.git's write access
1. regedit a user at https://savannah.gnu.org,
2. join in emacs group
3 ..... waiting to approve ....
4. upload key
5. the example of git subtree command
6. the example of git push command
7. other things ....
8. how to sync change between elpa.git and you-own-package.git.
3. only use git command-line to push change to elpa.git, do not use format-patch
<reason>
4. DO NOT --SQUASH!!
5. how to deal with package's ugly log :-)
3. extra-branch
......
At 2018-02-28 10:43:58, "Stefan Monnier" <monnier@IRO.UMontreal.CA> wrote:
>>>GNU ELPA is not just a site to distribute packages, it's the site where
>>>we distribute the packages hosted in elpa.git, which we want to be
>>>a kind of "halfway" between MELPA and Emacs itself.
>> I agree this, but I think the elpa.git's README is not enough for a new
>> contributer who is first contribute to elpa.git.
>
>If you tell us what you think is missing, we can improve it,
>
>
> Stefan
[-- Attachment #2: Type: text/html, Size: 2862 bytes --]
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re:Re: [RFC] Add posframe.el to elpa
2018-02-28 2:42 ` Eric Abrahamsen
@ 2018-02-28 5:48 ` tumashu
0 siblings, 0 replies; 22+ messages in thread
From: tumashu @ 2018-02-28 5:48 UTC (permalink / raw)
To: Eric Abrahamsen; +Cc: emacs-devel@gnu.org, Stefan Monnier, Dmitry Gutov
[-- Attachment #1: Type: text/plain, Size: 432 bytes --]
>FWIW, I found `git subtree` highly confusing, and hated using it. If you
>intend to maintain your package repository both in ELPA and somewhere
>else concurrently, I've found doing an "external" to be much easier to
>handle.
As a new contributer, I do not fimilar two external-method, the reason I choice subtree
is that README say: If you don't know how to choice, use subtree :-)
Maybe elpa.git provide too many methods :-)
[-- Attachment #2: Type: text/html, Size: 656 bytes --]
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [RFC] Add posframe.el to elpa
2018-02-28 2:43 ` Stefan Monnier
2018-02-28 5:42 ` tumashu
@ 2018-02-28 14:56 ` Clément Pit-Claudel
2018-02-28 15:03 ` Kaushal Modi
2018-02-28 17:35 ` Richard Stallman
1 sibling, 2 replies; 22+ messages in thread
From: Clément Pit-Claudel @ 2018-02-28 14:56 UTC (permalink / raw)
To: emacs-devel
On 2018-02-27 21:43, Stefan Monnier wrote:
>>> GNU ELPA is not just a site to distribute packages, it's the site where
>>> we distribute the packages hosted in elpa.git, which we want to be
>>> a kind of "halfway" between MELPA and Emacs itself.
>> I agree this, but I think the elpa.git's README is not enough for a new
>> contributer who is first contribute to elpa.git.
>
> If you tell us what you think is missing, we can improve it,
Do we have away to add an external package to elpa? I'm thinking MELPA style, where you just point ELPA to the appropriate repository and it pulls from there.
Then an automated process would build elpa.git from all these external repos.
And it could be fine to restrict these repos to be on Savannah, for example.
Clément.
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [RFC] Add posframe.el to elpa
2018-02-28 14:56 ` Clément Pit-Claudel
@ 2018-02-28 15:03 ` Kaushal Modi
2018-02-28 17:35 ` Richard Stallman
1 sibling, 0 replies; 22+ messages in thread
From: Kaushal Modi @ 2018-02-28 15:03 UTC (permalink / raw)
To: Clément Pit-Claudel; +Cc: emacs-devel
[-- Attachment #1: Type: text/plain, Size: 665 bytes --]
On Wed, Feb 28, 2018, 9:56 AM Clément Pit-Claudel <cpitclaudel@gmail.com>
wrote:
>
> Do we have away to add an external package to elpa? I'm thinking MELPA
> style, where you just point ELPA to the appropriate repository and it pulls
> from there.
>
> Then an automated process would build elpa.git from all these external
> repos.
>
I'm interested in this. I have holded off making my submission request for
ox-hugo package because of the exact same confusion that tumashu presented.
And it could be fine to restrict these repos to be on Savannah, for example.
>
Hopefully, fetching from GitHub/Gitlab is also fine.
> --
Kaushal Modi
[-- Attachment #2: Type: text/html, Size: 1329 bytes --]
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [RFC] Add posframe.el to elpa
2018-02-28 14:56 ` Clément Pit-Claudel
2018-02-28 15:03 ` Kaushal Modi
@ 2018-02-28 17:35 ` Richard Stallman
2018-02-28 17:59 ` Clément Pit-Claudel
1 sibling, 1 reply; 22+ messages in thread
From: Richard Stallman @ 2018-02-28 17:35 UTC (permalink / raw)
To: Clément Pit-Claudel; +Cc: emacs-devel
[[[ To any NSA and FBI agents reading my email: please consider ]]]
[[[ whether defending the US Constitution against all enemies, ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]
> Do we have away to add an external package to elpa? I'm thinking
> MELPA style, where you just point ELPA to the appropriate
> repository and it pulls from there.
I see that this would be convenient, but it would be asking for
trouble. It would mean there is code we distribute as effectively
part of Emacs which we can't edit. That is unwise.
Thus, my decision is no.
--
Dr Richard Stallman
President, Free Software Foundation (https://gnu.org, https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)
Skype: No way! See https://stallman.org/skype.html.
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [RFC] Add posframe.el to elpa
2018-02-28 17:35 ` Richard Stallman
@ 2018-02-28 17:59 ` Clément Pit-Claudel
2018-03-01 0:28 ` tumashu
2018-03-01 16:00 ` Richard Stallman
0 siblings, 2 replies; 22+ messages in thread
From: Clément Pit-Claudel @ 2018-02-28 17:59 UTC (permalink / raw)
To: rms; +Cc: emacs-devel
On 2018-02-28 12:35, Richard Stallman wrote:
> [[[ To any NSA and FBI agents reading my email: please consider ]]]
> [[[ whether defending the US Constitution against all enemies, ]]]
> [[[ foreign or domestic, requires you to follow Snowden's example. ]]]
>
> > Do we have away to add an external package to elpa? I'm thinking
> > MELPA style, where you just point ELPA to the appropriate
> > repository and it pulls from there.
>
> I see that this would be convenient, but it would be asking for
> trouble. It would mean there is code we distribute as effectively
> part of Emacs which we can't edit. That is unwise.
Not necessarily: we could fetch code exclusively from Savannah repositories set up to give all Emacs devs commit rights.
If anything, this would be safer: at the moment, anyone who has a package in ELPA can edit all other packages in ELPA. In the architecture that I propose, Emacs committers could edit all Emacs packages, but ordinary package authors would only be able to make changes to their own packages.
And it would be simpler for package authors: just a matter of registering your package on Savannah and adding a remote to your existing repository.
Clément.
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re:Re: [RFC] Add posframe.el to elpa
2018-02-28 17:59 ` Clément Pit-Claudel
@ 2018-03-01 0:28 ` tumashu
2018-03-01 16:00 ` Richard Stallman
1 sibling, 0 replies; 22+ messages in thread
From: tumashu @ 2018-03-01 0:28 UTC (permalink / raw)
To: Clément Pit-Claudel; +Cc: rms, emacs-devel@gnu.org
[-- Attachment #1: Type: text/plain, Size: 685 bytes --]
>Not necessarily: we could fetch code exclusively from Savannah repositories set up to give all Emacs devs commit rights.
>
>If anything, this would be safer: at the moment, anyone who has a package in ELPA can edit all other packages in ELPA. In the architecture that I propose, Emacs committers could edit all Emacs packages, but ordinary package authors would only be able to make changes to their own packages.
>
>And it would be simpler for package authors: just a matter of registering your package on Savannah and adding a remote to your existing repository.
This seem to be a good idea, if it is true, many package maintainer may use repo on Savannah as main
repo,
[-- Attachment #2: Type: text/html, Size: 825 bytes --]
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [RFC] Add posframe.el to elpa
2018-02-28 17:59 ` Clément Pit-Claudel
2018-03-01 0:28 ` tumashu
@ 2018-03-01 16:00 ` Richard Stallman
2018-03-01 16:20 ` Clément Pit-Claudel
1 sibling, 1 reply; 22+ messages in thread
From: Richard Stallman @ 2018-03-01 16:00 UTC (permalink / raw)
To: Clément Pit-Claudel; +Cc: emacs-devel
[[[ To any NSA and FBI agents reading my email: please consider ]]]
[[[ whether defending the US Constitution against all enemies, ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]
> > I see that this would be convenient, but it would be asking for
> > trouble. It would mean there is code we distribute as effectively
> > part of Emacs which we can't edit. That is unwise.
> Not necessarily: we could fetch code exclusively from Savannah
> repositories set up to give all Emacs devs commit rights.
This is ok,
provided the Emacs maintainers have admin access
to those repositories on Savannah.
--
Dr Richard Stallman
President, Free Software Foundation (https://gnu.org, https://fsf.org)
Internet Hall-of-Famer (https://internethalloffame.org)
Skype: No way! See https://stallman.org/skype.html.
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [RFC] Add posframe.el to elpa
2018-03-01 16:00 ` Richard Stallman
@ 2018-03-01 16:20 ` Clément Pit-Claudel
0 siblings, 0 replies; 22+ messages in thread
From: Clément Pit-Claudel @ 2018-03-01 16:20 UTC (permalink / raw)
To: rms; +Cc: emacs-devel
On 2018-03-01 11:00, Richard Stallman wrote:
> [[[ To any NSA and FBI agents reading my email: please consider ]]]
> [[[ whether defending the US Constitution against all enemies, ]]]
> [[[ foreign or domestic, requires you to follow Snowden's example. ]]]
>
> > > I see that this would be convenient, but it would be asking for
> > > trouble. It would mean there is code we distribute as effectively
> > > part of Emacs which we can't edit. That is unwise.
>
> > Not necessarily: we could fetch code exclusively from Savannah
> > repositories set up to give all Emacs devs commit rights.
>
> This is ok,
> provided the Emacs maintainers have admin access
> to those repositories on Savannah.
Neat.
^ permalink raw reply [flat|nested] 22+ messages in thread
end of thread, other threads:[~2018-03-01 16:20 UTC | newest]
Thread overview: 22+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-02-23 8:57 [RFC] Add posframe.el to elpa tumashu
2018-02-23 15:16 ` Stefan Monnier
2018-02-24 0:22 ` tumashu
2018-02-25 13:10 ` Stefan Monnier
2018-02-25 23:45 ` Feng Shu
2018-02-26 3:20 ` Stefan Monnier
2018-02-26 7:44 ` tumashu
2018-02-26 10:51 ` Dmitry Gutov
2018-02-27 0:10 ` tumashu
2018-02-27 19:56 ` Stefan Monnier
2018-02-28 2:21 ` tumashu
2018-02-28 2:42 ` Eric Abrahamsen
2018-02-28 5:48 ` tumashu
2018-02-28 2:43 ` Stefan Monnier
2018-02-28 5:42 ` tumashu
2018-02-28 14:56 ` Clément Pit-Claudel
2018-02-28 15:03 ` Kaushal Modi
2018-02-28 17:35 ` Richard Stallman
2018-02-28 17:59 ` Clément Pit-Claudel
2018-03-01 0:28 ` tumashu
2018-03-01 16:00 ` Richard Stallman
2018-03-01 16:20 ` Clément Pit-Claudel
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).