unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Submitting Dslide to Non-GNU ELPA
@ 2024-06-20  6:02 Psionic K
  2024-06-20  8:05 ` Philip Kaludercic
  0 siblings, 1 reply; 15+ messages in thread
From: Psionic K @ 2024-06-20  6:02 UTC (permalink / raw)
  To: Emacs developers

Dslide, a re-write of org-tree-slide focusing on programmable
presentations, is approaching 1.0.  Release notes (0.5.2) here:
https://github.com/positron-solutions/dslide/releases

I want to go through the Non-GNU ELPA process, partly to make the
package as available as possible, and partly for whatever coincidental
quality gains result from the submission process.

I have not done anything with Non-GNU ELPA yet.  Please advise.

Source available here:  git@github.com:positron-solutions/dslide.git
Direct github link:  https://github.com/positron-solutions/dslide
4m video demo for 0.5.1 https://youtu.be/8vkymxjSrK0

I was going to just add some features to org-tree-slide but realized
it could do so much more with Elisp integration in order to program
actions into the presentations.  So it's a nearly full re-write, at
least 90%.  License is GPL3.  Source history descends from
org-tree-slide.

For an overview of markup and capabilities, the org document which is
used both for testing and demonstration, can be viewed here:
https://raw.githubusercontent.com/positron-solutions/dslide/master/test/demo.org



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

* Re: Submitting Dslide to Non-GNU ELPA
  2024-06-20  6:02 Submitting Dslide to Non-GNU ELPA Psionic K
@ 2024-06-20  8:05 ` Philip Kaludercic
  2024-06-20  8:57   ` Psionic K
  0 siblings, 1 reply; 15+ messages in thread
From: Philip Kaludercic @ 2024-06-20  8:05 UTC (permalink / raw)
  To: Psionic K; +Cc: Emacs developers

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

Psionic K <psionik@positron.solutions> writes:

> Dslide, a re-write of org-tree-slide focusing on programmable
> presentations, is approaching 1.0.  Release notes (0.5.2) here:
> https://github.com/positron-solutions/dslide/releases
>
> I want to go through the Non-GNU ELPA process, partly to make the
> package as available as possible, and partly for whatever coincidental
> quality gains result from the submission process.
>
> I have not done anything with Non-GNU ELPA yet.  Please advise.
>
> Source available here:  git@github.com:positron-solutions/dslide.git
> Direct github link:  https://github.com/positron-solutions/dslide

Here are a few comments:


[-- Attachment #2: Type: text/plain, Size: 17491 bytes --]

diff --git a/dslide.el b/dslide.el
index 6c4db0f5c5..aece6917d2 100644
--- a/dslide.el
+++ b/dslide.el
@@ -105,8 +105,7 @@
 (defcustom dslide-base-follows-slide t
   "Non-nil moves the base buffer point to the current slide.
 This happens whether the buffer is visible or not."
-  :type 'boolean
-  :group 'dslide)
+  :type 'boolean)
 
 (defcustom dslide-start-from 'point
   "When starting, begin at `point' `first' slide.
@@ -126,8 +125,7 @@ If you just want to navigate slides with the point, you should
 use the contents mode by calling `dslide-deck-start' in a
 presentation that is already started."
   :type '(choice (const :tag "First slide" first)
-                 (const :tag "Slide at point" point))
-  :group 'dslide)
+                 (const :tag "Slide at point" point)))
 
 (defcustom dslide-start-function #'dslide-display-slides
   "When starting the mode, this is the default starting function.
@@ -135,58 +133,49 @@ It should usually call `dslide-display-slides' or
 `dslide-display-contents'.  You can build commands that
 use `let' binding to temporarily set this variable in order to
 start with a specific starting function."
