列举常见的文件操作(Org-mode用文本文件管理日常)

本文翻译自 http://doc.norang.ca/org-mode.HTML ,原文作者为Bernt Hansen 由于原文较长,因此会分多篇文章来发布转载请标记出处,我来为大家讲解一下关于列举常见的文件操作?跟着小编一起来看一看吧!

列举常见的文件操作(Org-mode用文本文件管理日常)

列举常见的文件操作

本文翻译自 http://doc.norang.ca/org-mode.HTML ,原文作者为Bernt Hansen 。由于原文较长,因此会分多篇文章来发布。转载请标记出处。

Org-mode, 用文本文件管理日常(一)

Org-mode, 用文本文件管理日常(二)

Org-mode, 用文本文件管理日常(三)

Org-mode, 用文本文件管理日常(四)

Org-mode, 用文本文件管理日常(五)

Org-mode, 用文本文件管理日常(六)

Org-mode, 用文本文件管理日常(七)

Org-mode, 用文本文件管理日常(八)

Org-mode, 用文本文件管理日常(九)

Org-mode, 用文本文件管理日常(十)

Org-mode, 用文本文件管理日常(十一)

Org-mode, 用文本文件管理日常(十二)

Org-mode, 用文本文件管理日常(十三)

Org-mode, 用文本文件管理日常(十四)

1 提高生产力工具加密处理

我曾经将加密数据,比如说账户密码的保存到单独的GPG加密文件中。现在这些数据都放到org-mode文件中,并添加特别的标签。这样加密数据就可以保留在org-mode文件中。

org-crypt 允许给任务添加一个特别的 crypt 标签,org-模式就会将这个标题中的数据加密。当需要查看加密数据你也可以對它解密,但是只要你再次保存文件,org-mode会重新对它加密。

如下是对加密的一些配置:

