Emacs 折腾日记(三十四)—— org todo

在上一篇文章中,我们简单介绍了 gtd 的一些理念,并且也通过org capture 完成了 gtd 中收集的操作。gtd分为收集任务、整理、执行、回顾。本篇我想通过org todo 来聚焦整理和执行这两个步骤

整理

上一篇文章中,我们通过org capture 收集到了一些任务,针对这些任务我们还需要给每个任务安排优先级并且根据优先级来确定开始执行的时间。

显示待办事项

我们在前面的模板中,待办任务前面都是以TODO开头,这里的TODO就是org 中待办事项的一个标识。我们可以通过org-agenda来查看相关的任务。


打开该页面之后,它列举出了所有的支持的一些快捷键。例如使用t显示所有的待办事项,使用m来根据PROPTODOTAGS来查找任务。

但是第一次使用时会发现自己兴冲冲的咔咔一顿添加任务,结果到头来通过org-agedat来列举之前添加的待办任务毛都没看到,顿时好奇兴奋的心情一下跌倒谷底。

别着急这是因为我们没有告诉org-agenda该去哪里找这些待办事项。我们可以通过org-agenda-files来告诉org-agenda这个信息就像名称显示的那样org-agenda-files是一个列表成员,我们指定它去这些文件中查找待办事项;

(use-packageorg-agenda:ensurenil:custom(org-agenda-files(list"~/org/reading.org""~/org/blog.org""~/org/working.org")))

这里我设置了三个org文档,这三个文档分别记录待读书目、需要完成的博客以及工作任务。需要注意的是我们需要这几个文件真实存在否则就会报错。设置好了这个变量之后效果如下:

设定优先级

列举出所有任务之后,针对每个任务我们可以考虑如何安排这些任务,首先需要的就是考虑给它从那四个维度安排一个优先级。上面说到我们可以使用A、B、C、D 做一个标识,这里我规定优先级的顺序是:A > B > C > D

为了达到这个需求,首先我们要解决的是优先级的定义问题,因为Emacs默认只支持A/B/C这三种优先级,我需要它能支持4种。Emacs种有两个变量分别控制优先级最大值和优先级最小值,它们是org-highest-priorityorg-lowest-priority。另外还有一个变量可以设置默认的优先级org-default-priority。理论上它可以设置优先级从A到Z,但是过多的优先级并不适合。

我们可以在上面的:custom下使用下列的语句进行设置

(org-highest-priority?A)(org-lowest-priority?D)(org-default-priority?D)

设置完成之后可以使用S-UP(Shift + 上箭头)或者S-Down(Shift+下箭头)来调整优先级

设置计划执行时间和结束时间

安排好了优先级,我们就需要为每个任务安排时间了,这里可以安排计划开始时间和结束时间。

开始时间和结束时间在 org agenda 中分别是命令org-agenda-scheduleorg-agenda-deadline。它们被绑定到了快捷键C-c C-sC-c C-d上面。

当我们通过快捷键或者M-x调用这两个命令的时候,Emacs会弹出日历菜单供我们选择日期,默认提供了三个月的日期可供选择。如果不够的化,日历下方两个各有一个箭头可以向上或者向下再显示一个月。

另外可以在下方 mini-buffer 处输入+1d这样的字符表示在当前时间的1天以后,根据这个规律我们可以输入+后面跟任意的数字,然后后面加d/w/m/y来表示天、周、月、年。

设置任务属性和标签

有些任务,特别是工作中的任务我们自己可能无法单独完成,例如某个bug需要前端或者后端一起完成又或者这个bug不光前端要改后端也需要改,这个时候我们修改完了自己的部分,这个时候可以显示我们将任务派发给了其他同事。又或者这个bug牵扯到其他bug,又或者有时候需要开会或者整理需求文档,这个时候我们需要记录该任务的场地例如对于会议可以记录一下在D-01会议室。

这些可以通过设置属性和标签来描述这些信息。我个人认为它们二者在记录任务的额外信息时没有什么大的区别。主要区别在显示方面,标签一般于TODO 信息展示在一行,而属性默认是被折叠起来的,所以对于一些简要的信息,例如任务目前是谁在处理、开会的地点这类信息我习惯放置到标签上、而属性放置一些不那么重要的信息。

