列举常见的文件操作(Org-mode用文本文件管理日常)
本文翻译自 http://doc.norang.ca/org-mode.HTML ,原文作者为Bernt Hansen 由于原文较长,因此会分多篇文章来发布转载请标记出处
,我来为大家讲解一下关于列举常见的文件操作?跟着小编一起来看一看吧!
列举常见的文件操作
本文翻译自 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标签查询(=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子树内容的邮件。我通常使用 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