在自定义emacs次要模式中轻松显示有用信息 - 模式行难题

mga*_*lgs 4 emacs modeline

背景:

我正在创建一个次要模式,为用户提供关于他们访问的缓冲区是否使用制表符或空格进行缩进的"提示"(只需检查缓冲区中每行的第一个字符).我计划添加的一些功能包括模式行中的信息显示和一些在使用制表符或空格,制表符宽度等之间切换的功能.

我并不真正关心这种次要模式的用处.事实上,如果不存在同样的事情,我会感到惊讶.大多数情况下,这是一种编写小模式的练习.


题:

在启用/禁用我的次要模式时,从模式行插入/删除文本的干净,非突兀的方法是什么?我不希望用户必须修改他们mode-line-format,我只想非破坏性地插入和删除文本.现在我正在使用一个看起来像这样的函数:

(defun update-indent-hints-mode-line (what-this-buffer-loves)
  (let ((indent-hints-mode-line-text (concat " " "[" what-this-buffer-loves "-loving" "]"))
        (my-mode-line-buffer-identification
         (remq " [Tab-loving]" (remq " [Space-loving]" mode-line-buffer-identification))))
    (setq mode-line-buffer-identification
          (add-to-list 'my-mode-line-buffer-identification
                       indent-hints-mode-line-text
                       t))
    (force-mode-line-update)))
Run Code Online (Sandbox Code Playgroud)

它工作正常,但搜索和删除"[Tab-loving]"和"[太空爱好]"似乎非常hackish和丑陋...有一个更清洁的方式来做它?

奖励积分: 对我同样卑微的小模式的卑微开头的任何评论:https: //github.com/mgalgs/indent-hints-mode/blob/master/indent-hints.el 我显然是一个elisp n00b,但我在这里学习.

Tre*_*son 5

检查变量minor-mode-alist,该变量将变量与模式行中的字符串相关联.如果你改变你的代码,无论是变量设置tab-lovingtspace-lovingt(和其他变量设置为nil),你可以得到你想要什么:

(setq minor-mode-alist (cons '(space-loving " [Space-loving]")
                             (cons '(tab-loving " [Tab-loving]")
                                   minor-mode-alist)))
Run Code Online (Sandbox Code Playgroud)