From 838edcea5994133a5d1f8170eae9a22103f7a4d9 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Sat, 30 Mar 2019 02:18:33 -0400 Subject: [PATCH] Add org export-to-clipboard commands & ox-clip These work from markdown-mode as well as org-mode. Also adds +org/export-to-clipboard-as-rich-text for pasting org/markdown rendered as RTF. --- modules/lang/org/autoload/org-export.el | 49 +++++++++++++++++++++++++ modules/lang/org/packages.el | 1 + 2 files changed, 50 insertions(+) create mode 100644 modules/lang/org/autoload/org-export.el diff --git a/modules/lang/org/autoload/org-export.el b/modules/lang/org/autoload/org-export.el new file mode 100644 index 000000000..73ff7ea6f --- /dev/null +++ b/modules/lang/org/autoload/org-export.el @@ -0,0 +1,49 @@ +;;; lang/org/autoload/org-export.el -*- lexical-binding: t; -*- +;;;###if (featurep! +export) + +(defun +org--yank-html-buffer (buffer) + (with-current-buffer buffer + (require 'ox-clip) + (cond ((or IS-WINDOWS IS-MAC) + (shell-command-on-region + (point-min) + (point-max) + (cond (IS-WINDOWS ox-clip-w32-cmd) + (IS-MAC ox-clip-osx-cmd)))) + (IS-LINUX + (let ((html (buffer-string))) + (with-temp-file "/tmp/ox-clip-md.html" + (insert html)) + (apply + 'start-process "ox-clip" "*ox-clip*" + (split-string ox-clip-linux-cmd " "))))))) + + +;; +;;; Commands + +;;;###autoload +(defun +org/export-to-clipboard (backend) + "Exports the current buffer/selection to the clipboard. + +Prompts for what BACKEND to use. See `org-export-backends' for options." + (interactive + (list (intern (completing-read "Export to: " org-export-backends)))) + (let ((buffer (org-export-to-buffer backend "*Formatted Copy*" nil nil t t))) + (unwind-protect + (with-current-buffer buffer + (kill-new (buffer-string))) + (kill-buffer (current-buffer))))) + +;;;###autoload +(defun +org/export-to-clipboard-as-rich-text (beg end) + "Export the current buffer to HTML then copies it to clipboard as rich text. + +Supports org-mode, markdown-mode, and gfm-mode buffers. In any other mode, +htmlize is used (takes what you see in Emacs and converts it to html, text +properties and font-locking et all)." + (interactive "r") + (pcase major-mode + ((or `markdown-mode `gfm-mode) + (+org--yank-html-buffer (markdown))) + (_ (ox-clip-formatted-copy beg end)))) diff --git a/modules/lang/org/packages.el b/modules/lang/org/packages.el index a69d34e8b..8652ea769 100644 --- a/modules/lang/org/packages.el +++ b/modules/lang/org/packages.el @@ -48,6 +48,7 @@ (package! ob-rust))) (when (featurep! +export) + (package! ox-clip) (package! ox-pandoc) (package! htmlize))