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

时间:2011-07-12 23:01:59

标签: 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)))

它工作正常,但是搜索和删除“[Tab-loving]”和“[太空爱好]”看起来非常h​​ackish和丑陋......有更清洁的方法吗?

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

1 个答案:

答案 0 :(得分:5)

检查变量minor-mode-alist,它将变量与模式行中的字符串相关联。如果您将代码更改为将变量tab-loving设置为t或将space-loving设置为t(并将其他变量设置为nil),则可以得到你想要的东西:

(setq minor-mode-alist (cons '(space-loving " [Space-loving]")
                             (cons '(tab-loving " [Tab-loving]")
                                   minor-mode-alist)))