Empv and better +project/generate-tags

This commit is contained in:
2024-10-05 23:47:12 +01:00
parent 51dfc2f7ac
commit 028ca04cfb

View File

@@ -2379,38 +2379,80 @@ and integrates slickly into image-dired. Of course,
"k" #'image-previous-line "k" #'image-previous-line
"l" #'image-forward-hscroll)) "l" #'image-forward-hscroll))
#+end_src #+end_src
** mpv ** empv
Little helper which launches an MPV process asynchronously. Emacs MPV bindings, with very cool controls for queuing files for
playing.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package emacs (use-package empv
:straight t
:defer t :defer t
:display :init
("\\*mpv\\*" (setq empv-audio-dir (expand-file-name "~/Media/audio")
(display-buffer-reuse-window display-buffer-same-window)) empv-video-dir (expand-file-name "~/Media/videos")
:config empv-audio-file-extensions '("mp3" "ogg" "wav" "m4a" "flac" "aac" "opus")
(defvar mpv-args "-v --profile=fast --hwdec=auto-copy" empv-video-file-extensions '("mkv" "mp4" "avi" "mov" "webm"))
"General arguments for mpv binary.") :hydra
(empv-hydra
(defun mpv-start-process (url) nil "Hydra for EMPV"
(message "[mpv]: Starting mpv on `%s'" url) ("(" #'empv-chapter-prev
(with-current-buffer (get-buffer-create "*mpv*") "chapter-prev" :column "playback")
(ansi-color-for-comint-mode-on) (")" #'empv-chapter-next
(comint-mode)) "chapter-next" :column "playback")
(set-process-filter (start-process-shell-command ("0" #'empv-volume-up
"mpv" "*mpv*" "volume-up" :column "playback")
(concat "mpv " mpv-args " \"" url "\"")) ("9" #'empv-volume-down
#'comint-output-filter)) "volume-down" :column "playback")
("[" #'empv-playback-speed-down
(defun mpv-open-video (&optional arg) "playback-speed-down" :column "playback")
(interactive) ("]" #'empv-playback-speed-up
(let ((url (if (stringp arg) "playback-speed-up" :column "playback")
arg ("_" #'empv-toggle-video
(expand-file-name (read-file-name "URL?: " default-directory "" t))))) "toggle-video" :column "playback")
(mpv-start-process url) ("q" #'empv-exit
(display-buffer "*mpv*"))) "exit" :column "playback")
("s" #'empv-seek
"seek" :column "playback")
("t" #'empv-toggle
"toggle" :column "playback")
("x" #'empv-chapter-select
"chapter-select" :column "playback")
("N" #'empv-playlist-prev
"playlist-prev" :column "playlist")
("C" #'empv-playlist-clear
"playlist-clear" :column "playlist")
("n" #'empv-playlist-next
"playlist-next" :column "playlist")
("p" #'empv-playlist-select
"playlist-select" :column "playlist")
("S" #'empv-playlist-shuffle
"playlist-shuffle" :column "playlist")
("a" #'empv-play-audio
"play-audio" :column "play")
("R" #'empv-play-random-channel
"play-random-channel" :column "play")
("d" #'empv-play-directory
"play-directory" :column "play")
("f" #'empv-play-file
"play-file" :column "play")
("o" #'empv-play-or-enqueue
"play-or-enqueue" :column "play")
("r" #'empv-play-radio
"play-radio" :column "play")
("v" #'empv-play-video
"play-video" :column "play")
("i" #'empv-display-current
"display-current" :column "misc")
("l" #'empv-log-current-radio-song-name
"log-current-radio-song-name" :column "misc")
("c" #'empv-copy-path
"copy-path" :column "misc")
("Y" #'empv-youtube-last-results
"youtube-last-results" :column "misc")
("y" #'empv-youtube
"youtube" :column "misc"))
:general :general
(app-leader (app-leader
"v" #'mpv-open-video)) "e" #'empv-hydra/body))
#+end_src #+end_src
** Grand Unified Debugger (GUD) ** Grand Unified Debugger (GUD)
GUD is a system for debugging, hooking into processes and GUD is a system for debugging, hooking into processes and
@@ -2837,22 +2879,25 @@ quickly generate them in C/C++ projects.
:config :config
(defun +project/generate-tags () (defun +project/generate-tags ()
(interactive) (interactive)
(let ((project (project-current))) (let* ((project (project-current))
(if (not project) (folder (format "%s" (if project
(message "+project/generate-tags: Not in project.") (project-root project)
(let ((tags-file (concat (project-root project) "TAGS")) default-directory)))
(folder (format "%s" (project-root project)))) (tags-file (concat folder "TAGS")))
(set-process-sentinel (set-process-sentinel
(start-process-shell-command (start-process-shell-command
"PROJECT-GENERATE-TAGS" "PROJECT-GENERATE-TAGS"
"*gen-tags*" "*gen-tags*"
(format "ctags -Re -f %s %s" (format "ctags -Re -f %s %s"
tags-file tags-file
(concat folder "*"))) (concat folder "*")))
(lambda (p event) (lambda (p event)
(when (string= event "finished\n") (when (string= event "finished\n")
(visit-tags-table (concat (project-root (project-current)) "TAGS")) (visit-tags-table (concat (if (project-current)
(message "Finished generating tags!"))))))))) (project-root (project-current))
default-directory)
"TAGS"))
(message "Finished generating tags!")))))))
#+end_src #+end_src
** devdocs ** devdocs
When man pages aren't enough, you need some documentation lookup When man pages aren't enough, you need some documentation lookup