From d038151f4f961b9f728e9a608cdce4fa2d0b95ba Mon Sep 17 00:00:00 2001
From: Chris Cochrun <chris@cochrun.xyz>
Date: Wed, 10 Jan 2024 09:37:16 -0600
Subject: [PATCH] fixing corfu

---
 README.org | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++----
 init.el    | 57 +++++++++++++++++++++++++++++++++++++++++++++++----
 2 files changed, 109 insertions(+), 8 deletions(-)

diff --git a/README.org b/README.org
index 8ea3de02..2314acc0 100644
--- a/README.org
+++ b/README.org
@@ -2716,8 +2716,14 @@ Trying out corfu instead of company
   ;; Recommended: Enable Corfu globally.
   ;; This is recommended since dabbrev can be used globally (M-/).
   :init
+  (add-hook 'global-corfu-mode-hook #'evil-collection-corfu-setup)
   (global-corfu-mode)
   (corfu-echo-mode)
+  (advice-remove 'corfu--setup 'evil-normalize-keymaps)
+  (advice-remove 'corfu--teardown 'evil-normalize-keymaps)
+
+  (advice-add 'corfu--setup :after (lambda (&rest r) (evil-normalize-keymaps)))
+  (advice-add 'corfu--teardown :after  (lambda (&rest r) (evil-normalize-keymaps)))
   :general
   ('corfu-map
    "C-j" 'corfu-next
@@ -4531,7 +4537,7 @@ With empv we can perhaps control mpv much more fine grainly and even search yout
   (general-def
     :states 'normal
     :keymaps 'empv-youtube-results-mode-map
-    "q" 'quit-window
+    "q" 'kill-this-buffer
     "RET" 'empv-youtube-results-play-or-enqueue-current
     "i" 'empv-youtube-results-inspect
     "d" 'chris/empv-yt-dlp
@@ -4615,6 +4621,9 @@ q                   quit-window
 }                   tabulated-list-widen-current-column
 
 ** Elfeed
+:PROPERTIES:
+:ID:       20240109T071148.947001
+:END:
 #+begin_src emacs-lisp
 (use-package elfeed
   :commands (elfeed)
@@ -4637,6 +4646,42 @@ q                   quit-window
       (empv-play-or-enqueue url)
       (elfeed-search-untag-all-unread)))
 
+  (defun chris/empv-ytdlp-play-or-enqueue (process signal video)
+    "play or enqueue a video after ytdlp is done"
+    (when (memq (process-status process) '(exit signal)
+                (empv-play-or-enqueue video)
+                (shell-command-sentinel process signal))))
+
+  (defun chris/elfeed-ytdlp-empv ()
+    "Download the video at point and add to empv"
+    (interactive)
+    (let* ((entry (elfeed-search-selected :ignore-region))
+           (link (elfeed-entry-link entry))
+           (enclosure (elt (car (elfeed-entry-enclosures entry)) 0))
+           (url (if (string-prefix-p "https://thumbnails" enclosure)
+                    link
+                  (if (string= enclosure nil)
+                      link
+                    enclosure)))
+           (title (elfeed-entry-title entry))
+           (output-buffer (generate-new-buffer "*yt-dlp*"))
+           (proc (progn
+                   (message url)
+                   (make-process
+                    :name "yt-dlp"
+                    :buffer output-buffer
+                    :command `("yt-dlp" 
+                              "-o" "/home/chris/vids/%(title)s.%(ext)s"
+                              ,(cl-coerce url 'string)))
+                   (get-buffer-process output-buffer))))
+      
+      (elfeed-search-untag-all-unread)
+      (if (process-live-p proc)
+          (set-process-sentinel
+           proc #'(chris/empv-ytdlp-play-or-enqueue
+                   (concat "/home/chris/vids/" title ".webm")))
+        (message "No process running"))))
+
   (defun chris/elfeed-bongo-insert-item ()
     "Insert `elfeed' multimedia links in `bongo' playlist buffer.
 
@@ -4758,7 +4803,8 @@ interfere with the default `bongo-playlist-buffer'."
     "v" 'chris/elfeed-empv-play
     "h" 'chris/elfeed-bongo-switch-to-playlist
     "b" 'chris/elfeed-eww-browse
-    "o" 'chris/elfeed-org-view)
+    "o" 'chris/elfeed-org-view
+    "d" 'chris/elfeed-ytdlp-empv)
   (general-def 'normal elfeed-show-mode-map
     "o" 'chris/elfeed-org-view
     "b" 'eww))
@@ -5024,8 +5070,14 @@ Matrix.el is a decent enough matrix client built in emacs. Like it.
     "gr" 'ement-room-sync
     "R" 'ement-room-send-reaction)
   (chris/leader-keys
-    "oM" 'ement-list-rooms))
-(ement-connect :uri-prefix "http://localhost:8008" :user-id "@chriscochrun:tfcconnection.org")
+    "oM" 'ement-list-rooms
+    "el" 'ement-list-rooms
+    "ev" 'ement-view-room
+    "es" 'ement-directory-search
+    "em" 'ement-send-direct-message
+    "en" 'ement-notifications))
+
+(ement-connect :uri-prefix "http://127.0.0.1:8008" :user-id "@chriscochrun:tfcconnection.org" :password "UtK4ik#sRx^GVqr@J3YVZ@#m")
 #+end_src
 
 ** Mastodon
diff --git a/init.el b/init.el
index ba712058..23238059 100644
--- a/init.el
+++ b/init.el
@@ -1920,8 +1920,14 @@ targets."
   ;; Recommended: Enable Corfu globally.
   ;; This is recommended since dabbrev can be used globally (M-/).
   :init
+  (add-hook 'global-corfu-mode-hook #'evil-collection-corfu-setup)
   (global-corfu-mode)
   (corfu-echo-mode)
+  (advice-remove 'corfu--setup 'evil-normalize-keymaps)
+  (advice-remove 'corfu--teardown 'evil-normalize-keymaps)
+
+  (advice-add 'corfu--setup :after (lambda (&rest r) (evil-normalize-keymaps)))
+  (advice-add 'corfu--teardown :after  (lambda (&rest r) (evil-normalize-keymaps)))
   :general
   ('corfu-map
    "C-j" 'corfu-next
@@ -3264,7 +3270,7 @@ targets."
   (general-def
     :states 'normal
     :keymaps 'empv-youtube-results-mode-map
-    "q" 'quit-window
+    "q" 'kill-this-buffer
     "RET" 'empv-youtube-results-play-or-enqueue-current
     "i" 'empv-youtube-results-inspect
     "d" 'chris/empv-yt-dlp
@@ -3291,6 +3297,42 @@ targets."
       (empv-play-or-enqueue url)
       (elfeed-search-untag-all-unread)))
 
+  (defun chris/empv-ytdlp-play-or-enqueue (process signal video)
+    "play or enqueue a video after ytdlp is done"
+    (when (memq (process-status process) '(exit signal)
+                (empv-play-or-enqueue video)
+                (shell-command-sentinel process signal))))
+
+  (defun chris/elfeed-ytdlp-empv ()
+    "Download the video at point and add to empv"
+    (interactive)
+    (let* ((entry (elfeed-search-selected :ignore-region))
+           (link (elfeed-entry-link entry))
+           (enclosure (elt (car (elfeed-entry-enclosures entry)) 0))
+           (url (if (string-prefix-p "https://thumbnails" enclosure)
+                    link
+                  (if (string= enclosure nil)
+                      link
+                    enclosure)))
+           (title (elfeed-entry-title entry))
+           (output-buffer (generate-new-buffer "*yt-dlp*"))
+           (proc (progn
+                   (message url)
+                   (make-process
+                    :name "yt-dlp"
+                    :buffer output-buffer
+                    :command `("yt-dlp" 
+                              "-o" "/home/chris/vids/%(title)s.%(ext)s"
+                              ,(cl-coerce url 'string)))
+                   (get-buffer-process output-buffer))))
+      
+      (elfeed-search-untag-all-unread)
+      (if (process-live-p proc)
+          (set-process-sentinel
+           proc #'(chris/empv-ytdlp-play-or-enqueue
+                   (concat "/home/chris/vids/" title ".webm")))
+        (message "No process running"))))
+
   (defun chris/elfeed-bongo-insert-item ()
     "Insert `elfeed' multimedia links in `bongo' playlist buffer.
 
@@ -3412,7 +3454,8 @@ interfere with the default `bongo-playlist-buffer'."
     "v" 'chris/elfeed-empv-play
     "h" 'chris/elfeed-bongo-switch-to-playlist
     "b" 'chris/elfeed-eww-browse
-    "o" 'chris/elfeed-org-view)
+    "o" 'chris/elfeed-org-view
+    "d" 'chris/elfeed-ytdlp-empv)
   (general-def 'normal elfeed-show-mode-map
     "o" 'chris/elfeed-org-view
     "b" 'eww))
@@ -3626,8 +3669,14 @@ interfere with the default `bongo-playlist-buffer'."
     "gr" 'ement-room-sync
     "R" 'ement-room-send-reaction)
   (chris/leader-keys
-    "oM" 'ement-list-rooms))
-(ement-connect :uri-prefix "http://localhost:8008" :user-id "@chriscochrun:tfcconnection.org")
+    "oM" 'ement-list-rooms
+    "el" 'ement-list-rooms
+    "ev" 'ement-view-room
+    "es" 'ement-directory-search
+    "em" 'ement-send-direct-message
+    "en" 'ement-notifications))
+
+(ement-connect :uri-prefix "http://127.0.0.1:8008" :user-id "@chriscochrun:tfcconnection.org" :password "UtK4ik#sRx^GVqr@J3YVZ@#m")
 
 (use-package mastodon
   :config