unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Stefan Kangas <stefankangas@gmail.com>
To: Psionic K <psionik@positron.solutions>,
	Emacs developers <emacs-devel@gnu.org>
Cc: bugs@gnu.support, Philip Kaludercic <philipk@posteo.net>,
	 Stefan Monnier <monnier@iro.umontreal.ca>
Subject: Re: MoC for Non-GNU ELPA [was:Introducing Master of Ceremonies, a package for presentations]
Date: Tue, 24 Dec 2024 02:48:10 +0000	[thread overview]
Message-ID: <CADwFkmkEOeMRywhigijQJ159Mqs8Y409a8+ZKLtkGdUCb-Mw-w@mail.gmail.com> (raw)
In-Reply-To: <CADQMGAQ88=q4c+=m56kKNg-fQawGY15wJ5CmPov5LHagzHkPcg@mail.gmail.com>

Psionic K <psionik@positron.solutions> writes:

> Master of Ceremonies was developed as a companion to Dslide.  Both
> packages aid presenting and authoring video and other content within
> Emacs.
>
> https://github.com/positron-solutions/moc
> https://github.com/positron-solutions/moc.git
>
> Master of Ceremonies (MoC) has two core commands:  `moc-focus' and
> `moc-dispatch'
>
> `moc-focus' is a valuable tool for authoring screenshots or conducting
> live explanation of excerpts of Emacs buffers, usually code.  It fills
> the frame with the selected region.  You can apply highlights and
> occlusions to selectively reveal or emphasize parts of an expression.
> It attempts to faithfully preserve the appearance of the source buffer
> by propagating much display information, such as overlays and the
> invisibility spec.
>
> `moc-focus-kill-ring-save' does exactly like what it sounds like.  It
> saves an expression that can be used to play back the current MoC
> buffer state, including highlights and occlusions.  This is how I
> create much of my content for videos using Dslide.  Because the
> highlight and occlusion states are saved, the playback expressions can
> cover cases that simply saving text in a babel block would not be able
> to quickly re-generate on demand.
>
> Combining `moc-focus' and `moc-kill-ring-save', one can quickly obtain
> the necessary inputs for authoring content with TikTok levels of
> engagement, using nothing but text and code displayed in Emacs and
> some post-processing or Dslide to step through highlights.
>
> The use cases of `moc-focus' are broad:
> - make buffer excerpts full frame to show to someone farther away from
> the screen
> - emphasize and step through pieces of these excerpts, building them
> up with contents remaining in place
> - demonstrate visibility and overlay behaviors
> - save SVGs with no surrounding noise to utilize Emacs display for
> authoring other graphics materials
> - Steps in dslide presentations (presently through babel blocks as steps)
>
> The second command, `moc-dispatch' is a centralized collection of
> utilities and controls for conducting presentations.  The utilities
> include:
>
> - `moc-fixed-frame-set' sets a resolution and will attempt to preserve
> that frame through unintended changes possibly not covered by
> `frame-inhibit-implied-resize t'.
> - `moc-subtle-cursor-mode' is a poor man's laser pointer built in.  If
> your cursor color is highly visible, then this mode makes it very
> convenient to have the benefits of a cursor when doing motion but to
> hide that cursor immediately after use.
> - `moc-face-remap' can store presets of mass face remappings.
> `moc-focus' supports default presets.
> - `moc-quiet-mode' suppresses messages, though I feel like users
> should be able to figure out the simple variable change without a
> mode, it is what is done for now.
>
> I will be doing a video presentation of the Transient implementation
> choices, using MoC to discuss and incidentally demonstrate MoC, on my
> YouTube.  My most recent Dslide update:
> https://www.youtube.com/watch?v=00JEayL5Emk
>
> Status of work:
>
> The playback expressions have been extremely unstable.  I am holding
> off on declaring them version 1.  They are all generating expressions
> with ":version 0" to indicate this lack of guarantees in the short
> term while I gain usage data by doing presentations and videos.  I
> will update this to 1 only when I am comfortable that I can maintain
> at least some backwards compatibility.
>
> Visual line mode content works acceptably.  The default is truncation.
> This decision is inferred by looking at the state of visual modes in
> the source buffer.  Controls to update this in a focus buffer will
> only require modest re-architecture.  Since `moc-focus' can serialize
> its own replay state, it is very easy to imagine how to accomplish
> updates.
>
> The implementations of visual line and truncation support leverage
> Emacs text flow behavior.  This implementation was much, much shorter
> and much more reliable in terms of results.  I will not go into detail
> of other paths of implementation that I tried but discarded in utter
> disgust.  Re-flow and column width are coupled and riddled with
> details that shall not be guessed at from Elisp.  We can do more, but
> I would prefer if Emacs does more and I just update MoC to hand this
> highly non-specific work over to Emacs display.  The implementations I
> have delivered are about 2% of the code of implementations I
> discarded.
>
> Hooks and various bits of normal things are missing.  I will, as is
> the open source way, get to them in order of need, in order of
> thinking of them, and in order of clean PR.  All have the option of
> hitting my Github Sponsors to encourage expedited handling.
>
> There is no support for graphical frames and I don't even know why I
> would try or why a non-graphical user would ask.
>
> Images could be supported better.  I merely need to scale the overlays
> that occur in excerpts with images.  Some doodads created with fringes
> etc do not survive the scaling well and are omitted from overlay
> propagation.

Philip, Stefan, could you please take a look at the above request?



  reply	other threads:[~2024-12-24  2:48 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-10  8:04 MoC for Non-GNU ELPA [was:Introducing Master of Ceremonies, a package for presentations] Psionic K
2024-12-24  2:48 ` Stefan Kangas [this message]
2024-12-25  4:46   ` Richard Stallman
2024-12-25  5:03     ` Psionic K
2024-12-25 12:20       ` Eli Zaretskii
2024-12-25 13:33         ` Psionic K
2024-12-25 13:42           ` Eli Zaretskii
2024-12-25 14:09             ` Psionic K

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CADwFkmkEOeMRywhigijQJ159Mqs8Y409a8+ZKLtkGdUCb-Mw-w@mail.gmail.com \
    --to=stefankangas@gmail.com \
    --cc=bugs@gnu.support \
    --cc=emacs-devel@gnu.org \
    --cc=monnier@iro.umontreal.ca \
    --cc=philipk@posteo.net \
    --cc=psionik@positron.solutions \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).