doom-modeline 2.1.0

buffer状态是modified,默认显示为黄色

:joy:原来是这个原因,抱歉,打扰了。

(doom-modeline-def-segment lucius/buffer-info
        "custom doom-modeline for telega-chat-mode"
      (let ((buffer-name (doom-modeline--buffer-name)))
        (when (eq major-mode 'telega-chat-mode)
          (setq buffer-name (propertize buffer-name 'face '(:foreground ,(frame-parameter nil 'foreground-color) :weight bold))))
        (concat
         (doom-modeline-spc)
         (doom-modeline--buffer-mode-icon)
         (doom-modeline--buffer-state-icon)
         buffer-name)))

写了个 segments 弄一下,舒服多了

1 个赞

说到 buffer-name, 因为可长可短,会有把 modeline 挤爆的情况,请问可以增一个 defcustom 用于自定义最大 buffer-name 长度么?超过则 truncate 用 … 替代。 @seagle0128

See doom-modeline-buffer-file-name-style.

遇到了doom-modeline的问题,不知道是最近有什么改动么.

我用的doom emacs在debian上,也可能是doom emacs有改动,换回之前的配置就没有问题

Error during redisplay: (eval (doom-modeline-segment--modals)) signaled (wrong-type-argument stringp nil) [9 times]

可能是这个问题

doom-emacs 的问题,见:

doom-modeline-def-segment 直接在config.el 下写会报错,你是怎么解决的呀?

⛔ Warning (initialization): An error occurred while loading ‘/Users/van/.emacs.d/.local/etc/@/init.29.elc’:

Error caused by user's config or system: /Users/van/.doom.d/config.el, (void-function doom-modeline-def-segment)

To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file.  Start Emacs with
the ‘--debug-init’ option to view a complete error backtrace.

不用 doom,不过你这个提示的错误信息已经很明显了,没找到 doom-modeline-def-segment 函数。

需要用 with-eval-after-load

最近工作需要,经常需要处理体积较大的日志文件,发现在文件中移动光标非常卡顿,使用emacs -Q则相对流畅。

find-file-literally

profiler跑了一下,如果仅移动光标则绝大部分CPU消耗在 doom-modeline-segment–buffer-position 上,之后禁掉 doom-mode-line 仍加载100来个包,则移动光标流畅。

目前只能禁掉doom-modeline来用,有什么方法解决一下?

emacs: 29.4.50 doom-modeline 版本 melpa 20240905.635

理论上 buffer-position 性能消耗和原生的是一样的,需要具体看看消耗在哪个函数上,最好把profile的backtrace贴出来。另外,看看有没有用 nyan-mode 、poke-line-mode 之类的,需要禁用。

没有使用 nyan-mode, poke-line-mode之类的。 刚移动至文件尾,光标上移动,移动到文件头,光标移动,翻页:

     Samples    %   Function                                                                                                                                                                                                                                    
       10957  74% - redisplay_internal (C function)                                                                                                                                                                                                             
       10957  74%  - eval                                                                                                                                                                                                                                       
       10913  74%     doom-modeline-segment--buffer-position                                                                                                                                                                                                    
          17   0%   + doom-modeline-segment--buffer-info                                                                                                                                                                                                        
          13   0%   + doom-modeline-format--main                                                                                                                                                                                                                
           4   0%   + doom-modeline-segment--major-mode                                                                                                                                                                                                         
           4   0%   + doom-modeline-segment--mu4e                                                                                                                                                                                                               
        3709  25% - command-execute                                                                                                                                                                                                                             
        3706  25%  - call-interactively                                                                                                                                                                                                                         
        3605  24%   - funcall-interactively                                                                                                                                                                                                                     
        3365  22%    - scroll-up-command                                                                                                                                                                                                                        
        3356  22%     - scroll-up                                                                                                                                                                                                                               
        3356  22%      - eval                                                                                                                                                                                                                                   
        3348  22%         doom-modeline-segment--buffer-position                                                                                                                                                                                                
           1   0%       + doom-modeline-format--main                                                                                                                                                                                                            
         154   1%    + previous-line                                                                                                                                                                                                                            
          82   0%    + next-line                                                                                                                                                                                                                                
           4   0%    + execute-extended-command                                                                                                                                                                                                                 
         101   0%   + byte-code                                                                                                                                                                                                                                 
           9   0% + ...                                                                                                                                                                                                                                         
           9   0% + timer-event-handler                                                                                                                                                                                                                         
           1   0%   which-key--hide-popup                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                
                                                         

开两个emacs一个禁用doom-modeline,一个启用,都打开同一个文件。 以下是 describe-mode,不同的仅仅是 doom-modeline。

禁用时

Minor mode enabled in this buffer: Font-Lock                                                                                                                                                    
                                                                                                                                                                                                
The major mode is Fundamental mode defined in simple.el:                                                                                                                                        
                                                                                                                                                                                                
Major mode not specialized for anything in particular.                                                                                                                                          
Other major modes are defined by comparison with this one.                                                                                                                                      
                                                                                                                                                                                                
Global minor modes enabled: Auto-Encryption Blink-Cursor Column-Number                                                                                                                          
Dirvish-Override-Dired Electric-Indent File-Name-Shadow                                                                                                                                         
Global-Font-Lock Line-Number Marginalia Nerd-Icons-Completion                                                                                                                                   
Projectile Savehist Show-Paren Tooltip Transient-Mark Vertico                                                                                                                                   
Which-Key    

启用时

Minor mode enabled in this buffer: Font-Lock                                                                                                                                                    
                                                                                                                                                                                                
The major mode is Fundamental mode defined in simple.el:                                                                                                                                        
                                                                                                                                                                                                
Major mode not specialized for anything in particular.                                                                                                                                          
Other major modes are defined by comparison with this one.                                                                                                                                      
                                                                                                                                                                                                
Global minor modes enabled: Auto-Encryption Blink-Cursor Column-Number                                                                                                                          
Dirvish-Override-Dired Doom-Modeline Electric-Indent File-Name-Shadow                                                                                                                           
Global-Font-Lock Line-Number Marginalia Nerd-Icons-Completion                                                                                                                                   
Projectile Savehist Show-Paren Tooltip Transient-Mark Vertico                                                                                                                                   
Which-Key  

方便提供下文件重现吗?另外,用的什么操作系统

Arch Linux up-to-date. 6.10.9-arch1-1 #1 SMP PREEMPT_DYNAMIC 内存 64G,

日志文件6,000,000行,600+M,我在一台 ubuntu 20.04上编译 29.4.50 重现了。 5.4.0-189-generic #209-Ubuntu SMP 内存 24G,虚拟机,

以上不存在内存不足的情况。

我感觉文件内容不重要,也不方便提供。

有时间我试一下不加载其他包,仅加载doom-modeline 看看是不是有包发生了不知道的冲突。

你试试2用Emacs -Q + doom-modeline 来重现吧

使用 emacs -Q -nw my-600m-log-file 回答 yes-no-literally, literally. 确认上下移动光标,翻页流畅。

切换至 scratch

输入

(add-to-list 'load-path "~/.local/share/emacs/elpa/f-20240308.906")
(add-to-list 'load-path "~/.local/share/emacs/elpa/s-20220902.1511")
(add-to-list 'load-path "~/.local/share/emacs/elpa/dash-20240510.1327")
(add-to-list 'load-path "~/.local/share/emacs/elpa/shrink-path-20190208.1335")
(add-to-list 'load-path "~/.local/share/emacs/elpa/nerd-icons-20240816.1555")
(add-to-list 'load-path "~/.local/share/emacs/elpa/compat-30.0.0.0")
(add-to-list 'load-path "~/.local/share/emacs/elpa/doom-modeline-20240905.635")

(use-package doom-modeline
  :commands doom-modeline-mode
  :config
  (setq doom-modeline-buffer-file-name-style 'truncate-upto-project)
  :custom
  (doom-modeline-height 25)
  :init
  (doom-modeline-mode t))

这里偷懒复制了正常配置里面的一段, 如果使用 (use-package doom-modeline)然后 m-x doom-modeline也试过,效果一样。

运行 eval-buffer

switch-to-buffer my-600m-log-file 上下移动光标,翻页都卡,快速翻页会卡住不动较长时间。

profiler-start/stop/report

CPU使用超过95%在 doom-modeline-segment--buffer-position

可能 doom-modeline 需要的包我的版本不一定合适,我是elpa + melpa 的组合。经常更新。

使用 doom-modeline 一段时间之后就发现有这个问题。很久之前。

后来就把 doom-modeline 卸了,自定义 modeline。