对于标签,我们可以在设置任务时,在任务后面使用:TAG1:TAG2:这种方式添加多个标签。在前面介绍org-capture的文章中我给出了一个创建工作任务的模板* TODO %^{任务描述} :%^{任务类型|dev|bugfix|env|doc|meeting}:\n SCHEDULED: %^t\n PRIORITY: %^{优先级|A|B|C|D}\n %?\n %i"。任务类型部分就是一个标签,这里我只设置了一个标签。

我们可以事先使用org-tag-alist来规定一组标签以及打上这个标签所需要的快捷键。这个变量是一个列表类型,每个列表包含一个cell,cell的第一个元素是一个标签的名称,第二个元素是对应的快捷键。同时它也可以通过:groupstart:groupend来定义一组互斥的标签项。例如针对任务我们可以定义如下的标签

(org-tag-alist`((:startgroup)("dev".?d)("bugfix".?B)("env".?E)("doc".?D)("meeting".?M)("reading".?R)(:endgroup)("Sendto Tom".?T)("Sendto Jerry".?J)))

需要注意这里标签过多的话,我们需要避免出现快捷键重复的情况。设置了标签,我们可以使用C-c C-q

属性是放到:PROPERTIES:下的一组键值对,默认情况下是被折叠的。属性相对于标签来说更加灵活,能显示的信息也更加多样化。我们可以使用C-c C-x p来设置属性

设置子任务

有时候一个大的任务分为几个小任务,例如某个bug可能包含几个方面的问题甚至需要不同组的开发人员进行协调。这个时候我们可以将一个任务分解为几个子任务

org mode 中对于子任务的表现比较简单。子任务就是任务下的一个次级的 headline。我们可以在主任务后面加上[/]或者[%]来根据子任务的完成情况自动更新主任务的完成进度

从上面的截图上看,关于子任务还有两个问题没有解决,首先在将任务状态由TODO 切换到DONE时,checkbox的状态应该是勾选的。第二个问题就是当所有的子任务都完成之后应该将主任务的状态改为done。这些我暂时没有找到好的解决方案,所以不展开说明了。

任务状态切换

上面我们看到可以通过C-c C-t来切换状态,但是我们只能在TODO|DONE之间进行切换。以我个人的习惯来说,我还需要几个关键字:

  • WAIT: 等待,一般是任务完成需要等待其他人的配合,例如bug的产生可能是多个模块共同作用,需要等待其他人修改完
  • ABORT:终止
  • DOING: 正在执行

这里我说的是关键字,但是它并不代表org todo 中任务实际的状态。事实上org todo中只有两种状态,TODO和DONE表示未完成和终结,我们无法在中间插入新的状态,能做的也只有在两种状态之间插入一些新的关键字。插入新的关键字可以通过设置变量org-todo-keywords

根据Emacs的文档显示,org-todo-keywords原始的值为((sequence "TODO" "DONE"))。因为这里需要一个有序列表,也就是说Emacs会保证状态切换时按照我们定义的顺序进行切换,并且切换到最后一个关键字时会认定任务已经处于终止状态,后续可以针对这个终止状态来进行一些操作。所以这里需要通过sequence函数来保证设置的是一个有序的列表

这里我们针对终止状态设置了两个关键字DONEABORT,我们可以通过在中间插入|的方式告知Emacs,|之前的关键字是未完成的状态,|之后的是终止的状态。

我们可以在:custom下加入

(org-todo-keywords'((sequence"TODO(t)""DOING(i)""WAIT(w@/!)""|""DONE(d!)""ABORT(a@)"))))

这里后面括号中的字母表示可以在C-c C-t之后按字母快捷键快速选择状态,@表示需要由用户填写理由,例如针对等待的任务可以写明需要等待某个子模块修改完成。而后面的!表示会插入一条包括时间戳的记录。至于/则是中间的一个分隔符

现在它的效果如下:

接入番茄工作法

前面介绍了关于任务的定义和关键字的切换,现在我们的流程可能就变成了:

  • 通过org-capture收集任务
  • 将分析任务确定任务的优先级以及计划执行和结束时间
  • 通过org-agenda查看当天需要执行的任务
  • 执行任务
  • 任务完成之后切换状态

在执行任务的过程中我们可以采用番茄工作法来保证时间的高效利用。Emacs中可以嵌入有关番茄工作法的插件来做到。这里推荐使用org-pomodoro插件

(use-packageorg-pomodoro:ensuret:custom(org-prmodoro-length25);每个番茄钟25分钟(org-pomodoro-short-break-length5);; 短休5分钟(org-pomodoro-long-break-length);; 长休15分钟 (每4个番茄钟之后)(org-pomodoro-play-sounds-t);; 启用提示音)

在使用时我们可以将鼠标放置到需要执行的任务上,然后执行命令org-pomodoro。如果出现打扰的情况,例如有同事突然找到你,希望你提供帮助或者外卖电话到了要去拿外卖这个时候可以通过再次执行org-pomodoro停止计时。

我们可以看到在番茄钟启动之后下方的 minibuffer 中有番茄钟的倒计时。

到此为止,我们现在自建的任务管理系统已经可以到执行这步了,这个系统后续只剩下如何进行进行归档与回顾了。关于这部分将在下篇文章中给出我的一些实践,谢谢各位读者的关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1146312.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

硬件电路中Buck电路设计的完整指南

Buck电路设计实战指南:从原理到落地的全链路解析在嵌入式系统和现代电子设备中,电源不再是“接上就能用”的附属模块,而是决定产品成败的关键一环。随着芯片工艺进步,核心电压越来越低(1.8V、1.2V甚至0.8V)…

无源蜂鸣器多频发声实现:PWM调频技术实战案例

让蜂鸣器“唱歌”:用PWM调频实现多音阶发声的实战全解析你有没有想过,一个几毛钱的无源蜂鸣器,也能奏出《生日快乐》?在嵌入式开发中,声音提示几乎无处不在——微波炉加热完成的“嘀”,电梯到站的“叮”&am…

无源蜂鸣器驱动电路LC谐振原理探究

无源蜂鸣器还能这么玩?揭秘LC谐振驱动的“声音放大术”你有没有遇到过这样的尴尬:明明MCU的GPIO已经全速输出,可报警蜂鸣器还是“有气无力”,声音小得像蚊子叫;或者设备一响起来,EMI测试就不过关&#xff0…

Keil uVision5使用教程:一文说清RTOS在工控中的集成方法

从零开始掌握 Keil uVision5 中的 RTOS 集成:工控开发实战指南你有没有遇到过这样的场景?一个简单的温控系统,既要定时采集传感器数据,又要刷新显示屏,还得响应按键操作和串口指令。用传统的“主循环轮询”方式写代码&…

基于Multisim的模拟电路实验设计:手把手教学指南

用Multisim做模拟电路实验,真的比搭面包板还香?你有没有过这样的经历:花了一下午在面包板上连好一个放大电路,结果示波器一接,输出波形不是削顶就是振荡;查了半小时线路,发现是某个电阻焊反了&a…

高效验证环境调试技巧:SystemVerilog实用指南

高效验证环境调试实战:SystemVerilog三板斧精讲芯片验证早已不是“写个testbench跑通波形”那么简单。面对动辄百万门级的SoC设计,功能复杂度呈指数增长,传统基于Verilog的手工测试方式不仅效率低下,更难保证覆盖率和场景完备性。…

操作指南:使用设备管理器验证USB转485驱动状态

如何用设备管理器快速排查USB转485通信故障?一线工程师的实战指南 在工控现场,你是否遇到过这样的场景: 调试Modbus协议时,串口助手提示“无法打开COM端口”; 换了一台电脑,同样的线缆却再也连不上PLC&a…

OpenAMP支持的工业通信协议适配:项目应用分析

OpenAMP如何重塑工业通信:从协议适配到边缘网关实战你有没有遇到过这样的困境?在开发一款支持 EtherCAT 的边缘网关时,明明硬件性能绰绰有余,但 Linux 主系统一跑 Web 服务或日志采集,通信周期就开始抖动,原…

图解说明电路仿真软件如何仿真LLC谐振变换器

搞懂LLC谐振变换器仿真:从波形到参数,一文讲透你有没有遇到过这样的情况?设计一个LLC谐振变换器,理论计算增益曲线很漂亮,结果样机一上电——MOSFET发热严重、输出电压不稳、效率远低于预期。拆了改,改了再…

PCIe高速信号PCB布局的项目应用实例

PCIe高速信号PCB布局实战:从设计翻车到Gen4稳定运行的全过程在我们最近开发的一款工业级AI推理主板项目中,原本计划通过PCIe Gen4 x4接口直连NVMe SSD,实现高达8 GB/s的理论带宽。然而,第一版PCB打样回来后,系统却只能…

共射极放大电路教学:multisim仿真电路图操作指南

共射极放大电路实战教学:从零搭建高增益仿真系统(Multisim全流程指南)你有没有遇到过这样的情况?理论课上听得头头是道——“基极电流微小变化,引起集电极大电流”“Q点要设在负载线中间”……可一到实验台前&#xff…

零基础学习vivado使用教程:FPGA开发环境配置指南

从零开始搭建FPGA开发环境:Vivado实战入门全记录 你是否也曾面对一块FPGA开发板发呆,手握Verilog代码却不知从何下手? 你是否在安装Vivado时被“License not found”或“No hardware targets available”的报错劝退? 别担心&am…

基于异或门的奇偶校验器构建:完整示例解析

从零构建奇偶校验器:异或门背后的数字逻辑艺术你有没有遇到过这样的场景?一个嵌入式系统在工业现场突然“抽风”,明明发送的是0x41,接收端却解析成了0x43。查代码、看时序、测电源——一切看似正常,最后发现是某一位被…

超详细版fastboot驱动协议数据包结构分析

深入fastboot协议:从数据包结构到实战驱动开发你有没有遇到过这样的场景?设备变砖、系统无法启动,ADB进不去,Recovery也打不开——但只要按下“音量下电源”,进入Bootloader模式,一条fastboot flash boot b…

工业级FPGA开发:Vivado下载全流程图解说明

工业级FPGA开发实战:手把手带你搞定Vivado下载全流程在工业自动化、边缘计算和智能制造的浪潮中,FPGA因其强大的并行处理能力与硬件可重构特性,已成为实时控制、协议解析与高速信号处理的核心组件。而作为Xilinx(现AMD&#xff09…

用与非门实现8位加法器:零基础也能懂的方案

从与非门到8位加法器:用最简单的逻辑构建计算核心你有没有想过,一台计算机是怎么做加法的?它不像我们列竖式那样进位、相加、写下结果。它的“大脑”里没有数字,只有高电平和低电平——也就是1和0。而实现这一切运算的起点&#x…

vivado安装教程2018一文说清:适用于高校科研场景

Vivado 2018 安装全指南:为高校科研打造稳定可靠的 FPGA 开发环境 在今天的高校科研实验室里,FPGA 已不再是电子工程系的“专属玩具”,而是横跨人工智能、信号处理、高性能计算和嵌入式系统等多个前沿方向的核心工具。作为 Xilinx&#xff0…

一文说清SiFive平台上RISC-V指令集的异常处理机制

深入SiFive平台:RISC-V异常处理机制的实战解析你有没有遇到过这样的情况?在SiFive的开发板上跑一个裸机程序,突然来了个中断,系统却“卡死”了;或者调试时发现mepc指向了一条根本没执行过的指令?又或许你在…

并行计算加速矩阵乘法:算法优化实战案例

如何让矩阵乘法快10倍?一个真实高性能计算优化案例你有没有遇到过这样的场景:训练一个深度学习模型,光是前向传播就卡了几十秒;做一次图像卷积,等结果等到泡了三杯咖啡;跑个科学模拟,一晚上都算…

pcb原理图中高频滤波电路的配置操作指南

高频滤波电路设计实战:从原理图到电源完整性的关键一步你有没有遇到过这样的情况?FPGA莫名其妙重启、ADC采样数据“跳舞”、Wi-Fi发射杂散超标……排查数天,最后发现根源竟然是电源上一颗没放对位置的0.1μF电容?在高速电子系统中…