配置org-mode TODO状态切换同时计时失败

各位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))

1 个赞

重新看了几遍文档,确定是我英文不好导致的乌龙 ,
实际上这个变量的作用是clock-in的时候切换到指定状态 :joy: