从 Emacs 拷贝格式化的 org-mode 内容到其他应用程序中
我用 org-mode 写了很多东西,我想如果可以从 org 文件中复制文本,然后带格式地粘贴到其他应用程序中(例如 Word、Gmail 等)那就太好了。
好奇心战胜了我,我也想知道其他应用程序是如何做到这一点的。
它的工作原理是创建一个 富文本格式 版本的内容,然后把它放在剪贴板上。
然而仅仅复制它是不够的,它需要以RTF数据类型的身份进入剪贴板。在 Mac OSX 上,我使用 pbcopy 实现了这一点。
看看这篇文章的实战视频:https://www.youtube.com/watch?v=irkmQnggVpE
在 org-mode 中实现这一点的一个简单策略是通过导出生成 HTML,然后使用工具(如 textutil)将其转换为 RTF。比如这样。
(defun formatted-copy ()
"Export region to HTML, and copy it to the clipboard."
(interactive)
(save-window-excursion
(let* ((buf (org-export-to-buffer 'html "*Formatted Copy*" nil nil t t))
(html (with-current-buffer buf (buffer-string))))
(with-current-buffer buf
(shell-command-on-region
(point-min)
(point-max)
"textutil -stdin -format html -convert rtf -stdout | pbcopy"))
(kill-buffer buf))))
(global-set-key (kbd "H-w") 'formatted-copy)
这种方法除了方程和图像,其他的都没问题。引用也还有待改进,如何改进是一个挑战。
让我们在一些文本上试试这种方法。文本包括一些 粗体,斜体,下划线,打钩 和 原样
文本复制。
还包括一些公式的例子:H_{2}O
电离形成 H^{+}
。我们还得有一个等式:(e^{iπ} + 1 = 0)
。
我们还应该有单个引用 kitchin-2015-examp 和多个引用 kitchen-2016-autom-data,kitchen-2015-data-surfac-scien 的情况。
再加上一个代码块:
import pycse.orgmode as org
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 60, 500)
plt.figure(figsize=(4, 2))
plt.plot(np.exp(-0.1 0_sync_master.sh 1_add_new_article_manual.sh 1_add_new_article_newspaper.sh 2_start_translating.sh 3_continue_the_work.sh 4_finish.sh 5_pause.sh auto_translate.sh base.sh parse_url_by_manual.sh parse_url_by_newspaper.py parse_url_by_newspaper.sh project.cfg reformat.sh texput.log urls_checker.sh youdao.sh x) 0_sync_master.sh 1_add_new_article_manual.sh 1_add_new_article_newspaper.sh 2_start_translating.sh 3_continue_the_work.sh 4_finish.sh 5_pause.sh auto_translate.sh base.sh parse_url_by_manual.sh parse_url_by_newspaper.py parse_url_by_newspaper.sh project.cfg reformat.sh texput.log urls_checker.sh youdao.sh np.cos(x),
np.exp(-0.1 0_sync_master.sh 1_add_new_article_manual.sh 1_add_new_article_newspaper.sh 2_start_translating.sh 3_continue_the_work.sh 4_finish.sh 5_pause.sh auto_translate.sh base.sh parse_url_by_manual.sh parse_url_by_newspaper.py parse_url_by_newspaper.sh project.cfg reformat.sh texput.log urls_checker.sh youdao.sh x) 0_sync_master.sh 1_add_new_article_manual.sh 1_add_new_article_newspaper.sh 2_start_translating.sh 3_continue_the_work.sh 4_finish.sh 5_pause.sh auto_translate.sh base.sh parse_url_by_manual.sh parse_url_by_newspaper.py parse_url_by_newspaper.sh project.cfg reformat.sh texput.log urls_checker.sh youdao.sh np.sin(x))
org.figure(plt.savefig('spiral.png'),
caption='A spiral.',
attributes=[['org', ':width 100']])
print('')
org.table([['H1', 'H2'], None, [1, 2], [2, 4]],
caption='A simple table')
print('')
org.result(6 0_sync_master.sh 1_add_new_article_manual.sh 1_add_new_article_newspaper.sh 2_start_translating.sh 3_continue_the_work.sh 4_finish.sh 5_pause.sh auto_translate.sh base.sh parse_url_by_manual.sh parse_url_by_newspaper.py parse_url_by_newspaper.sh project.cfg reformat.sh texput.log urls_checker.sh youdao.sh 7)
图1:一个螺旋。
一个表:
一个简单的表
H1 | H2 |
---|---|
1 | 2 |
2 | 4 |
42
总之,这种从导出的 HTML 生成 RTF 的简单方法非常适合这些简单标记的应用场景。在获取图表、获取交叉引用、标题、适当引用等方面的改进则需要更复杂的导出方法,而且可能需要直接导出成 RTF 格式。又是一个巨大的挑战。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论