请问在运行org-pomodoro后,如何在Emacs的模式行中将计时器提前?

windows

#1

各位大神,我想问一下在运行org-pomodoro后,如何在模式行中将计时器放在前面,如下图标示的?


#2

通过设置mode-line-format可以实现,把mode-line-misc-info调整到相应位置即可。

注意

  1. 设置mode-line-format时一定要用set-default命令才行,原因我不太清楚。
  2. 上图中的计时器和后面的内容是一起的,都是由mode-line-misc-info控制的,所以,移动mode-line-misc-info会移动后面所有的显示文字。

mode-line-misc-info的值是((global-mode-string ("" global-mode-string " ")))global-mode-string则与org-pomodoro插件中的org-pomodoro.el里面的以下代码相关,并通过该文件中的其他代码使得org-pomodoro-timer(即计时器)与上述两者联系了起来。

 ;; add the org-pomodoro-mode-line to the global-mode-string
  (unless global-mode-string (setq global-mode-string '("")))
  (unless (memq 'org-pomodoro-mode-line global-mode-string)
    (setq global-mode-string (append global-mode-string
                                     '(org-pomodoro-mode-line))))

以移动mode-line-misc-info到最前面为例:

(setq-default mode-line-format
              (list
               "%e"
               'mode-line-misc-info
               'mode-line-front-space
               'mode-line-mule-info
               'mode-line-client
               'mode-line-modified
               'mode-line-remote
               'mode-line-frame-identification
               'mode-line-buffer-identification
               "   "
               'mode-line-position
               "  "
               'mode-line-modes
               'mode-line-end-spaces))

这样即可实现。

由于有时任务名称会很长,所以我后来还有是希望让mode-line-misc-info的显示信息出现在顶端模式行。我用的是Purcell的配置,在init-org.el中,他正好配置了这一项:

;;; Show the clocked-in task - if any - in the header line
(defun sanityinc/show-org-clock-in-header-line ()
    (setq-default header-line-format '((" " org-mode-line-string " ")))

(defun sanityinc/hide-org-clock-from-header-line ()
  (setq-default header-line-format nil))
  )

不过,他的这个设置不能将计时器加入,需要将header-line-format设置为mode-line-misc-info的才行,所以,我将上述中的第2句代码替换之后:

;;; Show the clocked-in task - if any - in the header line
(defun sanityinc/show-org-clock-in-header-line ()
  ;; 将header-line-format设置为mode-line-misc-info的值,可以将计时器加入
  (setq-default header-line-format 'mode-line-misc-info)

(defun sanityinc/hide-org-clock-from-header-line ()
  (setq-default header-line-format nil))
  )

就能在开启org-pomodoro之后,在上面显示计时,如下图所示: Snipaste_2019-11-02_00-20-32

如果将mode-line-format中的mode-line-misc-info注释掉,那么就只有上面显示,而下面的模式行不显示了。

花了五六个小时折腾,终于搞定了。:hugs:

不过还有一大堆工作因为这个事拖着,明天得加班了 :sob:

但是,有个小问题,我目前不太清楚:首次启动org-pomodoro时,计时器在最右边;再次执行时,又变成最左边了。


#3

不下班再折腾Emacs吗……


#4

哈哈,是的。不搞定总觉得心里咯着,不是很爽😂。这几天天天折腾到1、2点,主要是自己不懂lisp,也不是很了解Emacs。走了好多弯路。


#5

不过上面的关于顶端模式行还有个问题:只显示工作时间的倒计时,休息时间的倒计时不显示。这个我目前不会弄。如果有大神知道怎么解决的话,还请赐教哈。:blush:

相关信息如下:

GNU Emacs 26.2 (build 1, x86_64-w64-mingw32),下载自官网的科大镜像站。

Org 9.1.9(Emacs自带)

Win7 64位

以Purcell的配置为基础,作了些小修改。