如何在模式行中显示不同颜色的文本

时间:2014-07-21 10:09:44

标签: emacs emacs-faces

我想用不同的颜色显示我的模式行的部分但是它没有按预期工作,我找不到一个好的Web引用。我可以将文本更改为粗体或斜体,但不会根据需要更改颜色。

最简单的示例是显示一个简单的模式行,其中 buffer-file-name 为白色而不是默认的面部颜色。

(custom-set-variables
 '(mode-line-format
   (quote
    ("%e" mode-line-front-space
     "[" mode-name "] %l:%i"
     "\t"
     propertize buffer-file-name 'font-lock-face '(:foreground "white")))))

感谢legosica指出我应该包括我尝试过的其他例子......

  1. 用'face:

    替换'font-lock-face
    propertize buffer-file-name 'face '(:foreground "white")))))
    


  2. 跟进

    感谢TacticalCoder,我现在正是我想要的 - 我的模式中有多种字体和颜色。设置'face '(:foreground "white")不起作用的原因是它需要包装在'(:eval ...)中。

    我最终得到了这个......

    (setq-default mode-line-format
      (list
    
        mode-line-front-space ; +-- just like in the default mode-line-format
    
        '(:eval (propertize (concat "\t[" mode-name "] %l:%i\t") 'face '(:foreground "black" :height 0.9 :weight normal)
            'help-echo (buffer-file-name)))
    
        '(:eval (propertize (file-name-directory buffer-file-name)  'face 'info-title-4
            'help-echo (buffer-file-name)))
    
        '(:eval (propertize (file-name-nondirectory buffer-file-name)  'face 'info-title-3
            'help-echo (buffer-file-name)))
    
        ))
    

    结合......

    (custom-set-faces
     ;; custom-set-faces was added by Custom.
     ;; If you edit it by hand, you could mess it up, so be careful.
     ;; Your init file should contain only one such instance.
     ;; If there is more than one, they won't work right.
     '(info-title-3 ((t (:inherit info-title-4 :foreground "white" :height 1.2))))
     '(info-title-4 ((t (:inherit info-title-4 :foreground "black"))))
     '(mode-line ((t (:background "#6483af" :foreground "#001122" :box (:line-width 3 :color "#6483af") :weight ultra-bold :height 118 :family "Monospace")))))
    

    ...我得到了一个很好的简单模式,它展示了我想要的大部分内容。还有更多的工作要做,但多亏了TacticalCoder,我又回到了正轨。

1 个答案:

答案 0 :(得分:3)

这是我使用的自定义模式行的一小部分(我不记得我发现它的位置),修改为您要求以另一种颜色显示缓冲区名称。在此示例中,我使用font-lock-warning-face(在我的配色方案中为红色')

这不是任何意思的完整模式:

(setq-default mode-line-format
  (list

    mode-line-front-space ; +-- just like in the default mode-line-format
    mode-line-mule-info   ; |
    mode-line-client      ; |

    ;; the buffer name; the file name as a tool tip if you hover the mouse on it
    '(:eval (propertize "%b " 'face 'font-lock-warning-face
        'help-echo (buffer-file-name)))

    '(:eval (propertize (if overwrite-mode "OVERWRITE" "")
              'face 'font-lock-warning-face
              'help-echo (concat "Buffer is in "
                           (if overwrite-mode "overwrite" "insert") " mode")))

    "%-"                  ; fill what's left with '-'
    ))

这对你有用吗?我确实把部分放在了font-lock-warning-face中OVERWRITE的部分,以防你变成覆盖(我有点讨厌处于覆盖模式,所以我希望它非常明显)。