各位emacs道友,大家好.
我最近入了emacs的坑,在配置org mode时遇到了问题,google无果,进来讨教.
我自定义了todo状态, 希望切换到"DOING"状态时clock-in, 折腾一番后从文档翻到了org-clock-in-switch-to-state 参数,根据参数说明,可以这样配置实现功能
(setq org-clock-in-switch-to-state "DOING")
google到也有人用这样的配置,但是没法生效,下面贴了我的配置,求大神支招
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;注意!!!!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 注释含有>>>环境依赖<<<的配置项依赖于于特定的系统环境,
;; 将本配置用于别处时可能需要注释掉,防止配置报错
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;注意!!!!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;系统配置;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;启动界面不出现
(setq inhibit-startup-message t)
;;关闭emacs顶部工具栏
(menu-bar-mode -1)
;;使用gui启动emacs时关闭菜单栏>>>环境依赖<<<gui
(tool-bar-mode -1)
;;配置主题样式
(load-theme 'wombat)
;;(load-theme 'tango-dark)
;;(load-theme 'manoj-dark)
;;配置启动时最大化窗口>>>环境依赖<<<gui
(toggle-frame-maximized)
;;关闭emacs自带备份功能,该功能一般会用git代替
(setq make-backup-files nil)
;;开启ido模式,并设置相关参数
;;设置宽松的匹配模式
(setq ido-enable-flex-matching t)
;;ido用于全场景
(setq ido-everywhere t)
;;开启ido
(ido-mode 1)
;;开启最近打开文件模式,设置快捷键
(recentf-mode 1)
(global-set-key "\C-cr" 'recentf-open-files)
;;recentf-mode使用vim模式的上下左右移动
(add-hook 'recentf-dialog-mode-hook
(lambda ()
(local-set-key "j" 'next-line)
(local-set-key "k" 'previous-line)
(local-set-key "h" 'backward-char)
(local-set-key "l" 'forward-char)
))
;;使用ibuffer-mode替换emacs自带的buffer管理
(global-set-key (kbd "C-x C-b") 'ibuffer)
;;recentf-mode使用vim模式的上下左右移动
(add-hook 'ibuffer-mode-hook
(lambda ()
(local-set-key "j" 'next-line)
(local-set-key "k" 'previous-line)
))
;;英文字体
;;英文字体设置为Monaco 14,中文字体设置为"文泉驿等宽微米黑",可以保证等宽,org mode中表格不错位>>>环境依赖<<<macos
(set-face-attribute 'default nil :height 140 :family "Monaco")
;;中文字体
;;如果在linux终端上使用emacs该配置,记得注释掉中文字体设置,否则emacs会报错>>>环境依赖<<<macos和安装字体WenQuanYi Micro Hei Mono
(dolist (charset '(kana han symbol cjk-misc bopomofo))
(set-fontset-font (frame-parameter nil 'font)
charset (font-spec :family "WenQuanYi Micro Hei Mono"
:size 16)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;系统配置;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;org-mode配置;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;全局设置org-capture的快捷键
(global-set-key (kbd "C-c c") 'org-capture)
;;全局设置org-agenda的快捷键
(global-set-key (kbd "C-c a") 'org-agenda)
;;全局设置捕获当前位置作为org链接,可以在C-c C-l中使用
(global-set-key (kbd "C-c l") 'org-store-link)
;;org导出不依赖于htmlize,否则导出html报错
(setq org-html-htmlize-output-type `nil)
;;折叠org note
(setq org-log-into-drawer t)
;;设置重新设置org-mode表格排序和求和的快捷键
;;(add-hook 'org-mode-hook
;;(lambda ()
;;(define-key org-mode-map (kbd "C-c o") 'org-table-sort-lines)
;;(define-key org-mode-map (kbd "C-c s") 'org-table-sum)
;;))
;;(define-key org-mode-map (kbd "C-c o") 'org-table-sort-lines)
;;(define-key org-mode-map (kbd "C-c s") 'org-table-sum)
;;agenda模式下使用vim移动方式
(add-hook 'org-agenda-mode-hook
(lambda ()
(local-set-key "j" 'next-line)
(local-set-key "k" 'previous-line)
(local-set-key "h" 'backward-char)
(local-set-key "l" 'forward-char)
(local-set-key "\C-f" 'evil-scroll-page-down)
(local-set-key "\C-b" 'evil-scroll-page-up)
))
;;配置org mode可以执行的代码
;;该配置需要shell环境支持,在启动emacs的shell的PATH变量中存在相应的执行环境
(org-babel-do-load-languages
'org-babel-load-languages '(
;;(C . t)
;;>>>环境依赖<<<python
(python . t)
;;>>>环境依赖<<<jdk
(java . t)
(shell . t)
;;>>>环境依赖<<<node
(js . t)
;;>>>环境依赖<<<mysql客户端
(sql . t)
))
;;设置orgmode中运行的python版本,需要安装python3>>>环境依赖<<<python3
(setq org-babel-python-command "python3")
;;设置org-agenda以日维度显示
(setq org-agenda-span 'day)
;;设置org-agentda扫描的目录和文件夹>>>环境依赖<<<org文件组织习惯
;;(setq org-agenda-files '("~/file1" "~/file2" "~/folder"))
(setq org-agenda-files '("/Users/xxxxxxxxxx/Documents/private/todo.org" "~/Documents/temp/test.org"))
;;设置org-capture模版
(setq org-capture-templates
'(
("t"
"待办事项(todo)"
entry
(file+headline "~/xxxxx/xxxxx/todo.org" "待办事项")
"* TODO %i%?\n :PROPERTIES:\n :CAPTURE_TIME: %U\n :END:\n"
;;"* 待办 %i%?\n :PROPERTIES:\n :CAPTURE_TIME: %U\n :END:\n"
)
("c"
"草稿(inbox)"
plain
(file+datetree "" "草稿")
"%i%? "
)
;;设置给外部调用的caputre模板,使用偏僻的快捷键,捕获完同时立刻关闭缓冲区
("p"
"草稿(inbox)"
plain
(file+datetree "" "草稿")
"%i%? "
:immediate-finish t
)
))
;;设置org-capture写入文件>>>环境依赖<<<org文件组织习惯
(setq org-default-notes-file "/Users/xxxxxxxx/Documents/private/workbench.org")
;;设置org-export的后端
(setq org-export-backends '(ascii html icalendar latex md odt))
;;设置在emacs中打开文件使用的应用程序,default指使用系统默认的应用,emacs指使用emacs打开
(setq org-file-apps
'((auto-mode . emacs)
("\\.mm\\'" . default)
("\\.x?html?\\'" . default)
("\\.pdf\\'" . default)
("\\.docx\\'" . default)
("\\.doc\\'" . default)
("\\.pptx\\'" . default)
("\\.xlsx\\'" . default)))
;;org-todo状态改为DONE时记录时间
(setq org-log-done 'time)
;;org-refile目标,可以指定文件和最大层级>>>环境依赖<<<org文件组织习惯
(setq org-refile-targets '(("/Users/xxxxxxx/Documents/private/workbench.org" :maxlevel . 3)))
;;org-todo关键词和样式设定
(setq org-todo-keyword-faces
;;'(("处理中" :foreground "medium sea green" :weight bold :underline t)
;;("暂停" . "brightred")
;;("取消" . "blue")))
'(("DOING" :foreground "medium sea green" :weight bold :underline t)
("WAITING" . "brightred")
("CANCELED" . "blue")))
(setq org-todo-keywords
'((sequence "TODO(t)" "DOING(i!)" "WAITTING(w@/!)" "|" "DONE(d@)" "CANCELED(c@)")))
;;'((sequence "待办(t)" "处理中(i!)" "暂停(w@/!)" "|" "完成(d@)" "取消(c@)")))
;;设置org-state切换到DOING执行clock-in
(setq org-clock-in-switch-to-state "DOING")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;org-mode配置;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;依赖配置;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;依赖配置;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;启用包管理工具package
(require 'package)
;;设置依赖包不会在启动时加载,所有依赖都使用use-package进行延迟加载,加快启动速度
(setq package-enable-at-startup nil)
;;将emacs默认的包依赖改为emacs-china的地址,提高安装和更新速度
(setq package-archives '(
("gnu" . "http://elpa.emacs-china.org/gnu/")
("melpa" . "http://elpa.emacs-china.org/melpa/")
))
(package-initialize)
;;如果use-package未安装,则更新包管理工具依赖列表,安装use-package
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
;;全局配置use-package参数ensure为t
(require 'use-package-ensure)
(setq use-package-always-ensure t)
;;该依赖可以使用try命令尝试安装和使用某个依赖,但emacs退出后,安装不会被保留
(use-package try)
;;后续快捷键提示功能:按下某个按键后,该依赖会显示下一步可以进行的操作
(use-package which-key
:config (which-key-mode))
;;设置evil-mode,启用vim操作模式
(use-package evil
;让org-mode中tab折叠生效,在evil-mode加载之前设置
:init (setq evil-want-C-i-jump nil)
:config (evil-mode 1))