emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Add a new link type for video files


From: stardiviner
Subject: Add a new link type for video files
Date: Fri, 03 Jan 2020 17:07:16 +0800
User-agent: mu4e 1.3.2; emacs 27.0.50

I write a patch to add new link type:

#+begin_example
[[video:/path/to/file.mp4::00:13:20]]
#+end_example

This will open video file in specific timestamp. And it is possible to add more
options in link. Like video player arguments.

I want to ask should I add this patch to Org Mode built-in?

Here is my patch source code:

#+begin_src emacs-lisp :file "ol-video.el"
;;; [[video:/path/to/file.mp4::00:13:20]]
(defcustom org-video-link-open-command "mplayer"
  "Specify the program for openning video: link."
  :type 'string)

(defvar org-video-link-extension-list '("avi" "rmvb" "ogg" "mp4" "mkv"))

(defun org-video-link-open (uri)
  "Open video file `URI' with video player."
  (let* ((list (split-string uri "::"))
         (path (car list))
         (start-timstamp (cadr list)))
    (make-process
     :command (list org-video-link-open-command
                    "-ss" start-timstamp
                    (expand-file-name (org-link-unescape path)))
     :name "org-video-link")))

(defun org-video-complete-link (&optional arg)
  "Create a video link using completion."
  (let ((file (read-file-name "Video: " nil nil nil nil
                              #'(lambda (file)
                                  (seq-contains-p
                                   org-video-link-extension-list
                                   (file-name-extension file)))))
        (pwd (file-name-as-directory (expand-file-name ".")))
        (pwd1 (file-name-as-directory (abbreviate-file-name
                                       (expand-file-name ".")))))
    (cond ((equal arg '(16))
           (concat "video:"
                   (abbreviate-file-name (expand-file-name file))))
          ((string-match
            (concat "^" (regexp-quote pwd1) "\\(.+\\)") file)
           (concat "video:" (match-string 1 file)))
          ((string-match
            (concat "^" (regexp-quote pwd) "\\(.+\\)")
            (expand-file-name file))
           (concat "video:"
                   (match-string 1 (expand-file-name file))))
          (t (concat "video:" file)))))

(org-link-set-parameters "video"
                         :follow #'org-video-link-open
                         :complete #'org-video-complete-link)
#+end_src

-- 
[ stardiviner ]
       I try to make every word tell the meaning what I want to express.

       Blog: https://stardiviner.github.io/
       IRC(freenode): stardiviner, Matrix: stardiviner
       GPG: F09F650D7D674819892591401B5DF1C95AE89AC3
      



reply via email to

[Prev in Thread] Current Thread [Next in Thread]