组织模式-以纯文本组织您的生活

2020-05-25 20:22:33

org-mode是一种出色的组织工具,最初由Carsten Dominik构建,可操作纯文本文件。org-mode是Emacs的一部分。

本文档假设您已经接触过组织模式,因此议程、捕获模式等概念对您来说并不完全陌生。关于组织模式的更多信息可以在组织模式手册和WORG站点上找到。

多年来,我一直使用组织模式作为我的个人信息管理器。我从小规模开始,只使用默认的TODO和DONE关键字。我在我的工作流程中添加了一些小的更改,随着时间的推移,它演变成了本文所描述的内容。

我仍然会定期改变我的工作流程,尝试新事物。本文档描述了我当前组织模式设置中的成熟工作流程。我倾向于在实现后30天记录对工作流的更改(假设这些更改在那时仍然存在),以便新工作流有机会成熟。

本文档中描述的某些自定义Emacs设置将重置为默认值。这明确显示了我的工作流中使用的重要组织模式变量的设置,并在将来默认值发生变化时保持我的工作流行为稳定。

本文档以org文件的形式提供,您可以在Emacand中使用C-c、C-v、C-t加载该文件,这将在与org-mode.org文件相同的目录中创建org-mode.el。这将把本文档中的所有elisp示例解压到一个可以包含在.emacs文件中的文件中。

版权所有(C)2013 Bernt Hansen。根据GNU Free Documentation License 1.3版或自由软件基金会发布的任何更高版本的条款,授予复制、分发和/或修改本文档的权限;没有固定章节、没有封面文本和没有封底文本。本文档中的代码是自由软件:您可以根据自由软件基金会发布的GNU通用公共许可证的条款重新分发和/或修改它,可以是许可证的第三版,也可以是(根据您的选择)任何更高的版本。分发此代码的目的是希望它有用,但没有任何担保;甚至没有对适用性或是否适用于特定目的的默示担保。有关更多详细信息,请参阅GNU通用公共许可证。

本文档http://doc.norang.ca/org-mode.html(以其Html格式或以其组织格式)根据GNU FreeDocumentation License version1.3或更高版本(http://www.gnu.org/copyleft/fdl.html).)进行许可