(require 'org-crypt) ; Encrypt all entries before saving (org-crypt-use-before-save-magic) (setq org-tags-exclude-from-inheritance (quote ("crypt"))) ; GPG key to use for encryption (setq org-crypt-key "F0B66B40")

M-x org-decrypt-entry 会弹出一个提示输入与你加密相关的密码,当正确后就用明文来替代原来加密的密文。相反,加密并不需要输入密码-只要找到明文数据即可。

我习惯每个org文件都有个加密标题(像 * Passwords). 我阻止带 crypt 标签的任务被继承,因为不希望加密数据中包含加密数据。我发现当执行 M-x org-decrypt-entries都输入解密密码(每次一个任务项执行一次)不方便。我会对我的数据项加密直到我想查看他们为止-我根据实际需要选择解密,然后保存文件再次加密。这样能保证数据明文出现时间尽可能短。

自动保存文件

emacs会临时保存缓冲区的内容到自动保存文件中,当你再编辑你的org缓冲区,并积累足够次数后进行实际保存。如果你的缓冲区中有解码的明文并还没有保存,那么这些明文将会写入这些临时自动保存文件中,有可能会泄露些敏感信息。为防止这种情况,可以禁用自动保存功能。

个人来说,我非常喜欢自动保存功能。99%情况我的加密项是安全的,因为他们一直都是处于加密状态。我通常会解密数据项后,立即通过快捷键 C-x C-s 保存文件,这样明文又会得到加密。这就可以阻止自动保存文件中存在明文这种情况。

我的org crypt自动保存功能设置如下:

(setq org-crypt-disable-auto-save nil)

加速命令

org-mode有个非常让人兴奋的功能叫做 org-speed-commands.

加速命令允许在标题行开始处访问经常使用的命令-很像agenda中的1键命令。加速命令可以自行配置,org-mode提供了些默认的命令。

我在默认基础上有添加了一些如下的加速键。我不怎么使用优先级,因此我重写了1,2,3键的默认设置。我同样禁用了’c’同时加了’q’用来快速回到agenda视图并更新视图。

(setq org-use-speed-commands t) (setq org-speed-commands-user (quote (("0" . ignore) ("1" . ignore) ("2" . ignore) ("3" . ignore) ("4" . ignore) ("5" . ignore) ("6" . ignore) ("7" . ignore) ("8" . ignore) ("9" . ignore) ("a" . ignore) ("d" . ignore) ("h" . bh/hide-other) ("i" progn (forward-char 1) (call-interactively 'org-insert-heading-respect-content)) ("k" . org-kill-note-or-show-branches) ("l" . ignore) ("m" . ignore) ("q" . bh/show-org-agenda) ("r" . ignore) ("s" . org-save-all-org-buffers) ("w" . org-refile) ("x" . ignore) ("y" . ignore) ("z" . org-add-note) ("A" . ignore) ("B" . ignore) ("E" . ignore) ("F" . bh/restrict-to-file-or-follow) ("G" . ignore) ("H" . ignore) ("J" . org-clock-goto) ("K" . ignore) ("L" . ignore) ("M" . ignore) ("N" . bh/narrow-to-org-subtree) ("P" . bh/narrow-to-org-project) ("Q" . ignore) ("R" . ignore) ("S" . ignore) ("T" . bh/org-todo) ("U" . bh/narrow-up-one-org-level) ("V" . ignore) ("W" . bh/widen) ("X" . ignore) ("Y" . ignore) ("Z" . ignore)))) (defun bh/show-org-agenda () (interactive) (if org-agenda-sticky (switch-to-buffer "*Org Agenda( )*") (switch-to-buffer "*Org Agenda*")) (delete-other-windows))

变量 org-speed-commands-default 设置了很多加速键。我使用最多的键是I O 用来计时以及 =t=修改任务状态。J 跳到当前或者上个计时任务。

c 以及 C 被禁用了,因此当输入这些字符时,字符就会插入进去。我用 TAB 以及 S-TAB=来循环 折叠-所以我不需要 =c C. TAB 可以在任何地方工作但是 c C 只能在标题行才能执行,有时候我还会误碰。

org 协议

Org protocol方便从其他应用中为org-mode创建捕获的备忘。我使用这个方法来记录下我在firefox浏览过的网页。

我有个特殊捕获模板用作 org-protocol使用(设置到 w 键)。

我的org-protocol设置非常简单。它能够使用org-protocol并且像Capture Templates描述那样创建一个捕获模板。

(require 'org-protocol)

另一部分设置是在firefox中,这样在firefox中执行 =C-c c就可以触发org-protocol,捕获我当前在浏览网页。

保存文件时在文件末尾添加新行

下面的设置主要用在编辑yasnippets, 当我希望在同一行,扩展代码片段时。我只用这个功能在会议备忘中,替换字符串以及初始化一些人名。我现在使用 abbrev=mode目前不使用这个设置了。

(setq require-final-newline nil)

当我想在emacs中保存一个文件时,我希望新添加新行-这个对我所工作的项目源码非常有好处。这些是我的现在设置:

(setq require-final-newline t)

插入不活动的时间戳并排除在导出之外

当我工作在org-mode文件时候,我会插入不活跃的时间戳。对于记忆任务时间戳,是在记忆模板中的,但是对于正常编辑大纲时候,我希望时间戳能够自行添加。

我定义个可以运行在org-mode的hook,当任务标题创建时,自动插入不活动的时间。

可以用 f9 T 来控制标题时间戳创建开关。

(defvar bh/insert-inactive-timestamp t) (defun bh/toggle-insert-inactive-timestamp () (interactive) (setq bh/insert-inactive-timestamp (not bh/insert-inactive-timestamp)) (message "Heading timestamps are %s" (if bh/insert-inactive-timestamp "ON" "OFF"))) (defun bh/insert-inactive-timestamp () (interactive) (org-insert-time-stamp nil t t nil nil nil)) (defun bh/insert-heading-inactive-timestamp () (save-excursion (when bh/insert-inactive-timestamp (org-return) (org-cycle) (bh/insert-inactive-timestamp)))) (add-hook 'org-insert-heading-hook 'bh/insert-heading-inactive-timestamp 'append)

每次我通过 M-RET 或者 =M-S-RET=创建标题时,hook调用此函数,然后就会插入不活动的时间戳

* <point here> [2009-11-22 Sun 18:45]

这个会记录下任务什么时候会被创建,我觉得这个功能非常有用。

我也为这个函数定义了快捷键,因此我就可以按需要插入不活动的时间戳。

(global-set-key (kbd "<f9> t") 'bh/insert-inactive-timestamp)

为阻止时间戳被导出到文档中,我使用下面的设置。

(setq org-export-with-timestamps nil)

链接上回车

下面设置使得 RET 插入新行,而不是打开链接。这个功能我是既爱又恨。当这个功能被发现时,我首先将其关闭,因为我想在我的链接上插入新行,但是 RET 将会打开链接令人很烦恼。然后我重新训练自己手指,在上一行结束按回车来创建新行。

(setq org-return-follows-link t)

超时时高亮显示时钟信息

目前计时信息显示在modeline。如果有预估时间,并且我们超时执行了,我让modeline着重显示红色,通过下面设置:

(custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(org-mode-line-clock ((t (:foreground "red" :box (:line-width -1 :style released-button)))) t))

会议备忘

我用org-mode来做会议备忘。我使用org-mode点形式来记录会议会话。如果一个执行项在会上决定去完成我会用句点好标记出来,并添加TODO:或者DONE:标记。

会议也是一个任务,当会议完成任务也完成。任务内容记录会议上所有细节。如果任务上提到新任务,我会创建另一个新的TODO任务。

我使用 bh/prepare-meeting-notes 来准备会议备忘,用来发给会议参与者(用固定宽度字体像“Courier New”). 当会议结束,备忘也就可以发送了–所以不需要花费额外的时间来重写他们。我也不排斥HTML格式输出–内容比格式更加重要。

* TODO Sample Meeting - Attendees - [ ] Joe - [X] Larry - [X] Mary - [X] Fred - Joe is on vacation this week - Status Updates Larry - did this - and that - TODO: Needs to follow up on this Mary - got a promotion for her recent efforts Fred - completed all his tasks 2 days early - needs more work - DONE: everything * TODO Sample Meeting - Attendees - [ ] Joe - [X] Larry - [X] Mary - [X] Fred - Joe is on vacation this week - Status Updates Larry - did this - and that >>>>>>>> TODO: Needs to follow up on this Mary - got a promotion for her recent efforts Fred - completed all his tasks 2 days early - needs more work >>>>>>>> DONE: everything

下面是格式函数。高亮备忘并将TABs转换成空格,高亮todo项。会议纪要同时会保存进删除缓冲区,这样就方便将内容贴到其他应用中。

(defun bh/prepare-meeting-notes () "Prepare meeting notes for email Take selected region and convert tabs to spaces, mark TODOs with leading >>>, and copy to kill ring for pasting" (interactive) (let (prefix) (save-excursion (save-restriction (narrow-to-region (region-beginning) (region-end)) (untabify (point-min) (point-max)) (goto-char (point-min)) (while (re-search-forward "^\\( *-\\\) \\(TODO\\|DONE\\): " (point-max) t) (replace-match (concat (make-string (length (match-string 1)) ?>) " " (match-string 2) ": "))) (goto-char (point-min)) (kill-ring-save (point-min) (point-max))))))

修改后移除高亮

我发现当我需要在org文件中查找一些细节时候,我会通过快捷键=C-c / /= 使用使用org-occur查找内容.下面设置保持查找结果高亮,即使内容被修改,依然高亮。这使得我可以直接修改文件而不丢失高亮,当修改完成后,可以继续下个匹配项。 C-c C-c 移除所有的高亮。

(setq org-remove-highlights-with-change nil)

设置这个参数为t时,当修改缓冲区,高亮将不再。

我已经开始使用当修改缓冲区后自动移除高亮,因为现在使用通用的 M-x occur 在emacs缓冲区中查找。

获取最新的org-mode帮助文档

我使用git仓库中的org-mode帮助文档,因此我设置emacs从git查找帮助文档,之后才常规查找(过时)系统版本文档。

(add-to-list 'Info-default-directory-list "~/git/org-mode/doc")

选择将来时间吗?

默认情况下org会选择将来的某个时间。这意味着如果当前时间是5月2号,然后你输入一个4月30号日期(2天前),org-mode将会跳转到明年的4月30号。我发现这个非常烦,因为当我需要看看上周五发生什么我必须输入年。现在我训练我的手指,这样,如果需要查看以前的信息我可以用快捷键 b ,所以这个问题对我来说也不是什么问题了。

自动修改点句

在开会时候我会使用点格式。跟其他的list点句一样,这样当层级超过3行,就会让读取细节变得更难。

当修改层级时,org-mode可以自动修改list点句。

Current List Bullet Next indented list bullet

-

* -

1. -

1) -

A) -

B) -

a) -

b) -

A. -

B. -

a. -

b. -

(setq org-list-demote-modify-bullet (quote ((" " . "-") ("*" . "-") ("1." . "-") ("1)" . "-") ("A)" . "-") ("B)" . "-") ("a)" . "-") ("b)" . "-") ("A." . "-") ("B." . "-") ("a." . "-") ("b." . "-"))))

删除agenda标签视图中的缩进

我不喜欢agenda视图中对匹配的标签子层级缩进显示,当我执行agenda标签查询(=F12 m=),我只希望看到所有匹配的任务(包含子层级)。

为使得所有匹配的大纲都在agenda显示,可以设置如下变量:

(setq org-tags-match-list-sublevels t)

加固源码显示

我使用babel来在我的文档中包含源码

# begin_src LANG ,, ... # end_src

LANG代表使用的语言(ditaa, dot, sh, emacs-lisp等)这将使得在org-mode中以代码块显示,同样导出文档时也是以代码块显示。

可以查看这个文档Git Repository synchronization 作为个例子。

持久化agenda过滤器

这是一个伟大功能!持久化agenda过滤器意味着当通过 / TAB SomeTag 查看后agenda会记住这个过滤条件,直到你修改它。

通过如下参数可以启动持久化过滤器

(setq org-agenda-persistent-filter t)

为标记项添加标记

每个人都会碰到有些非常重要的信息,需要后续能够快速找到。

像这种备忘以及任务我添加了特殊的 :FLAGGED: 标记。这个标记有个快速按键 ? 将会在agenda中查找标记项。可以查看 Tags了解如何为 FLAGGED 项设置 org-tag-alist 。

为查找标记项也非常简单,只要执行快捷键 F12 ? 就能获得。

使用compose-mail打开邮件链接

下列设置使得org-mode 可以使用compose-mail打开 mailto: 链接。

(setq org-link-mailto-program (quote (compose-mail "%a" "%s")))

org mode任务来作为邮件内容发送

可以创建基于org-mode子树内容的邮件。我通常使用 C-c M-o 来启动email消息,并从子树获取内容,作为email邮件内容。我使用这种方式来处理重复的提醒任务,并需要发邮件给别人。email内容已经包含在org-mode子树中,我只需要对子树执行 C-c M-o 然后只要在发出前做稍许修改即可。

**使用smex作为 M-x ido-completion后端

:CUSTOMID: SmexAndIdo

我发现smex,并使用它作为IDO-completion 后端,当读取org-mode邮件列表后。我实际上会执行M-x很多次,因为通过IDO补全方便。

下面是我的设置:

(add-to-list 'load-path (expand-file-name "~/.emacs.d")) (require 'smex) (smex-initialize) (global-set-key (kbd "M-x") 'smex) (global-set-key (kbd "C-x x") 'smex) (global-set-key (kbd "M-X") 'smex-major-mode-commands)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页