diff options
author | Aryadev Chavali <aryadev@aryadevchavali.com> | 2024-07-27 04:36:28 +0100 |
---|---|---|
committer | Aryadev Chavali <aryadev@aryadevchavali.com> | 2024-07-27 04:36:28 +0100 |
commit | 9449d51aed1c1e5b4225e42b427398ece885aabb (patch) | |
tree | 7a9b154afff21afb50bbb616f1b031dce5dee0f1 /Emacs/.config | |
parent | ca1e31f4eed71811d07309659fc4d8dccdfd50ec (diff) | |
download | dotfiles-9449d51aed1c1e5b4225e42b427398ece885aabb.tar.gz dotfiles-9449d51aed1c1e5b4225e42b427398ece885aabb.tar.bz2 dotfiles-9449d51aed1c1e5b4225e42b427398ece885aabb.zip |
(Emacs/config|elisp)~+bookmark->org-bookmark and better mpv-args
Diffstat (limited to 'Emacs/.config')
-rw-r--r-- | Emacs/.config/emacs/config.org | 2 | ||||
-rw-r--r-- | Emacs/.config/emacs/elisp/org-bookmark.el | 62 |
2 files changed, 32 insertions, 32 deletions
diff --git a/Emacs/.config/emacs/config.org b/Emacs/.config/emacs/config.org index b3ff081..97f4a6b 100644 --- a/Emacs/.config/emacs/config.org +++ b/Emacs/.config/emacs/config.org @@ -3038,7 +3038,7 @@ to the list ~org-capture-templates~. :load-path "elisp/" :general (file-leader - "b" #'+bookmark/open-bookmark) + "b" #'org-bookmark/open-bookmark) :init (with-eval-after-load "org-capture" (add-to-list diff --git a/Emacs/.config/emacs/elisp/org-bookmark.el b/Emacs/.config/emacs/elisp/org-bookmark.el index b480e50..3b4c7d1 100644 --- a/Emacs/.config/emacs/elisp/org-bookmark.el +++ b/Emacs/.config/emacs/elisp/org-bookmark.el @@ -28,10 +28,12 @@ (autoload #'org-entry-get "org") (autoload #'org-make-tags-matcher "org") -(defvar +bookmark/file (expand-file-name (concat org-directory "/bookmarks.org"))) -(defvar +bookmark/mpv-args "--ytdl-raw-options=force-ipv4= --ytdl-format=22 -v") +(defvar org-bookmark/file (expand-file-name (concat org-directory "/bookmarks.org"))) +(defvar org-bookmark/mpv-args "-v --ytdl-raw-options=force-ipv4= \ + --ytdl-format=\"bestvideo[height<=1080][fps<=60]+bestaudio/best[height<=1920]\" \ + --profile=fast --hwdec=auto-copy") -(defun +bookmark/--get-heading-data () +(defun org-bookmark/--get-heading-data () "In an org-mode buffer, with point on a heading: get the title, tags and url." (let ((heading-components (org-heading-components)) @@ -42,18 +44,18 @@ tags and url." (cl-remove-if #'(lambda (tag) (string= tag "bookmark")) tags) url))) -(defun +bookmark/--get-all-heading-data () +(defun org-bookmark/--get-all-heading-data () "In an org-mode buffer, get all the heading data (titles, tags and urls)." (cl-remove-if #'(lambda (x) (member "DONE" (nth 1 x))) ;; Extract all headings with :bookmark: tag (org-scan-tags - #'+bookmark/--get-heading-data + #'org-bookmark/--get-heading-data (cdr (org-make-tags-matcher ":bookmark:")) nil))) -(defun +bookmark/--format-heading-data (data) +(defun org-bookmark/--format-heading-data (data) "Format the heading data extracted into a pair of (TITLE+TAG . URL)." (cl-destructuring-bind (name tags url) data @@ -63,29 +65,27 @@ urls)." (string-join tags ":"))) url))) -(defvar +bookmark/--cache nil +(defvar org-bookmark/--cache nil "Cached alist constructed from bookmarks file of form (TITLE+TAG . URL).") -(defvar +bookmark/--cache-last-modified nil +(defvar org-bookmark/--cache-last-modified nil "Last modified time for bookmarks file as a float.") -(defun +bookmark/bookmarks () - "Get all bookmarks from +BOOKMARK/FILE in alist format. Results +(defun org-bookmark/bookmarks () + "Get all bookmarks from ORG-BOOKMARK/FILE in alist format. Results are cached for faster lookup." - (with-current-buffer (find-file-noselect +bookmark/file) + (with-current-buffer (find-file-noselect org-bookmark/file) (let ((cur-last-modified (float-time (visited-file-modtime)))) - ;; If no cache, or no last-modified or the file has been modified - ;; since we've last cached then recache. - (when (or (null +bookmark/--cache) - (null +bookmark/--cache-last-modified) - (not (= cur-last-modified +bookmark/--cache-last-modified))) - (setq +bookmark/--cache-last-modified cur-last-modified - +bookmark/--cache (mapcar - #'+bookmark/--format-heading-data - (+bookmark/--get-all-heading-data)))))) - +bookmark/--cache) - -(defun +bookmark/open-mpv (url) + (when (or (null org-bookmark/--cache) ; no cache + (null org-bookmark/--cache-last-modified) ; no last modified + (not (= cur-last-modified org-bookmark/--cache-last-modified))) ; file has been modified + (setq org-bookmark/--cache-last-modified cur-last-modified + org-bookmark/--cache (mapcar + #'org-bookmark/--format-heading-data + (org-bookmark/--get-all-heading-data)))))) + org-bookmark/--cache) + +(defun org-bookmark/open-mpv (url) (interactive) (message "[bookmark]: Starting MPV process") (with-current-buffer (get-buffer-create "*mpv*") @@ -93,16 +93,16 @@ are cached for faster lookup." (comint-mode)) (set-process-filter (start-process-shell-command "bookmark-mpv" "*mpv*" - (concat "mpv " +bookmark/mpv-args " \"" url "\"")) + (concat "mpv " org-bookmark/mpv-args " \"" url "\"")) #'comint-output-filter)) -(defconst +bookmark/dispatch-list +(defconst org-bookmark/dispatch-list '((("^https://\\(www.\\)?youtu\\(.\\)?be" "\\.mp4$") - . +bookmark/open-mpv) + . org-bookmark/open-mpv) (otherwise . eww)) "List of pairs of type (PATTERNS . FUNC) which is used in -+BOOKMARK/OPEN-BOOKMARK to handle opening urls. +ORG-BOOKMARK/OPEN-BOOKMARK to handle opening urls. PATTERNS is a list of one or more regexp patterns (as strings) which should match particular URLs. It can also be 'OTHERWISE @@ -112,11 +112,11 @@ the URL. FUNC is a callable or function which takes one parameter (the URL as a string) and produces some action of opening it.") -(defun +bookmark/open-bookmark () - "Open a bookmark. Uses +BOOKMARK/DISPATCH-LIST to dispatch +(defun org-bookmark/open-bookmark () + "Open a bookmark. Uses ORG-BOOKMARK/DISPATCH-LIST to dispatch opening the url to some handler function." (interactive) - (let* ((bookmarks (+bookmark/bookmarks)) + (let* ((bookmarks (org-bookmark/bookmarks)) (choice (completing-read "Choose bookmark: " (mapcar #'car bookmarks) nil t)) (pair (assoc choice bookmarks #'string=))) (if (null pair) @@ -125,7 +125,7 @@ opening the url to some handler function." (let* ((url (cdr pair)) (dispatch-choice (cl-loop - for (patterns . func) in +bookmark/dispatch-list + for (patterns . func) in org-bookmark/dispatch-list if (or (eq patterns 'otherwise) (cl-some #'(lambda (pattern) (string-match pattern url)) |