这是 Emacs 和 Org 模式系列的第五篇。这篇博文是由 Org 模式的源文件生成的，其有几种格式：博客页面、演示稿 和 PDF 文档。1 Org 模式的输出1.1 背景Org 模式不仅仅只是一个议程生成程序，它也能输出许多不同的格式： LaTeX、PDF、Beamer、iCalendar（议程）、HTML、Markdown、ODT、普通文本、手册页和其它更多的复杂的格式，比如说网页文件。这也不只是一些事后的想法，这是 Org 模式的设计核心部分并且集成的很好。这一个文件可以同时是源代码、自动生成的输出、任务列表、文档和展示。有些人将 Org 模式作为他们首选的标记格式，甚至对于 LaTeX 文档也是如此。Org 模式手册中的 输出一节 有更详细的介绍。1.2 开始对于任意的 Org 模式的文档，只要按下 C-c C-e 键，就会弹出一个让你选择多种输出格式和选项的菜单。这些选项通常是次键选择，所以很容易设置和执行。例如：要输出一个 PDF 文档，按 C-c C-e l p，要输出 HMTL 格式的， 按 C-c C-e h h。对于所有的输出选项，都有许多可用的设置；详情参见手册。事实上，使用 LaTeX 格式相当于同时使用 LaTeX 和 HTML 模式，在不同的模式中插入任意的前言和设置等。1.3 第三方插件ELPA 中也包含了许多额外的输出格式，详情参见 ELPA。2 Org 模式的 Beamer 演示2.1 关于 BeamerBeamer) 是一个生成演示稿的 LaTeX 环境. 它包括了以下特性：在演示稿中自动生成结构化的元素（例如 Marburg 主题)。 在演示稿中，这个特性可以为观众提供了视觉参考。对组织演示稿有很大的帮助。主题完全支持 LaTeX2.2 Org 模式中 Beamer 的优点在 Org 模式中用 Beamer 有很多好处，总的来说：Org 模式很简单而且对可视化支持的很好，同时改变结构可以快速的重组你的材料。与 org-babel 绑定在一起，实时语法高亮源码和内嵌结果。语法通常更容易使用。我已经完全用 Org 模式和 beamer 替换掉使用 LibreOffice/Powerpoint/GoogleDocs。事实上，当我必须使用其中一种工具时，这是相当令人沮丧的，因为它们在可视化表示演讲稿结构方面远远比不上 Org 模式。2.3 标题层次Org 模式的 Beamer 会将你文档中的部分（文中定义了标题的）转换成幻灯片。当然，问题是：哪些部分？这是由 H 输出设置（org-export-headline-levels）决定的。针对不同的人，有许多不同的方法。我比较喜欢我的演示稿这样：#+OPTIONS: H:2 #+BEAMER_HEADER: \AtBeginSection{\frame{\sectionpage}}这将为每个主题提供了独立部分，以突出主题的改变然后使用级别 2（两个星号）的标题来设置幻灯片。许多 Beamer 主题也有第三个间接层次，所以你可以将 H 设为 3。2.4 主题和配置你可以在 Org 模式的文件顶部来插入几行来配置 Beamer 和 LaTeX。在本文中，例如，你可以这样定义：#+TITLE: Documents and presentations with org-mode #+AUTHOR: John Goerzen #+BEAMER_HEADER: \institute{The Changelog} #+PROPERTY: comments yes #+PROPERTY: header-args :exports both :eval never-export #+OPTIONS: H:2 #+BEAMER_THEME: CambridgeUS #+BEAMER_COLOR_THEME: default2.5 高级设置我比教喜欢修改颜色、项目符号样式等。我的配置如下：# We can't just +BEAMER_INNER_THEME: default because that picks the theme default. # Override per https://tex.stackexchange.com/questions/11168/change-bullet-style-formatting-in-beamer #+BEAMER_INNER_THEME: default #+LaTeX_CLASS_OPTIONS: [aspectratio=169] #+BEAMER_HEADER: \definecolor{links}{HTML}{0000A0} #+BEAMER_HEADER: \hypersetup{colorlinks=,linkcolor=,urlcolor=links} #+BEAMER_HEADER: \setbeamertemplate{itemize items}[default] #+BEAMER_HEADER: \setbeamertemplate{enumerate items}[default] #+BEAMER_HEADER: \setbeamertemplate{items}[default] #+BEAMER_HEADER: \setbeamercolor*{local structure}{fg=darkred} #+BEAMER_HEADER: \setbeamercolor{section in toc}{fg=darkred} #+BEAMER_HEADER: \setlength{\parskip}{\smallskipamount}在这里，aspectratio=169 将纵横比设为 16:9, 其它部分都是标准的 LaTeX/Beamer 配置。2.6 缩小 (适应屏幕)有时你会遇到一些非常大的代码示例，你可能更倾向与将幻灯片缩小以适应它们。只要按下 C-c C-c p 将 BEAMER_opt 属性设为 shrink=15\。（或者设为更大的 shrink 值）。上一张幻灯片就用到了这个。2.7 效果这就是最终的效果：3 幻灯片之间的交互3.1 交互式的 Emacs 幻灯片使用 org-tree-slide 这个插件的话，就可以在 Emacs 的右侧显示幻灯片了。 只要按下 M-x，然后输入 org-tree-slide-mode，回车，然后你就可以用 C-> 和 C-< 在幻灯片之间切换了。你可能会发现 C-c C-x C-v （即 org-toggle-inline-images）有助于使系统显示内嵌的图像。3.2 HTML 幻灯片有许多方式可以将 Org 模式的演讲稿导出为 HTML，并有不同级别的 JavaScript 集成。有关详细信息，请参见 Org 模式的 wiki 中的 非 beamer 演讲稿一节。4 更多4.1 本文中的附加资源orgmode.org beamer tutorialLaTeX wikiGenerating section title slidesShrinking content to fit on slide很棒的资源： refcard-org-beamer详情参见其 Github repo 中的 PDF 和 .org 文件。很漂亮的主题： Theme matrix4.2 下一个 Emacs 系列mu4e 邮件!via: http://changelog.complete.org/archives/9900-emacs-5-documents-and-presentations-with-org-mode作者：John Goerzen 选题：lujun9972 译者：oneforalone 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
Emacs 系列（四）：使用 Org 模式自动管理邮件及同步文档
这是 Emacs 和 Org 模式系列的第四篇。至今为止，你已经见识到了 Org 模式的强大和高效，如果你像我一样，你可能会想：“我真的很想让它在我所有的设备上同步。”或者是说：“我能在 Org 模式中转发邮件吗？”答案当然是肯定的，因为这就是 Emacs。同步由于 Org 模式只使用文本文件，所以使用任意工具都可以很容易地实现同步。我使用的是 git 的 git-remote-gcrypt。由于 git-remote-gcrypt 的一些限制，每台机器都倾向于推到自己的分支，并使用命令来控制。每台机器都会先合并其它所有的分支，然后再将合并后的结果推送到主干上。cron 作业可以实现将机器上的分支推送上去，而 elisp 会协调这一切 —— 确保在同步之前保存缓冲区，在同步之后从磁盘刷新缓冲区，等等。这篇文章的代码有点多，所以我将把它链接到 github 上，而不是写在这里。我有一个用来存放我所有的 Org 模式的文件的目录 $HOME/org，在 ~/org 目录下有个 Makefile 文件来处理同步。该文件定义了以下目标：push： 添加、提交和推送到以主机命名的分支上fetch： 一个简单的 git fetch 操作sync： 添加、提交和拉取远程的修改，合并，并（假设合并成功）将其推送到以主机命名的分支和主干上现在，在我的用户 crontab 中有这个：*/15 * * * * make -C $HOME/org push fetch 2>&1 | logger --tag 'orgsync'与之相关的 elisp 代码 定义了一个快捷键（C-c s）来调用同步。多亏了 cronjob，只要文件被保存 —— 即使我没有在另一个机器上同步 —— 它们也会被拉取进来。我发现这个设置非常好用。用 Org 模式发邮件在继续下去之前，首先要问自己一下：你真的需要它吗？ 我用的是带有 mu4e 的 Org 模式，而且它集成的也很好；任何 Org 模式的任务都可以通过 Message-id 链接到电子邮件，这很理想 —— 它可以让一个人做一些事情，比如提醒他在一周内回复一条消息。然而，Org 模式不仅仅只有提醒。它还是一个知识库、创作系统等，但是并不是我所有的邮件客户端都使用 mu4e。(注意：移动设备中有像 MobileOrg 这样的应用)。我并没有像我想的那样经常使用它，但是它有它的用途，所以我认为我也应该在这里记录它。现在我不仅想处理纯文本电子邮件。我希望能够处理附件、HTML 邮件等。这听起来很快就有问题了 —— 但是通过使用 ripmime 和 pandoc 这样的工具，情况还不错。第一步就是要用某些方法将获取到的邮件放入指定的文件夹下。扩展名、特殊用户等。然后我用一个 fetchmail 配置 来将它拉取下来并运行我自己的 insorgmail 脚本。这个脚本就是处理所有有趣的部分了。它开始用 ripmime 处理消息，用 pandoc 将 HTML 的部分转换为 Org 模式的格式。 Org 模式的层次结构是用来尽可能最好地表示 email 的结构。使用 HTML 和其他工具时，email 可能会变得相当复杂，但我发现这对于我来说是可以接受的。下一篇我最后一篇关于 Org 模式的文章将讨论如何使用它来编写文档和准备幻灯片 —— 我发现自己对 Org 模式的使用非常满意，但这需要一些调整。via: http://changelog.complete.org/archives/9898-emacs-4-automated-emails-to-org-mode-and-org-mode-syncing作者：John Goerzen 译者：oneforalone 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
这是 Emacs 和 Org 模式系列的第三篇。Todo 的跟进及关键字当你使用 Org 模式来跟进你的 TODO 时，它有多种状态。你可以用 C-c C-t 来快速切换状态。我将它设为这样：(setq org-todo-keywords '( (sequence "TODO(t!)" "NEXT(n!)" "STARTED(a!)" "WAIT(w@/!)" "OTHERS(o!)" "|" "DONE(d)" "CANCELLED(c)") ))在这里，我设置了一个任务未完成的五种状态：TODO、NEXT、STARTED、WAIT 及 OTHERS。每一个状态都有单个字的快捷键（t、n、a 等）。管道符（|）之后的状态被认为是“完成”的状态。我有两个“完成”状态：DONE（已经完成）及 CANCELLED（还没完成，但由于其它的原因无法完成）。! 的含义是记录某项更改为状态的时间。我不把这个添加到完成的状态，是因为它们已经被记录了。@ 符号表示带理由的提示，所以当切换到 WAIT 时，Org 模式会问我为什么，并将这个添加到笔记中。以下是项目状态发生变化的例子：** DONE This is a test CLOSED: [2018-03-02 Fri 03:05] - State "DONE" from "WAIT" [2018-03-02 Fri 03:05] - State "WAIT" from "TODO" [2018-03-02 Fri 03:05] \\ waiting for pigs to fly - State "TODO" from "NEXT" [2018-03-02 Fri 03:05] - State "NEXT" from "TODO" [2018-03-02 Fri 03:05]在这里，最新的项目在最上面。议程模式，日程及期限当你处在一个待办事项时，C-c C-s 或 C-c C-d 可以为其设置相应的日程或期限。这些都是在议程模式中的功能。它们的区别在于其意图和表现。日程是你希望在某个时候完成的事情，而期限是在某个特定的时间应该完成的事情。默认情况下，议程视图将在项目的截止日期前提醒你。在此过程中，议程视图将显示即将出现的项目，提供了一种基于纯文本或标记搜索项目的方法，甚至可以进行跨多个文件处理项目的批量操作。我在本系列的第 2 部分中介绍了为议程模式配置。标签Org 模式当然也支持标签了。你可以通过 C-c C-q 快速的建立标签。你可能会想为一些常用的标签设置快捷键。就像这样: (setq org-tag-persistent-alist '(("@phone" . ?p) ("@computer" . ?c) ("@websurfing" . ?w) ("@errands" . ?e) ("@outdoors" . ?o) ("MIT" . ?m) ("BIGROCK" . ?b) ("CONTACTS" . ?C) ("INBOX" . ?i) ))你还可以按文件向该列表添加标记，也可以按文件为某些内容设置标记。我就在我的 inbox.org 和 email.org 文件中设置了一个 INBOX 的标签。然后我可以每天从日程视图中查看所有标记为 INBOX 的项目，像将它们重新归档到其他文件中的这样的简单操作将让它们去掉 INBOX 标记。重新归档“重新归档”就是在文件中或其他地方移动。它是使用标题来完成的。C-c C-w 就是做这个的。我设置成这样:(setq org-outline-path-complete-in-steps nil) ; Refile in a single go (setq org-refile-use-outline-path 'file)归档分类一段时间后，你的文件就会被已经完成的事情弄得乱七八糟。Org 模式有一个归档特性，可以将主 .org 文件移到其他文件中，以备将来参考。如果你在 git 或其他软件中 有 Org 文件，你可能希望删除这些其他文件，因为无论如何都会在历史中拥有这些文件，但是我发现它们对于析取和搜索非常方便。我会定期检查并归档文件中的所有内容。基于 stackoverflow 的讨论，我有以下代码：(defun org-archive-done-tasks () (interactive) (org-map-entries (lambda () (org-archive-subtree) (setq org-map-continue-from (outline-previous-heading))) "/DONE" 'file) (org-map-entries (lambda () (org-archive-subtree) (setq org-map-continue-from (outline-previous-heading))) "/CANCELLED" 'file) )这基于一个特定的答案 —— 你可以从评论那获得一些额外的提示。现在你可以运行 M-x org-archive-done-tasks，当前文件中所有标记为 DONE 或 CANCELED 的内容都将放到另一个文件中。下一篇我将通过讨论在 Org 模式中自动接受邮件以及在不同的机器上同步来对 Org 模式进行总结。via: https://changelog.complete.org/archives/9877-emacs-3-more-on-org-mode作者：John Goerzen 选题：lujun9972 译者：oneforalone 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
在我 Emacs 系列中的第一篇文章里，我介绍了我在用了几十年的 vim 后转向了 Emacs，Org 模式就是我为什么这样做的原因。Org 模式的精简和高效真的震惊了我，它真的是个“杀手”应用。所以，Org 模式到底是什么呢？这是我昨天写的：它是一个组织信息的平台，它的主页上这样写着：“一切都是纯文本：Org 模式用于记笔记、维护待办事项列表、计划项目和使用快速有效的纯文本系统编写文档。”这是事实，但并不是很准确。Org 模式是一个你用来组织事务的小工具。它有一些非常合理的默认设置，但也允许你自己定制。主要突出在这几件事上：维护待办事项列表：项目可以分散在 Org 文件中，包含附件，有标签、截止日期、时间表。有一个方便的“日程”视图，显示需要做什么。项目也可以重复。编写文档：Org 模式有个特殊的功能来生成 HTML、LaTeX、幻灯片（用 LaTeX beamer）和其他所有的格式。它也支持直接在缓冲区中运行和以 Emacs 所支持的的语言进行 文学编程 literate programming 。如果你想要深入了解这项功能的话，参阅这篇文学式 DevOps 的文章。而 整个 Worg 网站 是用 Org 模式开发的。记笔记：对，它也能做笔记。通过全文搜索，文件的交叉引用（类似 wiki），UUID，甚至可以与其他的系统进行交互（通过 Message-ID 与 mu4e 交互，通过 ERC 的日志等等……）。入门我强烈建议去阅读 Carsten Dominik 关于 Org 模式的一篇很棒的 Google 讲话。那篇文章真的很赞。在 Emacs 中带有 Org 模式，但如果你想要个比较新的版本的话，Debian 用户可以使用命令 apt-get install org-mode 来更新，或者使用 Emacs 的包管理系统命令 M-x package-install RET org-mode RET。现在，你可能需要阅读一下 Org 模式的精简版教程中的导读部分，特别注意，你要设置下启动部分中提到的那些键的绑定。一份好的教程我会给出一些好的教程和介绍的链接，但这篇文章不会是一篇教程。特别是在本文末尾，有两个很不错的视频链接。我的一些配置我将在这里记录下一些我的配置并介绍它的作用。你没有必要每行每句将它拷贝到你的配置中 —— 这只是一个参考，告诉你哪些可以配置，要怎么在手册中查找，或许只是一个“我现在该怎么做”的参考。首先，我将 Emacs 的编码默认设置为 UTF-8。(prefer-coding-system 'utf-8) (set-language-environment "UTF-8")Org 模式中可以打开 URL。默认的，它会在 Firefox 中打开，但我喜欢用 Chromium。(setq browse-url-browser-function 'browse-url-chromium)我把基本的键的绑定和设为教程里的一样，再加上 M-RET 的操作的配置。(global-set-key "\C-cl" 'org-store-link) (global-set-key "\C-ca" 'org-agenda) (global-set-key "\C-cc" 'org-capture) (global-set-key "\C-cb" 'org-iswitchb) (setq org-M-RET-may-split-line nil)捕获配置我可以在 Emacs 的任何模式中按 C-c c，按下后它就会帮我捕获某些事，其中包括一个指向我正在处理事务的链接。你可以通过定义捕获模板来配置它。我将保存两个日志文件，作为会议、电话等的通用记录。一个是私人用的，一个是办公用的。如果我按下 C-c c j,它就会帮我捕获为私人项. 下面包含 %a 的配置是表示我当前的位置（或是我使用 C-c l 保存的链接）的链接。(setq org-default-notes-file "~/org/tasks.org") (setq org-capture-templates '( ("t" "Todo" entry (file+headline "inbox.org" "Tasks") "* TODO %?\n %i\n %u\n %a") ("n" "Note/Data" entry (file+headline "inbox.org" "Notes/Data") "* %? \n %i\n %u\n %a") ("j" "Journal" entry (file+datetree "~/org/journal.org") "* %?\nEntered on %U\n %i\n %a") ("J" "Work-Journal" entry (file+datetree "~/org/wjournal.org") "* %?\nEntered on %U\n %i\n %a") )) (setq org-irc-link-to-logs t)我喜欢通过 UUID 来建立链接，这让我在文件之间移动而不会破坏位置。当我要 Org 存储一个链接目标以便将来插入时，以下配置有助于生成 UUID。(require 'org-id) (setq org-id-link-to-org-use-id 'create-if-interactive)议程配置我喜欢将星期天作为一周的开始，当我将某件事标记为完成时，我也喜欢记下时间。(setq org-log-done 'time) (setq org-agenda-start-on-weekday 0)文件归档配置在这我将配置它，让它知道在议程中该使用哪些文件，而且在纯文本的搜索中添加一点点小功能。我喜欢保留一个通用的文件夹（我可以从其中移动或“重新归档”内容），然后将个人和工作项的任务、日志和知识库分开。 (setq org-agenda-files (list "~/org/inbox.org" "~/org/email.org" "~/org/tasks.org" "~/org/wtasks.org" "~/org/journal.org" "~/org/wjournal.org" "~/org/kb.org" "~/org/wkb.org" )) (setq org-agenda-text-search-extra-files (list "~/org/someday.org" "~/org/config.org" )) (setq org-refile-targets '((nil :maxlevel . 2) (org-agenda-files :maxlevel . 2) ("~/org/someday.org" :maxlevel . 2) ("~/org/templates.org" :maxlevel . 2) ) ) (setq org-outline-path-complete-in-steps nil) ; Refile in a single go (setq org-refile-use-outline-path 'file)外观配置我喜欢一个较漂亮的的屏幕。在你开始习惯 Org 模式之后，你可以试试这个。(add-hook 'org-mode-hook (lambda () (org-bullets-mode t))) (setq org-ellipsis "⤵")下一篇希望这篇文章展示了 Org 模式的一些功能。接下来，我将介绍如何定制 TODO 关键字和标记、归档旧任务、将电子邮件转发到 Org 模式，以及如何使用 git 在不同电脑之间进行同步。你也可以查看本系列的所有文章列表。via: https://changelog.complete.org/archives/9865-emacs-2-introducing-org-mode作者：John Goerzen 选题：lujun9972 译者：oneforalone 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
我必须承认，在使用了几十年的 vim 后， 我被 Emacs 吸引了。长期以来，我一直对如何组织安排事情感到沮丧。我也有用过 GTD 和 ZTD 之类的方法，但是像邮件或是大型文件这样的事务真的很难来组织安排。我一直在用 Asana 处理任务，用 Evernote 做笔记，用 Thunderbird 处理邮件，把 ikiwiki 和其他的一些项目组合作为个人知识库，而且还在电脑的归档了各种文件。当我的新工作需要将 Slack 也加入进来时，我终于忍无可忍了。许多 TODO 管理工具与电子邮件集成的很差。当你想做“提醒我在一周内回复这个邮件”之类的事时，很多时候是不可能的，因为这个工具不能以一种能够轻松回复的方式存储邮件。而这个问题在 Slack 上更为严重。就在那时，我偶然发现了 Carsten Dominik 在 Google Talk 上关于 Org 模式的讲话。Carsten 是 Org 模式的作者，即便是这个讲话已经有 10 年了，但它仍然很具有参考价值。我之前有用过 Org 模式，但是每次我都没有真正的深入研究它， 因为我当时的反应是“一个大纲编辑器？但我需要的是待办事项列表”。我就这么错过了它。但实际上 Org 模式就是我所需要的。什么是 Emacs？什么是 Org 模式？Emacs 最初是一个文本编辑器，现在依然是一个文本编辑器，而且这种传统无疑贯穿始终。但是说 Emacs 是个编辑器是很不公平的。Emacs 更像一个平台或是工具包。你不仅可以用它来编辑源代码，而且配置 Emacs 本身也是编程，里面有很多模式。就像编写一个 Firefox 插件一样简单，只要几行代码，然后，模式里的操作就改变了。Org 模式也一样。确实，它是一个大纲编辑器，但它真正所包含的不止如此。它是一个信息组织平台。它的网站上写着，“你可以用纯文本来记录你的生活：你可以用 Org 模式来记笔记，处理待办事项，规划项目和使用快速有效的纯文本系统编写文档。”捕获如果你读过基于 GTD 的生产力指南，那么他们强调的一件事就是毫不费力地获取项目。这个想法是，当某件事突然出现在你的脑海里时，把它迅速输入一个受信任的系统，这样你就可以继续做你正在做的事情。Org 模式有一个专门的捕获系统。我可以在 Emacs 的任何地方按下 C-c c 键，它就会空出一个位置来记录我的笔记。最关键的是，自动嵌入到笔记中的链接可以链接到我按下 C-c c 键时正在编辑的那一行。如果我正在编辑文件，它会链回到那个文件和我所在的行。如果我正在浏览邮件，它就会链回到那封邮件（通过邮件的 Message-Id，这样它就可以在任何一个文件夹中找到邮件）。聊天时也一样，甚至是当你在另一个 Org 模式中也可也这样。这样我就可以做一个笔记，它会提醒我在一周内回复某封邮件，当我点击这个笔记中的链接时，它会在我的邮件阅读器中弹出这封邮件 —— 即使我随后将它从收件箱中存档。没错，这正是我要找的！工具套件一旦你开始使用 Org 模式，很快你就会想将所有的事情都集成到里面。有可以从网络上捕获内容的浏览器插件，也有多个 Emacs 邮件或新闻阅读器与之集成，ERC（IRC 客户端）也不错。所以我将自己从 Thunderbird 和 mairix + mutt （用于邮件归档）换到了 mu4e，从 xchat + slack 换到了 ERC。你可能不明白，我喜欢这些基于 Emacs 的工具，而不是具有相同功能的单独的工具。一个小花絮：我又在使用离线 IMAP 了！我甚至在很久以前就用过 GNUS。用一个 Emacs 进程来管理我以前也经常使用 Emacs，那时，Emacs 是一个“大”的程序（现在显示电源状态的小程序占用的内存要比 Emacs 多）。当时存在在启动时间过长的问题，但是现在已经有连接到一个正在运行的 Emacs 进程的解决方法。我喜欢用 Mod-p（一个 xmonad) 中 dzen 菜单栏的快捷方式，但是在大多数传统的桌面环境中该功能的快捷键是 Alt-F2）来启动程序（LCTT 译注：xmonad 是一种平铺桌面；dzen 是 X11 窗口下管理消息、提醒和菜单的程序）。这个设置在不运行多个 emacs 们 emacsen 时很方便，因为这样就不会在试图捕获另一个打开的文件时出问题。这中方法很简单：创建一个叫 em 的脚本并将它放到我自己的环境变量中。就像这样：#!/bin/bash exec emacsclient -c -a "" "$@"如果没有 emacs 进程存在的话，就会创建一个新的 emacs 进程，否则的话就直接使用已存在的进程。这样做还有一个好处：-nw 之类的参数工作的很好，它实际上就像在 shell 提示符下输入 emacs 一样。它很适合用于设置 EDITOR 环境变量。下一篇接下来我将讨论我的使用情况，并展示以下的配置：Org 模式，包括计算机之间的同步、捕获、日程和待办事项、文件、链接、关键字和标记、各种导出（幻灯片）等。mu4e，用于电子邮件，包括多个账户，bbdb 集成ERC，用于 IRC 和即时通讯via: http://changelog.complete.org/archives/9861-emacs-1-ditching-a-bunch-of-stuff-and-moving-to-emacs-and-org-mode作者：John Goerzen 译者：oneforalone 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
不久前，我写了一篇我的 Debian Docker 基本映像。我决定进一步扩展这个概念：在 Docker 中运行 DOS 程序。但首先，来看看题图。事实证明这是可能的，但很难。我使用了所有三种主要的 DOS 模拟器（dosbox、qemu 和 dosemu）。我让它们都能在 Docker 容器中运行，但有很多有趣的问题需要解决。都要做的事是在 DOS 环境下提供一个伪造的调制解调器。它需要作为 TCP 端口暴露在容器外部。有很多方法可以做到 —— 我使用的是 tcpser。dosbox 有一个 TCP 调制解调器接口，但事实证明，这样做太问题太多了。挑战来自你希望能够一次接受多个传入 telnet（或 TCP）连接。DOS 不是一个多任务操作系统，所以当时有很多黑客式的方法。一种是有多台物理机，每个有一根传入电话线。或者它们可能会在 DESQview、OS/2 甚至 Windows 3.1 等多任务层下运行多个伪 DOS 实例。（注意：我刚刚了解到 DESQview/X，它将 DESQview 与 X11R5 集成在一起，并取代了 Windows 3 驱动程序来把 Windows 作为 X 应用程序运行。）出于各种原因，我不想尝试在 Docker 中运行其中任何一个系统。这让我模拟了原来的多物理节点设置。从理论上讲，非常简单 —— 运行一组 DOS 实例，每个实例最多使用 1MB 的模拟 RAM，这就行了。但是这里面临挑战。在多物理节点设置中，你需要某种文件共享，因为你的节点需要访问共享的消息和文件存储。在老式的 DOS 时代，有很多笨重的方法可以做到这一点 —— Netware、LAN manager，甚至一些 PC NFS 客户端。我没有访问 Netware。我尝试了 DOS 中的 Microsoft LM 客户端，与在 Docker 容器内运行的 Samba 服务器交互。这样可以使用，但 LM 客户端即使有各种高内存技巧还是占用了很多内存，BBS 软件也无法运行。我无法在多个 dosbox 实例中挂载底层文件系统，因为 dosbox 缓存不兼容。这就是为什么我使用 dosemu 的原因。除了有比 dosbox 更完整的模拟器之外，它还有一种共享主机文件系统的方式。所以，所有这一切都在此：jgoerzen/docker-bbs-renegade。我还为其他想做类似事情的人准备了构建块：docker-dos-bbs 和底层 docker-dosemu。意外的收获是，我也试图了在 Joyent 的 Triton（基于 Solaris 的 SmartOS）下运行它。让我感到高兴的印象是，几乎可以在这下面工作。是的，在 Solaris 机器上的一个基于 Linux 的 DOS 模拟器的容器中运行 Renegade DOS BBS。via: http://changelog.complete.org/archives/9836-an-old-dos-bbs-in-a-docker-container作者：John Goerzen 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出