doom-modeline 2.1.0

1568951170(1) 1568951201(1)

在evil下 就不能显示 这个字符统计了吗? doom-modeline-enable-word-count 这个也没用

你好最近在尝试你的配置, 对其中作者的 Centaur 出现 Backtrace buffer 时, 不是像 Spacemacs 那样弹出另一半窗口(个人非常不喜欢, 认为非常容易打断自己.), 而是在 mode-line 变颜色进行提示. 这样的配置是怎么实现的呢? 我看了你的 init-ui.el 文件, 是 shackle 这个包吗, 好像我用了还是会有弹窗. 使用

        ;; Enable flashing mode-line on errors
        (doom-themes-visual-bell-config)
        (set-face-attribute 'doom-visual-bell nil
                            :background (face-foreground 'error)
                            :foreground (face-background 'default)
                            :inverse-video nil)

也没有实现和你的 Centaur 一样的效果. 感谢作者指点.

同时参考 init-window.el

有显示啊,默认应该是显示成这样的,你这个修改过吧?

作者你好, 最近发现使用 doom-modeline 有个问题.即第一次打开 message buffer 时, modeline 的样式是 spacemacs 自带的, 需要将 message buffer kill 后, 重新打开, 才能正常变成 doom-modeline.

我使用的是spacemacs,

#### System Info :computer:
- OS: darwin
- Emacs: 26.2
- Spacemacs: 0.200.13
- Spacemacs branch: master (rev. 26b8fe0c3)
- Graphic display: t
- Distribution: spacemacs
- Editing style: vim
- Completion: ivy
- Layers:

相关配置如下:

defun czqhurricane-ui/init-doom-modeline ()
  (use-package doom-modeline
    :init
    (spacemacs/add-to-hooks 'doom-modeline-env-update-python '(pyvenv-post-activate-hooks
                                                               pyvenv-post-deactivate-hooks
                                                               venv-postactivate-hook
                                                               venv-postdeactivate-hook))
    :ensure t
    :defer t
    :hook
    (after-init . doom-modeline-mode)
    :custom
    (doom-modeline-icon t)
    (doom-modeline-major-mode-icon nil)
    (doom-modeline-minor-modes nil)
    :config
    (line-number-mode 0)
    (column-number-mode 0))

看起来是spacemacs和 doom-modeline 有冲突,猜测是 doom-modeline 启动后 spacemacs-modeline 又设置了。我不太理解为什么你的配置会启用两个 mode-line。你可以试试这个:

(defun czqhurricane-ui/init-doom-modeline ()
  (use-package doom-modeline
    :init
    (doom-modeline-mode 1)
    (spacemacs/add-to-hooks 'doom-modeline-env-update-python '(pyvenv-post-activate-hooks
                                                               pyvenv-post-deactivate-hooks
                                                               venv-postactivate-hook
                                                               venv-postdeactivate-hook))
    :ensure t
    :defer t
    :custom
    (doom-modeline-icon t)
    (doom-modeline-major-mode-icon nil)
    (doom-modeline-minor-modes nil)
    :config
    (line-number-mode 0)
    (column-number-mode 0))

很遗憾, 改成你所说的配置, 反而更不行了, 甚至连以前能正常使用的 buffer 都无法显示 doom-modeline.

200貌似是master分支?我推荐去spacemacs-modeline layer中把spaceline相关的配置删掉

我也有这个现象,只读模式就会出现这个”女旁“

all-the-icons没有安装好,或者字体有其他冲突,比如安装了 cnfonts.

好像 dev 分支直接有选项可以使用 doom-modeline。如果是你手工添加请确认不使用 spaceline,混用会有不可预知的行为。

一般来讲modeline延迟加载的话会导致*Messages*等几个buffer的modeline未设置,因为*Messages*在配置modeline之前就已经创建了,spacemacs应对这种情况也是采用retore的方式来配置modeline,具体可看spacemacs-ui-visual/funcs.el

可以试试spacemacs-post-theme-change-hook而不是after-init-hook

对的,其实doom-modeline里也处理了,参考

楼上的问题应该是 spaceline 又主动覆盖了这几个 buffer 的 mode-line。所以混用的行为就异常了。

1 个赞

使用

...
:hook  
(spacemacs-post-theme-change . doom-modeline-mode)
...

1.一样还是不行, 甚至原来能正常使用的 buffer 都失效了. 2. 在重新加载主题后, 现象和原来的一样. 所以没有解决. 不过你说的没错是在 spacemacs-ui-visualpackage.el 文件中, spacemacs-ui-visual/init-spaceline 函数中调用了函数 (spacemacs//set-powerline-for-startup-buffers).

(defun spacemacs//set-powerline-for-startup-buffers ()
  "Set the powerline for buffers created when Emacs starts."
  (dolist (buffer '("*Messages*" "*spacemacs*" "*Compile-Log*"))
    (when (and (get-buffer buffer)
               (configuration-layer/package-usedp 'spaceline))
      (spacemacs//restore-powerline buffer))))
(defun spacemacs//restore-powerline (buffer)
  "Restore the powerline in buffer"
  (with-current-buffer buffer
    (setq-local mode-line-format (default-value 'mode-line-format))
    (powerline-set-selected-window)
    (powerline-reset)))

我到 spacemacs Github 上查找了一下, 和这个 issue 有关: Fix doom-modeline in the messages buffer by duianto · Pull Request #11517 · syl20bnr/spacemacs · GitHub. 这里面的观点是 after-init-time 不为零, 所以将在 after-init-hook 中的 doom-modeline-init 改到 :init 中.我也看了维护者合并到 develop 版本中的代码, 如下:

那么此时 spacemacs 的做法就是正如作者之前要我做的那样. 但是为什么 develop 版本的能用, 而我这个 master 版本的还是不行? 后面我查看了一下 develop 版本中函数 (spacemacs//restore-buffers-powerline) 和 master 版本中 函数(spacemacs//set-powerline-for-startup-buffers), 两个的区别是 开发版只针对 whick-key buffer 做了 restore 处理.

develop:

(defun spacemacs//restore-buffers-powerline ()
  "Restore the powerline in the buffers.
Excluding which-key."
  (dolist (buffer (buffer-list))
    (unless (string-match-p "\\*which-key\\*" (buffer-name buffer))
      (spacemacs//restore-powerline buffer))))

master:

(defun spacemacs//set-powerline-for-startup-buffers ()
  "Set the powerline for buffers created when Emacs starts."
  (dolist (buffer '("*Messages*" "*spacemacs*" "*Compile-Log*"))
    (when (and (get-buffer buffer)
               (configuration-layer/package-usedp 'spaceline))
      (spacemacs//restore-powerline buffer))))

这样的确证实你所说的是 spacemacs 覆盖了 Messages, spacemacs, Compile-Log 这三个 buffer 的mode-line. 再后来我将 doom-modeline.el 文件里

(unless after-init-time
  ....
)

改成了:

( when after-init-time
  ...
)

居然发现使用:

...
:hook
(after-init . doom-modeline-mode)
...

可以使得所有 buffer 正确显示 doom-modeline了. 此时, 我不禁在想作者的代码里:

(unless after-init-time
        ;; These buffers are already created and don't get modelines. For the love
        ;; of Emacs, someone give the man a modeline!
        (dolist (bname '("*scratch*" "*Messages*"))
          (with-current-buffer bname
            (doom-modeline-set-main-modeline))))

这样的处理是不是不妥当?

  1. 对于 spacemacs develop 版本来说需要修改配置到 user-package 的:init中 而非 after-init-hook中.因为 after-init-time 不为零.
  2. 对于 spacemacs master 版本来说unless这段代码无法被执行到.

我只知道如何添加 layer, 不知道如何把一个 layer 中某个 package 去掉. 难道是直接修改代码? 能不能给予指教.

这段代码重构之后其实不起作用了,只是你的这个 case 中被 spaceline 覆盖了。我可以提交个 patch 强制再刷新一次,但是如果覆盖了其他 buffer 还是无能为力,所以根本原因还是不能混用两个 mode-line。为何不切换到 dev branch 上?

因为自己的一些配置在 develop 上有问题, 以前尝试过. 所以没有切换. 作者什么时候提交 patch?

已经提交了,你可以更新试试

感谢分享,已经用上了,挺酷炫的!!!