关于mode-line的奇怪现象

(setq header-line-format '(:eval ((lambda () (setq header-line-format nil)))))

上面这段代码产生效果是,header line先变为空白,然后按任意按键,或者点击buffer,header line消失。我期望的结果是header line可以立即消失。

我也尝试了下面的代码,效果是先显示 “hello world” header line,按下任意键,header line 消失。

(setq header-line-format '(:eval ((lambda () (setq header-line-format nil) "hello world"))))

或许是 Mode Line/Header Line 显示有些延迟,你的第一个表达式(去掉多余的 lambda)等于:

(setq header-line-format '(:eval (setq header-line-format nil)))

刚刚执行完这句,Emacs 认为 header-line-format 存在,应该先腾出地方显示个 Header Line,等到合适的时机(估计是 Redisplay 时),再执行其中的 :eval,去掉这个空白的 Header Line。

一个相关的函数:

(force-mode-line-update)

试试 (setq-default header-line-format nil)