* bug#35419: [Proposal] Buffer Lenses and the Case of Org-Mode (also, Jupyter)
[not found] ` <CA+Yh0SQ7yWQBjXhKbJPrCroriNpwhyFyQWAfHsUvxwmojsjKuw@mail.gmail.com>
@ 2019-04-25 1:37 ` Noam Postavsky
2019-04-25 7:11 ` bug#35419: Fwd: " 'Ihor Radchenko'
` (3 subsequent siblings)
4 siblings, 0 replies; 13+ messages in thread
From: Noam Postavsky @ 2019-04-25 1:37 UTC (permalink / raw)
To: Dmitrii Korobeinikov; +Cc: 35419
Dmitrii Korobeinikov <dim1212k@gmail.com> writes:
> * Implementation
>
> I am not familiar with Emacs internals to say what's feasible of the
> proposed structure.
Have you looked at Phil Lord's lentic package? I think it implements a
lot of what you're talking about.
https://github.com/phillord/lentic
^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#35419: Fwd: Re: [Proposal] Buffer Lenses and the Case of Org-Mode (also, Jupyter)
[not found] ` <CA+Yh0SQ7yWQBjXhKbJPrCroriNpwhyFyQWAfHsUvxwmojsjKuw@mail.gmail.com>
2019-04-25 1:37 ` bug#35419: " Noam Postavsky
@ 2019-04-25 7:11 ` 'Ihor Radchenko'
[not found] ` <87sgu6rhkt.fsf@gmail.com>
` (2 subsequent siblings)
4 siblings, 0 replies; 13+ messages in thread
From: 'Ihor Radchenko' @ 2019-04-25 7:11 UTC (permalink / raw)
To: 35419
[-- Attachment #1.1: Type: message/rfc822, Size: 2972 bytes --]
[-- Attachment #1.1.1.1: Type: text/plain, Size: 1736 bytes --]
Dear Dmitrii,
I strongly support the proposal.
Another use case for me is to speed up agenda creation.
I usually do not like to split my org files into too many. However, it
results in very large and slow org buffers later. If I can store some
parts of the org files externally and only show them if some condition
is met (say, for certain todo state of the parent entry), it would speed
up my agenda and the buffer navigation quite significantly.
Example:
#+begin_src org
* Projects
** 2019
*** TODO Project 1 :ORG:
# the project contents is stored in an external file
:PROPERTIES:
:ORG-FILE: project1.org
:END:
# beginning of a lense, which is linked to project1.org
**** Heading 1
**** Heading 2
And many headings below
# ...
# end of the lense
*** HOLD Project 2 :ORG:
:PROPERTIES:
:ORG-FILE: project2.org
:END:
# beginning of another lense
# nothing is included here because the project state is =HOLD=
# end of the lense
#+end_src
Let me put some historical context to this proposal.
There was a discussion of similar feature in emacs-dev last year.
The idea was to implement nested buffers:
https://lists.gnu.org/archive/html/emacs-devel/2018-07/msg00863.html
There are also several projects, which implement part of the
functionality you described:
- mmm-mode: https://github.com/purcell/mmm-mode
- polymode: https://github.com/polymode/polymode
Best,
Ihor
Dmitrii Korobeinikov <dim1212k@gmail.com> writes:
> I have written a proposal for buffer lenses which could prove useful in
> Org-mode, especially for interacting with code.
> If you are interested, please, see this link:
> https://debbugs.gnu.org/cgi/bugreport.cgi?bug=35419
--
Ihor Radchenko,
[-- Attachment #1.1.1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 487 bytes --]
[-- Attachment #1.2: Type: text/plain, Size: 24 bytes --]
--
Ihor Radchenko,
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 487 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
[parent not found: <87sgu6rhkt.fsf@gmail.com>]
* bug#35419: [Proposal] Buffer Lenses and the Case of Org-Mode (also, Jupyter)
[not found] ` <87sgu6rhkt.fsf@gmail.com>
@ 2019-04-25 8:40 ` Dmitrii Korobeinikov
[not found] ` <CA+Yh0SSvQMucaC1EJR9GBxpKeP6haGiHN+Lf2QYo8csNoy0Waw@mail.gmail.com>
1 sibling, 0 replies; 13+ messages in thread
From: Dmitrii Korobeinikov @ 2019-04-25 8:40 UTC (permalink / raw)
To: Noam Postavsky; +Cc: 35419
[-- Attachment #1: Type: text/plain, Size: 1287 bytes --]
> Have you looked at Phil Lord's lentic package? I think it implements a
> lot of what you're talking about.
> https://github.com/phillord/lentic
This is nice to see!
Indeed, except for embedding, there is a large overlap with what I
described as buffer lenses.
BTW, judging by this description: "changes percolation now happens
incrementally, so only those parts of the buffer are updated. As a result,
lentic now cope with long files with little noticable delay", the buffers
don't share any data and need to sync with the master [linked] buffer.
Is this the best solution? I have imagined that at the low level there is
an actual data structure that keeps the raw textual data and it could be
directly shared by multiple buffers. I mean, when a buffer is saved to a
file, the text doesn't need to be stripped of properties beforehand, right?
чт, 25 апр. 2019 г. в 07:37, Noam Postavsky <npostavs@gmail.com>:
> Dmitrii Korobeinikov <dim1212k@gmail.com> writes:
>
> > * Implementation
> >
> > I am not familiar with Emacs internals to say what's feasible of the
> > proposed structure.
>
> Have you looked at Phil Lord's lentic package? I think it implements a
> lot of what you're talking about.
>
> https://github.com/phillord/lentic
>
[-- Attachment #2: Type: text/html, Size: 1957 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
[parent not found: <CA+Yh0SSvQMucaC1EJR9GBxpKeP6haGiHN+Lf2QYo8csNoy0Waw@mail.gmail.com>]
* bug#35419: [Proposal] Buffer Lenses and the Case of Org-Mode (also, Jupyter)
[not found] ` <CA+Yh0SSvQMucaC1EJR9GBxpKeP6haGiHN+Lf2QYo8csNoy0Waw@mail.gmail.com>
@ 2019-04-25 17:52 ` Philipp Stephani
[not found] ` <CAArVCkQcwnjeMyRU6rpiuvGsOCUOsnQTQwQSGdDFKwQz_Sbi3g@mail.gmail.com>
2019-04-26 12:05 ` Roland Everaert
2 siblings, 0 replies; 13+ messages in thread
From: Philipp Stephani @ 2019-04-25 17:52 UTC (permalink / raw)
To: Dmitrii Korobeinikov; +Cc: Noam Postavsky, 35419
Am Do., 25. Apr. 2019 um 10:41 Uhr schrieb Dmitrii Korobeinikov
<dim1212k@gmail.com>:
> I have imagined that at the low level there is an actual data structure that keeps the raw textual data and it could be directly shared by multiple buffers.
That's what indirect buffers do. Maybe the indirect buffer
functionality could be beefed up to support what you want?
^ permalink raw reply [flat|nested] 13+ messages in thread
[parent not found: <CAArVCkQcwnjeMyRU6rpiuvGsOCUOsnQTQwQSGdDFKwQz_Sbi3g@mail.gmail.com>]
* bug#35419: [Proposal] Buffer Lenses and the Case of Org-Mode (also, Jupyter)
[not found] ` <CAArVCkQcwnjeMyRU6rpiuvGsOCUOsnQTQwQSGdDFKwQz_Sbi3g@mail.gmail.com>
@ 2019-04-25 21:14 ` Dmitrii Korobeinikov
0 siblings, 0 replies; 13+ messages in thread
From: Dmitrii Korobeinikov @ 2019-04-25 21:14 UTC (permalink / raw)
To: Philipp Stephani; +Cc: Noam Postavsky, 35419
[-- Attachment #1: Type: text/plain, Size: 1153 bytes --]
чт, 25 апр. 2019 г. в 23:52, Philipp Stephani <p.stephani2@gmail.com>:
> Am Do., 25. Apr. 2019 um 10:41 Uhr schrieb Dmitrii Korobeinikov
> <dim1212k@gmail.com>:
> > I have imagined that at the low level there is an actual data structure
> that keeps the raw textual data and it could be directly shared by multiple
> buffers.
>
> That's what indirect buffers do. Maybe the indirect buffer
> functionality could be beefed up to support what you want?
>
https://www.gnu.org/software/emacs/manual/html_node/emacs/Indirect-Buffers.html
> The text of the indirect buffer is always identical to the text of its
base buffer; changes made by editing either one are visible immediately in
the other. But in all other respects, the indirect buffer and its base
buffer are completely separate. They can have different names, different
values of point, different narrowing, different markers, different major
modes, and different local variables.
Awesome! Looks like we have some solid rails to drive on.
BTW what's the purpose of lentic-mode then? To be "providing multiple
persistent views"?
https://github.com/phillord/lentic
[-- Attachment #2: Type: text/html, Size: 1758 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: bug#35419: [Proposal] Buffer Lenses and the Case of Org-Mode (also, Jupyter)
[not found] ` <CA+Yh0SSvQMucaC1EJR9GBxpKeP6haGiHN+Lf2QYo8csNoy0Waw@mail.gmail.com>
2019-04-25 17:52 ` Philipp Stephani
[not found] ` <CAArVCkQcwnjeMyRU6rpiuvGsOCUOsnQTQwQSGdDFKwQz_Sbi3g@mail.gmail.com>
@ 2019-04-26 12:05 ` Roland Everaert
2 siblings, 0 replies; 13+ messages in thread
From: Roland Everaert @ 2019-04-26 12:05 UTC (permalink / raw)
To: emacs-orgmode; +Cc: Noam Postavsky, 35419
I see lens to be useful for the eev mode, too.
Roland.
Dmitrii Korobeinikov writes:
>> Have you looked at Phil Lord's lentic package? I think it implements a
>> lot of what you're talking about.
>
>> https://github.com/phillord/lentic
>
> This is nice to see!
> Indeed, except for embedding, there is a large overlap with what I
> described as buffer lenses.
>
> BTW, judging by this description: "changes percolation now happens
> incrementally, so only those parts of the buffer are updated. As a result,
> lentic now cope with long files with little noticable delay", the buffers
> don't share any data and need to sync with the master [linked] buffer.
> Is this the best solution? I have imagined that at the low level there is
> an actual data structure that keeps the raw textual data and it could be
> directly shared by multiple buffers. I mean, when a buffer is saved to a
> file, the text doesn't need to be stripped of properties beforehand, right?
>
> чт, 25 апр. 2019 г. в 07:37, Noam Postavsky <npostavs@gmail.com>:
>
>> Dmitrii Korobeinikov <dim1212k@gmail.com> writes:
>>
>> > * Implementation
>> >
>> > I am not familiar with Emacs internals to say what's feasible of the
>> > proposed structure.
>>
>> Have you looked at Phil Lord's lentic package? I think it implements a
>> lot of what you're talking about.
>>
>> https://github.com/phillord/lentic
>>
--
Luke, use the FOSS
Sent from Emacs
^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#35419: bug#35419: [Proposal] Buffer Lenses and the Case of Org-Mode (also, Jupyter)
[not found] ` <CA+Yh0SQ7yWQBjXhKbJPrCroriNpwhyFyQWAfHsUvxwmojsjKuw@mail.gmail.com>
` (2 preceding siblings ...)
[not found] ` <87sgu6rhkt.fsf@gmail.com>
@ 2019-05-02 21:24 ` Dmitrii Korobeinikov
2019-05-02 21:31 ` Dmitrii Korobeinikov
4 siblings, 0 replies; 13+ messages in thread
From: Dmitrii Korobeinikov @ 2019-05-02 21:24 UTC (permalink / raw)
To: 35419, reveatwork
[-- Attachment #1: Type: text/plain, Size: 314 bytes --]
> I see lens to be useful for the eev mode, too.
Never heard of eev, but judging by some demos, it's a way to execute elisp
commands interactively.
Something like stitching blocks of commands together, or the data to
operate on, or embedding a target such as a shell in the same buffer is the
use-case idea then?
[-- Attachment #2: Type: text/html, Size: 503 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#35419: [Proposal] Buffer Lenses and the Case of Org-Mode (also, Jupyter)
[not found] ` <CA+Yh0SQ7yWQBjXhKbJPrCroriNpwhyFyQWAfHsUvxwmojsjKuw@mail.gmail.com>
` (3 preceding siblings ...)
2019-05-02 21:24 ` bug#35419: " Dmitrii Korobeinikov
@ 2019-05-02 21:31 ` Dmitrii Korobeinikov
4 siblings, 0 replies; 13+ messages in thread
From: Dmitrii Korobeinikov @ 2019-05-02 21:31 UTC (permalink / raw)
To: 35419, Ihor Radchenko; +Cc: Philipp Stephani, Noam Postavsky
[-- Attachment #1: Type: text/plain, Size: 1702 bytes --]
I found a clarification on how mmm-mode works.
https://github.com/polymode/polymode/issues/187
> mmm-mode also allows having multiple major modes depending on cursor
position in the buffer. However, it does not fully replace major mode
locally. This mode is only taking care about keymap, menu, local variables,
font-lock, and indentation. It does not really take care about the minor
modes and does not run the submode hooks either.
Just to reiterate, polymode's idea is to switch between indirect buffers,
one for each major mode.
OK, detail largely disregarded, I now can draw a bird-eye view comparison
between lenses and multi-mode modes.
- Neither polymode nor mmm-mode treat a region as if it were truly on its
own in a seperate buffer.
Effects: no stuff like seperate truncation options, implied syntax checking
and so on.
- Moreover, the region must be a part of the buffer.
Effects: no data sharing between buffers, no possibility of stitching
different buffers together, etc.
Now, with these out of the way.
Indirect buffers give the answer to the issue of sharing some textual data
between several buffer.
(1) A question: when an indirect buffer is created and some region is
narrowed to, is the rest of the buffer duplicated in memory somewhere? If
this is so, there could be a useful efficiency-related modification to
indirect buffers, which would allow "hard-narrowing": not duplicating the
rest of the base buffer.
The next immediately outstanding question is:
(2) how can "embedding" (of a buffer as a part of another buffer as an
area) be done efficiently? This could possibly be approached as two
problems: (i) displaying the area and (ii) interacting with it.
Any ideas?
[-- Attachment #2: Type: text/html, Size: 2127 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread