visibility

  • 注:以下功能在设置完后要使用 C-c C-c 刷新 org mode

starup

1
2
3
4
#+STARTUP: overview
#+STARTUP: content
#+STARTUP: showall
#+STARTUP: showeverything

注:上面的逗号,我本没写,是 emacs 自动添加的

VISIBILITY 属性

  • 可能的值: ‘folded’, ‘children’, ‘content’, and ‘all
  • 经验证,这个不靠谱

使用 drawer

  • 只有在“#+STARUP: showeverything”时才会自动显示其他时候,自动隐藏
  • 添加 drawer 快捷键:c-c c-x d
  • drawer 隐藏更靠谱

    1
    2
    3
    
      :DRAWERNAME:
      your centent
      :END:

table

spreadsheet

formula syntax 公式格式

  • 一般情况 if($1 < 20, teen, string(""))
  • 特别情况

    • if("$1" == "nan" || "$2" == "nan", string(""), $1 + $2); E f-1
    • 遇到公式的结果是 string 的,前面的公式也要是 string,即加上双引号

      • eg:结果“nan”,原来公式“$2”
    • 遇到公式结果是特别符号,写出来可能 org 或 calc 不能理解,同样适用

      • if("$1..$7" == "[]", string(""), vmean($1..$7))
      • eg:上面空 vector 向量,“[]”
  • 空字符串

    • string("")

formula input shortcuts 公式输入快捷键

  • range formula 区域范围公式

    • 快捷键:C-u C-c =
  • column formula 列公式(即 Excel 中常用的公式)

    • 快捷键:

      • C-c =
      • C-u 5 C-c =

        • 带前缀参数的列公式

          • 参数:应用于下面连续的 num 个单元格
  • edit all formula 编辑所有公式

    • 快捷键:C-c '

帮助

  • 显示所有单元格坐标

    • 快捷键:C-c }

elisp 格式公式

‘'(concat (substring $1 1 2) (substring $1 0 1) (substring $1 2))’

"'(concat $1 $2)"

  • 目前为止,只发现这种方式连接与修剪字符串
  • 不能使用的形式

    • eg: '(concat (substring $1 0 (string-width $1)) $2)

hyperlink 链接

内部链接

链接的锚 target, anchor

  • 使用 <<My Target>>
    • 具体用法,参考 Org Manual
    • 注意:有#+NAME 必有 #+CAPTION
  • headline

    • 注意:

      • 不是好的锚选择
      • 即使很长,也要全名,

        • 可以使用 C-M-i 自动补全
      • headline, 在编辑中,很可能经常改变

链接

  • 中填入锚即可

  • 添加描述 description

      • 第一个[] 放锚
      • 第二个[] 放描述 description
    • 注意

      • 没有描述 description 的链接,在导出时,描述会变成数字,而不是 target
  • 使用 C-c C-x 快捷键

打开链接

  • C-c C-o
  • 使用鼠标

日期时间

格式

时间点 C-c .

  • <2020-09-21 周一>
  • <2020-09-21 周一 08:20>

重复发生的时间点

  • <2020-09-28 周一 +1w>
  • "+1d": day
  • "+1w": week
  • "+1m": month
  • "+1y": year

时间间隔(范围)“–”

  • <2020-09-21 周一>–<2020-09-28 周一>

无效日期 "<>" –> "[]"

  • [2020-09-21 周一]

Diary-style

  • 22:00-23:00 The nerd meeting on every 2nd Thursday of the month <%%(diary-float t 4 2)>

    • <%%(diary-float t 4 2)>
  • 格式

    • (diary-float 月份 星期 Nth)
  • 月份

    • t –> 表示所有的
    • 取值:1~12
  • 星期

    • 0: 星期天
    • 1~6: 周一~周六
  • Nth

    • 表示,这个日子(星期),在这个月出现的第几次
    • 取值:

      • >0

        • 正数,正向排序,如: (diary-float t 4 2) 表示第二个星期四
      • <0

        • 负数,逆序

更多格式

  • Org Manual -> Dates and Times -> Creating Timestamps -> the date/time prompt

