(with-eval-after-load 'vterm
(defun vterm-dnd-copy-path (uri)
(let* ((uri (url-unhex-string uri))
(uri (string-as-multibyte uri))
(parsed (url-generic-parse-url uri))
(path (car (url-path-and-query parsed)))
(path (concat "'" path "'")))
(vterm-send-string path)))
(defun vterm-dnd-fallback (uri action)
(let ((dnd-protocol-alist
(rassq-delete-all
'vterm-dnd
(copy-alist dnd-protocol-alist))))
(dnd-handle-one-url nil action uri)))
(defun vterm-dnd (uri action)
(cond ((eq 'vterm-mode major-mode)
(condition-case nil
(vterm-dnd-copy-path uri)
(error
(vterm-dnd-fallback uri action))))
;; redirect to someone else
(t
(vterm-dnd-fallback uri action))))
(defun vterm-dnd-enable ()
(unless (eq (cdr (assoc "^file:///" dnd-protocol-alist))
'vterm-dnd)
(setq dnd-protocol-alist
`(("^file:///" . vterm-dnd)
,@dnd-protocol-alist))))
(defun vterm-dnd-disable ()
"Disable vterm-dnd."
(rassq-delete-all 'vterm-dnd dnd-protocol-alist))
(vterm-dnd-enable))
4 个赞