代码示例和css样式表受GNUGeneral Public License v3或更高版本(http://www.gnu.org/licenses/gpl.html).)的许可。

这是本文档的2015.06-5-gf5bb版本。本文档是使用组织模式Gitversion Release_8.2.10-42-g2e1bc42的发布功能创建的。

此文档的源代码可以以纯文本组织文件的形式找到。我试着每月更新一次这份文件。

开始使用组织模式真的很容易。您只需在您的remacs启动中使用git存储库中的最新版本的org-mode几行代码即可。

我在~/git/org-mode/中保存了一份组织模式git存储库的副本。此克隆是使用。

我在我的设置中运行未编译的源文件,因此您只需要未编译的make目标。

My.emacs中的以下设置为大多数缓冲区启用组织模式。org-mode是.org、.org_archive和.txtfile的默认模式。

;组织模式;(Add-to-List';Load-Path(Expand-File-Name";~/git/org-mode/lisp";))(Add-to-List';auto-mode-list';(";\\.。\\(org\\|org_ARCHIVE\\|txt\\)$";。org-mode)(Required';org);标准密钥绑定(global-set-key";\C-cl";';org-store-link)(global-set-key";\C-ca";';org-Agenda)(global-set-key";\C-cb";';org-iswitchb)

本文档的其余部分描述了我在设置中使用的定制、如何构建组织模式文件以及其他更改以适应我想要的组织模式的工作方式。

任务被分成逻辑组或项目。对大型任务分组使用单独的组织文件,对属于一起的多个项目的文件集合使用子目录。

组织模式非常适合处理多个客户和客户项目。组织文件成为单个客户或客户项目的项目、笔记等的集合。

我工作的客户ABC有限公司有多个客户系统。将每个客户-客户的任务分离到单独的组织文件中有助于保持事情的逻辑分组,而且由于客户来来去去,这样就可以在我的议程中添加或删除整个组织文件,以便在议程视图中只显示重要的内容。

其他组织文件仅用于发布,与议程无关。有关详细信息,请参阅发布和导出。

org-mode使用C-c[和C-c]分别添加和删除文件来自动管理org-Agenda-files变量。但是,这会用显式文件名列表替换我的目录列表,这不是我想要的。如果发生这种情况,那么将新的orgfile添加到上述任何目录都不会对我的议程有所帮助,而且我可能会错过一些重要的事情。

我在org-mode-hooktoprevent中禁用了C-c[和C-c]键,弄乱了org-Agenda-filesVariable中的目录列表。我只是在我的.emacs文件中手动添加和删除目录。更改org-Agenda-files中的目录列表的情况很少发生,因为现有目录中的新文件是自动创建的。

我还禁用了注释功能C-c;因为我从未使用过这些功能。在编辑源块时,我一直不小心按下这个键序列。

在上面的示例中,我将~/git/client2放在与~/git/org不同的gitpository中。这使我可以灵活地将机密信息保留在客户端站点,并使我所有的个人信息在我使用组织模式的任何地方都可用。i在多台计算机上同步我的个人存储库,并跳过旅行时使用的非客户端笔记本电脑上的机密信息。此笔记本电脑上的org-Agenda-files不包括~/git/client2目录。

我的大多数组织文件都是以1级标题设置为主类别的。任务和项目通常从级别2开始。

这些1级任务中的每一个通常都有一个属性抽屉,指定该树中任何任务的类别。级别1标题设置如下:

*Health and Recreation:Properties::Category:Health:End:.*房屋维护:Property::Category:House:End:

我住在议事日程上。为了更快地到达议程,我将F12键映射到C-C a顺序,因为我每天都会使用它数百次。

我为我的emacs设置了以下自定义键绑定(按频率排序)。

;自定义密钥绑定(GLOBAL-SET-KEY(kbd";<;f12&>;&34;)';org-Agenda)(GLOBAL-SET-KEY(kbd";<;f5>;&34;)';bh/org-todo)(GLOBAL-SET-KEY(kbd";<;S-f5>;";)';";)';bh/set-truncate-line)(global-set-key(kbd&34;<;f8>;&34;)';org-Cycle-Agenda-files)(global-set-key(kbd&34;<;f9>;<;f9>;";)';bh/show-org-Agenda)(global-set-key(。)';bbdb)(GLOBAL-SET-KEY(kbd";<;f9&>;c&34;)';日历)(GLOBAL-SET-KEY(kbd";<;f9>;f";)';BOXQUOTE-INSERT-FILE)(GLOBAL-SET-KEY(kbd";<;f9>;g";)&#。h";)';bh/隐藏其他)(全局设置键(kbd#34;<;f9>;n&34;)';bh/toggle-next-task-display)(global-set-key(kbd";<;f9&>;i";)';bh/打卡)(全局设置键(kbd&34;;<;f9>;O";)';bh/打卡输出)(global-set-key(kbd";<;f9>;o&34;)';bh/make-org-sccratch)(global-set-key(kbd";<;f9>;r&34;)';box-region)(global-set-key(kbd&34;<;f9>;s&34;)。<;f9&>;t&34;)';bh/insert-inactive-timestamp)(global-set-key(kbd";<;f9>;T&34;)';bh/toggle-insert-inactive-timestamp)(global-set-key(kbd";<;f9>;v&34;)';可见模式)(全局设置键(kbd#34;<;f9>;l&34;)。)(global-set-key(kbd&34;<;f9>;spc&34;)';bh/最后任务时钟)(global-set-key(kbd&34;C-<;f9>;&34;)';previous-buffer)(global-set-key(kbd&34;M-<;ft。组织切换内联图像)(全局设置键(kbd";C-x nr&34;)';缩小到区域)(全局设置键(kbd";C-<;f10>;&34;)';下一个缓冲区)(全局设置键(kbd";<;f11&>;&34;)';组织时钟-。F11&>;";)';org-Clock-in)(GLOBAL-SET-KEY(kbd";C-s-<;F12&>T;&34;)';bh/SAVE-THEN-PUBLISH)(GLOBAL-SET-KEY(kbd";C-c&34;)';org-Capture)(去趣味bh/Hide-Other()(交互)(save-excursion(org。不可见-ok)(Hide-Other)(org-Cycle)(defunbh/set-truncate-lines()";切换截断行的值并刷新窗口显示。";(交互式)(setq截断行(非截断行));现在刷新窗口显示(来自simple.el的习惯用法):(save-Offsion(set-window-start(select-window)(window-start(selected-window)(deun bh/make-org-sccratch()(交互式)(find-file";/tmp/Publish/Scratch.org";)(gnus-make-directory";/tmp/Publish";))(deun bh/switch-to-sccratch.org&34;)。*Scratch*";))。

我有特殊键绑定(如F11和F12)的主要原因是键可以在任何模式下工作。如果我在GNUS摘要缓冲区中,则C-u C-c C-x C-i不起作用,但C-F11键组合起作用,这节省了我的时间,因为我不必首先访问组织模式缓冲区来打卡记录最近的任务。

我的所有组织文件都使用一组TODO关键字。组织模式信函您为每个文件定义TODO关键字,但我发现在全局范围内拥有一组标准的TODO关键字更容易,这样我就可以在我正在使用的任何组织文件中使用相同的设置。

唯一的例外是这个文档:)因为我不想让组织模式在TODO关键字出现在标题行时隐藏它。我在这个文件的顶部设置了一个虚拟的#+SEQ_TODO:FIXME FIXED条目,只是为了让我的TODO关键字在本文档中保持不变。

我在emacs中使用浅色主题。我发现这本书在阳光明媚的日子里更容易阅读。

(setq org-todo-关键字(引号((Sequence";TODO(T)";";Next(N)";|";";Done(D)";)(Sequence";Waiting(w@/!)";";Hold(h@/!)";";|";";Cancel(c@/!)";"。电话";";会议";)(setq org-todo-keyword-faces(QUOTE((";TODO";:前景";红色";:权重粗体))(";下一步";:前景";蓝色";:权重粗体)(";完成";:前景";森林绿色";:权重粗体)(";等待";:前景";橙色";:权重粗体)(";保留";:前景";洋红色";:权重粗体)(";已取消";:前景";森林绿色";:权重粗体)(";会议";:前景";森林绿色";:权重粗体)(";电话";:前景";森林绿色";:粗体)。

我使用懒惰的项目定义。我不喜欢费心手工操作这是一个项目,而不是一个项目。对我来说,项目定义非常简单。如果任务包含子任务且带有待办事项关键字,则该任务是一个项目。就是这样。

可以在任何级别定义项目-只需创建一个具有todostate关键字的任务,该任务至少有一个子任务也具有todo statekey,您就拥有了一个项目。项目使用与常规任务相同的待办事项关键字。项目的一个子任务需要标记为NEXT,以便该项目不在停滞项目列表中。

电话是特别的。它们由捕获任务在完成状态下创建。只要捕获任务处于活动状态,就会记录调用时间。如果我需要查找其他详细信息,并且想要提前关闭捕获任务,我可以只需按C-c、C-c关闭捕获任务(停止时钟),然后按f9 SPC恢复电话呼叫中的时钟,同时执行其他操作。

会议是特别的。它们是由捕获任务在完成状态下创建的。当有人打断正在进行的问题或讨论时,我会使用会议捕获模板。这是类似于电话的处理方式,我会根据讨论的内容、长度和复杂程度记录与任何人在一起的时间,并记录一些讨论内容的笔记(无论是在会议期间还是之后)。

只要捕获任务处于活动状态,就会记录会议时间。如果我需要查看其他详细信息,并且想要提前关闭捕获任务,我只需按c-c、c-c关闭捕获任务(停止时钟),然后按f9 SPC恢复会议任务中的时钟,同时我做其他事情。

快速待办事项选择允许通过从快速待办事项选择键菜单中选择适当的键,直接从任何任务待办事项状态更改为任何其他状态。这是一个很棒的功能!

允许在进入或离开待办事项状态时使用S-Left和S-Right更改待办事项状态,跳过所有正常处理。这会在待办事项状态之间循环,但会跳过设置时间戳和输入备注,当您只想修复条目的状态时,这是非常方便的。

我有几个触发器,可以根据状态更改自动为任务分配标签。如果任务移动到已取消状态,则它将获得已取消标记。将已取消的任务移回TODO会删除已取消的标记。它们用于筛选议程视图中的任务,稍后我将介绍这些内容。

(setq org-TODO-STATE-TAG-TRIGGERS(引号(";已取消";(";已取消";t))(";正在等待";(";正在等待";。t))(";保持";(";等待";)(";保持";。t)(完成(";等待";)(";等待";)(";待办事项&34;)(";取消";)(";取消";)(";下";(";等待";)(";取消";)(";取消";)(";取消";)(";取消";)(";取消";)(";保留";))(";完成";(";等待";)(";取消";)(";保留";)。

为了高效地添加新任务,我使用最少数量的捕获模板。我过去有很多捕获模板,每个org-file都有一个。我会用C-C c启动org-Capture,然后选择一个模板,该模板将任务归档到相应文件中的*Tasks下。

我发现我仍然需要将这些捕获任务重新归档到组织文件中的正确位置,所以所有这些不同的捕获模板都没有真正的帮助。从那时起,我更改了我的工作流程,以使用最少数量的捕获模板-我快速创建新任务,然后重新归档一次。这也使我在添加新组织文件时不必维护组织捕获模板。

当需要添加新任务时,我会将其分类为以下几类之一:

(setq org-directory";~/git/org";)(setq org-default-note-file";~/git/org/refile.org";);;我使用C-c启动捕获模式(global-set-key(kbd";C-c";)';org-capture);以下项目的捕获模板:TODO任务、便笺、约会、电话、会议和组织协议(setq org-Capture-Templates(QUOTE(";t";";";TODO&34;Entry(file";~/git/org/refile.org";))";*TODO%?\n%U\n%a\n";:打卡t:时钟-恢复t)(";r";&。条目(file";~/git/org/refile.org";)";*Next Response to%:From On%:Subject\nSCHEDULED:%t\n%U\n%a\n";:打卡t:时钟-恢复t:立即完成t)(";n";";备注";entry(file";~/git/org/refile.org";)。*%?:注意:\n%U\n%a\n";:打卡t:时钟恢复t)(";j";";Journal";entry(file+datetree";~/git/org/diary.org";)";*%?\n%U\n";:打卡t:时钟恢复t)(";w";";org-protocol";entry(file";~/git/org/refile.org";)";*待办事项审阅%c\n%U\n";:立即完成t)(";m";";Meeting";entry(file";~/git/org/refile.org";)";*Meeting With%?:会议:\n%U";:打卡t:时钟恢复t)(";p";";电话呼叫";entry(file";~/git/org/refile.org";)";*phone%?:电话:\n%U";:打卡t:时钟恢复t)(";h";";习惯";entry(file";~/git/org/refile.org";)";*下一个%?\n%U\n%a\nSCHEDULED:%(format-time-string\";%<;<;%Y-%m-%d%a.+1d/3d>;>;\";)\n:属性:\n:样式:习惯\n:REPEAT_TO_STATE:NEXT\n:END:\n&。

捕获模式现在处理自动打卡和退出捕获任务。现在,无需特殊挂钩,所有这些都可以开箱即用。当我启动捕获模式任务时,任务按SpecifiedBy:Clock-in t进行打卡,当任务以C-c、C-c归档时,时钟将恢复到原来的打卡任务。

快速进入和退出捕获模式任务(通常不到一分钟就可以捕获一些新的任务细节)可能会在我的任务中留下空空的时钟抽屉,这并不是真正有用的。因为我删除了长度为0:00的时钟线,所以我最终得到了一个如下所示的时钟抽屉:

;取消打卡时删除空日志抽屉(deun bh/remove-Empty-Drawer-on Clock-Out()(交互式)(save-Offsion(行首0)(org-Remove-Empty-Drawer-at";logbook";(Point)(Add-Hook';org-Clock-Out-Hook';bh/Remove-Empty-Druer-On Clock-Out';append)(保存-偏移(行开始0)(org-Remove-Empty-Drawer-At";logbook";(Point)。

我将笔记、任务、电话和组织协议任务存储在refile.org中。我过去常常使用多个文件,但我发现与单个文件相比,这样做确实没有任何优势。

通常,这个文件是空的,除了顶部的一行,它为文件中的任何内容创建了一个refile标记。

好的,我正在做一些事情,哦,是的,我必须记得去做。我不会停止我正在做的事情。我可能正在做一个我正在做的项目,我不想把注意力分散在这上面,但我不能忘记刚刚发生的这件小事。

那我该怎么做呢?点击C-c c以启动捕获模式并选择t,因为这是一项新任务,我会得到一个如下所示的缓冲区:

输入TODO项目的详细信息,C-C将其归档到refile.org中,然后直接回到我真正致力于的安全工作,因为我知道该项目不会丢失,我现在根本不必再考虑它。

我花在输入捕获笔记上的时间是计时的。捕获模板设置为自动打卡进入和退出捕获任务。这对于被打断和打电话是很好的。

重新归档任务很容易。在使用捕获模式在myrefile.org文件中收集了一系列新任务之后,我需要将这些任务移动到orrect org文件和主题中。我所有的活动组织文件都在我的org-Agenda-files变量中,对议程有贡献。

我在refile.org上收集捕获任务的时间长达一周。这些现在每天都在我的议程上突出,我通常在白天重新归档。我喜欢让我的重新归档任务列表为空。

要重新归档org中的任务,您需要告诉它您想要重新归档的位置。

在我的设置中,我让org-Agenda-files中的任何文件和当前文件都属于有效的重新归档目标列表。

我最近开始使用IDO直接完成目标。我发现这比我之前在步骤设置中完成的速度要快。起初我不喜欢IDO,但在再次阅读文档和了解C-SPC以限制目标搜索后,我发现它比我以前的完整步骤设置要好得多。现在,当我想要重新归档某些内容时,我执行C-c C-w以启动重新归档过程,然后键入某些内容以获得一些匹配的目标,然后C-SPC将匹配限制为当前列表,然后使用其他文本继续搜索以找到我需要的目标。C-j还选择当前完井作为最终目标。我很喜欢这个。我在焦油中显示了完整的轮廓路径。

..