创建

当前 C-c .

  • 不带时间 C-c . <2020-09-21 周一>
  • 带时间 C-u C-c . <2020-09-21 周一 22:35>

无效日期 C-c !

  • 不带时间 [2020-09-21 周一]
  • 带时间 [2020-09-21 周一 22:30]

格式修复 C-c C-c

使用日历 输入

  • C-c >

    • 打开日历
    • 可以移动光标,到想要的日期
  • C-c <

    • 提取日期
    • 提取,日历上面选定的日期
    • C-c . 的快速方式

操纵日期时间

打开日期 C-c C-o

  • org-open-at-point

修改日期

  • 加天数 S-<RIGHT>
  • 减天数 S-<LEFT> [2020-09-10 周四 03:05]

修改时间

  • 加 S-<UP>
  • 减 S-<DOWN>
  • 注意

    • 光标移动到合适的位置

    <2020-09-21 周一>–<2020-10-03 周六>

日期计算 C-c C-y

  • 原地插入结果 C-u C-c C-y
  • 注意:

    • 计算的是时间范围

    <2020-09-23 周三 11:20-20:20>–<2022-11-07 周一>

钟表计时(一个时间点 到 另一个时间点)

设置,不随 Emacs 关闭而终止计时

  • 跨 Emacs Sessions,计时
