]>
Commit | Line | Data |
---|---|---|
51c1ed38 JN |
1 | ;;; nimcoon.el -*- lexical-binding: t; -*- |
2 | ;;; | |
3 | ;;; Usage in Doom Emacs | |
4 | ;;; Place or symlink the file into ~/.doom.d/ | |
5 | ;;; (load! "nimcoon") | |
6 | ||
7 | ;;; Non-interactive functions to respond to URL clicks | |
26229fac JN |
8 | (defun nimcoon-play-url (url &rest args) |
9 | "Play given URL in NimCoon." | |
51c1ed38 JN |
10 | (start-process "nimcoon" nil "nimcoon" url)) |
11 | ||
12 | ;; Play all YouTube URLs in NimCoon | |
13 | (setq browse-url-browser-function | |
14 | (quote | |
15 | (("youtu\\.?be" . nimcoon-play-url) | |
16 | ("." . browse-url-default-browser)))) | |
17 | ||
26229fac JN |
18 | (defun run-nimcoon(args query) |
19 | "Search by QUERY and play in NimCoon." | |
20 | (call-process "nimcoon" nil 0 nil args query)) | |
21 | ||
51c1ed38 JN |
22 | ;;; Interactive functions |
23 | (defun nimcoon-feeling-lucky-music(query) | |
24 | (interactive "sSearch query: ") | |
26229fac | 25 | (run-nimcoon "-ml" query)) |
51c1ed38 JN |
26 | |
27 | (defun nimcoon-feeling-lucky-video(query) | |
28 | (interactive "sSearch query: ") | |
26229fac | 29 | (run-nimcoon "-l" query)) |
51c1ed38 JN |
30 | |
31 | (defun nimcoon-download-video(query) | |
32 | (interactive "sSearch query: ") | |
26229fac | 33 | (run-nimcoon "-dl" query)) |
51c1ed38 JN |
34 | |
35 | (defun nimcoon-download-music(query) | |
36 | (interactive "sSearch query: ") | |
26229fac JN |
37 | (run-nimcoon "-dlm" query)) |
38 | ||
39 | ;; Assumes only one process exists. Must capture the pid of the running NimCoon process and only kill it. | |
40 | (defun nimcoon-kill-background-processes() | |
41 | "Kill NimCoon process running in the background. Useful for stopping background music." | |
42 | (interactive) | |
43 | (shell-command "kill `pgrep nimcoon` `pgrep mpv` `pgrep vlc`")) | |
44 | ||
45 | (defun nimcoon-search-video(query) | |
46 | "Search for a video by QUERY." | |
47 | (interactive "sSearch query: ") | |
48 | (with-output-to-temp-buffer "*NimCoon search results*" | |
49 | (call-process "nimcoon" nil "*NimCoon search results*" t "--non-interactive" query) | |
50 | (with-current-buffer "*NimCoon search results*" | |
51 | (org-mode)))) | |
52 | ||
53 | (defun nimcoon-search-music(query) | |
54 | "Search for a video by QUERY." | |
55 | (interactive "sSearch query: ") | |
56 | (with-output-to-temp-buffer "*NimCoon search results*" | |
57 | (call-process "nimcoon" nil "*NimCoon search results*" t "--music" "--non-interactive" query) | |
58 | (with-current-buffer "*NimCoon search results*" | |
59 | (org-mode)))) | |
51c1ed38 JN |
60 | |
61 | ;;; Keybindings | |
62 | (map! :leader | |
63 | ;;; <leader> N --- NimCoon | |
64 | (:prefix-map ("N" . "NimCoon") | |
65 | (:prefix ("d" . "Download") | |
66 | :desc "Video" "v" #'nimcoon-download-video | |
67 | :desc "Music" "m" #'nimcoon-download-music) | |
26229fac JN |
68 | (:prefix ("s" . "Search") |
69 | :desc "Video" "v" #'nimcoon-search-video | |
70 | :desc "Music" "m" #'nimcoon-search-music) | |
71 | :desc "Kill" "k" #'nimcoon-kill-process | |
51c1ed38 JN |
72 | :desc "Video" "v" #'nimcoon-feeling-lucky-video |
73 | :desc "Music" "m" #'nimcoon-feeling-lucky-music)) |