org-media-note icon indicating copy to clipboard operation
org-media-note copied to clipboard

Consider transitioning from `pretty-hydra` to `transient`

Open leafarbelm opened this issue 8 months ago • 8 comments

Would you consider transitioning pretty-hidra to use transient since it's built with Emacs? This would eliminate one dependency and support all the existing features. I'm currently utilizing this if you are interested:

(transient-define-prefix org-media-note-import-transient ()
    "Transient for org-media-note import commands."
    ["Import"
     [("p" "From pbf" org-media-note-insert-note-from-pbf)
      ("n" "From Noted" org-media-note-insert-note-from-noted)
      ("t" "From org-timer" org-media-note-convert-from-org-timer)
      ("s" "From subtitle" org-media-note-insert-note-from-subtitle)
      ("c" "From chapters" org-media-note-insert-note-from-chapter-list)]])

  (transient-define-prefix org-media-note-config-transient ()
    "Transient for org-media-note config commands."
    ["Config"
     [("m" "Auto insert media item" toggle-org-media-note-auto-insert-item)
      ("s" "Auto insert screenshot" org-media-note-toggle-save-screenshot)
      ("S" "Screenshot with sub" org-media-note-toggle-screenshot-with-sub)
      ("l" org-media-note-config-ab-loop-capture-method
       :description (lambda ()
                      (format "AB-loop Clip: %s"
                              (if org-media-note-capture-ab-loop-ask-each-time
                                  "always ask" org-media-note-default-capture-ab-loop-function-name))))
      ("c" "Cite key instead of path" org-media-note-toggle-refcite)
      ("p" "Pause after insert link" org-media-note-toggle-pause-after-insertion)
      ("t" org-media-note-toggle-timestamp-pattern
       :description (lambda ()
                      (format "Timestamp format: %s"
                              (cond
                               ((eq org-media-note-timestamp-pattern 'hms) "hh:mm:ss")
                               ((eq org-media-note-timestamp-pattern 'hmsf) "hh:mm:ss.fff")))))
      ("M" org-media-note-set-separator
       :description (lambda ()
                      (format "Separator when merge: %s" org-media-note-separator-when-merge)))
      ("<right>" org-media-note-set-seek-method
       :description (lambda ()
                      (format "Seek step: %s" (org-media-note--seek-step t))))]])

  ;; Define the main transient with the sub-transients
  (transient-define-prefix org-media-note-transient ()
    "Main transient for org-media-note."
    :transient-suffix 'transient--do-stay
    [:description org-media-note--hydra-title
                  ["\nFile"
                   ("o" "Open link" org-media-note-play-smart)
                   ("j" "Toggle subtitles" (lambda () (interactive) (mpv-cycle-property "sub")))
                   ("T" "Toggle ontop" (lambda () (interactive) (mpv-cycle-property "ontop")))
                   ("c" "Increase speed" (lambda () (interactive) (org-media-note-change-speed-by 0.1)))
                   ("x" "Decrease speed" (lambda () (interactive) (org-media-note-change-speed-by -0.1)))
                   ("z" "Reset speed" org-media-note-mpv-toggle-speed)]

                  ["Playback"
                   ("<SPC>" "Play/Pause" mpv-pause)
                   ("l" (lambda () (interactive) (mpv-run-command "ab-loop"))
                    :description (lambda ()
                                   (let ((time-a (mpv-get-property "ab-loop-a"))
                                         (time-b (mpv-get-property "ab-loop-b")))
                                     (if (org-media-note--ab-loop-p)
                                         (format "Clear AB-loop (%s-%s)"
                                                 (org-media-note--seconds-to-timestamp time-a)
                                                 (org-media-note--seconds-to-timestamp time-b))
                                       (if (numberp time-a)
                                           (format "Set B of AB-loop (%s-)"
                                                   (org-media-note--seconds-to-timestamp time-a))
                                         "Set A of AB-loop")))))
                   ("g" "Jump to timestamp" org-media-note-goto-timestamp)
                   ("<left>" (lambda () (interactive) (org-media-note-seek 'backward)) :description (lambda () (format "Backward %s" (org-media-note--seek-step t))))
                   ("<right>" (lambda () (interactive) (org-media-note-seek 'forward)) :description (lambda () (format "Forward %s" (org-media-note--seek-step) t)))
                   ("C-<left>" "Previous subtitle" (lambda () (interactive) (mpv-run-command "sub-seek" -1)))
                   ("C-<right>" "Next subtitle" (lambda () (interactive) (mpv-run-command "sub-seek" 1)))
                   ("<prior>" "Previous Chapter" (lambda () (interactive) (mpv-run-command "add" "chapter" -1)))
                   ("<next>" "Next Chapter" (lambda () (interactive) (mpv-run-command "add" "chapter" 1)))]

                  ["Note"
                   ("i" "Insert timestamp" org-media-note-insert-link :transient nil)
                   ("a" "Adjust timestamp" org-media-note-adjust-timestamp-offset)
                   ("S" (lambda () (interactive)
                          (if (org-media-note--ab-loop-p)
                              (org-media-note-capture-ab-loop-and-insert)
                            (org-media-note-insert-screenshot)))
                    :description (lambda ()
                                   (if (org-media-note--ab-loop-p)
                                       "Insert ab-loop clip"
                                     "Insert Screenshot")))
                   ("s" "Insert subtitle" org-media-note-insert-sub-text)
                   ("H-m" "Merge items" org-media-note-merge-item)]

                  ["Volume"
                   ("+" "Up" (lambda () (interactive) (org-media-note-change-volume-by 5)))
                   ("-" "Down" (lambda () (interactive) (org-media-note-change-volume-by -5)))
                   ("0" "Toggle" org-media-note-mpv-toggle-volume)
                   ("m" "(un)mute" (lambda () (interactive) (mpv-cycle-property "mute")))]]

    ["Other"
     [("I" "Import" org-media-note-import-transient)
      ("C" "Config" org-media-note-config-transient)]
     ])

leafarbelm avatar Jun 06 '24 20:06 leafarbelm