1
2
(setq org-clock-persist 'history)
(org-clock-persistence-insinuate)

计时命令

按键前缀 C-c C-x

prefix

开始计时 C-c C-x C-i

clock in

停止计时 C-c C-x C-o

clock out

重启计时 C-c C-x C-x

  • 默认重新启动光标下的任务即时

重启计时(带任务选择菜单) C-u C-c C-x C-x

  • 可以用来切换计时任务

    • 比如,正在做 Task A, 中间切换到 Task B
    • 这个命令,会自动暂停 Task A

刷新计时 C-c C-x C-e

  • estimate, 统计

取消计时 C-c C-x C-q

跳转到计时位置 C-c C-x C-j

jump, 跳转到正在计时的 headline

汇总 org-clock-report

(显眼地)显示总计时 C-c C-x C-d

统计的是,一个 Task,所有的时间段的“总”计时

Test Area

CLOCK: [2022-02-20 日 23:05]–[2022-02-20 日 23:08] => 0:03 CLOCK: [2020-09-22 周二 00:37]–[2020-09-24 周四 21:02] => 68:25 CLOCK: [2020-09-22 周二 00:21]–[2020-09-22 周二 00:36] => 0:15 CLOCK: [2020-09-22 周二 00:19]–[2020-09-22 二 00:25] => 0:06

HeadlineTime
Total time2d 21:53
Clock summary at [2022-02-20 日 23:09]
dfdferer
TODO sdfdf
  • State "TODO" from [2020-09-24 周四 20:39]
    hello todo note 01
task demo01

CLOCK: [2020-09-24 周四 21:11]–[2020-09-24 周四 22:02] => 0:51 CLOCK: [2020-09-24 周四 21:11]–[2020-09-24 周四 21:11] => 0:00 CLOCK: [2020-09-24 周四 20:52]–[2020-09-24 周四 20:55] => 0:03

To Cancel demo02

CLOCK: [2020-09-24 周四 21:08]–[2020-09-24 周四 21:08] => 0:00 CLOCK: [2020-09-24 周四 21:00]–[2020-09-24 周四 21:00] => 0:00

  • to cancel demo
task try restart

CLOCK: [2020-09-24 周四 20:52]–[2020-09-24 周四 20:55] => 0:03

task try start with menu

CLOCK: [2020-09-24 周四 20:48]–[2020-09-24 周四 20:55] => 0:07

倒计时(秒表)

开始倒计时 C-c C-x ;

当前(插入)剩余时间 C-c C-x .

  • 记录的是 time stamp

    • eg: 0:08:40

剩余时间(带描述文字)C-c C-x -

0:01:21
描述文字
0:00:00
没有已经存在的计时器

没有已启动的计时器

  • 自动启动一个从 0 开始的正向计时器

暂停倒计时 C-c C-x ,(逗号)

继续倒计时 C-c C-x ,

停止倒计时 C-u C-c C-x ,

Test Area

hello countdown

This is a countdown note

0:00:00
hello note with stamp

计时器(秒表)

开始计时 C-c C-x 0

不从零开始的计时 C-u C-x 0

暂停和重新开始计时 C-c C-x , (逗号)

  • 与倒计时的暂停方法相同

停止计时 C-u C-c C-x ,

预估时间

  • 作用:

    • 做一个任务之前,我们会估计一下,需要多少时间
  • 使用 C-c C-x C-i 等 时间段计时,获取的时间差总和

    • 最终的应该预期和这个 EFFORT 相差不多
    • 说明你估计的挺好

实现方法

  • 使用 :EFFORT: property 设置

日程安排(Deadlines and Scheduling)

格式

  • Deadlines

    • 截止时间 –> DEADLINE
    1
    2
    
    * TODO we must finish this mission on time
    DEADLINE: <2020-09-23 周三>
  • Scheduling

    • 开工时间 –> SCHEDULED

      1
      2
      3
      
      * TODO we plan to start this job next week.
        SCHEDULED: <2020-09-21 周一>
        SCHEDULED: <2020-09-21 周一 -2d> : 推迟2天,弹出时间

带时间范围

1
2
* Have lunch
SCHEDULED: <2020-09-25 周五 12:00-13:00>
  • 使用 “-”

    • eg: <12:00-13:00>

创建

Deadline C-c C-d

DEADLINE: <2022-02-20 日>

Schedule C-c C-s

SCHEDULED: <2022-02-20 日>

检查到期的 Deadline C-c / d

  • org-check-deadlines

检查 Schedule

  • before, 已经到的(过的)Schedule: C-c / b

    • org-before-date
  • after, 还没到的 Schedule: C-c / a

    • org-after-date

重复性任务 Repeated tasks

  • 即:过一段时间,再次触发任务

格式

1
2
** TODO Pay the rent
DEADLINE: <2005-10-01 Sat +1m>
  • 注释

    • "+1m": 每隔一个月再次触发

      • h, w, d, m, y 等
      • 时,周,天,月,年

操纵

单次设置成完成 C-c C-t
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
** DONE gdfgdf
DEADLINE: <2020-09-27 周日 +0d -2h>
:PROPERTIES:
:LAST_REPEAT: [2020-09-21 周一 23:47]
:END:
- State "DONE"       from "TODO"       [2020-09-21 周一 23:47]
- State "DONE"       from "TODO"       [2020-09-21 周一 23:46]
- State "DONE"       from "TODO"       [2020-09-21 周一 23:46]
- State "DONE"       from "TODO"       [2020-09-21 周一 23:46] \\
  dfdsf
- State "DONE"       from "TODO"       [2020-09-21 周一 23:45]
- State "DONE"       from "TODO"       [2020-09-21 周一 23:45]
记录 “时间” 和 “notes” C-u C-c C-t
TODO 永久性设置完成 C-u - 1 C-c C-t
  • State "TODO" from "DONE" [2022-02-20 日 22:31]
  • 即: C-u "-1" C-c C-t

必须每次(截止日期前)都要完成的任务 "++1d" or ".+1d"

  • 如果,没有按时完成

    • "+1d"
  • 一次 C-c C-t: 即可恢复状态

    • "++1d"
  • C-c C-t: 也不可恢复

    • 如,忘记吃饭

      • 明天补吃,今天还是每次,补不过来了
      • 忘记充电,手机已经关机,充多次,也不能弥补了

Test Area

Study Java

DEADLINE: <2020-09-30 周三> SCHEDULED: <2020-09-28 周一>

dfdf

[B] Priority 优先级任务

按键: C-c , 可选值:A, B, C

raw input: =* TODO [#A]=

修改优先级可选值

1
2
(setq org-priority-lowest ?E)
(setq org-priority-highest ?B)

例子

[A] A

[B] B

[C] C

[#E] E

TODO Todo 任务

  • 设置 todo 的可选值

    1
    
    #+SEQ_TODO: NEXT(n) TODO(t) WAITING(w) SOMEDAY(s) PROJ(p) | DONE(d) CANCELLED(c)
    • 在上面 “|” 左侧的是红色,右面的是绿色
    • 生效

      • revert buffer 后,生效
      • C-c C-c 立刻生效

生成 Todo Task C-c C-t

顺序调节 S-<LEFT> 或者 S-<RIGHT>

Test Area

TODO one todo task

PROJ cancelled task

Agenda View 日程表 C-c a

文件位置

  • 必须放置在 ~/org 文件夹下,才能被侦测到

翻页

向前 f –> forword

向后 b –> backward

切换视图

天 d

周 w

年 y

follow mode 跟踪切换 task 所在文件 Shift - f

属性(Properties and Columns)

property

  • 特点

    • 与 org mode entry(条目)相关联的 key-value(键值对)
  • 作用范围

    • 可选值

      • 一个条目
      • 一个条目树 Entry tree 中的所有条目
      • 整个 org 文件
  • 具体实现

    • 一个 tag 可以有值

      • eg:

        • Release 标签

          • 可选值:1, 2, …
    • 类似 database

      • 一个 property –> database 一个字段
      • 一个条目 –> database 一个记录
      • eg:

        • 对于歌曲

          • 拥有的字段

            • 歌手
            • 风格
            • 名称
          • 把这些字段做成 标签 (property)
          • 一个条目,对应一首歌,即一条记录

语法

  • 例子

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    * CD collection
    ** Classic
    *** Goldberg Variations
        :PROPERTIES:
        :Title:     Goldberg Variations
        :Composer:  J.S. Bach
        :Artist:    Glenn Gould
        :Publisher: Deutsche Grammophon
        :NDisks:    1
        :END:

继承

  • 相关变量

    • org-use-property-inheritance

      • 可选值

        • t
        • nil
      • 继承特殊的 property

        • COLUMNS
        • CATEGORY
        • ARCHIVE
        • LOGGING

特殊的 property

  • 特点

    • 类似保留字,emacs org 另有专门用途

      • 不能个人用作它途
  • 作用

    • 设置访问特性
  • 这些值

    • TODO
    • SCHEDULED
    • DEADLINE

property 可选值设定 语法

  • 设置所有可选值

    • 语法格式

      • property 名称以 “_ALL” 结尾

        • 注意

          • 这个 特殊 property 会被默认继承
        • 对于条目树 entry tree

          1
          2
          3
          4
          5
          
          * CD collection
             :PROPERTIES:
             :NDisks_ALL: 1 2 3 4
             :Publisher_ALL: "Deutsche Grammophon" Philips EMI
             :END:
        • 对于整个文件

          1
          
          #+PROPERTY: NDisks_ALL 1 2 3 4
          • 解说

            • 这样设置条目的 NDisks 属性,可选值就成了 1, 2, 3, 4
  • 添加可选值

    • 语法格式

      • property 名称以 “+” 结尾

        • 整个文件

          1
          2
          
          #+PROPERTY: Animal cat
          #+PROPERTY: Animal+ dog
          • 解说

            • 给 Animal 设置并添加可选值 dog
        • 整个条目

           1
           2
           3
           4
           5
           6
           7
           8
           9
          10
          11
          12
          
          * CD collection
          
          ** Classic
             :PROPERTIES:
             :Genres: Classic
             :END:
          
          *** Goldberg Variations
              :PROPERTIES:
              :Title:     Goldberg Variations
              :Genres+:   Baroque
              :END:
          • 解说

            • 给 Genres 设置并添加可选值 Baroque

操纵 property

(从零)创建 C-c C-x p
设置已有 C-c C-x s
只能修改(已有) C-c C-c
徧历可选值 S-<LEFT> 和 S-<RIGHT>
插入 property drawer C-u C-c C-x d

查询

sparse tree 创建和查找 C-c \ 或者 C-c / m
  • 创建 sparse tree
M-x org-agenda m (M)
单个 property 查找 C-c / p

Test Area

demo
demo sub

Column View

  • 作用:以表格的形式,显示条目

格式设置

  • 全局设置

    1
    
    #+COLUMNS: %7TODO(To Do) %58ITEM(Task) %TAGS(Tags) %6CLOCKSUM(Clock) %EFFORT(estimate time){:}
    • 解说

      • %7TODO(To Do)

        • %7: 宽度,7 表示字符数量
        • TODO: 关联的 property 名称
        • (To Do): 注释,用于 Emacs 在顶部显示,当作表头(Column View 模式下)
      • %EFFORT(estimate time){:}

        • {:}: 表示合计

          • 把各个子条目的 EFFORT 属性值,求和
  • 本地设置

    • 使用 COLUMNS property 属性

操作

进入 Column View 模式 C-c C-x C-c

  • 注意

    • 生效位置
    • 要在 item tree 的 父节点,才能对下面的条目都生效

退出 Q (q)

退出无效
  • 先关闭文件
  • 再重新打开文件即可
  • 注意

    • 使用 M-x revert-buffer 无效

标签(tags)

定义标签可选项

1
#+TAGS: PHONE(p) COMPUTER(c) GARAGE(g) SHOPPING(s) FAMILY(f) URGENT(u)
  • 解说

    • PHONE(p)

      • (p): 定义的编辑快捷键

设置标签 C-c C-q

  • 按<TAB> 键可以输入没有预定义的标签

语法

1
#+TAGS: PHONE(p) COMPUTER(c) GARAGE(g) SHOPPING(s) FAMILY(f) URGENT(u)
  • 继承性
  • 可以有多个标签

图片

  • 使用 Caption 设置标题

    1
    2
    3
    
    #+CAPTION: My picture
    #+ATTR_HTML: alt:my_demo :align center
    [[./image/demo.png]]

预览

  • C-c C-x C-v

    • M-x org-display-inline-images

强制预览

  • C-c C-x C-M-v

    • M-x org-redisplay-inline-images

latex 与 方程公式

  • 居中格式

    1
    2
    3
    
    \begin{equation}
    x^2+y^2=1
    \end{equation}
    • \begin 开头

      • 导出时,自动加入计数
    • 以 $$ formula $$ 编写

      • 仅仅居中,不会加入计数

        1
        
        $$x^2+y^2=9$$
  • 内联格式

    • $ formula $ 样式

      1
      
         $x^2+y^2=4$

Blog 使用 Org Mode

配置

  • 示例

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    (setq org-publish-project-alist
          '(("demo-notes"
             :base-directory "~/org/blog/test"
             :base-extension "org"
             :publishing-directory "~/org_blog_export/"
             :recursive t
    
             :publishing-function org-html-publish-to-html
             :headline-levels 4
             :auto-preamble t
             )
    
            ("demo-static"
             :base-directory "~/org/blog/test"
             :base-extension "css\\|js\\|png\\|jpg\\|gif"
             :publishing-directory "~/org_blog_export/"
             :recursive t
    
             :publishing-function org-publish-attachment
             )
    
            ("demo"
             :components ("demo-notes" "demo-static")
    
             )
            )
          )

发布命令

  • M-x org-publish-project

图片

模板 Structure Template

  • 位置:Org > Miscellaneous > Structure Templates
  • 快捷键: C-c C-,

流程图

  • 使用 ditaa 外部辅助工具

    #+HEADER: :exports results
    #+begin_src ditaa :file flow.png :cmdline -r
      /--------------\
      |{d}           |
      | Hello World! |
      |              |
      \--------------/
    #+end_src
    
  • ditaa 配置

    • github
    • jar 包放置路径

      • windows:

        • D:\soft\emacs\emacs-27.1-x86_64\share\emacs\27.1\lisp\contrib\scripts
  • 绘制工具

    • 使用 picture-mode

rich format

source block

代码行数标记

  • -n : 设定起始行数

    1
    2
    
    ;; This exports with line number 20. 当前行是第 20 行
    (message "This is line 21")
  • +n : 设定为上面的代码 -n 20 加上设定的增加值

    1
    2
    
    ;; This is listed as line 31. (1) -n 20 (2) +n 10 (3) 所以 20 + 10 = 30, 当前行是30 + 1 = 31 行
    (message "This is line 32")

代码内 anchor 引用和链接

  • 设定 anchor

    1
    2
    
    (save-excursion                 ;; (ref:sc)
       (goto-char (point-min))      ;; (ref:jump)
    • 这里 (ref:sc) 和 (ref:jump) 就是 代码块 内部的 anchor
  • 链接中使用 代码快 anchor

    • 例句: (sc) 是可以跳转到代码块内部链接, link_label
    • 格式:

      • 不加 label: [[(anchor_name)]]
      • 加上 label: [[(anchor_name)][label_text]]

代码块 anchor 取消显示 -r

方法: 在 +begin_src lang 后面加上 -r 选项

水平分割线

格式:=—–= 要点:使用的横杠“-”要 不少于五个

Footnote 脚注制作

由两部分组成:

  • 脚注解释

    • 这个脚注的详细说明
  • 脚注引用

    • 给定出现地方,引用了什么,是哪个脚注

格式:

  • 分离格式

    • 脚注解释

      [fn:num] This is the detail info
      
      • 要点

        • 第 0 列 开始,才有效
        • num 是数字或者起的唯一化名字 name
    • 脚注引用

      I used the article[fn:num]
      
  • 合一模式 inline

    • 解释内容和引用放在一起
    • 格式:

      • 没有 name 自动计数形式

        This is my used article[fn:: This is the detail info]
        
      • 包含 引用名称

        This is my used article[fn:name: detail info]
        

标题 Captions

用法: 把 #CAPTION: Title info 放到要添加标题的对象上方

添加短标题: #+CAPTION[Short caption]: Longer caption.

转义字符

功能:输入 org mode 语法中的特殊字符

解决方法:

  • "\" 强制转义
  • 零宽度空格

    • 用零宽度空格打断 org mode 语法,使其变成普通文本
    • 零宽度空格输入方法

      • C-x 8 <RET> zero width space <RET>
      • C-x 8 <RET> 200B <RET>​
    • 例子

      • 下标问题(subscript)

        • constituent_dimensions 会被输出成下标
        • constituent_[零宽度空格]dimensions 就不会转换了

attachment

C-c C-a org-attatch 子命令

  • 创建

    • a

      • 根据设置,选择 attach 方法
    • c/m

      • copy / move
    • l/y

      • hard link / soft link
      • 注意 hard link 可能在有的 OS 不支持
    • b

      • buffer
    • n

      • new buffer and save as attachment
  • o : 打开当前附件
  • f : 打开文件夹
  • F : 打开文件夹,强制使用 Dired
  • d : 删除附件
  • s : 设置附件存储位置

    • 多少文件都会被存在这个目录
    • 不单独指定各个新附件的 id
  • S : 取消 附件文件夹设置

    • 文件夹本身不会删除
    • 只是不再作为作为附件目录

格式转换工具

ipynb 转换成 org-mode 文件

1
2
3
4
5
6
7
8
# 转换 .ipynb  --> .org
# v1
for i in $(find . -iname "*.ipynb" |xargs realpath) ; do pandoc  -s $i  --from=ipynb --to=org -o  $(echo $i  | python -c 'import sys;from pathlib import Path;f = Path(sys.std       in.read()).resolve();print(f.parent.joinpath(f.stem + ".org"))') ; done
# v2 使用 parallel 加速
find . -iname "*.ipynb" -exec realpath {} \; | parallel -j 10 'pandoc -s {} --from=ipynb --to=org -o $(echo {} | python -c "import sys;from pathlib import Path;f = Path(sys.stdin.read().strip());print(f.parent.joinpath(f.stem + \".org\"))")'

# 转换 .org 内部的引用  [[name.ipynb]] --> [[name.org]]
find . -iname "*.org" -exec realpath {} \; | parallel -j10 "sed 's#.ipynb]#.org]#'  -i {}"