all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal
@ 2022-05-28 13:15 Akib Azmain Turja
  2022-05-28 13:55 ` Philip Kaludercic
                   ` (3 more replies)
  0 siblings, 4 replies; 64+ messages in thread
From: Akib Azmain Turja @ 2022-05-28 13:15 UTC (permalink / raw)
  To: emacs-devel


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.1: Patch --]
[-- Type: text/x-patch, Size: 822 bytes --]

From 5d2ae7bd9b6d00f39704828fbe27c28b699b3e4f Mon Sep 17 00:00:00 2001
From: Akib Azmain Turja <akib@disroot.org>
Date: Sat, 28 May 2022 18:59:36 +0600
Subject: [PATCH] * elpa-packages (corfu-doc, corfu-doc-terminal): New packages

---
 elpa-packages | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/elpa-packages b/elpa-packages
index aa62452..1465bc1 100644
--- a/elpa-packages
+++ b/elpa-packages
@@ -79,6 +79,10 @@
 
  ("coffee-mode"		:url "https://github.com/defunkt/coffee-mode")
 
+ ("corfu-doc"           :url "https://github.com/galeo/corfu-doc")
+
+ ("corfu-doc-terminal"  :url "https://codeberg.org/akib/emacs-corfu-doc-terminal")
+
  ("corfu-terminal"      :url "https://codeberg.org/akib/emacs-corfu-terminal")
 
  ("crux"		:url "https://github.com/bbatsov/crux"
-- 
2.34.0


[-- Attachment #1.2: Type: text/plain, Size: 912 bytes --]


I would like to submit these two packages to NonGNU ELPA: corfu-doc and
corfu-doc-terminal.

corfu-doc shows a documentation popup for the selected candidate in
Corfu.  It uses child frame to do this.  The author said that he signed
and sent the papers but hasn't received any reply, so this package can't
be add to ELPA right now.  In the meantime, I would like submit this
here.

corfu-doc-terminal advises corfu-doc to use Popon, so that corfu-doc
works also on non-graphical (terminal) displays.  As corfu-doc isn't a
part of Emacs, I can't publish it to ELPA (as it depends on corfu-doc
and uses some code adapted from corfu-doc).  Maybe I can do that in the
future when corfu-doc becomes a part of Emacs, if law allows me to do
so.

-- 
Akib Azmain Turja

This message is signed by me with my GnuPG key.  It's fingerprint is:

    7001 8CE5 819F 17A3 BBA6  66AF E74F 0EFA 922A E7F5

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply related	[flat|nested] 64+ messages in thread

* Re: [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal
  2022-05-28 13:15 [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal Akib Azmain Turja
@ 2022-05-28 13:55 ` Philip Kaludercic
  2022-05-28 14:38 ` Stefan Monnier
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 64+ messages in thread
From: Philip Kaludercic @ 2022-05-28 13:55 UTC (permalink / raw)
  To: Akib Azmain Turja; +Cc: emacs-devel

Akib Azmain Turja <akib@disroot.org> writes:

> I would like to submit these two packages to NonGNU ELPA: corfu-doc
> and corfu-doc-terminal.
>
> corfu-doc shows a documentation popup for the selected candidate in
> Corfu.  It uses child frame to do this.  The author said that he
> signed and sent the papers but hasn't received any reply, so this
> package can't be add to ELPA right now.  In the meantime, I would like
> submit this here.

Maybe this should be investigated, this kind of behaviour is not
supposed to happen.

> corfu-doc-terminal advises corfu-doc to use Popon, so that corfu-doc
> works also on non-graphical (terminal) displays.  As corfu-doc isn't a
> part of Emacs, I can't publish it to ELPA (as it depends on corfu-doc
> and uses some code adapted from corfu-doc).  Maybe I can do that in
> the future when corfu-doc becomes a part of Emacs, if law allows me to
> do so.

To my knowledge, there is inherently no issue in having an GNU ELPA
package depend on a package in NonGNU ELPA, unless the user has NonGNU
ELPA disabled or uses an older version of Emacs.

But if you have copied code from corfu-doc, then that would be an issue
(depending on how much code/how significant of a contribution we are
talking about).



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal
  2022-05-28 13:15 [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal Akib Azmain Turja
  2022-05-28 13:55 ` Philip Kaludercic
@ 2022-05-28 14:38 ` Stefan Monnier
  2022-05-28 16:30   ` Akib Azmain Turja
  2022-05-28 15:02 ` [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal Stefan Monnier
  2022-05-28 16:06 ` Akib Azmain Turja
  3 siblings, 1 reply; 64+ messages in thread
From: Stefan Monnier @ 2022-05-28 14:38 UTC (permalink / raw)
  To: Akib Azmain Turja; +Cc: emacs-devel, Yuwei Tian

Akib Azmain Turja [2022-05-28 19:15:33] wrote:
> corfu-doc shows a documentation popup for the selected candidate in
> Corfu.  It uses child frame to do this.  The author said that he signed
> and sent the papers but hasn't received any reply,

Looks like there's been some communication mishap, but I see Yuwei Tian
in the FSF's `copyright.list` file, so his copyright paperwork seems to
be in order.

> so this package can't be added to ELPA right now.

I think it can :-)

> corfu-doc-terminal advises corfu-doc to use Popon, so that corfu-doc
> works also on non-graphical (terminal) displays.  As corfu-doc isn't a
> part of Emacs, I can't publish it to ELPA (as it depends on corfu-doc
> and uses some code adapted from corfu-doc).

As Philip said, it's OK for a GNU ELPA package to depend on a NonGNU
ELPA package (it's not our first choice, admittedly, but it's only an
annoyance rather than an obstacle).  BTW, it would be good to develop
some kind of API such that corfu, corfu-doc and others can call a "show
this thing" function and the result is shown either with child-frames or
with `popon` (or with any other replacement such as `popup`, tooltips,
a using a plain old window, ...), without having to rely on advice?

Any chance you could look into that, maybe getting feedback from the
authors of corfu, company, popup, and other related packages?


        Stefan




^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal
  2022-05-28 13:15 [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal Akib Azmain Turja
  2022-05-28 13:55 ` Philip Kaludercic
  2022-05-28 14:38 ` Stefan Monnier
@ 2022-05-28 15:02 ` Stefan Monnier
  2022-05-28 16:06 ` Akib Azmain Turja
  3 siblings, 0 replies; 64+ messages in thread
From: Stefan Monnier @ 2022-05-28 15:02 UTC (permalink / raw)
  To: Yuwei Tian; +Cc: Akib Azmain Turja, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 643 bytes --]

Hi,

Akib just suggested we add `corfu-doc` to NonGNU ELPA but it seems like
you have signed the copyright paperwork so we could add it to GNU ELPA.
I think that would be a great addition.
Are you OK with it?

This assumes you'll be careful to make sure future contributors have
signed copyright paperwork as well, and also you'll need to change the
Copyright line in the file (which is a way to state that you consider
this file as covered by the copyright assignment you recently signed).

Also, while I'm here, I attach a patch resulting from my superficial
reading of your code.

Thank you for your contribution to Emacs,


        Stefan

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: corfu-doc.patch --]
[-- Type: text/x-diff, Size: 3837 bytes --]

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000..39090e0af5
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+*.elc
+/corfu-doc-autoloads.el
+/corfu-doc-pkg.el
diff --git a/corfu-doc.el b/corfu-doc.el
index eed0bbbaaa..014804e4f7 100644
--- a/corfu-doc.el
+++ b/corfu-doc.el
@@ -1,6 +1,6 @@
 ;;; corfu-doc.el --- Documentation popup for Corfu -*- lexical-binding: t -*-
 
-;; Copyright (C) 2021-2022 Yuwei Tian
+;; Copyright (C) 2021-2022  Free Software Foundation, Inc.
 
 ;; Author: Yuwei Tian <ibluefocus@NOSPAM.gmail.com>
 ;; URL: https://github.com/galeo/corfu-doc
@@ -44,14 +44,12 @@
 
 (defcustom corfu-doc-auto t
   "Display documentation popup automatically."
-  :type 'boolean
-  :group 'corfu-doc)
+  :type 'boolean)
 
 (defcustom corfu-doc-delay 0.1
   "The number of seconds to wait before displaying the documentation popup."
   :type 'float
-  :safe #'floatp
-  :group 'corfu-doc)
+  :safe #'floatp)
 
 (defcustom corfu-doc-hide-threshold 0.2
   "Threshold value to hide the documentation popup when browsing candidates.
@@ -60,28 +58,24 @@ When the selected candidate is changed, if the value of `corfu-doc-delay'
 is greater than this threshold value, the documentation popup frame will
 be hided immediately. Else, just clear the doc frame content."
   :type 'float
-  :safe #'floatp
-  :group 'corfu-doc)
+  :safe #'floatp)
 
 (defcustom corfu-doc-max-width 60
   "The max width of the corfu doc frame in characters."
   :type 'integer
-  :safe #'integerp
-  :group 'corfu-doc)
+  :safe #'integerp)
 
 (defcustom corfu-doc-max-height 10
   "The max height of the corfu doc frame in characters."
   :type 'integer
-  :safe #'integerp
-  :group 'corfu-doc)
+  :safe #'integerp)
 
 (defcustom corfu-doc-resize-frame t
   "Non-nil means resize the corfu doc frame automatically.
 
 If this is nil, do not resize corfu doc frame automatically."
   :type 'boolean
-  :safe #'booleanp
-  :group 'corfu-doc)
+  :safe #'booleanp)
 
 (defcustom corfu-doc-display-within-parent-frame nil
   "Display the doc frame within the parent frame.
@@ -100,8 +94,7 @@ still being visible themselves.
 
 Please see \"(elisp) Child Frames\" in Emacs manual for details."
   :type 'boolean
-  :safe #'booleanp
-  :group 'corfu-doc)
+  :safe #'booleanp)
 
 (defvar corfu-doc--frame nil
   "Doc frame.")
@@ -443,12 +436,14 @@ FWIDTH and FHEIGHT."
   :global t
   :group 'corfu
   (cond
-    (corfu-doc-mode
-     (advice-add 'corfu--popup-show :after #'corfu-doc--popup-show)
-     (advice-add 'corfu--popup-hide :after #'corfu-doc--popup-hide))
-    (t
-     (advice-remove 'corfu--popup-show #'corfu-doc--popup-show)
-     (advice-remove 'corfu--popup-hide #'corfu-doc--popup-hide))))
+   (corfu-doc-mode
+    (corfu-doc--manual-popup-show)
+    (advice-add 'corfu--popup-show :after #'corfu-doc--popup-show)
+    (advice-add 'corfu--popup-hide :after #'corfu-doc--popup-hide))
+   (t
+    (corfu-doc--popup-hide)
+    (advice-remove 'corfu--popup-show #'corfu-doc--popup-show)
+    (advice-remove 'corfu--popup-hide #'corfu-doc--popup-hide))))
 
 (defun corfu-doc--popup-support-p ()
   (display-graphic-p))
@@ -528,18 +523,7 @@ corfu doc mode is turned on and `corfu-doc-auto' is set to Non-nil."
     (advice-add 'corfu--popup-show :after #'corfu-doc--popup-show)))
 
 ;;;###autoload
-(defun toggle-corfu-doc-mode (&optional arg)
-  "Toggles corfu doc mode on or off.
-With optional ARG, turn corfu doc mode on if and only if ARG is positive."
-  (interactive "P")
-  (if (null arg)
-      (setq arg (if corfu-doc-mode -1 1))
-    (setq arg (prefix-numeric-value arg)))
-  (if (> arg 0)
-      (corfu-doc--manual-popup-show)
-    (corfu-doc--popup-hide))
-  (corfu-doc-mode arg))
-
+(define-obsolete-function-alias 'toggle-corfu-doc-mode #'corfu-doc-mode "0.7")
 
 (provide 'corfu-doc)
 ;;; corfu-doc.el ends here

^ permalink raw reply related	[flat|nested] 64+ messages in thread

* Re: [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal
  2022-05-28 13:15 [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal Akib Azmain Turja
                   ` (2 preceding siblings ...)
  2022-05-28 15:02 ` [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal Stefan Monnier
@ 2022-05-28 16:06 ` Akib Azmain Turja
  2022-05-28 17:46   ` Philip Kaludercic
  3 siblings, 1 reply; 64+ messages in thread
From: Akib Azmain Turja @ 2022-05-28 16:06 UTC (permalink / raw)
  To: Yuwei Tian, Yuwei Tian, Daniel Mendler; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 457 bytes --]


Congratulations, Yuwei Tian.  Your copyright assignment is done.

Now, Yuwei Tian and Daniel Mendler, do you want to add corfu-doc to
Corfu as an extension now?  If so, I think corfu-doc should be published
directly on ELPA as a part of Corfu instead of adding to NonGNU ELPA for
a few days.

-- 
Akib Azmain Turja

This message is signed by me with my GnuPG key.  It's fingerprint is:

    7001 8CE5 819F 17A3 BBA6  66AF E74F 0EFA 922A E7F5

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal
  2022-05-28 14:38 ` Stefan Monnier
@ 2022-05-28 16:30   ` Akib Azmain Turja
  2022-05-28 17:47     ` Stefan Monnier
  2022-05-28 19:16     ` Eli Zaretskii
  0 siblings, 2 replies; 64+ messages in thread
From: Akib Azmain Turja @ 2022-05-28 16:30 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel, Yuwei Tian

[-- Attachment #1: Type: text/plain, Size: 3062 bytes --]

Stefan Monnier <monnier@iro.umontreal.ca> writes:

> Akib Azmain Turja [2022-05-28 19:15:33] wrote:
>> corfu-doc shows a documentation popup for the selected candidate in
>> Corfu.  It uses child frame to do this.  The author said that he signed
>> and sent the papers but hasn't received any reply,
>
> Looks like there's been some communication mishap, but I see Yuwei Tian
> in the FSF's `copyright.list` file, so his copyright paperwork seems to
> be in order.
>
>> so this package can't be added to ELPA right now.
>
> I think it can :-)
>
>> corfu-doc-terminal advises corfu-doc to use Popon, so that corfu-doc
>> works also on non-graphical (terminal) displays.  As corfu-doc isn't a
>> part of Emacs, I can't publish it to ELPA (as it depends on corfu-doc
>> and uses some code adapted from corfu-doc).
>
> As Philip said, it's OK for a GNU ELPA package to depend on a NonGNU
> ELPA package (it's not our first choice, admittedly, but it's only an
> annoyance rather than an obstacle).  BTW, it would be good to develop
> some kind of API such that corfu, corfu-doc and others can call a "show
> this thing" function and the result is shown either with child-frames or
> with `popon` (or with any other replacement such as `popup`, tooltips,
> a using a plain old window, ...), without having to rely on advice?
>
> Any chance you could look into that, maybe getting feedback from the
> authors of corfu, company, popup, and other related packages?
>
>
>         Stefan
>

That's a great idea, but has a problem, Popon or popup.el don't work
like windows and frames.  popup.el seems to be useful mainly for menus,
though I maybe wrong.  Popon is more generalized and minimal, so it
requires manual handling of the text.

In windows and frames (which actually contains windows), Emacs does all
the heavy lifting (scrolling, line truncation, line wrapping, word
wrapping, just to name a few) using its C code.  Doing this in Emacs
Lisp isn't very efficient (especially when you don't have Emacs with
native compilation support, such as I).

And even if someone does this, many packages won't use it, either
because the author don't get the convenience of child frames in that
API, or the author wants to add his/her package to the base Emacs
distribution, so he/she doesn't want to add any dependencies.  (For
example, I asked Corfu's author if it is possible to add corfu-terminal
to Corfu as an extension, but he said no just because of the extra Popon
dependency, which I intentionally extracted out of corfu-terminal to let
others use it)

I think the best solution will be to implement child frames in terminal.
AFAIK, ncurses has a concept of floating window, which we can use to
render the frame.  Doing this will solve all floating popup related
problems.  Then all packages will use this standard (child) frame API to
show popup.

-- 
Akib Azmain Turja

This message is signed by me with my GnuPG key.  It's fingerprint is:

    7001 8CE5 819F 17A3 BBA6  66AF E74F 0EFA 922A E7F5

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal
  2022-05-28 16:06 ` Akib Azmain Turja
@ 2022-05-28 17:46   ` Philip Kaludercic
  2022-05-28 20:31     ` Akib Azmain Turja
  0 siblings, 1 reply; 64+ messages in thread
From: Philip Kaludercic @ 2022-05-28 17:46 UTC (permalink / raw)
  To: Akib Azmain Turja; +Cc: Yuwei Tian, Yuwei Tian, Daniel Mendler, emacs-devel

Akib Azmain Turja <akib@disroot.org> writes:

> Congratulations, Yuwei Tian.  Your copyright assignment is done.
>
> Now, Yuwei Tian and Daniel Mendler, do you want to add corfu-doc to
> Corfu as an extension now?  If so, I think corfu-doc should be
> published directly on ELPA as a part of Corfu instead of adding to
> NonGNU ELPA for a few days.

Do I misunderstand something, or why is adding corfu-doc to corfu (a GNU
ELPA) package opposed to adding it as a separate package to NonGNU ELPA?



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal
  2022-05-28 16:30   ` Akib Azmain Turja
@ 2022-05-28 17:47     ` Stefan Monnier
  2022-05-28 20:27       ` Akib Azmain Turja
  2022-05-28 19:16     ` Eli Zaretskii
  1 sibling, 1 reply; 64+ messages in thread
From: Stefan Monnier @ 2022-05-28 17:47 UTC (permalink / raw)
  To: Akib Azmain Turja; +Cc: emacs-devel, Yuwei Tian

> That's a great idea, but has a problem, Popon or popup.el don't work
> like windows and frames.  popup.el seems to be useful mainly for menus,
> though I maybe wrong.  Popon is more generalized and minimal, so it
> requires manual handling of the text.

That's the point of the design of the API: to provide an interface that
is sufficiently restricted that it can work with various implementation
choices (while still being useful enough).

> example, I asked Corfu's author if it is possible to add corfu-terminal
> to Corfu as an extension, but he said no just because of the extra Popon
> dependency, which I intentionally extracted out of corfu-terminal to let
> others use it)

But once the API is available corfu can make use of it without adding
a dependency on `popon`.

> I think the best solution will be to implement child frames in terminal.
> AFAIK, ncurses has a concept of floating window, which we can use to
> render the frame.  Doing this will solve all floating popup related
> problems.  Then all packages will use this standard (child) frame API to
> show popup.

We already have code which does this kind of thing, to draw menus in
tty frames.  IIUC the implementation currently relies on the fact that
no ELisp is run while those overlaid menus are drawn, so it may require
a fair bit of surgery, but indeed implementing something like
popup/popon at a lower level is probably the better choice in the
long run.  Nobody has taken on this challenge yet, tho.

In any case, this API that I think we should design should hopefully
make it possible to use such a C-level implementation if/when it's
available.


        Stefan




^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal
  2022-05-28 16:30   ` Akib Azmain Turja
  2022-05-28 17:47     ` Stefan Monnier
@ 2022-05-28 19:16     ` Eli Zaretskii
  2022-05-28 20:40       ` Akib Azmain Turja
  1 sibling, 1 reply; 64+ messages in thread
From: Eli Zaretskii @ 2022-05-28 19:16 UTC (permalink / raw)
  To: Akib Azmain Turja; +Cc: monnier, emacs-devel, ibluefocus

> From: Akib Azmain Turja <akib@disroot.org>
> Cc: emacs-devel@gnu.org, Yuwei Tian <ibluefocus@outlook.com>
> Date: Sat, 28 May 2022 22:30:46 +0600
> 
> I think the best solution will be to implement child frames in terminal.
> AFAIK, ncurses has a concept of floating window, which we can use to
> render the frame.

The difficulty in implementing child frames on TTY are not because
Emacs cannot draw on TTY at arbitrary coordinates, it's because there
are fundamental design principles on which TTY display is based.  I'd
actually recommend to implement child frames on TTY as a special kind
of window that is free of the "normal" window geometry restrictions.



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal
  2022-05-28 17:47     ` Stefan Monnier
@ 2022-05-28 20:27       ` Akib Azmain Turja
  2022-05-28 22:03         ` Stefan Monnier
  0 siblings, 1 reply; 64+ messages in thread
From: Akib Azmain Turja @ 2022-05-28 20:27 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel, Yuwei Tian

[-- Attachment #1: Type: text/plain, Size: 1795 bytes --]

Stefan Monnier <monnier@iro.umontreal.ca> writes:

>> example, I asked Corfu's author if it is possible to add corfu-terminal
>> to Corfu as an extension, but he said no just because of the extra Popon
>> dependency, which I intentionally extracted out of corfu-terminal to let
>> others use it)
>
> But once the API is available corfu can make use of it without adding
> a dependency on `popon`.

But that would need Corfu to add a dependency that API, unless that API
is a part of Emacs distribution.

>
>> I think the best solution will be to implement child frames in terminal.
>> AFAIK, ncurses has a concept of floating window, which we can use to
>> render the frame.  Doing this will solve all floating popup related
>> problems.  Then all packages will use this standard (child) frame API to
>> show popup.
>
> We already have code which does this kind of thing, to draw menus in
> tty frames.  IIUC the implementation currently relies on the fact that
> no ELisp is run while those overlaid menus are drawn, so it may require
> a fair bit of surgery, but indeed implementing something like
> popup/popon at a lower level is probably the better choice in the
> long run.  Nobody has taken on this challenge yet, tho.

Yeah, it is probably better to spend the effort here unless we drop
text display support.  But most people are afraid of C (including me; if
I try to do this, I would spent more than 95% of time to actually figure
out what's the code doing).  And my internet speed is slow, so cloning
the entire repository is probably not possible for me right now.  Will a
shallow clone help?

-- 
Akib Azmain Turja

This message is signed by me with my GnuPG key.  It's fingerprint is:

    7001 8CE5 819F 17A3 BBA6  66AF E74F 0EFA 922A E7F5

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal
  2022-05-28 17:46   ` Philip Kaludercic
@ 2022-05-28 20:31     ` Akib Azmain Turja
  2022-05-29  8:14       ` Daniel Mendler
  0 siblings, 1 reply; 64+ messages in thread
From: Akib Azmain Turja @ 2022-05-28 20:31 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: Yuwei Tian, Yuwei Tian, Daniel Mendler, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 931 bytes --]

Philip Kaludercic <philipk@posteo.net> writes:

> Akib Azmain Turja <akib@disroot.org> writes:
>
>> Congratulations, Yuwei Tian.  Your copyright assignment is done.
>>
>> Now, Yuwei Tian and Daniel Mendler, do you want to add corfu-doc to
>> Corfu as an extension now?  If so, I think corfu-doc should be
>> published directly on ELPA as a part of Corfu instead of adding to
>> NonGNU ELPA for a few days.
>
> Do I misunderstand something, or why is adding corfu-doc to corfu (a GNU
> ELPA) package opposed to adding it as a separate package to NonGNU ELPA?

I don't know, its their (Yuwei Tian and Daniel Mendler) plan to do so.
See these (sorry for any nonfree JS):

https://github.com/minad/corfu/issues/103
https://github.com/galeo/corfu-doc/issues/8

-- 
Akib Azmain Turja

This message is signed by me with my GnuPG key.  It's fingerprint is:

    7001 8CE5 819F 17A3 BBA6  66AF E74F 0EFA 922A E7F5

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal
  2022-05-28 19:16     ` Eli Zaretskii
@ 2022-05-28 20:40       ` Akib Azmain Turja
  2022-05-29  6:26         ` Eli Zaretskii
  0 siblings, 1 reply; 64+ messages in thread
From: Akib Azmain Turja @ 2022-05-28 20:40 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: monnier, emacs-devel, ibluefocus

[-- Attachment #1: Type: text/plain, Size: 1259 bytes --]

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Akib Azmain Turja <akib@disroot.org>
>> Cc: emacs-devel@gnu.org, Yuwei Tian <ibluefocus@outlook.com>
>> Date: Sat, 28 May 2022 22:30:46 +0600
>> 
>> I think the best solution will be to implement child frames in terminal.
>> AFAIK, ncurses has a concept of floating window, which we can use to
>> render the frame.
>
> The difficulty in implementing child frames on TTY are not because
> Emacs cannot draw on TTY at arbitrary coordinates, it's because there
> are fundamental design principles on which TTY display is based.  I'd
> actually recommend to implement child frames on TTY as a special kind
> of window that is free of the "normal" window geometry restrictions.

I can't understand.  Emacs uses ncurses, and ncurses uses a single type
for both root window (the ncurses window covering the whole terminal; I
can't remember the name ncurses uses for this) and other windows.  Does
Emacs assume while render a frame that its drawing on the root window or
is it impossible to tell ncurses precisely which window to draw above?

-- 
Akib Azmain Turja

This message is signed by me with my GnuPG key.  It's fingerprint is:

    7001 8CE5 819F 17A3 BBA6  66AF E74F 0EFA 922A E7F5

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal
  2022-05-28 20:27       ` Akib Azmain Turja
@ 2022-05-28 22:03         ` Stefan Monnier
  0 siblings, 0 replies; 64+ messages in thread
From: Stefan Monnier @ 2022-05-28 22:03 UTC (permalink / raw)
  To: Akib Azmain Turja; +Cc: emacs-devel, Yuwei Tian

Akib Azmain Turja [2022-05-29 02:27:34] wrote:
> Stefan Monnier <monnier@iro.umontreal.ca> writes:
>>> example, I asked Corfu's author if it is possible to add corfu-terminal
>>> to Corfu as an extension, but he said no just because of the extra Popon
>>> dependency, which I intentionally extracted out of corfu-terminal to let
>>> others use it)
>>
>> But once the API is available corfu can make use of it without adding
>> a dependency on `popon`.
>
> But that would need Corfu to add a dependency that API,

Most likely it could use this API without depending on it (i.e. use it
if available and fallback on the existing code if not).

> unless that API is a part of Emacs distribution.

That'd be the plan, yes.

> Yeah, it is probably better to spend the effort here

No: even if/when we'll get C-level support for such things in ttys,
there will *still* be a need for an API that lets packages like corfu
stop worrying about whether the output goes to a tty or a GUI.


        Stefan




^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal
  2022-05-28 20:40       ` Akib Azmain Turja
@ 2022-05-29  6:26         ` Eli Zaretskii
  2022-07-12  3:19           ` Implementing child frames on terminal Akib Azmain Turja
  0 siblings, 1 reply; 64+ messages in thread
From: Eli Zaretskii @ 2022-05-29  6:26 UTC (permalink / raw)
  To: Akib Azmain Turja; +Cc: monnier, emacs-devel, ibluefocus

> From: Akib Azmain Turja <akib@disroot.org>
> Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org, ibluefocus@outlook.com
> Date: Sun, 29 May 2022 02:40:07 +0600
> 
> >> I think the best solution will be to implement child frames in terminal.
> >> AFAIK, ncurses has a concept of floating window, which we can use to
> >> render the frame.
> >
> > The difficulty in implementing child frames on TTY are not because
> > Emacs cannot draw on TTY at arbitrary coordinates, it's because there
> > are fundamental design principles on which TTY display is based.  I'd
> > actually recommend to implement child frames on TTY as a special kind
> > of window that is free of the "normal" window geometry restrictions.
> 
> I can't understand.  Emacs uses ncurses, and ncurses uses a single type
> for both root window (the ncurses window covering the whole terminal; I
> can't remember the name ncurses uses for this) and other windows.  Does
> Emacs assume while render a frame that its drawing on the root window or
> is it impossible to tell ncurses precisely which window to draw above?

First, Emacs uses ncurses in a very limited manner.  Basically, it
just uses the functions that move the cursor and turn on/off various
attributes, like bold, inverse video, and colors.  I think the only
significant API from ncurses we use is tputs.  Emacs certainly does
NOT use any window-related facilities of ncurses; instead, it manages
the windows by itself.

Next, you need to understand how the Emacs display works on TTY
terminals.  The basis for the Emacs display (on both GUI and TTY
terminals) is a canvas-like model of what should be on the glass,
called "glyph matrix".  A glyph matrix is a 2-dimensional array where
each element corresponds to a character position on the screen (on GUI
terminals, we can also show display elements other than characters:
images, stretches of whitespace, xwidgets, etc.).  When performing
redisplay, Emacs first generates the up-to-date contents of the glyph
matrix, and then redraws the portions of the screen where the actual
screen contents differ from what the glyph matrix says.

Now, on GUI displays, each _window_ (not frame!) has its own glyph
matrix, and redisplay proceeds by walking the window tree and updating
each window which for some reason needs to be redrawn, partially or
fully.  By contrast, on TTY displays, the glyph matrices of the
windows are actually sub-matrices of a larger frame glyph matrix.  So
in TTY redisplay, when Emacs updates the glyph matrices of the
individual windows, it indirectly updates the glyph matrix of the
frame that is the parent of those windows.  Then the entire frame is
updated on the screen by comparing the frame glyph matrix to what is
actually on display.

I hope you now see why I suggested to treat child frames on TTY as
special kinds of windows: if we do that, we "just" need to support
windows whose glyph matrix partially overlaps those of the other
windows, and make sure we update the glyph matrices of the child
frame's windows _after_ we are done with all the windows of the parent
frame.  This way, the frame glyph matrix that is eventually used to
update what's on the glass will correctly reflect what should be on
the screen.

Stefan mentioned the TTY menus as a possible model for implementing
child frames, but I don't think I agree: the implementation of TTY
menus only works well because selecting from a menu is a single user
operation, during which the display is not important, so it is
effectively kept outdated.  We cannot do that for child frames.

HTH



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal
  2022-05-28 20:31     ` Akib Azmain Turja
@ 2022-05-29  8:14       ` Daniel Mendler
  2022-07-15 15:06         ` Akib Azmain Turja
  0 siblings, 1 reply; 64+ messages in thread
From: Daniel Mendler @ 2022-05-29  8:14 UTC (permalink / raw)
  To: Akib Azmain Turja, Philip Kaludercic; +Cc: Yuwei Tian, Yuwei Tian, emacs-devel



On 5/28/22 22:31, Akib Azmain Turja wrote:
> Philip Kaludercic <philipk@posteo.net> writes:
> 
>> Akib Azmain Turja <akib@disroot.org> writes:
>>
>>> Congratulations, Yuwei Tian.  Your copyright assignment is done.
>>>
>>> Now, Yuwei Tian and Daniel Mendler, do you want to add corfu-doc to
>>> Corfu as an extension now?  If so, I think corfu-doc should be
>>> published directly on ELPA as a part of Corfu instead of adding to
>>> NonGNU ELPA for a few days.
>>
>> Do I misunderstand something, or why is adding corfu-doc to corfu (a GNU
>> ELPA) package opposed to adding it as a separate package to NonGNU ELPA?
> 
> I don't know, its their (Yuwei Tian and Daniel Mendler) plan to do so.
> See these (sorry for any nonfree JS):
> 
> https://github.com/minad/corfu/issues/103
> https://github.com/galeo/corfu-doc/issues/8

Yes, this will happen eventually if Yuwei is still interested. But there
is no guarantee that this is going to happen soon or in a few days.
Corfu-doc currently comes with its own child frame implementation.
Instead it should make use of the Corfu implementation, which may need
some refactoring such that it can be used also by corfu-doc. This is
important to avoid unnecessary code duplication.

Daniel



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Implementing child frames on terminal
  2022-05-29  6:26         ` Eli Zaretskii
@ 2022-07-12  3:19           ` Akib Azmain Turja
  2022-07-12  5:13             ` Po Lu
  2022-07-12 13:06             ` Eli Zaretskii
  0 siblings, 2 replies; 64+ messages in thread
From: Akib Azmain Turja @ 2022-07-12  3:19 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: monnier, emacs-devel, ibluefocus

[-- Attachment #1: Type: text/plain, Size: 2290 bytes --]


Eli Zaretskii <eliz@gnu.org> writes:

> I suggested to treat child frames on TTY as
> special kinds of windows: if we do that, we "just" need to support
> windows whose glyph matrix partially overlaps those of the other
> windows, and make sure we update the glyph matrices of the child
> frame's windows _after_ we are done with all the windows of the parent
> frame.  This way, the frame glyph matrix that is eventually used to
> update what's on the glass will correctly reflect what should be on
> the screen.

Your idea is good, but until the child frame crosses the edges of it's
parent.  Then it'll cause a segmentation fault (the best case) or
continue without any symptom and corrupt your files or something else
silently (the worst case).

I think we should somehow render the child frame glyph matrix before
processing it's parents.  Then we can copy the it's glyph matrix to it's
parent's one.  And, in case the child frame doesn't cross parent's
edges, we can use a floating window (as you suggested) as an
optimization (although I don't think we need this optimization, since
terminal don't usually have many characters).

And the final question, what should we do when the child frame crosses
it's parent's edges, but doesn't cross the display?  Should we clip it
(like most window systems) [1] or not (like NS) [2]?

  +----------------------+        +----------------------+
  |frame 1               |        |frame 1               |
  |parent nil            |        |parent nil            |
  |  +-------------+     |        |  +-------------+     |
  |  |frame 2      |     |        |  |frame 2      |     |
  |  |parent 1     |     |        |  |parent 1     |     |
  |  | +-----------|     |        |  | +--------------+  |
  |  | |frame 3    |     |        |  | |frame 3       |  |
  |  | |parent 2   |     |        |  | |parent 2      |  |
  |  | +-----------|     |        |  | +--------------+  |
  |  +-------------+     |        |  +-------------+     |
  +----------------------+        +----------------------+

            [1]                             [2]

-- 
Akib Azmain Turja

This message is signed by me with my GnuPG key.  It's fingerprint is:

    7001 8CE5 819F 17A3 BBA6  66AF E74F 0EFA 922A E7F5

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-12  3:19           ` Implementing child frames on terminal Akib Azmain Turja
@ 2022-07-12  5:13             ` Po Lu
  2022-07-12  8:35               ` Akib Azmain Turja
  2022-07-12 13:06             ` Eli Zaretskii
  1 sibling, 1 reply; 64+ messages in thread
From: Po Lu @ 2022-07-12  5:13 UTC (permalink / raw)
  To: Akib Azmain Turja; +Cc: Eli Zaretskii, monnier, emacs-devel, ibluefocus

Akib Azmain Turja <akib@disroot.org> writes:

> Your idea is good, but until the child frame crosses the edges of it's
> parent.  Then it'll cause a segmentation fault (the best case) or
> continue without any symptom and corrupt your files or something else
> silently (the worst case).

Fixing that (assuming you clip the contents of the child frame to the
parent) sounds easier than what you propose further on here:

> I think we should somehow render the child frame glyph matrix before
> processing it's parents.  Then we can copy the it's glyph matrix to it's
> parent's one.  And, in case the child frame doesn't cross parent's
> edges, we can use a floating window (as you suggested) as an
> optimization (although I don't think we need this optimization, since
> terminal don't usually have many characters).



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-12  5:13             ` Po Lu
@ 2022-07-12  8:35               ` Akib Azmain Turja
  2022-07-12  9:44                 ` Po Lu
  2022-07-12 13:19                 ` Eli Zaretskii
  0 siblings, 2 replies; 64+ messages in thread
From: Akib Azmain Turja @ 2022-07-12  8:35 UTC (permalink / raw)
  To: Po Lu; +Cc: Eli Zaretskii, monnier, emacs-devel, ibluefocus

[-- Attachment #1: Type: text/plain, Size: 1295 bytes --]

Po Lu <luangruo@yahoo.com> writes:

> Akib Azmain Turja <akib@disroot.org> writes:
>
>> Your idea is good, but until the child frame crosses the edges of it's
>> parent.  Then it'll cause a segmentation fault (the best case) or
>> continue without any symptom and corrupt your files or something else
>> silently (the worst case).
>
> Fixing that (assuming you clip the contents of the child frame to the
> parent) sounds easier than what you propose further on here:
>
>> I think we should somehow render the child frame glyph matrix before
>> processing it's parents.  Then we can copy the it's glyph matrix to it's
>> parent's one.  And, in case the child frame doesn't cross parent's
>> edges, we can use a floating window (as you suggested) as an
>> optimization (although I don't think we need this optimization, since
>> terminal don't usually have many characters).

Really?  It looks like it would require to modify whole redisplay logic
to make sure whether a glyph is inside edges and write to it only if it
is.  That sounds more tedious to me.  However, maybe it's easier to do
but I don't know how to.

-- 
Akib Azmain Turja

This message is signed by me with my GnuPG key.  It's fingerprint is:

    7001 8CE5 819F 17A3 BBA6  66AF E74F 0EFA 922A E7F5

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-12  8:35               ` Akib Azmain Turja
@ 2022-07-12  9:44                 ` Po Lu
  2022-07-12 13:25                   ` Eli Zaretskii
  2022-07-12 13:19                 ` Eli Zaretskii
  1 sibling, 1 reply; 64+ messages in thread
From: Po Lu @ 2022-07-12  9:44 UTC (permalink / raw)
  To: Akib Azmain Turja; +Cc: Eli Zaretskii, monnier, emacs-devel, ibluefocus

Akib Azmain Turja <akib@disroot.org> writes:

> Really?  It looks like it would require to modify whole redisplay logic
> to make sure whether a glyph is inside edges and write to it only if it
> is.  That sounds more tedious to me.  However, maybe it's easier to do
> but I don't know how to.

I guess you could allocate the individual rows in the child frame's
desired matrix separately,then copy them to the parent frame's desired
matrix after the results of `display_line' are written to a row of the
child frame's desired matrix, and then skip actual updates on the child
frame entirely (thus eliminating use of its current matrix), relying on
`update_frame' to DTRT on the parent.

But I don't know enough about the frame-based redisplay to tell you
precisely how to do that, or even if it's feasible or not.



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-12  3:19           ` Implementing child frames on terminal Akib Azmain Turja
  2022-07-12  5:13             ` Po Lu
@ 2022-07-12 13:06             ` Eli Zaretskii
  2022-07-12 13:40               ` Po Lu
  1 sibling, 1 reply; 64+ messages in thread
From: Eli Zaretskii @ 2022-07-12 13:06 UTC (permalink / raw)
  To: Akib Azmain Turja; +Cc: monnier, emacs-devel, ibluefocus

> From: Akib Azmain Turja <akib@disroot.org>
> Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org, ibluefocus@outlook.com
> Date: Tue, 12 Jul 2022 09:19:28 +0600
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > I suggested to treat child frames on TTY as
> > special kinds of windows: if we do that, we "just" need to support
> > windows whose glyph matrix partially overlaps those of the other
> > windows, and make sure we update the glyph matrices of the child
> > frame's windows _after_ we are done with all the windows of the parent
> > frame.  This way, the frame glyph matrix that is eventually used to
> > update what's on the glass will correctly reflect what should be on
> > the screen.
> 
> Your idea is good, but until the child frame crosses the edges of it's
> parent.  Then it'll cause a segmentation fault (the best case) or
> continue without any symptom and corrupt your files or something else
> silently (the worst case).

I suspect there's a misunderstanding here: when I said "frame glyph
matrix", I meant that in the sense it is used in dispnew.c -- the
glyph matrix describing the frame that is the parent of all the other
windows and child frames.  That frame cannot possibly be "crossed",
because it by definition has the full dimensions of the TTY display.

> And the final question, what should we do when the child frame crosses
> it's parent's edges, but doesn't cross the display?  Should we clip it
> (like most window systems) [1] or not (like NS) [2]?

The former, I think.  But maybe we could make it customizable.  The
difference from the code POV is not that big.



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-12  8:35               ` Akib Azmain Turja
  2022-07-12  9:44                 ` Po Lu
@ 2022-07-12 13:19                 ` Eli Zaretskii
  2022-07-12 14:21                   ` Akib Azmain Turja
  1 sibling, 1 reply; 64+ messages in thread
From: Eli Zaretskii @ 2022-07-12 13:19 UTC (permalink / raw)
  To: Akib Azmain Turja; +Cc: luangruo, monnier, emacs-devel, ibluefocus

> From: Akib Azmain Turja <akib@disroot.org>
> Cc: Eli Zaretskii <eliz@gnu.org>, monnier@iro.umontreal.ca,
>  emacs-devel@gnu.org, ibluefocus@outlook.com
> Date: Tue, 12 Jul 2022 14:35:31 +0600
> 
> > Fixing that (assuming you clip the contents of the child frame to the
> > parent) sounds easier than what you propose further on here:
> >
> >> I think we should somehow render the child frame glyph matrix before
> >> processing it's parents.  Then we can copy the it's glyph matrix to it's
> >> parent's one.  And, in case the child frame doesn't cross parent's
> >> edges, we can use a floating window (as you suggested) as an
> >> optimization (although I don't think we need this optimization, since
> >> terminal don't usually have many characters).
> 
> Really?  It looks like it would require to modify whole redisplay logic
> to make sure whether a glyph is inside edges and write to it only if it
> is.

Actually, the current redisplay code does this all the time: that's
how we know when to continue or truncate a too-long line, or where to
wrap a long line under visual-line-mode.



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-12  9:44                 ` Po Lu
@ 2022-07-12 13:25                   ` Eli Zaretskii
  2022-07-12 13:38                     ` Po Lu
  0 siblings, 1 reply; 64+ messages in thread
From: Eli Zaretskii @ 2022-07-12 13:25 UTC (permalink / raw)
  To: Po Lu; +Cc: akib, monnier, emacs-devel, ibluefocus

> From: Po Lu <luangruo@yahoo.com>
> Cc: Eli Zaretskii <eliz@gnu.org>,  monnier@iro.umontreal.ca,
>   emacs-devel@gnu.org,  ibluefocus@outlook.com
> Date: Tue, 12 Jul 2022 17:44:58 +0800
> 
> Akib Azmain Turja <akib@disroot.org> writes:
> 
> > Really?  It looks like it would require to modify whole redisplay logic
> > to make sure whether a glyph is inside edges and write to it only if it
> > is.  That sounds more tedious to me.  However, maybe it's easier to do
> > but I don't know how to.
> 
> I guess you could allocate the individual rows in the child frame's
> desired matrix separately,then copy them to the parent frame's desired
> matrix after the results of `display_line' are written to a row of the
> child frame's desired matrix, and then skip actual updates on the child
> frame entirely (thus eliminating use of its current matrix), relying on
> `update_frame' to DTRT on the parent.

That'd be a step in the wrong direction, I think.  The whole idea of
TTY display is that glyphs written to the glyph rows of a window's
matrix "miraculously" end up in the frame's glyph matrix.  This avoids
a costly copying of glyphs by allocating the glyphs of windows from
the glyphs of the frame glyph matrix, and allows the last stage of
redisplay to optimize the writes of the entire frame, as opposed to
doing that window by window, which will surely be less optimal.

I see no reason yet to abandon this trick.



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-12 13:25                   ` Eli Zaretskii
@ 2022-07-12 13:38                     ` Po Lu
  2022-07-12 13:48                       ` Eli Zaretskii
  0 siblings, 1 reply; 64+ messages in thread
From: Po Lu @ 2022-07-12 13:38 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: akib, monnier, emacs-devel, ibluefocus

Eli Zaretskii <eliz@gnu.org> writes:

> That'd be a step in the wrong direction, I think.  The whole idea of
> TTY display is that glyphs written to the glyph rows of a window's
> matrix "miraculously" end up in the frame's glyph matrix.  This avoids
> a costly copying of glyphs by allocating the glyphs of windows from
> the glyphs of the frame glyph matrix, and allows the last stage of
> redisplay to optimize the writes of the entire frame, as opposed to
> doing that window by window, which will surely be less optimal.
>
> I see no reason yet to abandon this trick.

I think you're right.  I don't understand the frame-based redisplay very
well, thanks.



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-12 13:06             ` Eli Zaretskii
@ 2022-07-12 13:40               ` Po Lu
  2022-07-12 13:50                 ` Eli Zaretskii
  2022-07-12 14:03                 ` Akib Azmain Turja
  0 siblings, 2 replies; 64+ messages in thread
From: Po Lu @ 2022-07-12 13:40 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Akib Azmain Turja, monnier, emacs-devel, ibluefocus

Eli Zaretskii <eliz@gnu.org> writes:

>> And the final question, what should we do when the child frame crosses
>> it's parent's edges, but doesn't cross the display?  Should we clip it
>> (like most window systems) [1] or not (like NS) [2]?
>
> The former, I think.  But maybe we could make it customizable.  The
> difference from the code POV is not that big.

If so, then someone should implement the same on X.  (I'm not
volunteering, IMO child frames are a misfeature that could be
implemented with undecorated frames entirely in Lisp.)

It isn't fair to have a GUI feature that works in a TTY, but not under
X.



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-12 13:38                     ` Po Lu
@ 2022-07-12 13:48                       ` Eli Zaretskii
  0 siblings, 0 replies; 64+ messages in thread
From: Eli Zaretskii @ 2022-07-12 13:48 UTC (permalink / raw)
  To: Po Lu; +Cc: akib, monnier, emacs-devel, ibluefocus

> From: Po Lu <luangruo@yahoo.com>
> Cc: akib@disroot.org,  monnier@iro.umontreal.ca,  emacs-devel@gnu.org,
>   ibluefocus@outlook.com
> Date: Tue, 12 Jul 2022 21:38:23 +0800
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > That'd be a step in the wrong direction, I think.  The whole idea of
> > TTY display is that glyphs written to the glyph rows of a window's
> > matrix "miraculously" end up in the frame's glyph matrix.  This avoids
> > a costly copying of glyphs by allocating the glyphs of windows from
> > the glyphs of the frame glyph matrix, and allows the last stage of
> > redisplay to optimize the writes of the entire frame, as opposed to
> > doing that window by window, which will surely be less optimal.
> >
> > I see no reason yet to abandon this trick.
> 
> I think you're right.  I don't understand the frame-based redisplay very
> well, thanks.

Which part is difficult to understand?



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-12 13:40               ` Po Lu
@ 2022-07-12 13:50                 ` Eli Zaretskii
  2022-07-12 13:54                   ` Po Lu
  2022-07-12 14:03                 ` Akib Azmain Turja
  1 sibling, 1 reply; 64+ messages in thread
From: Eli Zaretskii @ 2022-07-12 13:50 UTC (permalink / raw)
  To: Po Lu; +Cc: akib, monnier, emacs-devel, ibluefocus

> From: Po Lu <luangruo@yahoo.com>
> Cc: Akib Azmain Turja <akib@disroot.org>,  monnier@iro.umontreal.ca,
>   emacs-devel@gnu.org,  ibluefocus@outlook.com
> Date: Tue, 12 Jul 2022 21:40:35 +0800
> 
> It isn't fair to have a GUI feature that works in a TTY, but not under
> X.

But it does work on GUI displays, just not on all of them.

(And why is it important whether we clip or don't clip child frames in
those cases?)



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-12 13:50                 ` Eli Zaretskii
@ 2022-07-12 13:54                   ` Po Lu
  2022-07-12 14:17                     ` Eli Zaretskii
  0 siblings, 1 reply; 64+ messages in thread
From: Po Lu @ 2022-07-12 13:54 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: akib, monnier, emacs-devel, ibluefocus

Eli Zaretskii <eliz@gnu.org> writes:

> But it does work on GUI displays, just not on all of them.

But we don't have the ability to control whether or not clipping is
performed on any of them, at present.

> (And why is it important whether we clip or don't clip child frames in
> those cases?)

Someone might want a popup implemented as a child frame to extend past
the bounds of the parent, for example.



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-12 13:40               ` Po Lu
  2022-07-12 13:50                 ` Eli Zaretskii
@ 2022-07-12 14:03                 ` Akib Azmain Turja
  1 sibling, 0 replies; 64+ messages in thread
From: Akib Azmain Turja @ 2022-07-12 14:03 UTC (permalink / raw)
  To: Po Lu, Eli Zaretskii; +Cc: monnier, emacs-devel, ibluefocus

[-- Attachment #1: Type: text/plain, Size: 1099 bytes --]

Po Lu <luangruo@yahoo.com> writes:

> Eli Zaretskii <eliz@gnu.org> writes:
>
>>> And the final question, what should we do when the child frame crosses
>>> it's parent's edges, but doesn't cross the display?  Should we clip it
>>> (like most window systems) [1] or not (like NS) [2]?
>>
>> The former, I think.  But maybe we could make it customizable.  The
>> difference from the code POV is not that big.
>
> If so, then someone should implement the same on X.  (I'm not
> volunteering, IMO child frames are a misfeature that could be
> implemented with undecorated frames entirely in Lisp.)

It's easy:

Don't use the parent frame parameter and calculate the position of the
frame yourself.

>
> It isn't fair to have a GUI feature that works in a TTY, but not under
> X.

It's fair, as long as the feature is available on free software systems.
But it's obviously good to support the feature on other platforms.

-- 
Akib Azmain Turja

This message is signed by me with my GnuPG key.  It's fingerprint is:

    7001 8CE5 819F 17A3 BBA6  66AF E74F 0EFA 922A E7F5

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-12 13:54                   ` Po Lu
@ 2022-07-12 14:17                     ` Eli Zaretskii
  2022-07-14  1:27                       ` Po Lu
  2022-07-14  1:55                       ` Stefan Monnier
  0 siblings, 2 replies; 64+ messages in thread
From: Eli Zaretskii @ 2022-07-12 14:17 UTC (permalink / raw)
  To: Po Lu; +Cc: akib, monnier, emacs-devel, ibluefocus

> From: Po Lu <luangruo@yahoo.com>
> Cc: akib@disroot.org,  monnier@iro.umontreal.ca,  emacs-devel@gnu.org,
>   ibluefocus@outlook.com
> Date: Tue, 12 Jul 2022 21:54:34 +0800
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > (And why is it important whether we clip or don't clip child frames in
> > those cases?)
> 
> Someone might want a popup implemented as a child frame to extend past
> the bounds of the parent, for example.

Why would they want that?



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-12 13:19                 ` Eli Zaretskii
@ 2022-07-12 14:21                   ` Akib Azmain Turja
  2022-07-12 15:46                     ` Eli Zaretskii
  0 siblings, 1 reply; 64+ messages in thread
From: Akib Azmain Turja @ 2022-07-12 14:21 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: luangruo, monnier, emacs-devel, ibluefocus

[-- Attachment #1: Type: text/plain, Size: 2066 bytes --]

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Akib Azmain Turja <akib@disroot.org>
>> Cc: Eli Zaretskii <eliz@gnu.org>, monnier@iro.umontreal.ca,
>>  emacs-devel@gnu.org, ibluefocus@outlook.com
>> Date: Tue, 12 Jul 2022 14:35:31 +0600
>> 
>> > Fixing that (assuming you clip the contents of the child frame to the
>> > parent) sounds easier than what you propose further on here:
>> >
>> >> I think we should somehow render the child frame glyph matrix before
>> >> processing it's parents.  Then we can copy the it's glyph matrix to it's
>> >> parent's one.  And, in case the child frame doesn't cross parent's
>> >> edges, we can use a floating window (as you suggested) as an
>> >> optimization (although I don't think we need this optimization, since
>> >> terminal don't usually have many characters).
>> 
>> Really?  It looks like it would require to modify whole redisplay logic
>> to make sure whether a glyph is inside edges and write to it only if it
>> is.
>
> Actually, the current redisplay code does this all the time: that's
> how we know when to continue or truncate a too-long line, or where to
> wrap a long line under visual-line-mode.
>

But this problem is different than that.  In your too-long line case,
redisplay code checks whether a glyph is inside the window.  But for
child frames, it needs to check whether a glyph is inside the parent
frame (i.e. safe to write to), write it if it is and always assume
that it was written successfully.

For example, if we have a 30 chars wide child frames displaying a 40
chars wide line and the child frame's left edge is 20 char away from
it's parent right edge, the redisplay code has to write the first 20
chars to the glyph matrix and don't write the next 10 chars, but still
think that they were written, and finally truncate the last 10 chars or
wrap it depending on the value of "truncate-lines".

-- 
Akib Azmain Turja

This message is signed by me with my GnuPG key.  It's fingerprint is:

    7001 8CE5 819F 17A3 BBA6  66AF E74F 0EFA 922A E7F5

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-12 14:21                   ` Akib Azmain Turja
@ 2022-07-12 15:46                     ` Eli Zaretskii
  2022-07-13 14:33                       ` Akib Azmain Turja
  0 siblings, 1 reply; 64+ messages in thread
From: Eli Zaretskii @ 2022-07-12 15:46 UTC (permalink / raw)
  To: Akib Azmain Turja; +Cc: luangruo, monnier, emacs-devel, ibluefocus

> From: Akib Azmain Turja <akib@disroot.org>
> Cc: luangruo@yahoo.com, monnier@iro.umontreal.ca, emacs-devel@gnu.org,
>  ibluefocus@outlook.com
> Date: Tue, 12 Jul 2022 20:21:02 +0600
> 
> >> Really?  It looks like it would require to modify whole redisplay logic
> >> to make sure whether a glyph is inside edges and write to it only if it
> >> is.
> >
> > Actually, the current redisplay code does this all the time: that's
> > how we know when to continue or truncate a too-long line, or where to
> > wrap a long line under visual-line-mode.
> >
> 
> But this problem is different than that.  In your too-long line case,
> redisplay code checks whether a glyph is inside the window.  But for
> child frames, it needs to check whether a glyph is inside the parent
> frame (i.e. safe to write to), write it if it is and always assume
> that it was written successfully.
> 
> For example, if we have a 30 chars wide child frames displaying a 40
> chars wide line and the child frame's left edge is 20 char away from
> it's parent right edge, the redisplay code has to write the first 20
> chars to the glyph matrix and don't write the next 10 chars, but still
> think that they were written, and finally truncate the last 10 chars or
> wrap it depending on the value of "truncate-lines".

The way redisplay of a window works, it starts by determining how wide
can each screen line be before it overflows the right edge of the
window.  The result of this is the member of 'struct it' called
'last_visible_x'.  It is computed once (see init_iterator), and then
used everywhere when we need to decide whether there's place in the
screen line for one more glyph.

So to support the above, we'd just need to modify the calculation of
last_visible_x in init_iterator such that it takes into consideration
the edge of the parent frame.  And that shouldn't be hard, given that
we know the offset of the child frame from its parent frame.



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-12 15:46                     ` Eli Zaretskii
@ 2022-07-13 14:33                       ` Akib Azmain Turja
  2022-07-13 15:57                         ` Eli Zaretskii
  0 siblings, 1 reply; 64+ messages in thread
From: Akib Azmain Turja @ 2022-07-13 14:33 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: luangruo, monnier, emacs-devel, ibluefocus

[-- Attachment #1: Type: text/plain, Size: 3269 bytes --]

Eli Zaretskii <eliz@gnu.org> writes:

>> But this problem is different than that.  In your too-long line case,
>> redisplay code checks whether a glyph is inside the window.  But for
>> child frames, it needs to check whether a glyph is inside the parent
>> frame (i.e. safe to write to), write it if it is and always assume
>> that it was written successfully.
>> 
>> For example, if we have a 30 chars wide child frames displaying a 40
>> chars wide line and the child frame's left edge is 20 char away from
>> it's parent right edge, the redisplay code has to write the first 20
>> chars to the glyph matrix and don't write the next 10 chars, but still
>> think that they were written, and finally truncate the last 10 chars or
>> wrap it depending on the value of "truncate-lines".
>
> The way redisplay of a window works, it starts by determining how wide
> can each screen line be before it overflows the right edge of the
> window.  The result of this is the member of 'struct it' called
> 'last_visible_x'.  It is computed once (see init_iterator), and then
> used everywhere when we need to decide whether there's place in the
> screen line for one more glyph.
>
> So to support the above, we'd just need to modify the calculation of
> last_visible_x in init_iterator such that it takes into consideration
> the edge of the parent frame.  And that shouldn't be hard, given that
> we know the offset of the child frame from its parent frame.
>

What do you mean?  Set last_visible_x to the last x position not
clipped?  That won't work, since last_visible_x has no effect on
margins AFAIK.  Same for first_visible_x.

I have another idea, we can make the glyph matrix memory larger than the
top-level (i.e. not a child) frame:

--8<---------------cut here---------------start------------->8---
+--------------------------------------+
|+------------------------------------+|
||                                    ||<<< glyph matrix memory
||<<< frame glyph matrix              ||
||                                    ||
||                                    ||
||                                    ||
||    +-----------------------------+ ||
||    |<<< child frame glyph matrix | ||
||    |                             | ||
|+----|.............................|-+|
|     |                             |  |
|     +-----------------------------+  |
+--------------------------------------+
--8<---------------cut here---------------end--------------->8---

According to the figure above, rendering glyphs for part of child frame
outside the top-level frame's edges won't cause any error because it
will write to allocated memory, but still those glyph won't appear on
the glass because they are outside the glyph matrix of the top-level
frame.  This technique won't allow to clip a nested child frame to the
edges of it parent (which is also a child frame) and also wastes some
memory, however.

Do you have a list of functions that directly writes to glyph matrix?
It is much easier to work with function than to work with dynamic
memory.

-- 
Akib Azmain Turja

This message is signed by me with my GnuPG key.  It's fingerprint is:

    7001 8CE5 819F 17A3 BBA6  66AF E74F 0EFA 922A E7F5

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-13 14:33                       ` Akib Azmain Turja
@ 2022-07-13 15:57                         ` Eli Zaretskii
  2022-07-13 17:55                           ` Akib Azmain Turja
  0 siblings, 1 reply; 64+ messages in thread
From: Eli Zaretskii @ 2022-07-13 15:57 UTC (permalink / raw)
  To: Akib Azmain Turja; +Cc: luangruo, monnier, emacs-devel, ibluefocus

> From: Akib Azmain Turja <akib@disroot.org>
> Cc: luangruo@yahoo.com, monnier@iro.umontreal.ca, emacs-devel@gnu.org,
>  ibluefocus@outlook.com
> Date: Wed, 13 Jul 2022 20:33:52 +0600
> 
> > The way redisplay of a window works, it starts by determining how wide
> > can each screen line be before it overflows the right edge of the
> > window.  The result of this is the member of 'struct it' called
> > 'last_visible_x'.  It is computed once (see init_iterator), and then
> > used everywhere when we need to decide whether there's place in the
> > screen line for one more glyph.
> >
> > So to support the above, we'd just need to modify the calculation of
> > last_visible_x in init_iterator such that it takes into consideration
> > the edge of the parent frame.  And that shouldn't be hard, given that
> > we know the offset of the child frame from its parent frame.
> >
> 
> What do you mean?  Set last_visible_x to the last x position not
> clipped?  That won't work, since last_visible_x has no effect on
> margins AFAIK.  Same for first_visible_x.

You mean, the display margins?  If that is the problem that bothers
you, then yes, the functions in dispnew.c that calculate the
dimensions of each window will have to take the clipping into account.
And again, this calculation happens just once, in the beginning of a
redisplay cycle, and only if needed (i.e. only when the previously
calculated dimensions no longer fit).

But last_visible_x will still need to be adjusted as I outlined,
because no one said that the clipping happens on the margin (and most
windows don't have margins anyway).

> I have another idea, we can make the glyph matrix memory larger than the
> top-level (i.e. not a child) frame:
> 
> --8<---------------cut here---------------start------------->8---
> +--------------------------------------+
> |+------------------------------------+|
> ||                                    ||<<< glyph matrix memory
> ||<<< frame glyph matrix              ||
> ||                                    ||
> ||                                    ||
> ||                                    ||
> ||    +-----------------------------+ ||
> ||    |<<< child frame glyph matrix | ||
> ||    |                             | ||
> |+----|.............................|-+|
> |     |                             |  |
> |     +-----------------------------+  |
> +--------------------------------------+
> --8<---------------cut here---------------end--------------->8---
> 
> According to the figure above, rendering glyphs for part of child frame
> outside the top-level frame's edges won't cause any error because it
> will write to allocated memory, but still those glyph won't appear on
> the glass because they are outside the glyph matrix of the top-level
> frame.

Why produce glyphs that will never get written to the glass?  It's
just a waste of cycles.  And it isn't for free: we'd need to have code
that checks whether a glyph should or shouldn't be written to the
screen, because writing it outside of the terminal could have bad
effects.

> Do you have a list of functions that directly writes to glyph matrix?
> It is much easier to work with function than to work with dynamic
> memory.

They are too many, but you can start from the PRODUCE_GLYPHS macro.



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-13 15:57                         ` Eli Zaretskii
@ 2022-07-13 17:55                           ` Akib Azmain Turja
  2022-07-13 18:11                             ` Eli Zaretskii
  0 siblings, 1 reply; 64+ messages in thread
From: Akib Azmain Turja @ 2022-07-13 17:55 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: luangruo, monnier, emacs-devel, ibluefocus

[-- Attachment #1: Type: text/plain, Size: 4529 bytes --]

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Akib Azmain Turja <akib@disroot.org>
>> Cc: luangruo@yahoo.com, monnier@iro.umontreal.ca, emacs-devel@gnu.org,
>>  ibluefocus@outlook.com
>> Date: Wed, 13 Jul 2022 20:33:52 +0600
>> 
>> > The way redisplay of a window works, it starts by determining how wide
>> > can each screen line be before it overflows the right edge of the
>> > window.  The result of this is the member of 'struct it' called
>> > 'last_visible_x'.  It is computed once (see init_iterator), and then
>> > used everywhere when we need to decide whether there's place in the
>> > screen line for one more glyph.
>> >
>> > So to support the above, we'd just need to modify the calculation of
>> > last_visible_x in init_iterator such that it takes into consideration
>> > the edge of the parent frame.  And that shouldn't be hard, given that
>> > we know the offset of the child frame from its parent frame.
>> >
>> 
>> What do you mean?  Set last_visible_x to the last x position not
>> clipped?  That won't work, since last_visible_x has no effect on
>> margins AFAIK.  Same for first_visible_x.
>
> You mean, the display margins?  If that is the problem that bothers
> you, then yes, the functions in dispnew.c that calculate the
> dimensions of each window will have to take the clipping into account.
> And again, this calculation happens just once, in the beginning of a
> redisplay cycle, and only if needed (i.e. only when the previously
> calculated dimensions no longer fit).
>
> But last_visible_x will still need to be adjusted as I outlined,

I don't think so.  I tried to hard-code last_visible_x to 40.  Then I
compiled and started Emacs and found that the lines of *scratch* buffer
wrapped at 39th column (and the 40th column being the continuation
glyph).

> because no one said that the clipping happens on the margin

It may happen.

> (and most
> windows don't have margins anyway).

Really?  It seems that line numbers are also unaffected by that
last_visible_x.

>
>> I have another idea, we can make the glyph matrix memory larger than the
>> top-level (i.e. not a child) frame:
>> 
>> --8<---------------cut here---------------start------------->8---
>> +--------------------------------------+
>> |+------------------------------------+|
>> ||                                    ||<<< glyph matrix memory
>> ||<<< frame glyph matrix              ||
>> ||                                    ||
>> ||                                    ||
>> ||                                    ||
>> ||    +-----------------------------+ ||
>> ||    |<<< child frame glyph matrix | ||
>> ||    |                             | ||
>> |+----|.............................|-+|
>> |     |                             |  |
>> |     +-----------------------------+  |
>> +--------------------------------------+
>> --8<---------------cut here---------------end--------------->8---
>> 
>> According to the figure above, rendering glyphs for part of child frame
>> outside the top-level frame's edges won't cause any error because it
>> will write to allocated memory, but still those glyph won't appear on
>> the glass because they are outside the glyph matrix of the top-level
>> frame.
>
> Why produce glyphs that will never get written to the glass?  It's
> just a waste of cycles.  And it isn't for free: we'd need to have code
> that checks whether a glyph should or shouldn't be written to the
> screen, because writing it outside of the terminal could have bad
> effects.

IIUC, we won't need additional code.  Because those garbage glyphs are
outside of the frame's glyph matrix, so the terminal display code won't
notice them at all.

I think we are all trying to do premature optimization.  Do we bother
whether a character is clipped on X?  AFAIK no, and that's more costly
than doing the same on terminal.  I think we should first make it work
and then talk about optimizations, that's better than rejecting all the
proposed ideas claiming they are inefficient.

Or is there any real reason to optimize?

>
>> Do you have a list of functions that directly writes to glyph matrix?
>> It is much easier to work with function than to work with dynamic
>> memory.
>
> They are too many, but you can start from the PRODUCE_GLYPHS macro.

Thanks.

-- 
Akib Azmain Turja

This message is signed by me with my GnuPG key.  It's fingerprint is:

    7001 8CE5 819F 17A3 BBA6  66AF E74F 0EFA 922A E7F5

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-13 17:55                           ` Akib Azmain Turja
@ 2022-07-13 18:11                             ` Eli Zaretskii
  2022-07-14  7:14                               ` Akib Azmain Turja
  0 siblings, 1 reply; 64+ messages in thread
From: Eli Zaretskii @ 2022-07-13 18:11 UTC (permalink / raw)
  To: Akib Azmain Turja; +Cc: luangruo, monnier, emacs-devel, ibluefocus

> From: Akib Azmain Turja <akib@disroot.org>
> Cc: luangruo@yahoo.com, monnier@iro.umontreal.ca, emacs-devel@gnu.org,
>  ibluefocus@outlook.com
> Date: Wed, 13 Jul 2022 23:55:09 +0600
> 
> > You mean, the display margins?  If that is the problem that bothers
> > you, then yes, the functions in dispnew.c that calculate the
> > dimensions of each window will have to take the clipping into account.
> > And again, this calculation happens just once, in the beginning of a
> > redisplay cycle, and only if needed (i.e. only when the previously
> > calculated dimensions no longer fit).
> >
> > But last_visible_x will still need to be adjusted as I outlined,
> 
> I don't think so.  I tried to hard-code last_visible_x to 40.  Then I
> compiled and started Emacs and found that the lines of *scratch* buffer
> wrapped at 39th column (and the 40th column being the continuation
> glyph).

Right.  You just discovered that setting last_visible_x is not the
only thing that should be done.  But I never said it's the only thing,
just that it is _one_ thing that needs to be done.  Changing the code
which produces the continuation/truncation glyphs to support child
frames is not hard, but it does need some coding.  And there really is
no way around that, because that's how Emacs display works.

Remember: this all came out of discussions about the design of child
frames on TTY displays, where you expressed doubt that we could easily
"clip" child frames where needed.  But that basic design is just the
beginning; there's more to this than meets the eye.

> It seems that line numbers are also unaffected by that
> last_visible_x.

Yes, they are.  From maybe_produce_line_number:

  /* We must leave space for 2 glyphs for continuation and truncation,
     and at least one glyph for buffer text.  */
  int width_limit =
    tem_it.last_visible_x - tem_it.first_visible_x
    - 3 * FRAME_COLUMN_WIDTH (it->f);
  [...]
      PRODUCE_GLYPHS (&tem_it);

      /* Stop producing glyphs, and refrain from producing the line
	 number, if we don't have enough space on this line.  */
      if (tem_it.current_x >= width_limit)
	{
	  it->lnum_width = 0;
	  it->lnum_pixel_width = 0;
	  bidi_unshelve_cache (itdata, false);
	  inhibit_free_realized_faces = save_free_realized_faces;
	  return;
	}

> > Why produce glyphs that will never get written to the glass?  It's
> > just a waste of cycles.  And it isn't for free: we'd need to have code
> > that checks whether a glyph should or shouldn't be written to the
> > screen, because writing it outside of the terminal could have bad
> > effects.
> 
> IIUC, we won't need additional code.  Because those garbage glyphs are
> outside of the frame's glyph matrix, so the terminal display code won't
> notice them at all.
> 
> I think we are all trying to do premature optimization.  Do we bother
> whether a character is clipped on X?

On X, the clipping is a given.  But on text-mode terminal there's no
clipping: if you write one character too many on a line, it will
generally wrap to the next line.

> Or is there any real reason to optimize?

It isn't an optimization, it's safe coding.



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-12 14:17                     ` Eli Zaretskii
@ 2022-07-14  1:27                       ` Po Lu
  2022-07-14  1:55                       ` Stefan Monnier
  1 sibling, 0 replies; 64+ messages in thread
From: Po Lu @ 2022-07-14  1:27 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: akib, monnier, emacs-devel, ibluefocus

Eli Zaretskii <eliz@gnu.org> writes:

> Why would they want that?

I don't know.  It's an idea I saw floating around in a forum.



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-12 14:17                     ` Eli Zaretskii
  2022-07-14  1:27                       ` Po Lu
@ 2022-07-14  1:55                       ` Stefan Monnier
  2022-07-14  3:34                         ` Po Lu
  2022-07-14  5:56                         ` Eli Zaretskii
  1 sibling, 2 replies; 64+ messages in thread
From: Stefan Monnier @ 2022-07-14  1:55 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Po Lu, akib, emacs-devel, ibluefocus

>> Someone might want a popup implemented as a child frame to extend past
>> the bounds of the parent, for example.
> Why would they want that?

I can imagine a situation where a tty frame is split into two windows
and some company/corfu-style completion wants to popup a child-frame to
show completion candidates (basically like a menu), and if the
completion is near the split between the two windows, it would be
natural for that child-frame to extend into the other window if that can
make its contents more readable.  It would even feel odd if that
child-window were restricted to fit within its "parent" window.

In a sense it's already bad enough that such child-frames will be
restricted to stay within the confines of the text terminal ;-)

BTW We currently see "the same" with your menubar code in ttys, where the
menus aren't restricted to live within one of the existing windows
either, instead they're overlayed above the windows without regards for
the existing window splits.


        Stefan




^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-14  1:55                       ` Stefan Monnier
@ 2022-07-14  3:34                         ` Po Lu
  2022-07-14 14:00                           ` Stefan Monnier
  2022-07-14  5:56                         ` Eli Zaretskii
  1 sibling, 1 reply; 64+ messages in thread
From: Po Lu @ 2022-07-14  3:34 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Eli Zaretskii, akib, emacs-devel, ibluefocus

Stefan Monnier <monnier@iro.umontreal.ca> writes:

> I can imagine a situation where a tty frame is split into two windows
> and some company/corfu-style completion wants to popup a child-frame to
> show completion candidates (basically like a menu), and if the
> completion is near the split between the two windows, it would be
> natural for that child-frame to extend into the other window if that can
> make its contents more readable.  It would even feel odd if that
> child-window were restricted to fit within its "parent" window.

But we're talking about frames that are children of other _frames_, not
windows, right?



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-14  1:55                       ` Stefan Monnier
  2022-07-14  3:34                         ` Po Lu
@ 2022-07-14  5:56                         ` Eli Zaretskii
  2022-07-14  6:29                           ` Po Lu
                                             ` (2 more replies)
  1 sibling, 3 replies; 64+ messages in thread
From: Eli Zaretskii @ 2022-07-14  5:56 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: luangruo, akib, emacs-devel, ibluefocus

> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Cc: Po Lu <luangruo@yahoo.com>,  akib@disroot.org,  emacs-devel@gnu.org,
>   ibluefocus@outlook.com
> Date: Wed, 13 Jul 2022 21:55:16 -0400
> 
> >> Someone might want a popup implemented as a child frame to extend past
> >> the bounds of the parent, for example.
> > Why would they want that?
> 
> I can imagine a situation where a tty frame is split into two windows
> and some company/corfu-style completion wants to popup a child-frame to
> show completion candidates (basically like a menu), and if the
> completion is near the split between the two windows, it would be
> natural for that child-frame to extend into the other window if that can
> make its contents more readable.  It would even feel odd if that
> child-window were restricted to fit within its "parent" window.

Such popups must be limited in their height anyway, so I see no
problem in limiting them to their parent frame.

(I also don't think child frames are the right basis for implementing
such popups: they will look ugly.  Emacs frames are not suited for
emulating GUI dialog widgets.)

> BTW We currently see "the same" with your menubar code in ttys, where the
> menus aren't restricted to live within one of the existing windows
> either, instead they're overlayed above the windows without regards for
> the existing window splits.

But they never cross the frame's border, which is what this discussion
is about.  More importantly, I very much doubt that we'd want the
child frames on TTYs to have the same limitations as TTY menus must
abide by.



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-14  5:56                         ` Eli Zaretskii
@ 2022-07-14  6:29                           ` Po Lu
  2022-07-14  6:53                           ` Akib Azmain Turja
  2022-07-14 14:03                           ` Stefan Monnier
  2 siblings, 0 replies; 64+ messages in thread
From: Po Lu @ 2022-07-14  6:29 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Stefan Monnier, akib, emacs-devel, ibluefocus

Eli Zaretskii <eliz@gnu.org> writes:

> (I also don't think child frames are the right basis for implementing
> such popups: they will look ugly.  Emacs frames are not suited for
> emulating GUI dialog widgets.)

I agree with that, but unfortunately child frames are already being
widely used for implementing popups.



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-14  5:56                         ` Eli Zaretskii
  2022-07-14  6:29                           ` Po Lu
@ 2022-07-14  6:53                           ` Akib Azmain Turja
  2022-07-14  7:20                             ` Eli Zaretskii
  2022-07-14  7:25                             ` Po Lu
  2022-07-14 14:03                           ` Stefan Monnier
  2 siblings, 2 replies; 64+ messages in thread
From: Akib Azmain Turja @ 2022-07-14  6:53 UTC (permalink / raw)
  To: Eli Zaretskii, Stefan Monnier; +Cc: luangruo, emacs-devel, ibluefocus

[-- Attachment #1: Type: text/plain, Size: 1944 bytes --]

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Stefan Monnier <monnier@iro.umontreal.ca>
>> Cc: Po Lu <luangruo@yahoo.com>,  akib@disroot.org,  emacs-devel@gnu.org,
>>   ibluefocus@outlook.com
>> Date: Wed, 13 Jul 2022 21:55:16 -0400
>> 
>> >> Someone might want a popup implemented as a child frame to extend past
>> >> the bounds of the parent, for example.
>> > Why would they want that?
>> 
>> I can imagine a situation where a tty frame is split into two windows
>> and some company/corfu-style completion wants to popup a child-frame to
>> show completion candidates (basically like a menu), and if the
>> completion is near the split between the two windows, it would be
>> natural for that child-frame to extend into the other window if that can
>> make its contents more readable.  It would even feel odd if that
>> child-window were restricted to fit within its "parent" window.
>
> Such popups must be limited in their height anyway, so I see no
> problem in limiting them to their parent frame.
>
> (I also don't think child frames are the right basis for implementing
> such popups: they will look ugly.  Emacs frames are not suited for
> emulating GUI dialog widgets.)

What?  Completion popup is a misuse of child frame?  Then what its
supposed to do?

>
>> BTW We currently see "the same" with your menubar code in ttys, where the
>> menus aren't restricted to live within one of the existing windows
>> either, instead they're overlayed above the windows without regards for
>> the existing window splits.
>
> But they never cross the frame's border, which is what this discussion
> is about.  More importantly, I very much doubt that we'd want the
> child frames on TTYs to have the same limitations as TTY menus must
> abide by.

-- 
Akib Azmain Turja

This message is signed by me with my GnuPG key.  It's fingerprint is:

    7001 8CE5 819F 17A3 BBA6  66AF E74F 0EFA 922A E7F5

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-13 18:11                             ` Eli Zaretskii
@ 2022-07-14  7:14                               ` Akib Azmain Turja
  2022-07-14  7:27                                 ` Eli Zaretskii
  0 siblings, 1 reply; 64+ messages in thread
From: Akib Azmain Turja @ 2022-07-14  7:14 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: luangruo, monnier, emacs-devel, ibluefocus

[-- Attachment #1: Type: text/plain, Size: 4105 bytes --]

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Akib Azmain Turja <akib@disroot.org>
>> Cc: luangruo@yahoo.com, monnier@iro.umontreal.ca, emacs-devel@gnu.org,
>>  ibluefocus@outlook.com
>> Date: Wed, 13 Jul 2022 23:55:09 +0600
>> 
>> > You mean, the display margins?  If that is the problem that bothers
>> > you, then yes, the functions in dispnew.c that calculate the
>> > dimensions of each window will have to take the clipping into account.
>> > And again, this calculation happens just once, in the beginning of a
>> > redisplay cycle, and only if needed (i.e. only when the previously
>> > calculated dimensions no longer fit).
>> >
>> > But last_visible_x will still need to be adjusted as I outlined,
>> 
>> I don't think so.  I tried to hard-code last_visible_x to 40.  Then I
>> compiled and started Emacs and found that the lines of *scratch* buffer
>> wrapped at 39th column (and the 40th column being the continuation
>> glyph).
>
> Right.  You just discovered that setting last_visible_x is not the
> only thing that should be done.  But I never said it's the only thing,
> just that it is _one_ thing that needs to be done.  Changing the code
> which produces the continuation/truncation glyphs to support child
> frames is not hard, but it does need some coding.  And there really is
> no way around that, because that's how Emacs display works.
>
> Remember: this all came out of discussions about the design of child
> frames on TTY displays, where you expressed doubt that we could easily
> "clip" child frames where needed.  But that basic design is just the
> beginning; there's more to this than meets the eye.
>
>> It seems that line numbers are also unaffected by that
>> last_visible_x.
>
> Yes, they are.  From maybe_produce_line_number:
>
>   /* We must leave space for 2 glyphs for continuation and truncation,
>      and at least one glyph for buffer text.  */
>   int width_limit =
>     tem_it.last_visible_x - tem_it.first_visible_x
>     - 3 * FRAME_COLUMN_WIDTH (it->f);
>   [...]
>       PRODUCE_GLYPHS (&tem_it);
>
>       /* Stop producing glyphs, and refrain from producing the line
> 	 number, if we don't have enough space on this line.  */
>       if (tem_it.current_x >= width_limit)
> 	{
> 	  it->lnum_width = 0;
> 	  it->lnum_pixel_width = 0;
> 	  bidi_unshelve_cache (itdata, false);
> 	  inhibit_free_realized_faces = save_free_realized_faces;
> 	  return;
> 	}
>
>> > Why produce glyphs that will never get written to the glass?  It's
>> > just a waste of cycles.  And it isn't for free: we'd need to have code
>> > that checks whether a glyph should or shouldn't be written to the
>> > screen, because writing it outside of the terminal could have bad
>> > effects.
>> 
>> IIUC, we won't need additional code.  Because those garbage glyphs are
>> outside of the frame's glyph matrix, so the terminal display code won't
>> notice them at all.
>> 
>> I think we are all trying to do premature optimization.  Do we bother
>> whether a character is clipped on X?
>
> On X, the clipping is a given.  But on text-mode terminal there's no
> clipping: if you write one character too many on a line, it will
> generally wrap to the next line.

There is definitely a misunderstanding here.  Nothing is going to write
outside of the terminal, because the size of the top-level frame's
matrix is the same as the size of the terminal.

My idea is that we write the glyphs to the glyph matrix anyway, and then
decide which glyphs to show on the glass later.

>
>> Or is there any real reason to optimize?
>
> It isn't an optimization, it's safe coding.

You misunderstood my question.  I meant: is there any real reason to
share the glyph memory of the parent and the child frame?  We can just
copy the visible part of child frame matrix to parent frame matrix,
which IMHO won't cause any noticeable slowdown compared to X.

-- 
Akib Azmain Turja

This message is signed by me with my GnuPG key.  It's fingerprint is:

    7001 8CE5 819F 17A3 BBA6  66AF E74F 0EFA 922A E7F5

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-14  6:53                           ` Akib Azmain Turja
@ 2022-07-14  7:20                             ` Eli Zaretskii
  2022-07-14 12:07                               ` Akib Azmain Turja
  2022-07-14  7:25                             ` Po Lu
  1 sibling, 1 reply; 64+ messages in thread
From: Eli Zaretskii @ 2022-07-14  7:20 UTC (permalink / raw)
  To: Akib Azmain Turja; +Cc: monnier, luangruo, emacs-devel, ibluefocus

> From: Akib Azmain Turja <akib@disroot.org>
> Cc: luangruo@yahoo.com, emacs-devel@gnu.org, ibluefocus@outlook.com
> Date: Thu, 14 Jul 2022 12:53:32 +0600
> 
> > (I also don't think child frames are the right basis for implementing
> > such popups: they will look ugly.  Emacs frames are not suited for
> > emulating GUI dialog widgets.)
> 
> What?  Completion popup is a misuse of child frame?  Then what its
> supposed to do?

What is "it" in this case?



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-14  6:53                           ` Akib Azmain Turja
  2022-07-14  7:20                             ` Eli Zaretskii
@ 2022-07-14  7:25                             ` Po Lu
  2022-07-14 12:11                               ` Akib Azmain Turja
  2022-07-14 19:33                               ` Tassilo Horn
  1 sibling, 2 replies; 64+ messages in thread
From: Po Lu @ 2022-07-14  7:25 UTC (permalink / raw)
  To: Akib Azmain Turja; +Cc: Eli Zaretskii, Stefan Monnier, emacs-devel, ibluefocus

Akib Azmain Turja <akib@disroot.org> writes:

> What?  Completion popup is a misuse of child frame?  Then what its
> supposed to do?

IMNSHO child frame support (on X) is actually a misfeature, and
completions should be implemented with an override-redirect toplevel
window instead.

The reasoning behind this conclusion is the sheer amount of code we
spend trying to force toolkits (GTK in particular, but also Xt) and the
X server (in the case of the X input extension) to play nice with
supposedly "toplevel" windows being a child of an actual toplevel
window.



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-14  7:14                               ` Akib Azmain Turja
@ 2022-07-14  7:27                                 ` Eli Zaretskii
  0 siblings, 0 replies; 64+ messages in thread
From: Eli Zaretskii @ 2022-07-14  7:27 UTC (permalink / raw)
  To: Akib Azmain Turja; +Cc: luangruo, monnier, emacs-devel, ibluefocus

> From: Akib Azmain Turja <akib@disroot.org>
> Cc: luangruo@yahoo.com, monnier@iro.umontreal.ca, emacs-devel@gnu.org,
>  ibluefocus@outlook.com
> Date: Thu, 14 Jul 2022 13:14:18 +0600
> 
> You misunderstood my question.  I meant: is there any real reason to
> share the glyph memory of the parent and the child frame?

Yes: the last stage of TTY redisplay uses only the frame glyph matrix,
it doesn't use glyph matrices of the windows.  For child frames, this
translates into using only the frame matrix of the topmost frame.  (As
I proposed at the beginning of this discussion, I would not even
maintain frame matrices for child frames, only window matrices.)

> We can just copy the visible part of child frame matrix to parent
> frame matrix, which IMHO won't cause any noticeable slowdown
> compared to X.

As I explained earlier, I don't understand why would we want to incur
this slowdown, however unnoticeable.  Unlike on GUI displays, TTYs
have a fixed number and positions of character cells, and not to use
this fact sounds silly to me, especially since the existing code
already does that.



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-14  7:20                             ` Eli Zaretskii
@ 2022-07-14 12:07                               ` Akib Azmain Turja
  2022-07-14 13:12                                 ` Eli Zaretskii
  0 siblings, 1 reply; 64+ messages in thread
From: Akib Azmain Turja @ 2022-07-14 12:07 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: monnier, luangruo, emacs-devel, ibluefocus

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Akib Azmain Turja <akib@disroot.org>
>> Cc: luangruo@yahoo.com, emacs-devel@gnu.org, ibluefocus@outlook.com
>> Date: Thu, 14 Jul 2022 12:53:32 +0600
>> 
>> > (I also don't think child frames are the right basis for implementing
>> > such popups: they will look ugly.  Emacs frames are not suited for
>> > emulating GUI dialog widgets.)
>> 
>> What?  Completion popup is a misuse of child frame?  Then what its
>> supposed to do?
>
> What is "it" in this case?
>

Child frame.  What child frame is supposed to do?
<#secure method=pgpmime mode=sign>

-- 
Akib Azmain Turja

Find me on Mastodon at @akib@hostux.social.

This message is signed by me with my GnuPG key.  It's fingerprint is:

    7001 8CE5 819F 17A3 BBA6  66AF E74F 0EFA 922A E7F5



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-14  7:25                             ` Po Lu
@ 2022-07-14 12:11                               ` Akib Azmain Turja
  2022-07-14 19:33                               ` Tassilo Horn
  1 sibling, 0 replies; 64+ messages in thread
From: Akib Azmain Turja @ 2022-07-14 12:11 UTC (permalink / raw)
  To: Po Lu; +Cc: Eli Zaretskii, Stefan Monnier, emacs-devel, ibluefocus

Po Lu <luangruo@yahoo.com> writes:

> Akib Azmain Turja <akib@disroot.org> writes:
>
>> What?  Completion popup is a misuse of child frame?  Then what its
>> supposed to do?
>
> IMNSHO child frame support (on X) is actually a misfeature, and
> completions should be implemented with an override-redirect toplevel
> window instead.

"override-redirect toplevel window"?  I can't understand.

>
> The reasoning behind this conclusion is the sheer amount of code we
> spend trying to force toolkits (GTK in particular, but also Xt) and the
> X server (in the case of the X input extension) to play nice with
> supposedly "toplevel" windows being a child of an actual toplevel
> window.
<#secure method=pgpmime mode=sign>

-- 
Akib Azmain Turja

Find me on Mastodon at @akib@hostux.social.

This message is signed by me with my GnuPG key.  It's fingerprint is:

    7001 8CE5 819F 17A3 BBA6  66AF E74F 0EFA 922A E7F5



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-14 12:07                               ` Akib Azmain Turja
@ 2022-07-14 13:12                                 ` Eli Zaretskii
  2022-07-14 13:52                                   ` Akib Azmain Turja
  0 siblings, 1 reply; 64+ messages in thread
From: Eli Zaretskii @ 2022-07-14 13:12 UTC (permalink / raw)
  To: Akib Azmain Turja; +Cc: monnier, luangruo, emacs-devel, ibluefocus

> From: Akib Azmain Turja <akib@disroot.org>
> Cc: monnier@iro.umontreal.ca,  luangruo@yahoo.com,  emacs-devel@gnu.org,
>   ibluefocus@outlook.com
> Date: Thu, 14 Jul 2022 18:07:34 +0600
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> >> From: Akib Azmain Turja <akib@disroot.org>
> >> Cc: luangruo@yahoo.com, emacs-devel@gnu.org, ibluefocus@outlook.com
> >> Date: Thu, 14 Jul 2022 12:53:32 +0600
> >> 
> >> > (I also don't think child frames are the right basis for implementing
> >> > such popups: they will look ugly.  Emacs frames are not suited for
> >> > emulating GUI dialog widgets.)
> >> 
> >> What?  Completion popup is a misuse of child frame?  Then what its
> >> supposed to do?
> >
> > What is "it" in this case?
> >
> 
> Child frame.  What child frame is supposed to do?

Then I don't understand the question.  The obvious answer is "display
a child frame", but somehow I don't think this is the answer you were
waiting for.



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-14 13:12                                 ` Eli Zaretskii
@ 2022-07-14 13:52                                   ` Akib Azmain Turja
  2022-07-14 14:00                                     ` Eli Zaretskii
  2022-07-15  2:37                                     ` Po Lu
  0 siblings, 2 replies; 64+ messages in thread
From: Akib Azmain Turja @ 2022-07-14 13:52 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: monnier, luangruo, emacs-devel, ibluefocus

[-- Attachment #1: Type: text/plain, Size: 535 bytes --]

Eli Zaretskii <eliz@gnu.org> writes:

>> Child frame.  What child frame is supposed to do?
>
> Then I don't understand the question.  The obvious answer is "display
> a child frame", but somehow I don't think this is the answer you were
> waiting for.
>

I intended to ask:  What is the intended use-case of child frame?

-- 
Akib Azmain Turja

Find me on Mastodon at @akib@hostux.social.

This message is signed by me with my GnuPG key.  It's fingerprint is:

    7001 8CE5 819F 17A3 BBA6  66AF E74F 0EFA 922A E7F5

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-14  3:34                         ` Po Lu
@ 2022-07-14 14:00                           ` Stefan Monnier
  0 siblings, 0 replies; 64+ messages in thread
From: Stefan Monnier @ 2022-07-14 14:00 UTC (permalink / raw)
  To: Po Lu; +Cc: Eli Zaretskii, akib, emacs-devel, ibluefocus

Po Lu [2022-07-14 11:34:53] wrote:
> Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> I can imagine a situation where a tty frame is split into two windows
>> and some company/corfu-style completion wants to popup a child-frame to
>> show completion candidates (basically like a menu), and if the
>> completion is near the split between the two windows, it would be
>> natural for that child-frame to extend into the other window if that can
>> make its contents more readable.  It would even feel odd if that
>> child-window were restricted to fit within its "parent" window.
>
> But we're talking about frames that are children of other _frames_, not
> windows, right?

Ah, you're right.  Sorry 'bout the noise.


        Stefan




^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-14 13:52                                   ` Akib Azmain Turja
@ 2022-07-14 14:00                                     ` Eli Zaretskii
  2022-07-15  2:37                                     ` Po Lu
  1 sibling, 0 replies; 64+ messages in thread
From: Eli Zaretskii @ 2022-07-14 14:00 UTC (permalink / raw)
  To: Akib Azmain Turja; +Cc: monnier, luangruo, emacs-devel, ibluefocus

> From: Akib Azmain Turja <akib@disroot.org>
> Cc: monnier@iro.umontreal.ca,  luangruo@yahoo.com,  emacs-devel@gnu.org,
>   ibluefocus@outlook.com
> Date: Thu, 14 Jul 2022 19:52:28 +0600
> 
> >> Child frame.  What child frame is supposed to do?
> >
> > Then I don't understand the question.  The obvious answer is "display
> > a child frame", but somehow I don't think this is the answer you were
> > waiting for.
> >
> 
> I intended to ask:  What is the intended use-case of child frame?

I don't know.



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-14  5:56                         ` Eli Zaretskii
  2022-07-14  6:29                           ` Po Lu
  2022-07-14  6:53                           ` Akib Azmain Turja
@ 2022-07-14 14:03                           ` Stefan Monnier
  2022-07-15 10:28                             ` Akib Azmain Turja
  2 siblings, 1 reply; 64+ messages in thread
From: Stefan Monnier @ 2022-07-14 14:03 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: luangruo, akib, emacs-devel, ibluefocus

> (I also don't think child frames are the right basis for implementing
> such popups: they will look ugly.  Emacs frames are not suited for
> emulating GUI dialog widgets.)

AFAIK that's the main use of child frames, tho, and the main motivation
for implementing child frames in ttys (to replace things like `popon.el`).


        Stefan




^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-14  7:25                             ` Po Lu
  2022-07-14 12:11                               ` Akib Azmain Turja
@ 2022-07-14 19:33                               ` Tassilo Horn
  1 sibling, 0 replies; 64+ messages in thread
From: Tassilo Horn @ 2022-07-14 19:33 UTC (permalink / raw)
  To: Po Lu
  Cc: Akib Azmain Turja, Eli Zaretskii, Stefan Monnier, ibluefocus,
	emacs-devel

Po Lu <luangruo@yahoo.com> writes:

>> What?  Completion popup is a misuse of child frame?  Then what its
>> supposed to do?
>
> IMNSHO child frame support (on X) is actually a misfeature, and
> completions should be implemented with an override-redirect toplevel
> window instead.
>
> The reasoning behind this conclusion is the sheer amount of code we
> spend trying to force toolkits (GTK in particular, but also Xt) and
> the X server (in the case of the X input extension) to play nice with
> supposedly "toplevel" windows being a child of an actual toplevel
> window.

Interesting.  What would the child-frame using programmer loose when
switching to override-redirect toplevel windows?  I guess their position
would be absolute instead of relative to the (then not existent) parent
frame and they wouldn't reposition themselves when the parent moves.
The first issue could be amended with functions computing positions
relative to some given frame and the second isn't too big of a deal.

Bye,
Tassilo



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-14 13:52                                   ` Akib Azmain Turja
  2022-07-14 14:00                                     ` Eli Zaretskii
@ 2022-07-15  2:37                                     ` Po Lu
  2022-07-15  3:35                                       ` Stefan Monnier
  1 sibling, 1 reply; 64+ messages in thread
From: Po Lu @ 2022-07-15  2:37 UTC (permalink / raw)
  To: Akib Azmain Turja; +Cc: Eli Zaretskii, monnier, emacs-devel, ibluefocus

Akib Azmain Turja <akib@disroot.org> writes:

> I intended to ask:  What is the intended use-case of child frame?

I think it's displaying multiple frames in a single frame, thereby
making the parent frame a "virtual root window" containing smaller
toplevel windows (that contain buffers), which is a GUI pattern seen in
many other programs.



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-15  2:37                                     ` Po Lu
@ 2022-07-15  3:35                                       ` Stefan Monnier
  2022-07-15  4:24                                         ` Po Lu
  0 siblings, 1 reply; 64+ messages in thread
From: Stefan Monnier @ 2022-07-15  3:35 UTC (permalink / raw)
  To: Po Lu; +Cc: Akib Azmain Turja, Eli Zaretskii, emacs-devel, ibluefocus

Po Lu [2022-07-15 10:37:39] wrote:
> Akib Azmain Turja <akib@disroot.org> writes:
>> I intended to ask:  What is the intended use-case of child frame?
> I think it's displaying multiple frames in a single frame, thereby
> making the parent frame a "virtual root window" containing smaller
> toplevel windows (that contain buffers), which is a GUI pattern seen in
> many other programs.

That describes what it does rather than what it's use for.


        Stefan




^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-15  3:35                                       ` Stefan Monnier
@ 2022-07-15  4:24                                         ` Po Lu
  2022-07-15  5:07                                           ` tomas
  0 siblings, 1 reply; 64+ messages in thread
From: Po Lu @ 2022-07-15  4:24 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Akib Azmain Turja, Eli Zaretskii, emacs-devel, ibluefocus

Stefan Monnier <monnier@iro.umontreal.ca> writes:

> That describes what it does rather than what it's use for.

No, Emacs has a built in (but rather crude) window manager for those
child frames: see the `drag-internal-border', `drag-with-header-line'
and `drag-with-mode-line' frame parameters.



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-15  4:24                                         ` Po Lu
@ 2022-07-15  5:07                                           ` tomas
  0 siblings, 0 replies; 64+ messages in thread
From: tomas @ 2022-07-15  5:07 UTC (permalink / raw)
  To: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 1345 bytes --]

On Fri, Jul 15, 2022 at 12:24:21PM +0800, Po Lu wrote:
> Stefan Monnier <monnier@iro.umontreal.ca> writes:
> 
> > That describes what it does rather than what it's use for.
> 
> No, Emacs has a built in (but rather crude) window manager for those
> child frames: see the `drag-internal-border', `drag-with-header-line'
> and `drag-with-mode-line' frame parameters.

I think we are seeing the debris of one of those strange "UI battles"
which raged our little software world for so long, stemming from such
perception things as "is the application the window? If yes, can that
window have a little world of its own inside itself?"

The end is a monster, where you get all of it: an application has more
than one window with lots of little windows in them. With the advent
of the browser, the snake starts eating itself again (with separate,
untrusted, potentially mutually hostile things hopefully confined to
their "tabs".

For a historical reminder, I'd recommend Wikipedia's description of
"MDI", the "Multiple-Document Interface" [1]. Fads come and go :-)

(Now you could say it's cruel calling it a fad. It was an experiment
in UI design, and as such, legitimate. It became a fad as soon as
the Marketing Dept. entered the picture)

Cheers

[1] https://en.wikipedia.org/wiki/Multiple-document_interface
-- 
t

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: Implementing child frames on terminal
  2022-07-14 14:03                           ` Stefan Monnier
@ 2022-07-15 10:28                             ` Akib Azmain Turja
  0 siblings, 0 replies; 64+ messages in thread
From: Akib Azmain Turja @ 2022-07-15 10:28 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Eli Zaretskii, luangruo, emacs-devel, ibluefocus

Stefan Monnier <monnier@iro.umontreal.ca> writes:

>> (I also don't think child frames are the right basis for implementing
>> such popups: they will look ugly.  Emacs frames are not suited for
>> emulating GUI dialog widgets.)
>
> AFAIK that's the main use of child frames, tho, and the main motivation
> for implementing child frames in ttys (to replace things like `popon.el`).
>
>
>         Stefan
>

Exactly.
<#secure method=pgpmime mode=sign>

-- 
Akib Azmain Turja

Find me on Mastodon at @akib@hostux.social.

This message is signed by me with my GnuPG key.  It's fingerprint is:

    7001 8CE5 819F 17A3 BBA6  66AF E74F 0EFA 922A E7F5



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal
  2022-05-29  8:14       ` Daniel Mendler
@ 2022-07-15 15:06         ` Akib Azmain Turja
  2022-07-17 14:53           ` Philip Kaludercic
  0 siblings, 1 reply; 64+ messages in thread
From: Akib Azmain Turja @ 2022-07-15 15:06 UTC (permalink / raw)
  To: Daniel Mendler; +Cc: Philip Kaludercic, Yuwei Tian, Yuwei Tian, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 1713 bytes --]

Daniel Mendler <mail@daniel-mendler.de> writes:

> On 5/28/22 22:31, Akib Azmain Turja wrote:
>> Philip Kaludercic <philipk@posteo.net> writes:
>> 
>>> Akib Azmain Turja <akib@disroot.org> writes:
>>>
>>>> Congratulations, Yuwei Tian.  Your copyright assignment is done.
>>>>
>>>> Now, Yuwei Tian and Daniel Mendler, do you want to add corfu-doc to
>>>> Corfu as an extension now?  If so, I think corfu-doc should be
>>>> published directly on ELPA as a part of Corfu instead of adding to
>>>> NonGNU ELPA for a few days.
>>>
>>> Do I misunderstand something, or why is adding corfu-doc to corfu (a GNU
>>> ELPA) package opposed to adding it as a separate package to NonGNU ELPA?
>> 
>> I don't know, its their (Yuwei Tian and Daniel Mendler) plan to do so.
>> See these (sorry for any nonfree JS):
>> 
>> https://github.com/minad/corfu/issues/103
>> https://github.com/galeo/corfu-doc/issues/8
>
> Yes, this will happen eventually if Yuwei is still interested. But there
> is no guarantee that this is going to happen soon or in a few days.
> Corfu-doc currently comes with its own child frame implementation.
> Instead it should make use of the Corfu implementation, which may need
> some refactoring such that it can be used also by corfu-doc. This is
> important to avoid unnecessary code duplication.
>
> Daniel

It looks like it would take much time to add corfu-doc to corfu.  In the
meanwhile, can we add corfu-doc in GNU ELPA and corfu-doc-terminal to
NonGNU ELPA?

-- 
Akib Azmain Turja

Find me on Mastodon at @akib@hostux.social.

This message is signed by me with my GnuPG key.  It's fingerprint is:

    7001 8CE5 819F 17A3 BBA6  66AF E74F 0EFA 922A E7F5

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal
  2022-07-15 15:06         ` Akib Azmain Turja
@ 2022-07-17 14:53           ` Philip Kaludercic
  2022-07-17 17:06             ` Akib Azmain Turja
  0 siblings, 1 reply; 64+ messages in thread
From: Philip Kaludercic @ 2022-07-17 14:53 UTC (permalink / raw)
  To: Akib Azmain Turja; +Cc: Daniel Mendler, Yuwei Tian, Yuwei Tian, emacs-devel

Akib Azmain Turja <akib@disroot.org> writes:

> Daniel Mendler <mail@daniel-mendler.de> writes:
>
>> On 5/28/22 22:31, Akib Azmain Turja wrote:
>>> Philip Kaludercic <philipk@posteo.net> writes:
>>> 
>>>> Akib Azmain Turja <akib@disroot.org> writes:
>>>>
>>>>> Congratulations, Yuwei Tian.  Your copyright assignment is done.
>>>>>
>>>>> Now, Yuwei Tian and Daniel Mendler, do you want to add corfu-doc to
>>>>> Corfu as an extension now?  If so, I think corfu-doc should be
>>>>> published directly on ELPA as a part of Corfu instead of adding to
>>>>> NonGNU ELPA for a few days.
>>>>
>>>> Do I misunderstand something, or why is adding corfu-doc to corfu (a GNU
>>>> ELPA) package opposed to adding it as a separate package to NonGNU ELPA?
>>> 
>>> I don't know, its their (Yuwei Tian and Daniel Mendler) plan to do so.
>>> See these (sorry for any nonfree JS):
>>> 
>>> https://github.com/minad/corfu/issues/103
>>> https://github.com/galeo/corfu-doc/issues/8
>>
>> Yes, this will happen eventually if Yuwei is still interested. But there
>> is no guarantee that this is going to happen soon or in a few days.
>> Corfu-doc currently comes with its own child frame implementation.
>> Instead it should make use of the Corfu implementation, which may need
>> some refactoring such that it can be used also by corfu-doc. This is
>> important to avoid unnecessary code duplication.
>>
>> Daniel
>
> It looks like it would take much time to add corfu-doc to corfu.  In the
> meanwhile, can we add corfu-doc in GNU ELPA and corfu-doc-terminal to
> NonGNU ELPA?

There seems to be no opposition to this idea, I'd just appreciate a
reminder of who has signed the CA and the URLs to the current
repositories (I cannot seem to find everything in my MUA's history).



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal
  2022-07-17 14:53           ` Philip Kaludercic
@ 2022-07-17 17:06             ` Akib Azmain Turja
  2022-07-17 18:27               ` Philip Kaludercic
  2022-07-17 19:08               ` Stefan Monnier
  0 siblings, 2 replies; 64+ messages in thread
From: Akib Azmain Turja @ 2022-07-17 17:06 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: Daniel Mendler, Yuwei Tian, Yuwei Tian, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 2213 bytes --]

Philip Kaludercic <philipk@posteo.net> writes:

> Akib Azmain Turja <akib@disroot.org> writes:
>
>> Daniel Mendler <mail@daniel-mendler.de> writes:
>>
>>> On 5/28/22 22:31, Akib Azmain Turja wrote:
>>>> Philip Kaludercic <philipk@posteo.net> writes:
>>>> 
>>>>> Akib Azmain Turja <akib@disroot.org> writes:
>>>>>
>>>>>> Congratulations, Yuwei Tian.  Your copyright assignment is done.
>>>>>>
>>>>>> Now, Yuwei Tian and Daniel Mendler, do you want to add corfu-doc to
>>>>>> Corfu as an extension now?  If so, I think corfu-doc should be
>>>>>> published directly on ELPA as a part of Corfu instead of adding to
>>>>>> NonGNU ELPA for a few days.
>>>>>
>>>>> Do I misunderstand something, or why is adding corfu-doc to corfu (a GNU
>>>>> ELPA) package opposed to adding it as a separate package to NonGNU ELPA?
>>>> 
>>>> I don't know, its their (Yuwei Tian and Daniel Mendler) plan to do so.
>>>> See these (sorry for any nonfree JS):
>>>> 
>>>> https://github.com/minad/corfu/issues/103
>>>> https://github.com/galeo/corfu-doc/issues/8
>>>
>>> Yes, this will happen eventually if Yuwei is still interested. But there
>>> is no guarantee that this is going to happen soon or in a few days.
>>> Corfu-doc currently comes with its own child frame implementation.
>>> Instead it should make use of the Corfu implementation, which may need
>>> some refactoring such that it can be used also by corfu-doc. This is
>>> important to avoid unnecessary code duplication.
>>>
>>> Daniel
>>
>> It looks like it would take much time to add corfu-doc to corfu.  In the
>> meanwhile, can we add corfu-doc in GNU ELPA and corfu-doc-terminal to
>> NonGNU ELPA?
>
> There seems to be no opposition to this idea, I'd just appreciate a
> reminder of who has signed the CA and the URLs to the current
> repositories (I cannot seem to find everything in my MUA's history).

Did you want these?

  Author: Yuwei Tian (MELPA says so)
  Repository: https://github.com/galeo/corfu-doc/

-- 
Akib Azmain Turja

Find me on Mastodon at @akib@hostux.social.

This message is signed by me with my GnuPG key.  It's fingerprint is:

    7001 8CE5 819F 17A3 BBA6  66AF E74F 0EFA 922A E7F5

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal
  2022-07-17 17:06             ` Akib Azmain Turja
@ 2022-07-17 18:27               ` Philip Kaludercic
  2022-07-18  9:27                 ` Akib Azmain Turja
  2022-07-17 19:08               ` Stefan Monnier
  1 sibling, 1 reply; 64+ messages in thread
From: Philip Kaludercic @ 2022-07-17 18:27 UTC (permalink / raw)
  To: Akib Azmain Turja; +Cc: emacs-devel

Akib Azmain Turja <akib@disroot.org> writes:

> Philip Kaludercic <philipk@posteo.net> writes:
>
>> There seems to be no opposition to this idea, I'd just appreciate a
>> reminder of who has signed the CA and the URLs to the current
>> repositories (I cannot seem to find everything in my MUA's history).
>
> Did you want these?
>
>   Author: Yuwei Tian (MELPA says so)
>   Repository: https://github.com/galeo/corfu-doc/

Yes, and from what I understand the main repository for
corfu-doc-terminal is
https://codeberg.org/akib/emacs-corfu-doc-terminal, or is this just a
mirror?  You are the sole contributor, and haven't/can't sign the CA,
right?



^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal
  2022-07-17 17:06             ` Akib Azmain Turja
  2022-07-17 18:27               ` Philip Kaludercic
@ 2022-07-17 19:08               ` Stefan Monnier
  1 sibling, 0 replies; 64+ messages in thread
From: Stefan Monnier @ 2022-07-17 19:08 UTC (permalink / raw)
  To: Akib Azmain Turja
  Cc: Philip Kaludercic, Daniel Mendler, Yuwei Tian, Yuwei Tian,
	emacs-devel

>   Author: Yuwei Tian (MELPA says so)
>   Repository: https://github.com/galeo/corfu-doc/

FYI: I'm taking care of this one.


        Stefan




^ permalink raw reply	[flat|nested] 64+ messages in thread

* Re: [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal
  2022-07-17 18:27               ` Philip Kaludercic
@ 2022-07-18  9:27                 ` Akib Azmain Turja
  0 siblings, 0 replies; 64+ messages in thread
From: Akib Azmain Turja @ 2022-07-18  9:27 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 1025 bytes --]

Philip Kaludercic <philipk@posteo.net> writes:

> Akib Azmain Turja <akib@disroot.org> writes:
>
>> Philip Kaludercic <philipk@posteo.net> writes:
>>
>>> There seems to be no opposition to this idea, I'd just appreciate a
>>> reminder of who has signed the CA and the URLs to the current
>>> repositories (I cannot seem to find everything in my MUA's history).
>>
>> Did you want these?
>>
>>   Author: Yuwei Tian (MELPA says so)
>>   Repository: https://github.com/galeo/corfu-doc/
>
> Yes, and from what I understand the main repository for
> corfu-doc-terminal is
> https://codeberg.org/akib/emacs-corfu-doc-terminal, or is this just a
> mirror?

No, it's the main repository, and I don't maintain any mirror.

> You are the sole contributor, and haven't/can't sign the CA,
> right?
>

Yes.

-- 
Akib Azmain Turja

Find me on Mastodon at @akib@hostux.social.

This message is signed by me with my GnuPG key.  It's fingerprint is:

    7001 8CE5 819F 17A3 BBA6  66AF E74F 0EFA 922A E7F5

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 64+ messages in thread

end of thread, other threads:[~2022-07-18  9:27 UTC | newest]

Thread overview: 64+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-05-28 13:15 [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal Akib Azmain Turja
2022-05-28 13:55 ` Philip Kaludercic
2022-05-28 14:38 ` Stefan Monnier
2022-05-28 16:30   ` Akib Azmain Turja
2022-05-28 17:47     ` Stefan Monnier
2022-05-28 20:27       ` Akib Azmain Turja
2022-05-28 22:03         ` Stefan Monnier
2022-05-28 19:16     ` Eli Zaretskii
2022-05-28 20:40       ` Akib Azmain Turja
2022-05-29  6:26         ` Eli Zaretskii
2022-07-12  3:19           ` Implementing child frames on terminal Akib Azmain Turja
2022-07-12  5:13             ` Po Lu
2022-07-12  8:35               ` Akib Azmain Turja
2022-07-12  9:44                 ` Po Lu
2022-07-12 13:25                   ` Eli Zaretskii
2022-07-12 13:38                     ` Po Lu
2022-07-12 13:48                       ` Eli Zaretskii
2022-07-12 13:19                 ` Eli Zaretskii
2022-07-12 14:21                   ` Akib Azmain Turja
2022-07-12 15:46                     ` Eli Zaretskii
2022-07-13 14:33                       ` Akib Azmain Turja
2022-07-13 15:57                         ` Eli Zaretskii
2022-07-13 17:55                           ` Akib Azmain Turja
2022-07-13 18:11                             ` Eli Zaretskii
2022-07-14  7:14                               ` Akib Azmain Turja
2022-07-14  7:27                                 ` Eli Zaretskii
2022-07-12 13:06             ` Eli Zaretskii
2022-07-12 13:40               ` Po Lu
2022-07-12 13:50                 ` Eli Zaretskii
2022-07-12 13:54                   ` Po Lu
2022-07-12 14:17                     ` Eli Zaretskii
2022-07-14  1:27                       ` Po Lu
2022-07-14  1:55                       ` Stefan Monnier
2022-07-14  3:34                         ` Po Lu
2022-07-14 14:00                           ` Stefan Monnier
2022-07-14  5:56                         ` Eli Zaretskii
2022-07-14  6:29                           ` Po Lu
2022-07-14  6:53                           ` Akib Azmain Turja
2022-07-14  7:20                             ` Eli Zaretskii
2022-07-14 12:07                               ` Akib Azmain Turja
2022-07-14 13:12                                 ` Eli Zaretskii
2022-07-14 13:52                                   ` Akib Azmain Turja
2022-07-14 14:00                                     ` Eli Zaretskii
2022-07-15  2:37                                     ` Po Lu
2022-07-15  3:35                                       ` Stefan Monnier
2022-07-15  4:24                                         ` Po Lu
2022-07-15  5:07                                           ` tomas
2022-07-14  7:25                             ` Po Lu
2022-07-14 12:11                               ` Akib Azmain Turja
2022-07-14 19:33                               ` Tassilo Horn
2022-07-14 14:03                           ` Stefan Monnier
2022-07-15 10:28                             ` Akib Azmain Turja
2022-07-12 14:03                 ` Akib Azmain Turja
2022-05-28 15:02 ` [NonGNU ELPA] New packages: corfu-doc and corfu-doc-terminal Stefan Monnier
2022-05-28 16:06 ` Akib Azmain Turja
2022-05-28 17:46   ` Philip Kaludercic
2022-05-28 20:31     ` Akib Azmain Turja
2022-05-29  8:14       ` Daniel Mendler
2022-07-15 15:06         ` Akib Azmain Turja
2022-07-17 14:53           ` Philip Kaludercic
2022-07-17 17:06             ` Akib Azmain Turja
2022-07-17 18:27               ` Philip Kaludercic
2022-07-18  9:27                 ` Akib Azmain Turja
2022-07-17 19:08               ` Stefan Monnier

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.