-  :type 'function
-  :group 'dslide)
+  :type 'function)
 
 (defcustom dslide-header t
   "The status of displaying the slide header."
-  :type 'boolean
-  :group 'dslide)
+  :type 'boolean)
 
 (defcustom dslide-header t
   "Display header in contents buffer.
 When this is disabled, the keywords for title etc will remain
 visible, albeit scrolled away because of how `org-overview'
 works."
-  :type 'boolean
-  :group 'dslide)
+  :type 'boolean)
 
 (defcustom dslide-header-author t
   "Show the email in the header.
 If there is a #+author: keyword, it will be used."
-  :type 'boolean
-  :group 'dslide)
+  :type 'boolean)
 
 (defcustom dslide-header-email t
   "Show the email in the header.
 If there is a #+email: keyword, it will be used."
-  :type 'boolean
-  :group 'dslide)
+  :type 'boolean)
 
 (defcustom dslide-header-date t
   "Show the date in the header.
 If there is a #+date: keyword, it will be used.
 The current time will be used as a fallback."
-  :type 'boolean
-  :group 'dslide)
+  :type 'boolean)
 
 (defcustom dslide-margin-title-above 0.5
   "Margin between header title and the top of the window.
 Can be a float or integer."
-  :type 'number
-  :group 'dslide)
+  :type 'number)
 
 (defcustom dslide-margin-title-below 0.5
   "Margin between title and other header info.
 Can be a float or integer."
-  :type 'number
-  :group 'dslide)
+  :type 'number)
 
 (defcustom dslide-margin-content 1.5
   "Margin between the slide header and its content.
 Can be a float or integer."
-  :type 'number
-  :group 'dslide)
+  :type 'number)
 
 (defcustom dslide-slide-in-effect t
   "Using a visual effect of slide-in for displaying trees."
@@ -195,16 +184,15 @@ Can be a float or integer."
 
 (defcustom dslide-slide-in-blank-lines 15
   "Line height of the slide-in effect."
-  :type 'number
-  :group 'dslide)
+  :type 'natnum)
 
 (defcustom dslide-feedback-messages
-  '(:start "Start! ▶"
-           :forward "Forward ➡"
-           :backward "⬅ Backward"
-           :contents "Contents ☰"
-           :stop "Stop ■"
-           :after-last-slide "No more slides!")
+  '( :start "Start! ▶"
+     :forward "Forward ➡"
+     :backward "⬅ Backward"
+     :contents "Contents ☰"
+     :stop "Stop ■"
+     :after-last-slide "No more slides!")
   "Feedback messages for slide controls.
 Turn off by setting to nil.  Plist keys and where they are used:
 
@@ -219,53 +207,49 @@ Turn off by setting to nil.  Plist keys and where they are used:
 - :stop `dslide-deck-stop'
 
 - :after-last-slide: see `after-last-slide-hook'"
-
   :type 'plist
-  :group 'dslide)
+  :options '((:start string)
+	     (:forward string)
+	     (:backward string)
+	     (:contents string)
+	     (:stop string)
+	     (:after-last-slide string)))
 
 (defcustom dslide-breadcrumb-face '(:inherit org-level-8)
   "Face added to the list of faces for breadcrumbs.
 This can be a face name symbol or an anonymous face spec.  It
 will be added to the face list, meaning it the original face's
 properties remain unless shadowed."
-  :type 'face
-  :group 'dslide)
+  :type 'face)
 
 (defface dslide-header-overlay-face '((t :inherit default))
-  "Face for `dslide--header-overlay'."
-  :group 'dslide)
+  "Face for `dslide--header-overlay'.")
 
 (defcustom dslide-breadcrumb-separator " 🢒 "
   "Delimiter for breadcrumbs or nil to turn off breadcrumbs."
   :type '(choice (const :tag "Don't display breadcrumbs" nil)
-                 (string :tag "Delimiter"))
-  :group 'dslide)
+                 (string :tag "Delimiter")))
 
 (defcustom dslide-breadcrumbs-hide-todo-state t
   "If non-nil, hide TODO states in the breadcrumbs."
-  :type 'boolean
-  :group 'dslide)
+  :type 'boolean)
 
 (defcustom dslide-animation-duration 1.0
   "How long slide in takes."
-  :type 'number
-  :group 'dslide)
+  :type 'number)
 
 (defcustom dslide-animation-frame-duration (/ 1.0 60.0)
   "Length between updates.
 Increase if your so-called machine has trouble drawing."
-  :type 'number
-  :group 'dslide)
+  :type 'number)
 
 (defcustom dslide-start-hook nil
   "Runs after the slide buffer is created but before first slide.
 Buffer is widened and fully visible."
-  :group 'dslide
   :type 'hook)
 
 (defcustom dslide-stop-hook nil
   "Runs in the base buffer after stopping."
-  :group 'dslide
   :type 'hook)
 
 (defcustom dslide-narrow-hook nil
@@ -273,12 +257,10 @@ Buffer is widened and fully visible."
 Use this hook for behaviors that affect the displayed region.
 Slides and sequences that do not display themselves or only
 affect display in another buffer will not trigger this hook."
-  :group 'dslide
   :type 'hook)
 
 (defcustom dslide-contents-hook nil
   "Runs last after switching to contents."
-  :group 'dslide
   :type 'hook)
 
 (defcustom dslide-after-last-slide-hook '()
@@ -288,7 +270,6 @@ Consider using `dslide-push-step' and writing a callback that
 only reacts to the `forward' state.  This callback will then only
 run if the user immediately calls `dslide-deck-forward'
 again.  `dslide-deck-stop' is another good choice."
-  :group 'dslide
   :type 'hook)
 
 (defcustom dslide-default-slide-action #'dslide-slide-action-child
@@ -301,8 +282,7 @@ You can configure this per-heading by setting the
 SLIDE_ACTION keyword.  You can configure it for
 the document default by adding an SLIDE_ACTION
 keyword."
-  :type 'function
-  :group 'dslide)
+  :type 'function)
 
 ;; TODO test the use of plist args
 (defcustom dslide-default-actions '(dslide-action-hide-markup)
@@ -319,8 +299,7 @@ list in order to have default behaviors for some org elements.
 You can configure this per-heading by setting the DSLIDE_ACTIONS
 keyword.  You can configure it for the document default by adding
 an DSLIDE_ACTIONS keyword."
-  :type '(list function)
-  :group 'dslide)
+  :type '(repeat function))
 
 (defcustom dslide-default-class 'dslide-slide
   "A class to more deeply modify slide behavior.
@@ -331,8 +310,7 @@ Consider upstreaming changes.
 You can configure this per heading by setting the DSLIDE_CLASS
 property.  You can configure it for the document default by
 adding an DSLIDE_CLASS keyword."
-  :type 'symbol
-  :group 'dslide)
+  :type 'symbol)
 
 (defcustom dslide-default-deck-class 'dslide-deck
   "A class to more deeply modify overall deck behavior.
@@ -340,8 +318,7 @@ Value should be a custom class extending symbol `dslide-deck'.
 Use this to modify the root-level behaviors, including switching
 to children and finding siblings.  You can configure this for the
 document by adding the DSLIDE_ROOT_CLASS keyword."
-  :type 'symbol
-  :group 'dslide)
+  :type 'symbol)
 
 (defcustom dslide-default-filter #'dslide-built-in-filter
   "A function used to call next on children.
@@ -352,8 +329,7 @@ return nil if it should be skipped.
 You can configure this per heading by setting the DSLIDE_FILTER
 keyword.  You can configure it for the document default by adding
 an DSLIDE_FILTER keyword."
-  :type 'function
-  :group 'dslide)
+  :type 'function)
 
 ;; TODO can also probably be objects.  Use case?
 (defcustom dslide-hide-markup-types '(comment
@@ -363,8 +339,7 @@ an DSLIDE_FILTER keyword."
                                       keyword)
   "Default types to be hidden by `dslide-action-hide-markup'.
 Can be any element in `org-element-all-elements'."
-  :type '(list symbol)
-  :group 'dslide)
+  :type '(repeat symbol))
 
 (defcustom dslide-contents-selection-highlight t
   "Show a highlight on the selected headline.
@@ -372,29 +347,24 @@ This is useful if you have some subtle cursor feature enabled for
 your presentation and wouldn't otherwise know what line you are
 on in the contents view.  The default is also just a way more
 obvious display style."
-  :type 'boolean
-  :group 'dslide)
+  :type 'boolean)
 
 (defface dslide-contents-selection-face
   '((t :inherit org-level-1 :inverse-video t :extend t))
-  "Face for highlighting the current slide root."
-  :group 'dslide)
+  "Face for highlighting the current slide root.")
 
 (defface dslide-highlight
   '((t :inherit hl-line))
   "Face used in base buffer to highlight progress.
-See `dslide-base-follows-slide'."
-  :group 'dslide)
+See `dslide-base-follows-slide'.")
 
 (defface dslide-babel-success-highlight
   '((t :inherit hl-line))
-  "Temporarily highlight babel blocks that succeeded."
-  :group 'dslide)
+  "Temporarily highlight babel blocks that succeeded.")
 
 (defface dslide-babel-error-highlight
   '((t :inherit error))
-  "Temporarily highlight babel blocks that failed."
-  :group 'dslide)
+  "Temporarily highlight babel blocks that failed.")
 
 (defvar dslide--debug nil
   "Set to t for logging slides and actions.")
@@ -834,7 +804,7 @@ Class can be overridden to affect root behaviors.  See
 (cl-defmethod dslide--choose-slide ((obj dslide-deck) how)
   "Set the current slide of OBJ, according to HOW."
   ;; TODO apply filter when choosing starting slide
-  (cond ((eq how 'first)
+  (cond ((eq how 'first)		;looks like something you could `pcase' as well.  do you know that how has to be one of these cases?
          (oset obj slide (dslide--make-slide
                           (dslide--document-first-heading))))
         ((eq how 'contents)
@@ -866,7 +836,7 @@ return nil so that it is only run for effects."
   (let ((window-config (current-window-configuration)))
     (dslide-push-step
      (lambda (_) (prog1 step
-              (set-window-configuration window-config))))))
+		   (set-window-configuration window-config))))))
 
 (defun dslide-push-step (fun)
   "Run FUN as next step.
@@ -909,6 +879,9 @@ the slide object coordinates this overlap.  It delegates the
 order.")
 
 (cl-defmethod dslide-begin ((obj dslide-slide))
+  ;; documentation would be nice in methods like these, because I
+  ;; don't know if it makes sense to evaluate the rest of the prog1 if
+  ;; slides-action is bound to nil...
   (prog1 (when-let ((slide-action (oref obj slide-action)))
            (dslide-begin slide-action))
     (mapc #'dslide-begin (oref obj section-actions))))
@@ -1032,16 +1005,10 @@ Many optional ARGS.  See code."
                     dslide-default-actions))
            (section-actions
             (mapcar
-             (lambda (c) (when c
-                      (if (consp c)
-                          (apply (car c)
-                                 :begin begin
-                                 :marker (copy-marker begin)
-                                 (append args (cdr c)))
-                        (apply c
-                               :begin begin
-                               :marker (copy-marker begin)
-                               args))))
+             (lambda (c) (and c (apply (if (consp c) (car c) c)
+                                       :begin begin
+                                       :marker (copy-marker begin)
+                                       (append args (cdr-safe c)))))
              section-action-classes))
 
            (filter
@@ -2122,11 +2089,7 @@ PREDICATE should accept an ELEMENT argument and return non-nil."
         found))))
 
 (defun dslide--list-item-contains (item loc)
-  (when item
-    (let ((beg (car item))
-          (end (car (last item))))
-      (and  (>= loc beg)
-            (< loc end)))))
+  (and item (<= (car item) loc (+ (car (last item))))))
 
 (defun dslide-type-p (element-or-type type)
   "Check element TYPE.
@@ -2206,9 +2169,9 @@ Each predicate should take one argument, an org element."
   (lambda (element)
     (seq-reduce
      (lambda (begin pred)
-       (when (or (not pred)
-                 (and begin (funcall pred begin)))
-         begin))
+       (and (or (not pred)
+                (and begin (funcall pred begin)))
+            begin))
      predicates element)))
 
 ;; * Slide Header
@@ -2275,17 +2238,17 @@ assumes the buffer is restricted and that there is a first tree."
          (concat (dslide--margin-lines dslide-margin-title-above)
                  (propertize title 'face 'org-document-title)
                  (dslide--margin-lines dslide-margin-title-below)
-                 (when (and  dslide-header-date date)
-                   (dslide--info-face (concat date "  ")))
-                 (when (and  dslide-header-author author)
-                   (dslide--info-face (concat author "  ")))
-                 (when (and  dslide-header-email email)
-                   (dslide--info-face (concat email "  ")))
-                 (when (and (not no-breadcrumbs)
-                            dslide-breadcrumb-separator)
-                   (concat (dslide--info-face "\n")
-                           (dslide--get-parents
-                            dslide-breadcrumb-separator)))
+                 (and dslide-header-date date
+		      (dslide--info-face (concat date "  ")))
+                 (and dslide-header-author author
+		       (dslide--info-face (concat author "  ")))
+                 (and dslide-header-email email
+		       (dslide--info-face (concat email "  ")))
+                 (and (not no-breadcrumbs)
+                      dslide-breadcrumb-separator
+		      (concat (dslide--info-face "\n")
+                              (dslide--get-parents
+                               dslide-breadcrumb-separator)))
                  (dslide--margin-lines dslide-margin-content)))
 
       (overlay-put dslide--header-overlay 'before-string
@@ -2545,7 +2508,7 @@ ensure that the slide buffer is visible."
 
 (defun dslide--keyword-value (key)
   "Get values like #+KEY from document keywords."
-  (cadr (assoc-string key (org-collect-keywords `(,key)))))
+  (cadr (assoc-string key (org-collect-keywords (list key)))))
 
 (defun dslide--feedback (key)
   "Show feedback message for KEY.
@@ -2553,7 +2516,7 @@ See `dslide-feedback-messages'.  This provides Explicit feedback
 for commands without visible side effects."
   (when-let ((feedback (plist-get dslide-feedback-messages
                                   key)))
-    (let ((message-log-max nil))
+    (let ((message--max nil))
       (message "%s" feedback))))
 
 ;; TODO these could check for inheritance from some base class, which would save
@@ -2578,8 +2541,8 @@ for commands without visible side effects."
 
 (defun dslide--filter (filter-name)
   "FILTER-NAME is a string that might contain a filter name."
-  (when-let ((symbol (or (when (symbolp filter-name)
-                           filter-name)
+  (when-let ((symbol (or (and (symbolp filter-name)
+                              filter-name)
                          (intern-soft filter-name))))
     (if (functionp symbol)
         symbol
@@ -2685,10 +2648,7 @@ the caller."
 ;;;###autoload
 (define-minor-mode dslide-mode
   "A presentation tool for Org Mode."
-  :init-value nil
   :interactive nil
-  :keymap dslide-mode-map
-  :group 'dslide
   :global t
   (unless (eq 'org-mode (buffer-local-value
                          'major-mode (current-buffer)))
@@ -2889,8 +2849,7 @@ video or custom actions."
               (dslide--choose-slide dslide--deck 'contents)
               (dslide-display-slides)))
         (dslide--ensure-slide-buffer t))
-    (let ((dslide-start-function
-           #'dslide-display-slides))
+    (let ((dslide-start-function #'dslide-display-slides))
       (dslide-mode 1))))
 
 ;; TODO
@@ -2899,8 +2858,7 @@ video or custom actions."
   "Show both the base and slide buffer."
   (interactive)
   (let ((major-mode (buffer-local-value 'major-mode (current-buffer))))
-    (unless (or (dslide-live-p)
-                (eq 'org-mode major-mode))
+    (unless (or (dslide-live-p) (derived-mode-p '(org-mode)))
       (user-error "Not an org buffer and no other live presentation"))
     (if (dslide-live-p)
         ;;  show the correct buffers
@@ -2943,3 +2901,7 @@ video or custom actions."
 (provide 'dslide)
 
 ;;; dslide.el ends here
+
+;; Local Variables:
+;; outline-regexp: ";; \\(*+\\)"
+;; End:

[-- Attachment #3: Type: text/plain, Size: 808 bytes --]


> 4m video demo for 0.5.1 https://youtu.be/8vkymxjSrK0

It would be a nice if you could host this video somewhere without
non-free JS (and without having to use something like youtube-dl).

> I was going to just add some features to org-tree-slide but realized
> it could do so much more with Elisp integration in order to program
> actions into the presentations.  So it's a nearly full re-write, at
> least 90%.  License is GPL3.  Source history descends from
> org-tree-slide.

Has development stopped on org-tree-slide?  Or is this a proper fork?

> For an overview of markup and capabilities, the org document which is
> used both for testing and demonstration, can be viewed here:
> https://raw.githubusercontent.com/positron-solutions/dslide/master/test/demo.org

-- 
	Philip Kaludercic on peregrine

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

* Re: Submitting Dslide to Non-GNU ELPA
  2024-06-20  8:05 ` Philip Kaludercic
@ 2024-06-20  8:57   ` Psionic K
  2024-06-20 13:28     ` Philip Kaludercic
  0 siblings, 1 reply; 15+ messages in thread
From: Psionic K @ 2024-06-20  8:57 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: Emacs developers

> Has development stopped on org-tree-slide?  Or is this a proper fork?

Fork, but almost a ground-up rewrite.  Only the slide header
generation and related customize options are recognizable.

Before I decided on a complete rewrite, I submitted some changes to
org-tree-slide.  They are not in master:
https://github.com/takaxp/org-tree-slide/commits/develop

> Here are a few comment

On first pass, I find most changes agreeable and intend to clean out
behaviors that lead to my versions.  Did you use a tool to scan for
these changes?



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

* Re: Submitting Dslide to Non-GNU ELPA
  2024-06-20  8:57   ` Psionic K
@ 2024-06-20 13:28     ` Philip Kaludercic
  2024-06-20 16:16       ` Psionic K
  0 siblings, 1 reply; 15+ messages in thread
From: Philip Kaludercic @ 2024-06-20 13:28 UTC (permalink / raw)
  To: Psionic K; +Cc: Emacs developers

Psionic K <psionik@positron.solutions> writes:

>> Has development stopped on org-tree-slide?  Or is this a proper fork?
>
> Fork, but almost a ground-up rewrite.  Only the slide header
> generation and related customize options are recognizable.
>
> Before I decided on a complete rewrite, I submitted some changes to
> org-tree-slide.  They are not in master:
> https://github.com/takaxp/org-tree-slide/commits/develop

So you are pretty sure there is no chance your changes could get
upstreamed?

>> Here are a few comment
>
> On first pass, I find most changes agreeable and intend to clean out
> behaviors that lead to my versions.  Did you use a tool to scan for
> these changes?

I didn't use any static analysis tools (beyond my own eyes), if you mean
that?

-- 
	Philip Kaludercic on peregrine



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

* Re: Submitting Dslide to Non-GNU ELPA
  2024-06-20 13:28     ` Philip Kaludercic
@ 2024-06-20 16:16       ` Psionic K
  2024-06-20 17:53         ` Philip Kaludercic
  0 siblings, 1 reply; 15+ messages in thread
From: Psionic K @ 2024-06-20 16:16 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: Emacs developers

> So you are pretty sure there is no chance your changes could get
> upstreamed?

I'm sure.  I upstreamed all I intended to.  To support the features I
wanted, it was necessary to allow the features to diverge, and then
the implementations, based on org-element API instead of regex and
matching, became similar only in spirit.  Keeping the org-tree-slide
commit history intact is more an acknowledgement to Taka and the other
contributors than something with technical justification.

> beyond my own eyes

Good eyes.  I barely had time to overcome my favorite butcher shop
closing down, so I was hoping the quick turnaround meant there is a
static tool with those behaviors.



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

* Re: Submitting Dslide to Non-GNU ELPA
  2024-06-20 16:16       ` Psionic K
@ 2024-06-20 17:53         ` Philip Kaludercic
  2024-06-20 23:34           ` Psionic K
  0 siblings, 1 reply; 15+ messages in thread
From: Philip Kaludercic @ 2024-06-20 17:53 UTC (permalink / raw)
  To: Psionic K; +Cc: Emacs developers

Psionic K <psionik@positron.solutions> writes:

>> So you are pretty sure there is no chance your changes could get
>> upstreamed?
>
> I'm sure.  I upstreamed all I intended to.  To support the features I
> wanted, it was necessary to allow the features to diverge, and then
> the implementations, based on org-element API instead of regex and
> matching, became similar only in spirit.  Keeping the org-tree-slide
> commit history intact is more an acknowledgement to Taka and the other
> contributors than something with technical justification.

My main concern is then to have some explanation for people not familiar
with either package (like me) to briefly summarise the main differences
between your package and org-tree-slide, making it easier to decide
which of the two one wants to use.

>> beyond my own eyes
>
> Good eyes.  I barely had time to overcome my favorite butcher shop
> closing down, so I was hoping the quick turnaround meant there is a
> static tool with those behaviors.

Most of my comments are really just superficial observations that anyone
would make with some Elisp familiarity and no prior familiarity with a
codebase.  That being said, if you have any concrete suggestions on how
to implement something, I am glad to comment on that.

-- 
	Philip Kaludercic on peregrine



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

* Re: Submitting Dslide to Non-GNU ELPA
  2024-06-20 17:53         ` Philip Kaludercic
@ 2024-06-20 23:34           ` Psionic K
  2024-06-21  5:55             ` Philip Kaludercic
  0 siblings, 1 reply; 15+ messages in thread
From: Psionic K @ 2024-06-20 23:34 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: Emacs developers

> My main concern is then to have some explanation for people not familiar
> with either package (like me) to briefly summarise the main differences
> between your package and org-tree-slide, making it easier to decide
> which of the two one wants to use.

In two sentences:  Dslide eclipses org-tree-slide, adding multiple
forms of incremental & composing display, integration with arbitrary
buffers, extensible actions, and emphasis on programmability via org
babel integration.  Only use org-tree-slide if you need its maturity
or are a non-graphical Emacs user.

The initial premise of both packages is to create reasonable
presentations directly from org files, skipping the export step and
achieving a good bang-for-buck solution for any regularly held
meetings, such as stand-ups and quick internal meetings where spending
time on something fancy communicates the wrong priorities.  However,
the following points will make it clear that the capabilities and
design of dslide go far beyond the initial premise, resulting in a
tool that is additionally useful for tech demos, authoring videos, or
giving more polished talks in front of large audiences.

- At times, one may want to use sub-headings for organizing
information on the screen.  Org tree slide offers few options to
control the inclusion of sub-headings, and they affect the entire
presentation.  Dslide is instead configured per-heading.
- Dslide uses line-height rather than line animation, enabling
smoother transitions and easing
- Dslide can present information incrementally, following the order in
which a talk is conducted
- Dslide hides the org markup used in its configuration and can also
hide babel blocks and comments, reusing normal org mode configuration
conventions
- Dslide uses an indirect buffer to avoid polluting the org mode
buffer with various presentation configurations and leftover state
- Dslide has the capability to simultaneously "follow" the slides in
the base buffer, updating the point and scroll position in another
frame, enabling the presenter to read their hidden comments and see
which actions are next while the audience sees the clean presentation.
- Dslide does not rely on the point to control navigation, making it
more reliable for live note taking when conducting an interactive
meeting
- Dslide's keymap is designed to be appropriate for a hardware cueing
device or use of no more than arrow keys, preferably only 3 buttons.
- Dslide's contents view is extremely clear and overloads the
presentation keymap commands, respecting the 3-button interface limit
- Dslide has several built-in "actions" that can consume org mode
information, such as image links.  The image action can display image
buffers full-frame as slides.  These actions also handle nuisance work
such as turning on inline images.
- Org babel blocks can be integrated as steps via an action, enabling
scripting of entirely custom behaviors in the middle of a
presentation.
- Custom actions can be created and even declared in the
presentation's own babel blocks for use in later slides.

It is the babel integration that makes dslide uniquely well-suited
among software typically used by engineers to conduct presentations
that are fully integrated with their normal programming tools,
enabling tech demos to be orchestrated within a reasonable
presentation.

At this time, dslide does everything that org-tree-slide does except
filtering headings.  Even when only using the basic features, Dslide's
breadcrumbs are more reliable and its contents view is superior.  What
remains is maturity.  Org tree slide works better on non-graphical
displays, but in time, especially if non-graphical terminal users
speak up, these issues will be polished off.  Except for maturity,
there is no use case where org-tree-slide remains favorable.  Dslide
is vastly more capable while also doing everything org tree slide does
better.



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

* Re: Submitting Dslide to Non-GNU ELPA
  2024-06-20 23:34           ` Psionic K
@ 2024-06-21  5:55             ` Philip Kaludercic
  2024-06-21  6:06               ` Psionic K
  0 siblings, 1 reply; 15+ messages in thread
From: Philip Kaludercic @ 2024-06-21  5:55 UTC (permalink / raw)
  To: Psionic K; +Cc: Emacs developers

Psionic K <psionik@positron.solutions> writes:

>> My main concern is then to have some explanation for people not familiar
>> with either package (like me) to briefly summarise the main differences
>> between your package and org-tree-slide, making it easier to decide
>> which of the two one wants to use.
>
> In two sentences:  Dslide eclipses org-tree-slide, adding multiple
> forms of incremental & composing display, integration with arbitrary
> buffers, extensible actions, and emphasis on programmability via org
> babel integration.  Only use org-tree-slide if you need its maturity
> or are a non-graphical Emacs user.

OK, if you haven't already, then you should add a comment like this to
the commentary section in the main file of your package.

> The initial premise of both packages is to create reasonable
> presentations directly from org files, skipping the export step and
> achieving a good bang-for-buck solution for any regularly held
> meetings, such as stand-ups and quick internal meetings where spending
> time on something fancy communicates the wrong priorities.  However,
> the following points will make it clear that the capabilities and
> design of dslide go far beyond the initial premise, resulting in a
> tool that is additionally useful for tech demos, authoring videos, or
> giving more polished talks in front of large audiences.
>
> - At times, one may want to use sub-headings for organizing
> information on the screen.  Org tree slide offers few options to
> control the inclusion of sub-headings, and they affect the entire
> presentation.  Dslide is instead configured per-heading.
> - Dslide uses line-height rather than line animation, enabling
> smoother transitions and easing
> - Dslide can present information incrementally, following the order in
> which a talk is conducted
> - Dslide hides the org markup used in its configuration and can also
> hide babel blocks and comments, reusing normal org mode configuration
> conventions
> - Dslide uses an indirect buffer to avoid polluting the org mode
> buffer with various presentation configurations and leftover state
> - Dslide has the capability to simultaneously "follow" the slides in
> the base buffer, updating the point and scroll position in another
> frame, enabling the presenter to read their hidden comments and see
> which actions are next while the audience sees the clean presentation.
> - Dslide does not rely on the point to control navigation, making it
> more reliable for live note taking when conducting an interactive
> meeting
> - Dslide's keymap is designed to be appropriate for a hardware cueing
> device or use of no more than arrow keys, preferably only 3 buttons.
> - Dslide's contents view is extremely clear and overloads the
> presentation keymap commands, respecting the 3-button interface limit
> - Dslide has several built-in "actions" that can consume org mode
> information, such as image links.  The image action can display image
> buffers full-frame as slides.  These actions also handle nuisance work
> such as turning on inline images.
> - Org babel blocks can be integrated as steps via an action, enabling
> scripting of entirely custom behaviors in the middle of a
> presentation.
> - Custom actions can be created and even declared in the
> presentation's own babel blocks for use in later slides.
>
> It is the babel integration that makes dslide uniquely well-suited
> among software typically used by engineers to conduct presentations
> that are fully integrated with their normal programming tools,
> enabling tech demos to be orchestrated within a reasonable
> presentation.
>
> At this time, dslide does everything that org-tree-slide does except
> filtering headings.  Even when only using the basic features, Dslide's
> breadcrumbs are more reliable and its contents view is superior.  What
> remains is maturity.  Org tree slide works better on non-graphical
> displays, but in time, especially if non-graphical terminal users
> speak up, these issues will be polished off.  Except for maturity,
> there is no use case where org-tree-slide remains favorable.  Dslide
> is vastly more capable while also doing everything org tree slide does
> better.

-- 
	Philip Kaludercic on peregrine



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

* Re: Submitting Dslide to Non-GNU ELPA
  2024-06-21  5:55             ` Philip Kaludercic
@ 2024-06-21  6:06               ` Psionic K
  2024-06-21  6:59                 ` Philip Kaludercic
  0 siblings, 1 reply; 15+ messages in thread
From: Psionic K @ 2024-06-21  6:06 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: Emacs developers

> OK, if you haven't already, then you should add a comment like this to
> the commentary section in the main file of your package.

Already covered:

;; DSL IDE is a highly programmable presentation framework that first displays
;; Org files as presentations but also can integrate your presentation with any
;; Emacs buffer and also with Org Babel.  By integrating arbitrary Emacs Lisp
;; into the simple forward-backward user interface, you can make anything Emacs
;; does easy to present.



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

* Re: Submitting Dslide to Non-GNU ELPA
  2024-06-21  6:06               ` Psionic K
@ 2024-06-21  6:59                 ` Philip Kaludercic
  2024-06-21  8:55                   ` Psionic K
  0 siblings, 1 reply; 15+ messages in thread
From: Philip Kaludercic @ 2024-06-21  6:59 UTC (permalink / raw)
  To: Psionic K; +Cc: Emacs developers

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

Psionic K <psionik@positron.solutions> writes:

>> OK, if you haven't already, then you should add a comment like this to
>> the commentary section in the main file of your package.
>
> Already covered:
>
> ;; DSL IDE is a highly programmable presentation framework that first displays
> ;; Org files as presentations but also can integrate your presentation with any
> ;; Emacs buffer and also with Org Babel.  By integrating arbitrary Emacs Lisp
> ;; into the simple forward-backward user interface, you can make anything Emacs
> ;; does easy to present.

OK, I have a patch with a few administrative suggestions that I'd
recommend you apply,


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Prepare-package-for-addition-to-NonGNU-ELPA.patch --]
[-- Type: text/x-patch, Size: 1480 bytes --]

From 194e38a2bc7314bb5cc2f0ec2471da9e2a39e663 Mon Sep 17 00:00:00 2001
From: Philip Kaludercic <philipk@posteo.net>
Date: Fri, 21 Jun 2024 08:57:30 +0200
Subject: [PATCH] Prepare package for addition to NonGNU ELPA

* .dir-locals.el: Enfore conventional defaults for all contributors in
Emacs.
* .elpaignore: List files not to be included in the Emacs package.
* .gitignore: Ignore by-products of building a package.
---
 .dir-locals.el | 8 ++++++++
 .elpaignore    | 2 ++
 .gitignore     | 5 ++++-
 3 files changed, 14 insertions(+), 1 deletion(-)
 create mode 100644 .dir-locals.el
 create mode 100644 .elpaignore

diff --git a/.dir-locals.el b/.dir-locals.el
new file mode 100644
index 0000000000..1979fe6b16
--- /dev/null
+++ b/.dir-locals.el
@@ -0,0 +1,8 @@
+;;; Directory Local Variables           -*- no-byte-compile: t; -*-
+;;; For more information see (info "(emacs) Directory Variables")
+
+((emacs-lisp-mode
+  (fill-column . 78)
+  (sentence-end-double-space . t)
+  (show-trailing-whitespace . t)
+  (indent-tabs-mode . nil)))
diff --git a/.elpaignore b/.elpaignore
new file mode 100644
index 0000000000..38f5c6a76b
--- /dev/null
+++ b/.elpaignore
@@ -0,0 +1,2 @@
+.github
+test
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index d94b62df30..0eea9c11d9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,4 +2,7 @@ README.html
 index.html
 *.elc
 .DS_Store
-trash
\ No newline at end of file
+trash
+
+/dslide-pkg.el
+/dslide-autoloads.el
-- 
2.45.2


[-- Attachment #3: Type: text/plain, Size: 395 bytes --]


Otherwise my last questions are what to use for the package description.
Your README seems the be on the longer side, which I think isn't the
best thing for a package description.  I'd tend to just the commentary
section.

Also, you mention an Info manual, but I didn't find anything besides
doc/README.org.  Is that supposed to be installed as the manual?

-- 
	Philip Kaludercic on peregrine

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

* Re: Submitting Dslide to Non-GNU ELPA
  2024-06-21  6:59                 ` Philip Kaludercic
@ 2024-06-21  8:55                   ` Psionic K
  2024-06-21 13:42                     ` Psionic K
  2024-06-21 15:04                     ` Philip Kaludercic
  0 siblings, 2 replies; 15+ messages in thread
From: Psionic K @ 2024-06-21  8:55 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: Emacs developers

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

> administrative suggestions

Looks good.  Applying.

> what to use for the package description.

New first paragraph of my package comments looks okay for this?

;; DSL IDE builds presentations on top of org mode documents.  It integrates
;; with arbitrary buffers and org babel, making anything Emacs can do easy
to
;; incorporate into a presentation.  Headers are configured with extensible
;; actions.  Custom steps can be scripted with babel blocks or made into
;; reusable custom actions.  DSL IDE achieves a good result with no
preparation
;; but can achieve anything Emacs can display if you need it to.

> Also, you mention an Info manual, but I didn't find anything besides
> doc/README.org.  Is that supposed to be installed as the manual?

I didn't get around to that yet.  I intend to break up the readme and
export a texinfo to /doc/dslide.texi.  IIRC this location is compatible
with ELPA package archives.

[-- Attachment #2: Type: text/html, Size: 1026 bytes --]

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

* Re: Submitting Dslide to Non-GNU ELPA
  2024-06-21  8:55                   ` Psionic K
@ 2024-06-21 13:42                     ` Psionic K
  2024-06-21 15:04                     ` Philip Kaludercic
  1 sibling, 0 replies; 15+ messages in thread
From: Psionic K @ 2024-06-21 13:42 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: Emacs developers

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

I pushed updates.  I declined two changes and wanted to point them out:

>  (defun dslide--list-item-contains (item loc)
> -  (when item
> -    (let ((beg (car item))
> -          (end (car (last item))))
> -      (and  (>= loc beg)
> -            (< loc end)))))
> +  (and item (<= (car item) loc (+ (car (last item))))))

I omitted the call to `+'.  No idea what it could do there.  `item' is an
org item, which will always contain an integer in this situation.

I did not use `message--max' because it produced a compiler warning.

If either of these are still recommended, just let me know.

[-- Attachment #2: Type: text/html, Size: 840 bytes --]

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

* Re: Submitting Dslide to Non-GNU ELPA
  2024-06-21  8:55                   ` Psionic K
  2024-06-21 13:42                     ` Psionic K
@ 2024-06-21 15:04                     ` Philip Kaludercic
  2024-06-22  0:47                       ` Psionic K
  1 sibling, 1 reply; 15+ messages in thread
From: Philip Kaludercic @ 2024-06-21 15:04 UTC (permalink / raw)
  To: Psionic K; +Cc: Emacs developers

Psionic K <psionik@positron.solutions> writes:

>> administrative suggestions
>
> Looks good.  Applying.
>
>> what to use for the package description.
>
> New first paragraph of my package comments looks okay for this?
>
> ;; DSL IDE builds presentations on top of org mode documents.  It integrates
> ;; with arbitrary buffers and org babel, making anything Emacs can do easy to
> ;; incorporate into a presentation.  Headers are configured with extensible
> ;; actions.  Custom steps can be scripted with babel blocks or made into
> ;; reusable custom actions.  DSL IDE achieves a good result with no preparation
> ;; but can achieve anything Emacs can display if you need it to.

LGTM

>> Also, you mention an Info manual, but I didn't find anything besides
>> doc/README.org.  Is that supposed to be installed as the manual?
>
> I didn't get around to that yet.  I intend to break up the readme and
> export a texinfo to /doc/dslide.texi.  IIRC this location is compatible
> with ELPA package archives.

ELPA will not automatically choose some path to use for the
documentation.  Instead we have to explicitly give some path in the
package specification.  This can be a .org file as well, that the build
server will compile to a .texi and then an .info file.

Psionic K <psionik@positron.solutions> writes:

> I pushed updates.  I declined two changes and wanted to point them out:
>
>>  (defun dslide--list-item-contains (item loc)
>> -  (when item
>> -    (let ((beg (car item))
>> -          (end (car (last item))))
>> -      (and  (>= loc beg)
>> -            (< loc end)))))
>> +  (and item (<= (car item) loc (+ (car (last item))))))
>
> I omitted the call to `+'.  No idea what it could do there.  `item' is an
> org item, which will always contain an integer in this situation.

That was a typo, I meant to use (1+ ...), since we have now replaced the
(< loc end) with a (<= loc end), which is not correct, while (< loc (1+
end)) is.

> I did not use `message--max' because it produced a compiler warning.

Here as well, I believe that was a failed experiment, where I just
removed the log from message-log-max.  Ignore that.

> If either of these are still recommended, just let me know.

-- 
	Philip Kaludercic on peregrine



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

* Re: Submitting Dslide to Non-GNU ELPA
  2024-06-21 15:04                     ` Philip Kaludercic
@ 2024-06-22  0:47                       ` Psionic K
  2024-07-02 15:41                         ` Psionic K
  0 siblings, 1 reply; 15+ messages in thread
From: Psionic K @ 2024-06-22  0:47 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: Emacs developers

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

> ELPA will not automatically choose some path to use for the
> documentation.

So, after I set up my export scheme and produce a texi, I'll send an
email.  It's in the TODO list, but I don't intend to complete it before
publishing.

The /test/demo.org file is the most useful documentation for quickly
getting up and running.  I was considering including this, though it's not
clear how I should expose this file to users.  In other such cases with
useful static files, are they linked via the manual?  Opened via command?

[-- Attachment #2: Type: text/html, Size: 693 bytes --]

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

* Re: Submitting Dslide to Non-GNU ELPA
  2024-06-22  0:47                       ` Psionic K
@ 2024-07-02 15:41                         ` Psionic K
  0 siblings, 0 replies; 15+ messages in thread
From: Psionic K @ 2024-07-02 15:41 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: Emacs developers

Is anything blocked on me for dslide?



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

end of thread, other threads:[~2024-07-02 15:41 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-20  6:02 Submitting Dslide to Non-GNU ELPA Psionic K
2024-06-20  8:05 ` Philip Kaludercic
2024-06-20  8:57   ` Psionic K
2024-06-20 13:28     ` Philip Kaludercic
2024-06-20 16:16       ` Psionic K
2024-06-20 17:53         ` Philip Kaludercic
2024-06-20 23:34           ` Psionic K
2024-06-21  5:55             ` Philip Kaludercic
2024-06-21  6:06               ` Psionic K
2024-06-21  6:59                 ` Philip Kaludercic
2024-06-21  8:55                   ` Psionic K
2024-06-21 13:42                     ` Psionic K
2024-06-21 15:04                     ` Philip Kaludercic
2024-06-22  0:47                       ` Psionic K
2024-07-02 15:41                         ` Psionic K

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).