从 Emacs 拷贝格式化的 org-mode 内容到其他应用程序中

发布于 2023-05-19 12:59:22 字数 4487 浏览 42 评论 0

我用 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-datakitchen-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:一个螺旋。

一个表:

一个简单的表

H1H2
12
24
42

总之,这种从导出的 HTML 生成 RTF 的简单方法非常适合这些简单标记的应用场景。在获取图表、获取交叉引用、标题、适当引用等方面的改进则需要更复杂的导出方法,而且可能需要直接导出成 RTF 格式。又是一个巨大的挑战。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

世界和平

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

金兰素衣

文章 0 评论 0

ゃ人海孤独症

文章 0 评论 0

一枫情书

文章 0 评论 0

清晰传感

文章 0 评论 0

mb_XvqQsWhl

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文