UP | HOME

Emacs org-mode 的相关笔记

Table of Contents

1. 基本操作

org-mode 能够完美解决任务管理的各种问题,包括任务/子任务的划分,关键时间的设定, 任务状态变化的跟踪,以及任务的检索和查询。 再配合 org-mode 的强大编辑功能,能够 实现很多功能,比如时间管理(GTD),项目计划和管理,工作日志等。

1.1. 列表

1.1.1. 无序列表

  • "M-<return>": 新建一个无序列表想
  • "M-<return> <tab>": 新建列表项并且缩进到下一个级别
  • "S-<left> / S-<right>": 修改列表样式

1.1.2. 有序列表

  1. 基本上和无序列表成本
  2. "S-<left> / S-<right>": 可以切换有序好无序列表
  3. "<tab>": 变换级别

1.1.3. Checklist

  • [ ] 这种的叫 checklist
  • [ ] "M-S-<return>": 新建 checklist 项
  • [X] "C-c C-c": check/uncheck
  • [-] "M-S-<return> <tab": 子选项
    • [X] sub1
    • [ ] sub2
  • [ ] 添加进度 [1/2]
    • task 1
    • task 2

1.2. 表格

  • "C-c -": 添加一个横杠
  • "M-<arrow>": 移动行和列
  • "M-S-<arrow>": 删除/新增行和列
ID x y comments note
A 2 23 bla  
B 3 9 abcdefghijklmnopqrstuvwxyz  
C 3 9 abcdefghijklmnopqrstuvwxyz  

1.3. 图片和链接

  • "C-c C-l": 插入链接
  • "C-u C-c C-l": 插入文件链接,可以通过修改变量 org-link-file-path-type 来控制相对路径和绝对路径

1.4. 格式化文本

  • italicised text
  • bold text
  • underlines
  • literal text
  • code (generally appears the same as literal text)

1.5. 代码

  • "<s [Tab]": 插入 "#+BEGINSRC #+ENDSRC" 代码块
  • "C-c '": 重新开个 buffer 来编辑代码块
  • "C-c C-c": 执行代码块

在使用执行代码是需要配置相应的代码解释器,具体如下:

(org-babel-do-load-languages
  'org-babel-load-languages
  '((js . t)
     (python . t)))
import matplotlib
import matplotlib.pyplot as plt

matplotlib.use('Agg')

filename = '../static/image/2018/10/emacs-org-mode-note-fig.png'
fig = plt.figure(figsize=(3,2))
plt.plot([1,3,2])
fig.tight_layout()
plt.savefig(filename)

return filename # return this to org-mode

2. 管理事件

2.1. "TODO" 事件

  • "C-c C-t": 变换 <un-marked> TODO DONE 状态
  • "C-c C-s": 插入 schedule
  • "C-c C-d": 插入 deadline
  • "C-S-<return>": 增加 TODO 项目
  • "S-<arrow>": 修改日期
  • "C-c / t": 显示当前文件中的所有 TODO 项目

2.2. 设置状态

;; "C-c C-t" toggle states
(setq org-todo-keywords
  org-todo-keywords
    '((sequence "TODO" "DOING" "|" "WAITING" "DONE" "CANCLE"))
  org-todo-keyword-faces
    '(("TODO" :foreground "red" :weight bold)
      ("DOING" :foreground "red" :weight bold)
      ("WAITING" :foreground "magenta")
      ("DONE" :foreground "forest green")
      ("CANCEL" :foreground "forest green")))

org-todo-keywords 值得注意的是 "|" 用来分割“待办”状态和“完成”状态。

2.3. 设置优先级

(setq org-default-priority ?B
  org-highest-priority ?A
  org-lowest-priority ?C
  org-priority-faces
   '((?A . (:foreground "#d33682" :weight bold))
     (?B . (:foreground "#c065db" :weight bold))
     (?C . (:foreground "#268bd2"))))

2.4. 设置时间戳

  • "C-c .": 插入时间戳

修改事件戳的显示方式

(setq-default org-display-custom-times t)
(setq org-time-stamp-custom-formats
  '("<%d %b %Y %a" . "<%d %b %Y %a %H:%M>"))

3. 导出其它格式

3.1. 导出 html 格式

先安装 emacs-htmlize 插件,没有该插件的支持无法导出 HTML

git clone https://github.com/hniksic/emacs-htmlize.git ~/.emacs.d/site-lisp/emacs-htmlize
(require 'htmlize)

"C-c C-e": 导出文件,然后根据提示选择相应格式

4. 代码块

4.1. Java

  1. 可以添加基础类,例如 App

    public class App {
        class Foo {
            int x;
        }
    
        public void run() {
            Foo f1 = new Foo();
            System.out.println(f1);
        }
    
        public static void main(String[] args) {
            new App().run();
        }
    }
    
  2. 也可以直接写

    System.out.println("hello world");
    
  3. 一些说明
    • :imports 导入一个或多个包,注意导入多个是使用空格分开

4.2. C++

  1. 直接编写代码

    std::vector<int> v = {1, 2, 3, 4, 5};
    
    std::vector<int>::iterator it;
    
    for(it = v.begin(); it != v.end(); ++it) {
            std::cout << *it << " ";
    }
    std::cout << std::endl;
    
  2. 一些说明
    • :includes 添加导入的同文件
    • C 使用 gcc 编译器
    • C++ 使用 g++ 编译器

5. 参考链接

  1. Pragmatice Emacs Org-mode Tutorials: org-mode 基础入门
  2. Organize Your Lift In Plain Text!: org-mode 的详细介绍
  3. Dig into Org-mode: 非常实用的 org-mode 教程
  4. An Angenda for Life with Org-mode: 高效地使用 org-mode 的日程管理解决方案
  5. Appointments/Diary: emacs org-mode 周期性时间表示方法
  6. Python Source Code Blocks in Org Mode
  7. orgmode codeblock for results
  8. Emacs org-mode examples and cookbook: 很多开箱即用的例子

Last Updated 2024-04-06 Sat 19:50. Created by Jinghui Hu at 2018-10-08 Mon 11:04.